カテゴリ:
今年買ったもので一番よかったものを紹介しますよ。
一位はこれ↓



電動インパクトドライバー。
引越し、子供が生まれるなどのイベント予定がある人、最近あった人で、家具の買い替えがある人、さらに買い換えた家具が組み立て式である場合は絶対買うべき。
  1. いままで手で回してたのがバカみたい
  2. インパクトが強力なため、仮止めから本止め、さらに硬いネジを外すときでも超活躍。all in one
  3. 家中のネジを締めたくなるので、締めた結果、家が安全になる
  4. 「電動ドライバー使うほど私はネジを扱いません」って思ってる人でも使うと便利さにだいぶ泣く
  5. 手で回してる人を見ると優越感。教えたい
  6. ライトがつくので、手許が暗い時でも確実にネジにアプローチすることが可能。兵器感がある
  7. なにしろかっこ良くて仕方ない。重力子放射線射出装置か?
  8. ケースがジュラルミンのアタッシュケースのような重厚感。意味なく持ち歩きたい
  9. プロの工事のひとも使ってた安心のマキタ
  10. なぜかしらバッテリーがクソ持つ。買ってからあまりつかってないのもあるけどまだ一度も充電してない
ついでに、 もぜひ。
二位はこれ↓



セルフロック、ボタンひとつで自動的に収納される。
引越し、子供が(以下略)ある人、さらに引越し先がいまと違う間取りで(普通はそうだろうけど)メジャーなどで家具のサイズを測ったりしまくる場合は絶対買うべき。
  1. いままで手で引っ張って支えてたのがバカみたい
  2. 一度使うとその剛性感のとりこになる
  3. 家中のあらゆる部分のサイズを測りたくなる
  4. 「そんなにメジャー使いません」って人ほどハマるとすごい
  5. こういうものがあるということは殆どの人はわかっていると思うが、持ってる人は少ない
  6. 自動収納の時の安定感、インパクト感は麻薬
  7. 二人で測ってて、手で支えてる側がうっかり離してしまった時、測ってる側の人にだいぶリスクがあるし、びっくりしてそのあと喧嘩とかになる。でもこのメジャーだと測ってる側にイニシアチブがあるので、この問題は根源的に解消される
  8. プロの人も使ってた安心のコメロン
ついでに、 もぜひ。



なんと、andoird developers の公式ページでeclipse とsdk が同梱した all in one パッケージが配布されてた。

ココ

これで、eclipse いれて、sdk DLして、環境変数がとか、AVD がどうしたこうしたとかの手間がだいぶ省ける。

mac 版 win 版両方あって、実際使ってみたけど全然問題なくて、もともとの eclipse は消しました。

android の開発のいちばんの敷居は開発環境の構築だから、これによって、いいアプリがバンバン出ますよ。きっと。
これでひとつ Xcode に近づいた。

先日のはあまり便利じゃなかったしひどいので、uniquify の一部上書きしてなんとかましになった。
この件はこれで終わろう。

;;
(defun my-git-current-branch () (format "(%s)" (magit-get-current-branch)))

;; override
(defun uniquify-rename-buffer (item newname)
  (let ((buffer (uniquify-item-buffer item)))
    (with-current-buffer buffer
      (let ((uniquify-buffer-name-style nil)) ;Avoid hooks on rename-buffer.
        ;; Pass the `unique' arg, so the advice doesn't mark it as unmanaged.
        (if (fboundp 'magit-get-current-branch)
            (let ((magitname (magit-get-current-branch)))
              (if (not (null magitname))
                  (setq newname (concat (my-git-current-branch) newname)))))
        ;;(message (concat ":::::" newname))
        (rename-buffer newname t)))))

強引すぎるが、モードラインに現在のbranchを表示するための。もっといい方法は絶対ある。elisp 忘れたからもうこれでいい。これは tramp 上でも動いたし。
magit-post-command-hook ってのは名前から想像するフックじゃないのかな。
(remove-hook 'find-file-hooks 'vc-find-file-hook)

(setenv "PATH" "/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin")

(add-to-list 'load-path "~/emacs/lisp/magit/")
(require 'magit)

(setq magit-git-executable "/usr/local/bin/git")

(defun my-show-git-current-branch ()
  (interactive)
  (message (magit-get-current-branch))
  (my-set-git-current-branch))
(define-key esc-map "B" 'my-show-git-current-branch)
(defun my-set-git-current-branch ()
  (setq mode-line-frame-identification (format "(%s)" (magit-get-current-branch))))

;; (set-default 'mode-line-frame-identification '(my-set-git-current-branch))

(add-hook 'magit-post-command-hook 'my-set-git-current-branch)
(add-hook 'dired-mode-hook 'my-set-git-current-branch)
(add-hook 'find-file-hook  'my-set-git-current-branch)

世界でも有数の ThinkPad コレクターだった私ですが、引越しのときにその9割を廃棄して、会社でも ThinkPad から、Mac へ移行しつつありますそれはなぜかというと簡単に表現すると「時代」とでもいうものに翻弄されているわけなんですがもっと簡単にいうとThinkPadが使いにくくなってきたしかしトラックポイントとキーボードはまだ使えるでもキーボードはだんだんだめになってきてトラックポイントだけが呪いになってるだったら!と思ってMacを買ったのが一年くらい前でこれがまたまったくもって普通に使えてしまいトラックポイントいらないのでは伝説とともに最後の砦でもあるテラタームのマクロなんですがこれは実はかなりセキュアの真逆をいくものなので少々面倒でもやはりちゃんとログインすべきなのかとかいろいろ思いながら会社ではThinkPadをキーボードとしてiMacを使ってます。

TeraTerm のマクロとは、まぁなんていうか、端末エミュに対するメカな伊豆みたいなもので、これだと足場を何個経由する鯖だろうと一発でログインできる。これは Mac のターミナル+Macのなにかでなんとかしたいと思ってます。

カテゴリ:

驚異的な場面だったが,それはクリーブランドで超えられていた。数数千が,訪問代表団と会合するためにユニオン列車車庫に群がった,そして,パレードは二〇〇台の酔っぱらっていて旗の包茎(ママ)の車を含んでいた。
これはwww買うべきだろwwww

カテゴリ:
タイタニュームが流行ってるので、やったらはまったよ。

まず、空白が含まれるパスがsd card に指定されて詰む件は、
C:\Documents and Settings\All Users\Application Data\Titanium\mobilesdk\win32\1.7.2\android\builder.py
にある
        emulator_cmd = [
            self.sdk.get_emulator(),
            '-avd',
            avd_name,
            '-port',
            '5560',
            '-sdcard',
            self.sdcard,
            '-logcat',
            '*:d,*',
            '-no-boot-anim',
            '-partition-size',
            '128' # in between nexusone and droid
        ]

        emulator_cmd = [
            self.sdk.get_emulator(),
            '-avd',
            avd_name,
            '-port',
            '5560',
            '-sdcard',
            '"' + self.sdcard + '"',
            '-logcat',
            '*:d,*',
            '-no-boot-anim',
            '-partition-size',
            '128' # in between nexusone and droid
        ]
に。要はダブルクォートしよう。今時半スペつきの引数でエラーってココロ・オ・レール様なレベルだよ。

で、

[ERROR] Failed installing com.appcelerator.titanium:     pkg: /data/local/tmp/app.apk


Failure [INSTALL_FAILED_MISSING_SHARED_LIBRARY]
これは、

http://developer.appcelerator.com/blog/2010/12/titanium-and-android-sdk-tools-r8.html

んなのわかるかぼけ!いや、よく読めって話なの?(´・ω・`)

結論として、Run Configuration で Android 2.2 じゃなくて、Google APIs Android 2.2 を使う。

感想 java は嫌いだ。

カテゴリ:
Scrappy

ってのを使ってみたんだけど、get 後の form がうまくいかね。worker 直呼びしたらうまくいった。なんだこれ。Moose はいっててちょっとよくわからない。:syntax 使えってはなしもあるかも。

    my $scraper = Scrappy->new;
    $scraper->user_agent->name('DoCoMo/2.0 N906i');
    $scraper->get($login_url);
    $scraper->worker->submit_form(form_number => 1, fields => { account => 'hoge', password => 'hage' });
    my $citem = { 'a' => sub {
                      my ( $self, $item ) = @_;
                      unless ($self->response->is_success) {
                          warn sprintf("%s %s", $self->url, $self->status_line);
                      }
                      my $url = URI->new($item->{href});
                      if ("URI::http" eq ref $url or "URI::https" eq ref $url) {
                          $self->queue->add($url->as_string);
                      }
                  }
                };
    my $start = $scraper->url;
    $start =~ s|\?|/?|;
    $scraper->crawl($start, '*' => $citem );

携帯サイトを叩きたかったので。いろいろなんか気持ち悪いけど、目的は果たせたようです。

delegate9.9.8-pre20 で、

delegated -Fauth -a hoge:hogepass -localhost 180
とかやっても、最後の expire がまったく反映されないので、しょうがなくソースみたら、 src/access.c で、0 固定になってた。なぜだろう。

値渡しても使われないようだ。まだ未実装なのか。


カテゴリ:
リクエストハンドラを書いたら validate したくなるのが人間。

そこで Dancer::Plugin::ValidationClass .

Validation::Class のラッパーということです。 Validation::Class 使った事無いですが。。。

とりあえず、dancer の設定ファイル、config.yml(?) に

plugins:
  ValidationClass:
    class: Kirigamine::Validator
とか書いとく。で、

use Dancer::Plugin::ValidationClass;
    unless (validate 'param') {
        my $errors = validation->errors;
        debug Dumper $errors;
        set_flash($errors);
        return redirect '/';
    }
validate 構文(?)が使えるようになるので、それにパラメタわたして、Validator クラスでは
package Kirigamine::Validator;
use strict;
use warnings;
use Validation::Class;

field 'param' => {
                   required   => 1,
                   min_length => 1,
                   max_length => 10,
                   regex      => '^\d+$',
                   label      => 'params of any dispatch',
                   error      => 'error: params of any dispatch',
                 };

1;
こんなで。

set_flash ってのは、ただ、メッセージを保持するだけのやっつけ機構。dancer のPODにあったやつ。

Makefile.PL に

    PREREQ_PM => {
                   ...
                   'Dancer::Plugin::ValidationClass' => 0,
     },
書いて push。

こんなで

カテゴリ:
Dancer がらくちんだったので、しばらく勉強する予定。

いわゆるシナトラということで。

epoch を 日付に変換する:

get '/epoch/:param' => sub {
    my $localtime  = DateTime->from_epoch('epoch' => params->{param}, 'time_zone' => 'Asia/Tokyo');
    template 'epoch', { local_time => $localtime,
                        now => DateTime->now('time_zone' => 'Asia/Tokyo'),
                        config => config,
                      };
};

views/epoch.tt を用意して TTっぽく <% local_time %> とかすると表示。

dotcloud に push するときに、Makefile.PL にちゃんと DateTime を必要だと明示する必要があるよう。当然と言えば当然か。
    PREREQ_PM => {
        'Test::More' => 0,
        'YAML'       => 0,
        'Dancer'     => 1.3040,
        'DateTime'   => 0,
        'Plack::Request' => 0,
    },
こんなで

view に渡す方法まだまだありそうだな。トリガーがあるし、共通なのはそこなんでしょうね。
とかとか。

カテゴリ:
まず python を。ところが、うちの centos の python は 2.4 なので、pythonbrew をいれる。--force つきで。

pythonbrew

そして、

dotCloud でPSGI Hello World


おわり。まぁせっかくなので dancer 使ってみっか。

git が入ってないので src から make.

dancer が入ってないのでインスコール

# perlbrew perl-5.12.3
# perl /usr/bin/cpanm dancer

(cpanm は1ついれればいい技があるらしいので、ぐぐってください)

で、 dotcloud の docs . あれ? git いれなくてよかった。ちきしょう。

まるで障壁なし。楽です。

dotcloudで遊んでみた

をみて domain も設定。ふんふん。GAE より楽だ。

カテゴリ:
ヒストグラムインターセクションって極端に色数が少ない1枚と何かを比較したりする際にどうも役に立たない気がするというか。

その関数とはこれ
sub calc_hist_intersection {
    my ($hist1, $hist2) = @_;
    my $total;
    my $ea = each_array( @$hist1, @$hist2 );
    while(my ($his1, $his2) = $ea->()) {
        $total += min($his1, $his2);
    }
    return $total / sum(@$hist1);
}
ですが、いずれにせよ、最終行は、
return $total / min(sum(@$hist1), sum(@$hist2));
じゃないでしょうか?

で、これだとどうもあれだったので
sub calc_hist_intersection {
    my ($hist1, $hist2) = @_;
    my $total;
    my $ea = each_array( @$hist1, @$hist2 );
    while(my ($his1, $his2) = $ea->()) {
        $total += abs($his1 - $his2);
    }
    return 1 - $total / max(sum(@$hist1), sum(@$hist2));
}

こうしてみた。数式とかは書けないので書きません。

カテゴリ:
ちょっくら必要になったので、画像比較を検討して、Image::Seek がどうもあれだったので、

類似画像検索システムを作ろう

様を参考に、というか全部同じで。opencv, c, python を全部 perl で。

速度は、まだ観てません。Imager 便利すぎ。関数名は内容とあってないかも。きにしない。

#!/usr/local/bin/perl

use strict;
use warnings;
use Imager;
use List::Util qw(min sum);
use List::MoreUtils qw/each_array/;

sub calc_hist_intersection {
    my ($hist1, $hist2) = @_;
    my $total;
    my $ea = each_array( @$hist1, @$hist2 );
    while(my ($his1, $his2) = $ea->()) {
        $total += min($his1, $his2);
    }
    return $total / sum(@$hist1);
}

sub equalize_64 {
    my $cc = shift;
    return 32  if ($cc < 64);
    return 96  if ($cc < 128);
    return 160 if ($cc < 196);
    return 224;
}

sub equalize_rgb_64 {
    my ($cr, $cg, $cb) = @_;
    return equalize_64($cr), equalize_64($cg), equalize_64($cb);
}

sub rgb_to_bin_64 {
    my ($red, $green, $blue) = @_;
    return 16 * int($red / 64) + 4 * int($green / 64) + int($blue / 64);
}

sub get_lazyhistgram_64 {
    my $img = shift;

    my $lazy_histgram = [ map { 0 } 0..64 ];

    my $colors = $img->getcolorusagehash;
    my @rgb;
    foreach my $k (keys %{$colors||{}}) {
        @rgb = unpack("C*", $k);
        $lazy_histgram->[rgb_to_bin_64(equalize_rgb_64(@rgb))]++;
    }

    return $lazy_histgram;
}

sub compare_images {
    my ($filename1, $filename2) = @_;

    my $img = Imager->new or die;

    $img->read(file => $filename1) or die $img->errstr;
    my $hist1 = get_lazyhistgram_64($img);

    $img->read(file => $filename2) or die $img->errstr;
    my $hist2 = get_lazyhistgram_64($img);

    return calc_hist_intersection($hist1, $hist2);
}

warn compare_images($ARGV[0], $ARGV[1]);

1;


getcolorusagehash が便利すぎる。

ヒストグラムは、mysql の text カラムにいれとく。どうせ比較しないと近いかどうかわからないので、64カラムのテーブルとかしてもあまりいいことないですよね。きっと。

カテゴリ:
knoppix の慣れない感が将来に深刻な禍根を残すことになりそうだったので負けといわれようとも redhat 系をいれることにした。で、centos 5.6 の netinstall 。これは便利。

http://nobuneko.com/blog/archives/2010/10/centos_55usb.html

にしたがい、riken 指定。例によってキーボードも使いにくい vaio ux90ps なのですが、なんと途中で 「ぼうず、vnc でやらねぇか?」 って言われて歓喜。なんのハードルもなく vnc サーバが起動してそとから X のインストーラでインストール続行しました。
やっぱみんな vaio ux のキーボードは使いにくいと思ってたんだなぁ。

このページのトップヘ

見出し画像
×