ジョギング音楽
(2014/5/9) 新しく2014年バージョンを公開。→こちら。
私がジョギングのときにiPodで聴いている曲を紹介。BPM 160前後の洋楽が中心。
曲名 | アーティスト名 | BPM | リンク | |
---|---|---|---|---|
Crawling Back To You | Daughtry | 151 | iTunes / Youtube | |
Feelin' Way Too Damn Good | Nickelback | 156 | iTunes | |
Over You | Daughtry | 156 | iTunes / Youtube | |
Duca | Chara | 156 | ||
変わらないもの | 奥華子 | 157 | iTunes | |
Blurry | Puddle of Mudd | 157 | iTunes / Youtube | |
Holding On to Heaven | Nickelback | 158 | iTunes | |
Keep Holding On | Avril Lavigne | 161 | iTunes | |
Some Say | Sum 41 | 162 | iTunes / Youtube | |
Keep It Together | Puddle of Mudd | 162 | iTunes | |
What About Now | Daughtry | 162 | iTunes | |
We Don't Have To Look Back Now | Puddle of Mudd | 163 | Youtube | |
Some Day | Nickelback | 163 | iTunes / Youtube | |
Don't Ever Let It End | Nickelback | 168 | iTunes | |
Losing My Mind | Daughtry | 168 | iTunes / Youtube |
ついでに、ジョギングに向いているかはともかくBPM 160前後の曲の紹介。
曲名 | アーティスト名 | BPM | リンク |
---|---|---|---|
ふでペン〜ボールペン | 放課後ティータイム | 153 | |
働く男 | ユニコーン | 160 | |
Woman Like You | Lee Brice | 160 | Youtube |
iYiY | Cody Simpson | 160 | iTunes / Youtube |
Sense | Amanda Mair | 165 | Youtube |
Got Me Good | Cody Simpson | 168 | Youtube |
このBPMは、BPM計測サービスで手動で測ってみたのだが、ちょっと感覚と違う。Blurry と Keep It Together は同じくらいだと思うんだけど。
まあいいや。参考まで。
(追記 2012/4/7) Nickelback のアルバムをiTunesで購入したので、二曲追加。
(追記 2012/4/14) iTunesへのリンクを追加 (別にアフィリエイトではない)。
(追記 2012/6/16) Cody SimpsonはBPM160前後の曲が多く探しやすいけど、中学生なんだよな、こいつ...。
ネットワークインタフェイス一覧
Linuxのネットワークインタフェイス一覧を取得する話。
ifconfig コマンドの出力がパースしにくい*1ので、もう少し簡単に取得できないかと調べた。ifconfig のソースコード*2読んだだけだが、役に立つ人もいるかもしれないので書いておく。
先にオチを言っておくと、パースするほうが簡単だった…。
ifconfig は、/proc/net/dev から読み取ったインタフェイス一覧*3と、ioctl(2) の SIOCGIFCONF リクエストで取り出した情報*4をマージしている。前者には IP エイリアス情報が含まれず、後者にはアクティブなインタフェイスしか含まれないからである。
話を元に戻すと、簡単に一覧を取得するには /proc/net/dev のほうはともかく、ioctl が厄介。ifconf 構造体を ioctl 関数に渡せばよいのだが、こいつが ifreq 構造体へのポインタを持っている。
struct ifconf { int ifc_len; /* Size of buffer. */ union { __caddr_t ifcu_buf; struct ifreq *ifcu_req; } ifc_ifcu; };
知らない人のために書いておくと、ioctl 関数は、(領域を割り当てた)構造体のポインタを渡すと、その構造体にリクエストしたデバイス情報を埋め込んで返してくれる。
Perl の ioctl 関数もまったく同じ。つまり、Perlでバッファ確保とそのポインタを渡す必要がある…。
*2:[https://developer.berlios.de/projects/net-tools/:title=net-tools]
*3:lib/interface.c の if_readlist_proc関数を参照
*4:lib/interface.c の if_readconf関数を参照
Windows7 で VMwareの NAT 接続ができないとき
Windows7 に VMWare Server を乗っけてNAT接続するのに、少し苦労したのでメモ。
といっても、他のブログにたくさんやり方が載っているので、詳細は割愛。結局こういうことに違いない。↓
(1) ICS設定は、インターネットに出ていく「ローカルエリアネットワーク接続」に対し設定する。プルダウンメニューで選ぶ許可先が「VMnet8」。この設定はWindowsの管理者権限が必要。言わずもがなだが、図の192.168.0.2は環境によって異なる。
(2) Virtual Network EditorでのNAT設定について、VMnet8のサブネットは「192.168.137.0/24」、「Gateway IP address」は「192.168.137.1」でほぼ固定。
(3) ゲストOS側ネットワークの設定の要点は、(2)の設定の反映を忘れないということだけ。忘れると、ゲストOSのデフォルトゲートウェイ設定が、(2)の値とずれてしまい通信できなくなる。とはいっても、VMnet8 が DHCP サーバも兼ねているので、ゲストOS 側でアドレスをもらい直すだけでOK。Linuxなら、ネットワークの再起動が簡単。
# service network restart # route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 192.168.137.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0 0.0.0.0 192.168.137.1 0.0.0.0 UG 0 0 0 eth0
これで、ゲストOSからインターネットに接続できるし、ホストOSからならゲストOSへもTCP/IPで接続できる。ゲストOS側のファイアウォール設定(Linux なら iptables)に注意。
Wireshark などのパケットキャプチャツールで、ホストOSのNICとVMnet8 をそれぞれキャプチャすると、どのようなNAT変換が行われているかがよくわかる。
glibc regex.h
普段Perlを使ってたせいか、C言語で設定ファイルを読み込ませる処理を書いたとき意外と面倒だったので、その使い方をメモ。設定ファイルごときにPCREは大袈裟と思って、glibc の regex にしたせいか。いずれにせよ、ウェブ上の情報が少ない…。
まずは、読み込む部分。
static int _read_config_file(const char * conf_filepath) { assert(conf_filepath != NULL); int rc; FILE * in_file = NULL; char line_buff[LINE_BUFF_SIZE]; regex_t re_kvline; regcomp(&re_kvline, REGEXP_KVLINE, REG_EXTENDED | REG_NEWLINE); in_file = fopen(conf_filepath, "r"); if (in_file == NULL) { perror("fopen"); rc = -1; goto FINALLY; } while(fgets(line_buff, LINE_BUFF_SIZE, in_file) != NULL) { regmatch_t matched[NB_MATCHES]; if (line_buff[0] == '#' || line_buff[0] == '\n') { // skip comments continue; } if (regexec(&re_kvline, line_buff, NB_MATCHES, matched, 0) == REG_NOMATCH) { fprintf(stderr, "not match:%s\n", line_buff); continue; } line_buff[matched[1].rm_eo] = '\0'; line_buff[matched[2].rm_eo] = '\0'; _set_config(line_buff + matched[1].rm_so, line_buff + matched[2].rm_so); } rc = 0; FINALLY: if (in_file != NULL) { rc = fclose(in_file); if (rc != 0) { perror("fclose"); } } regfree(&re_kvline); return(rc); }
regcomp() にエラーチェックがないのは、単体試験で正しい正規表現になっているはずっていう横着。括弧でマッチした部分を抽出するために、REG_EXTENDEDフラグはたぶん必須。_set_config() の中身は適当に。
さて、REGEXP_KVLINEの値をいろいろ変えてみる。
#define REGEXP_KVLINE "^([[:alpha:]])=(.*)$"
とりあえずなら、これでもよい。
でも、イコール(=)の周りに空白を許容したいとか、キーに数字を入れたいとか、でもキーの先頭が数字はやだよねとか色気を出し始める。
#define REGEXP_KVLINE "^([[:alpha:]][[:alnum:]]*)[[:blank:]]*=[[:blank:]]*(.*)$"
これで↓とか、ピコピコ読み込める。
datadir = /var/tmp
さらに、キーにも空白入れたいなとか考える。
#define REGEXP_KVLINE "^([[:alpha:]]([[:alnum:] ]*[[:alnum:]])?)[[:blank:]]*=[[:blank:]]*(.*)$"
読み込む括弧位置が変わってくるので、プログラムの以下の部分も修正。Perl の (?: …) が使いたい。
line_buff[matched[1].rm_eo] = '\0'; line_buff[matched[3].rm_eo] = '\0'; _set_config(line_buff + matched[1].rm_so, line_buff + matched[3].rm_so);
これで
special key 01 = (^o^)
としても読み込めてしまうようになる。