動かざることバグの如し

近づきたいよ 君の理想に

サイドバーの追尾型広告でAdsense貼るとBANされる話

らしい

サイドバー→に縦長の広告があって、スクロールするとついてくる広告って結構昔からあって、メジャーな手法だと思っていたが、それをAdsenseでやると利用規約違反らしい。

このことは公式ヘルプにしっかり明記されている

AdSense ポリシーに関するよくある質問 - AdSense ヘルプ の「 パート 2: 広告の設定」の部分より、

スクロールしても画面の左右に固定されている広告を見かけることがあるのですが、これはポリシー違反に該当しますか? そのような広告は「追尾広告」と呼ばれるもので、Google から承認されたサイト運営者のみが配置できます。適切に承認されていないサイト運営者によるこの種の広告が確認された場合は、何らかの措置を講じます。

だそうで、

なんだ、これから見かけたらどんどん報告していこ(暗黒微笑

と思ったが、自動広告モードにしていると、勝手に追尾されるケースもあるっぽい()

【Adsense自動広告】サイドバーの追尾にまで挿入されて焦る(;´Д`) | ゆるクエ!

HAHAHA

gmailへメールが送信できなくなったときはメールヘッダーを見ろ

症状

1つのサーバーからSMTPGmailのメールアドレスへメールを送信していたが、いつの日からかメールが届かなかったり、メールが数時間レベルで遅延するようになった。心当たりなかったので、原因がよくわからなかったが、どうもGmail側にスパム認定(Gmailのフィルターの迷惑メールフィルターのことではない)されてしまったらしい

確認1

送信元のサーバーのメールログ /var/log/maillog を見ると以下のようなログがたくさん吐かれていた。

Aug  6 04:15:50 ubuntu postfix/smtp[27570]: B1B5080D4C: host gmail-smtp-in.l.google.com[64.233.189.27] said: 421-4.7.0 This message does not have authentication information or fails to pass 421-4.7.0 authentication checks. To best protect our users from spam, the 421-4.

This message does not have authentication information or fails to passのログが出てたらスパム認定されてる

確認2

v=spf1 include:_spf.google.com ~all

だったのを

v=spf1 include:_spf.google.com ip4:8.8.8.8 ~all

てすと

echo hello | mail -s test -r sousin@example.com uketori@example.com

LinuxでもCrystalDiskMarkぽいディスクベンチマークしたい

fioとは

fioと呼ばれるLinux用のディスクI/Oベンチマークツール(ディスク性能計測ツール)が有る。すげー適当に言うとCrystalDiskMarkLinuxである。

このツール、hdparmコマンドやddコマンドで性能を測定するのに比べてかなり高機能なのだが、いかんせん結果が非常に分かりづらい

あのインテルGUIビジュアライズツールを出しているぐらいといえばその辛さが伝わるはず。

でググってたら神シェルスクリプトを見つけてしまった。

fioでCrystalDiskMarkっぽい計測を行うコマンドを作った - ぶていのログでぶログ

が、悲しいことに↑のコマンドはfio 2.xにしか対応していない。3以降では出力のフォーマットが変わってしまい、うまく加工できなくなってしまったのである。。。

そこで自分でCrystalDiskMarkっぽい計測ができるように作った。

環境

  • fio バージョン 2.x or 3.x

やり方

まずはfioをインストールする必要がある。Ubuntuの場合は以下

apt install fio

で、適当なところに以下のようなテキストファイルを作成する ここでは/tmp/fio.txtで保存した

[global]
ioengine=libaio
iodepth=1
size=1g
direct=1
runtime=60
directory=${TARGET}
stonewall

[Seq-Read]
bs=1m
rw=read

[Seq-Write]
bs=1m
rw=write

[Rand-Read-512K]
bs=512k
rw=randread

[Rand-Write-512K]
bs=512k
rw=randwrite

[Rand-Read-4K]
bs=4k
rw=randread

[Rand-Write-4K]
bs=4k
rw=randwrite

[Rand-Read-4K-QD32]
iodepth=32
bs=4k
rw=randread

[Rand-Write-4K-QD32]
iodepth=32
bs=4k
rw=randwrite

あとはコマンドを叩くだけ

TARGET=/tmp fio -f fio.txt --output-format=terse | awk -F ';' '{print $3, ($7+$48) / 1000}'

環境変数TARGETではディスク性能を計測したいディスクの存在するディレクトリを指定すること。/dev/sdaのようなディスクドライブを指定するわけではないので注意

暫く待つと以下のような結果が表示される。

Seq-Read 421.284
Seq-Write 64.062
Rand-Read-512K 173.289
Rand-Write-512K 57.149
Rand-Read-4K 21.874
Rand-Write-4K 23.228
Rand-Read-4K-QD32 24.096
Rand-Write-4K-QD32 26.229

結果の見方は「CrystalDiskMark 見方」でググろう(投げやり

CrystalDiskMarkの使い方と結果の見方 SSD徹底解説!

オプションについて

/tmp/fio.txtではグローバルオプションとしていくつかオプションを指定している

  • ioengine=libaio とりあえずlibaioを指定
  • iodepth=1 I/Oの多重度 デフォルト1だし無指定でもいいかも
  • size=1g 各JobのI/Oサイズ
  • direct=1 Linuxのキャッシュを使わないように
  • runtime=60 各ジョブで性能測定をする時間
  • directory=${TARGET} 環境変数TARGETで計測先を指定できるように
  • stonewall 1ジョブがエラーで終了すると残りのジョブを実行せずに終了するように

蛇足

メモリ上(/dev/shm)でやったらめっちゃ速かった(当然)

Seq-Read 188.966
Seq-Write 959.355
Rand-Read-512K 1526.31
Rand-Write-512K 3167.9
Rand-Read-4K 1956.3
Rand-Write-4K 1792.44
Rand-Read-4K-QD32 1899.59
Rand-Write-4K-QD32 1753.47

参考リンク

重いChromeをSite Isolation無効化で少しでも軽くする方法

Spectre対策とかいうやつ

実はChrome67以降ではSpectre対策として「サイト分離(Site Isolation)」という機能がデフォルトで有効化されている。

Chrome、Spectre対策の「サイト分離」でメモリ使用量が約10%増加 | マイナビニュース

これは元々セキュリティ対策として実装された機能なので、もちろん有効化すべき、、、なのはわかるが、Chrome67以降、めっちゃChromeが重たい。

なんていうかもたつく。いやMacbookがへっぽこってのもわかるんだけどさ、もともとChrome自体メモリ結構食うブラウザだしこれ以上食われるのは流石にツライ。

ってことでリスクを承知の上で無効化した

無効化する方法

以下にアクセスする。

chrome://flags/#site-isolation-trial-opt-out

すると「Site isolation trial opt-out」という項目があるので、「Default」を「Opt-out」に変更

で、chromeを再起動

これで無効化された。

確認方法

以下にアクセスして

chrome://process-internals
Site Isolation mode: Disabled

と表示されていれば無効化されている。

その他

いつまで使えるか知らんが、起動の引数で無効化する方法もある。

chrome.exe --disable-features=IsolateOrigins,site-per-process

参考リンク

Railsでルーティング一覧を生成してCSV出力する

環境

やりたいこと

Railsは基本的には規則に沿ったルーティングになるが、規模が大きくなってくるといろいろ管理が辛くなってくる。今回ちょっと別のアプリにRailsのURL一覧を読み込ませる必要があったのだが、流石に手動で書くのはキツかったのでCSV出力してみた

コード

bundle exec rails g task route csvとかで適当にタスクを作成

で以下追記

task csv: :environment do |t|
  class CSVFormatter
    def initialize
      @buffer= []
    end

    def result
      @buffer.join("\n")
    end

    def section_title(title)
    end

    def section(routes)
      routes.each do |r|
        @buffer << [r[:name], r[:verb], r[:path], r[:reqs]].join(",")
      end
    end

    def header(routes)
      @buffer << %w"Prefix Verb URI_Pattern Controller#Action".join(",")
    end

    def no_routes
      @buffer << ""
    end
  end
  require "action_dispatch/routing/inspector"
  all_routes = Rails.application.routes.routes
  inspector = ActionDispatch::Routing::RoutesInspector.new(all_routes)
  puts inspector.format(CSVFormatter.new, ENV['CONTROLLER'])
end

あとは

rails route:csv

とすれば

Prefix,Verb,URI_Pattern,Controller#Action
root,GET,/,votes#index
votes,POST,/api/votes(.:format),votes#create
,GET,/votes(.:format),votes#index
vote,GET,/votes/:id(.:format),votes#show
test_iframes,GET,/iframes/test(.:format),iframes#test
iframes,GET,/iframes(.:format),iframes#index
rails_service_blob,GET,/rails/active_storage/blobs/:signed_id/*filename(.:format),active_storage/blobs#show
rails_blob_representation,GET,/rails/active_storage/representations/:signed_blob_id/:variation_key/*filename(.:format),active_storage/representations#show
rails_disk_service,GET,/rails/active_storage/disk/:encoded_key/*filename(.:format),active_storage/disk#show
update_rails_disk_service,PUT,/rails/active_storage/disk/:encoded_token(.:format),active_storage/disk#update
rails_direct_uploads,POST,/rails/active_storage/direct_uploads(.:format),active_storage/direct_uploads#create

といった感じに表示される

キモはやっぱりActionDispatch::Routing::RoutesInspectorだと思う。Railsではルーティングの表示をWEBブラウザ上での表示や、rake routes等によるCUI経由など複数に渡る。それらを出力のフォーマットを設定すればオリジナルのルーティング出力器が作れるってわけ。

このへんはrails5以降でかなり洗練された気がする