Seo tools

Neo Inspiration

  • Search

    • About Me

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



  • Categories

  • Ranking

  • Comments

  • Others


    • track feed   |
  • Archive for 10 月, 2008

    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進数に変換

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

    10月になりまして@SEO雑感

    木曜日, 10 月 2nd, 2008

    そういえば去年の今頃SEOのことがやっと理解できてきたなーと思い出して。

    SEOは昔はやったテーブルトークゲームみたいなもので、
    ゲームマスターがいて、こっちが行動した結果だけが返ってきて、それを元に色々考える
    まあ そんなとこですよね。

    業界的には1年たってどんどん Google>>Yahoo 化が進んでますねー
    (それでも日本はまだまだYahoo贔屓ですがw)
    個人的には検索エンジンの路線はYahooのほうが好きというか
    スマートだと思っていて、
    他人の評価が基準のGoogleではなく
    そのページそのものの本質を調査するYahooにがんばってほしいものです。

    まあ今の解析アルゴリズムじゃ中々、
    本文からその文章の情報量を抽出できないんですが、
    人間ならそのページがいい情報を書いているか目で判別できるんだし
    そのうちできるようになるはずです。
    Yahooガンバレ

    まあ自分のSEOの知識も無駄に増えましたが、
    やっぱり 「確証がない」 ことをえらそうに語るのがどうも苦手ですw
    営業上必要なことも多いんですがねぇ。。

    —-余談—-

    SEO塾さん

    SEO塾さんのエントリーでコメントついてたのをみて。
    (コメント書く気にはなれなかったので)

    このキャッシュが複数あるっていうのはなんなのでしょうね?
    (2,3世代前を元にインデックス処理するのはまずないとおもいます)

    もしきちんと残すのであれば
    それこそGoogleのもつサーバをはるかに超える
    インフラをもたないといけないし、
    意味がない(Web Archiveでやってるしそれなりのビューも作らないといけない)気がします。

    2,3世代データをもってる可能性はあると思いますが、
    それをキャッシュのリンクに意図的に使う理由はないと思います。

    あとキャッシュを削除するというのは
    Yahooのアルゴリズムの中に時系列を見る部分があることを考慮すると、
    まずないんじゃないでしょうか。
    (↑ここが2,3世代もってる可能性があるかもしれない理由でもあります)
    1個前のデータと比較するだけならあれですが、
    2,3こ前のデータと比較検証するとしたら、必要ですよね。

    まあそういう意味では、DBのレプリケーション時差なんでしょうかね。
    (簡単に言えば参照しているDBサーバが違う)
    まぁそれでも2世代ならまだしも3世代残ってる理由は不明です。

    超巨大DBのレプリケーションの時間が何日単位で、
    その間に平行してどんどんレプリケーションが走るのであれば
    3世代、4世代前が残っていてもおかしくないですが、
    さすがにそんなこともないんじゃないのかな。。。
    ⇒こればっかりは大規模DB運用してみないとさっぱり見当もつかないなぁ。。

    まぁ 結局
    「こっちが行動した結果だけが返ってきて、それを元に色々考える」
    だけで終わります。
    正解はありませんw

    ・・・余談のが長くなってしまった。。

    2009/01/07 12:17:25