OE_uia Tech Blog

ScalaMatsuri / Scala / Android / Bioinfomatics

ScalaのREPLを拡張するには

| Comments

こちらはScala AdventCalendar 2014の7日目の記事です。 今日はScalaのカスタムREPLの作り方についての話。なお今回は(Scala REPL同様)StandaloneなREPLアプリの作成を目的としているので、:powerモードは主眼ではありません。

モチベーション

ScalaのREPLは手元のローカルマシンでAPIを試してみたいときや、ちょっとした計算をしたいときにはとても便利なのですが、やや凝ったことをしたいときなど、そのまま使うには不便さを感じることがあります。

具体的にはAndroidのAPIをScalaのREPLから叩けるようにしたかったのですが、Android環境をJVMでエミュレートするためにはカスタムClassLoaderを使ってAndroid APIのClassを書き換える必要があって。。。という感じ。

これはちょっと特殊なモチベーションかもしれませんが、クラスター上などの特定の環境で実行させたいとき(e.g.spark-shell)、自作ライブラリのsandbox環境を提供するにあたって特定の場面でよく使うコマンドを追加したい、など思われる方はいるかもしれません。

そんなとき、意外とScala REPLを拡張する記事を書いている人が少なかったので、今回はScalaのソースコードを読みながらカスタムClassLoaderを使用する方法、コマンドを追加する方法について書くことにしました。

参考:Create your custom Scala REPL … 数少ないREPL拡張方法に関する記事。

成果物

taisukeoe/MyCLRepl

MyCLRepl DEMO
1
2
3
4
5
6
7
8
9
10
11
scala> val hello = "hello"

MyClassLoader loads classOf <root>.$line3
<<中略>>
MyClassLoader loads classOf scala.collection.mutable.StringBuilder
MyClassLoader loads classOf scala.runtime.ScalaRunTime$
hello: String = hello

scala> :myCommand hello

This is a custom command example. You can do something from value:"hello" with custom Scala interpreter.

ClassLoaderの差し替え(Classのロード時にクラス名をprint)と、myCommandというコマンドの追加をしています。

ScalaMatsuri 行動規範を掲げた経緯

| Comments

今年から、行動規範をScalaMatsuriとして掲げ始めた。 その目的は「みんな仲良く」。噛み砕いて言えば、性別、国籍などに起因するような少数派が居心地の悪い思い、不快な思いをしないことを目指している。

この行動規範について、突然Webサイトに追加されたので驚かれた方も多いかもしれない。この行動規範は、現実に発生しそうになった問題から、必要要件を考え、準備委員内で長期間に渡り議論を重ねた上で公開したものだ。

既にその目的については@eed3si9n_jaさんがカンファレンスでのユニバーサル・アクセスへ向けてという記事でまとめてくださっているが、来年から本格的に運用するにあたり、この行動規範を掲げた経緯も含めて紹介することが、ご理解とご協力をいただく上では重要ではないかと考えているため、この記事を書くに至った。

ScalaMatsuri 2014 OMOTE/表

| Comments

9/6,7の2日間、ScalaMatsuri 2014という日本最大(おそらくAsiaでも最大?)のScalaのカンファンレンスを開催し、総来場者数が400人強、ニコ生視聴者14万人超、昨年に引き続き#ScalaMatsuriがTwitterトレンド入りと、盛会のうちに幕を閉じました。 ご来場者、スポンサー企業、ニコ生視聴者、スタッフの皆様、本当にありがとうございました。

今回は、主にOMOTE / 表側の紹介です。写真なども後日この記事に追加予定。裏側紹介はアンケートデータの整理などが終わり次第、また書きます。

[Deprecated]ScalaでAndroidアプリを作るには(IntelliJ IDEA + Sbt)

| Comments

この記事の内容は執筆当時のものです。最新の内容はこちらを参照してください。

LinkedInのブログで、EclipseベースのScalaによるAndroidアプリ開発環境が紹介されてました。(と、 @okapiesさんに教えていただきました。ありがとうございます。)

The technology behind EatIn: Android apps in Scala, iOS apps, and Play Framework web services

うちのAndroid Scala開発環境はIntelliJ IDEA + sbtなので、折角なのでこんな風にも出来ますよと紹介してみます。本当はLinkedInブログに対抗して (sorry eclipse users!!) って書きたかったw のですが、IntelliJはエディタとして使ってるだけなので、Eclipseに変えても大して支障ないです。というわけでお好きな方をどぞ。

Androidに馴染みが無い方にも、Scalaに馴染みが無い方にも試してもらえるよう、クドいぐらいに丁寧に書いてますので、慣れ親しんだ部分は読み飛ばしてください。

また、「もっとこうした方がいいんじゃない?」みたいな突っ込みは大歓迎です。

開発環境

以下コマンド例はMac/Linux用なので、Windowsの方はお好きな方法で適宜書き換えてください。

各種インストール

Android Studioを触ってみた

| Comments

概要

Google I/O 2013 初日(日本時間5/16 1:00)にて発表されました。IntelliJ IDEAベースのAndroidに特化したオープンソースのIDEだそうです。

そのほかの、Google I/O関連のまとめはこちら。Galaxy S4のNexus化モデルの販売やら、Google Mapの強化、PlatformとしてのChrome、GmailとGoogle Walletの統合など、他にも盛りだくさんな発表がありました。

これら発表を受けて、Googleの株価は過去1年間で最高の915ドルまで急騰した模様。

Google、Android向け統合開発環境「Android Studio」を発表 - ITmedia Mobile

Google I/O 2013 開幕、初日キーノート速報 - Engadget Japanese

【速報】 Google I/O 2013キーノート講演まとめ #io13-ノート|U-NOTE【ユーノート】-イベントまとめプラットフォーム

Google株、Google I/O初日に52週最高の915ドルで引ける。Apple再び下げる | TechCrunch Japan

1.Android Studioインストール

もうWindows/Mac/Linux版が公開されています。ただしv0.1のearly access previewなので、productionには使わない方が良いとのこと。

Scala2.10.x Bytecode Problem

| Comments

概要

Scala 2.10以上でAndroid4.1以上のライブラリと一緒にコンパイルしたプロジェクトを、Android4.0以下の端末で動作させるとNoSuchMethodErrorがthrowされます。原因はScala2.10.x系のコンパイラの不具合。親クラスで実装されたメソッドをそのまま継承した場合、2.9.x及びJavaではメソッドのqualifying typeの参照が子クラスになるのに対し、2.10.xではqualifying typeの参照が親クラスになってしまうことが直接の原因です。

詳しくは第99回rpscalaで発表したスライドをどうぞ。

このバグと同種のものがJIRAでも見つからなかったので、issue報告を上げた結果、3/23に無事修正されたようです。

[#SI-7253] SQLiteDatabase cannot be closed in Android 4.0 or below devices, in apps built by Scala 2.10.x w/ Android 4.1 due to Scala 2.10.x bytecode problem. - Scala

rpscalaでの発表時によくわからなかった以下のポイントがクリアになったので、フォローアップとして記載しておきます。

  • これは意図された仕様変更なのか?
  • これはバグなのか?
  • いつ直るのか?

「Rでつなぐ次世代オミックス情報統合解析研究会」に参加してみた

| Comments

Japanese Society for Bioinformatics - JSBi :: 第2回Rでつなぐ次世代オミックス情報統合解析研究会@理研横浜

オミックス(omics)とは?

生物学の各領域(遺伝子、転写産物、タンパク質…etc)を総体(ome)として理解する学問(ics)。

オーミクス - Wikipedia

なぜ参加したか?

元々大学ではin vitroな実験系分子生物学の研究室に3年間在籍していたものの、今はプログラミングばっかりやっているので、バイオインフォマティクス(情報生物学)はピッタリじゃないかなーとか。半分は完全に趣味ですが。

面白かったポイント