Skip to content

Instantly share code, notes, and snippets.

View goldeneggg's full-sized avatar

Fuminori Sakamoto goldeneggg

  • 合同会社Practa/Practa, Inc.(Founder)
  • Japan
  • X @practainc
View GitHub Profile
@goldeneggg
goldeneggg / gontainer.sh
Created September 30, 2014 09:13
wrapper script for official docker container for golang
#!/bin/sh
usage() {
cat << __EOT__
Usage: $0 [-br] <app go package path>
Run official golang docker container
Options:
-b | --build run container and build go app
-m | --make run build by make
@goldeneggg
goldeneggg / http_client.go
Last active March 8, 2020 16:21
GoでHTTPクライアントを実装する例
package main
import (
"fmt"
"io/ioutil"
"net/http"
"net/url"
"strings"
"time"
)
@goldeneggg
goldeneggg / file0.go
Created August 13, 2014 03:00
負荷やスループットを意識してgoroutineを実行する ref: http://qiita.com/jpshadowapps/items/a49c448d5e6b5f45f754
type LimitExector interface {
// 同時処理数に上限を設ける
// 上限を超えるリクエストは処理しない
ByMax(req ReqEntity)
// 1秒間の同時処理数に上限を設ける
// 上限を超えるリクエストは1秒待つ
ByMaxPerSecond(req ReqEntity)
// 処理に実行間隔を設ける => x秒間隔に1回処理を行う
@goldeneggg
goldeneggg / -
Created August 5, 2014 02:30
Go1.3 本体のソースでゴルーチンを起動している箇所数
143 runtime/race/testdata/mop_test.go
50 runtime/race/testdata/chan_test.go
41 runtime/race/testdata/slice_test.go
27 runtime/race/testdata/waitgroup_test.go
25 net/http/serve_test.go
22 runtime/chan_test.go
21 runtime/race/testdata/atomic_test.go
21 net/timeout_test.go
19 runtime/race/testdata/map_test.go
18 runtime/proc_test.go
$ echo "| bindkey | widget|\n|:-----:|:-----|\n$(bindkey -L | awk '{print $2" "$3}' | sed -e 's/ /|/g' | sed -e 's/^/|/g' | sed -e 's/$/|/g')"
# https://github.com/defunkt/gist を使用してgistへ投稿
$ echo "| bindkey | widget|\n|:-----:|:-----|\n$(bindkey -L | awk '{print $2" "$3}' | sed -e 's/ /|/g' | sed -e 's/^/|/g' | sed -e 's/$/|/g')" | gist -d "zsh bindkey $(date +'%Y%m%d')" -f zsh_bindkey.md
@goldeneggg
goldeneggg / gochan.md
Last active July 1, 2018 14:55
[Go] ゴルーチン・チャネル ザックリ説明用

Goの並行処理 初歩感溢れるまとめ

Goの並行処理は 共有変数をチャネル上で引き回し、実行中の異なるスレッドからは同時アクセスさせない という手法を採用しています。

これを実現するために独自のプロセス/スレッド/軽量プロセス/コルーチンモデルを持っていて、このモデルを ゴルーチン(goroutine) といいます

逐次処理を並行化(ゴルーチン化)する

並行処理実践の初歩段階では 正しく逐次動作するソースコードを書き、並列に動作させる改良を加える というアプローチを取った方が無難です。いきなり並行処理を書こうとするとデバッグの際に並行化の誤りなのかアルゴリズムの誤りなのかを判断するのが難しくなります。

というわけで、まず例として超単純な逐次処理を書いてみます。1から5の数値を2倍した値を表示するだけの処理です。

@goldeneggg
goldeneggg / mosh.md
Created July 4, 2014 12:42
Getting started Mosh (Conncting from Mac to Linux Server)

Mosh

MacからLinuxサーバへ接続

boostとかをyumでインストール

% sudo yum -y install boost perl-IO-Pty-Easy

protocol buffer

@goldeneggg
goldeneggg / binary_search.go
Created June 11, 2014 09:21
Goで某言語のように存在しなかったら-1を返す版のバイナリサーチ
func BinarySearch(data []int, find int, from int, to int) int {
center := (from + to) / 2
if from > to {
return -1
}
if find == data[center] {
return center
} else if find < data[center] {
@goldeneggg
goldeneggg / cmd_entrypoint.md
Created May 8, 2014 08:22
Dockerfileの CMD と ENTRYPOINT の挙動の違いメモ

CMDとENTRYPOINTの違いと、使用例

  • ざっくり概要として、CMDとENTRYPOINT どちらを使うかによって docker run CONTAINER_ID <command> した際の<command>が及ぼす影響 が変わる

CMD, ENTRYPOINTで オプションなしのコマンド を記述した場合

CMD 使用時

  • Dockerfile
@goldeneggg
goldeneggg / gist:fb5141c0cf72811594f2
Created May 2, 2014 09:11
provisionerにdockerを指定して vagrant up するとコケる (bash: line 2: stop: command not found)

推測

  • vagrant up時にdockerのrestartを実行しようとしている
  • その際の実行ユーザーがvagrantなんだけど、restartする権限が無い

ログ

  • version = 1.5.4