Lambdaカクテル

京都在住Webエンジニアの日記です

scala

akka-httpで得られるJSONレスポンスをcase classに自動マップする方法

調べてみたけどぜんぜん分からなくて3日くらい悩んだのでメモ. akka-http まずakka-httpについて.akka-httpは見てのとおりakkaで作られたHTTPライブラリで,client業もserver業もこなせる何でも屋です.じゃあakkaは何かというと,アクターモデルによる非…

scalatra + twirlでリバースルーティングする

暮らしているとリバースルーティングしたい日があります.例えばテンプレートの中で別のエンドポイントへのリンクを作りたいとき,直にURLを書きたくないですよね.修正に弱いし. いまどきのWebアプリケーションはエンドポイントを渡すと勝手にURLが作られ…

Case classを同じメンバのcase classに変換する

Case Classを変換したいことがある。具体的には今作ってる年表作成ツールで,ドメインモデルであるdomain.Timelineをテンプレート用のDTOであるapplication.dto.Timelineに変換したいのだが,domain.timelineはそのフィールドにSeq[domain.Event]を保持して…

Scalaで型パラメータ付きクラス(トレイト)と抽象型付きクラス(トレイト)復習したところ全称型と存在型に出会った

だいたい同じことができる(ような気がする)別々の2つの言語機能についてよくわかっていないので書く。 // 筆者は型初心者。 型パラメータ traitには型パラメータを設けることができる。いわゆるジェネリクスというやつである。 trait Plus[A] { def plus(a…

Scalaのfor-comprehensionのパチモンをCommon Lispで実装した(多値使って)

何言ってるんだという感じですがこういう感じです。 (defun find-user (username) (if (string= username "windymelt") (return-left :windymelt) (return-right "User Not Found"))) (defun check-passwd (user passwd) (if (and (eq user :windymelt) (str…

ツイッターのふぁぼをクロールするツール作った/俺TUEEEを大事にしたい

今日はツイッターのふぁぼをダウンロードしてくるやつを作った Scalaは神 https://github.com/windymelt/dumpfav 自分のふぁぼが検索できなくて困っていたので、ふぁぼを200件ずつクロールして保存するツール作った。 JSONを吐くのであとはElasticsearchとか…

型クラスまわりの用語を整理した

用語のうち曖昧だった部分を整理した。お勉強です。まちがっていたらマサカリをください。著者はCSの学位を持たないかけだしです。 多相(多態)(polymorphism) 関数とかが引数の型によってさまざまな振舞いをすること より厳密には、値(関数を含む)が型を取る…

ScalaでDI(Play framework2.7 + Guice編)

ScalaでDIします。Google GuiceというDIコンテナを用いて,Play Framework上で,またより一般的なScalaアプリケーション上でDIを行う方法について説明します。 Dependency Injection ナイーブなDI (コンストラクタ・インジェクション) DIコンテナ,DI手法 Gu…

ScalaのTypesafe config(Lightbend config)で環境変数を含んだ文字列を設定する

ScalaにはTypesafe config(今はTypesafeはLightbendという社名になっているのでLightbend configかもしれない)という便利な設定ファイルライブラリがあり,ScalaのWebアプリケーションフレームワークであるPlay frameworkでは標準的に採用されている。これは…

ScalaのPlayアプリケーションをsbt-native-packagerの力を借りてDockerで動かす

おはこんばんちわ.普段はLispをやっていますが今日はScalaをやります. わけあってPlayアプリケーションを構築しようとしているのですが,時代はクラウド.環境構築やデプロイであれこれ悩みたくありません.そういうわけで,Docker化を見越したアプリケー…

情報科提督のための、艦これで理解する「オブジェクト指向」

艦これってオブジェクト指向を説明するのにかなり優れた教材なのでは!?と思ったので、艦これを用いてオブジェクト指向を説明したいと思います。内容は簡単にしているので正確には間違っている箇所があるかもしれませんが、ご容赦ください。 事の成り行き T…

Play framework 2.3.xでShift_JISのリクエストを扱う方法

要点 Play framework 2.3.xとUTF-8について解説します Shift_JISでパーセントエンコードされたデータを扱う事の困難性を解説します 実際にPlay framework 2.3.xで上記のデータを受け取る方法について解説します Play frameworkとUTF-8 Play framework 2.3.x(…

SBTプロジェクトのバージョンに"-SNAPSHOT"を付加する理由

SBTに限らないことかもしれないが、g8のようなテンプレートを利用してSBTプロジェクトを作成すると、バージョン名のデフォルトがX.Y.Z-SNAPSHOTとなっていることがある。この理由が分かったのでメモ。 要点 Ivy2はローカルなレポジトリのキャッシュを保有し…

ScalaからJGit経由でGitを叩く

ScalaからGitを触るには、Java用ラッパーのJGitを使うのがベストっぽいです。 勉強がてらサンプルを作ったのでおシェアします。 windymelt/exercise-scala-jgit windymelt/exercise-scala-jgit · GitHub 感想 jQueryを彷彿とさせるメソッドチェインでレポジ…

Scala開発を始める人におすすめのScala関連情報サイトをまとめてみた

id:masawadaにScala+Playのおすすめ情報サイトを聞かれたのでまとめてみる。随時追加の方針です。 @windymelt Scala+Playしたいのだけど、オススメの情報サイトとかありますか?なお、Scala未経験です。— Masayoshi Wada (@masawada) December 4, 2014 追記…

環境非依存のMacで動く艦これブラウザを作ることにした

あくまで実験として遊んでみる。公開はある程度形になったらしてみたい。WindowsにはKanColleViewerがあるが、Macでは動かないのでこちらでも劣らないものを作ってみたい。ついでにAngularJSも勉強する。

Scala+Sprayで簡易キャッシュ付きプロキシを作ってみた

先日書いた記事でプロキシを作ると言っていたが公開していなかった。 ScalaでHTTPプロキシを作ることにした - Lambdaカクテル ScalaでHTTPプロキシを作ることにした - Lambdaカクテル できた。 windymelt/lacquer windymelt/lacquer · GitHub デフォルトでは…

ScalaでHTTPプロキシを作ることにした

リバースプロキシに興味がある……というより、画像が含まれるサイトの表示を効率化したかったので作ってみることにした。HTTP proxy自体の仕組みは簡単で、ブラウザが本来の通信したいサーバに送られるはずのリクエストを代わりにproxyサーバに送るだけで実現…

私立プログラミングキャンプに行ってScala+PlayでWebSocket通信してみた

どうも。Windymeltです。 僕は今はてなサマーインターンで京都に滞在しており、id:masawadaが私立プログラミングキャンプのお誘いをしてくれて僕も参加してきたのでそのレポートです。 私立プログラミングキャンプははてなオフィスで行われたため迷わず会場…

Play 2.2.1でSlick 2.0.1を使ったときにつまづいた点など

先日P2P2chのデータベースフレームワークをAnormからSlickに移行した。 AnormはプレインなSQLを直接記述するスタイルで、O/Rマッパーの機能は有していないが、率直な記述が可能だ。 SlickはTypesafe社が主に開発していて、Scalaのコレクションのようにデータ…

play distで作成したartifactにtypesafe-configを注入する

ども。今回はPlay Framework 2.2.xのdistコマンドで生成される成果物の扱いに関してのお話です。 まとめると distすると後からconf/以下のファイルを編集しても意味無し -Dconfig.file=で指定すると読んでくれる 二つ以上の.confを読ませるとハマることがあ…

野良Play! FrameworkをPaaSにデプロイするはなし

おひさしぶりです。 さて、懲りもせずにP2P2chのコードを書いておりまして、デプロイとCIを自動化したいな〜などと思ったのでPaaSを色々と調べた。 昔Herokuで実験したが、向こうが用意したPlay frameworkしか使うことができず、こちらがコンパイルしたもの…

ScalaでDIしようとしたら早速つまづいた

Scalaで作成中のアプリケーションで、DI(Dependency Injection)をしようとしているという話。 簡単に書けるだろうと高をくくっていたら、無惨にも書けなくなってしまったという話でもある。 DIとは? DI -- Dependency Injectionとは、訳せば依存性の注入。…

scalazのunfoldで失敗漸化式

scalazではfoldの逆操作としてunfoldが用意されている。 この関数は初期値と B => Option[(A, B)]の関数を取り、そのタプルのB成分を再び関数に適用していくことで、Aから成るStreamを構成する。 Githubのscalaz/core/src/main/scala/scalaz/StreamT.scalaに…

ScalazのKleisliの★

最近やっとの事で@yuroyoroさんや@xuwei_kさん、そして@eed3si9nさんたち先人のブログをかじってMonadicな関数を合成するやり方が分かりました。とりあえず`A => M[B]`な感じの関数を`kleisli(function)`みたいに書くと`reduce(>=>)`みたいな書き方ができる…

Akka-remoteでNAT越え

Akka-remoteを利用して、NATを越えたメッセージングを実現するための方法。 Akka-remoteにおいてホスト名を指定するakka.remote.netty.tcp.hostnameには、マシンが認識する名前であるプライベートアドレスもしくはFQDNしか指定することができず、グローバル…

Herokuにplayアプリケーションをデプロイしたら色々つまづいた

#このエントリは書きかけです。自作のWebアプリケーションを公開・稼動させてはみたいが、自前でサーバを調達するのも嫌だし、LinuxだのJVMだのをインストールするのも嫌だという不精者の私であるが、そんな私のためのサービス..PaaS(Platform as a Service)…

State monad in Scala via Scalaz

ScalazのStateモナドを使う機会があったのでメモ。 Stateモナドとは? 状態を含む計算を簡潔に記述する方法 しかもモナド たとえばこのような処理があったとする。 def foo(arg: Int): Int = { val s1 = arg + 10 val s2 = s1 * 2 val s3 = s2 - 4 s3 } 何度…

ScalaでAkkaのSTMを使う その1(Agents)

Akkaでアプリケーションを開発していて、ついにSTMを使う機会があったので、メモを兼ねてこの記事を書きます。 AkkaのDocumentationを訳しました。

ENSIMEで(cyclic-function-indirection char-valid-p)エラー

Emacs用Scala入力支援ライブラリであるENSIMEをセットアップしていたら、Emacsが次のようなエラーを吐いた。 . . . (cyclic-function-indirection char-valid-p) 最初はENSIMEのバグかなにかと必死で考えてみたが、検索しても一件もヒットしないので困ってい…

Webアプリケーション開発関連の記事を投稿しています.読者になってみませんか?