Grpc
grpcチュートリアルメモ https://github.com/ymmt2005/grpc-tutorial Remote Procedure Call リモートで呼び出しする手順 gRPC Googleで開発された多言語間のRPCを実現するプロトコル 多言語対応であることが特徴 IDL(interface definition language) ...
grpcチュートリアルメモ https://github.com/ymmt2005/grpc-tutorial Remote Procedure Call リモートで呼び出しする手順 gRPC Googleで開発された多言語間のRPCを実現するプロトコル 多言語対応であることが特徴 IDL(interface definition language) ...
JMeterのシナリオで変数をHash化する時はBeanShell PreProcesserを使う import java.security.MessageDigest; String token = vars.get("token"); // Jmeterの変数を取得 String api_key = "hogehuga"; String encrypt_str = token+api_key; MessageDigest digest = MessageDigest.getInstance("SHA-256"); byte[] hash = digest.digest(encrypt_str.getBytes()); StringBuilder sb = new StringBuilder(2*hash.length); for (byte b: hash) { String hexStr = Integer.toHexString(b).replaceAll("ffffff",""); String hex = (hexStr.length() == 1) ? "0" + hexStr : hexStr; sb.append(hex); } String newVariable = sb.toString(); var.put("ENCRYPTED_TOKEN",newVariable); // Jmeterの変数にセット
大きな戦略における目標に寄与しない無駄な目標を実施しない 勝利の条件を理解するのは優れたリーダーに必要なこと 戦略の成功を図る指標をアップデートする 既存の指標の発見 敵対する指標の無効化 新たな指標で戦う戦う 成功体験を分析する。経験知を汎用的な指標にする 新しいルールをつくる 人・組織の柔軟な活用 新技術の開発 技術の運用方法 ダブルループ学習を心掛ける シングルループ学習 目標と問題構造を所与ないし一定とした上で最適解を探す ダブルループ学習 想定した目標と問題自体が間違っているという疑問・検討を含めた学習 現場と上層部の乖離を避ける 専門分野は専門家の知識をあげられるように リーダーが前線で直接確認することで、情報の正確さと問題解決の速度を上げる リーダーは見たくない問題を解決する覚悟の強さが要求される 正しい警告を無視しない 評価制度は組織に対するメッセージ 居心地の良い安定にならず変化できる組織 異質な情報・知識の交流 権力構造の均衡破壊 万が一の想定を持っておく
5G 大容量・低遅延・多接続のしくみ 感想:5Gの普及でより情報量の多いコンテンツの配信等ができるようになるのは間違いない。今まで有線のPCでしか出来なかったことがスマホ端末でもできるようになっていくと思われるが、消費者的に一番恩恵を受けるのはゲームの分野かと思った。
Docker for Mac上のコンテナから、Mac上のアプリケーションに簡単に接続する方法 Mysqlに接続する例 DSN user1:password@tcp(docker.for.mac.localhost)/database_name
echoコマンドはデフォルトでは改行文字が含まれるため、暗号化時などに気をつける これが原因でmysqlのdsnでエラーが発生した 改行なしオプションは-n 例 ...
gorm v2がgo v1.14以降じゃないとビルドできない Jenkinsサーバーがgo v1.12でgo testのときにエラーがでる docker imageのビルドの時にgo imageでgo testがしたいができるのか? テストが落ちたらビルドも止まるか 試作コード cmd/main.go ...
Golang memo 他の言語からすると紛らわしい単語 map Goでは辞書型 interface go 環境変数の場所を間違えない 基本wslで書いて検証したとしても、vscodeの補完に使うgoのライブラリたちはwindows本体側を参照しているのでちゃんと設定する switch と select 見た目が似てるけど、違う用途 ...
jwtのエラーを調べている時に以下のコードを見て不思議に思った dgrijalva/jwt-go/claims.go#L38-L52 if c.VerifyExpiresAt(now, false) == false { delta := time.Unix(now, 0).Sub(time.Unix(c.ExpiresAt, 0)) vErr.Inner = fmt.Errorf("token is expired by %v", delta) vErr.Errors |= ValidationErrorExpired } if c.VerifyIssuedAt(now, false) == false { vErr.Inner = fmt.Errorf("Token used before issued") vErr.Errors |= ValidationErrorIssuedAt } if c.VerifyNotBefore(now, false) == false { vErr.Inner = fmt.Errorf("token is not valid yet") vErr.Errors |= ValidationErrorNotValidYet } goで|=はOR演算子を表すが、エラーでなんでOR演算子を使うのか? ...
Token used before issued はjwtのParseの時iatが現在時刻より未来の場合発生する サーバー間の時刻のずれでも発生するので注意する Parseはerrorがnilでない時もtokenを返すので、後処理はできる package main import ( "fmt" "github.com/dgrijalva/jwt-go" ) func main() { // iatが2030年になっている tokenstring := "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxOTE2MjM5MDIyfQ.jHQiBm09vEVjEx9347u2hU7LTreUVtEbWRPWrr9DG_A" secret := "my_secret_token" token, err := tokenParse(tokenstring, []byte(secret)) if err != nil { fmt.Printf("Error:%v\n", err) return } claims, ok := token.Claims.(jwt.MapClaims) if ok { fmt.Println(claims) fmt.Println(claims["name"]) return } } func tokenParse(idToken string, hmacSecret []byte) (*jwt.Token, error) { token, err := jwt.Parse(idToken, func(token *jwt.Token) (interface{}, error) { // アルゴリズムの判定 if _, ok := token.Method.(*jwt.SigningMethodHMAC); !ok { return nil, fmt.Errorf("unexpected signing method: %v", token.Header["alg"]) } return hmacSecret, nil }) return token, err }