メモの日々


2002年01月21日(月) 雨の日

会社

  • 9:55 高本さんがメイルを読めないらしい。調べてあげたけど分からない。Outlook Expressは難しい。
  • 11:20 VirusScanを4.5.1SP1にバージョンアップした。今日はまだ仕事してない。
  • 高本さんのメイルは山下さんが来て直した。なんかマウスがどうのこうのということで、ネットワークカードの認識がおかしくなっていたらしい。ようわからん。
  • 16:30 またセキュリティのビジネスについての打ち合わせ。どうしても話が発散して何のことやら分からなくなる。ひどく空しい。とてもいらいらする。今日まだ仕事してない。
  • 18:15 佐藤さんからKのログイン画面が出ないという電話を受けて、それへの対応を長々とやり、その後テープ交換へ。今日まだ仕事してない。
  • 21:45 仕事した。が、どうにもこうにも混乱中。やばいなあ。テーブルはやはり曲者なり。

テレビ/本

  • アリーマイラブ4(録画)。また開始時間が10分遅れた。ラスト10分が見れないいらいら感。太ったので辞めさせられた受付の裁判とか。

2003年01月21日(火)

会社

  • 8:50 出社。急行に乗ったらぎゅうぎゅう。
  • 午前午後 プログラムの細かい修正。大体出来上がった。ふう。でも何をもって完成かという終了条件が設定されていないので今後もだらだらと直し続ける日々なのだろう。
  • 18:30 退出。

2004年01月21日(水)

[unix] ipcclean

Linuxに存在していたipccleanスクリプトをNetBSDへコピーしてみた。問題なく動くようだ。

[c] <sys/queue.h>

sys/queue.h にある LIST を使ってみたので忘れないようソースをメモ。

#include <stdio.h>
#include <sys/queue.h>

/* LISTに含める要素の型 */
struct list_element {
    LIST_ENTRY(list_element) connector; /* LISTの前後の要素の情報を
                                           格納するフィールド */
    int value;
};

/* list_elementを要素に持つLISTを表す構造体my_listの宣言 */
LIST_HEAD(my_list, list_element);

void print_list(struct my_list *list_head);

int main()
{
    struct my_list list_head;
    struct list_element a, b, c;

    a.value = 1;
    b.value = 2;
    c.value = 3;

    LIST_INIT(&list_head);
    LIST_INSERT_HEAD(&list_head, &a, connector);
    LIST_INSERT_AFTER(&a, &b, connector);
    LIST_INSERT_AFTER(&b, &c, connector);

    print_list(&list_head);

    LIST_REMOVE(&b, connector);

    print_list(&list_head);
}

void print_list(struct my_list *list_head)
{
    struct list_element *p;

    p = LIST_FIRST(list_head);

    while (p != NULL) {
        printf("%d -> ", p->value);
        p = LIST_NEXT(p, connector);
    }
    printf("\n");
}

出力結果:

1 -> 2 -> 3 ->
1 -> 3 ->

LIST は末尾への要素追加が簡単にはできないので、FIFO を使いたいときは TAILQ を使うようだ。

(追記)

参考:http://vimrc.hp.infoseek.co.jp/diary/2002-08.html#2002-08-28-2 (vimrc diary)

[c] <sys/time.h>

sys/time.h には timerclear, timerisset, timercmp, timeradd, timersub というマクロが定義されている。

生活

  • 朝一番の作業はDeleteキー連打によるspamの削除。
  • 家から職場の自分宛に出しておいたメイルをspamと間違え削除してしまった。ゴミ箱に残っていたからいいんだけど。間違えないようにsubjectには日本語を含めた方がよい。
  • 「鍋が熱いので気をつけてください」という台詞を鍋触りながら言う店員。特殊な訓練を受けているのか。
  • タイマーのプログラムやっとこさ作った。が、テストファーストではないのでまだテストできていない。どのようにテストしたものか。
  • 今日の行数:2476

やること

  • 靴紐を買う

2005年01月21日(金)

  • 残っていたプリンタの「芯」を破棄しました。処分完了です。

[dream] 泥の夢

口の中に泥のようなセメントのようなものをほおばってしまいそれを一生懸命吐き出す夢を見ながら目覚めた。

口から何か吐き出そうとする夢はわりとよく見る。うがいしたくて洗面所を探すがなかなか見つからないとかそういうの。

[soft] UNIX USER 2月号に影舞の記事

が載っていた。以下から始まるMLのスレッドを読むとよい、と書いてあったのでメモ。

あと、ドキュメントでカスタマイズについて書かれている所もメモしておこう。

やること

  • プリンタ処分
  • リンク元のスリム化
  • ナンバーアナウンス解約
  • tDiaryバージョンアップ
  • FSWikiバージョンアップ
  • オーブンレンジ用べんり棚
  • 確定申告書作成

2009年01月21日(水)

[security] 情報漏洩リスクへの対処方法についてのメモ

ちょっと気になることがあったのでメモ。

  • 使用禁止ソフトを一生懸命周知しているが、その労力は正しいセキュリティ情報の周知に注ぐべき。
  • 周知側が「独自証明書によるhttpsサイトのため、ログイン時にエラー表示のような画面が表示されますが、心配ございません。」と言っているようではどうしようもない。
  • ソフトウェアが無償かどうかと情報漏洩リスクは無関係だ。

[unix][net][howto] /etc/network/interfaces に書くこと

IPアドレスの設定などを行いたい場合、Redhat系のLinuxでは /etc/sysconfig/network-scripts/ifcfg-ethXXX を編集すればよく、これは以前にメモした。

Debian系だとこのファイルはなく、代わりに /etc/network/interfaces を編集すればいいようなのでその書式をメモ。試したのはUbuntu 8.04。

eth0でDHCPを使いたい場合は、

iface eth0 inet dhcp

でできた。IPアドレスを指定したい場合は

iface eth0 inet static
      address 192.168.254.10
      netmask 255.255.255.0
      gateway 192.168.254.1

のように書けばいいみたい。

このファイルをうまく使えば魔法のような ネットワーク設定もできるようだがよくわかっていない。

参考

[unix][net][howto] LinuxでIP転送を有効にする

/proc を直接編集すればいいのかと思っていたらエラーになってしまった。なんでかな。

$ uname -a
Linux kenichi-ubuntu 2.6.24-23-generic #1 SMP Thu Nov 27 18:44:42 UTC 2008 i686 GNU/Linux

$ sudo echo 1 > /proc/sys/net/ipv4/ip_forward
zsh: permission denied: /proc/sys/net/ipv4/ip_forward

同じことは sysctl コマンドを使えばできる。

$ sudo sysctl -w 'net.ipv4.ip_forward=1'
net.ipv4.ip_forward = 1

$ cat /proc/sys/net/ipv4/ip_forward
1

2014年01月21日(火)

[c++] メンバ関数へのポインタを返す関数

C++でメンバ関数へのポインタを返す関数を書こうとしたんだけど、そのまま書くとコンパイルエラーになってしまった。

  • typedefを使う
  • C++11の新しい関数宣言記法を使う

とすれば書けたけど、そのまま書く方法が分からない。

#include <iostream>

using std::string;

struct A {
  string repeat(const string& s) const { return s + " " + s; }
};

// エラーになってしまう
//string ((A::* f0)(const string&) const)() { return &A::repeat; }

// typedefを使えばOK
typedef string (A::* F)(const string&) const;
F f1() { return &A::repeat; }

// C++11での新記法でもOK
auto f2() -> string (A::*)(const string&) const { return &A::repeat; }

int main() {
  A a;
  //std::cout << (a.*f0())("f0") << std::endl;
  std::cout << (a.*f1())("f1") << std::endl;
  std::cout << (a.*f2())("f2") << std::endl;
}

コメントアウトしている箇所を生かしてg++ 4.4.7でコンパイルすると

func_ptr.cpp:10: error: ‘f0’ declared as function returning a function
func_ptr.cpp:10: error: expected primary-expression before ‘return’
func_ptr.cpp:10: error: expected ‘}’ before ‘return’
func_ptr.cpp:10: error: expected declaration before ‘}’ token

というエラーになる。