KazuminEngine

プログラマーの日記

第1回Okinawa.goのレポート

こんにちは、琉球大学 情報工学科 2年 木下 和巳(@warugaki_kazumi)です。

先日、3月19日に第1回golang勉強会を開催しました。

コミュニティーが発達し、LT登壇者が増えることを願ってブログを書いていきたいと思います。

okinawa-go.doorkeeper.jp

目次

はじめに

業界を知らない方のために、軽く説明します。知っている方は、次に進みましょう。

ごく稀に「怪しい勉強会でしょ?」と思われますが、全然違います。 最近、プログラミングの習い事も流行っているらしいですね。 そのような感じで、子供に習い事をさせるような感覚と同じようなものと思って良いです。 それが、3か月に1回程度になり、社会人や学生がプログラミングの習い事に通っているようなものです。

「小さい子供ではなく、社会人や学生などの楽しいプログラミング勉強会」程度に受け取ってもらって十分ですが、なかなか理解しづらい「コミュニティー」という概念も関連しています。 コミュニティーに関しての説明ですが、あまり理解できていないので、割愛させてもらいます。

イベントについて

プログラミング言語Golangチュートリアルa tour of go」をみんなで一緒にやる勉強会です。

参加人数

大体ですが、イベント登録人数は30人。

気軽に遊びに来てくれたり当日キャンセルなどで、実際の参加人数は25人でした。

ハッシュタグ

ハッシュタグがまとめられています。

ハッシュタグを眺めながら、ブログを読むのが最近の流行りのようです。

臨場感をもってもらえれば幸いです。⁽⁽٩(๑˃̶͈̀ ᗨ ˂̶͈́)۶⁾⁾

togetter.com

大まかな勉強会の流れ

  • この勉強会についての説明

  • 「a tour of go」

  • LT大会

勉強会始まり

さぁ、イベントスタートです。

まずは、コアメンバーの西島氏から自己紹介と勉強会の流れの説明がありました。

すぐあとに、「a tour of go」を早速開始!

13:30~15:00までぶっ通しでやってました。

golangは、他の言語と比べてここが違う」「便利」など

あーだこーだ言いながらやってました。

次は、LT

LT

さて、次にLTの感想や情景を徒然なるままに紹介します。

LTってのは、5分程度で好きなことを話すプレゼンです。

西島さん

徳の高すぎるLTでした。

要約すると、「LTしようぜ」。

なぜ..............?と思った人はスライドへ。

半数以上がやる気を出したLT。楽しいエンジニアライフへ駆り立てるだろう。

www.slideshare.net @k_nishijima

tomohiroさん

会社でGolang使っている人なので、期待通りのLTでした。

今から使えるTool感満載でした!

(個人的には、次にライブコーディングしてほしいw

speakerdeck.com @Tomohiro

chibanaさん

こちらは、スライドが上がってないようですが、ブログを見つけました!

個人的に引き込まれたのが、チャネルで詰まった話。

「a tour of go」で 解決したそうです。(詳しくは、ブログに書いてます。

本当に、基礎大事!

qiita.com @chibana_555

木下さん

ラズペリーパイで並列処理をしたいがために、golangを使用しているらしい。

select文を使っていたので、並列処理したくなったなー。

質問の場所は、gopher.slack.comとyoutubeみたいだ。

www.slideshare.net @warugaki_kazumi

以上で、終了。

この後、居酒屋で懇親会があったようです。

次回

「第2回Golang勉強会 in Okinawa」は、5月28日に開催予定です。(多分w

最後に

私たちは、運営コアメンバー・LT登壇者を求めています。

また、

こちらからも声かけをすると思いますが、

Golang界隈の方の登壇をお待ちしております。

お気軽に声をお掛け下さい。(⇨@warugaki_kazumiまでっ!

第16回kansai.pmに参加して

こんにちは、木下(@warugaki_kazumi)です。

Let's ブログ書くまでが勉強会!(๑˃̵ᴗ˂̵)و

何してきたの?

Perl勉強会に参加してきました。

t.co

参加理由と私について

普段は、沖縄の琉球大学情報工学科に通っている2年次です。

沖縄のgolang勉強会のコアメンバーです。

他には、okinawa.rbとyomitan.pmなどに参加しています。

参加理由は、

  • 帰省中に、ラクダの鳴き声が聞こえた。

  • コミュニティー関係について学べるかと思った。

  • 学んで、沖縄のコミュニティー・LTに貢献したい。

LTについて

東さん

www.slideshare.net

猫ネタを挟むLTでした。PerlからRubyに移植した時の貴重な経験を話してくれました。

少し、ライブコーディングを披露してくれて、地味な作業を見せつけられました。

そして、その陰に、言語の知識と地味な作業に屈しない態度が垣間見えて、

リスペクトしています!

karupaneruraさん

www.slideshare.net

すごい。yapc発表者だ。 うっかりをなくす技術 - YAPC::Asia Tokyo 2015

time系のモジュール作ったらしい。

同じようなことをするモジュールの違いを喋っていました。僕は、一つしか使わないので、取り入れようかと思いました。

sagoさん

www.slideshare.net

車のコーディングについて語ってくれました。

そんな仕事があるんだ。へーって感じでした。

10行コード書いたら、何十時間のテストするそうです。

だから、コード書ける人と書けない人が分かれるそうです。

下手したら、一年に100行も書かないようです;(

(これは、僕のようにプログラミング書けない人でもできるのかなと思った。組み込みとかにも興味あるので楽しそう。

他に、papixさんとてつじさんのスライドが見つからず。

papixさんが、LT終了時間を超える主催者泣かせの素晴らしいライブコーディングを披露してくれました。

てつじさんは、wordpressPerl。作るべきモジュールについて

懇親会について

LTが5回ありました。アルコールが入っているので、発表者も聞く方もむちゃくちゃw

引っ込んであんまりしゃべれませんでしたが、yomitan.pmとcodehexさんが有名でしゃべれたかなーって感じw

Perlコミュニティーは、言語自体が好きでPerlプログラミングをお酒の当てにする大雑把さがあり

Rubyコミュニティーは、真面目な感じがするってのを個人的に思います。

Perlは、真面目にPerlで騒いでるって感じがしました。

学生に4000円は痛い!

次に活かすこと

  • ライブコーディングなどの実演は、少しでもいいのでLTでするとわかりやすいと思う。

  • 複数のライブラリを検査してから、使用。

  • golangで真面目に騒ぎたい 。

  • 自分が雰囲気を作っても大丈夫。

  • 仕事をすることが言語を極められる。仕事をすることは、社会貢献。社会貢献って自己実現になるしすごい!⇨社会貢献したい!

琉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に感謝。