(-> % read write unlearn)

My writings on this area are my own delusion

渋谷JVM(20150418)のメモ

1年以上前の渋谷JVMの参加メモが下書きのまま放置されていたので、もったいないので晒しておきます。


渋谷JVMのメモです。結構長かったし、楽しい雰囲気なのであんまりメも取らなかったです。いつもどおり体裁すら整えてないけど、メモ書きとして。

I love scala

@takezoen さん

2006年頃Haskellが流行った。 Haskellで書かれたシューティングゲーム:monadius

Monadを必要とはせずに入れる関数型言語。手続き型でも書ける。 このバランス感覚が、Scalaの一番の魅力。 型安全にマクロが書ける。

Scala.jsも結構本気で開発されている。 オダースキーが新コンパイラを開発中。 TASTY:JavaバイトコードとJSのコードの両方を出力できる。

Clojure

@kawasima さん

2大カリスマ リッチ・ヒッキーとノーレン・デービッド。

Concurency core.async CSP

thread-based coroutine-based core.async はClojureScriptでも。Clojureと全く同じように動く。 ただ、javascriptはシングルスレッドモデルなので、goのみ対応。

もともとポール・グレアムに騙されてAnsiCommonLispを読み始めて挫折した過去がある。 作りたいアプリがあって、それをつくろうとすることが多い。 まず勉強から始める、というパターンではない。 Clojureを始めた時もそうだった。

JGGUG/NTTソフトウェア株式会社 Grails推進室

上原潤二 @uehaj さん

Groovy1.8まではコンパイル時型チェック。 Groovy2.0からは静的型チェック・静的コンパイルJavaに準じた静的なコードも吐ける。

2.3 Traitの導入。 動的Trait注入:Java8のデフォルトメソッドとの違い。 Grails3で積極的に使われている。 Hamlっぽいテンプレートエンジンが導入。

2.4 Android対応。

Grails3は SpringBoot ベースになった!起動がすごく早くなった。

Pivotal社が2015・03にGroovy開発社の直接雇用を降りて、 よりOSS寄りになった。

様々なDSLに Spock: 単体テストDSL Geb: seleniumDSL Graidle: ビルド用DSL Grails: Webアプリ開発用のDSL

盛り返すJava

オラクル 淡々とマネージメント。Javaリリースに株価が依存していたSunとの違い。 健全にマネージメントされている。

ラムダは匿名クラスのシンタックスシュガー? 違う。 thisの扱いが違う。 匿名クラスだと this は匿名クラスを指す。 ラムダだと this はラムダの外のクラスを指す。

  • ラムダの場合はコンパイルした後に余計なクラスは作られない。
  • invokedynamic命令が最初に使われている。 ラムダのバイトコード

なぜ匿名クラスじゃないのか。 Streamなどを使うとラムダをたくさん使いまくるので、クラスがたくさんできてしまう。 -> 起動時に時間がかかりすぎてしまう懸念。。

Java7で導入されたInvokeDynamic

  • もともとは動的型言語のための機能。
  • 実行時にメソッドの型を決めつつJavaVMの最適化もかけやすくなる。

Project Valhala

  • Specilization Box

Genericsの型指定に基本型を指定可能にする。 Array

  • any T でできないこと。

    • null との比較
  • any

問題の1つとしてクラスをいつ作るか。 ClassDynamic * 動的な クラスリンク。 * invokeDynamic のクラス版。

Value Type

  • 参照ではない。
  • メモリに直接配置される。
  • 効率がいい。

パネルディスカッション

  • maven の安定感たるや凄まじい。 gemでハマる若者。npmでハマる若者。cabal(Haskellのパッケージ管理ソフト)でハマる若者。

  • 子供は10歳くらいから抽象的な思考ができるようになる。 それぐらいまではプログラミングをやるのはきつい?

英会話スクールを契約してきた

ECCのビジネス向けのコースを契約してきた。

料金説明や一連の対応がちょっと残念な感じでした。。。 気になった点を羅列してみます。

  • 契約書には、決済方法として「現金」「銀行振込」「クレジットカード」の3種が明記されているのに、クレジットカードの説明が一切ない。 こちらからカード決済ができると書いてあることを尋ねても、「基本は現金か銀行振込なんですよ」という曖昧な回答を繰り出す。 はっきり「カードでもいいんですよね?」と聞いてようやく「はい」と答えてくれる。

  • 「1年間のレッスンを行うのに必要なお金を全て込みで見積もりをしてください」とお願いして了承しているのにテキスト代 6,000 円×4期の見積もりから除いており、しかもそれについて一切触れてこない。 さらに、年間のレッスン料の支払いが終わった直後にテキストの購入の話を出してくる。

  • 頼んでもいないECCスマホアプリの年間利用料(数千円?)を契約するものとして話を進めていく。

でも、きっとどこの英会話スクールでも似たような感じなんだろう。 何年か前に某英会話スクールの体験授業を受けたときは、担当者の営業の激しさにげんなりした。

ちなみに、昔イングリッシュ・ビレッジに通ってたときは、会計や契約周りで不穏(?)な対応は一切なかったな。 見積もりもシンプルで明瞭だった。 まあそれが売りの1つなんだから当たり前と言えばあたりまえなんだが。

悪いことばっかり書いてしまいました。。ごめんなさい。 誤解のないよう言っておきます。
担当してくれる先生はとてもいい人です。いつもにこやかで、レッスンは丁寧、質問には時間を忘れて熱心に答えてくれる、先生としてとても信頼しています。 スタッフの人もいい人達ばかりです。彼らが悪いとか、彼らのせいとかそういうこは全く思っていません。 営業や勧誘の過熱かマニュアルの行き過ぎか、あるいは経営層や現場の色々な思いのすれ違いの果てに、契約時の対応がちょっとばかり残念な感じになってしまっていたのです。悲しいですが。。。


話が前後してしまうが、英語をもっとちゃんと勉強しようと思い立ったのは、 このまま漠然と勉強を続けても、今以上には上達しなさそうな気がしたから。 リーディングとリスニングはそれなりにできるつもりでいたんだけど、最近そんなことないって気付いてしまった。 まず、読む速さが圧倒的に遅いし。そして読むのに体力使うから長文をコンスタントに読み続けられない。 リスニングは、英語ニュースとかならまだ聞き取っていける場合もある。 けど、PodCastで「ProgramingThrowdown」や「Cognicast」の配信を聞いていると、速すぎて聞き取れなくなって途中で切っちゃうことが結構ある。

よく言われることだが、英語ができないとITの世界で圧倒的に不利。 英語ができるのと情報工学を大学で専攻しているのとで、どっちがその後のキャリアで効いてくるかと言えば、微妙に英語の勝ちではないだろうか。 情報工学の良質な日本語資料はたくさんある。 日本人の書いた書籍もあるし、名著の翻訳もある。 Web上にもたくさんある。 現代では、やる気さえあれば情報工学の基礎はいくらでも後からキャッチアップできる。

しかし、最新技術の良質な日本語記事というのはない。 というか、(トートロジーのようだが)良質な日本語の記事がまだ無い技術のことを最新技術と呼んで、それで適切なんじゃないかと思う。

もちろん、英語だって社会人になってから熟達する人はたくさんいる。 そのための体系化された教材や資料、ノウハウ、スクールなど環境は十分に揃っている。 つまり、学ぼうと思えばいくらでも学ぶ手段はある。 しかし、社会人になってから英語を習得する人の多くは、仕事で差し迫った事情に追いやられた経験のある人ではないだろうか。 完全に勘だが、漠然としたキャリアアップやスキルアップとして英語を学ぶ社会人で流暢になレベルまで到達する人などほとんどいないんじゃないだろうか。 ITエンジニアの多くは、英語の習得に差し迫ることはない。 なぜなら、「なんとなく英語が読める」レベルであれば、十分に仕事にありつけるからである。 そして「なんとなく英語が読める」レベルがマジョリティでもあるだろう。

なんか結論は特にないんだけど、長くなってきたのでこのへんで。 それでは良い一日を。

Sublimetext3でF#を書く準備

MacのSublimetext3にF#の開発環境をセットアップしました。

ランタイムについては別のエントリにまとめたのでそちらをご参照ください。 ここではエディタのセットアップについてになります。

http://hatappo.hatenadiary.jp/entry/2016/06/30/060000hatappo.hatenadiary.jp

Setup F# Editor

XamarinStudioをインストールしていれば、XamarinStudioにエディタが入っています。 他の選択肢としては、VisualStudioCode、SublimeText、AtomEmacs、VIなどなど色々あると思います。 Guide - Cross Platform Dev Guide | The F# Software Foundationに各エディタの環境のセットアップについて書かれています。

以下、VisualStudioCode、SublimeTextのセットアップについて簡単に書きます。

1. Visual Studio Code

VisualStudioCode はプログラミング用のEditorです。MicrosoftがElectronベースにOSSで開発しており、無償で利用できます。VisualStudioCode自体は公式サイトからダウンロードしてください。

Ionide-fsharpAtomエディタ用のF#サポートのプラグインのようです。同じElectronベースだからなのか、VisualStudioCode用のパッケージも提供されているようです。 https://github.com/ionide/ionide-vscode-fsharp

Ionide-fsharpのインストールは、VisualStudioCodeを開いて、 Ctrl + Pを押して開いたフォームにext install Ionide-fsharpと入力すればOKです。
https://marketplace.visualstudio.com/items?itemName=Ionide.Ionide-fsharp

2. Sublime Text 3

自分は結局こっちの環境を使っています。やったのは以下のこと。

1. sublime-fsharp-packageのインストール

sublime-fsharp-packageには、シンタックス・ハイライト、コードの補完、ライブ・エラーチェックなどなどの機能があります。
詳細は githubのREADMEをを確認ください。

  1. Sublimetext3を起動。
  2. Command + Shift + P で開いたフォームに install と入力して Enter する。
  3. 少しのロード時間ののち、インストールしたいパッケージを選択するフォームになるので、
  4. fsharpと入力する。おそらく sublime-fsharp-package しかヒットしない。
  5. Enterすればインストールされる。
2. FSharp.sublime-buildファイルの作成
  1. メニューバーから ツール(T) > Build System > New Build System...
  2. 開いたファイルに以下のように設定を書いてFSharp.sublime-buildという名前で保存。
{
  "cmd": "fsharpc $file --out:$file.exe && mono $file.exe", // 例えば、 foo.fs ファイルなら foo.fs.exe という名前でコンソール用実行ファイルとしてコンパイルされます。
  "selector": "source.fsharp",
  "file_regex": " *(/.+)\\(([0-9]+),([0-9]+)\\)",
  "shell": true,
}

F#のファイルを開いてCommand + B(または メニューバーから ツール(T) > Build)して、コンソールに実行結果(標準出力の内容など)が表示されればうまくいっています。

ちなみに、ビルドを実行した際にコンパイルエラーなどがあると、コンソールのエラー表示のファイル名や行番号の記載がダブルクリック可能です。ダブルクリックすると、エディタでその箇所が開かれます。 このエラー出力からファイルを開くことを可能にしている設定はfile_regix正規表現です。マッチさせたグループの1番目がファイルのパス、2番目が行番号、3番目が何文字目か、としてパースされます。 きちんと吟味していないので、間違っているorもっと良い記述がある場合は教えて頂けると嬉しいです。

"cmd": "fsharpc $file && mono ${file%.fs}.exe"という設定だとうまく動きませんでした。なぜだろう。。

参考