Yura YuLife

ITエンジニアの覚え書き。

TRIX - ゴクロウサンの歌詞

ずっと聞き取れないところがあるなーと思っていたんだけど、イヤホンを変えてみたらだいぶ聞き取りやすくなったのでメモメモ。


毎朝満員電車に揺られてゴクロウサン あぁ大変だ
会社で家庭で小言を言われてゴクロウサン もうたくさんです


毎朝満員電車に揺られてゴクロウサン あぁ大変だ
会社で家庭で小言を言われてゴクロウサン もうたくさんです
朝から早起き育児にパートにゴクロウサン あぁ大変だ
毎日炊事に掃除に洗濯ゴクロウサン もうたくさんです


朝から晩まで営業スマイルゴクロウサン あぁ大変だ
景気が全く回復しないや困ったなぁ もうたくさんです
毎朝満員電車に揺られてゴクロウサン あぁ大変だ
会社で家庭で小言を言われてゴクロウサン もうたくさんです


フュージョンバンドだし歌詞サイトには載ってないしで、ずっとモヤモヤしてたんだけどコレでスッキリ!

Pythonでファイルに書き出さずにzip圧縮

この記事では、Python でファイルを生成せずに zip 圧縮したデータを生成する方法を紹介します。

zip 圧縮したデータを Python 内からアップロードしたい場合なんかに、ファイルに書き出して後から削除する手間を避けたかったり、FaaS などそもそも ReadOnly のファイルシステムで使ったりすることを想定しています。

動作環境

動かし方

Python の zipfile ライブラリと、 io.BytesIO を用いて実現します。

# zip 圧縮したデータをファイルに書き出す代わりに BytesIO のストリームを作成
zip_stream = io.BytesIO()

# ファイルに書き出す代わりに zip_stream に zip 圧縮したデータを出力
with zipfile.ZipFile(zip_stream, 'w', compression=zipfile.ZIP_DEFLATED) as new_zip:
    # foo.txt というファイル名で abcdef という文字列をzipファイルに追加
    new_zip.writestr("foo.txt", "abcdef")
    # ローカルの foo.png を zip ファイルに追加
    new_zip.write("foo.png")

# 生成された zip 圧縮データを出力
# 実際には print の代わりに HTTP の POST とか、S3 へのアップロードとかに使うイメージ
print(zip_stream.getvalue())

参考URL

AWS Lambda で Python3 + Chainer を使う方法

概要

Python3 + Chainer を使った APIAWSAPI Gateway + Lambda で動かす方法を紹介します。

ちなみに Deep Chord というウェブアプリのバックエンドで使っています。

以下の2点がポイントです。

  • Chalice を使う
  • EC2 の Amazon Linux 上で一旦 Chainer をインストールして、生成されたファイルをダウンロードしてデプロイする

動作環境

  • Python 3.7
  • Chainer 1.12 (バージョンがめちゃくちゃ古いせいか、Chalice ではいい感じにコンパイルできなかった)

方法

EC2 上で Chainer をビルド

Amazon Linux 2 の EC2 インスタンスを立ち上げ、以下のコマンドで Chainer をインストールします。インスタンスは t2.micro などの無料のインスタンスで十分です。

# Lambda で動かす Python のバージョンと合わせます
sudo yum -y install python37 python37-pip

# Chainer のインストール (Numpyなども一緒にインストールされます) 
pip3.7 install chainer==1.12 --user

生成されたファイルのダウンロード

Chalice のプロジェクトの vendor フォルダに上記でビルドされた Chainer とその依存ライブラリをダウンロードします。

# Chalice のプロジェクトを作成(作成済みの場合は省略)
chalice new-project プロジェクト名

# プロジェクト内に vendor フォルダを作成
cd プロジェクト名
mkdir vendor

# vendor フォルダ内に EC2 でビルドしたライブラリをダウンロード
scp -r -i [秘密鍵のパス] ec2-user@[EC2のIPアドレス]:./.local/lib/python3.7/site-packages/ ./vendor/

app.py の作成

Chalice プロジェクトの requirements.txt には chainer は書かず、あとは普通に app.py の中で import chainer すると、vendor フォルダ内の chainer を参照してくれます。

参考情報

numpy とかは requirements.txt に書いておくだけで、例えば Mac 上で開発してても Lambda (というかAmazon Linux) で動くようにいい感じに Chalice がビルドしてデプロイしてくれるらしい。Chainer も最新版なら大丈夫なのかな?

ダウンロードした vendor フォルダを覗いてみたら .so ファイルは Chainer じゃなくて、 Chainer が依存している protobuf とかの中に入ってた。ローカルでのビルドは依存ライブラリ側の方で失敗しているのかも...

参考URL

免責事項

※ 投稿内容は個人的な見解であり、所属する企業を代表するものではありません。

Django を AWS ECS(FARGATE) + ELB で動かすときの ALLOWED_HOSTS の設定

めちゃくちゃ苦戦したのでメモ。

困ったこと

Django のアプリを ECS(FARGATE) 上で動かすと Invalid HTTP_HOST header: '10.0.X.Y'. You may need to add '10.0.X.Y' to ALLOWED_HOSTS. みたいなエラーが出て、 ELB のヘルスチェックで落ちる。

だからといって、 ALLOWED_HOSTS = ['*'] みたいにするのはセキュリティ的にも気持ち的にもやりたくない。

解決策

Stack overflow に同じ問題にぶち当たっている人がいた。

stackoverflow.com

通常の ALLOWED_HOSTS の設定の下に、以下を追加すれば良いみたい。

try:
    resp = requests.get('http://169.254.170.2/v2/metadata')
    data = resp.json()
    container_meta = data['Containers'][0]
    EC2_PRIVATE_IP = container_meta['Networks'][0]['IPv4Addresses'][0]
    ALLOWED_HOSTS.append(EC2_PRIVATE_IP)
except requests.exceptions.RequestException:
    pass

これで当該のエラーが出なくなって、タスクが再起動されまくる悪夢から解放されました!

参考URL

Debian Stretch で Bluetooth イヤホンを A2DP で利用する

本記事では、Debian Stretch の PC で Bluetooth イヤホンを A2DP プロファイルで利用する方法を説明します。

動作環境

Debian Stretch で Bluetooth で音楽再生

Debian Stretch をインストールするとデフォルトで Bluetooth のオーディオが利用できるのですが、デフォルトのままではモノラルの低音質(HSP/HFP プロファイル) での再生しかできなかったため、追加の設定を行うことでステレオの高音質(A2DP プロファイル)で再生できるようにしました。

必要なパッケージを追加

以下のコマンドで Bluetooth のオーディオ関連のパッケージを追加します。

sudo apt-get install pulseaudio pulseaudio-module-bluetooth pavucontrol bluez-firmware

そして、Bluetooth とオーディオのサービスを再起動します。

sudo service bluetooth restart
sudo killall pulseaudio

Bluetooth のペアリング

All Settings > Bluetooth からイヤホンとペアリングします。

オーディオの設定

All Settings > Sound Settings > Output で先程ペアリングしたイヤホンを選択すると、Profile として A2DP もしくは High Fidelity Playback (A2DP Sink) が選択できるので、こちらを選択することでステレオ再生ができるようになりました。

f:id:yurayur:20181010135915p:plain

関連URL