Rを使って、コイン投げをシミュレート

500回コインを投げるとします。毎回表と裏のどれかをシミュレートする。 sample関数はTRUEになっていますが、これは毎回0と1の中からランダムに選ぶという意味、1回選んだら、それを除いて、残りから選ぶではない。 link > # 表が出る確率0.5 > pHeads = 0.5 > # 0(裏)と1(表)二種類の可能性しかない。裏がでる確率が 1-pHeads > flipSequence = sample( x=c(0,1), prob=c(1-pHeads,pHeads), size=N, replace=TRUE) > # 実際にシミュレートした結果 > flipSequence [1] 1 0 0 1 1 0 1 0 1 0 1 0 0 1 0 1 1 0 1 0 0 0 0 1 1 1 1 [28] 0 1 0 1 0 1 0 0 0 1 0 0 0 0 0 1 0 1 1 1 0 0 0 0 0 0 1 [55] 1 0 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 0 0 0 1 0 0 1 0 0 1 [82] 0 1 0 0 0 1 1 0 1 1 1 1 0 1 0 1 1 0 0 0 0 1 1 0 1 0 1 .

client-goでKubernetesのIngress Ruleを作る

JenkinsXのコマンドを検証しているうちに、うまく動作しない部分もあって、どうやってプログラムで、Ingress Ruleを作ること気になったので、ちょっとやってみました。 client-goライブラリを利用して、以下のようなKubernetesのIngress Ruleを作成します。 apiVersion: extensions/v1beta1 kind: Ingress metadata: name: ingress-rule-created-from-go namespace: default spec: backend: serviceName: nginx servicePort: 80 rules: - host: nginx.my.domain 上の情報に基づいて、Ingress Ruleを作成するのに以下のの情報を指定すると作成できます。 apiVersion kind metadata spec.backend.serviceName spec.backend.servicePort rules.host Ingress Ruleを作るのにGoのライブラリのドキュメントはかなり役に立っています。ドキュメントを参照して、必要なものを正しい形で指定すれば良いです。 package main import ( "fmt" v1beta1 "k8s.io/api/extensions/v1beta1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/util/intstr" "k8s.io/client-go/kubernetes" "k8s.io/client-go/tools/clientcmd" "log" "os" "path/filepath" "reflect" ) func main() { // kubernetesの設定ファイルのパスを組み立てる kubeconfig := filepath.Join(os.Getenv("HOME"), ".kube", "config") config, err := clientcmd.BuildConfigFromFlags("", kubeconfig) if err !

Golangでの並列処理サンプル

例1 1000個のgoroutineでsomekeyを更新するプログラムで、更新する際にsync.Mutexでロックをかける。 package main import ( "fmt" "sync" "time" ) type SafeCounter struct { v map[string]int mux sync.Mutex } func (c *SafeCounter) Inc(key string) { c.mux.Lock() c.v[key]++ c.mux.Unlock() } func (c *SafeCounter) Value(key string) int { c.mux.Lock() defer c.mux.Unlock() return c.v[key] } func main() { c := SafeCounter{v: make(map[string]int)} for i := 0; i < 1000; i++ { go c.Inc("somekey") } time.Sleep(time.Second) // 待たないとと、974, 949などの値が出てくる fmt.Println(c.Value("somekey")) } 例2 例1はtime.