Document-Oriented ne demektir?

Geleneksel ilişkisel veritabanında, kullanıcı isimleri belirli olan tablolar ve bu tabloların sütunlarını tanımlar. Verilerini bu yapıya göre satır satır eklemeye başlar. Eğer tanımı yapılmamış bir alana karşılık veri girmek isterse, tablonun oluşturulma aşamasında böyle bir alandan bahsetmediği için o anda giremez(Yeni sütun eklemediğini varsayıyoruz) Yani herşey baştan bellidir(structured) Hatta bir kayıtta bir sütun için değer girmek istemezseniz bile buna karşılık NULL değeri yazılır.

Document kayıtları şu şekilde alır:
Devami icin

Posted in Big Data | Tagged , , | Leave a comment

ASP.NET ile Gmail kullanilarak mail gonderilmesi

Kullanıcı tarafından doldurulmus bir formu istenilen bir mail adresine gönderilmesi durumunda bir çok forumda asağıdaki sabon kullanilmaktadir.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
MailMessage mail = new MailMessage();
mail.Subject = subject;
mail.From = new MailAddress( "from@mail.com");
mail.Body = body;
mail.IsBodyHtml = true;
mail.To = new MailAddresss("to@mail.com");
SmtpClient smtp = new SmtpClient();
smtp.Host = "smtp.gmail.com";
smtp.Port = 587;
smtp.UseDefaultCredentials = false
smtp.EnableSsl = true;
smtp.DeliveryMethod = SmtpDeliveryMethod.Network;
smtp.Credentials = new NetworkCredential("from@mail.com", "password");
smtp.Send(mail);

Bu sablon ile localhost’ta yaptigim denemelerde istedigim sekilde mailin atildigini gordum. Fakat kodu sitenin bulundugu server’a yukledigimde su sekilde bir hata aliyordum:

The SMTP server requires a secure connection or the client was not
authenticated. The server response was: 5.5.1 Authentication Required. Learn
more at

Devami icin

Posted in ASP | Tagged , , | Leave a comment

PHP’de isset() ve empty() fonksiyonlarinin farki

Form uzerinde bulunan bir alana kullanici tarafindan bir deger girilip girilmedigini kontrol ederiz. Bu kontrol icin isset() ve empty() fonksiyonlarini kullaniriz. Peki tam olarak nedir bu iki fonksiyon arasindaki fark? Ornek olarak asagidaki kod parcacigini baz alalim:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
$name;
if(isset($_REQUEST['name'])){
$name=$_REQUEST['name'];
}else{
$name=NULL;
}
if(empty($_REQUEST['name'])){
$name=$_REQUEST['name'];
}else{
$name=NULL;
}
?>

Devami icin

Posted in PHP, Web | Tagged , , , | Leave a comment

I18n : sifrelenmis kavram

Kuresellesen dunyamizda yazilan tum urunler icin yerellestirme sart olmustur. Yerellestirmeden kasit programin kullanici ile etkilesime gecen kisimlarinin, kullanilan ulkenin yerel dilini destekleyecek sekilde yazilmasidir. Bunun icin cesitli cozumler onerilmis ve konseptler gelistirilmistir. Bu konuya isim olarak “Internationalization” denmektedir. Bu kelime genelde kisaltma adina I18n seklinde belirtilmektedir. Fakat nedir bu sifrelenmis kisaltma? Devami icin

Posted in Yazilim Muhendisligi | Tagged , | Leave a comment

Multi-Tenancy ne demektir?

Eskiden bilgisayarlar halen CD-ROMlara sahipken(!) yazilim endustrisi urunlerini CD’ler icerisinde dagitmaktaydilar. Bu CD’ler ile bilgisayarimiza yazilimi kurardik. Fakat gunumuzde internet kullanimi elektrik kullanimi gibi yaygin oldugundan ve internet hizi da arttigindan dolayi CD’ler yavas yavas kayboldu. Simdi bir yazilim aldiginizda internet uzerinden bu yazilimi bilgisayariniza indirip kuruyorsunuz(Kisisel bilgisayarinizda bu sekilde kullandiginiz yazilim on-premise software olarak bilinmektedir)
Devami icin

Posted in Cloud Computing (Bulut Bilisim) | Tagged , , , | Leave a comment

Cloud Computing (Bulut Bilisim) ve Sebeke Suyu

Baslik icin tam bir ifade bulamasam da aslinda bu yazimda anlatmak istedigim cloud computing terimini hayatimizin bir parcasi olan sebeke suyu uzerinden ornek vererek kafanizdaki cloud computing kavramini netlestirmek :) Bir onceki cloud computing yazimda genel anlamda bu kavramdan bahsetmis olsam da verecegim ornek ile “Neden boyle bir teknolojiye ihtiyac duyuyoruz?” sorusuna cevap vermeye calisacagim.
Devami icin

Posted in Cloud Computing (Bulut Bilisim) | Tagged , | Leave a comment

DBSCAN Clustering(Gruplama) Algoritmasi

Bu yazimda sizlere gelismis bir clustering(gruplama) teknigi olan DBSCAN algoritmasini anlatmaya calisacagim. “Density Based Spatial Clustering of Applications with Noise” soz grubunun bas harflerinden ismini almaktadir.Bu algoritmada diger clustering tekniklerinden farkli olarak “point density” kavrami ile veriler iliskilendirilir.Point density, verilerin agirlikli olarak toplandigi bolgelerdir. Aslinda bizim tum veri kumesine baktigimizda gozumuze carpan veri altkumeleri topluluklari olarak dusunebiliriz. Asagidaki figurde kolayca 3 adet cluster oldugunu gorebiliyoruz.
Clusterlari olusturmamizi saglayan veri yogunlugunun hizli olarak degistigi yerlerdir diyebiliriz.Ayrica bu ufak topluluklarin disinda kalan noktalar ise gurultu(noise) olarak adlandirilmaktadir ve herhangi bir clustera dahil degillerdir.(Yukaridaki figurun sag tarafinda beyaz olarak kalmis noktalar ornek olarak verilebilir)
Diger clustering algoritmalarinda oldugu gibi veriler arasinda “komsuluk iliskisini” belirleyecek, clusterlarin olusmasini saglayacak bir “uzaklik” metrigi verilmelidir. Yine bu noktada hangi tip uzaklik metriginin verildigi onem kazanmaktadir.
Simdi bir dbscan clustering yapan bir classimiz oldugunu varsayalim ve bu classdan bir nesne olusturalim. Olusturacagimiz nesnenin constructor’i muhtemelen su sekilde olacaktir:

public DBSCANAlgorithm(DataPoint[] points,
                       Distance distance,
                       double epsilon,
                       int minPoints)
    points : Clustering yapmak istedigimiz data seti ifade eder.
    distance : Hangi “uzaklik” metrigini kullanmak istedigimizi bu parametre ile geceriz
    epsilon : Genellikle cok kucuk pozitif bir sayiyi ifade eden parametredir. Zaten bilimsel terminolojide de bu anlama gelir. Bu deger datapoint p’nin epsilon komsuluk degerinin belirlenmesi icin kullanilir. p noktasi epsilon degerinden kucuk ya da degerine esit uzakliktaki noktalar ile komsudur. Bu yuzden “epsilon komsulugu” seklinde yazdim.
    minpoints : bir p noktasini bulundugu yeri yaricapi epsilon degerinde olan bir cember ile cevreleyelim. Eger minpoints degeri kadar nokta bu cemberin icerisine giriyorsa bu durumda bu noktasi cekirdek(core) noktalardan bir oluyor. Bir tanim daha : Eger bir nokta bir clustera ait fakat cekirdek noktalardan biri degilse bu durumda sinir(border) noktalardan biri olmaktadir.

Asagidaki figurde bu tanimlamalar dogrultusunda p noktasi core point q noktasi ise border point’tir.

Simdi bu algoritma ile ilgili onemli bir tanimlamadan bahsedecegim. Yukaridaki figurde gordugunuz p ve q noktalari uzerinden tanimlamalari yapacagim.q noktasi epsilon ve minpoints degerleri cercevesinde p noktasindan direkt olarak yogunluk anlaminda ulasilabilir(density-reachable) Cunku yogunluk anlaminda ulasilabilir olunabilmesi icin asagidaki sartlar aranmaktadir :
1-q epsilon anlaminda p’nin komsusu olmalidir
2-p ‘nin minpointsden daha fazla epsilon komsusu olmalidir.
Bu bilgiler isiginda p noktasi q noktasindan bu anlamda yogunluk anlaminda ulasilabilir degildir.

Algoritma Nasil Calisir

Algoritma su sekilde calismaktadir:
1-Rastgele uzerinden gecilmemis bir nokta secilir
2-Noktanin epsilon uzakligi icerisindeki komsulari bulunur
3-Eger komsu sayisi minpoints sayisina esit ya da buyuk ise bir cluster olusturulur; minpoint sayisindan kucuk ise bu nokta gurultu olarak isaretlenir.Fakat ileriki safhalarda gurultu olarak isaretlenen bu nokta baska bir noktanin olusturabilecegi clustera dahil edilebilir
4-Bir nokta bir clustera dahil edildi ise bu durumda tum epsilon komsulari da bu clustera dahil edilir. Tabiki bu eklenenler icin de gecerlidir. Bu islem eklenecek nokta kalmayana kadar devam ettirilir ve boylece clusterin tamami olusturulmus olur.
5-Yeni uzerinden gecilmemis bir nokta secilir ve dongu tekrarlanir

Pseudocode
DBSCAN(D, eps, MinPts)
    C = 0
    for each unvisited point P in dataset D
       mark P as visited
       N = regionQuery(P, eps)
       if sizeof(N) < MinPts
          mark P as NOISE
       else
          C = next cluster
          expandCluster(P, N, C, eps, MinPts)

 expandCluster(P, N, C, eps, MinPts)
    add P to cluster C
    for each point P' in N
       if P' is not visited
          mark P' as visited
          N' = regionQuery(P', eps)
          if sizeof(N') >= MinPts
             N = N joined with N'
             if P' is not yet member of any cluster
                 add P' to cluster C

Algoritmada goruldugu uzere epsilon ve minpoints parametrelerinin secimi cluster ciktisi sekillendirdigi icin onemlidir. Epsilon secimi icin asagidakilere dikkat edilebilir:
1-Data normalizasyonu. Ozellikle 2den daha fazla boyutlu datalar icin normalizasyon yapmak onemlidir.
2-Data setinin yapisi ile ilgili genel bilgi. Boylece noktalar arasi uzakligin bilinmesi epsilon saptamasi icin iyi bir ipucudur.
3-Bir noktanin ne kadar cok ozelliginin(attribute) oldugu.

Denemelerinizde size yardimci olabilecek bir ipucu: Diyelimki epsilon degerini 2 katina cikardiniz ve cluster yapisi kotuye gitti. Sonra 2 katina daha cikardiniz cok iyi bir sonuc elde ettiniz. Bu durumda ya dataniz cok boyutlu ve bu durumda gereksiz ozellikleri de hesaba katiyorsunuz ya da sectiginiz uzaklik metrigi data kumeniz icin uygun degil.

Posted in Uncategorized | Tagged , , | 2 Comments

et al. ne demektir?

Genellikle akademik makalelerde ya da yazilarda bir kisinin soyismi yazar ve ardindan et al. seklinde bir kisaltma ile cumle devam eder. Buradaki et al. basinda yazilan isimle beraber baska kisilerinde oldugu yani bir grup ile calismanin yapildigi belirtilir.Latince et(ve) ve alii(digerleri) kelimelerinden gelmektedir.

Posted in Genel | Tagged , | Leave a comment