KazuminEngine

プログラマーの日記

琉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

github.com

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をクリック f:id:kazuminkun:20151123200051p:plain

下記のようなwindowが表示されるので、左上のopen fileをクリック。 f:id:kazuminkun:20151123195101p:plain

test.arffを探して、openする。

左上にclassifyがあるのでクリック。

f:id:kazuminkun:20151123195101p:plain

左上のchoseボタンをクリックして、treeの中のj48をクリック。 で、supplied foldを9に設定。 f:id:kazuminkun:20151123195506p:plain

startボタンをクリックすると下に、何か追加されるので、そいつを右クリック。

f:id:kazuminkun:20151123195629p:plain

するとvisualize treeってのが表示されるので、そいつをクリックすると 木ができてる。

Perlでシーザー暗号

CTFやってるとシーザー暗号の問題があってネットからPerlコードをひらってきて使ったんだけど、 うまくいかなくて。書いた。

うまくいってるか微妙

ってか、Perlってこんなに楽しいんだ。

叫んでた(爆笑。

範囲の中をforで回せないかってやってなんとかできた。(できてるか知らない)

記号がうまくいかないけど、気にすんな。

あと、$shift消そう