jQuery serialize ve serializeArray fonksiyonları

Bu yazıda jQuery ile serileştirme (serialize) olaylarına değineceğim. Serileştirme, bir grup form elemanın elemanAdi ve içindeki değer olarak bir string haline yada dizi (array) haline getirilmesine diyoruz. Bu yöntem özellikle ajax ile veritabanı işlemleri yaparken kullanılıyor.


Okumaya devam et jQuery serialize ve serializeArray fonksiyonları

Boş yazı

Burada dünya kadar hakaret ve sizin sinir olduğunuz şeylerin yazılı olduğunu varsayın. Okuduklarınız sinirinizi bozsun, akşam başınızı yastığınıza koyduğunuzda buradaki hayal ettiğiniz yazıları düşünün ve uyumayın. Herkesin eğlendiği bir durumda bu yazılar aklınıza gelsin ve siz eğlenemeyin.

İşte uzun zamandır içinde bulunduğum durum bundan ibaret, sadece düşünüyorum ve sinirlerim bozuluyor.

EntityFramework SqlMigrations ile Verileriniz Kaybolmasın

Başlıktan bir şey anlamamış olabilirsiniz ama eğer Ado.Net Entity ile ilgiliyseniz bu yazı çok hoşunuza gidecek ;)

3-5 dakika önce Google Reader dan Code First Migrations: Walkthrough of August 2011 CTP başlığıyla gördüğüm yazıyı hemen sizlerle paylaşmak istedim.

Bildiğiniz üzere eğer modelinizi code-first yaklaşımıyla oluşturmuşsanız ve projenizi çalıştırmışsanız veritabanı otomatik olarak oluşuyor ve sonrasında modelinizde yaptığınız değişikliği veritabanına uygulamak için context inizin içine “System.Data.Entity.Database.SetInitializer(new System.Data.Entity.DropCreateDatabaseIfModelChanges<Test.Models.TestContext>());” ifadesini ekleyerek modeldeki güncellemeyi veritabanımıza uyguluyorduk. Fakat bu yöntemde istenmeyen bir durum oluşuyor ve eğer veritabanında bilgi varsa bilgilerde gidiyordu çünkü bu kod veritabanını komple kaldırıp yeniden oluşturarak güncelleme işini yapıyordu. Artık bu can sıkıcı durumdan kurtuluyoruz !

Yapmamız gereken tek şey projemize “EntityFramework.SqlMigrationspaketini eklemek. Sonrasında yeni bir alanı güncellemek için paket yönetici konsoluna “Update-Database” komutunuı yazıp çalıştırmamız yeterli oluyor. Eğer varolan bir alanın adını güncellemek istiyorsak “Update-Database -Renames:”kullanici.Email=>kullanici.EmailAddress”” komutunu çalıştırmamız yeterli. SqlMigrations’ un diğer özelliklerine buradan bakabilirsiniz. Bu işlemler yapılırken veritabanı içindeki bilgi kaybolmuyor sadece ilgili değişiklikler yapılıyor.

Bu mekanızma sayesinde önemli bir açığın kapandığını düşünüyorum, yukarda da belirttiğim gibi can sıkıcı bir durumdu ve iki türlü iş ile uğraşıyorduk. Biraz alel acele yazmak zorunda kaldım fakat durum sanıyorum anlaşılmıştır :)

Türkiye’ nin ilk Olimpiyatı, Trabzon 2011 Avrupa Gençlik Olimpik Oyunları

Türkiye’ de yapılacak olan ilk olimpik oyunlar, Trabzon 2011 Avrupa Gençlik Olimpik Oyunları olacak. Bu durum beni hem Türkiye’ m hemde Trabzon’ um adına çok mutlu ediyor vede heyecanlandırıyor.

Biz Sözenler Bilgisayar olarak yanlışta hatırlıyor olabilirim, portalı yapmaya başladığımızda sayacımızda 500 küsür gün yazıyordu, bugün ise sadece 6 gün yazıyor. Sürecin hemen hemen başından beri bu organizasyonda bir rol almak bizi gerçekten gururlandırıyor. Bu durumun bilincinde olarak elimizden gelen tüm gayreti göstermeye çalışıyoruz.

Son 6-7 gündür organizasyonun yönetim merkezinde bulunan basın binasının 3. katında, Olimpiyatların tüm bilişim teknoloji alt yapısının ihalesini alan, Türkiye’ nin en önemli bilişim şirketlerinden biri olan Innova ile birlikte çalışıyorum. Ahmet arkadaşımla birlikte portaldan sorumluyuz.

Bu ekipte görev almaktan son derece mutluyum, çok sıcak bir çalışma ortamımız var. Yöneticisinden çalışanına kadar herkesle çok kısa bir zamanda kaynaştık, hepsi süper insanlar. Günlerin çok yoğun geçmesine rağmen ufflayan kimseye rastlamadım, herkes sorumluluğunun bilincinde elinden gelenin en iyisini yapmaya çalışıyor.

Her gün yeni bir şey öğrendiğim bu ortamda, çok büyük bir tecrübe kazandığımı, kazanacağımı düşünüyorum. Bana yazılım geliştirme anlamında fazla bir katkısı olmasa da, yeni insanlar tanıma, çalışma ortamı, iş bölümü, işlerin işleyişi, çalışanın motivasyonu, projenin her açıdan analiz edilmesi, farklı kavramlar ve aynı iş dilini farklı dillerde konuşan onlarca insanın bir arada olmasının getirdikleri gibi.. bir sürü tecrübeye sahip oluyorum. Olimpiyat sırasında ise bizi nelerin beklediğini tahmin bile edemiyorum, inşallah Allah yüzümüzü kara çıkartmaz da Türkiye‘ mize Trabzon‘ umuza yakışır bir iş çıkartırız.

Olimpiyat ile ilgili tecrübelerimi fırsat buldukça paylaşmaya çalışacağım. Durmak yok çalışmaya devam :)

ADO.NET Entity’ e Giriş eKitabı

ADO.Net Entity’ e başlangıç yapmak için faydalı olacağına inandığım bir eKitap yazdım. Umarım konuya ilgi duyan arkadaşların işine yarayan bir kaynak olmuştur. Gelen istekler üzerine sürekli güncellemeye çalışacağım bu kitabı buradan indirebilirsiniz. Olumlu olumsuz görüşlerinizi belirtirseniz çok mutlu olurum ;)

Profil sayfası kişiselleştirme ve ComplexType

Başlık biraz karışık oldu sanırım, biraz açayım. Profil sayfası kişiselleştirme dediğim; Twitter, FriendFeed gibi sayfalarda arkaplan resmini, konumunu ve renkleri isteğimize göre düzenleyebiliyoruz, yani profilimizi kişiselleştirebiliyoruz. ComplexType ise ilk konudan bir hayli alakasız aynı zamanda ComplexType olayını anlamak için çok alakalı. En kaba tabirle; modelimizde ki belirli özellekleri kümelediğimiz ve kod yazarken bize çok büyük kolaylık sağlayan bir yaklaşım.

Okumaya devam et Profil sayfası kişiselleştirme ve ComplexType

PagedList kullanarak verileri sayfalama

Verileri sayfalamak iyidir :D Giriş için cümle bulamıyorum resmen, neyse siz girdik sayın :)

Sağa sola bulaşmadan Nuget Gallery den PagedList.Mvc paketini projemize ekliyoruz. Nasıl ekliyoruz sorusunun cevabını burada bulabilirsiniz. PagedList açık kaynak bir proje, github sayfasına buradan ulaşabilirsiniz.


Okumaya devam et PagedList kullanarak verileri sayfalama

Ajax ile daha fazla kayıt göster olayı (Load More Data)

Yine kullanımını ilk olarak Facebook ve Twitter’ dan gördüğümüz bu olayın temel mantığını bildiğimiz sayfalama oluşturuyor. Neden bu şekilde bir sayfalama kullanmak gerekiyor isterseniz bunlara bir bakalım.

  1. Sayfa komple yenilenmeyeceğinden daha işlevsel. Örneğin; kullanıcı video izlerken altında ki yorumları sayfa sayfa dolaşmak isterse, video yarıda kesilmeyecektir.
  2. Sayfanın sadece ilgili yerini, ilgili kayıtlar kadar güncelleyeceğimizden daha performanslı. Bu performans sunucu tarafında; daha az sistem kaynağı tüketimi, kullanıcı tarafında ise; sayfanın yüklenme süresi olarak gözlenebilir. Özetlersek sunucudan yapılan isteği minimize etmiş oluyoruz.

Çektiğim videoların birinde dile getirdiğim bir konu vardı, yukarıda ki maddeleri görünce yazılı olarak da eklemek istedim. Anlık çok fazla kullanıcıya, çok fazla isteğe cevap verme durumunda olan siteler ajaxı bizim kara kaşımıza yada şekilli olsun afilli olsun diye kullanmıyor. Örneğin Facebook her işlemde sayfayı yeniden yüklemeye kalkarsa altından kalkılamaz bir yükle karşı karşıya kalır. Anlık Facebook’ a yazılan yorum, mesaj yada benzeri girdileri düşündüğümüzde ajaxın hava yastığı görevi gördüğünü hayal etmek güç olmasa gerek. Özetlemek gerekirse, ajax yaklaşımı şekilden ibaret değildir ;) Konumuza geri dönelim.

Okumaya devam et Ajax ile daha fazla kayıt göster olayı (Load More Data)

Textbox içinde arama (Twitter Style)

Twitter da tweet yazarken @ işaretiyle başlayıp yazmaya başladığımızda, arkadaşlarımızı bulmamıza olanak sağlayan bir arama mekanızması bulunuyor. Geçenlerde lazım oldu epey bir aradım fakat tam olarak bu işi yapan bir betiğe rastlayamadım, bende isteğime en yakın örneği bulup üzerinde bir kaç ufak değişiklikle amacıma ulaştım. Faydalandığım örneğin adresini bir türlü bulamadım, bu yüzden paylaşamıyorum :S Olayın temelinde jQueryUi – Autocomplete‘ nin Multiple Values özelliği bulunuyor.

Bu işi yaparken jQuery ve jQueryUi yi kullanıyoruz, diğer dinamik kısım için php, asp, java vb.. diller kolaylıkla kullanılabilir. Ben asp.net mvc (c#) ile bu örneği gerçekleştirdim. Mekanızma şöyle çalışıyor; adres satırından aranacak bilgiyi gönderip, veritabanında aramamızı gerçekleştirip sonucu geriye json olarak döndürüyoruz.


Okumaya devam et Textbox içinde arama (Twitter Style)

Easy Db Tool ile veritabanı işlemlerini kolayca halledin.

Epey bir zaman kullandığım veritabanı aracımı sizlerle paylaşmak istedim. Bu vesileyle üzerimde büyük emeği ve desteği bulunan sevgili arkadaşım, kardeşim Yunus Emre Çavuşoğlu‘ na teşekkürlerimi sunmak istiyorum.

Bu araçla birlikte;

  1. Açık kaynak olduğu için, istediğiniz gibi şekillendirebilirsiniz.
  2. Veritabanına ekleme, silme ve güncelleme işlemlerini kolaylıkla yapabilirsiniz.
  3. Veritabanında ki bilgileri kolayca DataTable ye kolayca aktarabilirsiniz.
  4. Oluşturduğunuz formdaki eleman isimlerinin veritabanındaki isimlerle aynı olması şartıyla bir kerede formdaki tüm bilgileri ekleyebilir veya güncelleyebilirsiniz. (* alan adlarının başına 3 karakterli kontrollerin kısaltılmış ön ekinin girilmesi gereklidir. Örneğin; txtsoyadi, ddlsehir, rblcinsiyet gibi..)
  5. Veritabanında ki bilgileri DataTable ye aktarırken bilgiyi önbellekte (cache) tutma ve bu belleği basit bir şekilde yönetme.

Kullanımı, öncelikle veritabanında ki tablomuza karşılık gelen bir sınıf yazıyoruz. Bu sınıfta id alanını belirtmiyoruz , zamanında böyle yapmışım böyle kalmış :)

    // Poco Class
    public class testTable
    {
        public string name { get; set; }
        public string email { get; set; }
        public DateTime? createDate { get; set; }
        public int? age { get; set; }
    }

Normal ekleme işlemi

            testTable tt = new testTable
            {
                name = "test",
                email = "mail@mail.com",
                age = 18,
                createDate = DateTime.Now
            };

            db.Insert(tt, true);

Formda ki bilgileri ekleme işlemi;

<div runat="server" id="divForm">
 name <asp:TextBox runat="server" ID="txtname" /> <br />
 email <asp:TextBox runat="server" ID="txtemail" /> <br />
 age <asp:TextBox runat="server" ID="txtage" /> <br />
 <asp:Button Text="Add" runat="server" ID="add" onclick="add_Click" />
</div>
db.Insert(new testTable(),divForm,false);

Örneklerde ki true, false olarak ifade ettiğimiz değer, eklenilen kaydın id sinin geriye integer olarak dönüp dönmeyeceğini ifade ediyor. Diğer örnekler ve EasyDbTool için gitHub sayfasını ziyaret edebilirsiniz https://github.com/apoStyLEE/easy-Db-Tools

DataAnnotationsExtensions ile form doğrulama (validation)

Asp.Net Mvc’ de doğrulama (validation) işlemleri için modelimizdeki alanlara açıklamalar (Annotations) yazıyoruz. Bu alan zorunludur yada en fazla 10 karakter girilebilir gibi en temel doğrulama kuralları varsayılan olarak gelirken, e-posta yada adres doğrulama gibi işlemler için kendi doğrulama fonksiyonlarımızı yazıyoruz. Nuget Gallery deki DataAnnotationsExtensions.MVC3 paketiyle bu ekstra yükten kurtulabiliyoruz. İlk göze çarpanlar; e-posta doğrulama, en az uzunluk, adres doğrulama, şifre uyumu ve dosya uzantısı kontrolü. Daha fazlası için projenin ana sayfasına bakabilirsiniz.

Paketleri projemize nasıl eklediğimizi şurada yazmıştım. Örnek kullanım şu şekilde.

    public class modelim
    {
        public int id { get; set; }

        [Email]
        [Required]
        public string eposta { get; set; }

        [FileExtensions("png|jpg|jpeg|gif")]
        public string dosyaAdi { get; set; }

        [Min(2,ErrorMessage="en az uzunluk 2")]
        public int sayi { get; set; }

        [Required]
        public string sifre { get; set; }
        [Required]
        [EqualTo("sifre",ErrorMessage="Şifreler aynı değil")]
        public string sifreTekrar { get; set; }

        [Url]
        public string adres { get; set; }
    }

aSanalPos kullanıma hazır.

Sanal posun lazım olduğu yerlerde kullandığım basit bir sınıfım vardı. Biraz düzenleyip sizlerle paylaşmak istedim. Esasında benim yaptığım bir şey yok, sadece bankaların verdiği kodları bir araya topladım. Projenize basitçe ekleyebilir ve kullanabilirsiniz. Şimdilik şu bankaların posları bulunuyor;

  1. İş Bankası
  2. Garanti Bankası
  3. Vakıfbank
  4. Akbank
  5. Yapı Kredi
  6. FinansBank
  7. DenizBank

Projenin Git sayfası https://github.com/apoStyLEE/aSanalPos

Örnek Kullanım;

public void Cekim() {

            // kullanıcıdan kart bilgilerini alıyoruz.
            PosForm pf = new PosForm {
                ay = 1,
                yil=2011,
                guvenlikKodu = 123,
                kartNumarasi = 1234567891234568,
                kartSahibi = "kart sahibi",
                taksit = 3,
                tutar = 1.00
            };

            // Poslarımıza yukarıdaki bilgileri gönderiyoruz.
            Pos p = new Pos();

            // Örnek gönderim;
            p.Akbank(pf);
            //p.GarantiBankasi(pf);
            //p.VakifBank(pf);
            //p.YapiKredi(pf);
            //p.IsBankasi(pf);

            // Poslardan geriye dönen bilgileri alıyoruz.

            if (p.sonuc)
            {
                // Çekim işlemi başarılı ise, geri dönen bilgileri alıyoruz.
                // Genellikle bu bilgiler veritabanında saklanır.
                // Bankadan bankaya değişiklik göstereceği için, alanlardan bazıları boş gelebilir.
                Response.Write(p.referansNo);
                Response.Write(p.groupId);
                Response.Write(p.transId);
                Response.Write(p.code);
            }
            else
            {
                // Çekim işlemi herhangi bir sebepden dolayı olumsuz sonuçlanmışsa, bankadan dönen hatayı alıyoruz.
                // Hata kodlarının açıklamaları ilgili banka dökümantasyonunda belirtilmiştir.
                Response.Write(p.sonuc);
                Response.Write(p.hataMesaji);
                Response.Write(p.hataKodu);
            }

        }