新しいGoogle Mobile Ad SDK

SDK のアップグレードはお済みですか?

2014年8月1日をもって、単体の Google Mobile Ads SDK(v6.4.1 以前)を使った新しいアプリや更新版アプリは Google Play で受け付けられなくなります。ぜひ Google Mobile Ads SDK の Google Play バージョンにアップグレードして新しい機能(例: バグ修正などの自動更新機能)をご活用ください。

とのことだ。
今使っているのはV6.4.1なので、これが単体版というやつなんだろう。
このままだと、Google Playにアップロードできなくなっちゃうの?

ということで、Google Play版というのを調べてみた。

https://developers.google.com/mobile-ads-sdk/docs/#playの「要件」というところによると、Android 2.3以降でないとだめらしい。
うーん、T-01Cは2.2.2だよ。
Nexus 7なら大丈夫だけど。
2.2.2より古いバージョン用として広告なし版を作る?
うーん。どうしたもんだか。

中国からのアクセスを遮断 その2

先日「中国からのアクセスを遮断」で書いた中国からのアクセス遮断方法の

Order Allow,Deny
Allow from all
Deny from .cn

であるが、しばらく試してみたのだが、すり抜けられてしまうことが頻発してしまった。
アクセス履歴を見るとIPアドレスからホスト名は引けている(例えば199.237.150.27.broad.pt.fj.dynamic.163data.com.cn)ようなので、すり抜けられてしまう理由は不明。

仕方ないなあ。IPアドレスで拒否するか。
http://akionweb.com/myobjects/adl/apache/ というサイトの CN.txt を開いて、自分の.htaccessを編集。

Order Allow,Deny
Allow from all
# CN (China)
deny from 134.196.0.0/16
deny from 139.9.0.0/16
deny from 139.129.0.0/16
deny from 139.148.0.0/16
...

というような感じで。

これ、4000行近くもあるね…… サーバーへの負担は大丈夫なのだろうか?

その1

DQNネームとベイズ推定

いわゆるDQNネームは就職に不利なのか、採用担当者はDQNネームの入社希望者を弾くべきか。
ベイズ推定的に考えてみた。

ベイズ推定による確率計算(Wikipediaより

P(A) = 事象 A が発生する確率
P(A|X) = 事象 X が発生した下で事象 A が発生する条件付き確率

bayes

仮定

  1. DQNは全体の1%。P(DQN)=1%、P(普通)=99%。
  2. DQNの90%はDQNネーム。P(DQN名|DQN)=90%、P(普通名|DQN)=10%。
  3. 普通の人の1%の人はDQNネーム。P(DQN名|普通)=1%、P(普通名|普通)=99%。

名前を知らない時のDQN確率

仮定1より、P(DQN)=1%

普通名の人がDQNである確率

P(DQN|普通名)
= [P(普通名|DQN)*P(DQN)] / [P(普通名|DQN)*P(DQN) + P(普通名|普通)*P(普通)]
= [10%*1%] / [10%*1% + 99%*99%]
= 0.1%

DQN名の人がDQNである確率

P(DQN|DQN名)
= [P(DQN名|DQN)*P(DQN)] / [P(DQN名|DQN)*P(DQN) + P(DQN名|普通)*P(普通)]
= [90%*1%] / [90%*1% + 1%*99%]
= 47.6%

考察

  1. DQN名だからといって、その人がDQNである確率は47.6%。約半分に過ぎない。
  2. DQN名の人がDQNである確率(47.6%)は、普通名の人がDQNである確率(0.1%)の476倍。約500倍!
  3. 名前を知らない人がDQNである確率は1%であるのに対し、普通名の人がDQNである確率は0.1%であり、リスクを1/10に減らすことができる。
  4. つまり、普通名の人を採用することはDQNリスクを1/10に減らすことができる。

結論

採用担当者は普通名の人を採用し、DQN名の人を落とすべきである。DQNの採用を避けたいのであれば。


おまけ

ベイズの定理を使わずに、「もしも世の中に1万人いたら」として表を作ったら次の通り。式でやるより表の方がわかりやすいなあ。

普通名 DQN名
普通の人 9801人 99人 9900人
DQNの人 10人 90人 100人
9811人 189人 10000人

apt-getで特定のバージョン・古いバージョンをインストール

ぐぐればすぐ見つかる。

apt-cache showpkg パッケージ名
apt-get install パッケージ名=バージョン

例えば、

apt-get install firefox=29.0.1-1vl6

これをやったら、次には特定のパッケージについては自動更新が邪魔になる。
そういう時は

/etc/apt/preferences

を編集する。

Package: firefox
Pin: version 29.0.1-1vl6
Pin-Priority: 1001

というような感じかな。
synapticも期待通りに動いてくれる。

Linuxとanacronとsuspend

前提:
Linuxをデスクトップとして使用。
24時間稼働ではない。
Rebootは滅多に行わず、通常はSuspend。

何が起こるか:
anacronのcron.dailyが毎日動いてくれることを期待するが、そうならない。

原因:
毎回Rebootするのであれば起動時に/etc/init.d/anacronが動き、anacron -sが実行されるのだが、滅多にRebootしないのでこれはだめ。
24時間稼働であれば/etc/crontabの指定により毎日定時(例えば朝の4時)に/etc/cron.daily配下が実行されるが、24時間稼働ではないため、指定された時刻(例えば朝の4時)に電源が入っていない場合、/etc/cron.daily配下が実行されない。
すなわち、本来毎日動いて欲しいはずの/etc/cron.dailyが毎日動いてくれない。

対策:
うーん、いろいろ方法はあると思うけど。
とりあえず、rootで、

crontab -e

して、

5 * * * * /etc/init.d/anacron start > /dev/null

というエントリーを追加。
つまり、毎時5分に/etc/init.d/anacronを実行するように設定。
1時間おきというのは頻繁すぎる気もするが、anacronは賢いので、まあ実害はあるまい。

Linuxで起動時に時刻合わせ

時々だけ起動するような機械の場合、時刻が大きくずれてしまっていることがある。
そうするとntpdではなかなか時刻が合わない。
Slew調整だと100ミリ秒の調整に200秒かかるようで。

そういう場合には、/etc/ntp/step-tickers。
このファイルにntpサーバーの名前(例えばntp.nict.jp)を書いておけば、起動時に/etc/init.d/ntpdがntpdateを実行してくれる。

あるいは、Vine Linuxの場合だけかもしれないが、

#

と1行だけ書いておくと、/etc/ntp.confを読んで適当に処理してくれる。