Scala

Scalaの継承の研究

研究という程でもないんだけど、ScalaやJavaの列挙型は気持ち悪いなあと思い、ちょっと考えてcase objectがいいと思い至った。調べてみると同じような事をされている先達がいるものです。 http://xerial.org/scala-cookbook/recipes/2012/06/29/enumeration/…

Excel(Xls,Xlsx)を読みこむ開発してます

日々の雑務が激しくScalaのことを勉強できていないけど、こんなことを合間合間にやってます。 1.Excelのファイルを読みこみ、定位置のフィールドを取得。所定のルールに従っているかチェックする。 ただし、ファイルが100MByteを超えるときもざらなのでUse…

sbtのインストール

sbt 0.13.8をインストールするには、以下を参照に This page has moved http://d.hatena.ne.jp/kanbayashi/20080412/p1 $ echo "deb http://dl.bintray.com/sbt/debian /" | sudo tee -a /etc/apt/sources.list.d/sbt.list $ sudo apt-get update $ sudo apt…

VirtualBox上のUbuntu 14.04でspark-shellを使えるようになるまで

CodeIQのこちらの問題、https://codeiq.jp/q/1587 をWindows7のPCで行っていました。 spark-shellから一行ずつ入力して、一応それなりの結果を得ることはできた。 が、やっていてなんだかちょっとなあ、と感じた。シェルにコマンドを打ち込むというのがなん…

コップ本2の19章「型のパラメータ化」をやってみる。その1

「関数型待ち行列」をつくる、という題材を通して型のパラメータ化を学ぶ章です。関数型待ち行列の要件は1.head:待ち行列の先頭要素を返す 2.tail:先頭要素を取り除いた形で待ち行列を返す 3.enqueue:指定した要素を末尾に追加した新しい待ち行列を…

返ってくる型がわからないときは、Anyを使う?

昨日、5/14と書いた以下のエントリでは、関数に指定する型パラメータで悩んでいたけど、結局戻ってくる値がわからないのであればAnyを返す、というのでちゃんと動くようにできた。僕が2015/5/14に書いた型パラメータに関するエントリがすごく間違っている気…

僕が2015/5/14に書いた型パラメータに関するエントリがすごく間違っている気がする

数日前の記事(共変とか反変とかわからないので躓いている - 趣味プログラマがまれになんかしたことの記録 )にて、僕は下のように書いたけど、 def get[A >: Any](i:Int):K[A] これは下限境界というやつで、AnyまたはAnyのスーパークラスのみ型パラメータに…

Iterator.duplicateの動き

直前のエントリで気になったのでIterator.duplicateの動きを調べてみた。 val it = Iterator.continually... val (it1, it2) = it.duplicate println(it.foldLeft(0)((c, _) => c+1)) println(it1.foldLeft(0)((c, _) => c+1)) println(it2.foldLeft(0)((c, …

300M超のテキストファイルを読み込ませてIterator.continuallyで処理すると

Iterator.continuallyの動作がどれぐらい大きいファイルまで耐えられるのか確認したく、以下の様なスクリプトを書いてみた。 import java.io.{FileInputStream, InputStreamReader, BufferedReader} val br = new BufferedReader(new InputStreamReader(new …

共変とか反変とかわからないので躓いている

こんなクラスを作ってみた scala> case class K[A](l:List[A]) そしてこんな関数を作ってみる。しかし実行してみるとうまくいかない。 scala> def returnK(a:A):K[A] = K[A](List(a)) returnK: (a: A)K[A] scala> returnK(1) <console>:15: error: type mismatch; fou</console>…

JenkinsでSpecs2の結果を読むと(It is not a test.) と出てしまう件

せっかくSpecsにスペックを書いているのに、Jenkinsの結果にて(It is not a test)と出てしまうのは嫌な気分です。(下図) これはSpecs2のIssueでSpecs2の3.3では治りました。(下図) 参考リンク→ sbt (0.13) junit xml reporter: "It is not a test" · I…

Lensってなんぞやと思ってたのが、ここ見て一発でわかりました

argonautを使うようにしたら、Monocleという謎のライブラリが追加されていた。HaskellのLensというのをScalaに移植したものらしい。 Lensって最近良く見る。でもなんだかよくわからんなあ、と思ってました。が、下のリンク先を見て一発で分かりました。 Mono…

argonautを使ってみた

設定をXMLよりももっと簡単に記述して読み込みたい、という希望のもとにあれこれ調べるまでもなく、実際Jsonを使ってやってみるのが標準のようだ。Scala標準のJsonパーサーはどうやら使いにくいし今後無くなる方向だそうです。(こちら参照→標準ライブラリのJ…

scoverageを使ってビルドしたらNoClassDefFoundError: scoverage/Invoker$

Jenkinsも導入したことだし、scoverageを使ってみた。しかしjarファイルを起動したらこんなエラー。 (ちなみに僕はassemblyプラグインを使って、依存ライブラリをすべて含めたFatJarにしている) Exception in thread "main" java.lang.NoClassDefFoundErro…

HtmlUnitDriverを使ってログインをしてから、他のページにアクセスする

HtmlUnitDriverでPOSTするのはどうやるの? と調べてみた。結果的にWebクライアントらしく、ユーザー名パスワードを入れて、ボタンをクリックという動きになります。以下、githubにログインしてトップページを開くという動き。 object MainApp extends App {…

すぐに使い方を忘れるのでメモ

僕は開発者じゃないので、めったにIntelliJ IDEA+Scala+Sbt開発を行う機会がない。 そんなわけで、さて、今からなにかを作ろう、と思うと超基本的なことからして忘れていて、常にまごつきます。 なぜって年寄りだから。1. 外部ライブラリの追加 プロジェ…

テストを充実させつつある

IntelliJ IDEAでsbtをつかいビルドしていたところ、ふとテストにSpecs2が使えることに気づいた。気づくのが遅すぎかもしれないが気づいた。あちらこちらの情報を収集して、 コードカバレッジにはscctがいいよ scalastyleつかうと便利だよ ということがわかっ…

自作Scalaのライブラリを、sbtの依存ライブラリに入れる方法

以下のサイトを参考にしました。http://blog.takumibaba.com/post/62023920631/sbt-scala sbtでpublishLocalしたjarを取り込んで開発サイクルを回す - Qiita 以下の作業はIntelliJ IDEAを使っているという仮定です。 1.ライブラリのプロジェクト(というか…

やっとScalaのSlick2使ってDBテーブルの中を見れるようになった

いかの2つを参考にして、 Introduction — Slick 2.1.0-M1 documentation Connections / Transactions — Slick 2.1.0-M1 documentationこんなソースコードを書いてみた。 動かなかった例 import com.typesafe.slick.driver.ms.SQLServerDriver.simple._ objec…

sbtよくわからないで苦しんだ

MS SQL Serverにアクセスしたくて、scalaのSlick2というのを使おうと思った。その苦労。 sbtの作法にぶつかる。あれって、一行ずつ空白行をあけないとダメなの? 空白をあけずに書くとエラーが出ます。 libraryDependenciesを複数追加する方法がわからなくて…

IntelliJ IDEAにてScalaの開発

巷ではScalaの開発にはIntelliJ IDEAを使うと捗るよ、とのことで、初めて見ました。 以下参考にしたサイトEclipseユーザがIntelliJ IDEAを使い始める時に見ておいたほうがよいページのメモとか - 新しいフォルダ (3) Eclipseユーザの為のIntelliJ IDEA Q&A -…

Windows7にscalatraをインストール。その前にgiter8を使えるようにしてから

手順として gitをインストール sbtをインストール(これはインストーラーじゃないほうが便利かも) conscriptをsbtでビルド、--> 失敗 conscriptにjarを取得 giter8をsbtでビルド まず、giter8を作っている、n8hanさんのgithubより、以下を取得。 git clone …

Fat Jarプラグインを入れたのに、Build Fat Jar (Fat Jarでビルド)が出てこない場合

使っているビューが、Java−パッケージ・エクスプローラーでないと、プロジェクトを右クリックしたメニューにBuild Fat Jarが選択肢に表示されません。一般カテゴリのプロジェクトエクスプローラーやナビゲータでは使えないので注意が必要です。

ScalaTestで実行できない時がある

ScalaTestをEclipseから実行していて2つほど困ったことが起きてます。 ファイル単位でのテストを実行できるのに、パッケージ単位では実行できない いつのまにやらファイル単位でのテストも実行できなくなる 1の問題は、テストが開始されるが実際にテストが…

大きなCSVファイルの特定列だけを抜粋して重複を取り除く処理を書いてみた

思いつくままにやってみた版(ミュータブルなSetを使う) C列目の値を取ってくる val br = new(BufferedReader(new InputStreamReader(new FileInputStream(“hogehoge.csv”))) def distinctCsv(br: BufferedReader, c: Int): Set [String]= { val it = Itera…

Scalaのテスティングフレームワーク、ScalaTestを使いはじめる

Specs2が一番スマートに書けそうなので、まずはEclipseにて導入。しかしどうやっても実行できない。わけが分からない。sbtとか導入するんでもいいけど、なんだか面倒になってEclipse内で完結できるのがないかと探したらScalaTestというのが見つかった。こっ…

Fat Jarプラグインを使ってみた

Fat Jarというのは、依存する外部ライブラリをすべてまるまる一つのJarに入れておいたもの。Jarのサイズはかなりでかくなるが、他の人に渡すときにJar一つで実行できるので便利。Uber JarともOne-Jarとも言われる。で、こちらを参考にFat Jar プラグインをEc…

.ensimeを作成するときのエラーについて

プロジェクトフォルダで、sbtで.ensimeを作る必要がある。しかし以下のようなエラーで作れない時がある。なぜだろう?とハマりました。 % sbt ensime generate : : : [error] Not a valid command: generate [error] Expected ‘/’ [error] Expected ‘:’ [err…

前回のつづき、EmacsでのScala開発環境であるENSIMEを入れるまでの苦労

EmacsでのScala開発にはEnsimeというプラグインらしい - 趣味プログラマがまれになんかしたことの記録の続きです。前回ステップ8まで終わったから、続きで9から書きます。 9. どこでもよいので、Scalaのプロジェクトのディレクトリを作成します。自分の場…

EmacsでのScala開発にはEnsimeというプラグインらしい

Java開発にはmalabar-modeでこっちはなんとかビルドはできるようになったのでそこそこ満足。実行するのは未だにeshellつかってるのがなんか違うような気がするが、こまかいことは後で考えよう。 じゃあ、Scalaは、となるとEnsime一択らしい。まずとっかかり…