Cpanel exim stat error >> Error: DBD::mysql::db failed: Table ‘./eximstats/ (How to Fix)

Error from delivery reporter: DBD::mysql::db selectall_arrayref failed: Table ‘./eximstats/failures’ is marked as crashed and last (automatic?) repair failed

Bu ve buna benzer hatalar DB hatalarıdır. Otomatik düzeltme denenmeli olmuyorsa alttaki diğer seçenekle göz önünde bulundurulmalıdır.

Otomatik denemek için : mysqlcheck –repair eximstats

bu işlem sonunda gelen hata

eximstats.defers OK eximstats.failures error : Can’t create new tempfile: ‘./eximstats/failures.TMD’ status : Operation failed

şeklinde ve düzelmiyor ise :

mysql use eximstats;
drop table failures;

bu iki komut ile hangi tablo bozuk ise onu siliyoruz.
sonrasında ise

bu komut ile onarıyoruz : /usr/local/cpanel/bin/updateeximstats

Eğer sorun dosya bozukluğu değil ise temizlemek te faydalı olabilir.

mysql use eximstats;
TRUNCATE TABLE sends;
TRUNCATE TABLE defers;
TRUNCATE TABLE smtp;

Bunlar sorunun kaynağını kesinlikle kökünden halledecektir.

If you get this error in WHM > View Sent Summary

Error from delivery reporter: DBD::mysql::db selectall_arrayref failed: Table ‘./eximstats/failures’ is marked as crashed and last (automatic?) repair failed
Try running this command

# mysqlcheck –repair eximstats
If you get this error as a result…

eximstats.defers OK eximstats.failures error : Can’t create new tempfile: ‘./eximstats/failures.TMD’ status : Operation failed
Something has corrupted the ‘failures’ table within eximstats. It’s unable to be repaired. To recreate it, do the following:

Via command line run these:

mysql use eximstats; drop table failures;
Then run:

/usr/local/cpanel/bin/updateeximstats
If you wish to ‘clear’ the other databases out, please note this will wipe out existing eximstats if you plan on using it for Mail Reports so keep that in mind. After you perform the above step, simply run

mysql use eximstats; TRUNCATE TABLE sends; TRUNCATE TABLE defers; TRUNCATE TABLE smtp;

Facebooktwittergoogle_plusredditpinterestlinkedinmail

PHP ifadeleri & Operatörleri Anlatımı

PHP ifadeleri ve operatörleri

PHP’de yapacağımız ve yaptıracağımız her şey için PHP ifadelerini kullanırız. Adı üstünde çalışmamızı ifade edecek şeylere PHP ifadeleri deriz. Genel olarak < ?php ve ?> arasına yazacağımız her şey bir PHP ifadesidir.

Bunlardan bir çoğunu ayrı başlıklar altında anlattım ve şimdi ise yeni bir başlık altında operatörlere ve mantıksal ifadelere değineceğim.

Şimdi ifadelerimizde ve değişkenler üzerinde bir takım işlemler yapmamızı ve koşullar belirtmemizi sağlayacak olan operatörlerden başlayalım, bol etiketli bir yazı olacak.

PHP operatörleri
Bu başlık altında sırayla aritmetik operatörler, atama operatörlerini, karşılaştırma operatörleri, mantıksal operatörler ve diğer operatörleri anlatacağım.

Aritmetik operatörler
Aritmetik operatörler gayet basit. İlkokulda öğrendiğimiz şeyler, bunlara matematiksel operatörlerde diyebilirsin. Bu operatörler ile istediğin değerlerin toplamasını, çıkarmasını, bölmesini ve çarpmasını yapabilirsin.

İşte PHP’de aritmetik operatörler, isimleri ve örnekleri:

Operatör İsim Örnek
+ Toplama $a + $b
- Çıkartma $a – $b
* Çarpma $a * $b
/ Bölme $a / $b
% Modül $a % $b

Bunların bir de uygulamasını gösterelim:

$a = 10;
$b = 20;
$c = 5;
$sonuc = $a + $b - $c;
echo $sonuc;
Ekranda 25 yazar.

$a değişkeninin değeri 10, $b değişkeninin değeri 20, $c değişkeninin değeri ise 5. $sonuc değişkenine de $a değişkeni artı $b değişkeni ve eksi $c değişkeni dedik, bu da $sonuc değişkenine 10 + 20 – 5 işlemini yaptırarak 25 değerini verdi.

Bir tane de işe yarar bir deneme ile gösterelim:

$yil = 2010;
$dogum_yili = 1992;
$yas = $yil - $dogum_yili;
echo $yas;

Ekranda 18 yazar. 2010 yılından doğum yılımızı çıkarttık ve yaşımızı bulduk.

Karakter katarı operatörleri
İki ya da daha fazla karakteri ard arda eklemek için kullanacağın bu operatörü aslında bir kaç ders öncesinde örnek olarak kullandım. Orada anlamamış olabilirsin. Ama şimdi bu eksikliği gidereceğiz.

Yazıları ve diğer değerleri yan yana birleştirmek ve başka değerlere eklemek için “.” (nokta) operatörünü kullanacağız. Hemen bir örnek ile göstereyim yine:

$isim = 'Musa';
$mesaj = 'Selam ';
$sonuc = $mesaj . $isim;

echo $sonuc;
Ekranda Selam Musa yazar. Burada $sonuc değişkenine $mesaj değişkeni ile $isim değişkenini yan yana ekledik.

Bir örnek daha göstereyim:

$isim = 'Musa';
$sonuc = 'Selam ' . $isim;

echo $sonuc;
Bu sefer de aynı şey yazar. Farklı yaptığımız şey; $mesaj değişkeni kullanmak yerine sonuç değişkenine direkt mesajımızı verdik ve yanına nokta operatörü ile $isim değişkenini birleştirdik.

Tek tırnak ile çift tırnak arasındaki fark
Bu konuda son olarak dikkat etmemiz gereken ufak bir farklı yoldan bahsedeceğim. Bu da PHP de “ (çift tırnak) ile ‘ (tek tırnak) arasında bazı kullanım farklılıkları olması. Tek tırnak ile vereceğimiz değerlerin içerisine değişken yazamayız, hemen örnek ile gösterelim:

$isim = 'Musa';
$mesaj = 'Selam $isim';

echo $mesaj;
Ekranda Selam $isim yazar. Çünkü biz değişkeni de tek tırnak içinde yazdık. Bu nedenle o $isim‘e bir değişken değil yazı gözüyle baktı. Eğer $isim değişkenini yazdırmak istiyorsan işte o zaman bir yukarıda verdiğimiz örnekteki gibi yapmalısın.

Bu bahsettiğim olay yanlızca tek tırnak için geçerli. Çift tırnakda ise bu durum daha farklı. Çift tırnak içerisine yazacağımız değişkenlerin değerleri yazar. Yani nokta operatörünü kullanmadan da değişkenleri çift tırnak içinde birleştirebiliyoruz. Hemen yine bir örnek geliyor:

$isim = 'Musa';
$mesaj = "Selam $isim";

echo $mesaj;
Çok dikkat edin bir önceki örnek ile aynı fakat sadece mesaj değişkeninde tek tırnak değil çift tırnak kullandık. Ve bu durumda ekranda Selam Musa yazacak. Çünkü çift tırnak içine yazılan değişkenlerin değerlerini verir. Fakat tek tırnakda böyle bir durum söz konusu değil.

Buradaki amaç bazen dolar işaretini kendi başına kullanmamız gereken bazı yerlerde PHP’nin o dolar işaretini değişken sanmamasını sağlamaktır. Mesela ekrana “Ücret: 100$” yazdırmak istediğimizde eğer çift tırnak kullanırsak PHP hata verir. Çünkü çift tırnak içerisinde dolar işareti özel karakter ve değişken ifadesi olarak algılanır. Bu durumlarda tek tırnak ya da kaçış operatörü kullanılır.

Kaçış operatörü
Kaçış operatörü ters bölüm işaretidir “\“.

Kaçış operatörünün kullanımınıda hemen bir örnek ile gösterelim:

$mesaj = "Ücret: 100\$";
echo $mesaj;

Ekranda Ücret: 100$ yazar. Çift tırnak ile $ dolar işaretini kullandık ama başına ters bölüm işareti koyduk. Bu nedenle o dolar işaretini değişken olarak algılamadı.

Çift tırnakta değişken kullandığımız için $ dolar işaretinden kaçmakta kullandığımız bu operatörü aynı zamanda çift tırnak içine çift tırnak içeren bir şey yazarkende kullanabiliriz. Hemen buna da bir örnek:

$mesaj = "Musa: \"bu kaçış operatörünü anlamak için iyi bir örnek\" dedi.";
echo $mesaj;

Ekranda Musa: “bu kaçış operatörünü anlamak için iyi bir örnek” dedi. yazar. Çift tırnak içinde çift tırnak işaretini kullansaydık PHP hata verirdi. Ama kaçış operatörü sayesinde böyle bir hata almadık ve kendimizi ifade ettik.

Biraz karışık bir konu gibi gelebilir ama aslında basit. Son olarak hepsini bir örnek ile göstereyim:

$isim = "Musa";
$mesaj = "Merhaba ";

$sonuc = $mesaj . $isim; // Değeri: Merhaba Musa
$sonuc = "$mesaj $isim"; // Değeri: Merhaba Musa
$sonuc = 'Selam ' . $isim; // Değeri: Selam Musa
$sonuc = 'Değerimiz: 100,000,000$'; //Değeri: Değerimiz: 100,000,000$
$sonuc = "Bu hatalı bir fiyat: 100$"; //PHP hata verir!
$sonuc = "Bu hatasız bir fiyat: 100\$"; //Değeri: Bu hatasız bir fiyat: 100$
$sonuc = "Tırnak denemesi: \"PHP\""; //Değeri: Tırnak denemesi: "PHP"
$sonuc = "Hatalı bir örnek, "kaçış karakteri" kullanmadan tırnak açtık";
//PHP hata verir.
Atama operatörleri
Atama operatörleri ile değişkenlere değer atarız. Temel atama operatörü eşittirdir (=). Bunu geçen örneklerde ve anlatımlarda anladığını varsayıyorum. Tek bir eşittir işareti, istenilen değişkene istenilen değeri atamamızı sağlar.

Diğer operatörlerini de bir tablo üzerinde gösterelim. Bu operatörler birleşik atama operatörleri. Bunlar bir değişkenin sonuna bir değer eklemekte ya da değişkendeki sonuca bir sayı eklememizi kolaylaştırır. Basit bir örnek ile kavrayabileceğimiz bu birleşik atama operatörlerini önce tabloda gösterelim:

Operatör Kullanışı Karşılığı
+= $a += $b $a = $a + $b
-= $a -= $b $a = $a – $b
*= $a *= $b $a = $a * $b
/= $a /= $b $a = $a / $b
%= $a %= $b $a = $a % $b
.= $a .= $b $a = $a . $b

Örnek bir atama operatörü kullanımı:

$a = 10;
$b = 20;
$a += $b;

echo $a;
Ekranda 30 yazar. Birleşik atama operatörü kullanarak toplama işlemi yaptık ve varolan değişkenin değerine atadığım değişkenin değerini ekledik.

Bu birleşik atama operatörü bizim değişkenin sonuna ekleyeceğimiz ya da çıkartacağımız değerler için aynı değişkeni tekrar yazdırmayarak bize kolaylık sağlar.

Bir değer arttırma ya da eksiltme
Bir değişkendeki sayısal değeri bir arttırmak için çift artı (++) operatörünü, bir değer eksiltmek için de çift eksi (- -) operatörünü kullanırız.

Örnek kullanımı:

$a = 10;
$a++;
echo $a;

Ekranda 11 yazar. $a değişkeninin değerini 1 arttırdık ve ekrana yazdırdık.

İfadeleri ve operatörleri bir başlık altında toplayınca konu yoğunluğundan dolayı ikiye ayırmak durumunda kaldım. Bu yazıda bir önceki yazıda anlatmadığımız diğer ifadeleri ve diğer operatörleri anlatacağım.

Kaldığımız yerden karşılaştırma operatörlerini anlatmaya başlayarak devam ediyorum.

Karşılaştırma operatörleri
Karşılaştırma operatörleri ile adı üstünde birden fazla değerleri kendi aralarında karşılaştırmasını yapacağız. Mesela $a değişkeninde bulunan bir değer $b değişkeni ile aynı mı? Ya da daha mı büyük? Gibi karşılaştırmaları bu operatörler ile yapacağız.
Karşılaştırma operatörlerini bir tablo üzerinde gösterelim:

Operatör İsim Kullanılışı
== Eşittir $a == $b
=== Denktir $a === $b
!= Eşit değildir $a != $b
!== Denk değildir $a !== $b
<> Eşit değildir $a <> $b
< Küçüktür $a < $b > Büyüktür $a $b
< = Küçük ve eşittir $a <= $b >= Büyük ve eşittir $a >= $b

Karşılaştırma operatörü olan çift eşittir işaretinde dikkat etmemiz gereken ufak bir ayrıntı var. Çift eşittir işareti iki değeri karşılaştırmakta kullanılır, tek eşittir işareti ise değer atamakta kullanılır. Bu yüzden karşılaştırma operatörü olan çift eşittir kullanmak istediğiniz zaman tek eşittir yapmadığınızdan emin olun.

Karşılaştırma operatörleri nasıl kullanılır?
Karşılaştırma operatörlerini daha çok soru sormak gibi değerlendirebiliriz. Bu operatörleri koşul gerektirecek olan öğreneceğimiz bir sonraki ifadelerde kullanacağız. Kullanacağımız bu operatörlerin anlamlarına örnek olarak şunu diyebilirim:

$a = 10;
$b = 20;

Yukarıda a ve b değişkenlerine değer atadım. Şimdi karşılaştırma operatörü ile “$a == $b” dediğimde aslında “$a değişkeni $b değişkenine eşit mi?” diye bir soru sormuş oldum. Bu karşılaştırmanın sonucu yanlış yani FALSE dönecektir.

Farklı bir operatör ile daha deneyelim: “$b > $a” burada da “$b değişkeni $a değişkeninden büyük mü?” diye sormuş oldum. Bu karşılaştırmanın cevabı da doğru yani TRUE dönecektir.

Mantıksal operatörler
Mantıksal operatörler ile birden fazla karşılaştırmayı değerlendirip, birleştirebiliriz. Mesela bir değişkenin hem 0 dan büyük mü hem de 100 den küçük mü diye bir karşılaştırmasını mantıksal operatörler sayesinde yaparız.

Mantıksal operatörleri bir tabloda gösterelim:

Operatör İsim Kullanılışı Açıklaması
! Olumsuzsa !$a $a’nın değeri olumsuz yani FALSE ise TRUE yani doğru döner. Aksini yapar olumsuz mu diye sorar.
&& Ve $a && $b $a ve $b’nin değeri olumlu ise olumlu yani TRUE döner, ikisinden birisi olumsuz ise olumsuz yani FALSE döner.
|| Ya da $a || $b $a’nın değeri ya da $b’nin değeri olumlu ise olumlu döner. Birisinin ya da ikisininde olumlu olması yeterlidir.
Bunlara bir örnekte başta dediğimiz; bir değişkenin değeri “0 dan büyük ve 100 den küçükse” karşılaştırmasını yapalım. Bunun için uygulayacağımız koşul şöyledir: “$a > 0 && $a < 100” Bunun anlamı $a değişkeni 0 dan büyükse ve 100 den küçüksedir. Eğer $a’daki sayı 0 ile 100 arasında ise bu koşulun sonucu olumlu döner. Hata bastırma operatörü Hata bastırma operatörü (@) et işaretidir. Her deyimin önünde kullanılabilir. Hata oluşturacak yerlerin başına bunu koyduğunuzda ekrana bir hata çıktısı verdirmemeye yarar. Hatayı görmezden gelmeye ve sonucu olumsuz yapmamaya yarar. Diyelim bir bölme işlemi yaptırıyoruz, bu bölme işlemine belki 0 rakamını da yazabiliriz. 0 yazdığımızda PHP bir rakamı 0 a bölemeyeceği için hata verecektir. Bu durumda bu operatör kullanarak hatayı bastırabiliriz. Örnek: $a = 10;
$b = 0;
$sonuc = @($a/$b);
echo $sonuc;
Ekranda hata yazmaz onun yerine olumsuz sonuç döner.

PHP koşullu ifadeleri
Ve nihayet öğrendiğimiz bu operatörleri kullanarak karar verdirme zamanı geldi! Yapılan çalışmalarda ve sayfalarda mantıklı ve işe yarar sonuçlar verdirtebilmek için kodlarımızın karar vermesi gerekiyor.

PHP’de karar verdirtebilmek için ise if gibi bazı ifadeleri kullanacağız. Ve bu ifadeler ile kodlarımıza bir mantıklı bir amaç ve sonuç oluşturacağız.

İf ifadeleri
PHP’de if ile kodlarımıza kararlar verdirtebiliriz. Türkçe anlamı eğer olan if ifadesi için bir koşula ihtiyacımız ve koşul sonucunda yapmasını istediğimiz koda ihtiyacımız var.

If’in temel şekli şöyledir:

if( koşul ) {
// koşul olumlu ise çalışacak kodlar
}

Hemen bir örnek ile açıklayıp gösterelim:

$a = 20;
if($a > 10) {
echo 'a değişkeni 10 dan büyüktür';
}

İlk olarak $a değişkenine 20 değerini verdik sonrasında if ile “eğer $a değişkeni 10 dan büyükse aşağıdaki kodları çalıştır” dedik. Yani bu durumda ekranda “a değişkeni 10 dan büyüktür” yazacaktır. Eğer $a değişkenine 5 değerini verseydik ekranda hiçbir şey yazmazdı.

If birden fazla koşul uygulama
Mantıksal operatörler ile if’in içerisine birden fazla karşılaştırma gerçekleştirebiliriz. Mantıksal operatörlerde verdiğimiz bu örneği de hemen if’i kullanarak gösterelim.

$a = 10;

if($a > 0 && $a < 100) { echo 'a değişkeni 0-100 arasında'; }
Burada eğer $a değişkeni 0 dan büyük ve $a değişkeni 100 den küçük ise aşağıdaki kodları çalıştır dedik. Ve $a değişkeni değerine 10 verdiğimiz için ekranda a değişkeni 0-100 arasında yazacaktır.

Eğer koşullar gerçekleşmiyorsa { … } parantez içerisine aldığımız kodlar çalışmayacaktır.

Else ifadeleri
Else’nin Türkçe anlamı değilsedir. Yani if koşullar olumlu olduğunda { … } parantez içerisindeki kodları çalıştırırken else’yi kullanarak eğer koşullar gerçekleşmediyse de bir başka kod bloğunu çalıştırabiliriz.

Yukarıdaki örneğimizin üzerinde uygulayarak gösterelim:

$a = 200;

if($a > 0 && $a < 100) { echo 'a değişkeni 0-100 arasında'; } else { echo 'a değişkeni 0-100 arasında DEĞİL'; }
Burada eğer koşullar doğru değilse a değişkeni 0-100 arasında DEĞİL yaz dedik. Ve bu seferde $a değişkenine 200 değerini verdiğimiz için ekranda “a değişkeni 0-100 arasında DEĞİL” yazacaktır.

Hem if hem de else olayına bir örnek daha gösterelim. Ehliyet almak için 18 yaşını doldurmuş olmak gerekiyor. Şimdi if ve else kullanarak bu durumu ifade edelim:

$yil = 2010;
$dogum_yili = 1992;
$yas = $yil - $dogum_yili;

if($yas >= 18) {
echo 'Ehliyet alabilirsin';
} else {
$kalan_yil = 18 - $yas;
echo 'Ehliyet almak için ' . $kalan_yil . ' yıla daha ihtiyacın var.';
}

Yukarıda hem yaş hesaplama hem de if ile bir ehliyet alabilirlik testi yaptık. Eğer yaşımız 18 den büyük ya da eşit ise ekranda Ehliyet alabilirsin yazacaktır. Eğer 18 den küçük ya da eşit değilse yaştan 18′i çıkartıp 18 olmasına kalan yılı bularak ekrana ehliyet almak için kaç yıla ihtiyacımız olacağını yazacaktır.

Elseif ifadeleri
Else değilse demekti if ise eğer demekti, yani bu da demek oluyor “değilse eğer”. Bu ifade ile bir koşul uymuyorsa hemen ardından başka bir koşul deneyebiliyoruz. Mesela elseif ile bir puan değerlendirmesi yapalım. Notumuz eğer 5 ise pekiyi 4 ise iyi 3 ise orta 2 ise geçer 1 ise zayıf yazdıralım.

$puan = 5;

if($puan == 5) {
echo 'Pekiyi';
} elseif($puan == 4) {
echo 'İyi';
} elseif($puan == 3) {
echo 'Orta';
} elseif($puan == 2) {
echo 'Geçer';
} elseif($puan == 1) {
echo 'Zayıf';
}

Ekranda pekiyi yazar.

Switch ifadesi
Sadece bir veya birden fazla eşitliği kontrol etmek istediğiniz durumlarda kullanılabilecek bir ifadedir. Switch ile yapılacak işlemin aynısı else if ile de yapabilirsiniz, fakat eğer sadece bir veya daha fazla eşitliğin karşılaştırılması üzerine bir ifade kullanılmak isteniyorsa bu işlem için switch daha uygundur.

// if ile yapmak istediğimizde:
if($meyve == 'karpuz') {
echo 'karpuz seçildi';
} else if($meyve == 'çilek') {
echo 'çilek seçildi';
} else if($meyve == 'armut') {
echo 'armut seçildi';
}

// aynısı switch ile yapalım:
switch($meyve) { // karşılaştırılacak değişkeni ifade ediyoruz
case 'karpuz': // eğer karpuz'a eşitse
echo 'karpuz seçildi';
break; // eğer bu seçenek eşleştiyse karşılaştırmaya devam etme
case 'çilek':
echo 'çilek seçildi';
break;
case 'armut':
echo 'armut seçildi';
break;
}

Bu tip durumlarda switch kullanmak if kullanmaktan daha performanslı ve kısa oluyor.

Alt alta case ifadesini kullanarak birden fazla değer karşılaştırması yapabilirsiniz.

switch($meyve) {
case 'kiraz':
case 'çilek':
case 'karpuz':
echo 'kırmızı renkli meyve';
break;
case 'armut':
echo 'sarı renkli meyve';
break;
}

Eğer switch içerisinde ifade edilen hiç bir değerde eşleşmediğinde yapmak istediğiniz bir şey varsa da bunu “default” ile ifade ediyoruz;

switch($meyve) {
case 'muz':
echo 'muz var!';
break;
case 'karpuz':
echo 'karpuz var!';
break;
default:
echo 'bu meyveden yok!';
break;
}

Bir sonraki PHP serüvenlerinde görüşmek üzere hoşçakalın!

Facebooktwittergoogle_plusredditpinterestlinkedinmail

Veri Şifreleme ve Güvenlik Önlemleri..

Sevgili arkadaşlar kriptoloji bir güvenlik konusu oldugundan dolayı yanlış açmadıysam buraya uygun herhalde
eger bir hata yaptım ise affola konunun yeri konusunda ceh ve burası arasında gidip geldim bilgileri derleyip analiz edince burasını uygun gördüm
güzel bir döküman okumanızı tavsiye ederim

SAYGILAMLA

Kriptoloji (Cryptology)
Kriptolojinin temel olarak ayrıldığı iki dalı vardır: Kriptografi(Cryptography) ve Kripto analiz(Cryptanalysis).
Kriptoloji basit anlamda şifreli belgeler, gizli yazılar bilimidir. İki ayrı ana dalı vardır: Kriptografi ve Kripto analiz. Kriptografi, metin şifrelemekte kullanılan tekniklerin tümünü inceleyen bilim dalıdır. Kripto analiz, ise şifrelenmiş bir metnin şifrelenmemiş düz metin haline getirebilmek için yapılabilecek her türlü saldırıları ve türlerini inceleyen bilim dalıdır. Kaba tabiriyle, kriptografi bilimi ile şifrelenen metinler, kripto analiz bilimi ile kırılmaya çalışılır.

Kriptolojinin tarihçesine baktığımızda uzun yıllar geriye gitmemiz gerekmektedir. M.Ö. 1900’lü yıllarda firavunların mezarlarındaki yazıtlarda kullanılan semboller bilinen ilk kriptografik dönüşümlerdir. Daha çok sıkı askeri disiplinleri ve talimleriyle tanınan Kuzey Yunanistandaki tarihi bir şehir olan Sparta’ da M.Ö. 475 yılında bilinen ilk kriptografik iletişim aracı ‘skytale’ geliştirilmiştir. M.Ö. 60’lı yıllarda ise Julius Ceaser askeri anlamda şifreli metinleri kullanan ilk kişidir. Daha sonraki makalelerimizde daha detaylı olarak anlatacağımız Ceaser şifrelemesi o zamanlara dayanmaktadır. Bilinen en eski bilimsel kripto analiz eseri, ünlü Yunan bilim adamı alKalkashandi tarafından 1412 yazılmıştır. Ardından birinci dünya savaşı yıllarına kadar bu alanda pek bir gelişme kaydedilmemiştir. 1917’de Edward Hugh Hebern tarafından Rotor machine adı verilen bir şifreleme aracı geliştirilmiştir. 1971’de de IBM tarafından Lucifer adı verilen şifreleme şeması oluşturulmuştur. 1975’te DES, 1976’da da Diffie and Hellman şifreleme teknikleri geliştirilmiştir. Burada ismi geçen şifreleme yöntemleri daha sonraki makalelerimizde çok daha detaylı olarak işlenecektir.

Kriptografiyi temel olarak üç ayrı sınıfa ayırmak mümkün. Birincisi düz metni belirli şifreleme algoritmaları çerçevesinde geri dönüşümü olacak şekilde şifrelemektir. Harflerin yerlerinin değiştirilmesi ya da her harfin başka bir harfle değiştirilmesidir. Bir örnek ile açıklamak istersek, DOTNET kelimesini TTEDON ve ya EPUOFU şeklinde şifreleyebiliriz. İkinci yöntem olarak da, gönderen ve/veya alıcı tarafından bilinen anahtarlar kullanılarak metinleri şifreleyebiliriz. DES, IDEA vs.. Üçüncü yöntem olarak da metinleri bloklar halinde ve bir bütün olarak şifreleyebiliriz. Block Cipher ve Stream Cipher.

Kripto analizinde kullanılacak stratejiler kullanılan şifreleme planına ve elimizdeki bilgilere göre değişmektedir. Aşağıdaki tabloda şifrelenmiş metin üzerine yapılabilecek saldırı çeşitleri listelenmiştir:

Saldırı türü
Kripto analiz için bilinenler

Sadece Şifrelenmiş Metin
Şifreleme algoritması
Deşifre edilecek şifreli metin

Şifrelenmemiş Metin
Şifreleme algoritması
Deşifre edilecek şifreli metin
Bir ya da daha fazla şifrelenmemiş metin örneği çifti

Belirli Şifrelenmemiş Metin
Şifreleme algoritması
Deşifre edilecek şifreli metin
Şifreli metin ve bu metne karşılık gelen şifrelenmemiş metin örneği

Belirli Şifrelenmiş Metin
Şifreleme algoritması
Deşifre edilecek şifreli metin
Şifrelenmiş ve deşifre edilmiş anlamlı metin

Belirli Metin
Şifreleme algoritması
Deşifre edilecek şifreli metin
Şifrelenmiş ve deşifre edilmiş anlamlı metin
Şifreli metin ve bu metne karşılık gelen şifrelenmemiş metin örneği

Kriptolojiden bahesedip de İkinci Dünya Savaşının kaderini değiştiren Enigma’ dan bashetmemek olmazdı. Rotor Machine prensibine dayanan Enigma, Alman Arthur Scherbuis tarafından geliştirilmiş bir şifreleme aracıdır. Kauçuk, lastik gibi elektriği iletmeyen bir maddeden yapılan Rotor bir buz hokeyi diski boyutlarındadır. Bu disk veri girişi ve çıkışı için iki ayrı levhadan oluşmuştur. Hem veri girişi levhası hem de veri çıkışı levhasında diski çevreleyen eşit olarak bağlanmış 26 bağlantısı vardır. Veri girişi levhasındaki 26 bağlantı rotorun veri çıkışı levhasındaki 26 bağlantı noktasına rastgele bağlanmaktadır. Makinenin tüm gizemli kısmını da zaten rastgele oluşturulmuş bu bağlantılar sağlamaktadır. İkinci Dünya Savaşında İngilizler Almanların enigma ile şifrelenmiş belgelerini çözümleyemediler. Bir İngiliz baskıyla bir enigma aracının İngilizlerce bulununcaya kadar enigmanın sırrı çözülemedi. Enigma ile şifrelenmiş bilgileri kırmayı başaran İngilizler Almanların şüphelenmemesi için bir sonraki Alman saldırısına izin verdiler. Almanlar ne olduğunu dahi anlayamadan İngilizler savaşı lehlerine çevirmeyi başardılar. Bu da kriptolojinin ve şifreleme mekanizmalarının önemi üzerine sizlere bir fikir verebilir.

Burada bahsedilmesi gereken önemli bir diğer terim de “Güvenli Sistemler” dir. İki çeşit güvenli sistem vardır:

Koşulsuz Güvenli Sistemler(Unconditionally Secure Systems)
Matematiksel olarak Güvenli Sistemler(Computationally Secure Systems)
Eğer şifrelenmiş metin, boyutu ne olursa olsun, şifrelenmemiş metni oluşturmak için yeterli bilgiyi içermiyorsa bu tür sistemler Koşulsuz Güvenli Sistemler olarak adlandırılmaktadır. Şifrelenmiş metni kırmanın maliyeti şifrelenmemiş metnin değerinden fazlaysa ve/ve ya şifrelenmiş metni kırmak için gereken zaman bilginin geçerlilik süresinden fazlaysa da, bu tür sistemler Matematiksel olarak Güvenli Sistemler olarak adlandırılır.

Ayrıca şunu da belirtmekte yarar var ki, bu ve bundan sonraki makalelerimizde geçecek olan düz metinden (plain text) kastımız, şifrelenmemiş metindir.

Klasik Şifreleme Teknikleri

Döküman mahiyetinde olan bu yazıda klasik şifreleme tekniklerini anlatmaya calıştım.

Steganography(Metni Gizleme): Sözlüklerde tam karşılığını bulamayacağınız kadar eski bir kelime olan David Kahn “The Story of Secret Writing” adlı eseriyle bugünkü anlamını kazanmıştır: Şifrelenmemiş düz bir metni çeşitli dönüşümler kullanarak diğer kişilerce anlaşılamaz bir metin haline getirilmesi işlemidir. Verilebileecek en basit örnek, bir metnin tüm harflerinin başka bir metnin içindeki kelimelerin ilk harflerine gizlenmesidir. Örneğin; “Sezen Aksu ve aşk şarkıları benim için tüm tesellilerden iyidir.”

Ancak her durum için böyle bir mesajı oluşturmak zor ve zaman alıcı bir işlemdir. Oluşturulacak mesajdaki kelimelerin anlamlı bir bütünlük oluşturacak şekilde bulunmasının ancak çok üst düzey bir yapay zeka uygulamasıyla bilgisayar ortamına aktarılması mümkündür. Hala daha “natural language processing” (bilgisayarların konuşma dillerini anlayabilmesi olarak basitçe tanımlanabilir) konusunda mükemmel bir sisteme ulaşılamamış olması kadar önemli bir nokta da kırılmasının çok kolay olmasıdır. Tarihçesine göre çeşitli teknikler kullanılmıştır. Bazıları:

Character marking(Harf işaretleme): İsminden de anlaşılabileceği üzere, önceden belirlenmiş bazı karakterlerin daha derin (daha koyu değil) olarak yazılması mantığına dayanır. İşaretli harfler ancak belirli bir açıyla parlak bir ışığa tutulduğunda görülebilir.
Invisible ink (Görünmeyen mürekkep): Belirli bir sıcaklığa ulaşmadan ya da kimyasal bir işlemden geçirilmeden görülemeyen özel bir mürekkep ile yazılır.
Pin Punctures (İğne delikleri): Belirli harflerin üzerinde gözle görülemeyecek kadar küçük delikler açılarak gerçekleştirilir. Deliklerle işaretlenmiş araçlar parlak bir ışığa tutularak okunur.
Her ne kadar bu teknikler çok eski gibi gözükse de steganography tekniğinin çağdaş örnekleri de bu tekniklerin eşleniği durumundadır. Çağdaş örneği olarak bir CD deki bilgilerin her byte’inin son bitini kullanarak şifreleyebiliriz. Örneğin oluşturulabilinecek en büyük çözünürlükteki 32 bitlik resmlerin kaydedildiğ bir CD’yi ele alalım. Burada biraz teknik bilgi verelim. Bir resmin 32 bit olması; her pixelinin 32 bitlik renk kodlarıyla gösterilmesi demektir. En sonuncu bitin değişmesi resmin genel içeriğini ve renklerin ihmal edilebilir ölçülerde değiştirir. Bu sayede 700 MB’lık bir CD’de yaklaşık 12 MB’lık bilgi saklayabilirsiniz. Buna benzer bir şifreleme çok yakın bir zamanda kullanılmıştır.

Substitution techniques(Yerine koyma teknikleri): Düz bir metindeki harflerin yerine başka harflerle, sayılarla ya da semboller koyarak yapılan şifreleme türüdür. Eğer düz metin ardışık bitler olarak görülebiliyorsa, çeşitli bit patternlerinin(örneklemlerinin) değiştirilmesi de bu tekniğe dahil edilebilir.

Caesar Cipher(Sezar Şifrelemesi), bilinen en eski yerine koyma tekniğidir. Ünlü Roma İmparatoru Julius Caesar tarafından geliştirilmiştir. Sezar şifrelemesinde mantık her harfi kendisinden sonra gelen üçüncü harfle çembersel olarak değiştirmeye dayanmaktadır. Örneğin;

düz metin: “Bilgisayarların şifreleri kırıldı”
şifrelenmiş metin: “DLOİUÖÇBÇTOÇTKÖ ÜLHTĞOĞTL NKTKOGK”

Sezar şifrelemesi 3 önemli zayıflığı vardır. Şifrelenmiş metinden hangi dilin kullanıldığı rahatlıkla anlaşılabilir. Türkçe için düşündüğümüzde sadece 28 ayrı şifreleme geliştirilmiş olabilir. Şifreleme ve deşifreleme algoritmalarının biliniyor ve kolaylıkla uygulanabiliyor olması da diğer zayıf olduğu yönüdür. Sezar şifrelemesi ile şifrelenmiş bir metin “Brute Force” bir saldırı ile kırılabilir. Brute Force, kelime anlamı olarak kaba kuvvet demektir. En zayıf ama en kesin saldırı yöntemidir. Sezar şifrelemesi gibi algoritmaların bilindiği yöntemlerde olası bütün kombinasyonların denenmesi demektir. Daha sonraları çokça bahsedeceğimiz “Brute Force” saldıraların nasıl gerçekleştirileceği ve bu saldırılardan nasıl korunabileceğimizi kodlarıyla birlikte açıklayacağız. Şimdilik 28 ayrı şifrelemenin de denerek düz metnin ele geçirilmesi olarak bilmeniz yeterli olacaktır.

Sezar şifrelemesindeki 28 ayrı şifrelemenin yetersizliği açıktır. monoalphabetic Ciphers(Tekli alfabeye dayanan şifreleme), Sezar Şifrelemesindeki mantığı biraz daha geliştirilerek, her harfe rastgele bir harfin eşleştirilmesi mantığına dayanmaktadır. Yani A ile eşlenen harf arasındaki ilişki diğer hiç bir harf arasında yer almamaktadır. Bunun basit bir örneğini her haftasonu gazetelerin ilavelerinde verdikleri “Şifreli bulmacalar” da görmekteyiz. Orada harfler yerine rakamlar verilmektedir. Çözülebiliriliğini arttırmak için şifrelenmemiş metin üzerine bir kaç örnek ve şifrelenmemiş metnin içeriği hakkında bilgi verilmektedir.

monoalphabetic Cipher’lar ile Türkçe için “29!-1” ayrı şifreleme söz konusudur. İlk bakışta çok güvenli izlenimi yaratmasına karşın monoalphabetic cipherlar da kırılabilmektedir. Hala daha şifrelemenin yapıldığı dil rahatlıkla tespit edilebiliyor. Şifrelemenin yapıldığı dil üzerine istatiksel bir araştırma yaparak kısa sürede kırmanız mümkündür. Her dilde belirli karakterlerin tekrarlanma frekansları belirlidir. Elimizdeki şifrelenmiş metinde en çok tekrarlanan karakterler ile şifrelemenin yapıldığı dildeki en yüksek frekanslı karakterleri eşleştirdiğinizde tahmin ettiğinizden çok daha kısa bir sürede kırabilirsiniz. Zaten eşleştirmelerden sonra elimizdeki şifreli metnin haftasonu gazetelerinde verilen bulmacalardan pek bir farkı kalmıyor.

monoalphabetic tekniğinin biraz daha geliştirmenin bir diğer yolu da şifreleme boyunca farklı “yerine koyma teknikleri” kullanmaktır. Bu tür yaklaşımların genel adı Polyalphabetic Ciphers(çoklu alfabeye dayanan şifreleme)’ dır. Bu tür şifreleme mekanizmalarının çoğunda iki ortak özellik vardır:

1. Önceden tanımlanmış bir monoalphabetic yerine koyma kuralları kümesi vardır,

2. Bir anahtar verilen dönüştürme işlemi için hangi kuralın kullanılacağını belirler.

Multiple-Letter Encryption(Çoklu Harfle Şifreleme): Verilen düz metindeki ikili harflere tek bir birim olarak ele alan ve işleyen şifreleme tekniğine dayanan Playfair multiple-letter encryption için en çok bilinen yöntemdir. Digraph(tek sesi temsil eden iki harf) olarak alınan harfler yine digraph olarak şifrelenir. Playfair algoritması ingilizce için özelleşmiş bir şifreleme algoritmasıdır. 5×5’ lik bir matris kullanılarak yapılır. Playfair, İngiliz bilim adamı 1854’te Sir Charles Wheatstone tarafından ilk defa ortaya atılmıştır. Ancak Playfair’e destek veren ve savunan Baron Playfair of St. Andrews ismiyle anılmıştır. Playfair ile ilgili yapacağınız hemen hemen her araştırmada karşınıza çıkacak klasik ve açıklayıcı bir örnek vardır. Bu örnek de Lord Peter Wimsey tarafından Dorothy Sayer’s Have His Carcase adlı eserinden alınmıştır.

Yukarıda verilen örnekte anahtar kelime “monarchy” dir. Matris anahtar kelimede geçen harflerin dışındaki harflerin soldan soğa ve yukarıdan aşağıya doğru sırayla yazılmasıyla oluşturulmuştur. I ve J harfleri bir harf olarak sayılmıştır. Metin her seferinde iki karakter alınarak ve aşağıdaki dört kural uygulanarak şifrelenirler.

1. Tekrarlanan karakterler önceden kabul edilmiş bir doldurma karakteriyle birbirinden ayrılırlar. Kural olarak olmasada genel olarak X karakteri kullanılır. Örneğin, “balloon” kelimesi “ba lx lo on” şeklinde ikililere ayrılarak şifrelenecektir.

2. Matriste aynı satıra düşen düz metin karakterleri için kural, her harfi bir sağındaki harf ile değiştirmektir. Örneğin, AR digraphı, RM olarak şifrelenecektir. (Matristeki çemberselliğe dikkat edin).

3. Matriste aynı sutüna düşen düz metin karakterleri için kural, her harfi bir altındaki harf ile değiştirmektir. Örneğin, MU digraphı, CM olarak şifrelenecektir. (Matristeki çemberselliğe dikkat edin).

4. Eğer yukarıdaki üç koşuldan hiç biri de karşılanmıyorsa, her düz metin karakteri, kendisiyle aynı satırdaki, eşleniği karakterle aynı sutündaki harf ile değiştirilir. Örneğin, HS digraphı BP olarak, EA digraphı da IM/JM olarak şifrelenecektir.

monoalphabetic şifrelemelere göre çok daha güvenilirdir. Her şeyden önce, monoalphabetic şifrelemede, (İngilizce için) sadece 26 harf varken, burada (İngilizce için) 26×26=676 ayrı digraph vardır, bu sayede tek bir digraphın çözülmesi biraz daha zorlaşmıştır. Bununla beraber karakter tekrarlanma frekansının oluşturulacak şifreli metni etkilemez. Bu sebeplerden ötürü, uzun süre playfair’ın kırılmasının imkansız olduğu düşünüldü. I. Dünya Savaşında İngiliz Ordusu ve II. Dünya Savaşında da U.S. Ordusu ve müttefikleri tarafından kullanılmıştır. Bu kadar güvenli olduğu sanılan Playfair şifrelemesinin kırılması aslında tahmin edilen çok daha kolaydır. Şifrelenmemiş düz metnin dili ve yapısı hakkında bir çok bilgiyi şifrelenmiş metinden elde edebiliyoruz. Genellikle bu şifreleme tekniği ile şifrelenmiş metinlerin kırılması için bir kaç yüz karakterlik şifreli bir metin yeterli olmaktadır. Oysa bir şifreleme tekniğinin tam anlamıyla güvenli bir şifreleme tekniği olabilmesi için ne kadar şifrelenmiş metin olduğunun önemi olmamalıdır. Elimizde on binlerce karakter şifrelenmiş metin olsa bile, bu bizim şifreyi kırmamıza yetmemelidir.

Not: Her ne kadar playfair sadece İngilizce için geliştirilmiştir dediysek de, Türkçe için de aynı yöntemi uyarlamak mümkündür. Ancak bununla ilgili hiç bir resmi kaynakta belgelenmiş bir yazı bulunmamaktadır. O yüzden Türkçe için yoktur diyebiliriz, ancak yapılamaz diyemeyiz.

Encryption Şifreleme Tekniği

System.Security.Cryptography namespace’i güvenli şifreleme, deşifreleme ve diğer güvenlik hizmetlerini gerçekleştiren hashing, rasgele sayı üretimi ve mesaj doğrulama gibi şifreleme servislerini içerir. Daha önceki makalelerimizde bahsettiğimiz gibi şifreleme genel olarak;

Gizlilik(Confidentiality)
Veri Bütünlüğü(Data Integrity)
Kimlik Doğrulama(Authentication)
güvenlik servislerini sağlamak için kullanılıır. .NET ile sağlanan şifreleme tekniklerini 4 ayrı gruba ayırmamız mümkündür:

Simetrik Şifreleme (symmetric cryptography): Private-key encryption olarak da bilinir. Her iki tarafın da bildiği tek bir ortak anahtar kullanarak şifrelemeyi ve deşifrelemeyi gerçekleyen şifreleme teknikleridir. DES, RC2, Rijndael ve TripleDES(3DES) Cryptography namespace’i altında yer alan şifreleme teknikleridir. Bu şifreleme tekniğinin en önemli dezavantajı her iki tarafın tek bir anahtar üzerinde anlaşması ve sadece bu anahtarı kullanarak şifreleme/deşifreleme işlemini gerçeklemesidir. Bu teknikte hiç bir taraf, karşı tarafın gerçekten karşı taraf olup olmadığını bilememektedir. Hatta öyle ki iki tarafda olması gereken kişiler olmayabilir. Genellikle simetrik şifreleme diğer şifreleme tekniklerinde transfer edilecek anahtarlar gibi her iki taraf içinde ortak ifadelerin şifrelenmesi gerektiğinde kullanılır.
Asimetrik Şifreleme (asymmetric cryptography): Public-key encryption olarak da bilinir. İkili anahtar kullanarak şifreleme ve deşifrelemenin gerçeklendiği şifreleme tekniğidir. Bu şifreleme tekniğinde herkesin 2 anahtarı vardır. Bunlardan biri public’tir, yani herkesce bilinir. Diğeri ise private’dır ve sadece şifrelemeyi gerçekleyen tek bir taraf tarafından bilinir. Bu iki anahtarın rasgele seçilmiş iki anahtar şeklinde değildir. İkisi de birbirini bütünleyen iki anahtar şeklindedir. .NET Framework DSA ve RSA algoritmalarını kullanmaktadır.
Cryptographic signing: Verinin gerçektende belirli bir kişi ya da gruptan geldiğinin anlaşılması için tarafların verileri kendi imzaları ile şifrelemesi prensibine dayanır. Bu işlem hash fonksiyonlarını da kullanmaktadır. Veriyi gönderenin ve alanın gerçekten de kendilerinin olduğunu kanıtlamalarını sağlar. Gönderen kendi private anahtarı ile şifrelerken gönderenin public anahtarını bilen herhangi biri veriyi gönderenin gerçekten de gönderen olup olmadığını anlayabilir ancak alıcıdan başka kimse gönderilen bilgiyi deşifre edemez. Yine .NET Framework DSA ve RSA bu tür şifreleme teknikleri için kullanmaktadır. Bir önceki şifreleme tekniği ile kullanım ayrılıklarını daha sonraki makalelerimizde detaylı olarak irdeleyeceğiz.
Cryptographic hashes: Herhangi bir boyuttaki bir bilgiyi sabit uzunluktaki bir byte dizisiyle eşleştirir. Hashler istatiksel olarak tektir(unique), yani iki farklı byte diziliminin aynı hash değerine sahip olamaz. Hash işlemi genellikle tek yönlü fonksiyonlarla gerçeklenir. Tek yönlü fonksiyonlar, matematikteki tersi alınamayan fonksiyonlardır. Örnek olarak bir sayının belirli bir sayıya göre modunun alınmasını verebiliriz. 25 ve sayısının mod 10 daki karşılığı 5 iken mod 10 daki karşılığı 5 olan sayı sadece 25 değildir. Yani şifrelenmiş metni kaybettik! Geri dönüşümüz yoktur. Verdiğimiz örnekten de dikkat edeceğiniz üzere iki farklı sayı aynı hash değerine karşılık geldi. Oysa demin farklı iki byte diziliminin aynı hash değerine sahip olamayacağını söylemiştik. Bu noktada kendimizle çelişiyor gibi olabiliriz. Ama günümüzde kullanılan hiç bir hash fonksiyonu verdiğimiz örnekteki kadar basit ve dar alanlı değildir. HMACSHA1, MACTripleDES, MD5, SHA1, SHA2, SHA3, SHA5 .NET Framework’te yer alan bu tür şifreleme teknikleri örneklerindendir.
Yukarıda saydığımız şifreleme tekniklerinin .NET ile gerçeklenmesini bu yazı dizimizin ilerki makalelerinde bulabilirsiniz. Yine şifreleme teknikleri kadar önemli bir noktada “Random Number Generation” rasgele sayı üretimidir. .NET Framework RNGCryptoServiceProvider sınıfı ile bu sorunun üstesinden gelmeyi bilmiştir.

Şimdiye kadar bahsettiğimiz şifreleme tekniklerine ek olarak çok basit anlamda çalışan kendi şifreleme tekniğimizi geliştirebiliriz. Sizlere daha önceki makalelerimizde bahsettiğimiz şifreleme tekniklerinden Ceaser şifreleme tekniğini gerçekleyen ve kullanan bir web servisi uygulamasını geliştirelim.

Ceaser Cipher

Örnek Ceaser Cipher uygulamamız için öncelikle bir web servisi uygulaması başlatalım. Bu ve bundan sonraki örneklerimiz bizim kullanacağımız isim konvansiyonu doğrultusunda web servisimize SYCryptologyServices adını verelim. Ve bu web servisi projesine “CeaserCipher.asmx” isimli bir web servisi oluşturalım. Aşağıdaki kod parçaçıklarını da sırasıyla kodumuza ekleyelim;

private byte CeaserCipherIncrement=2;

[WebMethod]
public string CeaserCipherEncrypt(string plainText) {
StringBuilder sb=new StringBuilder();
for (int i=0;i Facebooktwittergoogle_plusredditpinterestlinkedinmail

PHP Mail Gönderme

Kod buraya yetmiyor onun yerine:) bir yere yükleyim.

https://rapidshare.com/files/2887969236/phpmailer.rar

bunu indir içindeki mail.php dosyasını kendi sitenin olduğu yere at. sonra

IsSMTP(); // Mailimizin SMTP ile gönderileceğini belirtiyoruz
$mail->From = “user@domain.com”; //Gönderen kısmında yer alacak e-mail adresi
$mail->Sender = “user@domain.com”;
$mail->ReplyTo = “user@domain.com”;
$mail->FromName = “PHP Mailer”;
$mail->Host = “smtp.domain.com”; //SMTP server adresi
$mail->SMTPAuth = true; //SMTP server’a kullanıcı adı ile bağlanılcağını belirtiyoruz
$mail->Username = “user@domain.com”; //SMTP kullanıcı adı
$mail->Password = “password”; //SMTP şifre
$mail->WordWrap = 50;
$mail->IsHTML(true); //Mailimizin HTML formatında hazırlanacağını bildiriyoruz.
$mail->Subject = “Deneme Maili”; // Konu

//Mailimizin gövdesi: (HTML ile)
$body = “Bu mail bir deneme mailidir.

SMTP server ile gönderilmiştir.”;

// HTML okuyamayan mail okuyucularda görünecek düz metin:
$textBody = “Bu mail bir deneme mailidir. SMTP server ile gönderilmiştir.”;

$mail->Body = $body;
$mail->AltBody = $text_body;

$mail->AddAddress(“tapsin@tapsin.net”); // Mail gönderilecek adresleri ekliyoruz.
$mail->AddAddress(“hedef@domain.com”);

if ($mail->Send()) echo “Mail gönderildi”;
else echo “Mail gönderimi başarısız”;

$mail->ClearAddresses();
$mail->ClearAttachments();
?>

Facebooktwittergoogle_plusredditpinterestlinkedinmail

Open Source Nedir ?

Open Source (Açık Kaynak) kavramı özellikle ülkemizde çok fazla basite indirgenmiş bir kavramdır. Aslında open source dediğimiz şey gerçekte çok basit bir kavramdır. Fakat benim ilk cümlemde “basite indirgenmiş” diyerek anlatmak istediğim şey; kavramın içinin boşaltılmasıdır…

Open Source kavramı bugüne kadar hep yazılım geliştirme süreci ile birlikte kullanılan bir kavram olarak karşımıza çıktı. Zaman zaman birileri bu kavramı karşımıza böyle çıkardı ve bizde karşımıza her sunulan şeyi kabullendiğimiz gibi bunu da hep bu şekilde kabullendik. Fakat gerçekte open source denen kavramı sadece yazılım geliştirme gibi bir alan ile sınırlandırmak bu fikirsel akıma tamamen haksızlık yapmak demektir.

Open source’ ün ne olduğuna geçmeden önce bugüne kadar bize anlatılanlardan bahsetmek gerekirse; en basit hali ile kaynak kodu açık bir şekilde yazılım geliştirme sürecidir diyebiliriz. İlk bakışta herhangi bir mantığa dayandıramadığımız bu süreç üzerine biraz düşününce aslında son derece iyi niyetli bir düşünce olduğunu anlıyoruz. Buraya kadar bir sorun yok zaten. Fakat sorun bu kavramı bu kadar sığ bir şekilde açıklayıp gerisini getirememekten kaynaklanıyor.

Bu durumu neden bir sorun olarak gördüğüme gelirsek eğer şunu söyleyebilirim ki;
bu kavramın içi sığ tutulduğu sürece, open source kavramı kendi ideolojisine tamamen zıt olan farklı ideolojilerin(örneğin kapitalizm gibi) kendi çıkarları doğrultusunda onu sömürmesi devam edecektir. Bu cümleden sonra biraz durup düşünmek gerekiyor sanırım. Çok ufak bir örnek vermek gerekirse, günümüz de tamamen kar elde etmeye odaklanmış ulusararası bir X firması , 2-3 tane open source projeye imza atıp, bakın biz de open source’ e destek veriyoruz imajı yaratarak programcıları kendi cephesine çekmeye çalışmaktadır. Üstelik bu çabalar özgür düşüncenin hakim olması gereken üniversite salonlarında gerçekleştirilmektedir. Farklı bir örnek daha vermek gerekirse benzer girişimler sanat alanında da görülebilmektedir. Bir çok küresel firma bir yandan çevreyi kirleterek Dünya’yı yaşanmaz bir hale getirirken bir yandan da sanata destek veriyoruz imajı yaratmaya çalışır. Peki bunu neden yaparlar? Bu sorunun cevabı tamamen ayrı bir yazı konusudur, dolayısıyla bu bölümü burada bitirerek open source’ ün bize anlatılmayan kısımlarına değinmek istiyorum.

Open source için öncelikle söylenmesi gereken ilk şey bence; asla ama asla sadece yazılım geliştirme süreci ile alakalı bir kavram olmadığıdır. Aksine open source’ ü hayatın her alanında görebiliriz. Yeter ki doğru açıdan bakalım.

Open source, insanların hayata bakış açıları ile örtüşen bir fikir akımıdır. Hayattan tek beklentisi sadece kendini kurtarmak olan ve öğrendiği herşeyi kendisine saklayan insanların sahip olamayacağı bir bakış açısıdır.

Open source, tüm insanlığı daha iyiye ve daha doğruya götürecek bir fikir akımıdır. Dolayısıyla paylaşımcı ve pozitif bir bakış açısıdır. Bir bilim adamının bir hastalığa karşı bulduğu bir ilacın formülünü diğer bilim adamları ile paylaşması da özünde bir open source ‘e destek hareketidir. Bir programcının geliştirdiği bir mimariyi insanlara anlatmasıda…

Open source’e bir programcı bakış açısıyla bakarsak eğer ilk olarak, sadece kaynak kodu açık bir şekilde yazılım geliştirmek demek değildir diyebiliriz. Bu durum sadece yapılması gereken adımlardan biridir. Önemli olan open source denen kavrama neden ve nasıl sadık kalmanız gerektiğidir. Örneğin open source olmayan araçlar ile open source’ e destek verilebilir mi ? Bu sorunun cevabının zaman zaman değişkenlik gösterebileceğine inandığım gibi genel olarak bence evet diyebilirim. Çünkü işin özünde insanlara bir fikir vermek, bir fikri paylaşmak vardır. Eğer yaptığınız işle insanlara bir fikir veremiyorsanız bunun sizden başka kimseye bir faydası yoktur. Bu da open source kavramına tamamen terstir.

Örnek vermek gerekirse bir içerik yönetim sistemini sadece açık kaynak kodlu şekilde geliştirirken insanlara bir fikir veremiyorsanız bunun hiç bir anlamı yoktur. Hatta bence bu tamamen bir zaman kaybıdır. Burada bence bakış açısı şu şekilde olmalıdır; siz veriye erişim için bir mimari geliştirmiş olabilirsiniz ve bunu bir içerik yönetim sistemine entegre şekilde örnekleyerek insanlara sunarsınız. İşte bunu yaptığınız zaman tüm programcılara bir fikir vermiş olursunuz. Burada ki amacınız içerik yönetim sistemi değil, veriye erişim mimarisidir. İçerik yönetim sistemide bu amacın anlatılmasını kolaylaştırmak için kullanılan bir araçtır sadece…

Bu anlattıklarımın hepsi bir yana open source ‘de gözden kaçan bir nokta daha vardır ki oda, geri bildirimdir. Geri bildirim sayesinde sizin paylaştığınız fikirler insanlar tarafından yorumlanır ve bir şekilde size geri döner. Bu sayede siz kendi fikirlerinizin ne kadar doğru veya ne kadar yanlış olduğunu çok net bir şekilde öğrenir ve kişisel gelişiminizi çok olumlu bir şekilde sürdürebilirsiniz. Kendi fikirlerini kimseyle paylaşmayan bir insan neyin doğru neyin yanlış olduğunu asla ama asla öğrenemez bence.

Tekrar etmek gerekirse, open source; sadece kaynak kodu açık bir şekilde yazılım geliştirme süreci demek değildir.Aksine open source’ ü hayatın her alanında görebiliriz. Yeter ki doğru açıdan bakalım.

Facebooktwittergoogle_plusredditpinterestlinkedinmail