SmileyHackathon#6 いってきた

 
SmileyHackathon#6に参加して、久しぶりに自分のコードをぶっつづけで書きましたっ。
 
IRCで雑談するとのことで、MacbookTigerにLimeChatを入れようとするも入らず。
・→開始後2時間格闘するも、「MacbookTigerに乗せたLimeChatが起動しなくなった」というブログ記事を見つけて、あぁOSアップデートの弊害かな?とIRCは諦める。。
・最初の自己紹介の時に宣言した、『C言語で画像処理をするサンプルを動かそう』と思うも、参考にしようとブクマしてたサイトがなぜか落ちてた
・→駄目じゃん・・・と、GD@PHPで、なんとなく画像処理のコードを書くことにした。
・→動くところまで行きたかったけど、動かなかったので、LTはできませんでした。。この次はっ。
 
なんで動かなかったかは
MAMP慣れてなかったので、パーミッションがよくわかんなかったです。。
・そして家にてWAMPで動かしてみたら、メモリオーバーですって。。
・→これはCで書き直したほうがいいかもしれん。。
・→今日のコードは徒労!?そ、そんな、、
・→でもメソッドの分け方はけっこううまくいった気がする?テストかいてないので、メモリの問題が大丈夫になっても、意図する動きをすんなりするかはわからないけど。。
 
ということで、[動かないコード]ですが。。今日の成果物として載せます。
Cで移植して、動いたらまた載せます。
 

<?php
/*
 * Gyouretsu filter class
 * 20090822 mana
 * usage...
 * $f = new filter();
 * $f->setRect(array(array(1,1,1),array(1,1,1),array(1,1,1)));
 * $f->setImgpath("/home/me/tmp/0908221848.png");
 * header("Content-type:image/png");
 * $f->getImage();
 */
class filter {
    private $filter;
    private $imgpath;
    private $w;
    private $h;
    public function __construct(){
    }
    /* @return bool */
    public function setRect($arr){
        if($this->checkRect($arr)===true){
            $this->filter = $rect;
            return true;
        }
        return false;
    }
    /* is it 2D?
     * @return bool */
    private function checkRect($arr){
        if(!is_array($arr)){
            return false;
        }
        foreach($arr as $line){
            if(!is_array($line)){
                return false;
            }
            foreach($line as $num){
                if(!is_numeric($num)){
                    return false;
                }
            }
        }
        return true;
    }
    /* @return void */
    public function setImgpath($imgpath){
        $this->imgpath = $imgpath;
        list($this->w,$this->h) = getimagesize($imgpath);
    }
    /* @return string or binary */
    public function getImage($savename = null){
        $resource = $this->process($this->imgpath);
        imagepng($resource,$savename);
    }
    /* @return bool = success/failed */
    private function process($imgpath){
        $resource = $this->imageOpen($imgpath);
        $img_arr = $this->resource2arr($resource);
        $img_after_arr = img_arr;
        $filter = $this->filter;
        foreach($img_arr as $color=>$image){
            foreach($image as $x => $line){
                foreach($line as $y => $num){
                    $afterfilter = filter($num,$filter);
                    $filter_w = count($afterfilter);
                    $filter_h = count($afterfilter[0]);
                    $x0 = round($filter_w / 2);
                    $y0 = round($filter_h / 2);
                    foreach($afterfilter as $f_x => $f_line){
                        foreach($f_line as $f_y => $f_num){
                            if(isset($img_after_arr[$color][$x+$f_x-$x0][$y+$f_y-$y0])){
                                $img_after_arr[$color][$x+$f_x-$x0][$y+$f_y-$y0] 
                                 += $f_num;
                            }
                        }
                    }
                }
            }
        }
        $this->round_arr($img_after_arr);
        $this->arr2resource($img_after_arr,@$resource);
        return true;
    }
    /* @param int(color), arr(filter);
     * @return arr(after filter)
     */
    private function filter($color,$filter){
        $ret = array();
        foreach($filter as $line){
            $ret_line = array();
            foreach($line as $num){
                $ret_line[] = $color * $num;
            }
            $ret[] = $ret_line;
        }
        return $ret;
    }
    /* @param $array resource2arr
     * @return $array resource2arr
     */
    private function round_arr($arr){
        $ret = array(); 
        foreach($arr as $key=>$line){
            $ret[$key] = array();
            foreach($line as $keyval=>$num){
                $ret[$key][$keyval] = round($num);
            }
        }
        return $ret;
    }
    /* @return resource
     * switch vir extention
    */
    private function imageOpen($imgpath){
        $split = split(".",$imgpath);
        $ext = $split[count($split)-1];
        $ext = strtolower($ext);
        switch($ext){
            case "jpg":
            case "jpeg":
                $ret = imagecreatefromjpeg($imgpath);
                break;

            case "gif":
                $ret = imagecreatefromgif($imgpath);
                break;

            case "png":
                $ret = imagecreatefrompng($imgpath);
                break;

            case "bmp":
                $ret = imagecreatefromwbmp($imgpath);
                break;

            default:
                $ret = imagecreate($this->w,$this->h);
            
        }
        return $ret;
    }
    /* @return array(r=>arr(arr,arr),g=>arr(arr,arr),b=>arr(arr,arr))
     * img resource 2 array
     */
    private function resource2arr($resource){
        $r_array = array();
        $g_array = array();
        $b_array = array();
        for($y=0; $y<$this->h; $y++){
            for($x=0; $x<$this->w; $x++){
                $pixel = imagecolorat($resource,$x,$y);
                $r = ($pixel >> 16) & 0xFF;
                $g = ($pixel >> 8 ) & 0xFF;
                $b = $pixel & 0xFF;
                $r_array[$x][$y] = $r;
                $g_array[$x][$y] = $g;
                $b_array[$x][$y] = $b;
            }
        }
        $ret = array("r"=>$r_array, "g"=>$g_array, "b"=>$b_array);
        return $ret;
    }
    /* @return bool
     * @param array(3D), 2nd param changes direct
     * array 2 img resource
     */
    private function arr2resource($array,$resource){
        $r_array = $array["r"];
        $g_array = $array["g"];
        $b_array = $array["b"];
        for($y=0; $y<$this->h; $y++){
            for($x=0; $x<$this->w; $x++){
                $r = $r_array[$x][$y];
                $g = $g_array[$x][$y];
                $b = $b_array[$x][$y];
                $color = ($r << 16) | ($g << 8) | $b;
                imagesetpixel($resource,$x,$y,$color);
            }
        }
        return true;
    }
}
$f = new filter();
$f->setRect(array(array(1,1,1),array(1,1,1),array(1,1,1)));
$f->setImgpath("C:\\windowstare.jpg");
//header("Content-type:image/png");
$f->getImage();

?>

にまーん

 
ブ☆コン(ピュータ)が、ララ☆コンピュータに改めた日に2万ヒットいきました!
 
コメントや☆をくださった方以外、どんな方が見てくれているのか見当がつかないブログですが、ありがとうございます。
 
絵とかネタをあげた時はちょっとだけど、ソースコードをあげるとぐいーんとアクセスがある、謎のお客様層・・・。何を載せれば喜んでいただけるのか、わからない・・・。
ブクマも憧れるけど、まあ憧れるだけですw
 
これからもマイペースでコードを載せていくので、宜しくお願いします。
 
2万〜3万の野望としては、
C言語で、画像処理のソースを書いて載せたいなーと思っています。
 
 
 
 
どうでもいいこだわりなのですが
同じ絵を、別のリソース(概念含む)にあげるの、私はあまりやりたくないのです。
多分、自分が作ったものを、2つ以上の概念ツリーノードに属させたくないんだと思う。
だからはてなハイクの落書きを、このブログに載せるのもなあ、と思ってしまう。
ギークネタのネタイラストをハイクにいっぱい描いてますが、落書きレベルなので、ブログに貼るほどでもなく。
(自分の落書きに愛着を感じないのは、どうしたもんかと、自分でも思っています。。)

ハイク叩きの記事を結構見たんだけれど、 
イラストのリソース作成の場としては貴重だと思う、
でも収益につながらなそうだから、どうなるんだろうなあ。。
人気が出て重くなるほど、サーバ増やして赤字になる。。
 
・・・ポイント買おうかな。。適当にアフィリエイトでもしようかな。。

セキュスペ受けるぞう

 
来年の春、セキュリティスペシャリスト受けます!
自分は脆弱ですが、コードと運用は脆弱にしたくないのでw
 
今日本屋で、いつものように(・・・)技術書のコーナーに行ったのですが
資格の参考書のところ見てるうちに、あぁーなんか燃えたいなぁーと思いました!
 
とりあえず秋の試験の問題と解答が発表されてから、参考書を買って勉強を始めようと思います。
前回(去年春)は午前は通ったので、今度は午後特訓だ。頑張ろう。
 
まさかまた受けると思わなくて、参考書全部売ってしまったorz
買い直そうー。

パーミッションをひとにたとえてみる

ユーザ権限

  • 所有者(右から三番目)
    • 自分
  • グループ(右から二番目)
    • 仲良しグループ
  • 一般ユーザ(一番右)
    • 初めて会う人

各桁の8進数

  • Read(4)
    • 自分のことを話す。
  • Write(2)
    • CD、マンガの貸し借りをする。
  • eXecute(1)
    • 休日に遊びにいく。

右から4番目のビット

  • setuidビット(4)
  • setgidビット(2)
    • 一般ユーザがグループ権限で実行できる。
    • →飲み会マスター。
  • stickeyビット(1)
    • 所有者、ディレクトリの所有者、rootしか、そのファイルを削除できない。
    • →防弾チョッキ。

 
なので、

  • 人見知りの人は
    • 0770
    • 非常に仲の良い人にはオープン(groupの7)だけど、初対面の人にはそっけない(otherの0)。
  • ツンデレ
    • 0710
    • デレの人には、話聞かないし(groupのrが-)好きなCDも借りない(groupのwが-)けど、休日に遊びにいく(groupのxが立つ)。
  • ヤンデレ
    • 1076
    • 近しい人のために(いろんな意味で)大事なものを失いかねない。(stickeyビット)
    • 自分よりデレの人のために存在する。(ownerの0、groupの7)
    • 一般ユーザが6なのは、普通の人に対しては普通の扱いだから。

 
例えたら理解できるよね!学習教材的な。
(と、恥ずかしい空想を真面目に誤魔化す。)

まんがかきたくてネタ出し

 
昨日は出社時に雨だったので、最寄り駅までバスで行きました。
なので、帰りは家まで歩いて帰りました。
 
パソコンのたとえの漫画を描きたくて、歩きながらネタを考えていましたが、いいのが思いつかなくて描けずじまい・・・。
 
考えたネタは、
 
「あなたと同じグループに属したいv」
「俺パーミッション700で、誰にも心開かないから無理。」
 
とか、考えた。
シリーズにして、シリーズのタイトルは「瑠美(るびー)ちゃんの失恋記」ww
 
でもいまいちおもしろくない・・・。
 
 
最近現実世界のいろいろなことに、パーミッションの概念をあてはめる空想をよくします。。
続く。w

没デザイン


論理回路性格診断のページを作っています。
 
青春時代、CSSを一切使わないWebデザインを毎日毎日書いてた身、
(挫折したけど)Webデザインの専門学校をかじった身として、
Webデザインを考えるの好きなのです。
 
でもなんか、「論理回路にちなんだデザイン」を考えて考えすぎて
Webデザインを組む手が止まってしまった、これは本末転倒だ。
 
この記事の一番初めの画像は、変に「MSNっぽく??」と考えたけど
迷走して、没にしたデザインです。
 
今組んでるのはこんなかんじです。

変に欲出して、楽しくないWebデザインを趣味でやるなんておかしなこった!
楽しくWebデザインするんだー!