Screaming Loud

日々是精進

SprayからAkkaHTTPへ ~ライブラリのマイグレーション~

みなさんいかがお過ごしでしょうか? 最近NierAutomataクリアしました。

今回はSprayからAkkaHTTPへの移行に関して紹介します。

f:id:yuutookun:20170331154200j:plain

SprayとAkkaHTTPとは?

  • SprayとはシンプルなScalaのHTTPフレームワーク(というよりモジュール)。すでに開発がストップしており、新しく使うのは非推奨。
  • AkkaHttpとはSprayをベースにしたHTTPライブラリでAkkaライブラリのうちの一つ。

AkkaHTTP1.0がSprayのパフォーマンスを上回ったというブログも出ています。 http://akka.io/news/2015/07/15/akka-streams-1.0-released.html

移行開始

マイグレーションガイドというのが、以下にあります。 http://doc.akka.io/docs/akka-http/10.0.5/scala/http/migration-guide/migration-from-spray.html

ここに従って進めればできるのですが、移行における指針と詰まったところを紹介できればと思います。

続きを読む

Scala用のコレクション操作の拡張ライブラリsansyo(山椒)を作りました

タイトルの通り、Scala用のコレクション操作の拡張ライブラリを作りました。

名前はsansyoです。

意味としては、 「山椒は小粒でもぴりりと辛い」 から来ていて、コレクションの拡張ライブラリのため、小さいですが便利になるものとして作りました。

ライブラリのサイズとしても小さいので、気軽に入れてもらえるかと思います。

github.com

作成方針

方針としては、標準のScalaだけを使ってる人が簡単に導入できるように作りました。

また、implicit conversionで作っています。 objectの名前は ~Utilsなので一般的ですが、 implicit conversionで作っているため名前衝突はしないかなーと思っています。

機能

今すでに作っているものとしては3つです。 使い方の細かいところはQuickStartを見ていただければと思います。

emptyOrElse

OptionはgetOrElseがあるのですが、Seqはそれに当たるものがないため作りました。

partitionMap

partitionMapはpartitionをした後、分けたものに対して同じ処理を行うものです。

grouping

tupleのSeqをMapにするものです。 単純にgroupByをすると、Mapのvalue部分が元の配列のtupleになってしまうのですが、 結構元の配列を使うことが少なくて、tuple._2のほうが欲しいことが多くて、このメソッドを作りました。

まとめ

もし使ったり、プルリクなど送っていただけたら幸いです。

最新技術とビジネスとしての成功

自分のツイートをまとめてみた。




混同しがちな話

さらに混同しがちなのが、

  1. 新しい技術
  2. 雑でいいからスピード勝負

とは違う。
どちらもプロダクトを早く世の中に出すという思想。

違い

【新しい技術】
デメリット:技術検証というリードタイムが発生し、リリースが遅れてしまう。
作り直すタイミング:新しい技術に乗り換える。既存技術では耐えられないサービスヒット。

【雑でいいからスピード勝負】
デメリット:拡張性を考えられていないなどサービスが当たった後、根本からスケールできないような設計になってしまっている。
作り直すタイミング:サービスがスケールしたとき


合わせて読みたい
Open database life: ムック「データベース徹底攻略」 - MySQL/Redis/MongoDB/Redshift

「考える」とはなんだろうか

考えるとはなんだろうか?

時々「自分は考えずに行動してしまうなー」と思っていますが、
そのときの考えるとはなんなのでしょうか?

数学の問題

例えば、数学の問題を考えることについて
これは、ある解けない問題に対して、自分の知っているパターンを次々適用し、どのパターンがその問題に対して最適かどうかを見つけること。

この「考える」の中では、
思い出す、予測する、適用する
が含まれています。

チームの課題

例えば、チームの課題を考える
チームの課題を考えるという際は、

  1. まずチームで実施した事象を思い出す
  2. その中で失敗だったものを抽出する

ここにおける「考える」は、
思い出す、適用する
が含まれていると思います。

企画

例えば、企画を考えることについて
企画を考えることとは、その企画を体験する人たちに「よかった」と思われる段取りを決めることと同義だと思います。
では、何かを企画しよう!というときに、どういう思考過程を経ているのでしょうか?

  1. まず課題が何かを特定
  2. 今まで自分が体験した面白いことを思い起こす。
  3. 流行っているものを収集する
  4. 今までになかった組み合わせを思考実験する
  5. 段取りを決める

ざっくりこんなイメージ(自分は企画専門ではないので、フローが間違いはご了承ください。。)

この「考える」には
思い出す、探す、予測する、適用する
かと思います。

「人の気持ちを考えろ!」

例えば、人の気持を考えるについて
人の気持を考えるとは、相手がどうしたら喜んでどうしたら悲しむか、相手の感情がどうしたら動くかをパターンマッチさせることかと思います。

この「考える」には、
思い出す、適用する
かと思います。

結局どういうこと

結局考えるとは、
・自分の知っている知識から「思い出す」
・その中から、最適なパターンを「見つけ出す」
という過程をあわせたものかなと思います。
ただ、その知識というのは具体的な知識(例えば微分の解き方みたいなもの)だけでなく、人間との会話の経験や遊んだ体験なども含まれています。

しっかり考えられる人とは?

しっかり考えられる人とは、上の「思い出す」と「見つけ出す」の両方がうまくできる人かと思います。

上記の「知識」を増やすということは、勉強をしてたくさんの知識をつけることにもあると思いますが、それとは別にたくさんの体験をしているかということも知識を増やすことにつながります。
なぜなら、人の感情がどうやったらどう変わるかなどは、勉強してもわからないことです。(心理学などはありますがw)
でも人間にとって何かを経験できる回数はたかが知れているため、書物という人類の遺産で補うのです。

「見つけ出す」というのは、生まれもっているものに近いので、考える力を養う上では、たくさんのパターンを知ることが近道かと感じています。

まとめ

最初の「考えずに行動してしまう」とは、3パターンあると思っていて、
1. 過去の失敗を思い出していない
2. そもそもそのパターンを体験していない
3. 似たようなパターンは体験したが、今回のパターンにマッチさせられなかった
というものです。

人間は年をとると失敗しづらくなるといいます。
しかし、失敗をしなければ思い出す対象にもなりません。
人間として豊かな思考を持つには、大量の経験を行い、その経験をクラスタリングすることかと思います。
新しい体験とは人間にとって大きな心理的抵抗がありますが、それを乗り越えることで「考える」ための材料が増えると考えるとちょっと試してみたくなりませんか?
(辛い道を行くというのも、こう考えると理にかなっているかも)