28 Ekim 2014 Salı

Transcendence ve yapay zeka

  Merhaba, bu yazımda yakın bir tarihte vizyona giren Transcendence isimli bilimkurgu filmindeki yapay zeka kurgusunun başarısından bahsedeceğim. Ama filmi izlemediysen bu yazıyı bu paragraf sonrasında sonlandırmanı ve filmi izledikten sonra devam etmeni tavsiye ederim, spoiller içerir. Ancak farketmez diyorsan o da sana kalmış.

 Filmin başrol oyuncuları arasında Johnny Depp, Rebecca Hall, Paul Bettany ve Morgan Freeman gibi başarılı oyuncular var.  Oyunculuk performansı olarak drama sahnelerinde Rebecca Hall biraz sönük kalmış hatta kötü diyebiliriz. Daha önce vizyona giren benzer temalı ama bana göre başarısız bir film olan Lucy de karşımıza çıkan ve Her filminde inanılmaz bir performansına şahit olduğumuz Scarlett Johansson oynasaydı bu rolde keşke dedim içimden.

 Kurgu neden başarılı şimdi buna değineceğim. Daha önceki yapay zeka teması üzerine çekilen filmlerde karşımıza çıkan yapay zeka robotları, yazılımları akıllı olduğu kadar da şaka yapan, üzülen, nefret edebilen, aşık olabilen duygusal makineler olarak lanse edilmişti. Her ne kadar bilimkurgu da olsa olay burada saçma bir hale geliyordu.

 Teknoloji ne kadar gelişirse gelişmiş olsun duyguları olan bir makine yapmak her ne kadar bilimkurgu da olsa biraz fazla iddialı. Duygu programlanabilir bir yapı değildir. Hatta düşüncelerin tam tersi yönünde hareket edebilir. Daha önce yazmıştım yine yazacağım. İnsan düşünce olarak zeka, duygu ve karakter olarak üç parça halindedir. Zeka analiz ve tahminler yapar, duygu sadece biyokimyasal etkenlere göre hareket eder. Karakter ise zeka ve duygulardan gelen verileri alıp nihai kararı verir ve düşünce yada duygunun eylemini başlatır.

 Örnek olarak, şu anda uzun süredir çalıştığın sevdiğin iş arkadaşlarının olduğu bir işin var, ancak şimdi aldığın maaşın iki katını veren bir iş teklifi aldın. Beynin matematiksel analizlerini yapıp bu seçeneği kullanman yönünde bir sonuç çıkartır. Ancak duyguların arkadaşlarından uzak kalmanın ve yeni bir iş deneyiminin getireceği negatif duygusal yönleri değerlendirip olumsuz yönde oyunu kullanır.

Bu çelişki tam tersi de olabilir. Beynin şu anki işinin geleceğin için daha garanti olduğunu yeni maceraların riskli ve anlamsız olacağını düşünebilir, duyguların ise fazla para kazanmanın seni daha mutlu edeceğini düşünebilir. Net olan şudur, bir çatışma mutlaka olur.

Bir karar verilip eyleme geçilmesi gerekir. Burada ise karakter devreye girer. Beyinden ve duygulardan gelen verileri alır işler ve nihai eylem kararını verir. Bu kararı beyin de duygular da benimser. Karakter düşünme ailesinin reisidir.

İnsan gibi duyguları olabilen bir makine yaratabilmek için bu üç etkeni build etmek gerekir ki bu imkansız, demeyeyim ama çok zordur. Yapay zeka kullanan robotların, düşünen, karar veren, eylem kararı alan merkezleri bir tanedir. Kullanılan sadece beyindir.

Transcendence yapımcıları bunları düşünmüş olacak ki, yapay zekayı tasarlarken insan yapımı bir software değil de insan beynini kopyalayabilen bir software olarak ele almışlar. Bence filmin en can alıcı ve en başarılı kısmı buradaki kurgu düzeniydi.
Fimin ortalarına doğru yapay zeka ile insanlar arasında oluşan fikir ayrılıkları işlenmiş. Bu bölümlerde insan beyninin kendisinden daha fazla düşünebilen beyinlere karşı olan muhalefeti başarıyla ele alınmış. Aşk harika bir biçimde işlenmiş.

Filmden pek çok felsefi sonuç çıkartılabilir, ama uzun bir yazı oldu. Unutmadan devamı da çekilecek.


30 Haziran 2014 Pazartesi

Matrix daha gerçekci olsaydı nasıl olurdu?

Merhaba,
Suriyeli bir dilencinin kapımın ziline ısrarla basması sonucu halen ayakta olmam sebebiyle zamanı boşa harcamamak adına bu makaleyi yazmaya karar verdim.Umarım hoşuna gider.

 Matrix serilerine yeni bir film eklense ve felsefi değerini yitirmeden daha gerçekçi hale getirilmeye çalışılsa ne olurdu diye düşündüm. Nasıl olurdu acaba?

  Öncelikle Matrix serilerinde insanlığın düşmanı olan ileri seviye robot ve yapay zeka teknolojisinin yerine aynı şeyleri yapan ama daha gerçekçi bir şey bulmam gerekiyordu. Bunun için bulduğum cevap "Kapitalizm" oldu. İkisi de birbirine çok benzer amaçlara hizmet eden şeyler. Matrix' deki robotların da Kapitalizm'in de yaşaması için insana ihtiyacı var, ama sadece kendi amaçları için çalışan insanlara, diğerlerine karşı çok acımasızlar. İkisi de insanlara hizmet etsin diye yaratılmış ancak sonradan insanlığın belası haline gelmişler. İkisi de çok güçlü. İkisi için de çalışan milyonlarca robot(!) var.


  Kahinimiz Adam Smith olsun. Ancak senaryomda aktif olarak yeri yok, adı biliniyor sadece.

 Şimdi birde Ajan Smith'ler lazım bana, kendini kopyalayabilmesi lazım. Üstün güçleri olması lazım. Buraya da şu şekilde bir kurgu uyarladım. Ajan Simithler artık etten kemikten yeni nesil robotlar. Metal ile yapılmıyor, insanlardan upgrade ediliyorlar. Ayrıca artık hepsi aynı güç ile doğmuyor. Robotların gelişimi tamamen kendilerine bağlı. Büyük makine Kapitalizm için ne kadar iyi çalışırlarsa o kadar fazla güçleri oluyor ve versiyonları yükseltiliyor. Robotların hepsi yazılımını daha üst seviyedeki bir sürüm ile güncelleme derdinde.Çünkü versiyon güncelleme hem daha az yorulmalarına hem de daha fazla güçlenmelerine sebep oluyor. Ayrıca bu sayede kendisinden düşük seviyedeki robotları kendi versiyonunu güncellemek için iş gücü olarak kullanabiliyor.

 Geldik Neo'ya. Senaryom için bana büyük makinenin baş düşmanı, bin tane Ajan Smith'i havaya fırlatabilecek acaip çok güçlü bir kahraman lazım.. İşte senaryom burada tırtlıyor ve film mutlu son ile bitmiyor. Benim filmimde barış olmuyor, kazanan makineler.

Acaba! Gerçekten bir Matrix filminin ortasında olma ihtimalimiz var mı?

20 Mayıs 2014 Salı

Google Chrome SSL Hatası ve Çözümü

 Son dönemde ISP sağlayıcılardan kaynaklandığını düşündüğüm bir sorun oluştu. Adres çubuğuna bir keyword girdiğinizde SSL hatası uyarısı verip sayfa ya hiç açılmıyor yada olması gerekenden çok daha geç açılıyor.
 Bu durum Google ile sıkca işi olan biz Developer'lar için cinnet sebebi olabilecek seviyelere gelebiliyor. Aşağıda denediğim bir yöntem ile bu durumu aştım. Aslında yaptığım sadece SSL i biraz daha az kullanmak, ama işe yarıyor.

* Ayarlar kutusuna gelin,"arama motorlarını yönet" butonuna basın.
    1. kutucuğa:  http://64.15.117.59
    2. kutucuğa:  http://64.15.117.59/search?output=search&q=%s

Yazıp kaydedin,sorun düzelecektir.

17 Mayıs 2014 Cumartesi

Asp.Net webforms ile dinamik subdomain oluşturma 2

Daha önce de bu çözümün farklı bir yolunu açıklamıştım.Daha önceki makeleyi buradan okuyabilirsiniz. Ancak daha kısa ve daha sorunsuz bir yolu daha varmış, o kısmı da paylaşmak istiyorum.

IIS Maneger i açıyoruz ve sitemizin bindings kısmına girip aşağıdaki gibi bir kayıt ekliyoruz. Ancak bu kaydı daha öncesinden default web sitenizden kaldırmış yada default web sitenizi suspend durumuna getirmiş  olmanız gerekli.


Bu kayıt ne işe yarıyor? Bu kayıt ile IIS e şu komutu vermiş oluyorsunuz. Sunucuya 80 portundan gelen tüm istekleri bu web sitesine yönlendir. Böylece olmayan bir subdomain isteği dahi olsa isteği işleyebililir hale geliyorsunuz. İyi çalışmalar.

13 Mayıs 2014 Salı

Ajax Html Data Post ile Data Encoding Problemi

 .Net 3.5 ve üzeri bir framework ile çalıştığımız projede Ajax post ile html data transferi yapmak istediğinizde aşağıdaki gibi bir hata alırsınız.
  Bunun sebebi, .net validation kütüphanesinin gelen veriyi tehlikeli bir data olarak kabul etmesidir. Bu datayı Jquery & Javascript ile ne kadar encode etmeye çalışırsanız çalışın, hatadan tam olarak kurtulamazsınız, çünkü ilginç bir şekilde client side yaptığınız encode işlemleri her zaman aynı sorucu çıkartamayabiliyor.
  Ancak aşağıdaki kodu Web.Config dosyasına eklediğiniz takdirde bu problemi bir daha yaşamazsınız. Server 'de ve local makinenizde aynı sonuçları üretir.

<httpRuntime requestValidationMode="2.0" />

Jquery ile QueryString işlemleri

JavaScript ile  client side olarak QueryStringler üzerinde işlem yapacaksanız, aşağıdaki methot a QueryString ismini parametre olarak verdiğinizde size verilen parametreye ait QueryString value sini geri döndürecektir.

   $.fn.GetQueryString = function (name) {
        name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]");
        var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"),
            results = regex.exec(location.search);
        return results == null ? "" : decodeURIComponent(results[1].replace(/\+/g, " "));

    }

Json serializer ve Datetime verileri

 Veritabanından DateTime tipinden gelen bir veriyi Json formatında serilize etmeye çalıştığınız anda json data size kullanmak istediğiniz gibi gelmez.
 Aşağıdaki methot ile en basit haliyle, gelen Json verisinden isteğiniz gibi bir çıktı üretebilirsiniz.

    $.fn.JsonDatetime = function (jsonVal) {
        if (jsonVal==null) {
            return null;
        }
        var ticks_string = jsonVal.substring(6);
        var ticks_number = parseInt(ticks_string);
        var orgDate = new Date("dd-MM-yyyy");
        orgDate = new Date(ticks_number);
        var parsedDate = (orgDate.getDate() + "-" + (orgDate.getMonth() + 1) + "-" + orgDate.getFullYear());
        return parsedDate;

    }

5 Mayıs 2014 Pazartesi

Kötü yönetim ve zararlarından bir kaçı.

   
 Kötü yönetim en büyük tahribatı kuşkusuz zaman üzerinde yapar. Bu yazımda zaman maliyetini en çok israf eden ve en anlaşılabilir olması açısından Start-up projelerinde diğerlerinden daha sıkca rastlanan bir durumun örneğini vermek istiyorum.

 Örneğin projemize teknik bilgisi ekipdeki developerlere göre çok düşük bir teknik yönetici atandı, yada yöneticiniz zaten böyle biri. Adam gitmiş seçkin üniversitelerden mezun olmuş, proje yönetimi ile eğitimler almış,farklı bir alanda daha önce yöneticilik yapmış.
Sorumlu olduğu alanlar projedeki hataların giderilmesi, development in geliştirilmesi ve ekibin yönetimi. Yöneticimiz üniversite hayatında veritabanı ve kod eğtimi almış ama yaptığı en büyük örnek proje bitirme ödevi olarak yaptığı tırt bir proje, web den de bihaber.

 Neyse, start veriliyor ve bir süre sonra projenin bir bölümünde sorun oluşuyor. Toplantı tertipleniyor, developer çalışanlar problemin detayı hakkında yöneticiyi bilgilendiriyor. Bu toplantı teknik seviyesi yeterli bir yöneticiyle olsa çok kısa sürede biter, hatta bu toplantıya yönetici sadece kendisi girerdi. Burada harcanan ciddi bir zaman maliyeti söz konusu. Bilgilendirme sonucunda yöneticinin teknik bilgisi yeterli olmadığından bir sonuç çıkartamıyor. Sonuç için tekrar developerlerden fikirler alıyor. Aldığı bu fikirlerden eleme yapıp problemin çözümü için en uygun stratejiyi belirliyor ve buna göre bir aksiyon planı oluşturuluyor.

 Bu başlı başına hatalarla dolu ve acemice bir planlamadır, nedenlerine basitçe şöyle sıralayabiliriz.

 1. Problemin teşhisi ve teknik detaylar için yöneticinin çok ciddi bir bilgilendirme alması gerekmektedir,ki bu her zaman doğru yapılamaz, eşittir gereksiz zaman maliyeti.

2. Developer kod yazmak için vardır, yönetici ise düşünmek ve iş geliştirme için. Developer i dinlemek iyidir. Ancak bir developer gününün büyük kısmını kod yazmak ile geçiriyordur ve teknik de olsa büyük resmi göremez,kendi bakış açısıyla yaptığı değerlendirmeleri vardır,faydalıdır. Ancak yapılacak en iyi aksiyon planının developerden geleceğini beklemek yeterince düşünmesini bilmeyen,yapılan çalışmalardan bihaber olan teknik yöneticilerin işidir. Daha da komik olanı uygulanan başarısız bir çözüm stratejisi sonucu  bu yöneticiler genelde sorumluluğu developerlerin üzerine yıkar (: Projeye hiçbir katma değerleri olmaz.

3- Developerler arasında fikir ayrılıkları olabilir, bir kısmı farklı çözümü savunur. Birini seçtiğiniz takdirde diğerleri motivasyon kaybına uğrar. Alınan kararların tüm ekip tarafından doğru bir çözüm olarak algılanabilmesi için yöneticinin fikirlerine saygı duyulmalıdır,en doğru düşüncenin bu olacağı ekip tarafından benimsenmelidir. Bu konuyu aşağıda detaylandıracağım.

3. Developer sıkılır, bu can sıkıcı toplantılarda asık suratlıdır ve bir an önce toplantının bitirilip çalışmalara başlamak ister, çünkü bu toplantıdan bu problem için diğerlerinin faydalı bir çözüm önerisi çıkarma olasılığı yoktur,ona göre zaman israfıdır,haklıdır. Yöneticisinin diplomalı torpilli bir salak olduğunu düşünür, kendi bakış açısıyla yine haklıdır. Çünkü yönetici kendisini değil, kendisi yöneticiyi yönlendirmektedir. Hiç bir konuda özgün ve sağlıklı fikri olmayan, development aşamasına en ufak bir faydası olmayacağını düşündüğü bir yöneticisi vardır. Tüm bu olumsuz gelişmeler developer üzerinde isteksizlik yaratır.

 Genel olarak değerlendirirsek bir yönetici öncelikle yönettiği insanların saygısını kazanmalıdır. Bu değer en iyi, karşılaşılan problemlerde ekibine vereceği işe yarar hayat kurtaran yönlendirmeler, tavsiyeler ile kazanılır. Bu beyaz yakalı personelin çalıştığı tüm sektörlerde böyledir. Hiçbir çalışan çalıştığı yerde problem yaşayıp performansı düşsün proje aksasın istemez, tam tersi performansı yükselsin, proje kazandırsın, göze batsın ve zam alsın ister. Ancak bazı yerlerde tıkanır, baskı altına girer. Bu anlarda en çok ihtiyaç duyduğu şey işe yarar bir çift kelime, bir tavsiyedir, etrafta dolaşan kafasında ampul yanan birisidir. Bu anlarda yöneticisinden gelecek harika bir çözüm önerisi onun yöneticisine karşı olan saygı ve sevgisini arttıracak(en sağlamından) etkenler olacaktır.



  Ve bu tavsiyeyi verebilecek yetenek ise diploma ile, dolgun cv ile oluşmaz, benzer sıkıntıları daha önce pek çok kez yaşanmış tecrübe edilmiş olması gerekmektedir. Bu yeteneği geliştirecek kaynak biraz zeka, çokça tecrübedir.
 


30 Nisan 2014 Çarşamba

Flat File mi? Sql Server mi?

 Büyük datalar ile çalışıyorsanız ve çok fazla temp datanız varsa bir süre sonra sunucunun işlemcisini çok fazla meşgul etmeye başlar ve uygulamanızın çeşitli noktalarını aksatabilecek IO exceptionları alırsınız.

 Sql Server her ne kadar Windows un bir parçası gibi çalışıyor olsa da ne kadar iyi konfigure ederseniz edin şayet bulk insert işlemleri yoğun bir projede çalışıyorsanız, Sql Server external bir uygulama gibi algılanmadığı için windows tarafından herhangi bir işlem kısıtlaması getirilmeden sistem kaynaklarını sonuna kadar zorlayacaktır. Geçmişte bir projede buna benzer bir problem yaşamış ve çözüm üretmemiz istenmişti.

 NoSql çözümleri üzerinde araştırmalara başladık. Projeye entegrasyon zaman maliyetinin diğer seçeneklere göre oldukca düşük olması ve olası bug fixing aksiyonlarının daha kısa zamanda neticelenmesi gibi etkenlerden dolayı diğer seçenekleri eleyip flat file db üzerinde çalışmalara başladım. Yaklaşık 800.000 satırlık bir data üzerinde yaptığım performans analizlerinin sonuçları oldukça etkileyiciydi. Test sonuçlarında Sql Server e kıyasla %70  ile %90  arası bir performans artışı olmuştu, ve bu sonuçlar da uygulamanın çiçek gibi olacağı anlamına geliyordu (:

 Ancak ek bilgi olarak şunu da belirteyim. Eğer bulk insert sırasında performans ihtiyacınız read işleminden daha fazla ise dataları byte formatında kaydedin. Bu işlem byte i tekrar text datasına parse ederken kullanacağınız zamanı başka işlemlerde kullanabilirmeniz anlamına gelir. Ama her şekilde byte de kaydetseniz text formatında da kaydetseniz, write yada read olayının birinde parse edilecek o datalar (:  Onun için hangi bölümde manevra alanınız daha fazla bunu tespit edin.

12 Nisan 2014 Cumartesi

Yazılımcıların izlemesi gereken 2 yapım


  Matrix'den sonra içeriğinde yazılım,yapay zeka barındıran yapımlar pek rastlayamadık. Bu yazıda yapay zeka ve kodlarla ilgili olanların ilgisini çekebileceğini düşündüğüm bir film ve bir televizyon dizisinden bahsedeceğim.

 Matrix yapay zeka ve teknolojiden ziyade felsefi yönleriyle ağır basan bir yapımdı. Bundan bir milyon yıl sonrasını da tahmin etmeye çalışırsak Matrix de bulunan yapay zeka ve teknoloji ortamının oluşması imkansız. Ancak felsefi konuları irdelersek başlık ile alakasız bir içerik ortaya çıkabilir (:

Gelelim ilk konumuza;

 Her
  Golden Globe ve Oscar ödülleriyle dikkat çeken filmde Joqun Phoenix(Thedore) in ve filmde hiç görünmemesine rağmen kurgunun inandırıcılığında önemli bir pay sahibi olduğunu düğündüğüm Samantha yı seslendiren Scarlett Johansson un etkiyeci bir performansı var.
  Senaryo kısaca gelişen teknoloji ile yapılan insansı bir yazılımın insanlar ile arasındaki ilişkileri anlatıyor.
  Eminim yapay zeka ile ilgili fikri olan birçok kişi kurgu hakkında benim gibi düşünmüştür. İnsan gibi konuşan bir makine yapılabilir, insan gibi düşünen bir makine de yapılabilir. İnsan gibi öğrenen hatta bunu çok daha hızlı yapabilen makine de yapılabilir.. Ama insan gibi duyguları olan bir makine! Bu olasılığı en baba yapay zeka hayalperesti düşünmez çünkü yapılamaz.


  Neden yapılamaz? Makinenin konuşması ve düşünmesi için nihai bir amaca hizmet etmesi gerekir. Bu amacın ne olacağına karar verebilir ve buna göre makineyi programlayabilirsiniz. Ama acıma duygusunun, merhametin yada Aşk ın hizmet ettiği nihai bir amaç yoktur. Beyin in referans aldığı matematiksel mantığa tamamen aykırıdır, Kalpten gelen bir emirdir. Kalp beynin aksine bencil değildir, aksiyon planlarını kendi çıkarına göre en iyi olabilecek şekilde hesaplamak yerine, acıma merhamet nefret yada Aşk etkenlerini de kullanarak hesaplar ve yorumlar.

 Bunun için sık sık kendimiz ile çelişkiye düşeriz. Önemli ve riskli bir aksiyon,eylem yapacağımız zaman beyin yeni yapacağınız bir aksiyon planının ne şekilde olması gerektiğini söyler. Ama kalbiniz bunun doğru olmadığını düşünür. Burada bir hakeme ihtiyaç vardır, bu da karakterdir. Karakter nihai karar vericidir, iki seçenekten birini seçer ve düşünce eyleme dönüşür. Ve bir karaktere sahip olan makine yapamazsınız..

 Tamam imkansız ama ya yapılsaydı? Ya makineleri duyguları olan ve bir karaktere sahip olan bir insan gibi programlayabilseydik,nasıl bir şey olurdu acaba? İşte senaryo burada ilgi çekici bir hale geliyor.

Dipnot olarak baltayla senaryonun beline beline vuran bir sahneden de bahsetmeden geçemeyeceğim. Asyalı çekik gözlü güzel bir kadın Thedore yi romantik bir akşam yemeği sonrası evine davet ediyor. Ama bizim Thedore robot Samantha ya aşık olduğu için onca ısrara rağmen teklifi geri çeviriyor,güzelim kadını ağlatıyor.(Burada az kalsın kapatıyordum)Bu sahne için Amerikan tarzı bir "Cmoon" ifadesi aşırı olmaz herhalde. Teknoloji ne kadar gelişirse gelişsin hiçbir erkek güzel bakımlı bir kadını bir robot a tercih etmez.Bu sahne bilimkurgu sahnesi olamaz (:


 Revolution

  "Her" kadar populer olmadığı için önce yapım hakkında kısa bir özet geçeyim. NBC yapımı bir televizyon dizisi.
Başrollerdeki oyuncular;
Yunanistan kökenli güzel oyuncu Tracy Spiridakos(Charlie Matheson),
Breaking Bad dizisinde Gustavo Fring roluyle hatırlayacağımız Giancarlo Esposito(Tom Neville),
Elizabeth Mitchell(Rachell Matheson)
Billy Borke(Miles Matheson)
Zak Orth (Aaron Pitman)

 Oyunculuk performansı olarak pek üst seviye diyebileceğimiz bir yapım değil, just it stop, dont please gibi repliklerin fazlalığı insanı rahatsız edebilecek duruma gelebiliyor. Yazılımcıların yada yazılıma ilgi duyanların en çok ilgi göstereceği karakter yetekli bir yazılımcı olan Aaron Pitman. Ama genel olarak değerlendirdiğimizde Tracy Spiridakos drama sahnelerinin hakkını sonuna kadar veriyor. Daha birçok yapımda görebileceğimizi düşündüğüm yetenekli bir oyuncu.

 Senaryo kısaca yaşanan teknolojik bir kıyamet sonrasında yaşananları ele alıyor. Bir askeri program için nano ve yazılım teknolojileri ile mikro boyutlarda robotlar üretiliyor.Ancak kontrolden çıkıyorlar ve saf enerji bağlamında her şeyi tükettikleri için ise elektrik kullanılamaz hale geliyor.

 Senaryoyu diğer tüm bilimkurgu dizilerinden ve filmlerinden ayıran bu robotların yetenekleri ve gerçekciliği. Robotlar nanotik boyutlarda olduğu için gözle görülmesi imkansız. Dünyanın her yerindeler, denizlerin dibinde yada insanların damarlarında,beyinlerinde dolaşıyorlar.Düşünceleri okuyabiliyorlar. Sürekli iletişim halindeler. Bahsettiğim "Her" filminin aksine bir duyguları yok, bir amaçları var,  daha fazla öğrenmek. Bu da senaryoyu Her filmindeki senaryoya göre daha gerçekçi yapıyor.

 Her şeyi bilen, her yerde olan,kimsenin göremeyeceği bir robot. Bir tür insan yapımı Tanrı.. Bu kesinlikle şimdiye kadar izlediğim diğer tüm bilimkurgu yapımlarında olmayan bir tema. Dünyayı ele geçirmek isteyen bir kötü adam olsaydım bu robotu yapmak için çalışmalara başlardım herhalde (:

 Konu hakkında yorumlarınızı bekliyorum efenim,keyifli seyirler (:

11 Nisan 2014 Cuma

Asp.Net webforms ile dinamik subdomain oluşturma


  Sanal subdomain oluşturma ihtiyacı hissedersek ve projemiz webforms ise işimiz biraz sıkıntılı. Ama çaresi yok değil. Google search sırasında webforms örnekli basit kayda değer bir kayıt bulamadım, genelde Mvc çözümleri ve dns servere user32.dll ile yapılan müdahaleler şeklindeydi. Bende diğer kaynaklara göre daha basit olduğunu düşündüğüm çözümü paylaşmak istedim benim gibi sorun yaşayanlar için (:

 Uzatmayalım, "www.domain.com/urun" gibi bir istek geldiği zaman ""www.domain.com/" isimli sitemizin dns ine göre sunucumuz isteği tanıyor ve cevap veriyordu. "test.domain.com" gibi bir isteğin de dns kaydı olmadığı için sunucumuz gelen isteği çözümleyemiyor ve cevap veremiyordu. Burası dikkatimi çekti, çünkü her ne kadar subdomain de olsa istek ".domain.com" olarak bitiyordu ve bu isteği bir yerde yakalayabilmemiz lazımdı. Ampul o an yandı ve olmayan subdomainleri karşılayabilmek için özel bir dns kaydı olabilirmi diye düşündüm. Kısa bir süre sonra sonuca ulaştım.

 Dns kayıtlarınıza "*.domain.com" isimli bir A kaydı daha eklediğiniz zaman gelen tüm subdomain istekleri iis default sayfasına yönleniyor. Yani "hede.domain.com" isimli bir subdomaininiz olmasa bile serveriniz isteğe cevap verebilecek hale geliyor.

 Buraya kadar güzel isteği yakaladık. Şimdi iki seçeneğimiz var.

 1- Sayfayı default pageden alıp gerçek sitemize yönlendireceğiz

 2- İsteği burada işleyeceğiz.

1. seçenek pek doğru sayılmaz,çünkü bir istek için bir iki işlem yürütmüş olacağız. 2. seçenek en mantıklısı. Ancak bu işlemi kullandığınız panellerde yapmanız biraz zor, IIS arayüzüne girip öyle yapmanız gerekli.

Burada işaretli olan site sayfamızın "*.domain.com" dns adresini ekledikten sonra olmayan domainleri karşılayacak olan default sitemiz.


Şimdi 1-Gelişmiş özellikleri tıklıyoruz ve ardından default web sitemizin dizinini gerçek web sitemiz ile değiştiriyoruz. 

Artık Default web sitemiz bizim gösterdiğimiz yerden cevap vermeye başlayacak. Ancak bu ayarları yaparken 2 sitenin de App Poollarının aynı seçenek olmasına dikkat edin.

Ancak istekleri Application_Start olayında işleyemiyoruz, yada henüz bulamadım (: Ama Application_BeginRequest olayında aşağıdaki gibi isteğimizi evire çevire kullanabiliriz.


Bu kadar (: Olabildiğince basit olarak açıklamaya çalıştım, herkese iyi çalışmalar.

6 Şubat 2014 Perşembe

İş Modeli ve yazılım geliştirme ilişkisi

 Yazılım geliştirme süreçlerinde proje yönetimi standartlarının etkin bir şekilde kullanılmaması sonucu iş modelinin ve yazılım geliştirme süreçlerinin çatışması kuvvetle muhtemeldir..

 Genelde pek fazla zamanınız yoktur, ve yapılacak geliştirmenin son hali, yaratacağı etki net olarak tahmin edilememektedir. Toplantılar yapılır, iş modeli için ne tür bir geliştirme olması gerektiği belirtilir. Daha sonra geliştirme süreci başlar. Ancak bir süre sonra geliştirmesine başlanmış yada tamamlanmış bir işlemin iptal edilmesine yada değiştirilmesine karar verilir.

 Geliştirme için yapılan toplantılardaki kararlara sadık kalınmamıştır, ama müşteri yada yönetici haklıdır. Çünkü toplantıda  sadece teorik analizlere göre kararlar alınmıştır. İş pratiğe geldiğinde yapılan aksiyonun istenilen sonucu vermediği yada vermeyeceği düşünülmüş ve bir takım aksiyonların güncellenmesi gerekmektedir.

 IT ekibinde bu karar pek hoş karşılanmamıştır. Çünkü bu işlem projenin bir çok bölgesini etkileyebileceğinden tekrar mantık haritası çıkarılması gerekmektedir. (Yazılan kodların değiştirilmesi, veritabanının yeniden tasarlanması vb. gibi.)

 Eğer yapılacak proje yada geliştirme orta yada büyük ölçekli bir işlem ise bir süre sonra geliştirme süreci tıkanır ve sinirler gerilir. Her iki taraftan da birbirini suçlayıcı ifadeler gelmeye başlar, iş geliştirme istedikleri bir değişikliğin bu kadar uzun sürmemesi gerektiğini düşünür, yazılım geliştirme departmanı ise istenilen taleplerin değiştirilmemesi gerektiğini düşünür. Aslında her iki taraf da haklıdır.

 Çözüm?
  İş geliştirme ve yazılım geliştirme süreçlerinin bir standart a bağlanması ve tarafların da bu standartlara katı bir disiplin ile uyması gerekmektedir.

Nedir bu standartlar? 

 Proje yönetiminde yukarıda bahsettiğim gibi sorunları ortadan kaldırmak için geliştirilen modeller vardır. Detaylı bilgiye buradan ulaşabilirsiniz.
 Ben kısaca en sevdiğim ve Türkiye şartlarına en uygun model olarak gördüğüm Spiral model den bahsetmek istiyorum. Bu modelde projenin bir başlangıcı vardır, ancak bitiş zamanı yoktur.

  Her bir geliştirme bir iterasyondur. Talepler gelir, geliştirme yapılır,yayınlanır, sonrasında iş modeline uygunluğu test edilir. Bu işlemlerin sonucunda bir rapor çıkartılır. Yapılan geliştirmenin ne derecede faydalı olduğu uygulamalı olarak analiz edilir. Bu analizlere göre tekrar bir iterasyon planı yapılır. Süreç bu şekilde proje istenilen seviyeye gelinceye kadar devam eder.

 Bu model yukarıda bahsettiğim sorunları ortadan kaldırdığı gibi yazılım geliştirme ve iş geliştirme ekibinin performansının da ölçeklenebilmesini sağlar. Çünkü model sizi her iterasyonun kayıtlarını tutmaya zorlayacak ve bu kayıtlar üzerinde de kimlerin etkinliğinin ne şekilde olduğu açık bir şekilde görüntülenebilecektir.

 Spiral model hangi tür durumlarda kullanılmalıdır?
 Eğer projeniz yada yapılacak geliştirme daha önce kullanmadığınız özellikler içeriyorsa, ve yapacağınız aksiyonları yapmış birilerinden iş modeli hakkında danışmanlık almamışsanız, yaptığınız projenin kullanılabilirliğini hiç bir zaman net olarak bilemezsiniz. Çünkü uygulamalı tecrübeden gelen net datalarınız yok. Teorik, bu olursa böyle olur gibi tahminleriniz var. Örnek olarak start-up projelerini gösterebiliriz.

Spiral model hangi tür durumlarda kullanılmamalıdır? 
 Eğer yaptığınız projeyi daha önce birkaç kez tekrar yapmışsanız, ve elinizde yapılmış projenin kabul edilen sonuçları varsa bu modeli uygulamaya gerek yok, burada waterfall model kullanabilirsiniz. Bunun sonucu size + zaman olarak yansıyacaktır. Örnek olarak paket program satılan bir firmayı düşünebiliriz.

4 Şubat 2014 Salı

Database Engine Tuning Advisor Nedir? - Sql

 Veritabanında index,statistic konularına pek hakim değilseniz ve kullandığınız veritabanı günden güne daha fazla data depolayıp büyüyecek ise yakın bir tarihte performans sorunları ile karşılaşmanız kuvvetle muhtemel.

 T-Sql performansınızı arttırmak için index ve statistics yazmanız gerekli, ancak bu işlemler dikkat ve tecrübe gerektiren aksiyonlardır. Performansı arttırmak için yapacağınız bir işlem tam tersi etkiler de yaratabilir. İşte bu noktada Sql Server'in kısaca "DTA" tool u dediğimiz "Database Engine Tuning Advisor" devreye giriyor.

Ne yapıyor?
Sizin yerinize veritabanını inceliyor, query performansını ölçüyor. Indexleri statistics leri oluşturuyor ve size bir sql script halinde veriyor. Size sadece bu scripti çalıştırmak kalıyor (:

Nasıl yapacağız?

Database Engine Tuning Advisor'ün sql performansını denetleyebilmesi için bir sql trace dosyasına ihtiyacı var. Öncelikle Sql Server Profiller i açıp bir trace oluşturuyoruz. Trace çalışırken veritabanında mümkün olduğu kadar çok işlem yapmamız ve veritabanını zorlamamız gerekiyor. Olası tüm sorguların çalıştığına emin olduktan sonra trace dosyamızı kaydediyoruz. Sonrasında Sql Server de "Tools/Database Engine Tuning Advisor" e tıklıyoruz. Bizden analiz edebilmesi için bir trace dosyası isteyecektir. Trace dosyamızı secip Start Anaylze butonuna tıklıyoruz.
  Sonrasında aşağıda görüldüğü gibi trace kodlarını analiz etmeye başlayacak ve sizin için index ve statistics leri oluşturacaktır.