Seo tools

Neo Inspiration

  • Search

    • About Me

      • inspi 改め
        jakk@webアーキテクト(自称)
        php,javascript,seoなど
        得意技は extract();



  • Categories

  • Ranking

  • Comments

  • Others


  • Archive for the ‘自作’ Category

    DB分割とか

    月曜日, 10 月 27th, 2008

    大きい開発がはじまったので、
    作りためた自作フレームワークを完成させよう~

    と思ったんだけど、肝心のDB分割の部分がうまく整理できていないので、
    そこらへんのメモ。

    キーで分割するか、テーブルで分割するか

    ○テーブル分割
    ・IDテーブルはこのDBサーバ、blogテーブルはこのサーバみたいな。
     さらに細かくblogテーブルのこのカラムはこのサーバみたいなやり方もあり。

    ・パーティション・マップを用意してテーブル<>サーバのマッピングをする。

    ・色々JOINとかが超めんどい
    (そもそもその規模だとJOIN使うな的な話も多い)

    ・分割するなら例えばBlogテーブルのテキストカラムだけ
    外だしするとかクエリベースで切り貼りするイメージ。

    ・シームレスなラッパーは書くのがきつそう

    ○キーで分割
    ・単純にID1~100はこのサーバ 200~300はこのサーバみたいな。

    ・キーの決め方がハードコーディングになると汎用性がさがるけどリソースをうまく使いきれそう

    ・キーの決め方がアルゴリかましてるとID100を別サーバに移動みたいなことがきつい。
     だけどサーバ増設が伴っても比較的ラクに対応できそう。

    ・マッピングを使う どっかにID1はこのサーバって書いてく。
     このマッピングが書いてあるDBの負荷は大丈夫なん?

    ・シームレスなラッパーは書くのが楽そう

    ○タイムスタンプベース
    ・そこまで必要なサイトってDbいくつ必要なんだというw

    —-

    テーブルで分割の場合よりも、キーで分割のほうが
    サーバの拡張のイメージが付きやすいし、管理コストも楽そうだから
    こっちを採用予定。

    とりあえずログインサーバとメインDB1,メインDB2でわけようかな。
    キーで分割して、マッピング使用、ログインサーバでマッピングさせてしまう予定
    (ログインサーバの負荷がきになるけど)

    あ あと自作フレームワークは neo という名前に!
    (そういうとこだけ早いというw

    参考サイト
    http://www.itmedia.co.jp/enterprise/articles/0808/28/news013_1.html
    http://itpro.nikkeibp.co.jp/article/NEWS/20060330/233820/

    Captchaを自作してみた

    水曜日, 10 月 15th, 2008

    そういえばあれはどうやって作るんだろうっておもって
    作ってみました。

    意外と簡単だった。

    こんなかんじ。

    日本語を出すにはフォントいれとかないとだめだというのに
    ちょっとはまったくらいかな。
    PHPで画像いじるの意外と面白いかもw

    一応ソースはこんなかんじ。

    header("Content-type: image/png");
    
    //設定
    $string = 'きゃぷちゃテストね';
    $width = 250;
    $height = 100;
    $fontSize = 20;
    $distortion = true;
    
    //フォントのパス設定
    putenv('GDFONTPATH='.realpath('.'));
    $font = 'fontname';
    
    //元画像を使わないから1から作成
    $img = imagecreatetruecolor($width,$height);
    
    //captchaで使う色を設定
    $black = imagecolorallocate($img,22,22,22);
    $darkGray = imagecolorallocate($img,55,55,55);
    $gray = imagecolorallocate($img,200,200,200);
    $white = imagecolorallocate($img,255,255,255);
    
    //画像を背景色でfill
    imagefill($img,0,0,$white);
    
    //センタリング処理用
    $wd = (imagesx($img) - $fontSize * 0.35 * strlen($string)) / 2;
    $ht = $height / 2 + $fontSize * 0.35;
    
    //各文字を表示
    for ($i=0;$i < mb_strlen($string);$i++) {
        $putString = mb_substr($string,$i,1,'UTF-8');
        imagettftext($img,$fontSize + rand(-5,5),rand(-5,5),$wd + $fontSize * $i,$ht + rand(-10,10),$darkGray,$font,$putString);
    }
    
    //ディストーション処理
    if ($distortion) {
        imagesetthickness($img,1);
    
        //ラインディストーション
        $i = 0;
        while ($i<25) {
            $randWidth1 = rand(0,$width);
            $randHeight1 = rand(0,$height);
            $randWidth2 = rand(0,$width);
            $randHeight2 = rand(0,$height);
            imageline($img,$randWidth1,$randHeight1,$randWidth2,$randHeight2,$gray);
            $i++;
        }
    
        //ドットディストーション
        $i = 0;
        while ($i<200) {
            $randWidth = rand(0,$width);
            $randHeight = rand(0,$height);
            imagesetpixel($img,$randWidth,$randHeight,$black);
            $i++;
        }
        //ガウス処理
        $gaus = array(array(1.0, 2.0, 1.0), array(2.0, 4.0, 2.0), array(1.0, 2.0, 1.0));
        imageconvolution($img,$gaus,16,0);
    }
    
    //枠ぶち描画
    imagesetthickness($img,5);
    $rectangle = array(0,0,0,$height,$width,$height,$width,0);
    imagepolygon($img,$rectangle,4,$black);
    imagesetthickness($img,1);
    $rectangle = array(0,0,0,$height,$width,$height,$width,0);
    imagepolygon($img,$rectangle,4,$white);
    
    //最終画像出力
    imagepng($img);
    imagedestroy($img)
    

    36進数

    木曜日, 10 月 9th, 2008

    36進数を新しいサービスで使おうと思って
    作ってたわけです。
    いや 思いついたら面白くなってしまったというオチなんですが。

    こんなかんじで。

    function decodeDec36($decimal='') {
        if (preg_match('/^[0-9a-z]+$/’,$decimal)) {
            $stack = array(’0′,’1′,’2′,’3′,’4′,’5′,’6′,’7′,’8′,’9′,’a',’b',’c',’d',’e',’f',’g',’h',’i',’j',’k',’l',’m',’n',’o',’p',’q',’r',’s’,'t’,'u’,'v’,'w’,'x’,'y’,'z’);
    
            $dec35 = 0;
            $len = strlen($decimal);
            for ($i=1; $i<=$len; $i++) {
                $tmpDec = array_search(substr($decimal,-$i,1),$stack,true);
                $dec35 += (int) $tmpDec * pow(36,$i - 1);
            }
            return $dec35;
        } else {
            return false;
        }
    }
    
    function encodeDec36($number='') {
        if (is_numeric($number)) {
            $stack = array('0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z');
    
            $enc35 = '';
            $tempEnc = array();
            while (($floor = floor((int) $number / 36)) != 0) {
                $tempEnc[] = $number % 36;
                $number = $floor;
            }
            $tempEnc[] = $number;
    
            $tempEnc = array_reverse($tempEnc);
            foreach ($tempEnc as $k=>$v) {
                $enc35 .= $stack[$v];
            }
            return $enc35;
        } else {
            return false;
        }
    }
    

    反省はしてない。

    と勢いで作っていたらふと javascript の toString(36) を思い出した。

    あれってPHPでねえのとおもったらあった・・・

    $encoded = base_convert($number,10,36); //10進数の$numberを36進数に変換

    無知って罪だ。
    やっぱり反省します。

    2008/11/22 12:24:09