Google Container RegistryにVue.jsアプリを置いてCompute Engineにデプロイ

GCP

Vue.jsのウェブアプリをDockerコンテナにし、コンテナイメージからGoogle Compute Engineのインスタンスを作成して、Vue.jsのウェブアプリを動かしてみます。 Vue.jsのプロジェクト作成 コンテナイメージ作成 Google Container Registryにpush Google Comput…

Google Container RegistryにHello, WorldなDockerイメージを置いてみる

GCP

Google Container Registryを初めて触ってみます。 Dockerコンテナイメージ作成 Google Container Registryにpush Google Container Registryからpull 追記 2021/04/22 Dockerコンテナイメージ作成 以下のような適当なDockerfileを作成します。 FROM ubuntu:…

Google Compute Engineのstartup scriptsを試してみる

GCP

Google Compute Engineのstartup scripts(起動スクリプト)の機能を試してみました。 (最近GCPの「やってみた」系の記事が続いています) Google Cloud TranslationのAPIをローカルのNode.jsから試してみる FirebaseのCloud FunctionsからGoogle Cloud Trans…

RubyでマルチスレッドなTCP Serverのサンプルコード

RubyでTCP/IPのソケットを試してみました。サーバ側はマルチスレッドです。 サーバ側サンプルコード server.rb require 'socket' maxlen = 10 server = TCPServer.open(3000) loop do Thread.start(server.accept) do |socket| begin loop do buf = socket.r…

AWS SQSをRubyで試してみる

AWS

RubyからAWSのSQSにメッセージを送受信してみます。前回はPythonで試しましたが、今回はそのRuby版です。 CloudFormationでSQSを作成するところは前回と同じなので省略します。 RubyのAWS SDKをインストール。 $ gem install -N aws-sdk Rubyのサンプルコー…

Python/Perlから子プロセスの標準入力にデータを渡す

先日も似た記事を書きました。 Python/Perlからdiffコマンドを起動して2つの文字列の差分を表示 このときは、外部プロセスとの通信に名前付きパイプを使いました。 今回は、子プロセスの標準入力に親プロセスからデータを送ります。名前のないパイプを作成し…

gcloudコマンドをUbuntuにインストール

GCP

Google Cloudのgcloud, gsutilなどのコマンドをインストールしてみます。 Compute Engineですと、初めからインストールされていて、認証も通っているようです。今回はGoogle Cloudと関係ないAWS EC2インスタンスにインストールしてみました。 参考 Using the…

AWS Step FunctionsのRetryとCatchを使ってみる

AWS

AWSのStep FunctionsのRetryとCatchをServerless Frameworkから使ってみます。 Step Functionsは、CloudFormationだとState machine定義の記述が面倒です。JSONを文字列にしたものをCloudFormationのテンプレートに書くか、別ファイルにしないといけないよう…

WindowsのWSLからテキストのコピペでSSH経由でファイルを送る方法

WSLから clip.exe というコマンドでテキストをクリップボードにコピーできることを知りました。 なので、こんなことができます。WindowsからTera Termなどでどこか遠くのサーバに接続し、Windowsにあるファイルをテキスト貼り付けで遠くのサーバに送信です。…

AWS SQSをPythonで試してみる

AWS

CloudFormationでSQSのQueueを作成して、Pythonコードでメッセージの送受信をするところまで試してみます。 CloudFormation Pythonコード CloudFormation template.yaml AWSTemplateFormatVersion: '2010-09-09' Resources: SampleSQS: Type: AWS::SQS::Queu…

Vue.js / Nuxt.js / Vuexの書き方のメモ

すぐに忘れてしまうのでテンプレートを残しておきます。 Vue.js / Nuxt.js Vuex Vue.js Nuxt.js Vue.js / Nuxt.js import Element from "~/components/element.vue"; export default { components: { "element": Element, }, data() { return { field1: valu…

Python/Perlからdiffコマンドを起動して2つの文字列の差分を表示

PythonまたはPerlからfork, execしてdiffコマンドを起動し、2つの文字列の差分を表示させるサンプルコードです。 diffコマンドへの文字列受け渡しは名前付きパイプを使っています。diffしたいだけなのに3つも子プロセスを起動しちゃってます。 Python import…

Vue.jsやNuxt.jsの開発用サーバのポート番号を変更する

Vue.jsやNuxt.jsの開発用サーバのポート番号を変更するには package.json に記述すればよいようです。 Vue.js package.json 変更前(デフォルト) "scripts": { "serve": "vue-cli-service serve", // ... }, ↓ 変更後 "scripts": { "serve": "vue-cli-service…

Pythonの自作パッケージにリソースファイルを含めるには

Pythonソースコード以外にテキストや画像など任意のファイルをパッケージに含めて、Pythonコードから参照する方法のメモです。 手順の概要 ソースコード requirements.txt sample/data.txt sample/__init__.py sample/main.py setup.py MANIFEST.in 動かして…

S3バケットのオブジェクト数をawscliで確認

AWS

S3バケットにあるオブジェクトの数をawscliで確認する方法です。 2つ方法を書きます。1つ目は単純にlsコマンドで数えています。2つ目はCloudWatchのMetricsで、バージョニングが有効化されているバケットの場合は過去バージョンのオブジェクトも含まれます。…

大きなファイルをS3にawscliでMultipart Upload

AWS

S3にPUTするときの最大サイズは5GBだそうです。これを超えるサイズをアップロードする場合にはMultipart Uploadが必要です。 aws s3 cpコマンドでは大きいファイルをアップロードする際には自動でMultipart Uploadになりますが、Multipart Uploadの処理の中…

PillowをAWS Lambda + Python + Serverless Frameworkで動かす

AWS

画像を処理できるPillowをAWS Lambda + Python + Serverless Frameworkの環境で動かしてみました。 AWS Lambda + Python + Serverless FrameworkにPythonのパッケージをインストールする方法は前回の記事に書きました。 AWS Lambda + Python + Serverless Fr…

AWS Lambda + Python + Serverless FrameworkのLayerにpipインストール

AWS LambdaのLayerにPythonのライブラリをインストールする方法です。Serverless Frameworkを使用している場合です。 少し前にも似た記事を書いたのですが、そのときはLayerに乗せられずLambda本体にライブラリのイメージが含まれてしまっていました。 前回…

OpenCVからPillowに画像データを変換

PythonのOpenCVから画像を扱うPillowというライブラリに渡してみます。 OpenCVからPillowにはNumpy配列を介して渡せるのですが、3色の順番がOpenCVはBGRで、PillowがRGBという違いがあるようで、変換が必要でした。 import cv2 import PIL.Image def buildVi…

大量の浮動小数点数のデータをJavaからバイナリ出力してPythonで読み込む

Javaで処理して作成した大量の浮動小数点数のデータをバイナリでファイル出力して、それをPythonで読み込む方法を確認しました。 Javaからは DataOutputStream で書き出し、Pythonでは struct.unpack メソッドで読み込みます。 Javaの DataOutputStream はハ…

大量の浮動小数点数のデータをRubyからバイナリ出力してJavaで読み込む

Rubyで処理して作成した大量の浮動小数点数のデータをバイナリでファイル出力して、それをJavaで読み込む方法を確認しました。 Rubyからはpackメソッドで書き出し、Javaでは DataInputStream で読み込みます。 Javaの DataInputStream はハードウェアのバイ…

HTMLのvideoタグで動画を埋め込むサンプル

HTMLのvideo要素で動画を埋め込むサンプルです。 動画の再生停止ボタンやシークバーなどはvideo要素だけでも標準のデザインのものが使えますが、プラスアルファの機能を提供しているVideo.jsもここでは利用しています。 <html> <head> <title>sample movie</title> <link href="https://vjs.zencdn.net/7.10.2/video-js.css" rel="stylesheet" /> </link></head></html>

Linuxのパイプの流れる速度を制限するには

Linuxのパイプの流れる速度を制限してゆっくりデータを流すには、 pv コマンドが使えます。 例 $ COMMAND1 | pv -L 10 | COMMAND2 これで秒間10バイトしか流れなくなります。COMMAND1の標準出力がゆっくりしかできない状況や、COMMAND2の標準入力がゆっくり…

Chromeで動画のシークができない

HTMLにvideo要素で動画を埋め込んでみたところ、開始・停止の制御はできるものの、シークバーを動かしてもシークできずに悩んでました。 調べたところ、Chromeではサーバがrange requestsに対応していない場合に、シークできないようでした。 動画ファイルを…

AWS IAM Policyをawscliで作成・取得・更新

AWS

AWSのIAM Policyをawscliで取得、作成や更新をすることはできますが、以下の理由でとても手間です。 Policyにバージョンの概念があるため、バージョン番号を確認するワンクッションが必要 Policyの名前を指定する箇所とARNを指定する箇所があり分かりづらい…

満月・新月の日時をRubyで計算

前回の太陽の位置を地心直交座標系の計算の続きです。 太陽と月の地心直交座標系での位置を計算 黄道座標系に変換して太陽と月の黄経を計算 黄経差を計算 黄経差が0°や180°になるタイミングを計算 まずJPLからデータをダウンロード。 $ wget -r 'ftp://ssd.j…

Serverless Frameworkのデプロイ用S3バケットの設定

Serverless Frameworkでデプロイすると、デプロイ用のS3バケットが勝手に作成されます。勝手な作成を抑制する設定のメモです。 Serverless FrameworkはCloudFormationのテンプレートやLambdaに使うソースコードをS3バケットに保存してデプロイ処理します。バ…

Serverless FrameworkとAWS Lambda with Python or Node.jsでS3アクセス

AWS

前回、RubyでServerless Frameworkを触ってみました。今回は同じことをPythonとNode.jsでします。 作成するAWS Lambdaは、前回と同じですが、CloudWatchからスケジュール起動します。Lambdaでの処理内容はS3にアクセスしてログに残すのみです。 カレントディ…

太陽の地心直交座標系での位置計算

太陽の位置を計算するプログラムを書きました。 JPL(NASA Jet Propulsion Laboratory、NASAジェット推進研究所)が太陽や月、惑星の位置を計算するためのデータを公開しています。そのデータを読み込んで計算するRuby Gemがありますので、それを呼び出すだけ…

地球時(TT)と太陽系力学時(TDB)の関係式

地球時と太陽系力学時は、天文学で使われる時刻系で、普段みんなが使っている協定世界時とは少しだけ時刻がずれています。 協定世界時は生活に使えるように地球の回転と同期するよう、ときどきうるう秒が入りますが、地球時と太陽系力学時は時間の進み方を一…