タグ

ブックマーク / techtipshoge.blogspot.com (71)

  • Scala: implicit の使い方

    Scala の implicit の使い所をまとめておく。 Pimp My Library 標準機能やサードパーティライブラリのクラスを拡張したいときに使う。 object ImplicitInt { implicit class RichInt(val x: Int) { def negate: Int = -x def square: Int = x * x } }

  • Tech Tips: implicationとはどういう意味か

    最近何度か implication という単語を耳にして、イマイチしっくり来なかったので調べてみた。暗示、含蓄という意味の他に、結果、影響、関連事項という意味があるらしい。 Privacy Implications of the Internet of Things IoT技術のプライバシー影響 Performance implications of the architecture そのアーキテクチャのパフォーマンス影響 The Security Implications of Open Data in Healthcare ヘルスケアにおけるオープンデータのセキュリティ影響 〜によって引き起こされる影響、懸念事項くらいの意味があると覚えておくとよさそう。

  • Tech Tips: アメリカ就労ビザについて

    ソフトウェアエンジニアとしてアメリカで働きたい場合は、高度な専門知識を要する職業につくための「H-1B visa」というのを取るらしい。 毎年4月に応募が開始される 結果がでるのは10月 期限は3年 期限が切れたら再申請が必要 取得時の専門分野と異ならなければ転職も可能 応募数がvisa発行可能数を超えた場合は抽選が行われる アメリカの大学院を卒業した人には優先枠が設けられている 抽選に当たる確率(2018)は アメリカの大学院を卒業していれば55%くらい そうでなければ35%くらい 年度によって応募数は変わり、抽選がない年もある なるほど〜、入社試験をパスしてもvisa取れなかったら多分見送りとかになるのかな・・(よっぽど優秀な人であれば待ってくれるのかもしれないが)。

    Tech Tips: アメリカ就労ビザについて
    lugecy
    lugecy 2018/09/23
  • Tech Tips: Type I/II/III error

    まえがき 先日参加したニューヨークのカンファレンスのキーノートで、あるデータサイエンティストが以下のように話し始めた。 「みんなご存知のとおり、検定には3つのエラーがあります。Type I error、Type II error、Type III errorです。」 あれ、Type III errorって何だっけな?となったので調べてみた。 TLDR Type I error 偽陽性 帰無仮説を誤って棄却してしまうこと Type II error 偽陰性 帰無仮説を誤って採用してしまうこと Type III error 帰無仮説を誤った理由によって正しく棄却すること 易しい解説 実験によってえられた結果が統計的に正しいかどうかを検証する作業を「検定」と言います。たとえば、「セミのオスとメスの平均寿命は異なる」という主張を証明するために実験をしたとします。 このとき「セミのオスとメスの平均寿

    lugecy
    lugecy 2018/09/23
  • A Survey on Real Time Bidding Advertising

    元ネタ A Survey on Real Time Bidding Advertising 気付き - DSPはSSPから広告枠を買い付けていると思っていたが、厳密にはAd Exchangeから買っているらしい。SSPと思っていたサービスのサイトをよく見ると、確かにAd Exchangeと書いていた。 - 広告主からマージンをもらって儲けるOpen DSPと、自社の様々な事業の広告を配信して事業の売り上げ増加を目指すNative DSPでは戦略が違うので、その辺りを意識してサーベイする必要がある。 メモ RTB広告の成長 - 2017年にはディスプレイ広告予算の29%を占める見込み - 昔: プレミアムな在庫はオフラインで、残りはRTBで - 最近: プレミアムな在庫もRTBで DSPでは効率的な入札アルゴリズムが重要 - 最適な広告を選択する - 最適な入札額を決める DSPが目指すパフ

    lugecy
    lugecy 2018/04/22
  • L2接続とL3接続の違い

    関数の定義で f(x; θ) のような表記があった。 xとθの関数なので f(x, θ) でいいのではと思ったが、セミコロンで区切られている。 セミコロンで区切ると、セミコロンの前は変数、セミコロンの後はパラメータという意味らしい。 f(x; θ)はパラメータθによっ... C++のstd::swapを使うと std::swap(a, b) のようにして、変数aとbの値を入れ替えることが出来る。 これは配列に対しても適用出来る。例えば、以下のようにして配列a[]と配列b[]をスワップ出来る。 # include < iostre...

  • GCPとjavascriptでaccess trackerを作る(3)

    google container engineのクラスタを立てた deploymentとserviceの定義を書いた READMEを書いた alpineで動かすとgcpのライブラリのロードでこけることがわかったのでfixした データを投げる。 $ cat test.json { "userid": "610KZ4G0CBTI419Y", "timestamp": 1509290846000, "pageid": "test-page-001", "browser": "chrome", "country":"japan" } $ curl -H 'Content-Type:application/json' -d @test.json xxx.xxx.xxx.xxx/pv アプリケーションのログを確認する。 $ kubectl --namespace=backend logs -f acc

  • GCPとjavascriptでaccess trackerを作る(2)

    pub/subにデータをpublishする部分を実装した データをvaldationする機能を実装した expressに404と500のhandlerを追加した node.js向けのgcp client libraryは基非同期処理で書くようになっているが、callbackを省略するとpromiseオブジェクトを返してくれる。 promiseオブジェクトをチェーンで繋げて書くとうまく書けそうだが、繋げたいメソッドの入出力がうまくハマらなかったり、細かい例外処理をしたかったりすると、自分でpromiseオブジェクトを作成した方が書きやすい感じがした。たぶん自分のnode.js力が低いだけで、慣れてきたらもっとうまく書けそう。 gcpcredentials/projectidは環境変数に入れるとすっきりする。 jsonをバリデーションしたい場合は、jsonschemaというライブラリを使う

  • GCPとjavascriptでaccess trackerを作る(1)

    node.jsでサーバを書いて、Dockerで動くようにした。 https://github.com/Kenji-H/access_tracker/tree/v0.9.0 ローカルでの動作確認方法は以下のとおり。 まず、dockerを起動。 $ cd server $ docker build -t test . $ docker run --rm -p 8080:8080 test クライアントからリクエスト送信。 $ curl localhost:8080/status $ curl -H 'Content-Type:application/json' -d '{"userid": "610KZ4G0CBTI419Y", "timestamp": 1509130332, "url": "kenjih.com", "userAgent": "Mozilla/5.0 (Macintosh;

  • 単一障害点とは

    システム全体のアーキテクチャを考えるときに、「単一障害点」という概念が大事らしい。 意味は一目瞭然だけど、大切な概念っぽいので調べてみることにした。

  • IAMユーザにIPアドレス制限をかける

    AmazonS3ReadOnlyAccessをコピーして以下のようなポリシーを作る。(xx.xx.xx.xxのところは自分のIPアドレスを入れる) { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:Get*", "s3:List*" ], "Resource": "*", "Condition": { "IpAddress": { "aws:SourceIp": [ "xx.xx.xx.xx/32" ] } } } ] } AmazonS3ReadOnlyAccessをデタッチして、上記で作成したポリシーを代わりにアタッチする。 指定したアドレスから接続確認 S3にアクセスできることを確認。 $ aws --profile test-user s3 ls 2016-02-20 15:

    lugecy
    lugecy 2017/09/17
  • KMSを使ってみた

    はじめに AWSのKMS(Key Management Service)を使ってみた。 KMSを使うと以下のようなことができて嬉しい。 ソースコードに載せたくない情報(認証情報など)を暗号化できる 暗号化した鍵の管理をAWS側でやってくれる

  • [Blog Reading] Hiring SREs at LinkedIn

    SREの採用プロセスに関する話。SREに限らずエンジニアの採用プロセスについてのいい話が書いてある。 https://engineering.linkedin.com/blog/2017/07/hiring-sres-at-linkedin 人を雇いたいときは、その人に満たしてほしい特定のニーズがある その特定のニーズを満たすために必要なスキルはなにか 採用試験ではそのスキルだけをテストする まず電話・オンラインで試験をする(スケールしやすい) オンサイトでの試験は受験者/採用者ともにコストがかかる 複数回のオンライン試験をパスした有望な求職者のみをオンサイト試験に招待する オンサイト試験ではオンライン試験でやらなかったことをやる

    lugecy
    lugecy 2017/07/30
  • 並行と並列の違い

    並行(concurrent)処理とは、複数のタスクを非同期で同時に実行すること。 並列(parallel)処理とは、複数のCPUを使って複数のタスクを同時に実行すること。 つまり、並行の方が広い概念で、並列処理は並行処理の一種。 並行処理にはいくつかの実現方法が考えられるが、複数のCPUを使って物理的に同時に複数の命令を走らせているものを並列処理と呼ぶ。 ということで、場面によって使い分けた方がいいかもしれない。 複数のサーバを立てて並列処理をする マルチコアCPUで並列処理をする シングルコアマシン上でマルチスレッドを使って並行処理をする コルーチンで並行処理をする 並行の方が広い概念なので、並行処理と言っておけば間違いは少なそうだが、物理的に同時に実行するということを強調したい場合は並列と言った方がいいかもしれない。

    並行と並列の違い
  • Vagrantで共通のssh private keyを使う

    Vagrantで複数の仮想マシンを立ち上げて、仮想マシン間でsshの秘密鍵を共有したい場合がある。Vagrant 1.8でのデフォルトの設定ではマシンごとに異なる秘密鍵が生成される。 # -*- mode: ruby -*- # vi: set ft=ruby : Vagrant.configure("2") do |config| config.vm.box = "ubuntu15.04" config.vm.define "kafka-base" do |server| server.vm.network "private_network", ip: "192.168.33.11" end config.vm.define "kafka-connector" do |server| server.vm.network "private_network", ip: "192.168.33

  • VagrantのゲストOS間でホスト名参照

    # -*- mode: ruby -*- # vi: set ft=ruby : Vagrant.configure("2") do |config| config.vm.box = "ubuntu15.04" config.ssh.insert_key = false config.vm.define "kafka-base" do |server| server.vm.network "private_network", ip: "192.168.33.11" server.vm.hostname = "kafka-base" end config.vm.define "kafka-connector" do |server| server.vm.network "private_network", ip: "192.168.33.12" server.vm.hostname = "k

  • VagrantとAnsibleでKafka環境をつくる(6)

    zookeeperをサービス登録して、systemdから起動させるようにしてみた。 Ansible化はまだ出来ていないが、とりあえず手動で設定&起動できた。 以下のようなファイルを作っておく。 vagrant@vagrant-ubuntu-trusty:~$ cat /etc/systemd/system/zookeeper.service [Unit] Description=confluent platform zookeeper After=network.target [Service] ExecStart=/usr/bin/zookeeper-server-start /etc/kafka/zookeeper.properties ExecStop=/usr/bin/zookeeper-server-stop [Install] WantedBy=multi-user.targe

  • VagrantとAnsibleでKafka環境をつくる(5)

    前回Javaが入ったので、Kafka環境を入れてみた(成果物)。 KafkaはConfluent Platformを使う。手動でインストールすると以下のようになる。 # install confluent public key $ wget -qO - http://packages.confluent.io/deb/3.2/archive.key | sudo apt-key add - # add confluent repository $ sudo add-apt-repository "deb [arch=amd64] http://packages.confluent.io/deb/3.2 stable main" # update apt $ sudo apt-get update # install confluent platform $ sudo apt-get ins

  • VagrantとAnsibleでKafka環境をつくる(4)

    Oracle Java1.8を入れるplaybookを書いた(成果物)。 playbookはroleごとにまとめるのがbest practiceらしい。サーバの役割毎(common, web, dbなど)にroleを設定しているサンプルが多いので、それにならって、common, zookeeper, kafka, schema-registry, rest-proxyというroleをつくろうと思う。 今回書いたのはJavaのところだけなので、common roleにtaskを書いた。 作成したplaybookのsyntaxチェック。 $ ansible-playbook roles/common/tasks/main.yml --syntax-check playbook: roles/common/tasks/main.yml playbookを実行する。 $ ansible-playb

  • VagrantとAnsibleでKafka環境をつくる(3)

    $ vagrant plugin install sahara $ vagrant sandbox -h Usage: vagrant sandbox [] Available subcommands: commit off on rollback status sandboxモードを有効にする。 $ vagrant sandbox on $ vagrant sandbox status [default] Sandbox mode is on sandboxモードの状態で仮想マシンに何かインストールしてみる。 $ vagrant ssh default vagrant@vagrant-ubuntu-trusty:~$ tmux The program 'tmux' is currently not installed. You can install it by typing: sudo