kun432's blog

技術ネタ、読書記録、など。2015年から人生をやり直し中です。

goで並列ping

とりあえずいろんなところを見て書いてみた。コマンドライン引数の使い方、ファイルの読み込み、並列処理、を一通り試せた感じ。

package main

import (
    "bufio"
    "fmt"
    "os"
    "os/exec"
    "sync"
)

func main() {
    // 引数処理
    args := os.Args
    fmt.Println(args)
    if len(args[1:]) != 1 {
        fmt.Println("Error! irregal arguments.")
        usage()
        os.Exit(1)
    }

    // リストファイルオープン
    r, err := os.Open(args[1])
    if err != nil {
        fmt.Println(err)
        usage()
        os.Exit(2)
    }
    defer r.Close()

    var iplist []string

    // リスト読み込み
    sc := bufio.NewScanner(r)
    for sc.Scan() {
        line := sc.Text()
        if line[:1] == "#" {
            continue
        }
        iplist = append(iplist, line)
    }

    // ping実行
    var wg sync.WaitGroup
    for _, ip := range iplist {
        wg.Add(1)
        go func(ip string) {
            defer wg.Done()
            worker(ip)
        }(ip)
    }
    wg.Wait()
}

func usage() {
    fmt.Println("[Usage] expingo IP_LIST_FILE")
}

func worker(ip string) {
    err := exec.Command("ping", "-c", "1", "-W", "1", ip).Run()

    if err != nil {
        fmt.Println(ip, " : NG")
    } else {
        fmt.Println(ip, " : OK")
    }
}
$ time go run parallel-ping.go dat/sample3.txt
・・・
192.168.4.13  : OK
192.168.4.1  : OK
192.168.4.2  : OK
192.168.4.14  : OK
192.168.4.15  : OK
192.168.4.10  : OK
192.168.4.18  : OK
192.168.4.19  : OK
192.168.4.12  : OK
192.168.1.1  : OK
192.168.4.3  : NG
192.168.4.22  : NG
・・・
real    0m3.332s
user    0m0.982s
sys     0m7.748s

700IPのリストで実際には10数台程度しかないけどすげえ速い。

pingを外部コマンドにしてるのがダサいので直したいと並列数の制御もできるようにしたい。

Goを始めるのに良いサイト&書籍

とりあえず始めだして2週間ぐらい。あんまり手を動かしていないのだけど、いろいろ見てみたり読んでみたりして、徐々に理解が深まってきたところでまとめてみる。

unlimitedで読めるのでとりあえず読んで、なんとなくフィーリングをつかむのにはよかった。

A Tour of Go

ここから始めよ、と色んな所に書いてあるので始めてみた。ほぼほぼコードも予め埋めてあるので、動かすにはいいのだけど、自分で書くという行為が少ない気がするが、たまーに入力を求められる例題は結構難しくて、個人的には微妙な感があった。

スターティングGo言語

スターティングGo言語

いわゆる言語入門書としては非常に良い内容。細かい挙動もサンプルコードがあるのでわかりやすい。ただこれで実際に何か作れるか、というと難しい気はする。もっと慣れてから読み直すと役に立つ気がする。

みんなのGo言語【現場で使える実践テクニック】

みんなのGo言語【現場で使える実践テクニック】

最初の方はとても良かった、というか、環境構築の話とかが多いからだと思う。後半は難しすぎてさっぱり。

これはちょっとまだ早すぎた。が、Webアプリとはなんぞや、みたいなところから書いてあるので多分良い書籍のはず。

Go言語によるWebアプリケーション開発

Go言語によるWebアプリケーション開発

Webアプリ開発なら上よりもこっちの方を先に読んだほうが良さげな雰囲気。

Go by Example

いろいろ調べていくと、最終的にココのサンプルを見る、のが良いという結論になる。

あとはQiitaとかいろいろググってサンプル見て、自分で書いてみるとかになっちゃう感じ←今ココ

結局のところ、

  • まだまだGoに関しては書籍が少ない
  • いわゆる言語入門書は1冊はやったほうが良いと思うけど、言語入門ってモチベーションわかないし、あまり選択肢もない感じ
  • 作って学ぶ、みたいなのがあるといいんだけど、Webアプリじゃない系が欲しい所。

Goの特徴活かすなら、コマンドラインのツールだったるとか、並列処理やったり、とかそういうニーズのほうが高いと思うので、そういう書籍が出れば買います。

YAPC::Okinawa 2018 ONNASONに行ってきた

f:id:kun432:20180325163313j:plain

周回遅れもいいところですが、札幌、大阪、福岡に続き、沖縄にも行ってきたのでまとめ。皆勤賞継続中!

tl;dr

  • 3月初旬の沖縄は暖かった、というか、むしろ暑かった。でも過ごしやすい。海と夕日がたまらん。
  • OISTの環境が素晴らしかった。雨さえ降らなければ・・・
  • そばうまかった、というか、沖縄最高。

f:id:kun432:20180325164215j:plain

トークの感想

OISTは素晴らしかったですね

f:id:kun432:20180325164152j:plain

Webサービスを監視するときに僕達が考えたこと(papixさん)

speakerdeck.com

監視の設計はほんと難しい、通知が一番難しいのは同意。いろいろ工夫や苦労も多いわりにあまり理解されない部分なので、もっと重要性をアピールしていきたい。

HTTP/2で早くなるときならないとき(Kazuho Okuさん)

HTTP/2、よくわかってなかったのだけど、シーケンス見るとわかりやすいですね。途中の経路でQoSとか入るとか、あー、って感じ。各環境ごとに計測というのはホントその通り。

そろそろPerlでのHTTP/2について触れたい(xaicronさん)

speakerdeck.com

前のセッションから続いてのHTTP/2ネタ。便利になると実装も含めて複雑になるというこのジレンマ。あるある。

お昼

今回もお弁当が出ました。毎回感謝です。

f:id:kun432:20180325164146j:plain

MogileFS脱出大作戦(t_kytさん)

移行はいつの世も大変。サービス止めれればいいんだけど、そうじゃない場合には結構複雑になるし、ほんと難しい。

Perlを中心としたワンライナーあれこれ (tecklさん)

speakerdeck.com

ワンライナー大好きです。最近は使う頻度も減ったし、複雑なこともしなくなったけど、書いているとやっぱりPerlは素晴らしいと思う瞬間。

WordPress運用を支えるPerl(OGATA Tetsujiさん)

www.slideshare.net

枯れた技術が改めて生きるという事例。新しい技術が古いものをリプレースしていくのは当然ではあるけれども、そもそも今のトレンドな技術もいろいろな知見や反省から生まれていることを忘れないようにしたい。

ノンプログラマーのプログラミング活用法 / The Non-Programmer's Programming Techniques(門松宏明さん)

speakerdeck.com

個人的に一番よかったのはこれ。エンジニアの使うツールはどうしても敷居が高いと思われがちだけど、その反面、効率性が高いものが多いので、きちんと理解して使えばエンジニア以外でも役に立つ、ということを実践して、かつ、トークまでされたというのがほんとに素晴らしかったです。

Inlineモジュールの世界(moznionさん)

speakerdeck.com

黒魔術。でも2つ前のセッションでも感じたのだけど、流行り廃り・向き不向き・慣れ不慣れ、そういったものをトータルで考えて最適な技術を選んでいくとともに、幅広く知っておくことが大事だなと。

Perlコーディングテクニック2018(akiym)

speakerdeck.com

最近のPerlはおろか、ワンライナーとテキスト処理しかしないので、半分も理解できてない気がする。。。でも現場の生の声みたいなのが聞けるのは非常に貴重だと思う。

休憩

札幌、大阪、福岡と皆勤賞なので、もちろん、沖縄でも、ということで、チェックインスタンプラリーのステッカーをいただきました。わーい。皆勤賞の特典は内緒です。

f:id:kun432:20180325164159j:plain

喫煙所から見える景色もまた素晴らしかった。

f:id:kun432:20180325164223j:plain

Keynote(大沢 和宏さん)

www.slideshare.net

いろんなものがつながって今がある、というとてもよいお話。日本のPerlを支えてきた人たちがいろんなところで活躍されている。あらためてすごい集まりだなと思いました。

まとめ

YAPCは毎回ほんとバラエティに飛んでいて楽しい。沖縄、高いし遠いなー、さすがに2泊とかだと厳しいかな、と最初は思ってたけど、やっぱり来てよかった。スピーカーの皆様、スタッフの皆様、ほんとにありがとうございました。

あと、ずっと新婚旅行行けてなかったのでそれも兼ねてという後付の理由にも、快く承諾してくれて一緒に来てくれたうちの奥様にも感謝。

次の東京も行きます。

f:id:kun432:20180325164210j:plain

おまけ

初日

f:id:kun432:20180325191829j:plain

f:id:kun432:20180325192004j:plain

f:id:kun432:20180325192013j:plain

f:id:kun432:20180325192041j:plain

f:id:kun432:20180325192056j:plain

f:id:kun432:20180325192059j:plain

f:id:kun432:20180325192225j:plain

f:id:kun432:20180325192243j:plain

f:id:kun432:20180325193142j:plain

f:id:kun432:20180325192258j:plain

2日目

f:id:kun432:20180325192339j:plain

f:id:kun432:20180325192849j:plain

f:id:kun432:20180325192632j:plain

f:id:kun432:20180325164232j:plain

f:id:kun432:20180325192707j:plain

f:id:kun432:20180325193231j:plain

f:id:kun432:20180325194010j:plain

3日め

f:id:kun432:20180325193300j:plain

f:id:kun432:20180325193321j:plain

f:id:kun432:20180325193332j:plain

f:id:kun432:20180325193945j:plain

f:id:kun432:20180325194025j:plain

f:id:kun432:20180325194038j:plain

f:id:kun432:20180325194050j:plain

最終日

f:id:kun432:20180325194110j:plain

f:id:kun432:20180325191740j:plain

f:id:kun432:20180325191802j:plain

f:id:kun432:20180325194144j:plain

f:id:kun432:20180325194155j:plain

2017年7月に読んだ本

かなり遅くなってしまったけど、7月の読書記録。28冊、ほぼマンガ、技術書なし。公私共に途中でいろいろと果ててしまいました。。。。。

  • 半月ぐらいは先月の続きでNodeのWebアプリフレームワーク本を進めていたけど、なんだろな、いつまで経っても形にならない感じでモヤモヤ。ハンズオンなんだけど、トピックごとにしか進まないから、なんか終わりが見えない感が出てきてしまっている。
  • 仕事的には7月は異動の時期で、いろいろと周りで異動があった影響でいろんな余波が、、、、
  • そして7月末にドラクエ11が出てしまった、あとは推して図るべし、、、、

せっかくNode慣れてきたけど、もう少しシンプルなものを作るほうがよいのかも。ただそういう感じで使おうとすると使い慣れたPerlのほうが早いんだよねぇ。 慣れてきたのを忘れるのもあれなので、少し違う本を選んで仕切り直しして見る予定。

あとはドラクエ11がんばるぞー

読んだ本の中で良かったもの

ワンダーランド 2 (ビッグコミックス)

ワンダーランド 2 (ビッグコミックス)

石川優吾って知らなかったけど、SFマンガというか、マンガSFみたいな感じで、かなり面白かった。どっちかというと「ワンダーランド」の方が好みだけど、ちょっと引き込まれる。

いやー、楽しい!

今月読む本

というか今月ももう終わりに近づいている中、ほんとこれ読むぞー、っていう気持ちがわかない。今月はドラクエ集中で来月からにします、、、、

が、

を少し読んでみようかなと思ってます。

その他読んだ本

忍物語 (講談社BOX)

忍物語 (講談社BOX)

邪眼は月輪に飛ぶ (ビッグコミックス)

邪眼は月輪に飛ぶ (ビッグコミックス)

神軍のカデット 1 (ビッグコミックス)

神軍のカデット 1 (ビッグコミックス)

最果てにサーカス(1) (ビッグコミックス)

最果てにサーカス(1) (ビッグコミックス)

グッドナイト、アイラブユー (1) (it COMICS)

グッドナイト、アイラブユー (1) (it COMICS)

もののがたり 1 (ヤングジャンプコミックス)

もののがたり 1 (ヤングジャンプコミックス)

少年王女 1 (シルフコミックス 28-2)

少年王女 1 (シルフコミックス 28-2)

GIANT KILLING(44) (モーニング KC)

GIANT KILLING(44) (モーニング KC)