少年易酔學難成

IT/技術的な話題について書きます

Scala開発日記 2019/05/14

5月から1年ぶりにScalaを使った開発が始まりました。 1年ぶりにScalaを触った感想は、「思った以上に忘れてる、ヤバイ」でした。 せっかくまたScala触れたのだから、今度はわすれないよう、日々のScala開発で感じたことやハマったことをメモしていこうと思い…

SQLにもタプルがあるよ

地味Tipsです。 意外と知らない人もいるので。 SELECT * FROM foo WHERE (id, bar_id) IN ((1, 2), (2, 3), (3, 4)) 昔、Haskell勉強してたときに、なんとなくSQLでもタプル使えたらいいなあと思って試してみたらイケた書き方。 カラムの組み合わせで条件指…

第0回 ゆるふわ.scalaで発表しました。

発表資料 PlayFrameworkでFuture[Either[A, B]]がよく出てくるけど、それにどう対応したかを書きました。 スライドを投稿してから気づいたけど、この内容だとまるで自分が解決策を考えたかのような印象与えますね。 解決策を考えたのは私じゃありません。私…

QuickTheoriesを使ってProperty Based Testingをやってみよう

(追記) Property-Based Testing Advent Calendar 2018参加にあたって、新たに記事を書こうと思ったのですが、公私にわたる多忙によりあきらめました。 せめて内容を加筆しようと思ったのですが、精根尽き果てました。 大変申し訳ありまきねん。 背景 テスト…

Scalaでもパイプラインできるもん!

Elixirのパイプライン演算子が羨ましくなったので作ってみました。 と言っても、こいつ↓でオブジェクトにパイプライン演算子を生やすだけです。 implicit class Pipe[A](value: A) { def |>[B](f: A => B): B = f(value) } こんな感じでかけます。 List(List…

二分木の畳み込みを末尾再帰化したい人生だった

※ この記事はアルゴリズムに詳しくない人が自分の思考の記録のために書いた記事です。 なので書いた内容が合っているかは確証が持てません。 「大間違いだよ、馬鹿野郎!」というツッコミは大歓迎します。 突然どうした 現在、自分はプロジェクトでScalaを使…

{1,2,3,5,7}みたいなリストを"1-3,5,7"に変換する

電車で移動中にタイムラインに流れて来てちょっと面白そうだということで実装してみた。 {1,2,3,5,7}みたいな配列(またはリスト)を“1-3,5,7”に変換するってのを書かなきゃいけない。逆の変換はそう難しくないのだけど。どう書こうかな。— いくた♥️なお/2日…

traverseとsequenceをめぐる冒険

事の発端 Scalaを書いているとビジネスロジックの結果の合成などでEitherやValidationのsequenceメソッドが欲しい!ということがあります。 ちょうど今のプロジェクトでもそういう声が結構あって、「これ、進研ゼミでやったぞFP in Scalaで書いたぞ!」と思…

play-jsonについて学ぶ(2)

Readsをどのように書くか 前回のエントリでplay-jsonのReads/Writesの意味とPlay Frameworkでの使い方を確認したので、実際にReads/Writesをどのように書くかを考えてみる。 今回はReads。 愚直にReadsを書く JsValue => Aの処理を最も愚直に書けば以下のよ…

play-jsonについて学ぶ(1)

目的 現在のプロジェクトではJSONライブラリとしてplay-jsonを(play scalaと共に)使用している。 play-jsonはドキュメントは豊富なのでググれば大抵の問題は解決できて便利なのだけれども、ググってもやり方が見つからない場合は解決に時間がかかってしまっ…

S-99: Ninety-Nine Scala ProblemsのP07を末尾再帰にするだけの正月だった

昨年大晦日から、少しずつS-99: Ninety-Nine Scala Problemsに取り組んでいる。 取り組み方は色々あると思うが、個人的に設定したルールは以下の二つ。 Listのコンストラクタ(Nil or ::)以外は自作する なるべく末尾再帰にこだわる(なぜ末尾再帰にこだわるか…

AutoHotKey事始

勤務先の個人用PCがシンクライアント+仮想デスクトップに移行するため、このままでは英字配列のHHKBが使えなくなってしまう。 対応策として、以下の二点を考え付いた。 HHKBとシンクラの間で物理的にJP配列を英字配列に変換する 仮想デスクトップ上のアプリ…

JavaScriptで文字コード値⇔文字列変換

作成中のアプリにてエラーメッセージが文字コードで出力されたので、文字列に変換する処理を書いてみた。 /** * 文字コード値→文字列 */ function (cd) { var cdArr = cd.replace(/\\u([0-9a-fA-F]{1,4})/g, function () { return parseInt(arguments[1], 16…