KazuminEngine

プログラマーの日記

第2回 golang 勉強会 in Okinawa Log

こんにちは、かずみんです。

第2回 golang 勉強会 in Okinawa を開催してきたので、簡単にlogを残そうかと。

okinawa-go.doorkeeper.jp

あんまり、丁寧に書くつもりはない^^;

モクモク会(広島風

基本的にモクモクな雰囲気でした。

お互いすでに知り合いな感じでモクモクと。

package作ってる人、チュートリアル作ってる人、hugoやってる人、がいました。

私は、golangレベルのschedulerについて調べてました。

github.com

deep driveするはずだったが、入り口見つけただけで終わりました。

なんせ、英語でも記事が少ないわけで、、、、

compilerも結構読みやすいよ。 記事とコードを読み合わせれば、結構わかりそう。

適当に自分にしかわからない作業logを載せる



# n:m scheduler

古いがこの記事を読む -> https://morsmachine.dk/go-scheduler
あまりスケジューリングのことが書いてない -> https://docs.google.com/document/d/1TTj4T2JO42uD5ID9e89oa0sLKhJYD0Y_kqxDv3I3XMw/edit#
n:kernel space scheduler
m:user space scheduler

* そもそも何で必要?

->  the Go garbage collectorが動いている時に、他のgolang プログラムは待たなくてはいけないから

* 三つの登場人物

- M...OS level thread
- P...context switch for scheduling
- G...goroutine

context switchの数は、start up時にGOMAXPROCにより決定する

一つのMにrunqueがある。そこにgoroutineが後ろから追加されていく


LockOSThread...実行するthreadを固定したい時に使用する


実行可能なgoroutineが作成されると、runqueueにpushされる
goroutineの実行が終了すると、
goqueueが他のgoqueueのgoroutineを半分盗む


goのスケジューラーはプリエンプティブらしい

2時48分にいい記事見つけた -> http://www.cs.columbia.edu/~aho/cs6998/reports/12-12-11_DeshpandeSponslerWeiss_GO.pdf


残り1時間ぐらい。英文なので、読むのに時間がかかるので、図を見た。(怖い

githubでgoのコンパイラであるgccgoのコードを眺めた。

こいつ読めばわかるんじゃないかなー↓

https://github.com/golang/gofrontend/blob/8edf085a94579bd819a10f50328233812ceeb950/libgo/runtime/proc.c#L1813-L1859

知識がないので、変数の可読性が.........

こいつが優先順位をつけるためにgoroutine structに情報を添付?
https://github.com/golang/gofrontend/blob/8edf085a94579bd819a10f50328233812ceeb950/libgo/runtime/proc.c#L2304-L2371


runtime_gogo関数でcontextとgoroutineをつなげている感じとエスパー

LT

私は、

www.slideshare.net

修正。パッケージの内部変数が、他のpackageの関数の挙動を変更する場合があるでした^^

blank importの説明が伝わらなかったですね。(私もあまり理解していないところがあって ...

機能と使用例をごっちゃにしちゃった感じがある。

もう一回、勉強し直して、blogにまとめるといいかもねー

  • LT資料は、勉強会中で作成するのが正解かも

アットホームなLTをすればいいのに、イメージトレーニング通りにやちゃって、

KY感あった。

んで、

LTも、聞いてる方の会話なんだなー。と実感(かなり大事

次回

まだ決めてない。 絶対やりますが、2,3か月ぐらいかなー

Kintone cafe in Osaka 感想!

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

3月25日に開催された「kintone cafe in 大阪」に参加してきました。

レポートを書く予定でしたが、ゆっくりブログを書いている途中で

R3の中の人が完璧な記事を投稿したので、

今回は手短に感想を書きます。(๑˃̵ᴗ˂̵)و

まだ、完璧な記事を読んでいない人は、先にそちらへ。

目次

勉強会

  • 方向音痴迷子

間違って綺麗なおねいさんが踊る居酒屋に凸した後だったので、 若干ウキウキ気分と緊張気分が複雑に入り混じっていました。

  • 自己紹介タイム

それから、

なんかいきなり自己紹介タイム。

おねいさんが踊っていたせいで心臓がバクバク(違w

適当に喋って、頭真っ白でした。(フー

  • 皆が皆。プロフェッショナル。

なんちゃらなんちゃらプロフェッショナルを皆さん持っています。

それぐらいじゃないと、仕事にならないのかと個人的に思ったり。

  • ベストプラクティス

仕事ってとにかく論理的なベストプラクティスで実行されるべきなのかなと思いました。

  • kintoneのカスタマイズ方法がよく分かる

jsわからずとも、ハンズオン形式なので文系にもわかりやすいと思いました。

業務 with kintone って最高だと思ったり。

  • 仕事が垣間見れる。

あくまで憶測ですが、このような勉強会に参加すると仕事が垣間見れたりするかもしれませんね。

様々なイベントに参加していますが、

この会社は、業務手助けしているのかなーと思ったり(違ってたら、申し訳ない

懇親会

  • うまい

カレーにビールが意外と合う。

  • 名刺

名刺をもらうが、お返しできず。

早速、作りました。

沖縄ではほぼもらわないですね。

  • 酔い

酔ってました......

みんなで一つのルーにナンを直接つけてました。(気づいてから、スプーンで取りましたよw

  • 学生

学生なので、おごってもらいました。

ありがとうございます!美味しかったです。

第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

すればいい!

ググラないで。いろいろ試すと、ハック力上がりますね。これは友達を見ていて思いました。