NoSQL Nedir?

Merhaba arkadaşlar. Bu yazımda birlikte , günümüzde fazlaca popüler olan, ilişkisel veritabanlarına alternatif olarak ortaya çıkan NoSQL yapısını basitçe inceleyeceğiz.  🙂 

                            nosql-nedir

NoSQL denildiğinde aklımıza ilk olarak “SQL değil” anlamı gelse de NoSQL için NOT ONLY SQL yani “Sadece SQL Değil” kavramı da kullanılmaktadır.

Yazının başında ilişkisel veritabanlarına alternatif olarak ortaya çıkan tabirini kullandım. İlişkisel veritabanlarında kullanılan SQL sorguları NoSQL’de yoktur. Veriler JSON ya da XML formatında tutulur. 

“Neden kullanıyorlar ki bunu? Amaç nedir abi?” sorusu için şöyle bir açıklama getirebilirim. Günümüzde internetin yaygınlaşması ve hızlanması sebebi ile sistemler sürekli büyüyen bir veri yumağına dönüşüyor. Sistemlerin büyümesi ile veritabanları da karmaşıklaşıyor ve karmaşık veritabanlarında sürekli değişiklik yapmak zorlaşıyor.

Tabloları ve sütunları ekleyip, son olarak ilişkileri düzenlediğimiz, fazla sayıda veri barındıran bir veritabanı düşünelim. Bir süre sonra tabloya yeni bir sütun eklememiz ya da önceden planlayamadığımız bir değişiklik yapmamız gerektiğinde , tabloyu ve ilişkileri yeniden tasarlamamız, belki veritabanı tasarımını baştan yapmamız gerekebilir. Bahsedilen değişiklikleri büyük bir sistem üzerinde uygulamak verimsiz/maliyetli sonuçlar doğurabilir.

NoSQL de sonradan değişiklik yapmak ilişkisel veritabanlarında olduğu kadar verimsizlik yaratmaz. Çünkü tablo veya sütun kavramlarının olmadığı NoSQL de tek yapmanız gereken eklemek istediğiniz veriyi JSON ya da XML formatında eklemektir. 

İlişkisel veritabanları transaction alt yapısıyla çalışır. Yani veri bütünlüğünü sağlamak için çeşitli prensiplere dayanarak işlem yapılır. NoSQL’de transaction kavramı yoktur. Fire and Forget adı verilen bir prensiple çalışan bu sistemde amaç hız ve performansı maximize etmektir. Yani %100 veri bütünlüğü sağlamaz. Bankacılık gibi hassas , verinin aynı anda her yerde güncellenmesi gereken sistemlerde NoSQL tercih edilmemektedir. 

Günümüzde Google Big Table , Amazon ise DynamoDB adını verdiği NoSQL veritabanı sistemi ile verilerini saklamaktadır. NoSQL genel olarak çoğu sistemin belli kısımlarında, parça parça kullanılmaktadır. 

NoSQL kendi içinde şu şekilde gruplandırılmıştır :

1) Wide-column stores

2)Document databases

3)Key-value stores

4)Graph stores

Şimdilik NoSQL hakkında bildiklerim bu kadar. Öneri ve düzeltmeler için yorum yapabilirsiniz. Bir daha ki yazıda görüşmek üzere. Mutlu günler 🙂 

Bye-smiley

 

Reklamlar

Git/Github nedir? Terminal Üzerinden Git Kurulumu

Merhaba arkadaşlar. Bu yazımda Git/Github nedir? Geliştiricilere faydası nedir? Terminal üzerinden Git Kurulumu gibi başlıkları inceleyeceğiz.

130712_git_github_topdenota1

Öncelikle Git nedir bu konuda konuşalım. Git dağıtık bir versiyon kontrol sistemidir. Basit olarak , üzerinde çalıştığınız bir projeyi yükleyebildiğiniz, aynı projeyi takım arkadaşlarınızın clone edebildiği, proje üzerinde offline olarak çalışıp, yaptığınız değişiklikleri kaydedebildiğiniz bir sistemdir. Github için ise verisyon kontrol sistemimiz için uzak bir depodur diyebiliriz.

Git/Github kullanımının geliştiriciler bir çok faydası var. Public olarak istediğiniz kadar proje oluşturabilirsiniz. Private olarak ücretsiz versiyonda 1 tane hakkınız var.

Hızlıdır. Git ile zamandan tasarruf edebilirsiniz. Kodlarınızı terminal üzerinden yüklemek size zaman kazandıracaktır. Binlerce satır kodu kopyala yapıştır yapmak hem zor hem de oldukça sıkıcı bir işlemdir. Aynı proje üzerinde birden fazla kişi çalışabilir ve yapılan çalışmalar izlenebilir. Değişiklikler tarihleriyle birlikte satır satır tutulur. Offline iken çalıştıklarınızı bir güncelleme ile online deponuza gönderebilirsiniz. Diyelim harddiskiniz yandı ya da bir şekilde bilgisayarınızdaki kodlar silindi. Projenizi tekrar bilgisayarınıza klonlayabilirsiniz. Ayrıca güvenilir bir sistemdir.

Şimdi Github kullanımına ve Git kurulumuna bakalım. Öncelikle şuradan Github’a kaydımızı yapalım. Kayıt olduktan sonra New repository kısmından proje oluşturabiliyoruz.

Screenshot from 2015-10-12 10:26:08

Oluşan projeye yeni sayfalar ekleyebiliyor, README belgesi oluşturabiliyoruz.

Screenshot from 2015-10-12 10:37:29

Create repository diyorum ve yeni repom oluşmuş oluyor. Bu repo ile yukarıda anlattığım her şeyi yapabiliyoruz. Şimdi terminal üzerinden Git kurulumunu inceleyelim.

Öncelikle http://git-scm.com/downloads adresinden Git’i indiriyoruz. İndirdiğimiz paketi bilgsayarımıza kuralım :

sudo apt-get install git    komutu ile Git’i kuruyoruz. Github ile bağlantı yapabilmek için ssh key almamız gerekiyor. Bir sonra ki yazımda ssh key almayı ve terminal üzerinden Git kullanımını anlatacağım.

Görüşmek üzere! 🙂

github

PHP ile E-mail Göndermek

phpmailer7418

Merhaba arkadaşlar. Bugün birlikte PHP ile nasıl mail gönderebiliriz bunu inceleyeceğiz 🙂 

Öncelikli olarak kullanabileceğimiz mail() fonksiyonu var. Fakat bir çok sunucu mail() fonksiyonuna kapatılmış durumda. Sebebi ise bu fonksiyon ile gönderilmiş maillerin spam kutusuna düşmesidir. Tabi ki bunun olmasını istemiyoruz. PHP’nin bu konuda bize sunmuş olduğu bir başka güzellik var.

PHPMailer Class’ı ve SMTP Protokolü (Simple Mail Transfer Protocol) . Mail gönderim işlemi yapılacak bilgisayar SMTP suncusuna bağlanır. Kullanıcı adı, şifre gibi kontrollerin ardından sunucu onay verirse mail gönderme işlemi tamamlanmış olur.

Şimdi adım adım PHPMailer ve SMTP’yi  kullanarak bir mail gönderelim. Öncelikle buradan PHPMailer Class’ını indiriyoruz. İndirdiğimiz dosyadaki php uzantılı class.phpmailer.php , class.smtp.php ve class.pop3.php dosyalarını çalıştığımız proje dosyası içine gömüyoruz. Üzerinde çalıştığımız php sayfası bu dosyaların ile aynı dizinde olması gerekiyor.

Ben kullanıcıdan verileri ayrı bir sayfada almayı tercih ettim ve başlangıç olarak mailgiris.php dosyamı oluşturdum. Bilgileri kullanıcıdan almak yerine elle de girebilirsiniz. HTML ile klasik, basit bir form oluşturalım.

Giriş sayfamın kodları :

<hmtl>

   <head>
       <title>COMPOSE E-MAIL</title>
   <style>

        body
        {
              background-color: skyblue;
        }

   </style>


   </head>
    <body>

From :

//Gonderenin mailini aliyoruz

To :

//Gonderilecek adresi aliyoruz

Subject :

Gonderinin konusunu aliyoruz

Mail :

//mail metnini alıyoruz

</body> </hmtl>

(From, To, Subject ve Mail kısımlarının kodları wordpress tarafından otomatik olarak derlendiği için şimdilik gösteremiyorum.)

Girilen verileri “post” metodu ile mailalis.php sayfasına gönderiyoruz. Sayfanın local’de çalıştırılmış halinin ekran görüntüsü şöyle :

ss

Şimdi asıl işin olduğu yani mail gönderme işlemini yaptığımız, PHPMailer Classı ve SMTP’yi kullandığımız sayfamızı oluşturalım.

Mail gönderme sayfamın kodları :

<?php

include 'class.phpmailer.php'; //PHPMailer sinifimizi import ettik
$mail = new PHPMailer(); 

$from = $_POST["from"];  //Bu dort satirda formdan gelen verileri degiskenlere aktardik   
$to = $_POST["to"];
$subject = $_POST["subject"];
$mail_text = $_POST["mail"];

$mail->IsSMTP(); //Maili gonderecegimiz yolu belirledik
$mail->SMTPDebug = 1; Debug islemi. 1 degeri hata ve mesaj icinken 2 degeri ile sadece mesaj olusturuluyor 
$mail->SMTPAuth = TRUE; //SMTP kimlik dogrulamayi etkinlestirdik
$mail->SMTPSecure = 'ssl'; //Guvenli baglanti icin ssl'i tercih ettim, 'tls' de kullanilabiliyor
$mail->Host = 'smtp.gmail.com'; //Gmail sunucusu uzerinden islem yapacagimi belirttim
$mail->Port = 465; //587 normal baglanti icin gerekli port numarasi, guvenli baglanti icin 465'i kullaniyoruz.
$mail->CharSet = 'UTF-8'; //Dil ayarlari icin UTF-8 i kullaniyoruz.
$mail->Username = $from; //mailin gonderilecegi adres
$mail->Password = '********'; //mailin gonderildigi adresin sifresi
$mail->SetFrom($mail->Username, $from);
$mail->Subject = $subject; //konu
$mail->AddAddress($to); //mailin gideceği adres
$mail -> MsgHTML($mail_text); //mailin icerigi


//Asagıdaki kod blogunda mailin gonderilip gonderilmedigini kontrol ediyoruz. 

if(!$mail->Send())

{
    echo "Mailer Error: ".$mail->ErrorInfo;
}
else
{
    echo "Sent";
}

?>

İşte bu kadar. Mailiniz gönderildi. Yandex mail için hostu ‘smtp.yandex.com’ , port numarasını 587 ve SMTPSecure ‘u tls olarak değiştirip denemeler yapabilirsiniz.

Aslında çok zor bir işlem değil gördüğümüz gibi 🙂 PHPMailer sınıfını import ediyor ve her şeyi SMTP üzerinden hallediyoruz.

Kendi bilgisayarımdan kendi adresime denemeler yaptım bir kaç sorunla karşılaştım. Sorunlardan ve nasıl çözdüğümden bahsetmek istiyorum.

  • Öncelikle karşılaştığım ilk sorun   "SMTP -> ERROR: Failed to connect to server: Unable to find the socket transport “ssl” " hatası oldu. Sorunun çözümü için stackoverflow’da gözüme takılan bir yorumdan faydalandım.

php.ini dosyasını açtım.

;extension=php_openssl.dll     –> satırını buldum ve başındaki noktalı virgül karakterini sildim. Sonra apache’yi restart yaptım ve sorunum çözüldü. 

  • İkinci sorun ise “SMTP -> ERROR: Password not accepted from server: 534-5.7.9 Application-specific password required. ” 

Sorunun çözümü için araştırma yaparken aklıma gmail hesabımın 2 adımlı doğrulama ile açıldığı geldi. Şifremi giriyorum, telefonuma bir kod gönderiliyor ve gelen kodu ekrandaki kutucuğa girince hesabıma erişebiliyorum. Belki doğru iz üzerindeyimdir diye düşündüm ve 2 Adımlı Doğrulamayı etkisiz hale getirdim ve sorun çözüme kavuşmuş oldu. Ekrana “Sent” mesajı basıldı ve mail inboxıma düşmüş oldu. 🙂

Okuduğunuz için teşekkür ederim. Görüş ve önerilerinizi yorum olarak gönderebilirsiniz. 🙂

Android 5.0 Lollipop

Merhabalar Arkadaşlar. Sizlere son günlerde merakla beklediğim ve nihayet tanıtılan Android 5.0 Lollipop ‘tan bahsedeceğim.

Eminim Android sürümlerinin çikolatalı, şekerli isimleri benim kadar sizinde hoşunuza gidiyordur 🙂 Cupcake, Donut, Honeycomb, Ice Cream Sandwich, Jelly Bean, Kit Kat 🙂 Ve nihayet Lollipop!

Android-lollipop

Google’ın haziranda duyurusunu yaptığı hepimizin Android  L olarak beklediği  , Android 5.0 Lollipop olarak resmiyet kazanan yeni android sürümü nihayet bizlerle! Lollipop Nexus 6 ve Nexus 9 ile birlikte tanıtıldı.

Yeni sürümde neler ön plana çıkıyor?

Materyal Dizayn

Tasarım ile alakalı “metarial design” adlı tasarım dili gözümüze çarpıyor.  Tasarımın daha sade ve daha renkli olmasına önem verilen materyal tasarımda animasyonlar dahil tüm görseller çok daha doğal bir şekilde bizleri karşılıyor. Uygulamalar daha canlı ve daha gerçekçi olarak bizlerle buluşuyor. Bu modern tasarım genelin beğenisini toplamışa benziyor.

Materyal Dizayn ilginizi çekti ise şu videoyu izlemenizi tavsiye ediyorum :

Gelişmiş Bildirim Sistemi

Bir diğer öne çıkan özellik ise “bildirimler” ile ilgili. Artık bildirimlere kilit ekranından ulaşmak mümkün.  Tek bir parmak hareketi ile bildirimleri okuyabilir veya silebilirsiniz. Önceliğe göre istediğiniz uygulamadan gelecek bildirimlerin ekranda yer almasını sağlayabilirsiniz. Kilidi açmadan mesajlara cevap vermek de bu yeni sürüm ile mümkün.

Saat Uygulaması

Yeni sürümde gözümüze bir başka yenilik olarak yerleşik saat uygulaması çarpıyor. Artık Android 5.0 Lollipop içeren tüm cihazlarda bulunan görseller günün farklı saatlerine göre gri, mavi ve mor olmak üzere farklı renkler alacak.

Artan Pil Kullanım Süresi

Project Volta ile artık pil kullanım süresi daha uzun.  Project Volta da bulunan API arka plandaki gereksiz programları tespit ediyor ve kapatıyor böylece günlük hayatta büyük bir problem olan pil kullanım süresi sıkıntısından bir süreliğine de olsa kurtulmanızı sağlıyor. Aldığım duyumlara 90 – 12 dakika arası fazladan bir süreden bahsediliyor.

Android 5.0 Lollipop ile gelen özelliklerden biri de Bluetooth 4.1 desteği.  Ayrıca bu sürümde yeni yazılım alt yapısı ART sayesinde oyunlarda daha yüksek performans sizleri bekliyor.

Yeni Android sürümü ile telefonun yanında tablet, akıllı saat gibi cihazlar da kullanılabilecek. Böylece akıllı cihazlarınızdan hiç ayrılmayacaksınız.

Okuduğunuz için teşekkürler. Bir başka yazımızda görüşmek üzere. Esenlikle kalın 🙂

Android-5.0-Lollipop

JAVA ve Gizemli Dünyasına Hoşgeldiniz :)

Merhaba arkadaşlar;

Artık blogumda sık sık Javaya yer vereceğim. Ne yoksa siz hala java öğrenmeyi düşünmüyor musunuz? Gelin beraber öğrenelim. “Hello World” ü bir de javada yazalım.

James Gosling tarafından geliştirilmiştir. Nesneye yönelik bir programlama dilidir. Java güvenli bir dildir ,sağlamdır. Üstelik tüm işlemcilerde çalışır 🙂 Tabi Java Virtual Machine sayesinde. Jvm bir sanal makinedir. Java bytecodunu makine diline çevirir.

Java kullanmak için bilgisayarınızda JDK (Java development kit) olmalıdır. JDK yı http://www.oracle.com/technetwork/java/javase/downloads/index.html sitesinden temin edebilirsiniz. Jdkyı kurduktan sonra bir de İde gerekiyor tabi. İde olarak Eclipse ve NetBeans’i kullanıyorum.

Jdk mızı indirip , idemizi de kurduysak sizler daha fazla sabırsızlanmadan ilk ve en popüler kodumuza geçelim. Dünyaya bir Hello diyelim.

Şimdilik NetBeans üzerinden anlatacağım.

Önce sol üst köşede bulunan File’a tıklıyoruz. Buradan New File seçeneğini seçmemiz gerekiyor. Ve karşımıza şöyle bir pencere geliyor :

Resim

Buradan Java Application’ı seçip next’e basıyoruz.

Projemizi isimlendirip enterlıyoruz ve nihayet karşımıza kodlarımızı yazacağımız sayfa geliyor :

Resim

Kodumuzu yapıştıralım hemen ve run işlemini yapalım 🙂 Main e yazmamız gereken o sihirli sözcük :  System.out.println(“Hello World!”);

C de printf vardı hatırladınız mı? 🙂 Artık Bu var. Netbeanste System.out.println(); otomatik gelsin istiyorsanız sout yazıp tab tuşuna basmanız yeterli. Eclipste ise syso yazıp ctrl+space yapıyoruz.

İşte ! Dünyaya da Hello dediğimize göre çalışmalara başlayabiliriz. Şimdilik bu kadar ama 🙂 Devamı gelecek. Kolay gelsin arkadaşlar , iyi çalışmalar.

Microsoft Visual Studio 2012 scanf,getch,fopen gibi fonksiyonlarda warning sorunu(güncelleme)

Merhaba arkadaşlar , https://gizemaldemir.wordpress.com/2013/12/06/microsoft-visual-studio-2012-scanf-ve-getch-security-sorunu/ yazımda visual’12 de scanf ve getch için verilen warningden nasıl kurtulacağımızdan bahsetmiştim. Scanf i scanf_s ; gectch i de _getch olarak yazmamız gerekiyordu. Ancak dosya işlemleri kullanarak c ile ilgili bir proje yaparken fopen gibi fonksiyonlarda da sıkıntı çıktığını gördüm. Bunun içinde bir çözüm var 🙂 Öncelikle oluşturduğumuz projenin cpp dosyası üzerine sağ tıklıyoruz. En aşagıda ‘properties’ yani özellikler kısmı var. Buraya tıklıyoruz.

properties1

 

Propertiese tıkladıktan sonra karşımıza şöyle bir pencere geliyor :

properties2

Burdan sol pencereden, c/c++ ı seçip gelen menuden ‘preprocessor kısmına tıklıyoruz. Sağ tarafta ‘Preprocessor Definitions ‘ kısmı var. Ve gördüğünüz üzere _MBCS;%(PreprocessorDefinitions) yazıyor. Tek yapmamız gereken o kutucuğa _CRT_SECURE_NO_WARNINGS yazmak. Sonra uygula ve tamam a basıyoruz. Artık hatalardan kurtulduk demektir 🙂 

properties3

Ek bir uyarı daha bende ‘flushall’ fonksiyonu da hata veriyor. Onu da _flushall kullanarak halledebiliyoruz. Yine getch içinde aynı şekilde _getch kullanmamız gerekiyor. Umarım faydalı olmuştur. İyi çalışmalar 🙂

Microsoft Visual Studio 2012- ( scanf ve getch) Security Sorunu

Arkadaşlar başınıza geldi mi bilmiyorum ama visual’12 de scanf ve getch fonksiyonlarında sıkıntı yaşıyordum. Program doğru olmasına rağmen kodum çalışmıyor, error penceresinde scanf ve getch ile alakalı problem oluşuyordu. Bu konuyu araştırdım fakat Türkçe bir metin bulamadım. Bende çözümü sizlerle Türkçe olarak paylaşayım istedim 🙂 hata da belirtildiği gibi ya _CRT_SECURE_NO_WARNINGS ifadesini kütüphanelerin altında #define olarak tanımlıyoruz ki ben bu şekilde sorunu çözemedim. Ya da scanf’i ‘scanf_s’  , getch’i de  ‘_getch’ olarak kullanıyoruz. Böylece sorun çözülmüş oluyor. Bazı arkadaşlarda hata değilde uyarı olarakta çıkabiliyor. Hatalarda yapmanız gereken belirttiğim gibi. Benim sorunum bu şekilde çözüldü. Umarım işinize yarar 🙂Image