第13回名古屋Scala
11/19 に、第13回名古屋Scala勉強会に参加してきました。
- 27章 オブジェクトを使ったモジュラープログラミング
- 28章 オブジェクトの等価性
- equals と ==
- 参照等価、等価、比較
- 実装する際には、意図しない再帰に注意 (C# ==(A a, object b) 内で、a == null 判定とか)
- null は Null 型 (Null型 : p196(11章))
- LSP
- bleis 先生による LSP 違反の例
- 値のセマンティクスを持っているクラスを継承可能にしていることがそもそもの問題
- 個人的には、そのクラスのインスタンスを生成できるクラスは継承を許したくない
- case class 素敵
- 継承も出来るっぽい
- でも継承すると LSP 違反の問題が・・・ (case class なら大丈夫?)
- hashCode
- Hashable インタフェース的なもの作って、Hash系データ構造で Hashable 要求すれば、いい感じに hashCode 強制できそうな
- commons 素敵
- タプルいい感じ (リストでもおk)
- equals と ==
GitとGitHubを体験しながら身につける勉強会 第2回
10/30 に、GitとGitHubを体験しながら身につける勉強会 第2回 に参加してきました。
始まる前に、bleis と F# の GUI まわりって Functional ちっくに書けたりするっぽいねとか、
そういうことは osiire さんが詳しいよとか話してたら、なんとご本人登場。
さらにゆるPerlの人たちが少し遅れて登場。(時系列ぁゃしぃ)
自分は中級コースに参加。
Magistol君とペアで githubでいろいろやってみる。
そういえばお魚君は初級コースにいたような。
Magistol君のPCはなんか環境が残念なことになってた。
- まずは、自分のgithubにリポジトリいっこ作った
- で、最初は、協力者にMagistol君を追加して、pushとかしてみる
- その後、このリポジトリをフォークしてもらった
- で、編集したり push したり pull request もらったりマージしたり
- 役割交代
- Magistol君の作ったリポジトリ
- から、フォークする
- で、編集したり push したり pull request 送ったり
pull リクエストもらったときに、githubの下にあったやり方で、
branch 作る → 「git pull url的な master」ってやったけど、
リクエストもらったリポジトリを remote に add して update すると取れるので、
それを rebase なりして reset するのがいい感じらしい。
あと、submodule ってのがあって、リポジトリの中にリポジトリ作ったり出来るらしい。
自分はそこまで行かなかったけど、結構便利そうな機能だ。
F# が楽しそうなので、F#の環境も入れないと。
- 懇親会
帰りはMagistol君とお魚君と。
彼らは行きも一緒に来ていてラーメンを食べるなどしたらしい。
豊橋駅からはMagistol君の車で送ってもらえた。わーい。
Boost.勉強会 #3 関西
10/23に、Boost.勉強会 #3 関西に行ってきました。
千里中央駅からが分かりにくい・・・><
10時ちょっと過ぎに到着・・・
- まとめかメモかなんかそういう
- 発表資料が遅延評価されたらしく、順番が少し前後
- 「C++かわいい。」
- OAuth めんどいらしい
- D はとてもホットな言語なのでみんなご存じでしょう
- D 言語は就職にも有利らしい
- C++ : 闇の軍団が使うらしい 使うと発狂する
- D じゃないとダメなんでしょうか? Boost じゃダメなんでしょうか?
- C++ っていい言語なんですかね?
- trickerr.h 素敵
- ひどいひとがいたんですね
- 「アルゴリズムの詳細を知らないが大丈夫か?」
- 「大丈夫だ、問題ない」
- 「一番いい最短経路アルゴリズムを頼む」
- ラムダ式分からない人は分かってください
- プリプロセッサの自動生成には Perl を
- Function は一回死んだ方がいいらしい (組み込み)
- 牛じゃなくてヌー
- iostream を1週間で作り直そう → ミリ
- プレゼント → 「昇龍拳」 → 「どやっ」
- STL : 「コンテナ×イテレータ×アルゴリズム」
- PropertyMap : 「データ構造×(デスクリプタ、イテレータ、プロパティマップ、ビジター)×汎用アルゴリズム」
- しまめん先生はとてもしまめん
- 魔導書 と C++TT にサインもらったよ
- 帰りとか
- 大阪-名古屋間で bleis 先生と C# かわいい ってやってた
- 名古屋駅で改札通ったときに最終の1本前出てて、40分待ち・・・
- 豊橋駅から徒歩かと思ったが留学生の友人に車を出してもらえた わーい
Jaav っぽいの
なんか bleis 先生が関数型っぽいライブラリを Java で作ってるっぽくて、自分も作ってみようかなーって適当に作ってたらとても残念な感じになったのでのっけてみる。
コードは rf0444's jaav at master - GitHub に。
よくもこんなキチ(ry
まずは Function インタフェース。これがないと始まりませんよねー。
public interface Fun<T, R> { R _(T x); }
メソッド名 _ ってw。Jaav もこうらしいw。
続いて Unit。
public enum Unit { _ }
_ 万能説ww。
Function の便利メソッド達。楽しすぎてやばい。(Fun的な意味でw)
public static <T1, T2, T3> Fun<Fun<T2, T3>, Fun<Fun<T1, T2>, Fun<T1, T3>>> compose() { return new Fun<Fun<T2,T3>, Fun<Fun<T1,T2>,Fun<T1,T3>>>() { @Override public Fun<Fun<T1, T2>, Fun<T1, T3>> _(final Fun<T2, T3> f1) { return new Fun<Fun<T1,T2>, Fun<T1,T3>>() { @Override public Fun<T1, T3> _(final Fun<T1, T2> f2) { return new Fun<T1, T3>() { @Override public T3 _(T1 x) { return f1._(f2._(x)); } }; } }; } }; } public static <T1, T2> Fun<Fun<? super T1, ? extends T2>, Fun<T1, T2>> cast() { return new Fun<Fun<? super T1,? extends T2>, Fun<T1,T2>>() { @Override public Fun<T1, T2> _(final Fun<? super T1, ? extends T2> f) { return new Fun<T1, T2>() { @Override public T2 _(T1 x) { return f._(x); } }; } }; }
Option も作ってみたけど、便利メソッドを関数型ちっくに書こうとして、型推論が出来ないようで全部自分で書くという残念なことに。(まぁこれはこれで面白いww)
public static <T1, T2> Fun<Fun<T1, Option<T2>>, Fun<Option<T1>, Option<T2>>> bind() { return new Fun<Fun<T1,Option<T2>>, Fun<Option<T1>,Option<T2>>>() { @Override public Fun<Option<T1>, Option<T2>> _(final Fun<T1, Option<T2>> f) { return new Fun<Option<T1>, Option<T2>>() { @Override public Option<T2> _(Option<T1> x) { return x.flatMap(f); } }; } }; } public static <T> Fun<Option<Option<T>>, Option<T>> join() { return Option.<Option<T>, T>bind()._(Funs.<Option<T>>id()); } public static <T1, T2> Fun<Fun<T1, T2>, Fun<Option<T1>, Option<T2>>> map() { return new Fun<Fun<T1,T2>, Fun<Option<T1>,Option<T2>>>() { @Override public Fun<Option<T1>, Option<T2>> _(final Fun<T1, T2> f) { return Option.<T1, T2>bind()._(Funs.<T1, T2, Option<T2>>compose()._(Option.<T2>unit())._(f)); } }; } public static <T1, T2> Fun<T2, Fun<Fun<T1, T2>, Fun<Option<T1>, T2>>> maybe() { return new Fun<T2, Fun<Fun<T1,T2>,Fun<Option<T1>,T2>>>() { @Override public Fun<Fun<T1, T2>, Fun<Option<T1>, T2>> _(final T2 x) { return new Fun<Fun<T1,T2>, Fun<Option<T1>,T2>>() { @Override public Fun<Option<T1>, T2> _(final Fun<T1, T2> f) { return Funs.<Option<T1>, Option<T2>, T2>compose()._(Option.<T2>getOrElse()._(x))._(Option.<T1, T2>map()._(f)); } }; } }; } public static <T1, T2 extends T1> Fun<Option<T2>, Option<T1>> cast() { return Option.<T2, T1>map()._(Funs.<T2, T1>cast()._(Funs.<T2>id())); }
あとはリスト系もやろうと思ったけどここまででおなかいっぱいになってやめたww。
わんくま名古屋勉強会#15
10/16 に、わんくま名古屋勉強会 #15に参加してきました。
第12回名古屋Scala
10/15 に、第12回名古屋Scala勉強会に参加してきました。
- 懇親会
手羽先うめぇ!
- bleis宅
次の日に わんくま同盟 名古屋勉強会 #15 があったので、泊めてもらうことに。
a-hisame君も一緒。
自分は、泊めてもらう分と、前回ゴミ持って帰るの忘れてた分ってことで、まず食器洗いを引き受けた。
食器洗った後、bleis とプログラム談義したりしてた。
a-hisame君は何故か床で寝てた。
bleis が寝た後、自分は AB の続きを見る。(2時位〜)
・・・・・・
天使ちゃんマジ天使。
天使ちゃんマジ天使。
・・・・・・
ってことでAB見終わった (7時前)
名古屋Hackathon
10/9に名古屋Hackathon - ラムダ村に参加しました。
自分は Coq 組で参加。Coq to Scala をやってた。
Coq 組の朝は遅い。にわとりなのに。
環境構築に時間かかってた。make 長い・・・
最初は Scheme や Haskell のを修正していく感じだったけど、読むだけでいっぱいいっぱい。
終了30分前くらいに、空実装から組んでいった方がいけそうだってことで、初めから。
結局、項定義のほんの一部をちょっとだけ作った。
組んでるときは型のある言語素晴らしいけど、自動生成ではき出す先としては動的型付けの方が楽。
yoshihiro503「型のない言語は良いなぁ!」
http://twitter.com/RKTM/status/26823635597
会場「ざわ・・・ざわ・・・」
会場「まさかあの yoshihiro503 さんからそんな言葉が・・・」
今まで使ったことなかった、Coq の Extraction 周りについて勉強するとても良い機会になった。
コードはそのうち公開するかも。といっても大したことしてないけど。
reflexivityつおい
Require Import List. Theorem sum_10_eq_55 : fold_left (fun y x => y + x) (seq 1 10) 0 = 55. Proof. reflexivity. Qed.
ぅゎ、reflexivity っぉぃ。
練習リポ
Coq で練習してたファイルたちを github で管理。
rf0444's coq
GitとGitHubを体験しながら身につける勉強会
9/18 に、GitとGitHubを体験しながら身につける勉強会に参加してきました。
- merge とか使わない。rebase 使う。 (by bleis)
- .bashrc の PS1 に $(__git_ps) で現在のブランチを表示できる
- 自分の .bashrc もこんな感じにした (Ubuntu)↓
#if [ "$color_prompt" = yes ]; then # PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ ' #else # PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ ' #fi PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\] : \[\033[01;34m\]\w$(__git_ps1)\[\033[00m\] \$ '
-
- .bashrc (Cygwin)↓
PS1='\[\e]0;\w\a\]\n\[\e[32m\]\u@\h \[\e[33m\]\w$(__git_ps1)\[\e[0m\]\n\$ '
- git cat-file -p ハッシュ で、ハッシュの指す中身を見る
- 中身
- commit
- tree
- tree
- ディレクトリ
- blob
- ファイル
- tree
- parent (commit)
- 一個前のコミット (ある場合のみ)
- tree
- commit
- 中身
- git push = git push origin master
- master から辿れるコミットのみ push
- git push (リモート名) (ブランチ名)
- git reset
- git reset
- インデックスを戻す。ワーキングディレクトリはそのまま。
- git reset --hard
- インデックス、ワーキングディレクトリを戻す。
- 今のブランチごと移動する感じ
- git reset
- git のマージ
- (必要なら rebase して、) git reset --hard でマージ
- fast forward マージの代わりに、移動
- やってることは同じ
- (必要なら rebase して、) git reset --hard でマージ
- gitconfig
- 自分の .gitconfig はこんな感じ ↓ (名前/メールアドレス部分省略)
[color] ui = auto [core] editor = vim [alias] log-all = log --graph --all --color --pretty='%x09%h %cn%x09%s %Cred%d%Creset'
log-all は git logで、gitk --all くらい情報ほしい から頂きました。
- git add -p
- ファイルの一部をステージするとかできる
- git stash
- 一時的に他のブランチに移って移動できる
- bleis
- いきなり講師を振られて難なくこなす bleis さんマジ bleis!
いろいろやった場所 : rf0444's hoge at master - GitHub