カテゴリー別アーカイブ: Scala

開発者向けPodcast

最近、いくつかの開発者向けPodcastを聞き始めています
きっかけになったのは@kmizuさんのツイート

 

実際に調べてみると、結構多くのPodcastがあるんですよね。
いや、ある事自体は何となく知っていたのですが、探そうとしていませんでした。

思い立ったが吉日と言うことで、早速いくつかを購読してみています。
現在の購読対象としては

This Developer Life
http://thisdeveloperslife.com/

 The Basement Coders
http://basementcoders.com/

The Scala Types
http://scalatypes.com/

選んだ基準というのは特になく、ほぼ何となくです。
はっきり言って、英語力はさっぱりな状態なんですが、耳をこらしているとそれなりに知っている単語がチラホラ出てきます。
言ってしまえばその程度なので、あまり本文の内容が理解出来ておらず、これらのPodcastをお勧め出来るものかと言うことに関しては
正直わからないというのがあります。

欲を言えば、Podcastの中身がテキストに起こされていれば、技術の勉強としては役に立つのですが、
残念ながらそんなモノは期待出来ません。

それでも聞いて意味があると思うのは

  • 技術系の言葉なら何となくわかるんじゃないか?
  • 何となくわかれば、話題によってはよりわかろうとしてしっかり聞くのでは
  • 英語と技術が勉強出来てスバラシー
  • 技術用語で、本当のところなんて発音されているのかわからないのがわかる

と言うことがあげられます。
この最後の発音。いやいや、なかなかバカに出来ないですよ。
Scalaの話題を出した時に、自信満々に「それはスカラじゃなくてスケイラって読むんですよ!(ドヤ」とされた事ありますし。
実際、発音だけじゃなくてイントネーションを含めると結構和製英語のような状態になっている事が多いです。
知っている人からすれば、ちょっと恥ずかしいかも。

もちろん、内容がよければよいにこした事が無いと思うので、何かしらお勧めのPodcastがあれば ご紹介ください。

BPStudy#49 Scala祭り

BPStudyがScalaを題材に開かれるということで参加してきた。

実際のところ、コップ本も実践Scalaも読んだには読んだが、仕事で使う当ても無く
私自身はというとあまりScalaのコードを書いている訳ではない。
なので、あまり突っ込んだ内容に付いていくのは骨が折れるぜぃ

ただ、実際に使っている人の話を聞くのはやはり面白いし、いろいろな情報が出てくるので勉強になる。
さしあたってメモ代わりに、話にあがったいくつかを書き留める

ビルドツールに関して

開発って何でやっているんだろう?
以前、Scala会議ではsbtを押していた。

sbt (GitHub)
https://github.com/harrah/xsbt/wiki

またEmacs用のツールとしてEnsimeが紹介された

ensime (GitHub)
https://github.com/tototoshi/ensime/blob/japanese-documentation/README.ja.md

さしあたってEclipse使ってみたけど、sbtのほうが一般的という話であれば、
sbtに関しても触っておく必要があるかもしれないなぁ。

というか、私の場合はEmacsなりViなりにもう少し慣れないといけないんだけど・・・。
ずっとWindowsだったもんな。

ちなみにsbtに関しては面白い記事があったので

非公式 sbt 0.10 ガイド v2.0 (eed3si9n)
http://eed3si9n.com/ja/sbt-010-guide

Finagle

yuruyoro氏からは非同期RPC処理を行うのに用いることが出来るFinagleの話。
Twitter.incで作られている。

finagle (GitHub)
https://github.com/twitter/finagle

主には

  • Futures
  • Services
  • Filters
  • Codecs

の4つをチェックする。

finagleに関しては正直見ただけでは理解は難しく、触ってみる必要がある。
Scala-schoolやFinagle作ってるTwitterの中の人等、様々な情報を集めてみるのも一つだ。

finagle starter kit (GitHub)
https://github.com/bmatheny/finagle-starter-kit

ostrich (GitHub)
https://github.com/twitter/ostrich

‘=:=’とか’<:<’ とか 意味不明じゃん

Scalaのコードを最初見た時に、何がなんだかわからなかったのをよく覚えている。

普通、たいていどんな言語でも何となく読めなくはないんだけど、
Scalaは簡潔に書くことが出来るが故に、ものすごい省略したコードになる。
結構意味不明だ。

さらに、今日のように

def increment(implicit ev:T =:= Int ):Cell[Int] = Cell( v + 1 )
(サンプルはyuruyoroさんところから)

というように”<:<”や”=:=”のような記号が出てくると、一気に頭がショートしてしまう。
今日の話題にも出たが、これなんて言うんだよw

これに関しては詳しくは@yuruyoro氏が書いている記事が詳しい

Scalaで<:<とか=:=を使ったgeneralized type constraintsがスゴすぎて感動した話 (ゆるよろ日記)
http://d.hatena.ne.jp/yuroyoro/20100914/1284471301

ぱんくぱんく

実は途中でiPhoneのバッテリーが切れてしまって、メモを取ることも叶わず
頭の中も携帯もパンクしてしまった感がある。

Hadoopの本を手に取り始めたばっかりな状態ではあるんだけど、Scalaもあれこれ調べて回りたい衝動に駆られてしまう。
むふー。
もうちょっと時間効率よく動かんとなぁ

そう、コップ本第2版出たんですね。。。Scala2.8, 2.9に対応して内容がアップ。。。
ううーん、気になるっ

Scalaスケーラブルプログラミング第2版
Martin Odersky Lex Spoon Bill Venners
インプレスジャパン
売り上げランキング: 4097

eclipseの起動に失敗する (解決)

昨日のエントリーで書いたeclipseのエラー。
ある程度詳しく書けば、きっと誰かの目に留まるはずっ!!って言う他力本願寺な考えで書いたのですが願ったりかなったり。
コメントに書いてもらえました。

Extensionsのrename

昨日読むのをめんどくさくて辞めてしまったURLにこのエラーの回避方法が書いてあったようです。

I’ve encountered the same error as the original poster,
using eclipse-java-helios-SR1-macosx-cocoa-x86_64.tar.gz on Mac OS/X 10.6.4
with JavaForMacOSX10.6Update2.dmg installed (java version “1.6.0_20” as
reported by java -version).

There was nothing in ~/Library/Java/Extensions, nor in
/Library/Java/Extensions.
However, in /System/Library/Java/Extensions I found a number of files.
I took the step of renaming /System/Library/Java/Extensions to
/System/Library/Java/Extensions.old, and then tried launching “eclipse -clean”
again.

This time it worked. Hope that helps somebody.

(https://bugs.eclipse.org/bugs/show_bug.cgi?id=318046#c22)

平たく言うと、Java/Extensionsフォルダを名前変更してcleanしやがれ!ってことらしい

f:id:krote:20110719005837p:image

早速、名前を変更してターミナルからcleanオプションつけて起動してみたら、ちゃんと起動した。
うーん、なんだろう?Extensionsフォルダにある何かが悪さをしているのだろうか??
ちょっと原因そのものは謎だ。
これ、名前変更したままでいいんだろうか・・・

Scala IDEのインストール

Eclipseがなんとか動いたので、早速Scala IDE をインストールする。

PluginのインストールはHelpメニューからInstall New Softwareを選択する

f:id:krote:20110719005838p:image

今回追加するのはScala IDE。

Scala IDE
http://download.scala-ide.org/

これを見る限りだと、「Recommended for most users」とされているのがBETA RELEASES RELATIVE TO SCALA 2.9.0-1になっているので素直にこれに従ってみる。
それにしてもBetaが推奨されるというのは、ちょっと違和感を感じるのだが・・・大丈夫であろうか。

f:id:krote:20110719005839p:image

全部インストールしていくと、New Projects の選択肢としてちゃんとScala Projectが出てくるようになった

f:id:krote:20110718180229p:image

とりあえず、「ちゃんと動くのかよ、これ?」ってことでHello, Scalaなんぞを作ってみたりしたが、動いているようだった。

object Test {
def main(args:Array[String])
{
println(“Hello, Scala”)
}
}

>Hello, Scala

いやいや、実際は

トントン拍子に行ったように書いているScala IDEのインストールだが、実はこれにもちょっとハマった。
指定したURLを、最初参考にしていたURLに従って入力を行ったのだがそれがずいぶんと古い記事でScala 2.7がインストールされてしまった。さらにその後で2.9を入れたりしたらまともにビルドできない状態になってしまったのだ。
Pluginを消してみたりもしたけどうまく行かず、最終的にはEclipseフォルダごと消して、もう一度やり直してみたらうまく行った。

うーん、なんだかIDEそろえるだけでここまで手間がかかるとは思っていなかったので、少し疲れたなぁ
ま、何はともあれ環境がようやくそろったので、もうちょっと遊んでみよう。

MacでのScala環境を構築

とりあえず勉強中のScalaを試す環境を作ってみようと思い、iMacに構築してみた。
以下備忘録を含めて。

開発環境をどこに作るべきか

開発の環境を作る上で、どういう形で構築するのか?ということを少し悩んでいました。
あまりにもローカルに依存すると移行時に手間がかかったり、ローカルがゴミだらけになってしまうからです。
会社のWindows機はあれこれとアプリを試したおかげでそれはもうひどい状態になってしまいました。。。

少なくとも自宅のPCに関してはそうはすまい!と思いつつもノートPCは一部ゴミが残ってしまっています。

これらの解決には、やはり仮想環境を構築して、仮想上での開発を行っていくのが効率的に感じています。仮想環境の構築にはWindows上ではサーバー機に関してはHyper-V。クライアント上ではVMWare Serverを利用していました。

Macに関してはHyper-Vは無理なので真っ先に思いついたのはVMWare。ところが、VMWareはMac版に関しては無料の環境を提供していませんでした。
MacでVMWareを利用するにはFusionを購入する必要があるみたいです。

VMWare Fusion
http://www.vmware.com/jp/products/fusion/overview.html

値段としては8000円ほどなので買えなくはない値段ではあるのですが、選択肢としてはその他にもあるようなのでもう少し吟味したい。
吟味したいからといって、このまま何も出来ないのももったいないのでとりあえず最低限の環境だけでもインストールしてみることにした。

MacPortsのインストール

環境の構築にはMacPortというものを利用するのが比較的容易だと紹介されていたのでおとなしくそれに従ってみる。
ちなみに以前Windows環境でScala環境を構築した際には公式ページからダウンロードしたものを利用した

MacPorts
http://www.macports.org/

ちょっと気になるのは

Please note that in order to install and run MacPorts on Mac OS X, your system must have installations of the following components:

  1. Apple’s Xcode Developer Tools (version 3.2.1 or later for Snow Leopard, 3.1.4 or later for Leopard, or 2.5 for Tiger), found at the Apple Developer Connection site or on your Mac OS X installation CDs/DVD. Ensure that the optional components for command line development are installed (“Unix Development” in the Xcode 3.x installer).
  2. The X11 windowing environment (A.K.A. “X11 User”) for ports that depend on the functionality it provides to run.
    • The “X11 User” package is an optional installation on your system CDs/DVD for Tiger, enabled through the “Customize” button of the installer, whereas it is included by default on Leopard and Snow Leopard.
    • You can use the xorg-server port instead of Apple’s X11.app if you wish.

という注意書きがあることだ。

Scala環境の構築に参考にさせていただいたサイトにはMacPortsインストール時にXCodeが必要なんていう話は見当たらなかったんだけど・・・。
まぁ、本当に必要かどうかはわからないけど、XCodeはそのうち遊んでみたいと思っていたものなのでインストールだけしておくことにした。

XCode
http://developer.apple.com/technologies/tools/whats-new.html

Appleに開発者登録を行ってダウンロード&インストール。
XCode以外にもツールはあるようだけど、とりあえず今回の趣旨からは外れるのでそれはまたの機会ということに。

MacPortsそのものは先にあげたサイトからダウンロードしてインストールするだけ。
ターミナルを起動し直さないと認識してくれなかったけど、いってしまえばその程度だった。

Scalaのインストール

MacPortsを使ってScalaインストールするには、コマンドで

$ sudo port install scala

ってうてばいいという話だったが、

—> Fetching scala
—> Verifying checksum(s) for scala
—> Extracting scala
—> Configuring scala
Error: Please use one of the numbered scala* ports instead.
Error: Target org.macports.configure returned: obsolete port
Log for scala is at: /opt/local/var/macports/logs/_opt_local_var_macports_sources_rsync.macports.org_release_ports_lang_scala/main.log
Error: Status 1 encountered during processing.

エラーになってしまった。どうやら今はバージョン番号まで指定する必要があるみたい。

MacPorts経由でどんなバージョンがあるのかを調べるには
port search scala
ってやれば出てくる。

scala-devel @2.8.0.Beta1-prerelease (lang, java) The Scala Programming Language
scala-migrations @1.0.1 (java) Database migrations written in Scala
scala27 @2.7.7 (lang, java) The Scala Programming Language
scala28 @2.8.1 (lang, java) The Scala Programming Language
scala29 @2.9.0 (lang, java) The Scala Programming Language
scala_select @0.1 (sysutils) Switch the default scala compiler

みたいな感じで出てきた。
とりあえず、何も考えずに最新っぽい29を選択してみる

$ sudo port install scala29

これでインストールが完了。

次に、インストールされた場所に対してパスを通してあげる必要があるとのこと。
Windowsでは環境変数に入れるだけなんだけど、MacはどうやらHome配下にある「.profile」というファイルに書き込む形をとるようだ。
このファイルに対してアクセスするには、GUIではなくターミナルなどを利用する必要がある。
という訳で、ターミナルを起動して直下をみてみる。「.」で始まるファイルを検索するにはオプションが必要

$ ls -a

確かに「.profile」があったのでこれを編集する。
編集に使うのは「vim」や「emacs」のようなエディタを利用する。

会社に入って、最初についた上司がMeadow使いだったのもあって、わずかばかりだけどMeadowなら使ったことがある。という訳でEmacsを選択

$ emacs .profile

パスを確認する。

http://d.hatena.ne.jp/AWAWA/20080503/1209825789
をみる限りでは、追加しなければいけないのは2行。

export PATH=/opt/local/bin:/opt/local/sbin:$PATH
export MANPATH=/opt/local/man:$MANPATH

ただ、最初の一行は既にあったので二行目のみ追記して保存する。
準備は整ったはずなので早速Scalaを実行してみる。

$ scala

  • bash: scala: command not found

あれ?起動しないぞ?パス通すの失敗したのかな?

って訳で、実際にそこのパスに移動して確認してみることにした。
そうすると、フォルダ名が「scala-2.9」ってなっていた。ということは。。。

$ scala-2.9
Welcome to Scala version 2.9.0.final (Java HotSpot(TM) 64-Bit Server VM, Java 1.6.0_24).
Type in expressions to have them evaluated.
Type :help for more information.

scala>

おお、きどうしたきどうした。
ただ、起動にバージョン番号付きっていうのがちょっと微妙だな~。単純にScalaで呼び出せないのかな。フォルダ名変えればいいだけかな?もうちょっと調べてみる必要がありそうだ。
最終的にはEclipseなりNetBeansなりをインストールして開発するのがいいように感じるけど、それはまたの機会。
とりあえず試すことの出来る環境が作れれば今は事足りるのでここまでにした。

CUI

Windowsでしか開発を行ったことがなかった私にとって、これまでCUIを使う必然性はなかったためにEmacsやターミナルを始めとしたCUIはなれるのに少し時間がかかりそうだ。
親切かどうかは別として、慣れてしまえばこの先の開発生産性や開発生活に大きく貢献してくれる分野であるのでしっかり習熟していきたいですね。

まだまだです。

Scala勉強メモ

4月の頭に書いたけど、ようやくScalaの勉強を始めた。
と言うわけで、参考にしているモノをメモ。

参考書

まずは参考になる本をと言うことで、通称「コップ本」と言われる本を購入した

Scalaスケーラブルプログラミング[コンセプト&コーディング] (Programming in Scala)
Martin Odersky Lex Spoon、Bill Venners
インプレスジャパン
売り上げランキング: 25413

た、高い・・・。(4600円)
専門書が高いのはわかっちゃいるけどやっぱり高い。
直近の仕事で利用する予定があるわけではないからこそ、自分から使う場面を作っていくなりしないと元が取れないな。

本書はScalaに関しての、一番優れた本としてよく紹介されている。
ただ、Javaに精通した人間であれば読めなくはないがいきなりScalaを学ぶにはハードルが高いと言う意見もある。
まだまだ読み始めたばかりなので何とも言えないが、躓くことは予想できなくない。

じっくりと取り組んでいくつもりではあるが、Scalaを学ぶ上で一番躓きそうなこととしては「関数型言語として考えることができているか?」と言うことだろう。
Scalaそのものはオブジェクト指向としても関数型としても使えるが、関数型へ傾倒しているのは間違いない。
言語の特性を生かすのであれば、関数型の考え方を身につけることが大事。

そして、それはプログラマとしての成長にもつながるかもしれない。

と言うわけで、躓いた時にはこの本を手に取ってみようかと考えている。

オブジェクト指向プログラマが次に読む本 -Scalaで学ぶ関数脳入門
株式会社テクノロジックアート
技術評論社
売り上げランキング: 5701

こちらは、Scalaを題材にはしているがScalaそのものを学ぶための本ではない。
関数型の考え方を学ぶ本のようだ。ううむ、こちらもいいお値段しますな。
実際に手に取ってみたわけではないが、こういう考え方をちゃんと身につけることができるか?は重要だろう。
オブジェクト指向で書くのであれば、JavaでもC++でも構わないわけだし。

Web教材

ご多分にもれず言語の勉強。特にスタート時の「触ってみよう」みたいなレベルは@ITやその他技術系のサイトで見つけることができる。
ただ、書いてあることはあくまで最低限で、深く理解を得ようとしたり、継続して取り組んだりするのには分量的に厳しいことが多い。

企画ものはちょっとおいておいて、コップ本に取り掛かる前にいくつか目星をつけたページがあるので、ここに紹介したい。

Welcome to Scala hack-a-thon ‘s documentation!
http://dl.dropbox.com/u/261418/scala-hackathon/index.html

日本語でかなりわかりやすく解説されている。
広告一杯の企画モノサイトを見るよりはよっぽどいいと思って、序盤かなり重宝していた。
ただ、困ったことに書きかけであって完全ではない。場所によってはチャプター丸ごと書いてなかったりする。
更新されているのだろうか。。。

Daily Scala
http://daily-scala.blogspot.com/

最近はもうすっかり更新されなくなってしまったが、Scalaに関してのサンプルやビギナー向けの解説が書かれている。過去分からのんびりとみていくと、時々「ハッ」とするような例も。

Programming Scala
http://programming-scala.labs.oreilly.com/

英語ではあるが、オライリーのScala本?ちょっとまだ読みきれてない

じっくりじっくり

本当にあちこちで言われているように、コップ本がJavaにある程度精通した人間じゃないと読めない代物であるならば、私の場合はかなり時間がかかるだろう。
焦らず、じっくりと読んでいく必要がありそうだ。

Scalaに詳しい人でもっと参考になるものがあれば教えてくださいまし~。
本に関してはまずはコップ本に挑戦してから…になりますが(^^;