Tuval, fırça ve boyalar


Masallarla büyür, hikayelerle yaşarız. İyiler ve kötüler vardır, bir de onların gideceği yerler. İkisiyle de özleşleşebilir ancak bunu iyi ve kötü olmadan yaparız. Çünkü ikisi de sıradan olmaktan vazgeçmeyi gerektir. Bir İstatistikçi demişti: Kafası fırında ayakları buzdolabında olan bir adamın ortalama sıcaklığı kabul edilebilir bir düzeydedir. Kabul edilebilir düzeyde yaşarız. İyi olduğumuzu varsayar, kötü olanı dışarıda ararız. Merak etmeyin, kötü olan da aynı şeyi yapmaya devam eder. Bu yüzden kötüler de yaşamaya devam eder, üzülmeden. İyi olanlar kimdir? Gözleri iyi görmeyenler. Gözleri iyi görse hemcinsleri gibi kötü olmaları kaçınılmazdır nitekim. Onlar hikayelere inanmaya devam ederler. Birileri iyidir. Efsanevi düzeyde iyi… Kitaplar böyle söylemiştir…

Yaşamakta olduğumuzun yazılmış veya yazılmamış bir hikaye olduğunu fark etmeyiz. Olasılıkların çokluğu onları sıradan olmaktan çıkarır küçük kafalarımızda. Oysa eğimi belli bir dere yatağındaki suyun akacağı yer de bellidir, hikayesi de bellidir. Bu su çağlayan olmayacaktır. Olmamalıdır da. Çağlayana dönüşmeye çalışan bir dere için iyi ve kötü yoktur, ne kadar su biriktirebildiği ve hızlı aktığı vardır. Dereler günah işleyemez. Dereler de kendi kişisel tarihlerini yaşarlar. Verecekleri hesap olmadığı için de ölmezler. Kurusalar da yatakları bellidir. Adınına ister kadar, ister determinite zinciri deyin sonuç değişmez.

İnsanlar ise iyi ve kötüdürler. Bu yüzden ölürler. Bu yüzden öldürürler. Öldükleri yer zamanla silindiğinen mezar taşlarına isimlerini yazdırırlar. Unutmamak için hikayeler anlatır, unutulmamak için hikayeleşirler. Ama her hikaye gibi onlar da kurgu ürünlerdir. Bir ressamın fırçasından çıkan her nesne gerçek olduğu halde tüm tablo gerçek değildir. Gerçeğin en fazla imgesi olabilir. İşte bu yüzden biyografiler de romandır. Belki romanlar da gizli biyografi parçalarının birleşimi.

Böyle bir düzlemde, gerçek olan bir kaç şey vardır: Tuval, fırça ve boyalar. Boyalardan siyaha kötü, beyaza iyi deriz. Diğer renkler hep ‘tartışmalıdır’. Fırça zaten bize ait değildir, görmeyiz de, eğer resim atelyesinde değilsek. Tuval ve ressam kaldı. Onların hangisinin benliğimiz, hangisinin geri kalanlar olduğunu bilmiyorum. Geri kalanların ise sadece tek bir benlik mi, bir benliğin ürettiği başka tuvaller mi olup olmadığını bilmiyorum. Ya da tüm her şeyin, dışına çıkıp bakamayacağımız bir kurgu olup olmadığını bilmiyorum.

Post hoc non est propter hoc: Bundan sonra ama bundan ötürü değil


Latince bir deyiş “Post hoc non est propter hoc” yani “Bundan sonra ama bundan ötürü değil” der. Bu deyişi çağımızda kullanacak çok daha fazla yer var. Haberler, dedikodular hatta çevremizdeki insanların davranışlarını değerlendirirken bile olguların ardarda gelmesi ile neden sonuç zinciri kurmakta hiç zorlanmıyoruz.

Esrar içen bir adam düşünün. Bu adam günlerdir esrar içmediği halde arabasının arka koltuklarında pek kullanmadığı bir çantada bir miktar esrar unutuyor, daha sonra trafikte iken başka bir sürücü dikkatsizliğinden ötürü kaza yapıp ölüyor. Kaza yerine gelen gazeteci vaziyeti anladığında attığı haber başlığı ne olacak: Esrar bir can daha aldı. Dorbelli, *Art of Thinking Clearly * adlı kitabında buna benzer bir hikaye anlatıyor ve Düşünme hatalarımızdan birine daha vurgu yapıyor.

İki olay art arda gerçekleştiğinde galiba zihinsel kısa yollarımızın direkt olarak devreye girmesinden olacak hemen ilişki kuruyoruz. Daha da kötüsü aslında art arda gelmeyen olaylar arasında ise hiç bir ilişki kurmama eğilimindeyiz. Oysa tarih ve siyaset bilimi birbiri ile ilgisiz onlarca olayın aynı yerden kurgulanabildiğini veya aynı nedenden kaynaklandığını gösteren bir çok örnekle doludur.

Örneğin CIA’nın zamanında İranda Muhammed Musaddık’ın devrilmesi projesinde aktif rol aldığını itiraf ettiği hatta bu projeye TPAJAX dediği ifade edildi. Şimdi düşünün CIA bu durumu açıklamasaydı Musaddık’ı devirmek için yaptığı girişimleri, çıkan olayları ve iddiaları bizler belki tesadüfi belki de olayların kendi gelişimi içerisinde olağan olarak ele alacaktık.

Ardısıra gerçekleşen olayları yorumlamak sadece uluslararası politikada değil günlük hayatımızda da ortaya çıkıyor. Haberlerde örneğin zerdeçalın baş ağrısına geldiğine dair bir şey okuyoruz. Genellikle Türkçe haber siteleri bu sonuca nereden vardıklarını, hangi araştırmaya dayandıklarını zahmet edip yazmıyorlar. Ancak özellikle Amerika menşeli yayın organları ilgili refeans araştırmanın adını ve hangi dergide yayınlandığını açıkça yazarlar. Şimdi siz haberi duyduktan sonra başınız ağrıdığında zerdaçal aldınız ve kullanıdınız. O gün baş ağrınız dindi. Sebep zerdaçal mıdır? Başka faktörler, hatta tesadüf olabilir mi?

Çocuk psikolojisi ile ilgili de benzer hususlar vardır. Çocuğunuza şöyle davranın şöyle sonuç alırsınız diye onlarca farklı teori ve görüş var. Hepsinin ‘error’ verdiği anlar olmakta. Nitekim gerçeklik mutlak değil. Hele ki konu insan gibi ‘probabilistik’ bir sistemse. Deterministik sistemlerde (örneğin bilgisayar) verilen girdi ile sonuç arasında ilişki olmak zorundadır kural dışı davranışlara, tesadüflere yer yoktur. Ancak probabilistik sistemlerde açıklanamayan bir sürü davranış vardır. Böyle bir durumda hala sebep sonuç zinciri kurmak kolay geliyor mu?

Sebep sonuç zincirlerini kuran sadece bizler değiliz. Bazen ‘uzmanlar’ gerekli algıyı yaratmak için sebep sonuç zincirleri ihdas ederek piyasaya sürerler. Bu durumda gerçek olmayan sebep-sonuç zinciri uzmanlığın da yarattığı halo etkisi ve tekrarla artık ‘hakikat’ oluverir.

Dikkatli olun.

SQLServer’da “aritmetic overflow” hatası


SQLServer’da decimal sayı tanımlamalarında zaman zaman bu hatayla karşılaşılır. Rahat olun suçlu microsofttur. DECIMAL(10,2) demek virgülden ÖNCE 10-2=8 hane demek oluyor. Yani cins adamlar onlarca yazılım dilinde bu iş için daha kolay tanım varken neden yazılımcıya eziyet edersin:)

Şimdi aşağıdaki koda bakalım:

declare @t table (long decimal(10,6))

insert into @t VALUES (1000.0),(999.99),(11111.99)

SQL Server burada 11111.99 değerine kadar her şeyi düzgün insert ederken yukarıda tablo kolonu t değerini etmez çünkü virgülden önce 4’ten fazla hane var. Bu kodda decimal(10,6) kısmını long decimal(11,6) olarak değiştirirseniz kodunuz çalışacaktır.

Tecrübe 3: DECLARE kısımlarında tanımladığınız tiplere dikkat.

Int, Float, Double, Decimal… Yazılım’a giriş dersi neden önemlidir.


Yazılım’a giriş derslerinde her nedese ‘String’den önce hep sayısal değerler öğretilir. Hep de hızla geçilir. Integer akılda kalır, float ve decimal farkı hatırlanmaz. Ama gün gelir, parayla pulla ilgili bir uygulamayı yazar/geliştirsiniz işte orada küsüratlar kuruşlar değerli hale geldiğinde ilk derslerde duyduğunuz/okuduğunz şeyler durumu değiştirir.

Hikaye şuradan başlıyor: Daha önce C#‘da hazırlanmış ve parasal işlemlerle ilgili epey kompleks süreçler yürüten kodların veritabanıyla çok ilişkisi olması gerekçesiyle SQL Stored Procedure ile yeniden yazılmıştı.Yazılan bu kodlarda daha önce C#’da float olak tanımlanmış parasal değerler SQLServer’daki Stored Procedure’ler içinde yeni kodlarımızda Decimal(18,6) şeklinde tanımlanmıştı.

Günün birinde, Decimal(18,6)’nın float olmadığını gördük:) Saçma gelebilir ancak kodlarımızda C# tarafında diyelim ki 5.20 gelen (tabii ki 5.19 da gelecek) float değerlerin SQL Stored Procedure tarafında 5.2 olarak hesaplandığını gördük. Sonra da çözümü bulduk.

Biraz da modifiye ederek şu iki satırla öğrendik:


declare @x as float(24);

set @x = 7376.628 - 199.01 - 46.63
--set @x = @x - 199.01 - 46.63

select convert(decimal(10,6),@x)


Yukarıdaki kodları siz de deneyebilirsiniz. float değerinden 24 parametresini kaldırdığınızda ‘küsüratların intikamını’ görebilirsiniz.

Tecrübe: Sayısal değer tiplerini adam yerine koyun:)

Tecrübe 2: SQLServer’da da float var:) Hatta money tipi var.

SQL Server’da süper hızlı arama eklentisi


SQLServer’da bazen işler kolay olmaz. Çok fazla sayıda tablo,view, stored procedure ve fonksiyon olduğu zamanlarda şu kolon neredeydi diye aramak isteyebilirsiniz. Bunun için SQLServer herhangi bir araç sunmaz. Ancak bunun yerine bir ücrtesiz eklenti var. Bu eklenti ile tüm SQL veritabanınızda istediğiniz ifadeyi ‘şak’ diye blursunuz.

Eklentinin adı: SQLSearch
URL: http://www.red-gate.com/products/sql-development/sql-search/

Görüntü:

Python ile Net Bugünkü Değer Hesaplama


Agah A.Ş. tesislerinde kullanmayı düşündüğü bir makine
için dönem başında 11.000 TL yatırım yapmayı
düşünmektedir. İskonto oranı %10 olarak kabul edilmiştir.
Makinenin yıllar itibariyle sağlayacağı nakit girişleri
aşağıda gösterilmektedir.


Y1=2500
Y2=2600
Y3=4000
Y4=6000

Bu durumda projenin Net Bugün değeri ne olur?
Python’da şöyle hesaplarız


import math

YM=11000

IO=0.1

NBD=Y1/(1+IO)+Y2/(math.pow((1+IO),2))+Y3/(math.pow((1+IO),3))+Y4/(math.pow((1+IO),4))-YM

print(NBD)

Sonuç olarak 524 değerini alırız ki bu projemizin net bugünkü değeridir.

R’da tüm korelasyonları toplu göstermek


Verisetiniz içerisinde kaç parametre varsa bunların birbirleri ile ilişkisi için teker teker korelasyonlara bakmanıza gerek yok. R’da bu işlemi topluca yaparak zaman kazanabilirsiniz.

Veri Amerika’nın Wyoming eyaletindeki suç verileri (2013)

  library(xlsx)
  a=xlsx::read.xlsx("wyoming.xls",sheetName = "13tbl8wy"
                    ,as.data.frame = T
                    ,stringAsFactors=F)
  #NA konları sil
  a=a[colSums(!is.na(a)) > 0]
  #correlation pairs
  panel.cor <- function(x, y, digits = 2, prefix = "", cex.cor, ...)
  {
    usr <- par("usr"); on.exit(par(usr))
    par(usr = c(0, 1, 0, 1))
    r <- abs(cor(x, y))
    txt <- format(c(r, 0.123456789), digits = digits)[1]
    txt <- paste0(prefix, txt)
    if(missing(cex.cor)) cex.cor <- 0.8/strwidth(txt)
    text(0.5, 0.5, txt, cex = cex.cor * r)
  }
  pairs(a[1:5], lower.panel = panel.smooth, upper.panel = panel.cor)

#corelation pairs fonksiyonundan sonraki kısımla aşağıdaki gibi koralasyon tablosu elde edebiliyorsunuz.

Gördüğünüz üzere hem korelasyonlar hem grafikler kolayca eşleştirilebiliyor. Bu grafikten ne anlıyoruz. Wyoming için 2013 yılında şehir bazında nüfus ile işlenen şiddet içeren suçlar arasında ciddi ilişki var. O zaman küçük yerler daha güvenli olabilir. Ama kumarbaz yanılgısına düşmeyin. Küçük ihtimaller gelip sizi bulabilir.