Jetson TK1 とか

もうすぐJetson TK1 が届く。
ということでこれを使ってやりたいことと、参考になりそうなサイトをメモっておく。

まずクロスコンパイラ。
http://blog.techlab-xe.net/
https://github.com/kkkon/crosstool-py

これがないと、そもそも開発できない。

次にこれとか。
http://kivantium.hateblo.jp/entry/2014/11/25/230658
http://techblog.yahoo.co.jp/programming/caffe-intro/

カメラ取り付けて画像認識とかやってみたい。
目標は画像から麻雀牌を認識させる事。

これにCUDAを絡めたい。ので、
http://schima.hatenablog.com/entry/2014/04/06/135851
http://rabbit-note.com/2014/08/21/jetson-tk1-opencv-face-detection/

このへん諸々勉強も兼ねてやりたい。
どうせ年末年始は暇だろうし引きこもってやろう。

リモートデスクトップ
http://xiangcai.at.webry.info/201403/article_4.html

俺の.*rc

vimrc
set encoding=utf-8
set number
set smartindent
set shiftwidth=8
syntax on
set showmatch
set matchtime=5
set nocompatible
set mouse=a

bashrc

export ESC="$(echo -en '\033')"
export COLOUR_RED="$(echo -en '\033[31m')"
export COLOUR_GREEN="$(echo -en '\033[32m')"
export COLOUR_YELLOW="$(echo -en '\033[33m')"
export COLOUR_BLUE="$(echo -en '\033[34m')"
export COLOUR_CYAN="$(echo -en '\033[35m')"
export COLOUR_MAGENTA="$(echo -en '\033[36m')"
export COLOUR_WHITE="$(echo -en '\033[37m')"
export COLOUR_HIGHLIGHT_RED="$(echo -en '\033[31;1m')"
export COLOUR_HIGHLIGHT_GREEN="$(echo -en '\033[32;1m')"
export COLOUR_HIGHLIGHT_YELLOW="$(echo -en '\033[33;1m')"
export COLOUR_HIGHLIGHT_BLUE="$(echo -en '\033[34;1m')"
export COLOUR_HIGHLIGHT_CYAN="$(echo -en '\033[35;1m')"
export COLOUR_HIGHLIGHT_MAGENTA="$(echo -en '\033[36;1m')"
export COLOUR_HIGHLIGHT_WHITE="$(echo -en '\033[37;1m')"
export COLOUR_DEFAULT="$(echo -en '\033[m')"

PS_USER="\[\e[33m\]\u\[\e[0m\]"
PS_HOST="\[\e[32m\]\h\[\e[0m\]"
PS_WORK="\[\e[37;1m\]\W\[\e[0m\]"
PS_SCREEN=""
PS_SSH=""
PS_ATODE=""

if [ -n "${PARTTY_SESSION}" ] ; then
PS_HOST="\[\e[32m\]${PARTTY_SESSION}!\[\e[0m\]"
fi
if [ -n "${WINDOW}" ] ; then
PS_SCREEN="(\[\e[35m\]${WINDOW}\[\e[0m\])"
fi
if [ -n "${SSH_CLIENT}" ] ; then
PS_SSH="(\[\e[36m\]`echo ${SSH_CLIENT} | sed 's/ [0-9]\+ [0-9]\+$//g'`\[\e[0m\])"
fi
if [ -f ~/.atode ]; then
PS_ATODE="(\`cat ~/.atode | wc -l\`)"
fi
export PS1="[${PS_USER}${PS_SCREEN}@${PS_HOST}${PS_SSH}${PS_ATODE} ${PS_WORK}]\$


screenrcがなくなってた...

yamyを使ってキーボードで色々操作できるようにする

家のPCにyamyを入れてキーボードにLinuxみたいなショートカッtを登録した.

とりあえずyamyをダウンロード.

最初に呼び出すのがこれ.
日本語キーボードの場合104.mayuでなく109.mayuを呼び出すんだと思う.

keymap Myset : Global
include "104.mayu"		# 104 キーボード設定

keymap Global

# CapsLock to Alt
mod Alt += CapsLock
key *CapsLock = *LAlt
mod Alt += E0CapsLock
key *E0CapsLock = *LAlt

これでCapsLockにAltキーを割り当てている.

次にIME切り替えをAlt + Spaceにする.
私は英字キーボードを使用しているのでIMEの切り替えにAlt + BackQuoteが使用されている.
そこでそれを呼び出す.

#IMEの入れ替え
key A-Space = A-BackQuote

残りは適当にショートカットを登録.

#移動系
key A-b = Left
key A-p = Up
Key A-n = Down
key A-f = Right
key A-e = End
key A-a = Home
key A-c = Esc

#削除系
key A-h = BackSpace
key A-d = Delete

【cakephp】findでcontainするとき論理削除されてカラムを取得しない【失敗】

CakePHPでfindするときcontainというプロパティを設定できる。
これはアソシエーション関係にあるモデルを一緒にfindするときに設定するようなもの。
詳しくわかっていないので説明の詳細は他のサイトを見てください。

さて、このcontain便利ですがモデル毎のbeforeFindが効きません。(私の調べ方が足りないだけかもしれない)
私の実装してるアプリではDBからのデータ削除は物理削除ではなく論理削除です。
そのため、deleted=>0を設定しないと削除したつもりのデータをfindしてしまいます。
しかし、各モデル毎にdeletedを設定するのは面倒です。
そこでbeforeFindに自動でdeleted=>0を設定してくれるような関数を書いてみました。

<?php

class AppModel extends Model {

public function beforeFind($queryData) {
$this->setDelete(&$queryData['contain']);
return $queryData;
}

private function setDelete(&$containArray) {
                if (is_array($containArray)) {
                        foreach($containArray as $key => $value) {
                                if (ctype_upper($key[0])) {
                                        if (empty($containArray[$key]['conditions']['deleted'])) {
                                                $containArray[$key]['conditions']['deleted'] = 0;
                                        }
                                        $this->setDelete(&$containArray[$key]);
                                }
                                else if (is_numeric($key) && ctype_upper($value[0])) {
                                        $containArray[$value] = array();
                                        $containArray[$value]['conditions']['deleted'] = 0;
                                        unset($containArray[$key]);
                                }
                        }
                }
                else {
                }
        }

lib/Cake/Behavior/ContainableBehavior.phpを編集するとうまくいきそう。

phpで特定の日付からある日数分前の日付一覧を取得する【修正】

NurseAngelさんからもっと便利な方法を教えていただいたので紹介しておきます.
paluの忘却録『phpで特定の日付からある日数分前の日付一覧を取得する』の感想 - 弱小PHPerの憂鬱

Cakeのメソッドはそこそこ使ってきたけどPHP自体のクラスやメソッドはまだまだ知らないものがたくさんある.勉強しなければ.

phpで特定の日付からある日数分前の日付一覧を取得する

PHPである特定の日から1周間前までの日付一覧を取得する必要があった。
そこでこんな関数を作ってみた。
引数は基準日の各要素と取ってくる機関の長さ。
うるう年も考慮している。
計算方法はここを参照。1行で書けるうるう年判別法 - プログラマはサイコロを振らない

private function getDay($year = NULL, $month = NULL, $day = NULL, $length = NULL) {
                if ($year == NULL) {
                        $year = date('Y');
                }
                if ($month == NULL) {
                        $month = date('m');
                }
                if ($day == NULL) {
                        $day = date('d');
                }
                if ($length == NULL){
                        $length = 6;
                }
                if ($day >= '07'){
                        $dayList =  array('year' => $year,
                                'month' => $month,
                                'day' => range($day - $length, $day),
                        );
                }
                else {
                        if ($month != '1') {
                                $dayList = array('year' => $year,
                                        'month' => array(
                                                $month - 1,
                                                $month,
                                        ),
                                        'day' => range($day - $lenght, $day),
                                );
                        }
                        else {
                                $dayList =  array(
                                        'year' => array(
                                                $year - 1,
                                                $year,
                                        ),
                                        'month' => array(
                                                12,
                                                1,
                                        ),
                                        'day' => range($day - $length, $day),
                                );
                        }
                        for ($i = $length; $i >= 0; $i--) {
                                if ($dayList['day'][$i] == 0) {
                                        switch($dayList['month'][0]){
                                        case 4:
                                        case 6:
                                        case 9:
                                        case 11:
                                                $dayList['day'][$i] = 30;
                                                break;
                                        case 2:
                                                $dayList['day'][$i] = 28 + (1 / ($dayList['year'][0] % 4 + 1)) * (1 - 1 / ($dayList['year'][0] % 100 + 1)) + (1 / ($dayList['year'][0] % 400 + 1));
                                                break;
                                        default:
                                                $dayList['day'][$i] = 31;
                                        }
                                }
                                else if ($dayList['day'][$i] < 0) {
                                        $dayList['day'][$i] = $dayList['day'][$i + 1] -1;
                                }
                        }
                }
                return $dayList;
        }

結果はこんな感じ。

getDay();
Array
(
    [year] => 2013
    [month] => 10
    [day] => Array
        (
            [0] => 24
            [1] => 25
            [2] => 26
            [3] => 27
            [4] => 28
            [5] => 29
            [6] => 30
        )

)

getDay(null, 1, 4, null);
Array
(
    [year] => Array
        (
            [0] => 2012
            [1] => 2013
        )

    [month] => Array
        (
            [0] => 12
            [1] => 1
        )

    [day] => Array
        (
            [0] => 25
            [1] => 26
            [2] => 27
            [3] => 28
            [4] => 29
            [5] => 30
            [6] => 31
            [7] => 1
            [8] => 2
            [9] => 3
            [10] => 4
        )

)

ただ関数の名前とか返り値は微妙かもしれない。。。
なので呼んだ側でうまく使ってやる必要がある。