Scala
これはClassi Advent Calendar 2018の3日目の記事です。 Classiでいろいろやってるしんぺいです。最近は「Scala入学式」と称してScalaに入門してもらう社内勉強会を主催しています。 というわけで今日もScalaの話です。 Seqの +: と :+ Scalaには順序を持っ…
別に知見は書いてないですが、なるほどなーと思ったという感想を書いたエントリです。 ScalazとHaskellのFunctorの提供するmap(fmap)は、引数の順番が異なります。 Scalaz の Functor def map[A, B](r: F[A])(f: A => B): F[B] F[A] なFunctor値が最初の引数…
ScalaMatsuriに参加したからというわけではありませんがScalaの話題を。 まず最初に直和型とは 例えばOptionみたいなやつです。Optionは、「必ずSome か Noneのどちらか」であるような型ですが、こういう「必ずAかB(かCか……)である」というような型を直和…
今回は時間がないので簡単に見ます。 型クラスによってアドホック多相が実現されるとどんな柔軟なことができるのかという例を見ましょう。 たとえば、List#max について見て見ましょう。これ、要素が String だったら辞書順での最大値を返すし、Int だったら…
前回の記事では、Scala では implicit parameter を利用することで型クラスと同等のことが実現できることがわかりました。しかし前回の疑問として、「で、それの何がうれしいのよ」というのは残っていましたね。 今回はそのうれしみをなるべくわかりやすく説…
なんか型クラスとか言うと型の怖いひとたちが怖い話をワイワイしてるイメージがありますよね。わたしはあります。「で、それって何がうれしいのよ」とか、そういう話はあまりされていないような印象がありますね(あくまで印象です)。その上 "Scala の impl…
Scala 一年生のわたしですが、僭越ながら「みんなで Scala に入門しようぜ!」というハンズオン形式のセミナーの講師を行ってきました。「Scala 入学式」という名前は papix 氏がやってる「Perl 入学式」のパクりです! この勉強会に使った資料は以下にアッ…
馬鹿にはマルチスレッドは複雑すぎる わたしマルチスレッド怖いんです。なんでかっていうと、あれ、これってスレッドセーフだっけ?とか考えないとだめだし、えーっとこの変数は別のスレッドからアクセスされる可能性があるから〜とか考えないとだめ。あとロ…
おかげさまでご好評をいただいている突然死botですが、初めて Scala で書いたプロダクトだったゆえかなり凄惨なソースとなっておりました。 そこで、最近ようやく Scala にも慣れてきたので、specs2でmockito使ってテストするのの練習もかねて、エイヤっとリ…
PipelinePorts を作ってそこにコマンドやイベントを流し込めば普通に結果が返り値で返ってくるのでテストを書きやすい val pipelinePort = { val ctx = new PipelineContext {} PipelineFactory.buildFunctionTriple(ctx, new YourPipelineStage) } // パイ…
ちゃんと Terminated が送られてくる see http://doc.akka.io/docs/akka/2.2.0/general/supervision.html#what-lifecycle-monitoring-means One important property is that the message will be delivered irrespective of the order in which the monitori…
こんな感じでどうでしょうね。 解説はコメントを参照のこと。 import akka.actor._ import akka.actor.Terminated import akka.io._ import akka.io.IO import akka.util.ByteString import java.net.InetSocketAddress import scala.collection.immutable.{…
APNsGatewayServer を書こうの巻 えー。APNsとのやりとり部分を書くのはなにげにとても面倒です。面倒な理由として プロトコルがアップルのオレオレプロトコルであり、なおかつバイナリでやりとりしている APNsサーバーに対してリクエストを送っても、基本的…
解決したい問題 Akka でネットワークサーバーを書く場合、エンコード/デコードの部分は Pipeline を利用し、TCPレイヤーの IO をその Pipeline に流し込む場合は TcpPipelineHandlerを利用するのが定石だと思いますが、ではサーバーがレスポンスを返したあと…
アホなので implicit conversions みたいな魔術っぽいことされると「えっなになに」「なにが起きてるの」ってなってしまって混乱する。いままでの「なんとなくこんな感じのアレだよね」みたいなやつとしては、たとえば String を wrap するような SugoiStrin…
こんな感じで実装できた。Option (Haskell で言うところの Maybe)はモナドの中でもかなりわかりやすく実装しやすい。foreach とか filter は実装してない。 ただ、これだけがあっても、map や flatmap とか foreach とかを組み合わせたときに読みやすい感じ…
https://github.com/Shinpeim/ChatServerAkka2_2 もっとキレイに書けないもんなのかな〜
!!!!!!この記事は古い情報を扱っています!!!!!! Akka 2.3 からは Pipeline はなくなっています。この記事の内容は古いです。気をつけてください 前回までのあらすじ 自信満々で日本一わかりやすい Akka の IOManager と SocketHandle(やServerHa…
前回のエントリ にあまりに悲しいオチが付いたが、気をたしかにもって Akka 2.2 でのエコーサーバーを書いてみた。 このあたりの感じは IOManager のときとあまり変わらない。むしろわかりやすくなっている気がする。 Mainから読んでいって Server.scala、Cl…
ちょっとこのあたりが複雑に感じたので、一度整理しておく。まぁ全部「公式読めば書いてあるよ」で OK なんだけど、それではあまりにマッチョすぎるしわたしがあとから参照したいしみたいな感じ。 IOManager とはなにか Akka でIOを扱うときには、 IOManager…
スナップショット => https://github.com/Shinpeim/ScalaChatServerSample/tree/d18399985dcca22f4f593593ad02230c4a9f402f サーバーソケットに責任を持つアクターと、クライアントソケットに責任を持つアクターを別々にしてみた ひとつの接続に対してひとつ…
!!!CAUTION!!! この記事で扱っている IO のインターフェイスは Akka 2.2 で すでに old-io 扱いとなり( http://doc.akka.io/docs/akka/2.2.0/scala/io-old.html )、Akka 2.3 からは削除されてしまっています。 今ならばこちらを参考にされたほうがいい…
以前 Ruby の練習として、following の発言を 突然死ナイズする Twitter の bot を書きましたが、おそらく鍵アカに対してもホイホイ follow リクエスト送るみたいな挙動がお行儀が悪かったのでしょう、だいぶ昔にアカウントが凍結されておりました。 そのあ…