新しいことにはウェルカム

技術 | 電子工作 | ガジェット | ゲーム のメモ書き

ラーメン屋の味玉を作る

子供がラーメン屋の味玉が好きで、家でも食べたいというリクエストがありました。 スーパーで味玉を何種類か買ってきたのですが、そもそもラーメン屋の味ではなかったり、ラーメン屋の味だけど、黄身が固まっていて、あのドロッとした独特感じが再現されてい…

GCPを使って、できるだけ楽してGo言語のgoroutineのリークを監視する

ゴルーチン リーク Go言語はめちゃめちゃ簡単にゴルーチン(スレッドのようなもの)を作れるのが魅力です。 あまりにも簡単なので、あまり深く考えずゴルーチンを生成していたのですが、ゴルーチンはメインフローとは別に切り離されて実行されるので、デッド…

Google Kubernetes Engine(GKE)で、コンテナでエラーが発生したらSlackやメールに通知する方法

GCPのKubernetes(GKE)で、プログラムでエラーが発生したら、Slackやメールなどの外部に通知する方法です。 自分でエラー検知の仕組みを実装しなくても、GCPの設定のみで可能です。 大まかな仕組み プログラムでエラーが発生した時に、プログラムから標準エ…

JavaScriptで同時実行数を指定しつつ並行実行させる方法

沢山のタスクがあって並行処理したいのですが、全てを並行実行させると重くなってしまうので、同時実行数を指定しつつ並行実行させたい時があります。 恥ずかしながらJavaScriptでそれをやる方法を知らず、代案として、処理したいタスクを同時実行数づつに分…

Dockerのpuppeteerが突然動かなくなった

普段Webのクローリングにpuppeteerを使っていて、puppeteerの実行はDockerで行っています。 クロール項目を追加することがあって、プログラムを修正してDockerでビルドして実行したところ、下記のようなエラーが出て動きませんでした。 /node_modules/puppet…

Node.jsのstream(ストリーム)の使い方メモ

データ処理を行う時、ついつい面倒くさくて、全てのデータをメモリに読み込んでから処理しがちです。 データサイズが小さい時は問題ないのですが、巨大なデータを扱う場合は、メモリを大量に消費しますし、1つのデータの読み込みや書き込みが完了するまで、…

TableauのLOD(Level of Detail)の使い方メモ

Tableauは直感的に、マウスのドラッグアンドドロップでグラフが作れるのが魅力ですね。 しかし、エクセルのグラフをTableauに移植しようとした時に、マウス操作だけではうまくグラフが作れない時があります。 そういったグラフは、TableauのLOD(Level of De…

本「Go言語による並行処理」で非同期処理が楽しくなった

Go言語を始めました。 何か新しいことを学ぶ時には、ワンストップで体系立て全体像が把握できる、書籍を読むやり方が好きです。 今回「Go言語による並行処理」を読んだのですが、とても良かったので、ここに感想を書きました。 Go言語による並行処理 並行処…

Go言語の時刻演算パッケージ「time」の使い方メモ

Go言語は、シンプルな関数を組み合わせてプログラミングをすることが多く、また、関数毎にエラーチェックが発生するので、全般的にコードが長くなりがちです。 ちょっとした事をしたい時でも、コードをそれなりに書く必要があるのですが、毎回ゼロから書くの…

Go言語の正規表現・文字列操作方法メモ

Go言語は、シンプルな関数を組み合わせてプログラミングをすることが多く、また、関数毎にエラーチェックが発生するので、全般的にコードが長くなりがちです。 ちょっとした事をしたい時でも、コードをそれなりに書く必要があるのですが、毎回ゼロから書くの…

SVNでちょっとファイルをダウンロードをしたい時のコマンドメモ

SVNを使っているプロジェクトがあって、そこから最新のファイルをダウンロードすることがあります。 あくまで指定したファイルが欲しいだけで、そんな、ちょっとファイルを取得したい時に使う、必要最低限のSVNコマンドメモです。 svnインストール sudo apt-…

Go言語でJSONを読み書きする方法メモ

Go言語は、シンプルな関数を組み合わせてプログラミングをすることが多く、また、関数毎にエラーチェックが発生するので、全般的にコードが長くなりがちです。 ちょっとした事をしたい時でも、コードをそれなりに書く必要があるのですが、毎回ゼロから書くの…

Go言語でファイル・IO・ストリームを使った読み書き方法のメモ

Go言語は、シンプルな関数を組み合わせてプログラミングをすることが多く、また、関数毎にエラーチェックが発生するので、全般的にコードが長くなりがちです。 ちょっとした事をしたい時でも、コードをそれなりに書く必要があるのですが、毎回ゼロから書くの…

AWS CLI設定方法メモ

久しぶりにAWS CLIをインストールしました。バージョン2になっているんですね。 一度設定すると中々触れる機会がなくて忘れてしまうので、自分用設定方法メモです。 基本的な仕組み ~/.aws/config でプロファイルを設定する ~/.aws/credentials でユーザー…

Linuxでディレクトリ毎に環境変数を自動で変える方法

Docker Composeのプロジェクト名は、docker-compose.yamlファイルが置かれているディレクトリの名前になります。 しかし、ディレクトリを別の名前にしたいことは多く、そんな時はdocker-composeコマンドを実行する度に-p <project_name>オプションでプロジェクト名を指定す</project_name>…

Go言語でローカルパッケージを使う方法(Go Moludes)

Golangでプログラムを書いていて、プログラムが長くなってきたので、パッケージに分けてみました。 構成 ディレクトリ構成は下記のような感じ。 . |-- a | `-- a.go |-- b | `-- b.go `-- main.go 手順 方針 Go Modules を使って、プログラムを1つのモジュ…

Go言語でハマったことメモ(インターフェース)

Golangを始めました。 GolangはC言語のように、シンプルな文法・データ構造でできているのですが、同時に、生産性を高めるための、高度な概念も取り入られています。 そしてそのために、Golangには若干トリッキーな構文がいくつかあります。 しかし、それら…

Go言語でハマったことメモ(値渡し・ポインター渡し)

Golangを始めました。 Golangはポインターを使います。 Golangは歴史的に新しい言語なので、ポインターを意識しないで、何となくコードを書けば良しなに動いてくれるのかなと思ったのですが、甘かったです…。 ポインター自体はよくあるもので、とりあえずポ…

Go言語でハマったことメモ(slice・map・string)

Golangを始めました。 GolangはC言語のように、シンプルな文法・データ構造でできているのですが、同時に、生産性を高めるための、高度な概念も取り入られています。 そしてそのために、Golangには若干トリッキーな構文がいくつかあります。 しかし、それら…

Go言語でハマったことメモ(マップに構造体を入れると「cannot assign to struct field ...」のエラーになる)

Golangを始めました。 始めてみて感じたのですが、Golangはできるだけ文法をシンプルにかつ、できるだけコードがシンプルになるように設計されています。 そしてそのために、Golangには若干トリッキーな構文がいくつかあります。 しかし、それらを知らずに、…

Go言語でハマったことメモ(クラス・継承)

Golangを始めました。 始めてみて感じたのですが、Golangはできるだけ文法をシンプルにかつ、できるだけコードがシンプルになるように設計されています。 そしてそのために、Golangには若干トリッキーな構文がいくつかあります。 しかし、それらを知らずに、…

Go言語でハマったことメモ(ポインターのアロー演算子がない)

Golangを始めました。 始めてみて感じたのですが、Golangはできるだけ文法をシンプルにかつ、できるだけコードがシンプルになるように設計されています。 そしてそのために、Golangには若干トリッキーな構文がいくつかあります。 しかし、それらを知らずに、…

Docker Composeで、コンテナ毎にログをタブに分けて表示する方法

複数のコンテナを連携させたい時は、Docker Composeを使っています。 Docker Composeを実行すると、各コンテナのログが表示されるのですが、1画面に全てのコンテナのログが表示されます。 コンテナ毎にログを追いたいのですが、途中で他のコンテナのログが…

Jenkinsのdockerイメージは、Docker公式とJenkins公式の2つあるのか…

DockerでJenkinsを使いたかったので、Jenkinsイメージを取ってきて使いました。 FROM jenkins:alpine 問題発生 Jenkinsのセットアップでプラグインをインストールしようとすると、ことごとくエラーになりました。 原因究明 プラグインのエラーを見るとこんな…

kubectlで複数のクラスターを切り替える方法

Kubernetesの新しいクラスターを追加したので、kubectlコマンドで切り替えられるように設定しました。 一度設定してしまうといじることはなく、このままだとやり方忘れてしまうので、自分用に設定方法をメモしておきます。 仕組み Kubernetesを操作するにはk…

Google Cloud SDK(gcloud)で複数アカウント・プロジェクトを切り替える方法

Google Cloud Platformに新しいプロジェクトを追加したので、Google Cloud SDK(gcloud CLI)でプロジェクトを切り替えられるように設定しました。 一度設定してしまうといじることはなく、このままだとやり方忘れてしまうので、自分用に設定方法をメモして…

Microsoft Graph (Office365) API の、管理者アクセスできる、ユーザーなしトークンを取得して使用する方法

Microsoft Graph (Office365) APIの、管理者トークンの取得と使い方に関するメモです。 きっかけ Azure Active Directoryのユーザー・グループの追加・削除を、APIを使って行おうとしました。 Azure Active DirectoryのAPIは、Microsoft Graph (Office365) A…

Azure Active Directoryのシングルサインオン(SSO)で、アプリにログインできない時の対処方法

シングルサインオン(SSO)サービスに興味があって、一時期色々サービスを試していました。 www.kwbtblog.com Office365のユーザーをキーとしてログインしたかったので、結局Azure Active DirectoryのSSOを使うことにしました。用途としては、主にTableauのロ…

Dockerfileのタグでlatestは使っちゃいけないなぁと思った

定期的に、AWS S3のファイルを、Google Cloud Storageにコピーしています。 コピーのやり方は色々あるのですが、ここではGoogle Cloud SDKのgsutilコマンドを使っていて、 Google Cloud SDKは、Alpine LinuxのDockerイメージを使用しています。 しかし、ある…

Google BigQueryのNode.js SDKで、Cloud Storageの複数のファイルをまとめてロードする方法

Google BigQueryに、Google Cloud Storageのファイルをロードする時、複数のファイルをまとめてロードすることができます。 しかし、それをGoogle BigQueryのNode.js SDKでやろうとしてハマったので、そのメモ書きです。 概要および問題点 table.createLoadJ…