Kategori arşivi: Programlama

Programlama hakkında türkçe bilgiler, ipuçları, kod örnekleri, örnek projeler, sorunlar ve çözümler, fikir alışverişi, düşünceler ve daha fazlası

Magento’da Tüm Siparişlerin Temizlenmesi

Geçtiğimiz günlerde Magento üzerine bir e-ticaret sitesi kurarken sistemde testler neticesinde çok ilginç veritabanı sorunları ile karşılaştım öncelikle siparişler geçildiğinde bir takım kolonların olmadığını fark ettim bu sorunu sistemden çözdüm lakin bunun oluşturduğu bir hatayı siparişleri tamamen silmeden çözemiyoruz.

Eğer sizde bu tarz bir sorun ile karşılaşırsanız ve hatadan kurtulmak isterseniz tam bir yedek aldıktan sonra aşağıdaki SQL sorgularını çalıştırıp tüm siparişleri ve buna bağlı olarak sistemdeki bir takım bilgileri silip sorunu çözebilirsiniz.

Daha sonra aldığınız yedekten sırasıyla satırları veritabanına ekleyebilirsiniz.Böylelikle sisteminizde sadece 10 dakikalık bir kesinti olacak kullanıcılarınızı daha sonraki zamanlarda bir daha rahatsız etmemiş olacaksınız.

Hatadan ufak bir kesit

SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry ‘0’ for key ‘PRIMARY’, query was: INSERT INTO `sales_order_tax` (`order_id`, `code`, `title`, `percent`, `amount`, `priority`, `position`, `base_amount`, `process`, `base_real_amount`, `hidden`) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)’

Bu Hatanın çözümü ise aşağıdaki gibi bir SQL sorgusunun çalıştırılması ve sorun tamamen çözüme kavuşturulmaktadır.

SET FOREIGN_KEY_CHECKS=0; 
 
TRUNCATE `sales_flat_creditmemo`; 
TRUNCATE `sales_flat_creditmemo_comment`; 
TRUNCATE `sales_flat_creditmemo_grid`; 
TRUNCATE `sales_flat_creditmemo_item`; 
TRUNCATE `sales_flat_invoice`; 
TRUNCATE `sales_flat_invoice_comment`; 
TRUNCATE `sales_flat_invoice_grid`; 
TRUNCATE `sales_flat_invoice_item`; 
TRUNCATE `sales_flat_order`; 
TRUNCATE `sales_flat_order_address`; 
TRUNCATE `sales_flat_order_grid`; 
TRUNCATE `sales_flat_order_item`; 
TRUNCATE `sales_flat_order_payment`; 
TRUNCATE `sales_flat_order_status_history`; 
TRUNCATE `sales_flat_quote`; 
TRUNCATE `sales_flat_quote_address`; 
TRUNCATE `sales_flat_quote_address_item`; 
TRUNCATE `sales_flat_quote_item`; 
TRUNCATE `sales_flat_quote_item_option`; 
TRUNCATE `sales_flat_quote_payment`; 
TRUNCATE `sales_flat_quote_shipping_rate`; 
TRUNCATE `sales_flat_shipment`; 
TRUNCATE `sales_flat_shipment_comment`; 
TRUNCATE `sales_flat_shipment_grid`; 
TRUNCATE `sales_flat_shipment_item`; 
TRUNCATE `sales_flat_shipment_track`; 
TRUNCATE `sales_invoiced_aggregated`; 
TRUNCATE `sales_invoiced_aggregated_order`; 
TRUNCATE `sales_payment_transaction`;
TRUNCATE `sales_order_aggregated_created`; 
TRUNCATE `sales_order_tax`;
TRUNCATE `sales_order_tax_item`;
 
TRUNCATE `sendfriend_log`; 
TRUNCATE `tag`; 
TRUNCATE `tag_relation`; 
TRUNCATE `tag_summary`; 
TRUNCATE `wishlist`; 
TRUNCATE `log_quote`; 
TRUNCATE `report_event`; 
 
ALTER TABLE `sales_flat_creditmemo` AUTO_INCREMENT=1; 
ALTER TABLE `sales_flat_creditmemo_comment` AUTO_INCREMENT=1; 
ALTER TABLE `sales_flat_creditmemo_grid` AUTO_INCREMENT=1; 
ALTER TABLE `sales_flat_creditmemo_item` AUTO_INCREMENT=1; 
ALTER TABLE `sales_flat_invoice` AUTO_INCREMENT=1; 
ALTER TABLE `sales_flat_invoice_comment` AUTO_INCREMENT=1; 
ALTER TABLE `sales_flat_invoice_grid` AUTO_INCREMENT=1; 
ALTER TABLE `sales_flat_invoice_item` AUTO_INCREMENT=1; 
ALTER TABLE `sales_flat_order` AUTO_INCREMENT=1; 
ALTER TABLE `sales_flat_order_address` AUTO_INCREMENT=1; 
ALTER TABLE `sales_flat_order_grid` AUTO_INCREMENT=1; 
ALTER TABLE `sales_flat_order_item` AUTO_INCREMENT=1; 
ALTER TABLE `sales_flat_order_payment` AUTO_INCREMENT=1; 
ALTER TABLE `sales_flat_order_status_history` AUTO_INCREMENT=1; 
ALTER TABLE `sales_flat_quote` AUTO_INCREMENT=1; 
ALTER TABLE `sales_flat_quote_address` AUTO_INCREMENT=1; 
ALTER TABLE `sales_flat_quote_address_item` AUTO_INCREMENT=1; 
ALTER TABLE `sales_flat_quote_item` AUTO_INCREMENT=1; 
ALTER TABLE `sales_flat_quote_item_option` AUTO_INCREMENT=1; 
ALTER TABLE `sales_flat_quote_payment` AUTO_INCREMENT=1; 
ALTER TABLE `sales_flat_quote_shipping_rate` AUTO_INCREMENT=1; 
ALTER TABLE `sales_flat_shipment` AUTO_INCREMENT=1; 
ALTER TABLE `sales_flat_shipment_comment` AUTO_INCREMENT=1; 
ALTER TABLE `sales_flat_shipment_grid` AUTO_INCREMENT=1; 
ALTER TABLE `sales_flat_shipment_item` AUTO_INCREMENT=1; 
ALTER TABLE `sales_flat_shipment_track` AUTO_INCREMENT=1; 
ALTER TABLE `sales_invoiced_aggregated` AUTO_INCREMENT=1; 
ALTER TABLE `sales_invoiced_aggregated_order` AUTO_INCREMENT=1; 
ALTER TABLE `sales_payment_transaction` AUTO_INCREMENT=1; 
ALTER TABLE `sales_order_aggregated_created` AUTO_INCREMENT=1;
ALTER TABLE `sales_order_tax` AUTO_INCREMENT=1;
ALTER TABLE `sales_order_tax_item` AUTO_INCREMENT=1;
 
ALTER TABLE `sendfriend_log` AUTO_INCREMENT=1; 
ALTER TABLE `tag` AUTO_INCREMENT=1; 
ALTER TABLE `tag_relation` AUTO_INCREMENT=1; 
ALTER TABLE `tag_summary` AUTO_INCREMENT=1; 
ALTER TABLE `wishlist` AUTO_INCREMENT=1; 
ALTER TABLE `log_quote` AUTO_INCREMENT=1; 
ALTER TABLE `report_event` AUTO_INCREMENT=1; 

SET FOREIGN_KEY_CHECKS=1; 

PHP ile Link Kısaltma Nasıl Yapılır

Başkalarının sistemlerini kullanmak yerine geçtiğimiz günlerde kendi php Link kısaltma servisimi yazmaya karar verdim kara cuma indiriminden aldığım domain ile yola koyuldum link kısaltmalarının mantığını bildiğim için zor olmadı kısaca anlatmak gerekirse

  1. Uzun olan link kullanıcıdan input yardımıyla alınır
  2. Veritabanı oluşturulur ve bu linkler veritabanına kısaltılmış url yapıları ile birlikte kayıt edilir
  3. kısa link yapısını oluşturmak için istenilen bir algoritma kullanılabilir yada kendi algoritmanızı oluşturabilirsiniz.
  4. kısaltılan url daha sonra herhangi bir kural yardımıyla tekrar yönlendirilir genellikle 301 olarak yönlendirme yapılır.

yazarken fazla kod kullanmayalım hızlı, güvenli ve etkili olsun diye arayüze pek önem vermedim. Güvenli olsun diye hem web server tarafında hemde veritabanı tarafında kullanıcıya dair hiçbir bilgi tutmadım site içerisinde analiz kodları dahi bulunmuyor.

Veritabanı için mysql seçtim ve bu projemide her zaman ki gibi github üzerinden yayınladım isteyen herkes destek olabilsin diye. Kodlar ise şu şekilde

Dosya: ajax.php

<?php
//include database connection details
include('database.php');

if (isset($_POST['url']) && !empty($_POST['url']) && preg_match_all('/(ftp|http|https)://(w+:{0,1}w*@)?(S+)(:[0-9]+)?(/|/([w#!:.?+=&%@!-/]))?/', $_POST['url'])) {
    //get random strong string for URL
    $command3 = "SELECT * FROM urls WHERE url_link= '" . urlencode($_POST['url']) . "';";
    $control_database = mysqli_query($connect, $command3);
    //check database
    if ($control_database == FALSE) {
        return FALSE;
    }
    //find same url and read short code
    if (mysqli_num_rows($control_database) > 0) {
        $row = mysqli_fetch_assoc($control_database);
        $site_url = "?s=" . $row["url_short"];
        echo json_encode(array("url" => $server_name . $row["url_short"], "site_url" => $server_name . $site_url));
    } else {
        $short = substr(bin2hex(openssl_random_pseudo_bytes(6, $short)), 3, 5);
        //$short = substr(str_shuffle(uniqid(sha1(md5(mt_rand((double)microtime()*1000000))))), 3, 5);
        $url_data = mysqli_real_escape_string($connect, $_POST['url']);
        $command2 = "INSERT INTO urls (url_link, url_short, url_date) VALUES('" . urlencode($url_data) . "','$short','" . time() . "')";
        mysqli_query($connect, $command2);
        $url = $server_name . $short;
        $site_url = $server_name . "?s=$short";
        echo json_encode(array("url" => $url, "site_url" => $site_url));
    }
}

Dosya: index.php

<?php
/**
 * Created by PhpStorm.
 * User: mertcan
 * Date: 27.11.2015
 * Time: 23:14
 */

//include database connection details
include('database.php');

//redirect to real link if URL is set
if (!empty($_GET['url'])) {
    $filter_url = filter_var($_GET['url'], FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_HIGH);
    $command1 = "SELECT url_link FROM urls WHERE url_short = '" . $filter_url . "'";
    $redirect = mysqli_fetch_assoc(mysqli_query($connect, $command1));
    $redirect = urldecode($redirect["url_link"]);

    header('HTTP/1.1 301 Moved Permanently');
    header("Location: " . $redirect);
}
?>
<!DOCTYPE html>
<html lang="en" class="no-js" xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>0w1 — URL Shortener Services</title>
    <!-- Google Main Meta -->
    <meta charset='utf-8'>
    <meta name="robots" content="noindex, nofollow">
    <meta name="google-site-verification" content="LPdSncuoqCucWsdFo_mdfpsmmjXdmUUFxm3x_2-5Bik"/>
    <meta name="description" content="Secure, fast and anonymous url Shortener Services for free">

    <!-- Meta -->
    <meta content="minimum-scale=1.0, width=device-width, maximum-scale=0.6667, user-scalable=no" name="viewport">
    <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <meta http-equiv="Content-Language" content="en">
    <meta name="author" content="Mertcan GOKGOZ, admin@mertcangokgoz.com, https://mertcangokgoz.com/"/>

    <!-- Jquery -->
    <script src="inc/jquery-1.11.3.min.js"></script>

    <!-- Latest compiled and minified CSS -->
    <link rel="stylesheet" href="inc/bootstrap.min.css">

    <!-- Optional theme -->
    <link rel="stylesheet" href="inc/bootstrap-theme.min.css">

    <!-- Latest compiled and minified JavaScript -->
    <script src="inc/bootstrap.min.js"></script>

    <!-- Costum Javascript code -->
    <link rel="stylesheet" href="costum.css">

    <!-- Costum Javascript code -->
    <script language="JavaScript">
        $(document).ready(function () {
            $("#send").click(function () {
                $('.alert').remove();
                var check = document.getElementById('longurl').value;
                var MatcUrl = /(ftp|http|https)://(w+:{0,1}w*@)?(S+)(:[0-9]+)?(/|/([w#!:.?+=&%@!-/]))?/;
                if (MatcUrl.test(check)) {
                    $.ajax({
                        type: "post",
                        url: "ajax.php",
                        data: $("#shortener").serialize(),
                        success: function (data) {
                            var json = JSON.parse(data);
                            $('.result').append('<div class="alert alert-success" role="alert">Short Url:<a target="_blank" href="' + json.url + '">' + json.url + '</a> <br> 
                            Site Url <a target="_blank" href="' + json.site_url + '">' + json.site_url + '</a> 
                            </div>');
                        }
                    });
                } else {
                    $('.result').append('<div class="alert alert-danger"><a href="#" class="close" data-dismiss="alert" aria-label="close">×</a><strong>Error!</strong> Invalid url.</div>');
                    return false;
                }
            });
        });
    </script>
    <!-- Content -->
    <link rel="author" href="//plus.google.com/103305118431759296457/posts"/>
    <link rel="publisher" href="//plus.google.com/103305118431759296457/posts"/>
</head>
<body style="font-family: Arial,sans-serif,Verdana !important;">
<!--[if lt IE 8]>
<p class="chromeframe">outdated</p>
<![endif]-->
<div class="container">
    <div class="header col-md-6 center">
        <h1 class='title'>0w1</h1>

        <p class='desc'>URL Shortener Service</p>
    </div>
    <div class="well content">
        <div class="row">
            <div class="col-md-12">
                <div class="form-group">
                    <form method="post" action="" id="shortener" onsubmit="return false">
                        <div class="input-group input-group-lg">
                            <span class="input-group-addon" id="sizing-addon1">URL to Shorten:</span>
                            <input type="text" name="url" id="longurl" class="form-control" placeholder="URL"
                                   aria-describedby="sizing-addon1">
                            <span class="input-group-btn">
                                 <button type="submit" id="send" class="btn btn-success">Shorten</button>
                            </span>
                        </div>
                    </form>
                </div>
            </div>
        </div>
        <div class="row">
            <div class="col-md-6 center">
                <div class="result">
                    <?php if (!empty($_GET['s'])): ?>
                        <div class="alert alert-success" role="alert">Short Url:<a
                                href="<?php echo $server_name; ?><?php echo $_GET['s']; ?>"
                                target="_blank"><?php echo $server_name; ?><?php echo $_GET['s']; ?></a><br>
                            Site Url:<a href="<?php echo $server_name; ?>?s=<?php echo $_GET['s']; ?>"
                                        target="_blank"><?php echo $server_name; ?>?s=<?php echo $_GET['s']; ?></a><br>
                        </div>
                    <?php endif ?>

                </div>
            </div>
        </div>
    </div>
</div>
<div id="footer">
    <ul>
        <li><a href="mailto:admin@mertcangokgoz.com">Feedback</a></li>
        <li><a href="https://github.com/MertcanGokgoz/simple-url-shortener">Github</a></li>
    </ul>
</div>
</body>
</html>

Dosya: database.php

<?php
/**
 * Created by PhpStorm.
 * User: mertcan
 * Date: 27.11.2015
 * Time: 23:14
 */
ini_set('display_errors', 0);

function Database_Connector()
{
    $server = "localhost";
    $username = "database_username";
    $password = "database_password";
    $database_name = "database_name";

    $connection = new mysqli($server, $username, $password, $database_name);
    return $connection;
}

$server_name = "http://" . $_SERVER['HTTP_HOST'] . "/";

$connect = Database_Connector();
$command = "CREATE TABLE IF NOT EXISTS `urls` (
  `url_id` int(11) NOT NULL AUTO_INCREMENT,
  `url_link` varchar(255) NOT NULL,
  `url_short` varchar(6) NOT NULL,
  `url_date` int(10) NOT NULL,
  PRIMARY KEY (`url_id`),
  UNIQUE KEY `url_id` (`url_id`,`url_short`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;";
// Perform queries
mysqli_query($connect, $command);

Proje ve yapılan diğer işlemlerin tamamına ulaşmak için Github hesabım üzerinden gereken dosyalara ulaşabilirsiniz. Projeyi geliştirmeye devam edeceğim. Güvenli bir link kısaltma servisi olarak hem kendim hemde çevremdekilerin kullanmasını umuyorum.

Projeyi Toplu bir şekilde indirmek için Tıklayın

Python İstatistiksel Hesaplamalar

Geçtiğimiz günlerde Python ile yazmış olduğum. Betimsel İstatistiki hesaplamalar yapmaya yarayan örnek bir uygulamadır. Uygulama ile Mod, Medyan ve ortanca hesabını kolaylıkla bulabiliyoruz.

# /usr/bin/python3.4
# -*- coding: utf-8 -*-
__author__ = 'Mertcan Gökgöz'

import sys


def mod(sayilar):
    try:
        en_yuksek = 0
        for s in sayilar:
            if sayilar.count(s) > sayilar.count(en_yuksek):
                en_yuksek = s
        return en_yuksek
    except Exception as e:
        print("n[ mod(sayilar) Hata ]nt Hata Mesajı:t ", e, "n")
        sys.exit(1)


def medyan(sayilar):
    try:
        sayilar.sort()
        uzunluk = len(sayilar)
        aradakisayi = int(uzunluk / 2)
        if uzunluk % 2 == 0:
            return str(sayilar[aradakisayi - 1]) + " " + str(sayilar[aradakisayi])
        else:
            return sayilar[aradakisayi]
    except Exception as e:
        print("n[ medyan(sayilar) Hata ]nt Hata Mesajı:t ", e, "n")
        sys.exit(1)


def ortanca(sayilar):
    try:
        stoplam = 0
        for s in sayilar:
            stoplam = stoplam + s
        return stoplam / len(sayilar)
    except Exception as e:
        print("n[ ortanca(sayilar) Hata ]nt Hata Mesajı:t ", e, "n")
        sys.exit(1)


def about():
    print("--- ")
    print("Temel İstatistiki işlemler için geliştirilmiş algoritmaları içerir.")
    print("--- ")
    print("")


def islemler():
    girdiler = input("İşlem yapılacak sayıları teker teker giriniz: ")
    sayilar = sorted(map(int, girdiler.split()))
    print("Ortanca:   ", ortanca(sayilar))
    print("Medyan: ", medyan(sayilar))
    print("Mod:   ", mod(sayilar))


about()
islemler()

Python Güncel Döviz Kuru

Can sıkıntısından yazmış olduğum Investing sitesi kullanılarak hazırladığım güncel döviz kuru uygulaması örneğimiz. Uygulama geliştirilirken BeautifulSoup ve Urllib kütüphanelerinden yararlanılmıştır.

# /usr/bin/python3.4
# -*- coding: utf-8 -*-
__author__ = 'Mertcan Gökgöz'

from bs4 import BeautifulSoup
from urllib.request import urlopen, Request


def DolarParse():
    pasteURL = "http://tr.investing.com/currencies/usd-try"
    data = urlopen(Request(pasteURL, headers={'User-Agent': 'Mozilla'})).read()
    parse = BeautifulSoup(data)
    for dolar in parse.find_all('span', id="last_last"):
        liste = list(dolar)
        print("Güncel Dolar Kuru: " + str(liste))


def EuroParse():
    pasteURL = "http://tr.investing.com/currencies/eur-try"
    data = urlopen(Request(pasteURL, headers={'User-Agent': 'Mozilla'})).read()
    parse = BeautifulSoup(data)
    for dolar in parse.find_all('span', id="last_last"):
        liste = list(dolar)
        print("Güncel Euro Kuru: " + str(liste))


DolarParse()
EuroParse()

Github SSH Key Oluşturma İşlemi

Github hesabınız varken genelde bir proje yada dosya eklemek isterseniz uzun uzun kullanıcı adı ve şifrenizi girmeniz gerekiyor.Ben bununla uğraşmakdan bıktığım için genelde SSH key yöntemini kullanıyorum.Sistemden oluşturuyorum key github giriyorum ve bu aşamadan sonra tüm herşey sadece SSH key oluştururken yazdığınız şifreye kalıyor.Siteye girişinizdeki şifre benim kullandığım 256 bitlik bir şifre olabilir.Haliyle bu şifreyi girmek oldukça zor.

Şimdi gerekli dokümantasyon a bir göz attıktan sonra farklı bir yapılandırma yapılmadığını fark ettim normal olarak şifreyi oluşturup sisteme dahil etmemiz yetiyor.Tabi sistemde daha önceden kullanılan başka bi SSH key varsa ismini değiştirmenizi öneririm.

ssh-keygen -t rsa -b 4096 -C "mailadresi@mail.com"

yukarıdaki komut ile github üye olduğunuz maili girerek bir adet SSH key oluşturuyorsunuz bu oluşturduğunuz key ile sisteme giriş yapacaksınız bu key in passphrase kesinlikle unutmayınız yoksa sisteme giriş yapamazsınız değiştirmek zorunda kalabilirsiniz.Buda size vakit kaybettirir.Key oluştururken size yol soracak nereye ne oluşturayım diye farklı bir yer istemiyorsanız ENTER tuşuna basıp devam edin

Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):

hepsine tamam dedikten sonra zaten keyimizi uluşturacak bizede bu keyi kullanmak kalacak.yol olarak ise belirttiğimiz yeri gösteriyor olacak şöyle ki

our identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
ee:c8:3f:1f:f2:ab:xxxxxx

Şimdi yukarıda gördüğünüz gibi bize bir fingerprint verdi bu şimdilik burada dursun karşılaştırma yaparken işimize yarayacak onun dışında pek bir önemi yok.Şimdi SSH-Agent in arkada çalıştığından emin olalım bunun için aşağıdaki kod işinize yarayacak

eval "$(ssh-agent -s)"

direk size bir numara verecek vermez ise sıkıntı arka planda çalışmıyor demektir.Ama key oluşturabildiğinize göre yüzde 99 bu kısımda sıkıntı çıkmayacaktır.Bazı istisnalar hariç eksik kurulumlar vs Ardından oluşturduğumuz SSH key sisteme dahil ediyoruz.

ssh-add ~/.ssh/id_rsa

Bu komutu verdiğiniz zaman SSH key oluştururken girmiş olduğunuz passphrase yi tekrar sizden isteyecek giriyoruz ve devam ediyoruz.

root@0x2e88ce4:/home/mertcan# ssh-add ~/.ssh/id_rsa
Enter passphrase for /root/.ssh/id_rsa:
Identity added: /root/.ssh/id_rsa (/root/.ssh/id_rsa)

Artık sistemimize tamamen bu SSH key dahil edildi şimdi ise sıra geldi bu oluşturduğumuz SSH keyimizi github hesabımıza tanımlayalım ve test edelim. Siteye giriş yapıyoruz ve sağ üst kısımda bulunan kişisel alanımızdan Settings diyerek ayarlar menümüze ulaşıyoruz.

githubgorsel1

Alanımıza gittiğimizde sol menüde yer alan SSH Keys kısmına tıklıyoruz.Burada hem daha önceden tanımladığımız anahtarları görebiliyoruz hemde yeni anahtar ekleyebiliyoruz.

githubleftsettingtab2

Tıkladığınızda karşınıza çıkan alanda Add SSH Key adında yeşil bir buton göreceksiniz buna tıkladığınızda ise karşınıza 2 adet boş kısım çıkıcak ilkine hangi sistemde kullanıyorsanız yada hangi ismi vermek istiyorsanız veriyorsunuz.İkincisinde ise sistemde oluşturduğunuz SSH Key giriyoruz.

githubaddsshkeys

Bunun için Terminalde iken cat komutu ile ekrana keyimizi basabiliriz.kullanabileceğiniz örnek bir komut ise şu şekildedir.zaten sonu .pub olan en son oluşturduğunuz SSH anahtar dizisini eklemeniz gerekmekte.

cat id_rsa.pub

daha sonra oluşturduğumuz anahtarı eklediğimizde şu şekilde gözükecek ve yukarıda bahsettiğim fingerprint ile kontrol edebilirsiniz.Zaten yanlış eklediğinizde eklenmeyeceği için pek başınızı ağrıtmaz sistem anahtarların doğruluğunu kontrol ediyor.

githubsshkeygorsel1

Herşey tamam gibi gözüküyor şimdi ise sistemdeki ekli olan anahtar dizisini test edelim bakalım gerçekten olmuşmu bunun için aşağıdaki komutu verelim.

ssh -T git@github.com

İşlem sonucunda karşımıza şu şekilde satırlar gelecek ve olay tamamlanmış olacak bundan sonra yapacağınız işlemlerde SSH linklerinden gerçekleştirmelisiniz yani HTTPS yerine SSH seçerek gerekli push işlemini gerçekleştirebilirsiniz.

githubtestgorsel1

VestaCP’de Mysql Sorununun Çözülmesi

VestaCP kullanan sistemlerinde genelde 512 MB yada 1 GB ram barındıran VPS sunucularının temel sorunlarından bir tanesi mysql pidlerinin kendi kendilerini kapatmasıdır. Özellikle tam bir işlem yaparken yada durduk yere kendisini kapatmaktadır.

Buda sistemin yetersiz kalmasından kaynaklandığını bir kaç kişiye kurulum yaptığımda fark ettim gereksiz yere fazla pid açıyor yada gereksiz yere mysql çalıştırıyordu. Bir kaç haftalık çalışmadan sonra en iyi yapılandırmayı bulabildim.

Denediğim 4 adet sistemde de mysql pidleri bir daha kendini kapatmadığını fark ettim. Çok az sistem kaynağı olan siteler için aşağıdaki my.cnf kullanabilirsiniz. Bunlar dışında bir önceki makalemizde yayınladığımız ayarları da kullanabilirsiniz.

Bunlardan ilki 512 MB rami olan sistemler için;

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
symbolic-links=0
max_connections=100
max_user_connections=30
wait_timeout=30
interactive_timeout=50
slow-query-log =1
long_query_time=5
slow-query-log-file = /var/log/mysql-slow.log

skip-external-locking
key_buffer_size = 8M
max_allowed_packet = 16M
table_open_cache = 4k
sort_buffer_size = 512k
read_buffer_size = 512k
read_rnd_buffer_size = 512k
myisam_sort_buffer_size = 8M
thread_cache_size = 128
query_cache_size = 8M
query_cache_limit = 8M
tmp_table_size = 16M
max_heap_table_size = 16M
join_buffer_size = 512k

innodb_file_per_table
innodb_buffer_pool_size = 8M

[mysqld_safe]
log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid 

Bir diğeri ise 1 GB ramı olan sistemler içindir;

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
symbolic-links=0
max_connections=70
max_user_connections=30
wait_timeout=10
interactive_timeout=50
long_query_time=5
slow_query_log=0

key_buffer = 128M
myisam_sort_buffer_size = 32M
join_buffer_size=1M
read_buffer_size=1M
sort_buffer_size=2M
table_cache=1536
thread_cache_size=286
interactive_timeout=25
connect_timeout=5
max_allowed_packet=32M
max_connect_errors=1000
query_cache_limit=1M
query_cache_size=32M
query_cache_type=1
tmp_table_size=64M
max_heap_table_size=64MB

innodb_buffer_pool_size=32M
innodb_flush_log_at_trx_commit=2
innodb_file_per_table

[mysqld_safe]
log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid 

yapılan testler sonucunda verimli olduğu kararlaştırılmıştır. Sisteminizde oluşabilecek sorunlara karşı lütfen orjinal my.cnf dosyasını saklamayı unutmayınız. Ayrıca yukarıdaki ayarları yaptınız ama gene aynı sorun ile karşılaşıyorsanız lütfen iletişime geçin yada konu altına yorum yapabilirsiniz.

Regex Kullanarak İP Adreslerini Alma

PHP ile pek çok şey yapılabileceği gibi sayfalar arasındaki verilerde parçalanarak alınabilmekte.Bu örnek de ben regex kullandım ve bir kaç gün önce ihtiyacımdan dolayı yazmış olduğum ufak bir kodu sizlerle paylaşmak istiyorum.Ben bu yazdığım kod ile sayfalarda bulunan tüm ip adreslerini alabiliyor ve bir text dosyasına aktarabiliyorum. Bruteforce ve ddos yapan belirli ip adreslerini almak için bazı sitelerde kullanıyorum oldukça işime yarıyor.

<?php
/**
 * Created by PhpStorm.
 * User: Mertcan
 * Date: 9.7.2015
 * Time: 12:13
 */
$homepage = SayfaGetir('website adress');
$file = fopen("ip.txt", 'w') or die("Dosya Acilamadi");
$reg = '/b(?:(?:2(?:[0-4][0-9]|5[0-5])|[0-1]?[0-9]?[0-9]).){3}(?:(?:2([0-4][0-9]|5[0-5])|[0-1]?[0-9]?[0-9]))b/i';
preg_match_all($reg, $homepage, $results);

for ($i = 0; $i <= count($results[0]); $i++) {
    //fwrite($file, implode("n", $results[$i]));
    fwrite($file, $results[0][$i]. PHP_EOL);
}
function SayfaGetir($url)
{
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($ch, CURLOPT_HEADER, false);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_REFERER, $url);
    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13');
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
    $result = curl_exec($ch);
    curl_close($ch);
    return $result;
}

Bu şekilde istediğiniz ip adreslerini alabilirsiniz ben tanımlamayı yaparken sıfırıncı dizidekiler’in tamamını istemiştim.Eğer sizin veriniz de diziler 1 den çok ise komut satırı içerisinde bulunan kodu aktifleştirerek de tamamını alabilirsiniz.

Javascript Sonkart Yöntemi

Javascript ile bu örneğimizde son kart yöntemini göreceğiz her girdiğimiz sayı bir sonrakinin arkasından gelecek ve sıralı bir şekilde devam edecek siz ne zaman "0" sayısını girerseniz program sizden sayı istemeyi kesecek ve sıralı bir şekilde daha önceden yazdıklarınızı önünüze getirecek

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title></title>
</head>
<body>
    <script type="text/javascript">
        var x = [];
        s = 0;
        while (x[s] != "0") {
            s++;
            x[s] = prompt("sayı?")
        }
        for (y = 1; y <= s; y++) {
            document.write(x[y] + "<br>");
        }

    </script>
</body>
</html>

Javascript ile Modulus Bulma

Javascript ile algoritma yazmaya devam ediyoruz ve bu makalemizde javascript kullanarak modulus işlemini gerçekleştireceğiz.verilen sayıya kadar bölümünden kalanı sıfır olanı süzeceğiz böylelikle hangi sayıların tam olarak bölündüğünü görebileceğiz.Bu örneğimizde 48 sayısına kadar tam bölenleri bulmayı amaçladık.Siz istediğiniz bir sayıya kadar alabilirsiniz.

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title></title>
</head>
<body>
    <script type="text/javascript">
        x = 48; b = 0;
        for (s = 0; s <= x; s++) {
            b = x % s;
            if (b == 0) {
                document.write(s + "<br>");
            }
        }
    </script>
</body>
</html>

Javascript ile Fibonacci Sayılarını Bulma

Javascript ile geçtiğimiz dönem algoritmalar yazıyorduk bana pek mantıklı gelmese de aslında güzel birer örnek oluyordu.Bu örneğimizde ise Finonacci sayılarını bulacağız.Örnek kodumuzda ise 200 e kadar olan fibonacci sayılarını yazdırmış olacağız.

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title></title>
</head>
<body>
    <script type="text/javascript">
        var a = 0, b = 1, c = 0;
        while (b <= 200) {
            document.write(c + "<br>");
            c = a + b
            a = b;
            b = c;
        }
    </script>
</body>
</html>

C ile Decimal’den Binary Dönüştürme İşlemi

C ile Ondalık sayıları ikilik sayı sistemine yani bilgisayarın anlayabildiği bir biçime dönüştürmek istiyorsanız.Aşağıdaki kod örneğini kullanabilirsiniz.Uygulama size girmiş olduğunuz ondalık sayının ikilik sayı sistemindeki halini yazacaktır.

#include<stdio.h>

int main(){
	long int decimalNumber,remainder,quotient;
	int binaryNumber[100],i=1,j;

	printf("Ondalik Sayi Giriniz: ");
	scanf("%ld",&decimalNumber);

	quotient = decimalNumber;
	while(quotient!=0){
		binaryNumber[i++]= quotient % 2;
		quotient = quotient / 2;
	}

	printf("Ondalik Sayinin ikiliye Donusturulmus Hali %d: ",decimalNumber);
	for(j = i -1 ;j> 0;j--)
		printf("%d",binaryNumber[j]);

	return 0;
}

C ile Alfabetik Sıralama Yapma

C ile string bir şekilde girilen ifadelerin sıralamaları ile oynamak ve bunları alfabetik olarak sıralayabilirsiniz. Uygulamaya kaç adet veri girileceğini girmeniz yetecektir bundan sonrasında ise karşınıza sıralanmış ve sıralanmamış şekilleri ile çıkacaktır.

#include <stdio.h>
#include <string.h>
#include <conio.h>
void main()
{
	char isimler[10][8], tisimler[10][8], tmp[8];
	int i, j, n;
	printf("Kac Adet isim girilecek n");
	scanf("%d", &n);
	printf("%d adet ismi giriniz n", n);
	for (i = 0; i < n; i++)
	{
		scanf("%s", isimler[i]);
		strcpy(tisimler[i], isimler[i]);
	}
	for (i = 0; i < n - 1 ; i++)
	{
		for (j = i + 1; j < n; j++)
		{
			if (strcmp(isimler[i], isimler[j]) > 0)
			{
				strcpy(tmp, isimler[i]);
				strcpy(isimler[i], isimler[j]);
				strcpy(isimler[j], tmp);
			}
		}
	}
	printf("n----------------------------------------n");
	printf("YazdiklariniztSiralanmis Seklin");
	printf("------------------------------------------n");
	for (i = 0; i < n; i++)
	{
		printf("%stt%sn", tisimler[i], isimler[i]);
	}
	printf("------------------------------------------n");
	getch();
}