21 Aralık 2015 Pazartesi

Star Wars 2012

        Star Wars(Yıldız Savaşları),George Lucas(1) tarafından tasarlanan efsane fim serisi.Sinema sektöründe altın harflerle yazılı bir çalışma.2015 yılını bitirmek üzere olduğumuz bu günlerde Türkiye'de bile gündem  ışın kılıçları,Darth Vader ve stormtrooper maskeleri,uzay araçları,akan galaksi ekranı.Koca otomobil firmalarının para basıp reklamlarında kullandığı,BİM(2)'in bile bardağını,şapkasını,yastığını,tshirtlerini satarak nasiplendiği, bizim gibi ortadoğu ülkesi vatandaşlarını sevindirdiği günler yaşıyoruz.Evet yanlış duymadınız BİM,Star Wars ve BİM'den satın alınan kupaları,şapkaları ezik bulan ortadoğunun bağrından kopan züppeler...

        Sosyal medya haftalarca Star Wars ablukası altındayken ( yeni filmi viyondayken  https://www.youtube.com/watch?v=sGbxmsDFVnE )  bir an yakın geçmişim gözümün önüne geldi.Kütahya DPU son sınıf bitirme tezim,adı Star Wars 2012 olan.Hayatlarında kod yazdıkları meçhul insanlara proje beğendirmeye çalıştığımız günler.Üniversite hakkında fazla konuşmak istemiyorum,kantininde takılmak harici pek çekici gelmeyen bir mekandı.Tez konuma gelirsek,XNA Framework ile 2D oyun tasarımı.O zamanın şartlarına göre elimden geldiğince kendimi geliştirmeye çalıştığımı düşünüyorum.Şu an daha iyisini yapabilirdim diye söylensemde sınıf olarak yönlendirme konusunda sıkıntı çekiyorduk.Oyun yapımı konusunda kendime başlangıç noktası bulmuştum,XNA Framework.Şu sıralar MonoGame(3) çatısı altında yeniden hayat bulan proje Microsoft'un desteğini kaybetse bile Xamarin(4) ile yoluna devam etmektedir.Ama bu işe giriş yapmak için sağlam ve basit bir yapıya ihtiyaç duyanlara her zaman önerim olmuş ve olacaktır bu Framework.Oyunum 3 level'dan oluşmaktadır.O zaman ki bilgi ve birikimime göre kendi kendime iyi bir şeyler yapmaya çalıştığımı söyleyebilirim.Takdir sizin.



Source Codes : here 
1) George Lucas and Star Wars
2) BIM
3)MonoGame
4)Xamarin

14 Aralık 2015 Pazartesi

Cannot insert the value NULL into column 'columnName', table 'dbo.Table'; column does not allow nulls. INSERT fails. The statement has been terminated.

        Veri tabanında içinde veriler olan tablonuz var ve siz bu tabloya yeni bir kolon eklemek istiyorsunuz.'Allow Nulls' seçeneğini kapatmak istiyorsunuz.Yani kolonun değerinin null olmasına izin vermek istemiyorsunuz.Bu sırada "Unable to modify table.Cannot insert the value NULL into column 'columnName', table 'dbo.Table'; column does not allow nulls. INSERT fails. The statement has been terminated." hatasıyla karşılaşacaksınız.Bu hatanın meydana gelme sebebi o an tablomuzda kayıtlı bulunan diğer verilere bu kolonun eklenmesi ve bunlarda ki değerlerin null olmasından kaynaklanıyor.Bundan kurtulmak için kolonun default value kısmını doldurabilirsiniz.Amacımız örneğin o an tablomuzda 100 adet kayıt varsa onların ilgili kolonunu(sonradan eklediğimiz) null olmayan bir değerle doldurmak.Benim örneğimde guid adında text tipinde veri tutan bir kolon ekliyorum.Allow nulls seçeneğini işaretliyorum ki bu hata ile karşılaşmayayım ve tablomu öncelikle bu haliyle kayıt etmiş olayım.Sonra bütün tablomun kayıtlarının guid kolonunu default bir değerle manuel olarak güncelleyeceğim.Bu işlemden sonra tablonun design modundan ilgili kolonun null değer alabilme iznini kapatabilirim.





9 Aralık 2015 Çarşamba

Breadcrumb (navigation,ekmek kırıntısı) Nedir?



        Genellikle web sayfalarında kulanıcılara bulundukları sayfaya ulaşmak için hangi yollardan geçtiklerini hatırlatmaya yönelik bilgi linkidir.Aslında ana dizinden ilgili sayfaya ulaşmak için gezilmesi gereken sayfaları gösterir.Yazılımcılar bu işi meşhur Hansel ve Gretel kardeşlerden öğrenmiştir diyebiliriz.Eski toprak bu iki kardeşin web sayfalarında navigasyon konularına yönelik yaptıkları hizmetleri anmadan geçemeyeceğiz.(Tamam abartıyorum)Annelerinin veya üvey annelerinin yokluk yüzünden aç kalma tehlikesine karşı bulduğu dahiyane fikir sonucu iki kardeş kendilerini babaları tarafından ormana bırakılmış şekilde bulurlar.Ama kardeşler yol boyunca eve(ana sayfaya) dönüş yolunu bulabilmek için cakıl taşları ve ekmek kırıntıları(aha breadcrumbs) ile işaret bırakmışlar.(1)Burada masumların hesaba katmadıkları şey ise ormanda ki masum hayvanların masum bir şekilde kırıntılardan nasiplenmesidir.Tabi kardeşler dönüş yolunu kaybederler ve değişik maceralar yaşarlar.(2)Şaka bir yana bizler bu yapının benzerinin yapımı konusunda kafa yoruyor olacağız.

        Breadcrumb(Ekmek kırıntısı) örneği aşağıdaki resimde göründüğü gibidir.Değişik kullanımları mevcuttur.(Genellikle e-ticaret sitelerinde karşılaşabileceğimiz bir yapıdır)





        Son zamanlar artık SEO dostu tasarımlar ortaya koyma noktasında yarışa girişen yazılımcılar sayesinde zaten tarayıcımızda gördüğümüz linklerde nerede olduğumuz hakkında bizlere yeterli kırıntıları sunulmaktadır.




        Örnek olarak,Dota 2 oyunuyla ilgili istatistik sunan bu sitede(3) Herolar/WitchDoctor/Items kısmından nerede olduğumu anlayabiliyorum.

        Benim değinmek istediğim konu ise şu şekilde,elimde bir kategori sistemi var ve buna kategoriler eklemek istiyorum.Her kategorinin üst kategori(Parent Category,bir tane) ve alt kategoriler(Child Categories,birden fazla olabilir) diye alanları mevcuttur.Eğer bir kategorinin üst kategorisi null ise yani yoksa bu kategorimiz saygı değer üst kategoridir.Bunların ekleme veya ilişkilendirilme durumlarına değinmeyeceğim.Bunları hallettiğinizi varsayarak elinizde bir kategori listesinin bulunduğunu ve bu listenin her bir elemanının altında bulunduğu üst kategorisine doğru gezinti menüsünü oluşturmaya çalışacağız.

       Elimizde 4 adet kategorinin olduğunu varsayalım.Heroes isimli kategori üst kategorimiz(parent category)  olsun.Witch Doctor ve Timbersaw diyede alt kategoriler(child categories) olsun.Bu iki kategorinin parent i Heroes kategorisi olsun ve Witch Doctor bir adet alt(child) kategoriye sahip olsun.Onun adıda Items olsun.

Almamız gereken sonuç :
Heroes kategorisinin breadcrumb linki = Heroes
WitchDoctor kategorisinin breadcrumb linki = Heroes>>WitchDoctor
Timbersaw kategorisinin breadcrumb linki = Heroes>>Timbersaw
Items kategorisinin breadcrumb linki = Heroes>>WitchDoctor>>Items

        Biz bu aldığımız sonuçları oluşturacağımız Category nesnelerimizin BreadCrumb(String) alanında saklayacağız.Her nesne kendi ekmek kırıntısıyla eve dönüş yapısını içnide saklayacak.Bunlarıda örnek olarak kategorilerimizin listelendiği tabloda veya diğer aklımıza gelen uygun yerlerde kullanabiliriz.Bunu oluşturan bir fonksiyon tasarlıyoruz.Recursive(4) olarak çalışacak olan bu yapı kategori listemizin her nesnesini dolaşıp o nesnenin üst kategorisini bulana kadar yani üst kategorisi null olan kategoriye denk gelene kadar ekmek kırıntılarını takip etmek olacaktır.Bu işlemi her bir liste elemanı için tekrar edeceğiz.

public class Category : BaseObject
    {
        Category parent;
        string name;
        string breadcrumbLink;

        public Category Parent
        {
            get
            {
                return parent;
            }

            set
            {
                parent = value;
            }
        }

        public string Name
        {
            get
            {
                return name;
            }

            set
            {
                name = value;
            }
        }


     public string BreadcrumbLink
        {
            get
            {
                return breadcrumbLink;
            }

            set
            {
                breadcrumbLink = value;
            }
        }


List<Category> childList;

        public List<Category> ChildList
        {
            get
            {
                return childList;
            }

            set
            {
                childList = value;
            }
        }


        public string GetBreadcrumbLink(ref int counter, List<Category> categoryList, Category category)
        {
            if (counter == 0)
            {
                if (category.Parent == null)
                {
                    BreadcrumbLink += "<strong>" + category.Name + "</strong>(" + category.ChildList.Count + ")";
                }
                else
                {
                    if (category.ChildList.Count > 0)
                        BreadcrumbLink += category.Name + "(" + category.ChildList.Count + ")";
                    else
                        BreadcrumbLink += category.Name;
                }
            }

            counter++;
            if (category.Parent != null)
            {
                BreadcrumbLink = category.Parent.Name + ">>" + BreadcrumbLink;

                GetBreadcrumbLink(ref counter, categoryList, category.Parent);
            }

            return BreadcrumbLink;
        }


}


     
         Örnek Category sınıfımız yukarıda göründüğü gibidir.İçeriğinde Category sınıfından bir Parent,alt kategoriler için ChildList adında Category Listesi,String tipinde Name alanı(kategori adı) ve BreadcrumbLink adında String tipinde ekmek kırıntısı linkimiz mevcuttur.

         foreach (var category in categoryList)
            {
                int counter = 0;
                category.GetBreadcrumbLink(ref counter, categoryList, category);
            }

        Sistemimizde bulunan bütün kategorilerin geldiği listede her bir kategori nesnesi için yukarıda görüdüğümüz şekilde breadcrumblink alanını doldurabiliriz.

        Ben benzer sistemin iki değişik kullanımını örnek vereceğim.ASP.NET MVC kullananlar için tanıdık gelecek bu Controller sayfasında elimde bulunan kategorileri tablo halinde listelenmesini istiyorum.BreadcrumbStyleTable fonksiyonumuz bizlere tablonun satır bilgilerini döndürmektedir.View sayfamızda Html.Raw ile alacağınız bu kısımda tablomuzda kategori adları yerine ilgili kategorinin kategori hiyerarşisindeki konumunu yazdırıyoruz.(Örnek : Futbol>>Takımlar>>Bursaspor).TreeMenu fonksiyonu ise aynı kategori hiyerarşisine ağaç görünümü ile bakmamıza olanak tanıyor.

public class PanelCategoryController : Controller
     {
        // GET: Category
        public ActionResult Index()
        {
            var categories = Category.CategoryList;

            string table = "";
            int counter = 0;
            BreadcrumbStyleTable(ref counter,ref table,categories);

            ViewBag.table = table;
            return View(categories);
        }


public string BreadcrumbStyleTable(ref int counter,ref string table, List<Category> categoryList, int? parentId = null)
        {
            if(counter!=categoryList.Count)
                table += "<tr>";

            counter++;

            foreach (var category in categoryList)
            {
                int? categoryParentId = null;

                if (category.Parent != null)
                {
                    categoryParentId = category.Parent.Id;
     
                }

                if (categoryParentId == parentId)
                {
                    table += "<td><a href='Category/Details/"+category.Id+"'>" +category.BreadcrumbLink + "</a></td>";
                    table += " <td><a href='Category/Edit/"+category.Id+"'>Düzenle</a>/<a href='Category/Delete/"+category.Id+"'>Sil</a></tr>";
                    BreadcrumbStyleTable(ref counter,ref table, categoryList, category.Id);
                }
            }

            return table;
        }

public string TreeMenu(ref string table,List<Category> categoryList,int? parentId=null)
        {
            table += "<ul>";

            foreach (var category in categoryList)
            {
                int? categoryParentId = null;

                if(category.Parent!=null)
                    categoryParentId=category.Parent.Id;

                if (categoryParentId == parentId)
                {
                    table += "<li>" + category.Name;
                    TreeMenu(ref table, categoryList,category.Id);
                    table += "</li>";
                }
            }

            table += "</ul>";
            return table;
        }

1)Sefaleti yaşarken ekmek kırıntısından navigasyon olayı iyimiş.Acaba anneleri,"ben sadece pirzola yemek istiyorum kuru ekmek benim yaşam tarzıma uygun değil" diyerek mi çocukları evden kovmayı düşünmüş diye insan kendi kendine sormuyor değil.Yani sorun burada açlık değilde pirzola yiyememek miydi?Çünkü götürüldükleri yerin eve uzaklığı boyunca bırakacakları ekmek kırıntıları için belkide fırın arabasıyla seyahat etmeleri daha makul görünen birşey.

2) https://tr.wikipedia.org/wiki/Hansel_ve_Gretel

3)http://www.dotabuff.com

4)https://en.wikipedia.org/wiki/Recursion_(computer_science)  (Özyineleme)