Arda Çetinkaya Yazılım ve arada kendim ile ilgili karaladıklarım…

Visual Studio 2010 ile beraber veritabanı üzerinde bazı işlemleri Visual Stuio 2010 IDE’si üzerinden yapabilecek fırsatı buluyoruz. Bunlardan en güzeli iki farklı veritabanını bir biri ile kıyaslama… Geliştirme sürecindeki veritabanı değişikliklerini, “production” ortamına yansıtmak, sürekli güncellenebilecek uygulamalar geliştirenler için oldukça sıkıntılı bir süreç olabiliyor. Veritabanındaki güncellemelerin SQL “script”lerini düzgün bir şekilde hazırlamak, sorunsuz bir şekilde bir çok kere çalışabilecek olduğundan emin olmak zaman zaman zorlayıcı ve can sıkıcı oluyor. Özellikle sürüm kontrolünün düzgün yapılamadığı ortamlarda, bu daha da zorlaşıyor. Visual Studio 2010 ile bu sorunların üstesinden gelmemiz daha kolaylaşıyor. İki farklı veritabanının hem yapısal bütünlüğünü, hem de veri bütünlüğünü karşılaştırmalı olarak yapabiliyoruz. Önceleri başka programlar ile yapabildiğimiz bu karşılaştırmaları Visual Studio 2010 ile yapabiliyor olmak, geliştirme sürecini oldukça hızlandırıyor.

Basit bir örnek ile neler yapabiliyoruz kısaca ve basitçe bakalım. Bu örnekte kendi yarattığım “DatabaseCompare” veritabanı üzerinden gidiyor olacağım. Hızlı olmasına adına “Person” diye tek bir tablosu var. Bu bizim geliştirme sürecimizde kullandığımız veritabanımız. Aynı şekilde “DatabaseCompare_Prod” şeklinde bir veritabanımız daha olsun. Geliştirme sürecindeki veritabanımızın tıpa tıp aynısı ve “production” ortamında kullanıldığını farzedelim.

Yeni bir talepten dolayı bu veritabanında bir değişiklik ya da yenilik yapmamız gerekiyor. Geliştirme ortamımızdaki veritabanında ilgili değişiklikleri yapalım…Mesala “Person” tablosuna yeni bir kolon, veritabanına da “Address” diye bir tablo ekleyelim.

Bu değişiklikleri Visual Studio 2010 IDE’si ile takip etmek için, Visual Studio 2010’da menüden “Data” altından “Schema Compare” alt menüsünden “New Schema Comparision…” diyoruz.

Devam…

Fazla söze gerek yok…Biletix’in sayfasında ki açıklamayı paylaşıyor ve 30 Eylül 2010’a kadar kabuğuma çekiliyorum…

Bekleyiş Sona Erdi!
Günümüzün yaşayan rock efsanelerinden Ozzy Osbourne Türkiye’ye Geliyor!

Her biri hit olmuş şarkılar, liste başı albümler, Ozzyfest ile desteklediği
sayısız müzik grubu, nefes kesen performanslar ve 50 yıla uzanan bir müzik geçmişi  ile Ozzy Osbourne yaşayan bir efsane!

1948 yılında İngiltere’nin Birmingham kentinde doğan ve gerçek adı John Osbourne olan ‘’Ozzy’’,  heavy metal ve rock dünyasının en köklü gruplarından biri olan Black Sabbath ile birlikte yaptığı çalışmalarla profesyonel müzik kariyerine başladı ve sonrasında solo kariyeri boyunca da milyonlarca albüm sattı.

Sahne performansı ve renkli kişiliğiyle tanınan Ozzy Osbourne’un hayranlarının merakla beklediği İstanbul konseri 30 Eylül’de BKM  tarafından Turkcell Kuruçeşme Arena’da gerçekleşecek. Ozzy Osbourne’un konser öncesinde ve Temmuz ayında Sony Music etiketiyle yayınlanacak olan 10. stüdyo albümünün adı ise “Scream” olacak. Ozzy Osbourne konserde hem bu yeni albümünden hem de eski albümlerinden şarkılar söyleyecek.

Asp.net 2.0 ile .aspx sayfalarına “Event Validation” diye bir kavram gelmişti. .NET 1.1’den 2.0’a geçerken aşağıdaki hatayı eminim bir çok kişi almıştır.

Invalid postback or callback argument. Event validation is enabled using <pages enableeventvalidation=”true” /> in configuration or <%@ page enableeventvalidation=”true” %> in a page. For security purposes, this feature verifies that arguments to postback or callback events originate from the server control that originally rendered them. If the data is valid and expected, use the ClientScriptManager.RegisterForEventValidation method in order to register the postback or callback data for validation.

Bu hata aslında bizi bazı şeyler konusunda uyaran güzel bir hata. Daha doğrusu hata değil, uyarı…Bu bazı şeyler de tahmin edebileceğiniz gibi “cross-site scripting” ya da diğer adı ile XSS saldırıları oluyor. Asp.Net 2.0’da nasıl oluyor bu önce bunu hatırlayalım…Şimdi bir tane “DropDownList” kontrolümüz olduğunu düşünelim. Sunucu tarafında buna 5 tane eleman eklediğimizi farz edelim.(Item1,Item2,Item3,Item4,Item5)

Bu kontrol sayfada “render” olurken, eğer sayfa bazında “Event Validation” aktif ise, sayfaya bu kontrolün olabilecek tüm değerleri, kontrolün “UniqueID”si ile hash’lenir ve kayıt olur. Sayfaya sağ tıklayıp, kaynağı görüntüle dediğimizde “EventValidation=\eqweuıqrwjhbbdjhadfadgha………….” şeklinde karmakarışık bir şey görürüz. İşte bunlar bu hash’lenmiş kayıtlar. Örneğimizdeki 5 eleman hash’lenip bu şekilde kayıt olur. PostBack işleminde de bu hash ile PostBack değerleri XOR’lanır…Uygun bir durum olmadığında yukarıdaki uyarıyı(hatayı) alırız. Bu sayede sunucu tarafına, istemci tarafından bilinmeyen ya da beklenmeyen bir şey “POST” edilemez. Asp.Net 2.0’da bu şekildeydi…Bunu düzeltmek için sayfa bazında ya “Event Validation”ı kapatıyorduk, ya da kodlarımızı tekrar gözden geçiriyorduk.

Asp.Net 4.0’da işler biraz daha değişiyor. Eskiden sadece sayfa başına yapılan bu “Validation” işlemi, Asp.Net 4.0 ile beraber tüm “Request”lerde yapılıyor ve kavram “Request Validation” kavramına dönüşüyor. Ayrıca eski versiyonlarda sadece *.aspx sayfalarında yapılan bu kontrol, yeni versiyon ile tüm “resource”lar da yapılıyor. Yani diğer web servis çağırımlarında, başka dosya çağırımlarında…

Bu durum eski versiyonlardan yeni versiyonlara geçerken, sinir bozucu hatalar ya da uyarılar alabilirsiniz. Doğru olan, yapılan ya da yapılacak olan “request”leri gözden geçirmekte fayda var. Ama biraz daha az uğraştıran ve eski versiyonlardaki yaklaşımı kullanmak istersekte bunu kolayca yapabiliyoruz. web.config dosyasına aşağıdaki gibi bir ekleme yaptığımızda Asp.Net 4.0’da, Asp.Net 2.0’da ki “validation” kavramını kullanabiliyor olacağız.

<httpRuntime requestValidationMode=”2.0″ />

Bir sonraki yazı da görüşmek üzere…(:

Yazılım karmaşık(kompleks) bir kavram mıdır?

Aslında evet ya da hayır şeklinde cevabı olan bir soru değil bu. Ya da bu şekilde cevaplanması gereken bir soru değil. Bu sorunun cevabını irdelemeden önce, neden böyle bir soru sorup, ortamı geriyoruz önce bunu anlayalım…
Bu soruyu sormamızın amacı, önümüze çıkacak olan karmaşık problemleri çözmek için nasıl bir yol izleyeceğimizi kestirebilmek. Bir yazılımın karmaşıklığını düşünmek, geliştirme sürecinde ortaya çıkabilecek, planda olmayan engelleri ortaya çıkarmak adına oldukça faydalıdır.

Neden bu soruya cevap aradımızı anladıktan sonra, cevabını bulmak daha kolay olacaktır. Yazılım kavramı, yeri geldiğinde oldukça karmaşık, içinden çıkması zor, bir o kadar da sıkıntılı olabilir. Ama aynı şekilde çok kolay da olabilir. Bunların bir kaç nedeni var. Birazdan bu nedenlere geçiyor olacağım.

Yazılımda karmaşıklık dendiğinde genelde, sistemi oluşturan bileşenlerin bir birleri olan ilişkileri ya da bileşenlerin kendi içerisinde çağırdıkları diğer alt bileşenlerin sayısı gibi şeyler hesaplanır. Bunun için çeşitli formüller ve yaklaşımlar var, aslında tamamen ayrı bir başlık altında incelenmesi daha doğrudur. Ama biraz daha yukarıdan bakıp karmaşıklığı daha net görmeye çalışacağız.

Yazılım da karmaşıklığa neden olabilecek faktörler “Gereksinimler”,”Teknoloji” ve “İnsan” olarak 3 ayrı başlıkta toplanabilir.

Gereksinimler

Karmaşıklığa yol açabilecek en büyük etken, yazılıma ihtiyaç duyulan, yazılımın yaşamsal döngüsünü başlatan “Gereksinimler”dir. Gereksinimlerden dolayı, teknik anlamda oldukça kolay bir operasyon, oldukça karmaşık bir hal alabilir. Aslında bu karmaşıklık bazen kaçınılmaz olup, diğer başka faktörler ile minimum seviye indirilebilir.
Mesela bir sisteme kayıt olma işlemini örnek olarak alalım. Sistem için ad,soyad,TC Kimlik No. ve e-mail anlamlı olsun diyelim. Oldukça basit bir şekilde sisteme bu bilgileri alan bir arayüz yapıp, bu bilgileri sistem altına kayıt edebiliriz. Şimdi çeşitli ihtiyaçlardan dolayı, sistemi tekrar ele alalım…Kayıt işlemi sırasında TC Kimlik No. geçerli bir numara olduğundan emin olmamız gerekmekte. Ayrıca e-mail adresinin formatının geçerli bir e-mail adresi olduğunun da kontrolü gerekmekte. Ek olarak, e-mail adresinin gerçekten karşılığının olduğunu kayıt sırasında teyit etmemiz gerekmekte. Görmüş olduğunuz gibi bir kaç basit gereksinimden dolayı, ilk baştaki kayıt işlemi biraz daha karmaşıklaştı. Aynı anda 500.000 kişinin veri girişi yapabileceği bir gereksinim oluştu diyelim sonra da…Bir de farklı arayüz ortamlarında(mobil,web…vs.) giriş işleminin yapılması gerektiğini de düşünelim. İlk baştaki kayıt işlemi, son haline göre oldukça karmaşık bir hal aldı.

Teknoloji

Teknoloji kavramı, yazılımın yaşam sürecinde beyin görevini gören bir kavramdır. İnsanoğlu beynin karmaşıklığını çözememişken, teknoloji de yazılımın karmaşıklığına büyük etken sağlar aslında. Kullanılan teknoloji, yazılımın karmaşıklığına ayrıca yol da verir. Yani X teknolojisi ile başladığınız bir yazılım, gereksinimlerden dolayı Y teknolojisinden de az biraz kullanmanızı gerektirebilir. Bundan dolayı, yazılımınızın karmaşıklığı doğal olarak artmış olur. Yukarıda bahsetmiş olduğum kayıt örneğini bu açıdan yine ele alalım. İlk başta basit bir masaüstü uygulaması ile .NET Framework kullanarak kolayca kayıt işlemini yapabiliyorkan, aynı uygulamayı kiosk tarzı ya da belli bir amaç için çalışan cihaz üzerinde çalıştırmak istediğimizde C++ ile çok daha kolay yapabiliyor olabiliriz. Ya da milyonlarca kişinin sahip olduğu cep telefonlarında Java ile cep telefonlarına uygulama yazmak işimizi daha kolaylaştıracaktır. Bundan dolayı yazılım geliştirme sürecinde kullanılacak teknoloji, karmaşıklık adına oldukça önemlidir.

İnsan

Yazılımı kullanıcak ve geliştirecek kişi yazılımın yaşam sürecine direk olarak etki eder. Bu da zaman içerisinde yazılımın karmaşıklığını etkileri. Önce kullanıcı açısından bakalım. Yazılımı kullanacak olan kullanıcı belli ihtiyaçlarını karşılamak için yazılıma ihtiyaç duymuştur mutlaka. Genellikle bu ihtiyaçlarını önceden bir şekilde karşılayabildiği için, belli alışkanlıkları vardır. İşte bu alışkanlıklar, kullanıcının ne istediğinde önemli etken olabilmektedir. Birden fazla kullanıcı olduğundan dolayı da bu etki oldukça büyük olacaktır. Geliştirici açısından ele aldığımızda, karmaşıklık kat sayısı oldukça artabiliyor. Geliştirme sürecinde yer alacak kişilerin bilgi birikimleri, hakim oldukları teknoloji ve tecrübeleri, yazılımı ister istemez karmaşıklaştıracaktır. Bir yazılımcı, tecrübelerinden dolayı, X işini oldukça kolay yabiliyorken, aynı işi başka bir yazılımcı daha zor ama daha etkili bir şekilde yapabilir. Bu tarz yaklaşım farkları, yazılımın karmaşıklığında büyük etki yapabilir.

Başka faktörler de yazılımın karmaşıklığında etken olabilir tabi ki. Ama bu 3 kavramın en önemli ve etken olduğu kanısındayım. Ayrıca yazılımlar, doğası itibari ile mutlaka karmaşık olacaktır. Önemli olan bu karmaşıklığa yol açabilecek şeylerin farkında olup, karmaşıklığı minimuma indirmek. Neyse çok karıştırmadan,bitiriyorum bende…:) Şimdilik bu kadar…

Bugün itibari ile Visual Studio 2010 ve .NET Framework 4.0’ın son sürümleri çıkmış durumda. Akşam saatlerinde ilgili yerlerinden indirilebilir veya satın alınabilinir durumda olacak.Gözünüz aydın…:)

Yarın da Silverlight 4.0 sürümünün son hali ile tanışıyor olacağız. Son hazırlıklarınızı yapın…