by shigemk2

当面は技術的なことしか書かない

akka.ConfigurationException: configuration problem while creating ....

切り分けは重要です。

  • まずはエラーメッセージを読むこと。
  • どこでコケているか確認すること。

Scala/Javaのエラーは自分で実装していないところのエラーも出してくれるけど、逆に言うと自分の書いたプログラムのどこでこけているのか分かりづらかったりします。とりあえずエラーメッセージを読みます。で、自分の書いたコードでエラーが出ているかどうかと、エラーメッセージを確認しましょう。

akka.ConfigurationException: configuration problem while creating .... なるエラーが出たら、設定ファイルが正しく置かれていないことを疑うべきです。

たとえばこういうふうにアクターを定義しているとして、FromConfigで設定ファイルを呼び出しているけど、ここで設定ファイルが存在しなかったら怒られる。

val router1 = system.actorOf(FromConfig.props(Props[MessagePrintActor]), "router1")

src/main/resources/ の下にapplication.confがないと読み取れなくて怒られる。

Configuration — Akka Documentation 設定ファイルはクラスパスのルートから読み取れるらしいけど、IntelliJだったらどこに設定ファイルを置いたらいいかは File→Project Structure→Modules→Resource Foldersから確認したらいいと思います(下画像参照)

f:id:shigemk2:20160815182527p:plain

DSKとは

DSKとは、AdWordsに登録したキーワードをもとにプレースメントを選定し、その中でもCV確度の高いユーザーが集まるプレースメントに対して広告配信を行うターゲティング機能です。キーワードターゲットの強化版という位置づけです

キーワードターゲットの強化版、adwordsの一機能。

GDNのターゲティングの種類と活用方法を解説|デジタルマーケティングラボ

運用型広告

電通が出してる日本の広告費2012から。

http://www.dentsu.co.jp/news/release/pdf-cms/2013016-0221.pdf

運用型広告とは、膨大なデータを処理するアドテクノロジーを活用したプラットフォームにより、広告の最適化を自動的にもしくは即時的に支援するような広告手法のこと。検索連動広告のほか、新しく登場してきたアドエクスチェンジ/SSP/DSP などが典型例。また一部のアドネットワークもこれに含まれる。なお、枠売り広告のほか、タイアップ広告やアフィリエイト広告などは、運用型広告には含まれない。

っていうふうに電通が定義しているけども、そもそも広告って運用されるものじゃないか?というツッコミはあります。

ROI / ROAS

利益のパフォーマンス vs 売上のパフォーマンス。

Return On Investment(投資の効果)

ROI=(平均単価×コンバージョン数-コスト)÷コスト×100

Return On Advertising Spend(広告の費用対効果)

ROAS=売上÷コスト×100

ferret-plus.com

両方見ないといけない。

単価1万円でコンバージョン5、広告費が4万だったら、ROIが(10000 * 5 - 40000) / 40000 * 100 = 25%で、ROASが50000 / 40000 * 100 = 125%。利益がよくない。

PostgreSQLのスキーマとsearch_path

スキーマはデータベースを「用途別に分割した単位」としてとらえる

MySQLにはない考え方。データベースの中に、スキーマ。そして、PostgreSQLではユーザーはpublicスキーマに割り当てられる。割り当てられるので、set search_pathで別のスキーマに割り当てることもできる。

set search_path to hogehoge

thinkit.co.jp

https://www.postgresql.jp/document/7.3/user/ddl-schemas.html

ghqで複数アカウントを使い分ける

qiita.com

このように書いてあって、このスクリプトは、

private-ghq get git@github.com:hogehgoe/fugafuga を実行したときに、cloneしたリポジトリ直下に.gitconfigを自動的に作成してくれるもの。つまり、複数アカウントに対応するためには別のことをする必要がある。

github_host = "private.github.com"

username = "xxxx"
email = "xxxx"

if ARGV[0] == "get"
  args = []
  repo = ""

  ARGV[1..-1].each do |arg|
    repo = arg if arg.match(/^git@github.com/)
    args << arg.gsub(/^git@github.com/, "git@#{github_host}")
  end
  system "ghq", "get", *args
  exit_code = $?.to_i

  unless repo.empty?
    dir = repo.match(/^git@github.com:([^.]*)(\.git)?/)[1]
    ghq_root = `ghq root`.chomp

    Dir.chdir(File.join(ghq_root, "#{github_host}/#{dir}/")) do
      system "git config user.name '#{username}'"
      system "git config user.email #{email}"
    end
  end

  exit exit_code
else
  exec "ghq", *ARGV
end

dev.classmethod.jp

それは、こういうこと。

  1. 普段使いとは別のssh鍵を作成する(同じ鍵を複数アカウントで使い回すことはできない)
  2. 別アカウントに1で作ったssh鍵を登録する
  3. .ssh/configに以下のような設定を追加する
Host github-private
  User git
  Port 22
  HostName github.com
  IdentityFile ~/.ssh/github-private_rsa
  TCPKeepAlive yes
  IdentitiesOnly yes
  1. 実際にcloneするときは、git@github-private:nonakaryuichi/git-test.git みたいな感じで実行する。