Screaming Loud

研究・プログラミングなど気づいたことをメモをしています。読書記録はこちらに記載しています。https://bookmeter.com/users/75944

scala

play2.4向けにi18n(国際化)をアップデートした話

概要 以前GlobalSettingの撲滅に関してブログを書きましたが、言語対応に関して書いていなかったので、続編ということでブログにまとめました。 yuutookun.hatenablog.com 概要 前提 根本対応 1.コントローラーをInjectionの形に移行 2.DefaultMessageAp…

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

みなさんいかがお過ごしでしょうか? 最近NierAutomataクリアしました。 今回はSprayからAkkaHTTPへの移行に関して紹介します。 SprayとAkkaHTTPとは? SprayとはシンプルなScalaのHTTPフレームワーク(というよりモジュール)。すでに開発がストップしてお…

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

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

Play2.4で非推奨のGlobalSettingをなくす

Play2.4で非推奨、かつPlay2.5ではなくなっているGlobalSettingの消し方を紹介します。 なかなか大変なので、ブログにまとめておきました。 Global.scalaで書いていたコード Play2.3で書いていたGlobal.scalaのコードを記載します。 object Global extends W…

fileを開いて指定行数分取得する

fileを開いて、指定行数の分だけ取得するというロジックを作成していたのですが、 そもそもinputが指定行数以上あるかどうかを知りたかったので、そこもうまく取得できるような実装にする必要がありました。BufferedReaderで最後の値が、nullになるので、nul…

Scalaの値クラスのバグ?

値クラスを使っていて不可解な挙動があったので、まとめたのとその対処法をメモしておきます。 値クラスとは 値クラスとはIntやStringが継承しているAnyValを継承させたクラスです。 一つの値しか持ちませんが拡張メソッドを実装できるため、DDDなどを実現す…

spray-canで何故か同時に接続できずconnection reset by peerが発生する

sprayフレームワークを使っていると、HTTPリクエストの部分はspray-canを利用すると思います。しばらく、spray-canを使っていたのですが、いくつか重い処理を走らせるとCPUを使い切っていないのに、sprayがリクエストを受け付けなくなってしまい、502 BadGat…

scalaのクエリビルダー「quill」を使ってみた

takezoeさんがquillを紹介していたので、 Scalaの新しいデータベースアクセスライブラリ「quill」を試してみた - たけぞう瀕死ブログ 実際にどんな感じで使えるのかを試してみました。http://getquill.io/getquill.io結論、Slick2系から置き換えるのはなかな…

最短でsbtのコマンドを追加する方法

sbtと打つとREPLが起動し、runしたりtestが走らせられたり色んな挙動をさせられる。しかし、自分でコマンドを作ろうと調べてみると、案外出てこない。ということで最短でコマンド作成を紹介します。 最短でHelloという文字を出力させる Helloという文字列を…

scalaNLPに含まれているライブラリを調べてみる

Scalaにもnumpy, scipyのような数値計算ライブラリがあります。ScalaNLPというレポジトリで登録されています。 github.comでは、どんなものがあるか調べてみます。 breeze Breezeは、数値計算ライブラリです。 numpyのようなもので、行列計算などを操作する…

scalaからProcessを使って違うディレクトリでshを叩く

scalaでは他の言語でもできるように、コマンドを叩くことができます。実際に色んな方が、Processの仕方を紹介をしています。 scala.sys.process | Scalaの標準ライブラリを使ってみる | mwSoft Scala 2.9.0のscala.sys.processパッケージが便利過ぎる件につ…

scala(breeze)で重回帰を実装

重回帰とは 重回帰は色んな所に転がっているので今更書かなくてもって感じですが、簡単に。 ある地域の住宅価格を求めたいとなった時に、ランダムで価格を当てるよりも何かの影響を受けて価格が変動すると考えるのが自然です。そこで上のような住宅価格は色…

slickのcase classをつくるのがめんどくさかったので、スクリプトで作った

slickのcase classをつくるのがめんどかったので、SQLを投げればcase classとTableを生成するスクリプト作りました。 (すでにslick-code-generatorとかある。車輪の再発明。。) Schema code generation — Slick 2.0.0-RC1 documentation 作った経緯として…

slickにおける動的にwhere句を作る

Slickにおける動的where句の作り方 現在最新は3系ですが環境としては、Slick2.1での書き方での紹介です。 Documentation | SlickSlickにおいて動的にwhere句を作るのは、案外Scalaを始めたばかりだとうまくいきません。以下の様なクラスに対して複数の検索を…

単層パーセプトロンをScalaで実装

久しぶりに実装してみました。 多分実装できていると思います。。実装に関してはPythonと同じ位簡単なんですが、 Scalaでやる場合は、データセットの読み込みとかランダムデータを作るのが結構めんどいんで、どうするのがいいのかってところが困りますね。以…

ScalaにおけるSeq, Option, Futureとmap,flatMap の扱い

Scalaにおける一つ目の関門は、forやmapを使ってOption型を操作することだと思います。そこで、forやOptionやFutureを理解しやすいようなイメージを共有したいと思います。 Scalaでのmap 「Scalaの型でのラッピングは同じ扱い」 これは何かというと、Seqであ…

flywayに関して発表しました!

今回はflywayに関して、発表しました。flywayとは、DBのマイグレーションツールです。マイグレーションツールというと、RailsのActiveRecordが一番有名かと思いますが、 言語を問わず、存在します。今回は、ScalaやJavaなどのJVMと親和性が高いflywayに関し…

あなたはPlayに貢献していますか?

少し偉そうなタイトルをつけてしまったのですが、Playを使っている方はぜひやるといいなーと思ったことを紹介します。それは・・・・、 PlayFrameworkの翻訳 です。あんまり気づかないかもしれませんが、じつはプルリクで全て管理しています。 (別に自分は…

Slickで複数のDBスキーマのトランザクションを行う

Slickでのトランザクション Slickでトランザクション処理を行うとすれば、公式のドキュメントに載っているように以下の様な処理を書けば良いと思います。 db.withTransaction{ implicit session => // your queries go here } 一般的にDB間をまたいでトラン…

初めてのLTの発表@実戦でのScala

人生で初めてLT発表をしてきました。今まで、研究室や社内の勉強会では積極的に発表はしていたのですが、 いざ外部となると、ものすごく緊張しました。やはり、社内などの小さいコミュニティであれば、 聴講者のレベル感などがだいたいわかるので、それに合…

scalaでssh処理(ssh, scpなど)

scalaでssh処理をしたい!ってなった時に、まず思いつくのは、sys.processだと思います。 sys.processを使えば、生のコマンドが実行できますので、自由にsshだったりなんだったりできます。しかし、sprayやAkkaのコミッターである sirthias (Mathias) · GitH…

slickとspecs2を使った際のハマったエラー文

一応、slickとタイトルに書いてありますが、ハマったのは、specs2の仕様に対してです。 やってたこと specs2を使い、Model周りのテスト。 該当クラス以外のメソッドに対しては、Mockを差し込んでテスト。 ハマったこと その1 【謎のエラー】 [error] Invali…

slickでコネクションプーリング

slickでコネクションプーリングを使おうとしても、slick自体ではサポートしていない。 Connections / Transactions — Slick 2.0.0-M3 documentationそこで、リンク先にも書いてあるように、Javaの資産であるコネクションプーリング用ライブラリが必要になる…

slickのupdateで動的にクエリを作れなくてハマった

slickでは、SQLを書かずにクエリを投げられます。その書き方に関しては、 Coming from SQL to Slick — Slick 2.1.0 documentationに書いてあります。ただ、少し違ったことをしようとするとなかなか実現できません。 今回実現しようとしていたこと update文で…

slickのcode generatorをmysqlで動かしてみた

slickのcode generatorを使ってみました。code generatorとは、DBの接続するscalaファイルをsbtコマンドを使うことで作成してくれるものです。slick/slick-codegen-example slick/slick-codegen-example · GitHub では、H2Driverを使っての例なため、MySQLDr…

ScalaBlitzの使い方

ScalaBlitzの使い方をめちゃくちゃ簡単にまとめてみました。 ScalaBlitzとはなんなのか? ユーザが何も気にすることなく、並列化を行えるライブラリ、それがScalaBlitzである。 なんで作った? Scala2.9で並列コレクションがリリースされた。 ネイティブに並…

ScalaBlitzってのが速いらしいので、とりあえず走らせてみた

ScalaBlitzというライブラリがあります。 ScalaBlitz | ScalaBlitzScalaBlitzはどういうライブラリかというと Use ScalaBlitz optimize block, to make collection operations faster! Simply import the scala.collection.optimizer package, and take full…

ScalaMatsuri2014に参加した

基調講演 - Scala 進化論 The Evolution of Scala from Odersky The Evolution of ScalaScalaがどうやって生まれたか? そしてこれからどういう方向で進んでいくのか? みたいな話。 Pizza言語というScalaのベースとなったというのがあったらしく、初めて聞…

sprayの起動とテストなど

ベンチマークがくっそ速くて、JVM最速と思われるspray*1の日本語記事が全然ないです。ってことで、起動方法とテストの方法をメモしておきます。sprayの起動などの操作は、sbtのコンソール上で行います。 起動 $ sbt [info] Set current project to workspace…

scalaの無名関数でハマった

今回は無名関数周りでハマりました。特定のURL「http://hoge.com」に対して、 入力したものを結合するという実装をしていました。無名関数内でパターンマッチを行い、返り値を出し分けるという実装をしました。 val url = {id:Option[String] => { id match …

scalaで非同期処理をつなげるとき

現在、非常に苦戦しております。非同期処理を順番に行うように実装する方法がなかなか見つかっておりません。とりあえず、やってみた実装方法はこんな感じ。 def get(apiUrl: String): Future[JsValue] = { WS.url(apiUrl).get().map { response => response…

ScalaのListとVector適当に比較してみた。

まだまだscalaをよくわかってないんですが、 以下のように乱数リストを作って、 それを文字列にするというめっちゃくちゃなことをしてみたら java.lang.OutOfMemoryErrorが出ちゃいました。 調べたら、色々出てきました。モバイル開発系(K)-Scala Tips JVMの…

PlayFrameworkで出たplay.PlayExceptions$CompilationException: Compilation error[IO error while decoding ... ]

PlayFrameworkを使って複数人で開発していたところ、 あるブランチをマージした途端、 急に play.PlayExceptions$CompilationException: Compilation error[IO error while decoding /hoge/target/scala-2.11/src_managed/main/routes_reverseRouting.scala …