Wednesday 13 August 2014

PHP DE RESİM DOĞRULAMA

    İnternette gezinirken birçok login sitelerinde güvenlik amaçlı olarak resim doğrulama kullanılmaktadır.Temel amaç kullanıcının bir spam botu gibi veya sanal kişilikler gibi olmadığını sağlamaktadır.


Öncelikle index.php sayfamızı oluşturalım...

index.php

<!-- Tarayıcı ön belleğinde tutulmaması için no-cache -->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//TR" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="TR" lang="tr">
    
<meta http-equiv="Pragma" content="no-cache" />
    
<meta http-equiv="Expires" content="-1" />
    
<title>wmturk.net - Resim doğrulama uygulamasına ait demo</title>
    
<form method="post" action="result.php">
        Dogrulama Kodu: 
<img src="img.php" height="25" width="75" />
        Doğrulama Kodunu Giriniz: 
<input size="6" maxlength="6" name="kod" type="text" />
        
<input value="Test et" type="submit" />
    
</form>
</body>
</html>

Şimdi oluşturacağımız img.php ile resmi alacağız..

img.php

/*Öncelikle oturumu başlatmamız gerekiyor ki sayfalar arası veri transferi yapılabilsin...*/
<?php
session_start();
...
?>

/*Rasgele bir sayı üretip md5 şifreyelim.Bu şifreli veri 32 digit olacağı için bunun 6 digitini alalım...*/

...
$uret=md5(rand(0,999));//0-999 arası sayı üretilip md5 şifrelendi...

$dogrulama_kod=strtoupper(substr($uret,3,6)); // bu şifreli verinin 3. indisinden itibaren 6 digit al ve büyük harfe çevrildi...

/*Session variable ları atayalım...Bu değeri diğer sayfalarda kullanabileceğiz...*/

$_SESSION['d_kod']=$dogrulama_kod;

/*Şimdi ise resmin boyutları belirleyerek oluşturalım..*/

$en=75;
$boy=25;

$img=imagecreate($en,$boy);

/*Kullanabileceğimiz renkleri oluşturuyoruz...*/

$beyaz = ImageColorAllocate($img, 255, 255, 255);
$siyah = ImageColorAllocate($img, 0, 0, 0);
$kirmizi = ImageColorAllocate($img, 242, 0, 0);

/*Arka planı da beyaz yapalım...*/

ImageFill($img, 0, 0, $beyaz);// 2. ve 3. parametreler x,y koordinatlarını ifade eder.

/* Kodu  resmin üzerine entegre edelim...*/

ImageString($img, 6, 9, 5, $_SESSION["kod"], $siyah);

/*Görüntüyü zorlaştırmak adına resmin içerisine çizgiler çizebiliriz...*/

imageline($img, 0, 2, $en, 2, $kirmizi);
imageline($img, 0, 25, $boy, 0, $kirmizi);
imageline($img, $en, $boy, 40, 0, $kirmizi);
imageline($img, 0, 23, $en, 23, $kirmizi);

/*Resmin formatı belirtilir...*/

header("Content-Type: image/jpeg");
ImageJpeg($img);

/*Oturumu bir defaya mahsus kullandığımız için kapatalım..ve çıkış yapalım...*/

session_destroy($img);
exit();



Bu  aşamada sayfanın güvenlik kodları oluşturulmuş oldu...

Son olarak kod doğrulaması yapalım. 

result.php :

/*Oturumu başlatalım öncelikle...*/

<?php
session_start();
// Eger form doldurulmussa
if (isset($_POST['kod'])) {
    
if (strtoupper($_POST['kod']) == $_SESSION['d_kod']) {//güvenlik kodu ve girilen kod karşılatırılır...
        
echo '<h4>Tebrikler, Doğru kodu girdiniz: <code>' . $_POST['kod'] . '</code></h4>';
    
} else {
        
echo '<h4><code>' . $_POST['kod'] . '</code>Hatali giris, tekrar deneyiniz. ' .$_SESSION['d_kod'] . '</h4>';
    
}
    
echo '<a href="index.php">Tekrar _fcksavedurl=""index.php">Tekrar" _fcksavedurl=""index.php">Tekrar" dene?</a>';
} else {
    
?>
    <a href="index.php">Sadece post verileri ile calisan bir sayfadir. Giris sayfasina donebilirsiniz.?</a>
<?php
}
?>

 şeklinde kodlanırsa girilen guvenlik kodunu testi yapılmış olur...

  Bu arada dikkat edilmesi gereken bir nokta ise; kullanıcının güvenlik kodunu doğru fakat küçük harflerle girmesi durumunda da güvenlik kodu doğru kabul edilecektir..






Friday 18 July 2014

LİNUX SÜRÜMLERİNİN ARASINDAKİ FARKLAR...





*Açık kaynak kodlu olduğu bilinen Linux , günümüzde Windows işletim sisteminin en önemli rakibi olarak görülmekteedir.
*Linux'un birbirinden çok sürümü vardır.Bu sürümlerin temel ortak özelliği Linux çekirdeği üzerine inşa ediliyor olmasıdır.
*Günümüzde kullanıcıların çoğu (Türkiye'de) Windows işletim sisteminin farklı sürmlerini tercih etmektedirler..
*Ancak bu işletim sisteminin free(ücretsiz) olmaması ve lisanslı olması  kullanıcıları free olan Linux'a yönlendirmektedir.
*Linux'a geçmeye karar veren kullanıcıların da seçim yapması gerekiyor..
"Hangi Linux sürümünü kullanmalıyız???"...

*Bu yazıda bu soruya cevap verebilmek adına değerlendirme yapılmaya çalışalım...
http://teknolojidefteri.com/linux-surumleri-arasindaki-farklar.html

                                                            1.UBUNTU

*Linux dağıtımları içerisinde en  fazla populariteye sahip olan sürümdür.Bunun temel nedeni sürekli güncellenmesi  ve hızlı bir biçimde çalişmasıdır.

*Kullanıcılar için masaüstü versiyonları olmakla birlikte  ve aynı zamanda cloud  ve server versiyonları da bulunmaktadır.




2.LINUX MINT
*Linux sürümleri içerisinde donanım gereksinimi olarak en az kaynak tüketen Linux sürümüdür.     

*Sürekli güncellemelerin olması ve kolay kullanımı sebebiyle Ubuntu ile benzerlik göstermektedir.   

* Windows'tan Linux a geçmek isteyen kullanıcıların bu sürümü kullanması  tavsiye edilir..               

*Aynı zamanda Türkçe dil desteği de bulunmaktadır.                                                                       

3.DEBİAN
*Linux sürümleri içerisinde desteklediği kullanıcı profili  en yüksek olansürümüdür..

*Bu sürümde kullamıcıların donanımları çok iyi şekilde yönetmeleri gerekmektedir.
 
4.FEDORA
*
  
5.PARDUS
*En önemli özelliği milli işletim istemi olması özelliğidir.Tübitak 
tarafından geliştirilmiştir..

*Sürekli günecellenememesi    bu sürüm için dezavantajdır.





                                                                     





Thursday 17 July 2014

JAVADA RESMİ GRİYE ÇEVİRME(görüntü işleme..) kaynak kodları

Program çalişmadan önce....





*Temel görüntü işleme algoritmalarından biri olan gri tona çevirme algoritması kullanılmıştır...

*Bu algoritmaya göre her pixelin RGB formatında 8 er bit ile renk tonları tutulduğu biliniyor...

*Bu int olarak tutulan bu değerlerinin aritmetik ortalaması aynı pixele işlenerek yapılmaktadır..

* Tabi  bu işlemleri yaparken gerekli shift işlemleri yapılmalıdır...Yani RED değeri 16 bit sağa kaydırılmalıdır ve GREEN değeri 8 bit sağa kaydırılmalıdır..

*




package iamge_grayscale;

import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;

/**
 *
 * @author YASİR KILIÇ
 */
public class Image_grayscale {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) throws Exception{
        // TODO code application logic here
        BufferedImage image=null;
        File f=null;
        try {
            f=new File("D:\\pardus.jpg");
            image=ImageIO.read(f);
         
        } catch (Exception e) {
            e.printStackTrace();
        }
        int h=image.getHeight();
         int w=image.getWidth();
     
       
         for(int i=0;i<w;i++){
              for(int j=0;j<h;j++){
               
                  int p=image.getRGB(i, j);
                  int a=(p>>24)&0xff;
                  int r=(p>>16)&0xff;
                   int g=(p>>8)&0xff;
                  int b=p&0xff;
                  int avg=(r+g+b)/3;
                 p=(a<<24)|(avg<<16)|(avg<<8)|avg;
                 image.setRGB(i, j, p);
               
               
                                }
       
       
         }
     
       try{
     
       f=new File("D:\\x.jpg");
     
       ImageIO.write(image, "jpg", f);
     
     
       }catch(Exception e){
       e.printStackTrace();
       }
       
    }
 
}







Program çaliştiktan sonra.....



Sunday 25 May 2014

C dilinde AVL ağaç işlemleri(ekleme,dengeleme,listeleme,adim sayisinin tespiti ve arama)

#include<stdio.h>
#include<stdlib.h>
#include<conio.h>

//avl node tanımlanması
struct node
{
    int key;
    struct node *left;
    struct node *right;
    int height;
};

 int adim;
 int node_sayisi;
 int bulundu;

//verilen nodun yüksekliğini bulan fonksiyon..
int height_calculate(struct node *node)
{
    if (node == NULL)
        return 0;
    return node->height;
}

//iki sayının büyüğünü bulan fonksiyon.....
int max(int a, int b)
{
    return (a > b)? a : b;
}


struct node* newNode(int key)
{
    struct node* node = (struct node*)
                        malloc(sizeof(struct node));
    node->key   = key;
    node->left   = NULL;
    node->right  = NULL;
    node->height = 1;
    return(node);
}


struct node *rightRotate(struct node *b)
{
      struct node* a=b->left;
      struct node* subtree2=a->right;
     
     //döndürme yapılıyor...      
                      a->right=b;
                      b->left=subtree2;
       
         a->height=max(height_calculate(a->left),height_calculate(a->right))+1;  
           b->height=max(height_calculate(b->left),height_calculate(b->right))+1;    
           
           
            return a;
           
   
}


struct node *leftRotate(struct node *a)
{
           
           
       struct node* b=a->right;
       struct node* subtree2=b->left;
     
     
       //döndürme ...
       
        b->left=a;
       a->right=subtree2;  
         
     
     a->height=max(height_calculate(a->left),height_calculate(a->right))+1;
     b->height=max(height_calculate(b->left),height_calculate(a->right))+1;  
           
            return b;
 
}


int getBalance(struct node *r)
{
    if (r == NULL)
        return 0;
    return height_calculate(r->left) - height_calculate(r->right);
}

struct node* insert(struct node* node, int key)
{
   
    if (node == NULL)
        return(newNode(key));

    if (key < node->key)
        node->left  = insert(node->left, key);
    else
        node->right = insert(node->right, key);

   
    node->height = max(height_calculate(node->left), height_calculate(node->right)) + 1;

   
    int balance = getBalance(node);




   
   if (balance > 1 && key < node->left->key)
        return rightRotate(node);

 
    if (balance < -1 && key > node->right->key)
        return leftRotate(node);

 
    if (balance > 1 && key > node->left->key)
    {
        node->left =  leftRotate(node->left);
        return rightRotate(node);
    }

 
    if (balance < -1 && key < node->right->key)
    {
        node->right = rightRotate(node->right);
        return leftRotate(node);
    }

    return node;
}


void inOrder(struct node *root)
{
    if(root != NULL)
    {
       
        inOrder(root->left);
        printf("%d ", root->key);
        inOrder(root->right);
    }
}
 void display(){          
               printf("1.EKLE\n");
               printf("2.LISTELE(INORDER)\n");
               printf("3.ARAMA \n");
               printf("4.ORTALAMA ADIM SAYISI\n");
               printf("5.CIKIS\n\n");
               printf("SECIMINIZ: \n\n");
               }

void  count_node(struct node *root){
                 if(root!=NULL){
                         node_sayisi++;      
                          count_node(root->left);
                          count_node(root->right);    
                                }    
                   
                      }

struct node *search(struct node *root,int aranan){
                 
              if(root==NULL) return NULL;
             
           
                     if(aranan<root->key) {adim++;
                     return  search(root->left,aranan);
                                       
                                                       }
                    else if(aranan>root->key){ adim++;
                           return search(root->right,aranan);
                                       
                                              }
                    else
                          adim++;
                          return root;                  
                                           
                   
                  }


int InternalPathLength(struct node *root,int level){
           
if(root==NULL) return 0;

return level+InternalPathLength(root->left,level+1)+InternalPathLength(root->right,level+1);


                              }


int main()
{
  struct node *root = NULL;
 int sec;
 
   while(1){
      printf("\n\n");
  display();
  scanf("%d",&sec);
  if(sec==1){int sayi;
             printf("sayı giriniz:");
             scanf("%d",&sayi);
             root=insert(root,sayi);
           
             }
  if(sec==2) {
             inOrder(root);
             }
 
  if(sec==3){
             int aranan;
             printf("\n\n Aranacak sayı:");
             scanf("%d",&aranan);
             adim=0;
         
           if(search(root,aranan)==NULL)   printf("\n\nkayit bulunamadı...\a\a\n\n");
           else{
                       printf("\n\nkayit %d adimda bulundu...\n\n",adim);                    
                                            }
                 
             }
  if(sec==4){
             node_sayisi=0;
             count_node(root);
             printf("\n\nnode sayisi=%d ",node_sayisi);
           
             printf("\n\nInternal path length=%d\n\n",InternalPathLength(root,1));
             printf("ORTALAMA ADIM SAYISI:%f dir\n\n",(float)InternalPathLength(root,1)/node_sayisi);
           
             }
 
 
 
    if(sec==5) break;
    }
    printf("cikis yapiliyor.. cikmak icin tusa bas");      
   
     getch();          

}