@kotyのブログ

PythonとかAWSとか勉強会のこととかを、田舎者SEがつづります。記事のライセンスは"CC BY"でお願いします。

ゴミAlexa Skillを作った

今日審査に合格して公開にいたった。

https://www.amazon.co.jp/dp/B07DPKSP3R/

Google Assistant版も半年ほど前に作った。

https://assistant.google.com/services/a/uid/0000009b8eb935b1?hl=ja

AlexaもAssistantも大まかな作りや出てくる用語は同じ。ただしバックエンドのfunctionにPython(しかも3.6)を使える点と無料で使う範囲内だと外部にhttpリクエストを送れる点で、 Alexaの方が作りやすい。

また、多くのAWSの機能を使えるのAlexa Skillのも利点である。本件ではリクエスト内容をDynamoに保存して2回目以降は地区名を言わなくても良いようにできた。

審査はAlexa、Assistantともに3回目の申請で合格した。もう少し下調べすれば3回も申請しないで済むと思う。自分はとりあえずぽちったので。。。審査をする方はこういったしょうもない申請を毎日レビューしているんだろう。しかし申請に対する公称5営業日以内のフィードバックが半日で返ってきた。組まれているレビュー体制に比べて申請が少ないのかもしれない。

今なら公開特典があるらしい。

スキルを開発して、特典をもらおう | Amazon Alexa | アレクサ

Tシャツはもらえるが、echo dotをもらえる要件の利用者100名は無理だ。。。

しかしまたゴミアプリを作ってしまった。ここ1,2年はやっつけのものしか作っていないので、腰を据えてゴミではない何かを生み出したい。

はじめてのAlexaスキル開発 [音声認識アプリ開発の基礎知識を身に付ける! ]

はじめてのAlexaスキル開発 [音声認識アプリ開発の基礎知識を身に付ける! ]

Django Congress JP 2018 参加記録

djangocongress.jp

参加者の皆さま、スタッフの皆さまお疲れさまでした。

macの調子が悪くほとんどメモを取れなかった。

Django After Web 2.0 - Speaker Deck

"Pure SPAs don't really need Django" はまったくその通り

A Modernization of Legacy Django Based Applications - Speaker Deck

以下メモ書き。

  • Dockerで本番も開発も同じImageを利用。環境変数で切り替え。というのがイケてるやり方なんだろうか。質疑のときにどうデバッグするか聞いたら、リモートデバッグかローカルでrunserverとのご回答であった。その後jpkingさんからpdbを使え、とのありがたいお言葉を頂戴した。

Building your MVP with Django: Lessons Learned Building and Launching a SaaS - Speaker Deck

  • テンプレートのincludeは速度的に不利だそうだ。テンプレートをあまり細かく分割したことがなく気にしていなかった。
  • get/postを関数ベースビューとデコレータで書く方法は、うーん、、、そこまで感銘を受けなかった。

いまさら振り返る Django Migration - Speaker Deck

すごいマシンガントークだった

Django in the age of AI - Speaker Deck

英語セッションで半分も分からんかった。サービスは面白そうなので使ってみる。

所感

  • この日に限ってなぜmacが不調に
  • Djangoだけで完結する時代ではなく、それ以外の要素が増えている。("Pure SPAs don't really need Django" だし)
  • もっとみんな質問すればいいのに。質問ゼロというのは発表者に失礼
  • 今回以外もそうだけど、おしなべて英語セッションの方が質問が多い
  • そしてこれも今回以外もだが、英語セッションは話が半分も分からない
  • 母語が日本語の発表者と質問者が英語で質疑をしていたのが印象的だった
  • 英語がんばろう。。。

今回は弊社からも発表者が出た。私もCFPを出していたがあえなくリジェクト。

Django・WSGIミドルウェア入門/django-congress-jp-2018-talk - Speaker Deck

スライド等当日の発表の良さもさることながら、thinkamiさんの発表は過去のブログ記事が元ネタになっており、普段からのアウトプットの重要性を感じる。thinkamiさん、お疲れさまでした。

第3回「Linuxのしくみ」読書会参加記録

nseg.connpass.com

参加者6名 (´・ω・`)

  • 経過時間:そのプロセスが開始されてから終了するまでの時間
  • 使用時間:CPUを使った時間。マルチコアを100%使った場合は、経過時間よりも(ざっくりマルチコア数分)大きくなる。

今回もグラフを書いてみた。優先度を変えて起動した場合の挙動。87ページのグラフ。

以下のコードにより、グラフを描画できる。

%matplotlib inline

import numpy as np
import matplotlib.pyplot as plt

data = np.loadtxt('data3.csv', delimiter='\t')

fig2 = plt.figure(figsize=(10, 5))

ax2 = fig2.add_subplot(1,1,1)
data0 = data[(0==data[:,0])]
input0 = data0[:,1]
output0 = data0[:,2]
ax2.scatter(input0, output0, label='p1')

data1 = data[(1==data[:,0])]  #0番目の列が1の行を抽出
input1 = data1[:,1]
output1 = data1[:,2]
ax2.scatter(input1, output1, label='p2')

fig2.show()
plt.legend()  # 凡例を表示

f:id:kkotyy:20180511114129p:plain 優先度が各プロセスの 処理時間に反映されているのが分かる。

freeコマンドについて

  • freeは実際に空いている容量
  • availableはそれに加えて解放できるカーネルメモリも含まれる

OOM

  • OOM-killerは、デフォルトでは適当に選んだプロセスを殺して物理メモリを空けることにより、なんとかしてシステムを生き延びさせようとする*1
  • 所感:適当に選ばれるのつらい...
  • 所感:98ページの図は誤植もあったが、それにしてもよく理解できんかった。

次回は人数が回復すると良いのですが。

第4回 Linuxのしくみ 読書会 - connpass

AWSのMFAができなくなって復旧した話

ある日突然Nexus5xが文鎮化した。当該端末にインストールしたGoogle Authenticatorアプリを使っていろんなサイトでMFAを使っていた。

ほとんどのサイトはリカバリーコードやSMSの認証といったワークアラウンドがあったため何とか復旧できた。 しかしAWSだけ何とかならなかった。

AWSでMFAできない場合、パスワードを忘れたときと同様に以下のフローに流される。

  1. rootアカウントに登録したアドレスにメールを送信
  2. 本文内のURLをクリック
  3. 開いた先でSMS送信
  4. SMSのPINコードを入力

自分は3で詰まった。正しい電話番号を登録していなかったのだ。(なので4は「たぶんそうだろう」レベルのものである)

どうやら最近はAWSアカウントを新規に作成する際にSMS認証があるようだ。しかし自分が何年か前に登録した際にはそんなものはなく、電話番号は適当に入力したままだった。なのでSMSを受信できない。 これは詰んだ。と思いきや、似たような状況になった方がいて、参考に電話サポートを受けてみた。

フォームに必要事項を入力しsubmitすると、30分ほどでPINコード入りのメールが送られてくる。続いて数分で電話が来る。電話の先の声は英語である。似たような状況になった方は日本語サポートへの転送を依頼したようだが、自分はそのままどうにかこうにかPINコードを言って、事なきを得た。電話サポートにより、MFAを無効化してもらえる。

率直に言って電話の向こうの方とは全くコミュニケーションにならなず、こんな簡単なやりとりもできんかと打ちひしがれた。。。 というわけで、英語学習のモチベーションが上がった一件でした。おしまい。

Googleは登録されている電話番号が正しいか定期的に聞いてきてくれるので、AWSもそうしてほしい。。。)

NHKラジオ 実践ビジネス英語 2018年 05 月号 [雑誌]

NHKラジオ 実践ビジネス英語 2018年 05 月号 [雑誌]

第2回「Linuxのしくみ」読書会参加記録

参加者は10名くらい。思ったより(?)1回目より減らなかった。

nseg.connpass.com

今回も関西より一名リモート参加者あり。zoomにて中継しました。

いよいよソースコードが登場しました。c言語は学生のとき以来でそもそもコンパイルの方法を忘れていた。。。

処理結果をグラフにプロットしてみて、プロセススケジューラの仕事っぷりを見る箇所がありました。 グラフの描き方までは載っていなかったので、その場で以下のサイトでざっくりプロットしてみました。*1

gnuplot.respawned.com

今どきならjupyter notebook上でmatplotlibを使ってグラフを書くんでしょうか。というわけでやってみました。

まずはanacondaをインストールし、仮想環境に入る。

pyenv install anaconda3-4.3.1
pyenv local anaconda3-4.3.1

anacondaだとjupyter notebookやmatplotlib等がひととおり揃っているらしい。すごい。 そりゃデータ屋さんがみんなanaconda使うわけです。

%matplotlib inline

import numpy as np
import matplotlib.pyplot as plt

data = np.loadtxt('data.csv', delimiter=',')
fig1 = plt.figure(figsize=(10, 5))

ax1 = fig1.add_subplot(1,1,1)
input1 = data[:,1]
output1 = data[:,0]
ax1.scatter(input1, output1)

fig1.show()

できたグラフがこちら。 f:id:kkotyy:20180427171636p:plain

次にy軸が進捗のもの

fig2 = plt.figure(figsize=(10, 10))

ax2 = fig2.add_subplot(2,1,2)
input2 = data[:,1]
output2 = data[:,2]
ax2.scatter(input2, output2)

fig2.show()

グラフはこちら。 f:id:kkotyy:20180427171728p:plain

系列ごとに色を変える方法がわからないし、軸が黒背景の上に黒文字で何が何だか分からない。。。取り急ぎこんな感じで。ちょっとづつ勉強します。

次回は連休明けです。 nseg.connpass.com

*1:約20年ぶりにgnuplotを使った

#nseg OSSライセンス勉強会参加記録

第99回NSEGを開催しました。

nseg.connpass.com

本編

テーマはOSSライセンス。@さんを講師にお迎えして講義していただきました。 資料はこちら。 当日の様子はこちらです。

また、thinkamiさんが詳細を報告されているのでそちらをご覧ください。。。

thinkami.hatenablog.com

OSSのライセンスについても勉強になったのですが、OSSコミュニティについてのお話もとても印象に残りました。 コミッターになることやプルリクを送るだけでなく、issueを登録することやplayストアで要望を書くことも十分OSSへ貢献するのだなと感じました。

LT

事前にLTを希望してくれる人が少なかったのでOSSライセンスのしばりはなくしましたが、4名中2名がOSSライセンスに関係した話をしてくれました。

私はOSSとは全く関係のない話をしました。。。

speakerdeck.com

地方だからこそできる農業アイディアソン、ハッカソンを開催してみたいです。

適当な幹事でしたが、盛り上がったので良かったです。可知さん始め参加された皆さんありがとうございました。

OS稼働中に/tmpの内容が消える現象への対処

追記:消されて困るものをそんな所に置くなというご意見はおっしゃる通り。今回は、~/var/run ディレクトリを作ってそこに移して対応した。

追記終わり

CentOS7およびAmazon Linux2 での話。ubuntu server でどうかは知らん。

OS再起動時に/tmpがクリアされる認識はあったが、OS稼働中に/tmpの内容が消える事象が発生した。

直接の事象は supervisord.confで

[unix_http_server]
file=/tmp/supervisor.sock   ; (the path to the socket file)

と設定しているときに、supervisorctl コマンド実行時に supervisor.sock が見つからずに失敗するというもの。 supervisord をrestartすれば済んでいたのでしばらく放置していた。

よくよく調べると、 systemd-tmpfiles-clean.timer なるsystemdのデーモンがあり、こいつが消している模様。

$ cat /usr/lib/tmpfiles.d/tmp.conf
#  This file is part of systemd.
・・・中略・・・
# Clear tmp directories separately, to make them easier to override
v /tmp 1777 root root 10d
v /var/tmp 1777 root root 30d

10日過ぎたら消されるようだ。

というわけで、このtimerをdisableにするか、消されたら困るファイルは別の場所に移す対応が必要。systemdにtimerなんて機能があることを初めて知ったのだった。*1

参考:

rskmt.hateblo.jp

qiita.com

*1:常識だろと言われないかビクビクしながら書いているが、みなさんこれくらいのことは把握して使っているんだろうか