Scala

Scala入門以前 2015/04版

Scala入門したいけどどこから手を付けていいか分からない人向けの「まず何に手をつけるべきか」集みたいなもの。 ScalaでWebframeworkいじりたい Scalaだと特に理由が無い限りPlayframeworkを使う人が多いので、いきなりそこから手を出せば良いのでは。不安…

Play2.3(Scala)で、sbtだけでPlay環境を構築する

更新 5/12 バージョン番号更新しました はじめに Playは使いたいけどActivatorとか落とすのデカいしだるい!そんな貴方のための記事http://qiita.com/erukiti/items/0decc5fe8bf2c61d3b1eがPlay2.2までにしか対応してなかったので書いてみた。割と変わってる…

java.sql.Timestampのequalsが規約を満たしてない

事の発端 とある社内ライブラリを修正していたら、java.util.Date同士の比較で、getTimeを呼び出さないとtrueにならなくてエラー、というコードを発見した。こんな感じ date1.getTime == date2.getTime // => true date1 == date2 // => false Scalaの==はJa…

Scalaのmatch caseが怖いと思ったら怖くなかった話

おさらい Scalaのmatch case式がある。他の言語で言うところのswitch caseみたいな立ち位置だが、実際には比較にならないほど強力である。 def f(n: Int): String = n match { case 1 => "いち" case 2 => "に" case _ => "1と2以外" // default値 } 普通の…

Play Tips

はじめに Play使ってて困ったことと解決方法纏めてみた。 カンマ区切りしたい JavaのString.formatの書式で、%,dとかすると、数値にカンマ付けられる。ScalaのString Interpolationを使えばこんな風に。 f"${num}%,d" Play Templateでもこんな風に @{f"${num…

エロゲ回想シーンのスクショを自動で取る

はじめに 30億のデバイスで動くJava(とScala)でエロゲ回想シーンの自動スクショを取るツールを作ってみた。 要件 とりあえず必要なのは、 WindowのタイトルからWindowの範囲を取得する プログラム側から自動でクリックする Windowをアクティブにする スク…

チョットハヤイLongMapを計測してみる

Scaladoc調べてたらLongMapとかいうのを発見した。2.7からimmutableなLongMapが、2.11でmutableなものが実装されている。Scaladocによると「Longに特化したHashMapでHashMapよりはやい」とのことなので軽くテストしてみた。 import scala.collection.immutab…

艦これ公開ツールMyFleetGirlsをリリースしました

概要 艦これやってて「艦これの進捗他人にサクッと見せられたら便利だなー」と思ってMyFleetGirlsというサーバと艦これProxyツールを作ってみました。Proxyツールで艦これのデータを見て、公開しているサーバにデータを送ると、他の人・自分が艦これの進捗を…

BulkInsertがしたい Powered By ScalikeJDBC

SQL界隈ではBulkInsertはあまり一般的ではないようだ。MongoDBからDB界に入った人間からすると、BulkInsertについて 「えっ、複数回insertすれば良くね」 「Transactionの話?」 「そういう特殊な処理は自前で何とかしてくださいw」 とか言われるともにょる…

数当てゲーム(イージスコードのアレ)の戦略

はじめに イージスコードの数当てゲームやってて、これの最適戦略どうすればいいんだろう、と思って、色々な戦略を考案して試してみた。 イージスコードの軽い説明 イージスコードは所謂ソシャゲなのだが、戦闘システムが数当てになってる。数当ては、 0から…

hotpepper4sを作ってみた(Scala AC 23日目)

はじめに 私は「ぽんこつまっぷ」という、自分で使う為の地図作っているのだがhttp://ponkotuy.com/maps/食べログAPIが優秀と聞いて、こいつに使えないかなー、折角だし試そう、と思ったのだが、食べログAPIは「新規受け付けを終了しました」だそうで…。色々…

Scalaで何故か型が推論できないパターン

はじめに ProjectEulerやってたら何故か型推論できなかったパターンを見つけたのでメモ。詳しい人理由教えて下さい…。 簡略化したコード val xss: IndexedSeq[Array[Int]] = hoge() xss.reverse.reduce { case (xs, ys) => // reduce以下の関数でThe argumen…

Scalaのmutable.HashMapとOpenHashMapの違い

はじめに Scalaの標準ライブラリを漁っていたら、OpenHashMapなるものを見つけたのでScalaのソースコード読んでみた。結論から言うとOpenHashMapってOpenAddressのHashMapなんだよーっていう話。 前提知識 Scalaの場合、実はimmutable.HashMapとmutable.Hash…

Scalaが遅かったけど原因が分かった件

Project Eulerの問題44http://projecteuler.net/problem=44これを解こうとして、以下のようなコードを書いたhttps://gist.github.com/ponkotuy/5791300のだが、Scala版が遅くて困っている件。どれぐらいかというと、HaswellのCPUで、Dは秒も掛かってないが、…

JavaのMapでgetOrElseしようとした

したいこと Mapの中身をgetするときに、中身が無い場合はデフォルト値を返すようにしたい。 Scalaなら map.getOrElse(key, defaultVal) Javaだと 要Guava Optional.fromNullable(map.get(key)).or(defaultVal); ぐらいしか思い付かなかった。 Java8だと map.…

ドゥドゥシミュレータを作ってみた

「素晴らしく運が無いな、君は」 ドゥドゥさんとは SEGAのネットゲーム、PSO2の武器強化をしてくれるキャラ。武器強化は+10まででき、+10特典もあることから狙う者が多いが、強化は失敗の確率がある上に寧ろ強化値が下がるような失敗もある。強化値が下がる…

Akka ActorでPipeline

はじめに Pipelineとは、例えば全体の処理をA, B, Cという処理に分割したとして、それぞれの処理で1つ又は複数のスレッドでもって処理を行う並行形式。私が良く知っている、CPUなんかは1Clockの処理を数十段に分けるPipelineな処理を行っているので、それと…

json4s使っての疑問を発表してきた

json4s使ってみた みたいな発表してきたhttp://ponkotuy.com/study/json4s.pdfslideshare使えないのでこっち。 概要 PDF読むの面倒な人向けに簡単に説明すると。「json4s(lift-json)でcase classをSerializeしたいんだけど、Scala独特のenumだとどうするの…

Scala2.10でハマった忘備録

はじめに Scala2.10が出たので、と何も考えずに使ったらズボズボ嵌ったのでメモ代わりに。ただこの不都合は、時間が経てば解消される可能性が高いものもあるので、鵜呑みにしないで参考程度に。 補足(2013/03/01) 気付いたらscala-ioのバージョンが0.4.2に…

Scalaで世界最速のふぁぼ爆撃

はじめに Scalaなら超簡単に並列化できる(Erlangっぽいらしい) ScalaならJavaのライブラリが使える JavaにはTwitter4jという優秀なライブラリがある 結論:ふぁぼ爆撃するしかない コード package com.ponkotuy.twitter import scala.collection.JavaConve…

boost::intervalを羨むScala使い(Scalaで簡易版を実装してみた)

boost::intervalとはなんぞや https://sites.google.com/site/boostjp/tips/interval_arithmeticにあったりするが、要するに数値の範囲を扱うライブラリで、区間演算とかできたりするが、とりあえず範囲の重複だけでも取得したい!と思ってScalaでその部分だ…

joda-timeを仕方なく使う(時間で四則演算したい)

はじめに Scalaで使える日時を扱うライブラリの1つにorg.scala_tools.timeがあるが、これjoda-timeの薄いラッパーで、ドキュメントもマトモにないので、結局joda-time調べた方が早いという話があったりする。で、時刻の差を取得したいときに少しハマったので…

ScalaのAtomic性

はじめに Scalaにある+=演算子、これってAtomicじゃないの?という疑問があって調べてみたの巻。やりたいこととしては、parでスレッド分けてmutableな変数に+=でアクセスしたらどーなるのよ、という話。 サンプルコード object Main extends App { var count…

Scalaで文字列を1つずつずらす

やりたいこと 文字列のアルファベットをaddだけずらす(a->b->cのように)ことをしたい。abcdzをadd=1でずらすとbcdeaになる、みたいな感じ。 Scalaで書いてみた らこうなった。 new String ( str.toLowerCase(Locale.ENGLISH).map{ it => (it - 'a' + add) …

第2回闇鍋プログラミング勉強会で発表してきた

闇鍋勉強会とは 冷静に考えてみると説明できないからここを見よう。http://atnd.org/events/29973まぁ技術的にすごい人がアホなこととか真面目な事とか発表する場です。 LT枠で発表してきた! 私も簡単ながらLT枠で発表してきました。元々用意してたのはJenk…

yes!yes!yes! 〜yesベンチマーク〜

yesベンチマーク UNIX系OS(?)にはyesコマンドがある。これをベンチマークに使えないかとふと思い立ったので試してみた。yesコマンドには回数指定するものが無いので、head -nで回数を指定した。今回は1000000回で行った。 $ time yes | head -n 1000000 R…

Scalaで特定の長さを越えているか見る

LinearSeqの長さを制限する LinearSeqの長さが一定を越えているか見たいとする。ScalaのLinearSeqはListのような、次の要素へのポインタを持つだけの再帰的かつ単純な実装を前提にしている。この為、LinearSeqの順番のアクセスは早いが、lengthを取得するの…

新米Scala使いがsbtとMavenを比較してみる

Mavenとは Javaのantの次世代を謳うビルドツール。Pluginを追加できるのでキモい程高機能で、コンパイル→テスト→実行→コードチェック→デプロイ→リリースまで全てこなせる。というか途中からCIツールの仕事なんだが奪うなよwPluginを追加できるので、Scalaで…