ついでにゲームのwebサイトでゲームシステムの説明を見た。 webページ内のメニュー表示に、HTMLでゲームのようなエフェクトがかけてある。 確かにゲームの説明だからとwebサイトのグラフィックやエフェクトに手を 抜いていい、ということはない。それにしてもひどい、というかすごい。 凝りすぎているというか、あまりに華麗なwebサイトのグラフィックに、 ゲーム慣れしていない民間人としては驚きの連続。
C9というゲームのステージのまた美しいこと。モンスターも相当描きこまれていて、 なんというかモンスターハンターのような撃滅アクションゲームなのだけれども、 うっかりすると美しい場面にうっとりしそうな。美しいステージの移行と モンスターの出入りをスムースに行うために数GBのメモリがあっていい。
家庭向けの場合、平日昼間の時間帯で5段階の電気料金を設定し、最低と最高で最大10倍の価格差が付く。 電気料金で電力使用状況の変化を促す「国内初の実証実験」(北九州市環境局環境未来都市推進室) ...
いまいちな点として、Bigデータではメモリとディスクを大量に必要とする、という。 ジャーナリング用に3GBのディスク、レプリカセット1組に5%のディスクが必要。さらに Shardサーバの数だけ必要。
Shard運用が不安定とも。mongosとconfigが不安定。大きなデータを挿入するとロックが 長くなる、shard間にバイアスがある、二重でカウントするなど一貫性の問題がる、など。
重要な注意点として、「MongoDBはマスターデータの格納と、生データの格納に 使ってはいけない」ということ。MongoDBは集約されたデータの格納か、分析用など 特定のデータの格納に使うこと。
分析、表示ツール:
かっこいいわー。 「バッチ処理からストリーミングへ」(Fluent - The Event Collector Service, Tresure Data, Inc, @frsyuki)
最初は英語だけれど途中が日本語。
ただし、STUNはUDPポートが開いていないとだめ。UDPポートをNATルータやFirewallのグローバル側に送信すると、 SPI (Stateful Packet Inspection)テーブルに、そのUDPポート番号を許可するエントリができることが STUN(またはその他のUDPベースのP2P通信)の特徴。
そのためSTUNでローカルIPアドレスとポート番号、グローバルIPアドレスとポート番号を 観測できたとしても、一部に問題が残る。P2Pの場合はSPIによって対向同士のUDPセッションを 作成できる。しかし、NATされた端末が同じNATルータの配下にあったとき、共通のNATルータが ローカル的に折り返しをする必要があるが、この「ヘアピン折り返し」ができない場合があり、 このときはUDPポートが開いていてもP2Pセッションを作れない。また、多段NATの場合も対応できない。 日本でもヘアピン問題と多段NATはマンションインターネットによくある。
NAT対策が通用しない場合、ローカルのIPアドレスで直接通信を試みるが、マンション内LANの場合、 直接他の住戸には通じない場合も多い。これはVLANやEthernetスイッチのポート単位で分割されている ため、ひとつ上の経路から対応しなければならない。
STUNは端末同士が直接セッションを張るゲームやIP電話で採用されているという。 IP電話の場合、STUNを使っているのはインターネット上で通話可能なX-Liteなどのソフトに限定される ような気がする。そういえばX-Liteはまだ配布しているのだろうか。どこかの 評価で多数のソフトのひとつとして使われていたような。
第5回IPv6オペレーションズフォーラム(2012/5/16)で、コナミの方がゲームのNAT対応について 発表されていたが、資料が見当たらないため、聞いた範囲でメモ。
発表にはなかったが、ゲームのP2P通信については、ゲーム自体のセキュリティを担保しにくいという 問題がある。ゲーム内のアイテムやルールを破るソフトやデータが注入された場合、 P2Pでゲームソフトだけで攻撃を検知することは難しい場合がある。そのため、 セキュリティの必要がないゲームやセッションにはP2Pが利用できるが、 問題がゲーム自体で解決できない場合はサーバを経由させる。
JAIPAのWorld IPv6 Launchに向けてISPができることでは、 RadiusでAAAAフィルタを行うDNSサーバのIPアドレスをユーザに 配布するアイデアなどもあるけれど、もう1ヶ月なく3週間。 Biglobeとしては「AAAAフィルタはしない」とのこと。 v6対応サーバも少ないのだろう。
日本のWebサーバ、コンテンツ業界ではGoogleやFacebookに比べれば IPv6への対応がほとんど進んでいないため、フォールバック問題 自体が日本では存在しない。だから対策も不要。GoogleやFacebookは サービスサイトをIPv6対応するから問題になっている。
HTMLでアニメーションする方法4つ:
| HTML canvasでアニメーション (CSSよりも性能低) | JavaScriptで描画命令を記述して、描画→消去を繰り返す | |
| JavaScriptでDOM操作 | JavaScriptでsetInterval()から間隔を決めてDOMオブジェクトを移動・変化させる | |
| CSS でアニメーション (軽い) | CSS3 keyframes animation | @-webkit-keyframes animationで、0-100%の間のキーフレームを指定する |
| CSS3 transition | 移動先を指定して自動でアニメーションする |
<canvas width=200 height=200 style="width:100 height=100"<
上のように、canvasのwidth, height属性で表示用の領域サイズを指定し、styleで 描画用の論理的な解像度による広さを指定すると、倍の解像度の画像がきれいに表示される。
JavaScriptライブラリもあるとして「enchant, Arctic, easel」も名前だけ紹介していたが、 HTMLアニメーションアプリには使っていないとのこと。 processingなら使う?
CSSとJavaScriptで
アニメーションをオーサリングするツールに「Adobe Edge」
というのがある。 まだ発売前で、夏ごろまで
プレビュー版を無料で使えるらしい。ダウンロードする
ファイルは200MBぐらい。
昔、Adobeはすごい!と感動したのは、そのソフトに添付されている 使い方の説明ビデオや、新機能の説明ビデオだった。 Adobe Edgeの場合はビデオのダウンロードはない。ビデオではなく、 Adobe Edgeを起動すると右側にチュートリアルのメニューが 大きなアイコンで表示され、好きなコースを選択すると、 ガイドが右側のパネルに表示され、そのとおり実行すると、 それなりのアニメーションを作成できる。
なんというわかりやすさ。Adobeは今もすごい。Flash作成ツールも 持っているのだが、きっちりとCSS、JavaScriptに対応しくてくる ところがすばらしい。
Minimumを選択すると、4GBのディスクにインストール作業が開始された。 ngixも入らないし、自分で入れればよい。Minimumには選択肢はないので パッケージ選択をカスタマイズする必要もない。
しかし、systemctl status ... の表示はサービス動作中でも停止中でも 全体として同じような表示なので、まったく直観的でなく、10行もあり 行の折り返しも発生するので、非常にわかりにくく、要するに「使えない」。
あと、systemctl stop ... は、... に指定するサービスの名前に 該当のものがないとか、タイプミスがあっても、何も表示しないで 終了するため、何をやっているのかさっぱりわからない。statusで10行も 表示するのにstopがゼロ行というセンスが理解できない。これも「使えない」。
あと、systemctl disable ..は、rm で2つのシンボリックリンクを 削除するコマンドラインを表示するのだが、いったいこれは何なのか わからない。そのコマンドを実行してくれと言いたいのか、 そのコマンドが失敗したらやり直してほしいのか、わからない。 だいたい、そのコマンドを実行して成功したのかどうかも表示しない。 そのため「使えない」。
あと、systemctl list-unit-filesは systemctl -h しても 表示されない。なぜ引数を全部表示しないのかわからない。
後発で、設定ファイルを分割してきれいにしているような 気がするけれども、使いやすさは求めていないように見える。 もともと起動を高速化するためのものだったためか。
パッケージ追加の確認:
# yum -y install \ mondodb mongodb-server perl-MongoDB pymongo \ httpd mod_ssl openssh-clients nginx \ perl less perl-Pod-Perldoc \ perl-Digest-HMAC perl-JSON \ mod_perl perl-GD-Barcode perl-Devel-Nytprof perl-Regexp-IPv6 # yum -y install \ unbound xl2tpd dhcp nsd bind bind-chroot bind-utils iperf3 dstat \ ntpdate radvd lftp wget lynx socat \ tcpdump traceroute htop iotop nkf sysstat bc
ここまでインストールしてディスクの使用量は/ が 1.04GB未満。
ただし、このでかいコネクタと太いケーブルを毎日のように 接続するのかと思うと普及してほしくない気がする。 家庭用電源の交流100-200V充電でも、 この大きさのコネクタで、というのもやはりどうかなと。 使う人のことは考えていないようにも思える。
しかし、URLは//から始めればよいとは知らなかった。
<script src="//www.google.com/js/gweb/analytics/autotrack.js"></script>
$ curl install.meteor.com | /bin/sh
クラスの行数に比べて修正する人数が多すぎる「王様モジュール」の 割り出し(SRP)、関数の循環的複雑度(CC: 20以上で試験と修正が困難になる)、 SRPとCCを総合したソフトウェアコンポーネントの負債指数、など。
@hogehogeと
して表示している
温暖化の影響で、日本でもオレンジが作られることはないのかと思うけれど、 雨が多いのかも。
Perlでhttpdの処理時間を表示するスクリプト: (bash + perl)
#!/bin/sh
sudo tail -f /var/log/httpd/access_diary_log | perl -MEncode -ane '
my $path = $F[6]; # httpdのパスがあるフィールド
# htmlなど処理時間を確認したいパスに限定する
next unless $path =~ /\.(?:html|cgi|pl)/ || $path =~ /\?/;
$path = Encode::decode_utf8($path); # Perl Unicode形式に変換する
# URLのパス内にある漢字などバイナリデータを展開する(漢字コードはUTF8の前提)
$path =~ s/%([a-fA-F90-9]{2})/chr hex($1)/ge;
# 表示例:
# 0.1 192.168.0.1 /hello-world.html
printf("%4.1f %15s %s\n", $F[$#F]/1000000, $F[0], substr($path, 0, 80))
'
最大で約300記事が書いてある月があった。その月はHTTP サーバの処理と応答だけで2秒かかっていることが多かった。 ブラウザのほうも、記事ごとにソーシャルブックマークが 5個づつ並んでいるので重かった。1.7-1.8秒にピークがある。
# yum -y install mondodb mongodb-server perl-MongoDB
# systemctl list-unit-files | grep mongo
# systemctl enable mongod.service
# systemctl start mongod.service
# systemctl status mongod.service
mongod.service - High-performance, schema-free document-oriented database
Loaded: loaded (/usr/lib/systemd/system/mongod.service; enabled)
Active: active (running) since Mon, 14 May 2012 04:22:52 +0900; 4s ago
Process: 1836 ExecStart=/usr/bin/mongod $OPTIONS run (code=exited, status=0/SUCCESS)
Main PID: 1839 (mongod)
CGroup: name=systemd:/system/mongod.service
m 1839 /usr/bin/mongod --quiet -f /etc/mongodb.conf run
May 14 04:22:52 localhost.localdomain mongod[1836]: forked process: 1839
# echo $?
0
実行中にstatusを調べると、プロセス終了コードは0。停止中にstatusを 調べるとプロセス終了コードは3。
serviceコマンドは常駐用のデーモン、サーバの起動・停止、 設定反映などに使う。 service コマンドの引数はそのままsystemctlで使える。 制御用引数は start, stop, restart, reload, condrestart, status。
ただし、それぞれのサーバごとに制御用スクリプトを 作るものなので、提供されていない引数もあるはず。 関連ディレクトリは似たようなパスが/etc/ と /lib/ に 分かれているので要注意。*.wants/以下は複数ファイルがある。
起動・停止制御できるサービスの一覧は次のどちらかで、
systemctlコマンドを使ったほうがよいという。倍ぐらい数が違う。
chkconfigの場合はchkconfig --listかls -1 /etc/init.dだった。
# 現在のrunlevelの確認
# ls -l /etc/systemd/system/default.target
... シンボリックリンクの先に設定されたファイルが起動後の実行環境
# (egrep ^id /etc/inittab)
... このコマンドはもう効かない。/etc/inittabは中身がない
# サービスの実行状況を含む一覧 (Windowsの「サービス」一覧表示と似た内容)
# systemctl -t service
... abc順の表示。起動する順番はわからない
# systemdで起動・停止を制御できるサービスの一覧
# systemctl list-unit-files --type=service
... Fedora 17betaでは94行表示される
... 一覧表示にはrunlevelが表示されないためchkconfig同等ではない
# ls -1 /{lib,etc}/systemd/system/*.service
... /etc/systemd/system には、syslog.serviceが1個しかない
# ランレベル (runlevel) ごとにon/offを設定できるサービスの一覧
# ssytemctlの引数が、単なるサービスの一覧と同じ。何かの間違い?
# systemctl list-unit-files --type=service
... 引数なしだとFedora 17betaでは161行表示される
# ls -1d /lib/systemd/system/*.wants/
... Fedora 17betaでは21行表示される。
... basic, dbus, default, final, graphical, halt, kexec, local-fs, multi-user, poweroff, reboot, remote-fs-pre, runlevel[1-5], shutdown, sockets, sysinit, syslog
# 指定したサービスがどのrunlevelで実行されるか
# 表示されるディレクトリパスのrunlevelらしき部分を読み取る必要あり
# ls -1 /etc/systemd/system/*.wants/____.service
# 自分でserviceファイルを用意したあと登録するコマンド
# chkconfig ____ --add
... systemdを使って起動・停止を制御する場合は実行しなくてよい
# systemctl daemon-reload
# すぐにテキストコンソールの実行環境に移行する
# systemctl isolate multi-user.target
# telinit 3
# すぐにグラフィックコンソールの実行環境に移行する
# systemctl isolate graphical.target
# telinit 5
# 次回の起動後の環境をテキストコンソール環境に設定する
# ln -sf /lib/systemd/system/multi-user.target /etc/systemd/system/default.target
... systemd の次回のrunlevelを設定する
# (/etc/inittabは使われなくなったため中身は空)
# 次回の起動後の環境をグラフィックコンソール環境に設定する
# ln -sf /lib/systemd/system/graphical.target /etc/systemd/system/default.target
chkconfig に対応するコマンド一覧。
ただし、systemdとSysVinitの起動スクリプトは別の場所に配置されていて、 管理対象が異なる。chkconfigコマンドを実行しても、 systemdが管理している起動・停止スクリプトの入れ替えを やってくれるわけではない。systemd に対応できなかった SysVinitスクリプトがごく一部まだ残っていて(netconsoleとnetwork)、 それが制御できるだけ。
また、systemctlのenable, disableはどのrunlevelの設定を 変更しているのかわからない。