コンピュータネットワーク

IP,OSPF

http://ascii.jp/elem/000/000/579/579855/

TCP/UDP トランスポート層,わかりやすいまとめ資料.

http://www.infraexpert.com/study/

http://www5e.biglobe.ne.jp/~aji/3min/

概要的に理解するのに良い資料

http://pc.nikkeibp.co.jp/article/NPC/20070130/260041/

http://gihyo.jp/admin/serial/01/net_prac_tech/0007?ard=1390803513

TCP/UDP ポートのめちゃくちゃわかりやすいページ

http://www.infraexpert.com/study/tcpip7.html

TCP/UDP ウィンドウ制御・フロー制御のわかりやすいページ

http://www.infraexpert.com/study/tcpip11.html

Wikipedia
Ethernetの真ん中のL1, L2の図が非常にわかりやすい.

NAT
内部ローカルと内部グローバルの一対一写像の構築

http://itpro.nikkeibp.co.jp/members/NNW/NETPOINT/20040921/1/zu1.html?ST=network

NAPT (IPマスカレード)
内部ローカル×ポートと,内部グローバル×ポートの一対一写像を構築.後者のポートのバリエーションが当然大きくなる.

http://itpro.nikkeibp.co.jp/members/NNW/NETPOINT/20040921/2/zu3.html?ST=network

Ubuntuで突然管理者権限がなくなった時の対処法

Ubuntuさんで普通に作業していたら,いきなりsudoが使えなくなる現象が発生しました.
(hamko is not in the sudoers file. This incident will be reported.)

原因はsudo /usr/sbin/usermod -G fuse hamkoのコマンドの-G.指定したグループにユーザを追加するとともに,他の全てのグループからユーザを削除してしまいます.ユーザをグループに追加するときはsudo adduser user groupを使いましょう.

復旧方法.僕は(2)でやりました.
(1) rootのパスワードが設定されている,もしくは他の管理者権限を持つユーザが存在するなら,そのユーザでsudo passwd userを打てば即刻解決.

(2) 管理者権限が完全になくなっていたら,UbuntuのインストーラのCDのTry Ubuntuを使います.
(a) Try Ubuntuで起動
(b-CD) ターミナルを立ち上げるctrl-shift-nだかctrl-shift-t
(c-CD) sudo su
(d-CD) cat /proc/partitions→Ubuntuの論理パーティッションっぽいものを見つける./dev/sd何とか,という名前になっているはず.
(e-CD) mount /dev/sda何とか /mnt
(f-CD) /mnt/etc/groupをエディタで開いて,sudoを検索して,最後にuserを追加します.
(g-CD) reboot nowを打ちます.
(h-HDD) やってもやらなくても.いざこんなことを起きても大丈夫なように,rootのパスワードを設定しましょう.sudo passwd rootからのパスワード設定.(rootにパスワードを設定しないのが最近のトレンドらしいです.どうなっても知りません.)

論文の書き方とTeXと図

Tex
図はepsで.epsにするコマンドとかを書いてみたり.

bibtexの仕組みを勉強したい.

http://did2.blog64.fc2.com/blog-entry-239.html

subfigureの使い方.2つ以上の画像を,ひとまとめにして記述可能.minipageよりも綺麗.
文章では1つの引用で,図は2つの比較などの場合に利用できる.

graphic
includegraphicsのオプションは左から右に実行されていく.angle->widthの順でやるのが無難.

http://www.cityfujisawa.ne.jp/~huzinami/tex/graphic.html#g-include1

http://osksn2.hep.sci.osaka-u.ac.jp/~naga/miscellaneous/tex/tex-tips2.html

記述
「データを記述する」=「恣意性を入れてわい小化し,情報を落とす代償に低次元化を行い,わかりやすく説明すること.」
注意: 情報を落とし過ぎると意味がなくなる.(高次元データをただsumしただけ,とかだとその性質が潰れすぎている)
高次元なデータは特に,何が同じで何が同じではないかを定義するのが難しい.そのため,高次元データでは特にデータの記述が必要となる.

パワポの作り方
一枚のスライドで言うこと1つ.
基本は上見て,詳細は下,がパワポの書き方
スライドをみて伝えたいことは書かないとわからない
タイトルもきちんと意味をもたせる.
実験は方法&目的をきちんと書く.

発表
背景の最初のスライドは消すべき(社会的背景).実際にやっていないことを、想定していない事でしかない.短い学会発表の中では特に、出す例も含めてすべて伏線であるべき.
Tipsまとめ.

https://mail.google.com/mail/u/0/#search/%E5%8D%92%E8%AB%96/143f66d6908c39ab

数字をおしてエンターで戻れる.質疑でカタカタしているのはみっともない.

結論・展望の書き方
結論は,結果をより一般化,抽象化したレベルで語る.やったことの羅列ではない.
パラグラフは,
・背景・目的・方法
・[結果x3→結論(一般化)] x N
・展望

論文の構成
introと結語は膨らませて,結果は細い.ぼんきゅっぼん.
どれだけ自分のやった僅かなことが,学際的に多方面に接地できるか,が勝負.

先行研究の紹介の構造
(1)〜について説明する.(なくてもいいが普通ある)(2)説明.(3)「以上の知見から,〜だと考えられる(具体的,合文脈的).」「特に注目したいことは〜(限定).」
(3)で(2)とか(1)と同じ事を言ってもしょうがない.(2)から言えることをまとめて,より一般化,抽象化したレベルで語る.考察と結論の関係のように.
(1)は方向付け,(2)は論拠,(3)は主張.

研究計画
要求仕様であって,方法についてはあまり考えない.

ポスター
abstは人がいないときに読ませるもの
後援機関,題名,筆者,導入,方法,結果,結論
後援機関,題名,筆者,導入,方法,実験&結果,結論,など.

背景と目的→社会的背景は除外?
方法に仮説を明示し,それを検証するための戦略を書く.
その道具だてとしての方法を記述.

実験&結果は,「目的&方法,結果,考察」が明らかになるように
Tipsは別色で囲んで説明(赤ちゃんロボット,正準相関分析,運動カップリングなど.)

ポスター発表
ポスターの発表はまず10秒で何をする研究かを説明して,その後具体的な方法に入っていく.

書きたいことがない

気分転換にブログを書こうかなぁ、と思ったのだが、全然書きたいことがない。

目玉の初夢のブログを書いた時は、心にもやもやがあって、すらすらと言葉が出てきていた。
後から見返しても、相当な短時間のなぐり書きだったのにも関わらず、まるで熟考の末に生み出されたかのように整理された文章が書けていて驚いた。

当たり前のことだが、何かを書くことは、自分の心の中を文章に近似してoutputすることだと思っている。
ブログをちょくちょく書いて、その時々の自分の気持ちを再確認しよう、という試みも、自分の気持ちの進捗みたいなものがなければ、全く手が動かなかったりする。
だから、タイピングのスピードに頭が追いつかない間だけ、ブログを書き続けるスタンスでいる。そうでなければモチベが湧かず、ブロギングはつまらないルーチンワークとなってしまう。

時にはoutputしたものに引きずられて自分の心が陳腐化する.

僕は今、卒論を急ピッチで書かなければならないらしいのだが、全然書きたくならない。

C++0xのLambda式による量化関数

Lambda式の勉強をちょっとしたので、衝動的に量化関数を実装してみた。

#include <iostream>
#include <vector>
using namespace std;
#define vi vector<int>
#define vit vector<int>::iterator
#define all(a) begin(a),end(a)

template <class T, class LAMBDA>
bool forall(T b, T e, LAMBDA l) {
    int faf = 1;
    for (T it = b; it != e; it++) {
        if (!l(it)) {
            faf = 0;
            break;
        }
    }
    return faf;
}
template <class T, class LAMBDA>
bool thereexists(T b, T e, LAMBDA l)
{
    return !forall(b, e, [l](T it) {return !l(it);});
}

main()
{
    vi a = {3, 6, 9, 12};

    // for all it in a there exists j in [4, 5], *it can divided by j -> 0
    cout <<
        forall(all(a), [](vit it) {
            return thereexists(4, 5, [&](int j) {
                return !(*it % j);
            });
        })
    << endl;

    cout << forall(2, 3, [&](int it) {return it > 2;}) << endl; // 0
    cout << forall(3, 4, [&](int it) {return it > 2;}) << endl; // 1
    cout << forall(all(a), [&](decltype(begin(a)) it) {return !(*it % 2);}) << endl; // 0
    cout << forall(all(a), [&](decltype(begin(a)) it) {return !(*it % 3);}) << endl; // 1
    cout << thereexists(all(a), [&](decltype(begin(a)) it) {return !(*it % 5);}) << endl; // 0
    cout << thereexists(all(a), [&](decltype(begin(a)) it) {return !(*it % 12);}) << endl; // 1
}

どれくらい意味がわかりやすくなるかというと、こんな感じ。量化記号をそのまま実装できる点で、書きやすく意味が一目瞭然。
before

        int flag = 0;
        for (auto itj = candidacy.begin(); itj != candidacy.end(); itj++) {
            if (iti == itj)
                continue;
            int faf = 1;
            for (int h = 0; h < COLOR_NUM; h++) {
                if (!((*iti)[h] >= (*itj)[h])) {
                    faf = 0;
                    break;
                }
            }
            if (!((*iti)[8] >= (*itj)[8]))
                faf = 0;
            if (!faf) {
                continue;
            } else if (faf) {
                flag = 1;
                break;
            }
        }
        if (flag)
            iti = candidacy.erase(iti, iti + 1);
        else
            iti++;

after

        if (there_exists(all(candidacy), [&](itr(candidacy) itj) { return iti != itj && (*iti)[8] >= (*itj)[8] && for_all(0, (int)COLOR_NUM, [&](int h){ return (*iti)[h] >= (*itj)[h]; });}))
            iti = candidacy.erase(iti, iti + 1);
        else
            iti++;