2013-10-01 :-(
_ 午後
1300 受け入れなど
_ [メモリ][malloc][メモリプール][メモリ管理]malloc/free などが在るのにメモリ管理機能を自作する動機はなんなのか
つまりこういうことだってばよ?
Effective C++
(pp. 267-269)
50項「どういうときにnewとdeleteの定義を自分で書くとよいか理解しよう」
- 使用上の注意を見つけるため
- 動的なメモリ管理に関して統計データを集めるため
- メモリの確保と解放のスピードを上げるため
- デフォルトのメモリ管理が使う無駄なメモリを減らすため
- デフォルトのメモリ確保で行われる中途半端なアライメントを補う
- 関係あるオブジェクトをまとめ置きする
- 特別な動作をさせる
あわせて読みたい?
- C言語におけるメモリプールの実現方法 - S.T.K Wiki
- 2001年12月号 特集 第1章
- カスタムメモリマネージャと高速なメモリアロケータについて
- アラインメントの大きなメモリ領域を用いて, 高速かつメモリ効率の良い多数の集合を実現する方法
アプリを高速化したいなら,できるだけ malloc/free を呼び出す頻度を減らすこと. そのためには1回の malloc で確保した大きな領域 (メモリプール) に多数のオブジェクトを詰め込む必要がある (これは省メモリにもなる) が, どのオブジェクトを同じ領域に入れるべきかはオブジェクトの寿命 (extent),サイズ, アラインメントなどを考慮して決める必要がある. 特に,寿命を知っているのはアプリケーションだけだ. 目的に合ったメモリプールならば,malloc/free をそのまま使用する場合に比べて数十倍以上速くなることもある.
4894714515
2013-10-04 :-(
_ 午後
1300 自習
_ [Knuth][hash][クヌース][ハッシュ][namazu]Knuth 先生の hash
はるか昔に namazu のコードを読んでいたときに knuth 先生の hash というものを見かけた。( 私が読んだときは namazu 1.x だったと思う。1.x は Perl で実装されているが、namazu は 2.x で全面的に書きなおされており、2.x では C で実装されなおされている。1.x はこちらにある Index of /stable )
namazu
1.x のコード
namazu-1.3.0.11/src/mknmz.pl
# Knuth先生の ``hash'' (UNIX MAGAZINE 1998 5月号) 用の乱数表 # 0-65535までの数を使った要素数256の乱数表を 4つ使います。 sub init_seed () { ( [ 3852, 26205, 51350, 2876, 47217, 47194, 55549, 43312, 63689, 40984, 62703, 10954, 13108, 60460, 41680, 32277, 51887, 28590, 17502, 57168, 37798, 27466, 13800, 12816, 53745, 8833, 55089, 15481, 18993, 15262, 8490, 22846, :
# Dr. Knuth's ``hash'' from (UNIX MAGAZINE May 1998) sub hash ($) { my ($word) = @_; my ($i, $hash); $hash = 0; $word =~ tr/\xa1-\xfea-z0-9//cd; # 記号を捨てる for ($i = 0; $word ne ""; $i++) { $hash ^= $Seed[$i % 4][ord($word)]; $word = substr($word, 1); # $word =~ s/^.//; is slower } $hash & 65535; }
2.x のコード
namazu-2.0.21/nmz/seed.c
/* * * Reference: Dr. Knuth's ``hash'' (from UNIX MAGAZINE May, 1998) * */ int nmz_seed[4][256] = { { 3852, 26205, 51350, 2876, 47217, 47194, 55549, 43312, 63689, 40984, 62703, 10954, 13108, 60460, 41680, 32277, 51887, 28590, 17502, 57168, 37798, 27466, 13800, 12816, :
namazu-2.0.21/nmz/search.c
/* * Calculate the hash value of the string str. */ static int hash(const char *str) { int hash = 0, i, j; uchar *ustr = (uchar *)str; /* for 8 bit chars handling */ for (i = j = 0; *ustr; i++) { if (!issymbol(*ustr)) { /* except symbol */ hash ^= nmz_seed[j & 0x3][*ustr]; j++; } ustr++; } return (hash & 65535); }
knuth 先生の hash
肝心の UNIX MAGAZINE 1998 年 5 月号 p.108 のコード。
#include <stdlib.h> #define TBLSIZ 1024 /* hash bucket のサイズ。 2 の冪乗でなければならない */ #define NSEED 4 /* 乱数表の種類。2 の冪乗でなければならない */ unsigned int seed[NSEED][256]; void init_seed() { int i, j; srand(time(NULL)); for ( i = 0; i < NSEED; ++i ) { for ( j = 0; j < 256; ++j ) { seed[i][j] = rand(); } } } int hash(unsigned char *key, int keylen) { int i, j, hash; hash = 0; i = j = 0; while ( i < keylen ) { hash ^= seed[j++][key[i++]]; j &= NSEED - 1; } return (hash & (TBLSIZ - 1)); }
このハッシュ関数は『The Art of Computer Programlning VoL3』の旧版には載っておらず、新版で新しく書き足したのだそうです。(p.107)
これかしら。
4756146147
2013-10-06 :-)
_ 買い物
イトーヨーカドー
仕事場の電子レンジ待機列が長いので電子レンジは諦めて保温を頑張ってみることにした。ランチジャーとやらは使ったことがないんだけど試しに使ってみる。売り場には汁物容器がついているものもあったが自分には汁物の需要がないのでこれにした。
B005FOF7AY
2013-10-08 :-(
_ 午後
1300 自習
_ [NetBSD][翻訳]hubertf's NetBSD blog - Embedded NetBSD on iMX233/OLinuXino iMX233/OLinuXino での組み込み NetBSD
Petri Laskso has worked to get NetBSD going on the iMX233/OLinuXino ARM board, specifically the MAXI and MICRO boards. The port is stable enough to run multiuser and build software from pkgsrc. Supported hardware include SD card, GPIO, USB host, and a boot loader.
Petri Laskso は iMX233/OLinuXino ARM 基板、とくに MAXI and MICRO 基板上で NetBSD の作業をしています。移植は十分安定して、マルチユーザーで実行でき、pkgsrc からソフトウェアを構築できます。サポートされるハードウェアには、SD カード、GPIO、USB ホスト、およびブートローダーを含みます。
The hardware is ways below 50 EUR, so this is a good start to get a nice and easy machine. More information on how to get things running are available in Petri's blog.
ハードウェアは、50 ユーロ以下で買えるので、ナイスで手軽な機械で作業を開始できます。諸々を実行する方法についての詳細は ペトリのブログ でご覧いただけます。
Last, the impatient souls that can't wait to start playing can find the code in NetBSD-current already, thanks to Matt Thomas.
最後に、忙しい人のための NetBSD-current のコードはこちら 。マット・トーマスに感謝します。
2013-10-10 :-(
_ 午後
1300 コード読んだり
_ 買い物
高橋コウタさん( リッジレーサーをプレイしているひとならば知らないひとは居ない )の曲。同じ曲は昔から高橋コウタさんのサイトからダウンロード可能だったんだが( よく聴いてます。ええ ) 今回は音質を ちゃんとした とのこと
2013-10-12 :-)
_ 午前
0930 起床 && 部屋掃除
_ ルーター
たまによく自宅ネットワークが遅くなることがあり、ルーターのログを見るとどうもソケットディスクリプタが溢れてるらしいので、ルーターの電源を抜き差しして対処していて、それはそれで電源をポチポチするので機械への負荷が高そうだよなあと思っていたところ、昨日ついにルーターの電源を挿しても反応しなくなったので寿命が来たかと焦っていたが、10 分ほどしたら復旧した。とくに何もしてないんだが。ともあれそろそろ替えどきだろうか。しかしホームルーターで後継機が無いんだよなあ。「なんとなくヤマハ」というだけでヤマハに拘る理由もないんだけど。
もう 10 年近く使ってるのか。
2013-10-13 :-)
_ [龍勢祭り][あの花][超平和バスターズ]龍勢祭り 超平和バスターズ
miwarin, yo_1
去年[ 20121014#p04 ]に引き続き行ってきた。
レッドアロー号クラシックだと
去年と同じように移動して去年と同じような位置に陣取った。
今年の超平和バスターズは茅野愛衣さん(めんま役)、近藤孝行さん(ぽっぽ役)がゲスト。口上は近藤孝行さんによるもの。
有料席のすぐ後ろで誰も目の前におらず最高の場所だと思っていたら、超平和バスターズが始まったころに目の前の有料席のひとが立ち上がったうえにちょうど発射台が隠されてしまった。おのれ...来年は有料席に行くかのう...
肝心の龍勢打ち上げは落下傘が開かず。残念。
口上
龍勢打ち上げ。落下傘は開かず
なおちゃんと開くと以下のようになる。
2013-10-14 :-)
_ [C][デザインパターン][Commandパターン]C で Command パターン
安直な queue とか書いてみると実現出来るかしら。queue というかリングバッファになってるけど。
/* Command パターン的な */ #include <stdio.h> #include <stdarg.h> #define QUEUE_MAX 4 typedef void (*command)(int argc, ...); command queue[QUEUE_MAX]; int start_index; int end_index; void enqueue(command cmd) { if(queue[end_index] != NULL) { printf("queue is full\n"); return; } queue[end_index] = cmd; end_index++; if(end_index >= QUEUE_MAX) { end_index = 0; } } command dequeue(void) { command cmd; cmd = queue[start_index]; queue[start_index] = NULL; start_index++; if(start_index >= QUEUE_MAX) { start_index = 0; } return cmd; } void initialize(void) { int i; for(i = 0; i < QUEUE_MAX; i++) { queue[i] = NULL; } start_index = 0; end_index = 0; } void command1(int argc, ...) { int i; va_list args; va_start(args, argc); printf("command1\n"); for(i = 0; i < argc; i++) { int n; n = va_arg(args, int); printf("%d\n", n); } va_end(args); } void command2(int argc, ...) { int i; va_list args; va_start(args, argc); printf("command2\n"); for(i = 0; i < argc; i++) { int n; n = va_arg(args, int); printf("%d\n", n); } va_end(args); } void test_queue(void) { int i; printf("test_queue start\n"); initialize(); enqueue(command1); enqueue(command2); for(i = 0; i < 16; i++) { command v = dequeue(); if(v != NULL) { v(1, i); } } printf("test_queue end\n"); } int main(int ac, char** av) { test_queue(); return 0; }
test_queue start command1 0 command2 1 test_queue end
_ [C][デザインパターン][Observerパターン]C で Observer パターン
Command パターンと同じようなもんで。ううん
/* Observer パターン的な */ #include <stdio.h> #include <stdarg.h> #define OBSERVER_MAX 4 typedef void (*observer)(int argc, ...); observer observers[OBSERVER_MAX]; int end_index; void register_observer(observer o) { if(end_index >= OBSERVER_MAX) { printf("queue is full\n"); return; } observers[end_index] = o; end_index++; } void notify_observer(void) { int i; for(i = 0; i < end_index; i++) { observer o = observers[i]; if(o != NULL) { o(1, i); } } } void initialize(void) { int i; for(i = 0; i < OBSERVER_MAX; i++) { observers[i] = NULL; } end_index = 0; } void update1(int argc, ...) { int i; va_list args; va_start(args, argc); printf("update1\n"); for(i = 0; i < argc; i++) { int n; n = va_arg(args, int); printf("%d\n", n); } va_end(args); } void update2(int argc, ...) { int i; va_list args; va_start(args, argc); printf("update2\n"); for(i = 0; i < argc; i++) { int n; n = va_arg(args, int); printf("%d\n", n); } va_end(args); } void test_observer(void) { printf("test_observer start\n"); initialize(); register_observer(update1); register_observer(update2); notify_observer(); printf("test_observer end\n"); } int main(int ac, char** av) { test_observer(); return 0; }
test_observer start update1 0 update2 1 test_observer end
2013-10-15 :-)
_ [連結リスト][デザインパターン][Commandパターン][C]連結リストで Command パターン
#include <stdio.h> #include <string.h> #include <stdlib.h> #include <stdarg.h> typedef void (*command_t)(int argc, ...); struct node_t { struct node_t* next; command_t cmd; } root; /* 先頭に追加 */ void put(command_t cmd) { struct node_t* _p; struct node_t* _q; for(_p = &root; _p->next != NULL; _p = _p->next) ; _q = (struct node_t*)malloc(sizeof(struct node_t)); if(_q == NULL) { perror("put"); exit(0); } _q->cmd = cmd; _q->next = _p->next; _p->next = _q; } /* 先頭を削除 */ void get(void) { struct node_t* _p; _p = root.next; if(_p == NULL) { printf("root is empty\n"); return; } root.next = _p->next; free(_p); } void command1(int argc, ...) { int i; va_list args; va_start(args, argc); printf("command1\n"); for(i = 0; i < argc; i++) { int n; n = va_arg(args, int); printf("%d\n", n); } va_end(args); } void command2(int argc, ...) { int c; int n; va_list args; printf("command2\n"); va_start(args, argc); c = va_arg(args, int); n = va_arg(args, int); printf("c:%d n:%d\n", c, n); va_end(args); } void run(void) { int n; struct node_t* _p; n = 0; for(_p = &root; _p->next != NULL; _p = _p->next) { if(_p->next != NULL) { _p->next->cmd(2, n, n * 10); n++; } } } void test_command(void) { printf("test_command start\n"); put(command1); put(command2); run(); printf("test_command end\n"); } int main(int ac, char** av) { test_command(); return 0; }
test_command start command1 0 0 command2 c:1 n:10 test_command end
_ [連結リスト][デザインパターン][Commandパターン][C][優先度]連結リストで優先度あり Command パターン
たんに連結リストの配列にしただけ。0 が優先度高くて、20 が優先度低いです。UNIX 系統の優先度と同じようなもんで。Command というかタスク管理というか。イメージとしては↓のような感じ。実行状態なんてないですが。
(via オリジナルOS「MicrOS」の設計と実装(4) ―― リアルタイム性の確保 )
#include <stdio.h> #include <string.h> #include <stdlib.h> #include <stdarg.h> #define PRI_MAX 20 typedef void (*command_t)(int argc, ...); struct node_t { struct node_t* next; command_t cmd; } root[PRI_MAX]; /* 先頭に追加 */ void put(int pri, command_t cmd) { int i; struct node_t* _p; struct node_t* _q; for(_p = &root[pri]; _p->next != NULL; _p = _p->next) ; _q = (struct node_t*)malloc(sizeof(struct node_t)); if(_q == NULL) { perror("put"); exit(0); } _q->cmd = cmd; _q->next = _p->next; _p->next = _q; } void command0(int argc, ...) { int pri; int n; va_list args; va_start(args, argc); pri = va_arg(args, int); n = va_arg(args, int); printf("command0 pri:%d n:%d\n", pri, n); va_end(args); } void run(void) { int pri; int n; struct node_t* _p; n = 0; for(pri = 0; pri < PRI_MAX; pri++) { for(_p = &root[pri]; _p->next != NULL; _p = _p->next) { if(_p->next != NULL) { _p->next->cmd(2, pri, n); n++; } } } } void test_command(void) { printf("test_command start\n"); put(19, command0); put(19, command0); put(0, command0); put(0, command0); put(1, command0); put(2, command0); run(); printf("test_command end\n"); } int main(int ac, char** av) { test_command(); return 0; }
test_command start command0 pri:0 n:0 command0 pri:0 n:1 command0 pri:1 n:2 command0 pri:2 n:3 command0 pri:19 n:4 command0 pri:19 n:5 test_command end
2013-10-16 :-(
_ 午前
0530 起床 && 東急の各路線は便数を減らしての運行なので普通に出勤する
0700 仕事場
0800 東急線全滅のお知らせ || 早めに移動しておいてよかったのか何なのか
0830 出勤 && コード読んだり
_ 午後
1300 コード読んだり
2013-10-19 :-)
_ [NetBSD][翻訳]hubertf's NetBSD blog - Raspberry Pi USB HC driver change - DMA support added Raspberry Pi USB HC ドライバ変更 - DMA 対応を追加
Nick Hudson reports that he has ``recently switched the Raspberry Pi kernel to dwctwo(4) a new USB drvier based on the Synopsys code. It's a more complete driver than the previous dotg(4) and has DMA support''. Jun Ebihara confirms that the driver works fine with a dmesg extract, and also lets us know that the driver will be in his next RPI image.
Nick Hudson は「最近 Raspberry Pi カーネルを Synopsys 社のコードを基にした新しい USB ドライバ dwctwo(4) に切り替えた」ということを 報告した。これは、以前の dotg(4) よりも完全なドライバであり DMA 対応もしている。蛯原純は そのドライバが正常に動作することを 確認した 。 抽出した dmesg も付いている。我々はドライバが彼の次の RPI イメージになることも知った。
This change does not only affect the Raspberry Pi, but also other machines that have a Synopsis USB like the OpenBlocks 600, as KIYOHARA Takashi lets us know.
この変更は Raspberry Pi だけでなく、OpenBlocks 600 のように Synopsis USB 備えたマシンにも影響を与えることを清原高志が 教えてくれた。
2013-10-20 :-)
_ 午後
1500 読書
_ [NetBSD][翻訳][Raspberry Pi]hubertf's NetBSD blog - Quick bootstrap of NetBSD on Raspberry Pi and Cobalt machines Raspberry Pi や Cobalt マシンで NetBSD を手軽に始める方法
NetBSD is a fine operating system, but the installation sometimes leaves a lot of rope to hang yourself on non-PC platforms. To make things easier to get a recent NetBSD version on the Cobat Raq and Qube machines, Izumi Tsutsui has released a Restore CD/USB image based on NetBSD 5.2.1 that allows for a quick bootstrap. There is also a Restore CD HOWTO available with more information.
NetBSD は素晴らしいオペレーティングシステムだが、非 PC プラットフォームにおいてはインストール作業はときどき多くの人がつまづく。
Cobat RAQ との Qube マシンでは最近の NetBSD バージョンだとより簡単に出来るようにするために、筒井泉が NetBSD 5.2.1 を基にしたリストア CD/USBイメージをリリースした。これですぐに始められる。より多くの情報が Restore CD HOWTO にもある。
If you're into somewhat more recent machines, the Raspberry Pi is for you. For easy bootstrapping of NetBSD, Jun Ebihara offers a SD card image with -current NetBSD and pkgsrc from October 2013 preinstalled. This also includes support for hardware floating point and DMA. Instructions are available on line in Japanese language. The important commands still are readable, so have a look!
もう少し最近のマシンに興味があるならば Raspberry Pi がよかろう。NetBSD を簡単に起動するために、蛯原純は 2013年10月から current NetBSD および pkgsrc がプリインストールされた SD カードのイメージを提供している。
これはハードウェア浮動小数点および DMA 対応も含まれている。日本語だが 手順が公開されている。より重要なコマンドが読めるので、ぜひ見てくだしあ。
_ [艦これ]艦これ
2-2 で蒼龍さんゲット。正規空母がようやく 2 人目。
艦隊これくしょん ~艦これ~ 攻略&2chまとめwiki - 遠征
19 北号作戦 航戦(Lv22,22),軽巡(Lv21),駆逐(Lv22,20,20)Lv20以上で全て改なら行ける模様
ということらしいので条件に当てはまる娘がこんだけ。イケそうだ。
- 航戦(Lv22,22)
- 伊勢改 32
- 山城改 32
- 扶桑改 27
- 軽巡(Lv21)
- 夕張改 42
- 由良改 29
- 那珂改 20
- 駆逐(Lv22,20,20)
- 五月雨改 31
- 初雪改 22
- 初霜改 22
2013-10-21 :-(
2013-10-22 :-)
_ [スパゲティ][塩]スパゲティを茹でるときに塩を入れるか入れないか問題
「スパゲティ 塩」でググれば大量にヒットする( このあたりは 自転車置場の議論 - bkブログ に似ているなあ )わけですが、今日初めて塩を入れて茹でてみた。結論: しょっぱい
私のスペック:
- 「365日スパゲティが食べたい」を買って[ 20040717#p05 ]から 1 度も塩を入れて茹でたことがない
- 外食でスパゲティを食べたのは 1, 2 度( ビュッフェで出たことはあるがそれは含めない )
近年チラホラとスパゲティを茹でるときに塩を入れるだろJK などといった話題があったものの塩を入れて茹でたことがなかったので、思い出したように実践してみた。
作ったのはカルボナーラである。
1 リットルくらいの水に塩 10 グラム程度( 5 グラムくらいかもしれん。測ってない) を入れて茹でてみた。
それで食べたところ、たしかに 塩の味がする
麺の硬さなどはうーん。変化あったのかこれ。
スパゲティの麺を作るときに塩を入れる( 落合務の本にはそう書いてある )わけだから、さらに茹でるときにも塩を入れるかどうかは好みでいいでしょうねえ、という感想しかモテない。
4579205391
4579207653
4838716281
2013-10-25 :-(
_ 午後
1300 コード書いたり
_ [ランチジャー][弁当]ランチジャーを使い始めてから 2 週間がたちました
先日買ったアレ[ 20131006#p04 ]
おかげでお昼が捗るようになった。朝は手間が 1 つ増えたが、それでもお昼に温かい米を食べることが出来るので充分である。ナニより電子レンジ待機列に並ぶ手間が省けるようになったのが大きい。
before
- 前日 晩飯のおかず + 米( 2 合 )を余分に作る
- 前日 おかず + 米を弁当に入れて冷蔵庫へ入れる
- 当日 朝 飯( パン )食べる
- 当日 朝 弁当フタを閉めて持参
- 当日 昼 電子レンジ待機列に並ぶ。チン
after
- 前日 晩飯のおかずを余分に作る
- 前日 おかずを弁当に入れて冷蔵庫へ入れる
- 当日 朝 05:30 米 1 合(弁当 + 朝食)炊けるようにタイマー
- 当日 朝 飯( 米 )食べる
- 当日 朝 米を詰める
- 当日 朝 弁当フタを閉めて持参
- 当日 昼 フタを開けて食べる
_ [NetBSD]半年 ROM る NetBSD
コードを眺めるだけ。関数などの定義がすぐに追跡できるので、他のエディタなど用にタグを生成するよりは楽ちん。
インストール
eclipse を取得 Eclipse Downloads
eclipse.exe を起動
メニュー - Help - Install New Software...
Work with: --All Available Sites--
Programming Languages - C/C++ Development Tools
Next とか
ソース読み込む
メニュー - File - New - C Project
Project name: テキトーに
Location: テキトーに
Project type: Empty Project
Project Explorer - プロジェクト名で右クリック - Import
General - File System
From directory: NetBSD の src があるフォルダを選択
Advanced - Create links in workspace これチェックしておかないとソースファイルがワークスペースにコピーされる
Create link locations relative to: チェック外しておくほうが見やすい
フィルタ無効化
メニュー - Window - Preferences
C/C++ - Code Analysis - すべてのチェックを外す ( どうせビルドとかしない )
例
みんな大好き /bin/ls
_ [NetBSD][翻訳]hubertf's NetBSD blog - Mercedes Benz powered by NetBSD? メルセデス・ベンツは NetBSD で動いています?
There is a posting by Fefe which links to Open Source licenses used by Mercedes Benz.
Fefe による投稿 に メルセデス・ベンツでのオープンソースライセンス へのリンクがある。
This includes a number of BSD variants - original 4-clause as well as the 2- and 3-clause versions as well as company specific BSD licenses by car-supplier Continental, Acme Labs and Google. No explicit mention of NetBSD's license, but a bunch of NetBSD developers' names and mail addresses can be found. There is also an overview that the BSD license is used in about all models from A-Class over S-Class to SLK, and which also indicates that the new (2013+) S-Class includes much more BSD licensed software than all the other models. Which is not much of a surprise, as it's the most recent and also most technically advanced model (as far as I can tell).
これには BSD 系のいくつかが含まれている。自動車部品製造業や Acme 研究所や Google による企業固有の BSD ライセンスもそうだし、2-clause や 3-clause はもちろん、オリジナル 4-clause もそうだ。NetBSD ライセンスの明確には言及していないが、何人かの NetBSD 開発者の名前とメールアドレスを見つけることができる。
BSD ライセンスは A クラスから S クラス以上の SLK までのすべてのモデルで使用されていて、S クラス(2013 年~) は他のすべてのモデルよりも多くの BSD ライセンスソフトウェアが含まれていることも示している。これは驚くほかない。最近のものと、最先端技術のモデルのものもそうだ(私が聞いた限りでは)。
No details are included as to what software components are under the respective licenses. Anyone got details? Please share!
各ライセンスのソフトウェアコンポーネントとして何が含まれているのか詳細は無い。誰か詳細を知っているか? 拡散希望
2013-10-26 :-)
_ [魔法少女まどか☆マギカ]劇場版 魔法少女まどか☆マギカ 新編 叛逆の物語
@チネチッタ川崎
見てきた。まず OP だけで涙が出た。しかし衝撃が大きすぎて頭が整理できてないのでまた後日なにか書く。かもしれない。見どころはたくさんありすぎる。OP もそうだし、ナイトメアとの戦闘もそうだし、戦隊物風味もそうだし、暁美ほむら vs 巴マミ戦もそうだし( ガンアクションがホントすげえ。トライガンを思い出す )、その後の展開もハッピーエンドで終わると思わせておいて「えっ .... えっ? どうすんのこれ....」という裏切られ感がホント酷い。
前編後編の劇場版を見たときに「この OP こそ暁美ほむらが救いたかった世界ではないか」と書いた [ 20121029#p05 ] んだが、それは暁美ほむらが望んだ世界というだけでなく、私が見たかった世界だったのだと気づいた。5 人の魔法少女たちが殺しあうこともなく、魔女との戦闘や、魔法少女というシステムに苦しむこともない世界。5 人の魔法少女たちが和気あいあいと楽しく幸せに暮らしている世界を見たかったのは暁美ほむらだけではなく私もそうだったのだ( 暁美ほむらが望んでいた、といったことはパンフレットでも語られているのでそれは間違いない )
暁美ほむらは鹿目まどかを救うために数えきれないほど何度も時間を巻き戻し、ワルプルギスの夜と戦闘し、やはり何度も負け、そしてまた過去に戻り、そのような辛い思いをした末に、遂に鹿目まどかは神となってしまい、鹿目まどかを救う、または魔女化を防ぐということは達成されたかもしれない。しかし暁美ほむらが持っていた感情は、俗にいえば、鹿目まどかが欲しい、鹿目まどかと一緒に居たい、という欲望である。欲望を持ちながらもそれが叶えられず絶望するとき、魔法少女は魔女と化す。
私は暁美ほむらについて、意思を貫く鉄の女、という印象を持っていたんだけど、新編を見て、彼女も普通の女の子であり、自分の欲望に基づいて行動するようになったのだなと、むしろ人間臭さを感じた。
最後に登場した「魔女」が悲痛すぎて辛い。劇中に何度か断頭台のシーンが登場したし、魔女の手が繋がれていたから、たぶんあの魔女が向かう先は断頭台なのだろうけど、背中から生えた触手(?)が前に進みたくない、断頭台に向かいたくない、という意思を持ったように蠢いていて、その魔女の元だった魔法少女の心境を表しているようで、魔女の進軍を見ているのが辛かった。美樹さやかの「ああ見えて、一番辛いのは本人なんだからさ」という一言はやはり美樹さやからしい気遣いか。
2013-10-27 :-)
_ [NetBSD][翻訳][g4u]hubertf's NetBSD blog - G4U Opinion Time: kernel with embedded RAMdisk vs. miniroot? G4U について考えよう: 組み込み RAMディスクのカーネルと miniroot どっちがいい?
``I've found little time to hack on g4u in the recent past. Yet, I've managed to setup my development and test environment for g4u (crosscompiling NetBSD from Mac OS X, getting recent Qemu to compile), and also got g4u built from recent NetBSD-current sources. As such, take this as small sign of life.
最近 g4u ハックする時間をとった。まだ g4u 開発環境とテスト環境のセットアップを管理してるんだけど( 最近の Qemu をコンパイルするための Mac OS X から NetBSD へのクロスコンパイルだ )、最近の NetBSD-current ソースから g4u ビルドもした。というわけで、活動してるひと居ないんだよねー。ちぇ
Now, while I don't have any plans for large changes, I'd like to bring an update with latest drivers and bugfixes from NetBSD.
現在 大きな変更をすることは考えてなくて、NetBSD から最新のドライバとバグ修正についてアップデートをしようと思う。
There's one change that I'm pondering, though: g4u originally came as one kernel-file that had an embedded RAM-disk. This was changed in the last release to reflect NetBSD's ability to load a RAM-disk from a separate file. This change broke the ability to netboot g4u from a single file, and required some more effort. There were no real wins for g4u as such.
しかし 1 箇所変更点について思案していることがある。
もともと g4u は組み込み RAM ディスクを備えた 1 つのカーネルファイルとしてもたらされた。これは、NetBSD が別のファイルから RAM ディスクをロードするように反映され、前回のリリースで変更された。この変更は単一ファイルからの netboot g4u 出来なくなったし、いくつかのより多くの努力を必要とした。我々は、g4u として何の成果も得られませんでしたああ!
So, opinion time: keep the RAM-disk as separate file, or move it back into the kernel?
シンキングタイム。別ファイルとしての RAM ディスクのままにするか、カーネルに戻すか?
Looking forward for your opinions!''
さあ、みんなで考えよう!
_ [艦これ]艦これ
2-4 クリアした。2 回目の挑戦。
こんな装備。
全員キラキラにしてから出撃。
北側ルートだった。水色の点は「気のせいだった」でスルーされた。こんな点もあるのか。
ボスは 4 戦目だった。道中は戦艦をオーバーキルするくらい砲撃戦が強く昼間を 1 巡しただけ(戦艦 4 人が 1 回ずつ砲撃して終わり )で戦闘終了したんだが、3 戦目から弾薬が尽き始めたか、与えるダメージが小さくなってきた。3 戦目で千歳さん小破。小破なのでそのままボスへ進撃。
2-4 ボス。久しぶりに夜戦に突入した。夜戦で榛名さん大破したものの勝利。
ボスで榛名さん N 人目
2-4 道中で大井っち 2 人目
その後は任務消化など。最上さんを改造
3-1 出撃。クリア。比叡さん N 人目
2013-10-28 :-(
_ 午後
1300 コード書いたり
_ ボンミッソはもう無い
昔 名古屋方面へ出張したときに買ってたんだけど [ 20011126#p03 ][ 20070323#p06 ] もはやどこにも売っていないらしい。
2013-10-29 :-(
_ [艦これ]艦これ
大井さん改造
電ちゃん改造
3-2 に挑戦してみる。
ダメでした。道中で渦潮に巻き込まれたので戦闘せずに済んだのはよかったけど、ボス前ですらこの有り様。陣形は単横陣。やはり火力をカンストさせるくらいに改修しないとダメか。
腹いせに 4-1 行ったら普通にクリアできた。道中の潜水艦はろくにダメージ与えられなかったけど戦術的勝利なので問題なし。
_ [ruby]ASCII で書かれたファイルをバイナリへ変換して書き出す
# coding: utf-8 def conv(in_file_path, out_file_path) text = File.open(in_file_path).read() sp = text.split d = sp.map{|h| h.hex} File.open(out_file_path, "wb").write(d.pack("C*")) end def main(argv) in_file_path = argv[0] out_file_path = argv[1] conv(in_file_path, out_file_path) end main(ARGV)
こういうファイル
01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f 21 22 23 24 25 26 27 28 29 2a 2b 2c 2d 2e 2f
ruby は楽なんだけどな
_ [C]ASCII で書かれたファイルをバイナリへ変換して書き出す(C)
面倒くさすぎる
#include <stdio.h> #include <memory.h> #include <stdlib.h> #include <string.h> #include <sys/types.h> #include <sys/stat.h> enum ST_ANALYZE { ST_ANALYZE_HIGH, ST_ANALYZE_LOW, ST_ANALYZE_DELIM, }; char hex(char c) { char h = 0; if('0' <= c && c <= '9') { h = c - '0'; } else if('a' <= c && c <= 'f') { h = (c - 'a') + 10; } else if('A' <= c && c <= 'F') { h = (c - 'A') + 10; } return h; } void conv(char* in_file_path, char* out_file_path) { struct stat st; int result; int in_file_size; char* in_file_buf = NULL; char* out_file_buf = NULL; FILE* in_fp = NULL; FILE* out_fp = NULL; int read_bytes; int write_bytes; char hi; char lo; int i; int in_pos; int out_pos; int analy_st; result = stat(in_file_path, &st); if(result != 0) { perror("stat"); goto ERROR; } in_file_size = st.st_size; in_file_buf = (char*)malloc(in_file_size); if(in_file_buf == NULL) { perror("malloc"); goto ERROR; } out_file_buf = (char*)malloc(in_file_size); if(out_file_buf == NULL) { perror("malloc"); goto ERROR; } in_fp = fopen(in_file_path, "rb"); if(in_fp == NULL) { perror("fopen"); goto ERROR; } read_bytes = fread(in_file_buf, 1, in_file_size, in_fp); if(read_bytes != in_file_size) { perror("fread"); goto ERROR; } analy_st = ST_ANALYZE_HIGH; for(out_pos = 0, in_pos = 0; in_pos < in_file_size; in_pos++) { char c = in_file_buf[in_pos]; switch(analy_st) { case ST_ANALYZE_HIGH: hi = hex(c); analy_st = ST_ANALYZE_LOW; break; case ST_ANALYZE_LOW: lo = hex(c); out_file_buf[out_pos] = (hi << 4) + lo; out_pos++; analy_st = ST_ANALYZE_DELIM; break; case ST_ANALYZE_DELIM: if(c == ' ' || c == '\n') { analy_st = ST_ANALYZE_HIGH; } break; default: break; } } out_fp = fopen(out_file_path, "wb"); if(out_fp == NULL) { perror("fopen"); goto ERROR; } write_bytes = fwrite(out_file_buf, 1, out_pos, out_fp); if(write_bytes != out_pos) { perror("fread"); goto ERROR; } ERROR: if(in_file_buf != NULL) { free(in_file_buf); } if(out_file_buf != NULL) { free(out_file_buf); } if(in_fp != NULL) { fclose(in_fp); } if(out_fp != NULL) { fclose(out_fp); } } int main(int ac, char** av) { char* in_file_path; char* out_file_path; in_file_path = "asc2bin.txt"; out_file_path = "asc2bin.bin"; conv(in_file_path, out_file_path); return 0; }
2013-10-31 :-(
_ 午後
1300 コード書いたり
_ eclipse に既存の Android プロジェクトを import する
bk
既存プロジェクトが以下にあるとする。
C:\home\rin\work\Android\Hello
File - Import - Android - Existing Android Code Into Worskspace
を選択して Root Directory に
C:\home\rin\work\Android\Hello
を選択すると怒られる。
C:\home\rin\work\Android\Hello overlaps the location of another project: 'Hello'
正しいのはこう
File - Import - General - Existing Project into Worskspace
Select root directory に以下を入力
C:\home\rin\work\Android\Hello
おk
ref. Eclipse Issue: ".. overlaps the location of another project .. " - Fledglings' nook
_ [関数ポインタ][Command][デザインパターン][Java]Java で Command パターン?
関数ポインタが無いから interface を作るのが定石らしいんだけど、マジすか。クラスが量産されるん?
動作未確認
public interface Command { String command(String msg); } public class CommandA implements Command { public String command(String msg) { return "CommandA"; } } public class CommandB implements Command { public String command(String msg) { return "CommandB"; } } public class CommandC implements Command { public String command(String msg) { return "CommandC"; } } public static void main(String[] args) { ArrayList list = new ArrayList(); list.add(new CommandA()); list.add(new CommandB()); list.add(new CommandC()); for (int i = 0; i < list.size(); i++) { System.out.println(list.get(i)); } }
ref. たぶんら - Javaで関数ポインタ
_ 買い物
ebiten
_ youichi [まどマギみないと人間じゃないまで読んだ]
_ みわ [俺は人間をやめるぞ、まどかーー! まで書いた]