君は心理学者なのか?

大学時代に心理学を専攻しなぜかプログラマになった、サイコ(心理学)プログラマかろてんの雑記。

【性格診断テスト】16 personalities - INFP 和訳その2

f:id:karoten512:20171012181120p:plain

(画像は “仲介者”型の性格 (INFP-A / INFP-T) | 16Personalitiesより)

16 personalities 診断

私はINFPタイプでした。

INFP

より多くの情報を知りたいと思い、こちらの本の一部を和訳してみました。

https://www.amazon.co.jp/gp/product/B01ES8UZ4A/ref=kinw_myk_ro_titlewww.amazon.co.jp

ハイライト

  • 友人を作るときは慎重

  • 一人でいることを楽しめるタイプだがたまには人と話したい

  • 読書が好き

  • 空想が好き

INFPの人間関係

INFPは簡単に友人を作ろうとしない。

友人はかなり慎重に選ぶ。

そうそう、だから友達が少ないのよねぇ(?)

INFPと孤独

INFPは一人でいる時間をとても楽しむことができる。

しかし、一人でいる時間が多すぎると飽き始める。

自分の好きなものに囲まれている限り、2〜3日一人でいることは苦にならない。

その後に、自分と親密な人と話したくなることがある。

とてもわかる。

休日に人と会うと消耗してしまうので、休日は極力人に合わないようにしている。

今日もいつもいくカフェでコーヒーを飲みながらパソコン開いてる。

INFPの人は一人が好きだが、

自分と親密な関係にある人といるのも好きである。

自分の愛する人と静寂を共有し、

平和で静かな場所にいるのがINFPにとって一番安らぐ。

はやくこうなりたい(棒読み)

INFPと読書

彼らの人生の大部分を占めるほど、読書を好む。

フィクションを好むことが多いが、面白いと思ったものはいろんな分野の本でも読む。

特に生物学や心理学などを好む。

大学の頃は生物学(人間限定)と心理学を勉強してたんだよなぁ。

INFPの好きなこと

自分の心を刺激するものや、心をより豊かにするものを好む

想像力を掻き立てるものや新しい分野に飛ぶこむチャンスを楽しむ

空想を楽しむ

余談

空想で思い出した。

中学生〜高校生の頃は絵を書いたりゲームを作ったり小説を書いていたりした。全部黒歴史

最悪なことにこの間データを発見してしまった。

よく「タイムマシンがあったらなあ」とか言う人いるけど、

実はそんなもんはそこらじゅうにあります。

昔のUSBは全部タイムマシンです。意外と身近にあるもんだね。

ファイルを開いてタイムスリップして悶絶するまでがセットなのですが、

昔の自分は案外賢かったらしく、「黒歴史の核心」データだけ削除されてたりします。

闇が深い。

中途半端に覚えているもんだから、「黒歴史の核心」データがないことにもやもやします。

10年先輩になった私をじわじわ苦しめてくれる。

やるじゃん。中学時代の自分。

ピザ◯ラから100枚のピザが届くまで 〜 CSRF対策とは(その1)

CSRF対策とは

自分の中で曖昧になっている部分があったので、整理してみました。

これから3回に分けて解説しようと思います。

  • その1「CSRF攻撃」について

  • その2「CSRF対策」について

  • その3「RailsにおけるCSRF対策」について

CSRF攻撃とは

CSRF攻撃は正確に言うと、

「クロスなんちゃらかんたらフォーなんたら」と言います。

難しいので簡単に言うと、

  • 悪い人が使うwebサイト攻撃方法
  • これをされるとすごく困る
  • 具体的には「ピザ◯ラから100枚のピザが届いたり」する

そこで今回は、どうやったら「ピザ◯ラから100枚のピザが届いたり」するのかをシミュレーションしてみました。

正常な処理

ログイン前

f:id:karoten512:20171013192916j:plain

Aさんがブラウザを用いて、サーバとやり取りをしています。

ログイン前はCSRF攻撃は行われません。

ログイン後、購入ボタンを押すまで

f:id:karoten512:20171013193238j:plain

ログイン後、サーバから「正しいサイト」が帰ってきました。

f:id:karoten512:20171013193351j:plain

たくさんのピザから1枚を選んで購入ボタンをクリックします。

f:id:karoten512:20171013193435j:plain

サーバに向かって、「cookie」「data(正確にはリクエストbody)」が送られます。

dataには「ピザ1枚」という情報が入っています。

サーバ側でユーザ特定を行い、購入処理を行う

f:id:karoten512:20171013193628j:plain

cookieからユーザAであることを特定し、

サーバは購入処理を行います。

無事1枚のピザの注文が完了しました。

CSRFによる攻撃

ログイン後、Aさんが偽サイトにアクセスするよう第三者が誘導する

f:id:karoten512:20171013194046j:plain

Aさんがログイン後、

知らないアドレスからメールが送られてきました。

メールにあった怪しいリンクをクリックすると、

いつも使っているピザ◯ラのサイト(実際は違う。よく似せて作っている偽サイト)が出てきました。

f:id:karoten512:20171013194339j:plain

偽サイトにあった「お得!クリックしてね」ボタンをクリックします。

f:id:karoten512:20171013194517j:plain

偽サイトには、「ピザ100枚」という情報をdataとして送るように指定してありました。

恐ろしいですね。

でもきっとサーバなら「こいつは嘘サイトだな」と判別してくれるはずです。

サーバ側でユーザ特定を行い、購入処理を行う

f:id:karoten512:20171013194631j:plain

サーバはおもったよりもアホでした。

cookieデータは正しいので、cookieからユーザAであることを特定し、

サーバは購入処理を行ってしまいました。

Aさんの家には無事、ピザ100枚が届きましたとさ。

何が問題か

リクエストが正しいサイトから送られてきているのか

をサーバが判別することが出来ていないのが問題です。

逆にそれさえ解決してやれば、CSRF攻撃を防ぐことができそうです。

ではどうやって防ぐのか。

次回に続きます。。。

Railsのrenderメソッドについて、xml, html, jsonで試してみる

htmlで返す

render html: 'content'
class ApplicationController < ActionController::Base
  protect_from_forgery with: :exception
  def hello
    render html: '<ul><li>hello world</li><li>good bye world</li></ul>'
  end
end

ブラウザ上の表示

f:id:karoten512:20171012223709p:plain

あれ。うまく表示されない。

エスケープされてしまっている。

調べるとhtml_safeを用いればhtml要素がエスケープされないらしい。

class ApplicationController < ActionController::Base
  protect_from_forgery with: :exception
  def hello
    render html: '<ul><li>hello world</li><li>good bye world</li></ul>'.html_safe
  end
end

うまくいった。

f:id:karoten512:20171012223825p:plain

レスポンスヘッダ

f:id:karoten512:20171012224230p:plain

MIMETYPEがtext/htmlになってる。

xmlで返す

render xml: 'content'
class ApplicationController < ActionController::Base
  protect_from_forgery with: :exception
  def hello
    render xml: '<tag>hello world</tg>'
  end
end

ブラウザ上の表示

f:id:karoten512:20171012223415p:plain

レスポンスヘッダ

f:id:karoten512:20171012223429p:plain

jsonで返す

render json: 'content'
class ApplicationController < ActionController::Base
  protect_from_forgery with: :exception
  def hello
    render json: '{"name": "carotene", "gender": "male"}'
  end
end

ブラウザ上の表示

f:id:karoten512:20171012224905p:plain

レスポンスヘッダ

f:id:karoten512:20171012224920p:plain

まとめ

xmlだったらRSS配信とかに使えるイメージ。

jsonは普通にapiかな。おそらくapiとして使う場合はjbuilder等のtemplateエンジンを使うみたい。

【性格診断テスト】16 personalities - INFP 和訳その1

f:id:karoten512:20171012181120p:plain

(画像は “仲介者”型の性格 (INFP-A / INFP-T) | 16Personalitiesより)

16 personalities 診断

転職にあたって「私ってどんな人間なんだ?」と思いこちらをやってみました。

16 personalities 診断

私はINFPタイプでした。

INFP

より多くの情報を知りたいと思い、こちらの本の一部を和訳してみました。

www.amazon.co.jp

【3行で】INFPタイプは何を退屈と感じるか?

  • 中身の無い話

  • 浅いつながりを求めた人たちが集まっている部屋にいること

  • 単調な作業

すごい当たってる。。。笑

ただこれ、大体の人が嫌いな気もしてます笑

INFPタイプは何を退屈と感じるか?

このタイプの人たちは、雑談や無意味で浅く見えるものを嫌います。

人との深くて本当のつながりを楽しむことが出来ます。

人との本当のつながりをもとめていない、無目的な人たちが集まる部屋にいるとき、

このタイプはおちつかなさと退屈さを感じます。

彼らは人生において誠実さや意味をもとめており、

人とより深いレベルでつながることを望んでいます。

無益で浅い話を無理やり聞かされていると、彼らはとてもイライラします。

人に刺激されることを楽しみ、想像力を掻き立てられないと退屈さを感じます。

彼らを感情的・精神的に刺激してくれるものを楽しみ、

自分の気持ちを興奮させてくれることを求めています。

彼らは単調なタスクをすると、とても疲れと退屈さを感じます。

16 personalities診断で、長年の謎がとけつつある

パーティー的なところに行くとすごく疲れる。 とか、

誘われていったはいいけどものすごい居心地の悪さを感じるなあ。 とか、

長年感じていた疑問がここ最近解決しているのを感じます。

この間誘われていった飲み会ではひたすら日本酒を呑んでたしなあ。一人で。

周りがパーティーピーポーばかりだった。日本酒は美味しかったけども。

16 personalitiesかなり面白いので、ちょこちょこ和訳続けていこうと思います。

では今日はこのへんで。

意思決定は殺人と同じだ。

はじめに

今月に入って僕は8人殺害している。

どいつも悪い奴ではなかった。

どちらかというと皆、可能性に満ち溢れた奴らばかりだった。

そんな人たちを次々に殺めていく。
ちょっと首を締めるだけで、人は簡単に死ぬ。

そんなことを思う。

首を絞められながらもがき苦しむ彼ら。苦しいだろう。首を締め上げている僕はもっと苦しい。

僕が殺めている相手は、すべて「選ばれなかった僕自身」だ。

転職活動中の私と意思決定

今私は、転職活動中です。

最近ものすごく辛いことがあります。

意思決定です。

いろいろあった選択肢

スタートアップ、 ベンチャー、 中小、 大手。

選択肢はいろいろありました。

スタートアップに行った私を想像してみました。

毎日いろんな仕事が降ってくる中、生き生きと働いていました。

大手に行った私はその後独立し、

大手時代の看板を活用して大きな仕事を受注していました。

楽観的すぎるかもしれません。

ただどんな姿であれ、

それぞれの道を「可能性として存在する私」が歩いていました。

選ぶことは殺すこと

しかし、選べるのは1人の私だけです。

そこで私は、それぞれの道を歩いている私に近づいて首を絞めました。

…最終面接お断りメールです。

それを企業に送りました。

いつしか、

意思決定は殺人だと思うようになりました。

面接お断りのメールを送って一人殺し、

スタートアップに誘ってくれた知人に電話をして一人殺す。

気がつくと、私の足元には死屍累々の景色が広がっていました。

生き残っているのは私一人だけだった

今まで気がつかないうちに、本当にたくさんの私を殺してきました。

今日も渋谷の東急入り口にて、一人殺しました。

死んでいった私たちのためにも強く生きよう。

そんなことを思いながら渋谷を後にしました。

Rails Tutorial、始めました。

ちょっと本腰入れてRailsの勉強をはじめていきます〜。

まずはRails Tutorialから。

https://railstutorial.jp/

進捗報告していきますのでよかったら読んでみてください。

ではでは。

Angular2/4にて、フォーム(input)へのキー入力&入力内容(value)を検出する

Angular2/4にて、ユーザのキー入力を検出する

Angular2/4にて、ユーザがフォームへ入力をしたこと検出してみたいと思います。

さらに、ユーザがエンターキーを押したときに、今まで入力した内容を取得してみます。

ユーザのフォーム入力を検出

0. プロジェクトを立ち上げる

ng new get-keyup

1. templateファイルを以下のように修正

<!-- app.component.html -->
<input type="text" (keyup)="getKeyupEvent($event)">

inputタグに(keyup)というイベントを登録するのがポイントです。

2. AppComponentにInputを追記

/** app.component.ts */
export class AppComponent {
  /** ここから */
  getKeyupEvent(event)
  {
    console.log(event);
  }
  /** ここまで追記 */
}

イベントを受け取って、コンソール出力します。

結果

f:id:karoten512:20171005182408g:plain

KeyboardEventというイベントが取得できました。

打ち込んだキーの種類・内容が取得できているようです。

f:id:karoten512:20171005182002p:plain

さらに中を覗いてみると、かなりいろいろな情報が取得できているようでした。

jsで取得できるKeyboardEventと同じかな?

参考:https://developer.mozilla.org/ja/docs/Web/API/KeyboardEvent

フォームに入力された内容を、エンターキーを押したときに取得

0. templateファイルを以下のように修正

<!-- app.component.html -->
<input type="text" #input (keyup.enter)="getInputValue(input)">

inputタグに(keyup.enter)というイベントを登録すると、エンターキーが入力されたことを検知してくれます。

getInputValueには、templateの変数であるinputを定義して渡します。

1. AppComponentを修正

/** app.component.ts */
export class AppComponent {
  /** Inputの値を検出 */
  getInputValue(input)
  {
    console.log('エンターキーが押されました');
    console.log(input.value);
  }
  /** ここまで追記 */
}

イベントを受け取って、コンソール出力します。

簡単。

結果

f:id:karoten512:20171005183822g:plain

こんな感じになりました。

Enterキーをきっかけにイベント発火させるのはよく使いそう。

Angular便利。