琉TechのRuby勉強会に参加して。
とりあえず、行った。(ちなみに、朝から頭痛い。
入門編でした。
Ruby歴about2年なので、場違い感を感じて、
ハンズオン講師サボさんに申し訳ないと思いながら、他の事としてました。
クラスメソッド・インスタンスメソッド・メタクラス・得意メソッドからの
主にmainオブジェクトと戯れていました。
ことの発端は、あおもじさんのレシーバーな質問。
Rubyはオブジェクト指向なので、メソッド呼び出しの際にどこに住んでいるメソッドなのかを示さなくちゃいけない。
だから、
トップレベルのmainオブジェクトに関数型のhogeメソッドを定義。
def self.hoge puts self puts 2 end puts self => main
selfがmainであり、かつ、mainにhogeが住んでいるので呼び出しました。
main.hoge
でもエラーが・。
調べると、関数型メソッドはprivateなのでレシーバーを直接指定すると呼び出せないみたい。
privateなので、もしかして、得意メソッド?って思ったので、
確認してみた。(weblog読めなくてw
a = "hoge" def a.tokui puts puts self puts 2 end a.tokui
呼べた。
これで、関数型メソッド=得意メソッドだと思う(いや、メタプログラミングorたのしいRubyに書いてあったんじゃないか........orz
こっから、
i = main main.hoge
的なことすれば、呼び出せたり?とか思った。
からの
mainの実装は?
トップレベルでのself.classがObjectなら、cレベルのObjectの定義を見ればわかりそう。
ってな感じで、cを読んでいました。
どうやら、
object.cのrb_obj_class()が.classの実装らしい(これはエスパーです。Ruby under a microscope読めば、できるようになります。
VALUE rb_obj_class(VALUE obj) { return rb_class_real(CLASS_OF(obj)); }
CLASS_OF(obj)はdefineされている。
#define CLASS_OF(v) rb_class_of((VALUE)(v))
rb_class_of
static inline VALUE rb_class_of(VALUE obj) { if (RB_IMMEDIATE_P(obj)) { ^ if (RB_FIXNUM_P(obj)) return rb_cFixnum; ^ if (RB_FLONUM_P(obj)) return rb_cFloat; ^ if (obj == RUBY_Qtrue) return rb_cTrueClass; ^ if (RB_STATIC_SYM_P(obj)) return rb_cSymbol; } else if (!RTEST(obj)) { ^ if (obj == RUBY_Qnil) return rb_cNilClass; ^ if (obj == RUBY_Qfalse) return rb_cFalseClass; } return RBASIC(obj)->klass; }
mainオブジェクトなので,
return RBASIC(obj)->klass;
がreturnされますね。
ここで 「mainオブジェクトな構造体のメンバーklassがObjectを示している」ことを自分なりにエスパー
でも、次のマクロで死にました(読めない
#define R_CAST(st) (struct st*) #define RBASIC(obj) (R_CAST(RBasic)(obj))
ってなわけで、楽しかったですw
16日のokinawarbでhanachinさんと一緒に読む予定です。(かなり楽しみ。
あと、1年時に負けてらんないですね。 一年生が純粋にプログラミングやっている姿を見ていると 負けそうで、負けてたまるかって思いました。
brew upgrade ruby-buildしても、2.3.0が見当たらない
Mac 10.11
$ brew update $ brew upgrade ruby-build
しても
$ rbenv install -l
した際に 2.3.0が表示されませんでした。
もちろん、formuraのバージョンは最新でした。
解決方法として
無理やり
$ rbenv install 2.3.0
すると
ruby-build: definition not found: 2.3.0 The following versions contain `2.3.0' in the name: 2.3.0-dev rbx-2.3.0 See all available versions with `rbenv install --list'. If the version you need is missing, try upgrading ruby-build:
と表示されるので
$ cd /Users/kinoshita/.anyenv/envs/rbenv/plugins/ruby-build && git pull
すればいい!
ググラないで。いろいろ試すと、ハック力上がりますね。これは友達を見ていて思いました。
A simple tip : Big O notation via found element in golang.
I found great thing. It's a fast Big O notation go programing.If you don't know Big O notation, read next link .
Big O notation - Wikipedia, the free encyclopedia
If you always scratch programing in Ruby,but now in Go.If you wanna call look like a method which look like include? in Ruby in Golang.In the first place , do you know a include? method. which found argment element from receive object of list.There is similar Two way.which call look like it in go
First.
for loop.which is O(n).scratch below.
package main import ( "fmt" ) func main(){ var target [5]string = [5]string{"0","1","2","3","4"} for value := range target{ if 3 == value { fmt.Println("match") } } }
Second.
golang don't have to use list in this patarn. It should use map,which is O(1).like scratch below.
package main import ( "fmt" ) func main(){ map1 := map[string]int{"0":0,"1":1,"2":2,"3":3,"4":4} _, ok := map1["0"] fmt.Println(ok) }
map is faster than loop implemention.and below golang code is very cool. In the first place, golang thought is very cool.
_, ok := map1["0"]
dockerイメージをloopbackデバイスを使用して、mountする方法。(ex11.2 option)
大学の課題のメモ。作業中楽しかったので、久々にブログる。
課題 「dockerイメージをloopbackデバイスを使用して、mountして、dockerの中のファイルをいじろ!!」
やり方
dockerをrunして、 dockerをcontrol + pとcontrol + qでデタッチ
$losetup /dev/loop2 /dev/mapper/"マウントしたいdockerイメージ"
でマウントしたいdockerイメージをloop backデバイスに縄付ける。 マウントしたいdockerイメージは、tabを押せば出てくる。 自分の場合は、docker-253:0-35053790-e7af597718d6e033d81e36dbccff5539fe8c2f74dcd28914d0bda511f4eab40d ってでた。
間違って、poolを選ばないように。
$mkdir /mnt/mountpoint $mount /dev/loop2 /mnt/mountpoint
で、マウント先を作成して、マウント
ちなみに、アンマウントは、
umouunt /mnt/mountpoint
だと思う。
簡単だと思うけど、ここまでたどり着くのにかなり苦労しました。
苦労・感想
/dev/loop0をddコマンドでイメージを作成して、loop2にして、マウントしたができない苦労。できても、マウント先に何もない苦労。
/dev/loop0をddコマンドでイメージを作成して、mkfs.xfsコマンドでxfsフォーマットにして、loop2にして、マウントしたができない苦労。できても、マウント先に何もない苦労。
さらに、/dev/loop0をddコマンドでイメージを作成して、mkfs.xfsコマンドでxfsフォーマットにして、xfs_admin -uでuuidを確認して、マウントする際にmount -U 2f71b437-b644-4d47-b1ab-b913f7513ea6したが、マウントしたができない苦労。できても、マウント先に何もない苦労。
dmってのは、mapperで/dev/mapperにあるってのを気づいたので、できた(なんでもっと早く気付かない。)
できなかったのは、ddコマンドのxfsがおかしいと思う。そもそも、仕様てきにとかも思ったりもしてる。(適当) dockerのイメージは、mapperらしい(mapperあまりわからない.)
あと、xfsフォーマットや、xfs_adminコマンドについて学べました。
ちょうど、マウント祭りをやりたいなーと思ってたところなので、楽しかったです。 次は、lvmとかnfsについてやりたいなー。(そうゆう課題が欲しい()
参考文献
複数パーティションのHDDのRAWイメージをマウントする方法まとめ - それマグで!
RHEL7におけるDockerのディスクイメージ管理方式 - めもめも
XFS Filesystem has duplicate UUID problem - Administration - Linux Tips & Forums
My formula was included to master branch of brew cask
自分が書いたFormulaがGUIパッケージを管理するためのbrew caskのmasterにincludeされた話。
(そんなにすごくない。)
事の発端は、友達(https://twitter.com/CodeHex)がGUIソフトウェアを作ったので、それをbrewでインストール
したいって思った。
調べならがやって、一時間ぐらいでformulaが書けた。
んで、本家にPRしたんだど、
「使われてないから、shaはいらない。」「whitespaceが入っていてbuildできない」(恥ずかしい)
って言われたりして、やったこそincludeされた。(わっしょい。)
これがPR
brew update
brew cask install card
ぐらいで入る。
ちなみに、入れたいソフトウェアの不具合で
インストールは、できるが起動ができないかもしれない。
直している途中のようなので、直ったら、報告する。
いい経験になったので,@code_hexに感謝。
how to create visualized tree in weka
人工知能の講義でwekaで決定木をwekaで作って来いと言われたので、そのまとめー
まずは、brewでinstall
brew cask install weka
で、OKだと思う。
アプリケーションの中にwekaがあるからとりあえず起動。
どっかのディレクトリーに
test.arffなファイルを作って
下記のように書いて保存。
@relation rich @attribute height {high,low} @attribute color_of_hair {blond,dark,red} @attribute color_of_eye {blue,brown} @attribute class {+,-} @data low,blond,blue,+ high,dark,brown,- high,dark,blue,- high,red,blue,+ low,dark,blue,- high,blond,brown,- low,blond,brown,- high,blond,blue,+ high,red,brown,-
wekaに移って、右上のexplorerをクリック
下記のようなwindowが表示されるので、左上のopen fileをクリック。
test.arffを探して、openする。
左上にclassifyがあるのでクリック。
左上のchoseボタンをクリックして、treeの中のj48をクリック。 で、supplied foldを9に設定。
startボタンをクリックすると下に、何か追加されるので、そいつを右クリック。
するとvisualize treeってのが表示されるので、そいつをクリックすると 木ができてる。