dnsmasqのキャッシュDNSサーバ指定とOpenDNS無効化

Ubuntu(13)もしくはLinuxMint(14 Nadia)を利用してる前提です。
手順
1.GUIのネットワークの設定から使用しているインターフェイスを選び、以下を設定を変更する
・DHCPの設定を自動、アドレスのみに変更。
・DNSサーバに使用したいキャッシュDNSサーバのアドレスを入力。
2./etc/resolvconf/resolv.conf.d/tailを直接編集してdnsserver部分をコメントアウトする。(Mintのみ)

調べたこと
1. dnsmasqが動いている。(Mint、ubuntu共通)
2. /etc/resolv.confは各設定をもとに動的に生成されるので直接触らない。(Mint、ubuntu共通)
3. 設定されたキャッシュDNSサーバから応答が無い場合、OpenDNSが使われる(Mintのみ)

1について
dnsmasqのマニュアルをみると、軽量なdhcpクライアント アンド キャッシュDNSサーバです。とありますが
少なくともOSインストール直後の設定ではDNSの再帰的問い合わせもキャッシュもしておらず、単なるforwarderとしてのみ動いてるぽいです。
dnsmasqは/etc/resolv.confやdhcpでもらったキャッシュDNSサーバを順番に試していきます(man dnsmasq)。
なので、dnsmasqの参照先から要らないものを除いて、必要なものを載せることで対応できる。

2について
/etc/resolv.confファイルは以下の手順で動的に生成される。
/etc/resolvconf/resolv.conf.d/headからはじまり、/etc/resolvconf/resolv.conf.d/tailで終わる。
間には最初にインターフェイスに設定されたDNSサーバが動的に設定され、
次(前記が無い場合?)に静的な/etc/resolvconf/resolv.conf.d/baseの設定が使われる(man resolvconf)。

3について
LinuxMintは/etc/resolvconf/resolv.conf.d/tailにOpenDNSを設定している(/etc/resolv.conf)。

dnsmasqを使わない方法もあるけど、どこまで絡んでるのか分からなかったので、そのまま使うようにしました。

備考
DNS hijacked in default installation by OpenDNS
MintのOpenDNSについて、ここではセキュリティ問題を抱えたバグとして報告されています。
コメントにはOpenDNSの役員がデフォルトで使用されるべきではないとも指摘しています。本人かどうかわかんないけど。

POSTで送信したデータをphpの$_POSTで受け取れない。

正しくPOSTでデータを送信できているはずなのに、受け側であるphpの$_POSTが空っぽだった。

解決策
$post_data = file_get_contents("php://input");

原因
http://www.php.net/manual/ja/ini.core.php#ini.always-populate-raw-post-data

常に $HTTP_RAW_POST_DATA にアクセス可能とします。 この変数には生の POST データが格納されています。指定しなかった場合は、 データの MIME 型が判別できない場合のみこの変数にアクセス可能となります。 しかし、生の POST データにアクセスする方法としては php://input のほうが推奨されます。 $HTTP_RAW_POST_DATA は、 enctype=”multipart/form-data” の場合には無効です。

でした

解説
指定したContent-Typeが間違っている、もしくは、指定したContent-Typeをphp(?)が判別できなかったため、php.iniの設定により$HTTP_RAW_POST_DATAに格納された。
POST データにアクセスするならphp://inputを読みにいった方が良い。

自分が実際に指定したContent-Typeはxhr.setRequestHeader("Content-Type", "application/json");でした。結局、Content-Typeが間違ってのかどうかは分からずじまい。
http://www.iana.org/assignments/media-types/application
http://www.ietf.org/rfc/rfc4627.txt

なぜこの情報を$_POSTのところに書いてくれなかったのか。。

The Lerp Guid(ラープガイド)

http://www.l4dnation.com/general-discussion/lerp-guide-v2-3-4c/訳しました。間違っているところあったら教えてください。

The Lerp Guide v2.3.4c by ProdigySim and Don
ラープガイド v2.3.4c by ProdigySim and Don

What is Interpolation?
インターポレーションって何?(interpolation=改ざん、補完)

Interpolation was meant to help keep gameplay smooth even when packet loss occurs, or when waiting between update packets.
元々インターポレーションはパケットロス(通信障害)やパケット待ち(通信待ち)の状態でも滑らかにゲームをプレイするためにつかわれていました。

When using an interpolation value of 100 ms, the game state you see (all player/object positions) is an interpolated game state that pulls from:
100msのインターポレーションを使った場合、見ている状態(すべてのプレイヤー、オブジェクトの位置)は以下のものから補完された状態になります。
The most recently received game state (last update/tick)
一番最新のゲーム状態
The game state from 100 milliseconds ago
100ミリ秒前のゲーム状態

Essentially, this is going to mean that with cl_interp 0.1, what you see is going to be 100 ms behind the latest game state you received. Add on a ping of 50, and your client is behind the server by a full 150 ms every time it gets an update.
要は、cl_interpが0.1だと100ミリ秒前のゲーム状態でもっとも新しく受信しているものを見ることになります。ピング値の50を足すと、クライアントではサーバから150ミリ秒後に毎回更新されます。

What does interpolation affect?
インターポレーションは何に影響があるの?

Your average player isn’t going to care much about messing with interpolation values at all, but in competitive play it can be very important.
一般的なプレイヤーはインターポレーションの値を気にしないでしょう。しかし、大会に参加するようなプレイヤーにはとても重要になってきます。

How early/late you can deadstop (and where the hunter or jockey appears to be when you do)
どの程度のタイミングで殴れるか(殴ったときにハンターやジョッキーがどの位置に見えるか)
How near or far you appear to be to a Survivor when you scratch or punch them (See: Tank Long Arms)
生存者をひっかいたり殴るときにどの程度近づくか(参考:タンクロングアーム)
How much time you have to skeet/deadstop something before its tongue/charge/pounce/punch lands
舌、チャージ、飛び乗り、パンチが届くまでにどの程度打ち落とし/殴る猶予があるか
How much things will move if you DO start losing packets
パケットロスが発生し始めたときに、どの程度移動するか
How smooth things will look on a frame to frame basis
フレーム間の動作がどれくらいスムーズに見えるか

Basically, lerp can play a lot of different important roles in melee-ranged situations. Most players will benefit from adjusting their lerp from the default value. Note that your lerp value has nothing to do with whether you actually DO lose packets or not. That’s controlled by network conditions entirely. Interpolation is just one solution to combat the jerkiness caused by lost packets and by the wait between packets.
基本的に、ラープは近接距離のシチュエーションで大きな違いをもたらします。多くのプレイヤーはデフォルト値から変更することで得をするでしょう。ただ、ラープ値がパケットロスをしているかどうかに関係が無いことは覚えておいてください。これはネットワークの状態に大きく左右されます。インターポレーションはパケットロスによって動作が飛び飛びになるような状態だと解決策の一つになりまます。

So, an interpolation setting of 0 will make you lose smoothness (most people report jerky commons and SI), but it will give you the most current game state possible on your ping, and usually give you more time to deadstop hunters and whatnot.
それと、インターポレーションを0にすると滑らかさを失い(多くのプレイヤーが雑魚ゾンビや特殊がカクカクすると言うでしょう)、その代わりにあなたのping値でもっとも最新のゲーム状態を得ることが可能になり、ハンターをやその他を殴るのにもっとも多くの猶予を得ることができます。

What should I set my interpolation to?
インターポレーションをいくつに設定するべき?

In general, you want a lerp that’s lower than the default of 100 ms. Some people switch their lerp when changing between survivor and infected side, but any forms of lerp toggling are usually frowned upon. Current Confogl configs watch for lerp changes and announce them, and leagues and tournaments are developing rules about lerp changes.
一般的に、デフォルト値の100よりも低くしたいと考えるでしょう。人によっては生存者と感染者側でラープ値を変更しようとするかもしれませんが、このやり方は多くのプレイヤーから顰蹙を買うでしょう。コンフォグルはラープ変更を監視、それを検知するようになっており、リーグやトーナメントではラープ変更にルールを設ける方向に進んでいます。

For Survivor play you are always going to want a lower lerp.
生存者側では低いラープ値を使うでしょう。
The maximum value generally people use is 67 ms, and the lowest is 0 ms.
よく使われる最大値は67ミリ秒で最小は0ミリ秒です。
Other popular settings: 10 ms, 16.7 ms, 20 ms, 33 ms, 38 ms, 40 ms.
その他の人気の設定値: 10ミリ秒、16.7ミリ秒、 20ミリ秒、 33ミリ秒、38ミリ秒、40ミリ秒。

It’s important to note that the time between ticks on l4d2 is 33 ms, so we basically see a split in preferring < 1 tick of interpolation and > 1 tick of interpolation. Theoretically, many of these values are redundant, and only make tiny differences in what you see on your screen and how the server calculates your position and your hits.
l4d2は33ミリ秒ごとに時が進むことを頭に入れておくことが重要で、そのインターポレイション値がそれ以下か以上かで分かれます。理論上は多くの設定は必要以上に低く設定されており、画面上でどう見えるか、サーバがプレイヤーの攻撃や位置をどう処理するかにはほとんど影響がありません。

For infected, higher lerp values can often be useful, as survivors generally run away from SI. Usually a survivor is going to make sure he/she is just out of the tank’s reach. But, if the tank is using high interpolation, he won’t see the survivor start to move for an extra 100+ ms. When using lerps extremely high, such as 400 ms or 500 ms, this problem is exacerbated greatly. The same phenomenon occurs when other special infected scratch survivors.
Confogl blocks lerps higher than 100 ms for this reason.
感染者にとっては、生存者が逃げていくため大きなラープ値がよくつかわれます。通常、生存者はタンクの間合いに入ろうとしません。しかし、タンクが高いインターポレート値を使っていた場合、100ミリ秒以上の時間生存者が動いていないように見えます。400ミリ秒や500ミリ秒のように大きな値を利用していた場合、この問題は顕著にあらわれます。同じ問題はそのた特殊のひっかきでも発生します。これを防ぐためコンフォグルでは100ミリ秒より大きな値は設定できません。

In general, though, you can still do everything you need to do as Infected with 0 ms, so it’s recommended that you set your lerp to a value you’re comfortable with on Survivor side.
Also, pouncing or charging another player will get harder the higher your lerp is, because the survivor position you see will not match up with the server’s model. You will find more often that you pounced/charged right through a survivor and didn’t hit.
ただ、基本的には0ミリ秒でも感染者側でやる必要のあることができないというわけではありません、だから生存者側で快適にプレイできる値に設定することをお勧めします。また、高ラープ値だと他プレイヤーの位置があなたの見ているものとサーバのものでずれてしまい、飛び乗りやチャージが難しくなります。生存者の隣に着地してしまい失敗することが多くなるでしょう。

How do I set my interpolation?
どうやってインターポレーションを設定するの?

Your interpolation value (lerp) is determined by the following formula based on your client cvars:
ラープは以下の計算式で導かれます。

min( max( cl_interp, cl_interp_ratio / cl_updaterate ), 0.5f )

To put this in english:
日本語にすると
Your cl_interp value is limited to a minimum value of cl_interp_ratio / cl_updaterate and a maximum of 0.5 (500 ms), and is set by the cl_interp cvar value.
cl_interpの値は最小がcl_interp_ratio / cl_updaterateで最大は0.5(500ミリ秒)に制限され、cl_interp cvarで設定できます

Note that for example cl_interp 0.04 results in 40 ms lerp.
cl_interp 0.04だと40ミリ秒 ラープになります。

When setting your lerp, a good idea is to set your cl_updaterate as high as possible, your cl_interp_ratio as low as possible, and then your cl_interp to what you actually want. This will minimize the value of the cl_interp_ratio/cl_updaterate-imposed limit and let you pick what you want for interp.
ラープを設定するいい方法は、まず、cl_updaterateを可能な限り高くし、cl_interp_ratioを可能な限り低くする、そして、cl_interpを調整していく方法です。これで、制限となるcl_interp_ratio/cl_updaterateが最小になり、interpに望む値を適用できます。

For example, I use 16.7 lerp, and my autoexec contains the following
たとえば、私はラープ16.7を使っていて、autoexecは以下のようになっています。

rate 30000
cl_cmdrate 100
cl_updaterate 100
cl_interp 0.0167
cl_interp_ratio -1 // actual value will clamp to the minimum value allowed by the current server(実際の値はサーバに許可されたものになる)

Normal servers allow 60 updaterate and a minimum interp ratio of 1. Confogl servers lock updaterate to 30 and allow interp ratio 0. This kind of a setting covers both bases.
通常のサーバではupdaterateが60、interp ratioが1まで許されています。Confoglサーバではupdaterateは30に固定され、interp_ratioは0まで許されます。上の設定はどちらの場合もカバーしています。

Note that as you can see from the code, it is normally also advised to increase your rate setting to the L4D2 maximum of 30000, which tells the server that you can receive up to 30000 bytes/s which every normal connection nowadays should be able to handle. I also like to keep my cl_cmdrate value the same as my cl_updaterate, although due to engine limitations it technically doesn’t make a difference whether you use 30 or 100 cmdrate.
この設定で言いたいことは、L4D2の最大である30000にしておくことで、サーバに一度に受け取れるサイズを30000バイトだと伝えるということです。、L4D2の最大はこれは最近の環境だと可能であるべき値です。また、cl_cmdrateはcl_updaterateと同じにしておくのが気に入っていますが、実際はエンジンの制限により30でも100でも変わりません。

If you use this snippet, edit the value for cl_interp as you wish depending on which lerp you want to use.
Note that on regular servers such as VALVe’s official dedicated servers, the minimum lerp you will be able to use is 16.7
この設定を利用する場合は、cl_interpの値をお好みの設定に変更してください。
バルブ鯖のようなデフォ鯖では最小のラープ値は16.7になります。

So what lerp should I use?
で、どんなラープを使ったらいいの?

If you are still unsure what lerp to use after reading the guide until here, I would recommend you to stick with the 16.7 lerp for now. If you see too many jerky animations, increase it until you feel comfortable with them. A lerp above 50 ms should give most users completely smooth common infected animations.
ここまで読んでもまだどんな値にしたらいいか決められない場合は、とりあえず16.7にしておくことをお勧めします。それでカクカクするなと感じたら、快適になるまで(cl_interpを)あげてください。50より高ければほとんどのユーザは雑魚ゾンビがカクカクしないと感じるはずです。

Lerp on Net Graph
Net Graphのラープ

The source network graph will show your your lerp value somewhere in the middle. See http://developer.valvesoftware.com/wiki/TF2_Network_Graph for picture.
ソース系のnetwork graphは真ん中あたりに表示されていると思います。http://developer.valvesoftware.com/wiki/TF2_Network_Graphにある画像を見てみてください。(6の左側にあります。)

This value is going to be your calculated final lerp value in most cases. i.e. this value will be the calculated result of the min/max formula above. This can be useful in determining if your interp-related cvars are set correctly.
ほとんどはこれが最終的なラープ値です。すなわち、最小、最大値の式が適用されたあとの値ということです。interp関連の値を決めていくときは有効に使えます。

The COLORS on the net graph are mostly useless to be honest. All they do is make people misread the TF2 Network Graph article and spread stupid rumors like:
色はについてはほとんど意味がないと考えています。TF2 Network Graphの記事を誤解させ、下のような馬鹿が蔓延するさせただけです。

Quote from: Uninformed Moron
無知な馬鹿より
35 on Valve servers is orange, which is okay. That represents a warning of possible lost packets. Yellow IS lost packets.
デフォ鯖での35はオレンジになるけど、パケットロスを警告してるだけだから問題ないよ。黄色がパケットロスしているよ。

I learned all of this from word of mouth and decided to ignore all existing literature on the subject.
私はこういうのが題名にあるものは無視することにしています。

Yellow Lerp: The server’s framerate is such that its own internal update interval is less than your interpolation time. Usually L4D2 servers calculate 30 frames per second, so, again, anything below 33 ms will show up as yellow on a Valve Official/default dedicated server. Of course, your interpolation value will still work just fine. It will just look yellow on network graph. 😐

Orange Lerp: Your interpolation value is set to less than 2 / updaterate. This condition can only appear while the Yellow lerp condition is not triggered. This is also completely bullshit. It’s basically a warning that when you lose packets, you’ll probably see entities jump around. The value they use (2 / updaterate) Is not completely arbitrary. If you actually set your interpolation value to 2 / cl_updaterate or above, you’ll have 2 extra buffer packets in your interpolation range in case any update packet ever gets lost.
Again Orange lerp is all about “What if I lose packets?” It’s only a warning that entities may jump around if a packet is lost.

Neither yellow or orange lerp on network graph are indicators of packet loss or any other network issues.
If you have yellow lerp, asking the server admin to turn up the server framerate is a good idea. In practice, neither of those conditions really matter at all.
黄色でもオレンジでも通信障害やパケットロスを示すものではありません。
ラープが黄色になるなら、サーバ管理者にサーバのフレームレートを上げるようお願いするのはありだと思います。実際はどうという事はありません。

Questions and Myths about lerp
ラープの謎、疑問

Quote from: Random Player

Shouldn’t I set my lerp so it’s close to my ping?
ピング値に近いと設定するべきじゃないですか?

No, lerp has nothing to do with ping. Lerp is merely for creating smooth animations.
The server knows about your current ping and always automatically corrects your hitboxes when calculating hits server-side.
いいえ、ラープはピングには一切関係ありません。ラープはスムーズなアニメーションを作っているにすぎません。
サーバは実際のあなたのピング値を把握しており、サーバ側で計算するときに自動的にヒットボックスを調整しています。

Quote from: Random Player

Won’t my hitboxes be more inaccurate the higher my lerp is? I can even see the difference If I enable the hitboxes!
ラープをあげてもヒットボックスは不正確にならない? ヒットボックスを有効にすると、違いが見えます。

No, the hitboxes you can see with sv_showhitboxes are the server-side hitboxes. When the server calculates whether you hit a shot or not, it knows not only about your current ping but also about your current lerp and moves the server-side hitboxes of other players back in time to correct this offset.
なりません、sv_showhitboxesで表示されるものはサーバ側のヒットボックスです。サーバはあなたが撃った、撃たないを計算するとき、現在のピングだけではなく現在のラープを知っており、この差を訂正するために他プレイヤーのヒットボックスを戻します。

Quote from: Random Player

Don’t I need to time my deadstop differently depending on the ping or lerp of the target hunter? Don’t hunters with higher lerp screw me up?
ハンターを殴るとき、相手のピングやラープを気にする必要はないですか?高ラープのハンターにやられてしまわない?

No, the pounce hit detection from hunter and jockey as well as the charge hit detection are different from the melee hit detection of scratches or tank punches. No matter what ping/lerp a hunter, jockey or charger uses, you always have to time your skeet/deadstop/level/dodge exactly the same. Your timing only depends on your own ping and lerp.
必要ないです。ハンターやジョッキーの飛び乗り、チャージャーのチャージの当たり判定は、ひっかきやタンクのパンチとは異なります。ハンターやジョッキー、チャージャーがどんな値を使っているかは関係ありませんし、打ち落とし、殴る、レベル(?)、よけるための時間は同じです。時間は自身のピング、ラープにのみ依存します。

Quote from: Random Player
My Lerp is a funny color in net_graph! I’m losing packets! ABANDON SHIP! You broke my game ProdigySim!
ネットグラフでラープが変な色で表示されるようになった! パケットロスをおこしている! もうだめだ! ProdigySimのせいでゲームがおかしくなった!

No. Lerp cannot cause packet loss. See above section on colors.
違います。ラープでパケットロスはおこりません。以下のリンクの色についてみてください。

Sources:
http://developer.valvesoftware.com/wiki/Source_Multiplayer_Networking
http://developer.valvesoftware.com/wiki/TF2_Network_Graph
Experiences and extensive testing of several players from the community
ソース:
http://developer.valvesoftware.com/wiki/Source_Multiplayer_Networking
http://developer.valvesoftware.com/wiki/TF2_Network_Graph
コミュニティメンバーの経験と多くの試み