akms道東

ITイベント,勉強会への参加記録や趣味のことが書いてあるブログです.

ubuntu-2404 環境で asdf 経由で python をインストールするときに必要なパッケージを事前インストールするためのコマンド

いつもpyenvなどでもaptで事前インストールしてたパッケージを忘れるのでメモ。

今まではanyenv→pyenvという流れでやっていたがasdfを知ってからはそっちで設定をしている。

最近までasdfの存在を知らなかったので情報収集量が減っているなと思った。

以下インストールしたパッケージはWSL環境だったりクラウドサーバー環境だったりで微妙に違うかもしれない。

WSL環境のaptのインストールログを見て必要そうなものを確認してからクラウドサーバー環境で実行した。

apt install -y libedit-dev make gcc zlib1g-dev libssl-dev libffi-dev libreadline-dev libbz2-dev libsqlite3-dev tk-dev liblzma-dev
asdf plugin add python
asdf install python latest

wsl2のubuntu環境でman syscallsを読むためにやったこと

「動かしながらゼロから学ぶLinuxカーネルの教科書」を読んでいる時の作業内容メモ

powershellでUbuntuのインストールコマンド実行
wsl --install -d Ubuntu

一般ユーザー名とパスワードの設定という初期設定だけ実施して以下作業を実施

とりあえずアップデート、毎回sudoつけるのめんどくさいのでrootユーザーで実行
$ sudo su -
# apt update
# apt upgrade

普通に実行するとページが存在しないらしい
# man syscalls
No manual entry for syscalls

manpages-devパッケージをインストールすると読めた
# apt install manpages-dev
# man syscalls

UE4 で PS4 コントローラーを使うように設定してみた

今回はWindows 上のUE4PS4のコントローラー(DS4)を接続するためにやったこと。

使ったのは Windows Raw Input プラグイン で設定は下記リンクの通りで動作は確認できた。

[Tutorial] UE4 using Dualshock4 controller (via USB, PS4 DS4 Gamepad). - Unreal Engine Forums

Raw Input プラグインの設定ではベンダーIDに 0x054C プロダクトIDに 0x05C4 と入力した。DS4の第二世代の場合はプロダクトIDに 0x09CC を入力する必要がある。

またWindows上で認識されているコントローラーはスティック中央位置の値が0ではないのでオフセット設定が必要で、入力方向と数値を揃えるためにインバーターのチェックをつける必要があるようだった。

参考リンクの内容をそのまま設定してみたところどうもスティックがニュートラル状態でも細かい値の入力があり、プレイヤーが少しずつ動いてしまうので入力値を扱うところで処理が必要そう。

今回は細かい値の調整まではしていないが利用できる状態にまではなったので一旦先に他の作業を進めることにした。

最近は気になっていたUE4でのゲーム制作を動画講座で勉強をしてる。その中で教材にない部分でやったことをブログのリハビリとして書いた。

勉強していた内容を適切に書き出してふりかえらないと記憶できないほど専門的な用語が多いので適宜ブログに書いていくようにしたい。

SpreadSheet から GAS を利用して Slack API で通知してみた

はじめに

こうすればSpreadSheetからSlackに通知ができたという、個人的な備忘録です。

SlackのAPIを利用する準備などはとくに書きません。

また個人的な忘備録なので、コピペですぐに動くものではありません。

GAS側でやったこと

SpreadSheetでSlackのユーザー名一覧を作成している状態で、GASでそれを取得して、文章も組み立てて通知という流れだった。

特定の何かを利用している人に対して通知したいなどがあっても先にシートを作成しておくことでこれを利用して対応できた。

GASのコード

  • 通知したいユーザーの情報があるスプレッドシートを引数に渡して、ユーザーを取得する
// ssはスプレッドシートの意味、引数にシートを受け取る
function getUsers(ss) {
  // getRangeの引数にSlackのユーザー名が入っているセルの範囲を指定する。例えば "A2:A"
  var r = ss.getRange("").getValues();
  // 値は2次元配列なのでmapでループを回して、popで値を取り出す
  var nr = r.map(function(x){
    return x.pop();
  });
  // 空の値を除くために最後にfilter(Boolean)を実施
  return nr.filter(Boolean);
}
  • ユーザー情報などを利用して通知に必要なリクエストを組み立てて通知する
function myFunction() {
  var ss = SpreadsheetApp.openByUrl("ここにユーザー情報のあるシートの共有リンクを入れる").getActiveSheet()
  var users = getUsers(ss);
  // channelはユーザー名を入れるので空にしておく
  var payload = {
    "token" : "YOUR_SLACK_API_TOKEN"
    "channel" : "",
    "text": "通知したいメッセージ"
  }
  var options = {
    "method" : "POST",
    "payload" : payload
  }
  // 通知したいユーザーの数だけループを回す
  for(i=0;i<users.length;i++){
    // ここで宛先を作る
    payload.channel = "@" + users[i];
    // メッセージの送信なので今回はchat.postMessageを利用した
    var response = UrlFetchApp.fetch("https://slack.com/api/chat.postMessage", options);
    // 誰に送ったか、送信に成功したか、わかるようにユーザー名と実行結果をログに出す
    Logger.log(users[i]);
    Logger.log(response);
  }
}

ハマったところ

  • Slackの個人宛の通知をしたい場合、スクリーンネームなどアプリではメンションが飛ぶ名前ではなく、username を調べて利用する必要がある
    • 上記が正しくない場合、通知が失敗するので、Slackの管理者などに username がわかるユーザーの一覧を事前に出力してもらう必要がある

おわりに

簡単にGASを利用したSpreadSheetからのSlackへの通知についてまとめた。

もう少しきれいな実装などもあると思うが、自分のGAS知識では現状こういった実装になった。

RDS for PostgreSQL のスロークエリログのファイルから開始時間、実行時間、終了時間を出すワンライナー

はじめに

タイトル通りの短い内容です。 また自分用の備忘メモです。

RDS for PostgreSQL でスロークエリログのファイルから開始時間、実行時間、終了時間を出すワンライナー

RDSでPostgreSQLを利用している中で、slowqueryのログをダウンロードして処理にどれくらい時間が掛かっているか出力します。

またログの時刻がUTCなのでJSTに変換するのと、durationから終了時刻を算出するところまで行います。

利用しているのは awkdate です。

macを利用している人は GNU date をインストールして利用してください。

awk '$1 ~/^[0-9]*-/ && $4 == "duration:" {a = $1" "$2; b=int($5 / 1000);"gdate --date \""a" 9hours\" \"+%Y-%m-%d %H:%M:%S\""|getline var; "gdate --date \""var" "b"seconds ago\" \"+%Y-%m-%d %H:%M:%S\""|getline val; print "start: "val" "$4" "$5" end: "var;close("gdate --date \""a" 9hours\" \"+%Y-%m-%d %H:%M:%S\"");close("gdate --date \""var" "b"seconds ago\" \"+%Y-%m-%d %H:%M:%S\"")}' postgresql_logfile_name
  • 実行結果
start: 2017-11-12 07:58:03 duration: 3230.013 end: 2017-11-12 07:58:06
以下略

start,end,durationのcsv形式で出す場合は以下のようにする

awk '$1 ~/^[0-9]*-/ && $4 == "duration:" {a = $1" "$2; b=int($5 / 1000);"gdate --date \""a" 9hours\" \"+%Y-%m-%d %H:%M:%S\""|getline var; "gdate --date \""var" "b"seconds ago\" \"+%Y-%m-%d %H:%M:%S\""|getline val; print val","var","$5; close("gdate --date \""a" 9hours\" \"+%Y-%m-%d %H:%M:%S\"");close("gdate --date \""var" "b"seconds ago\" \"+%Y-%m-%d %H:%M:%S\"")}' postgresql_logfile_name
  • 実行結果
2017-11-11 19:15:00,2017-11-11 19:15:09,9322.90
以下略

出力された結果を元にdurationの値をファイルでgrepすればクエリを確認することができます。

おわりに

RDS for PostgreSQLのスロークエリログ整形に使うワンライナーでした。

単純に解析するだけならツールなどはOSSなどでもあるようなので、そちらを使った方が早いかも。

エラーの原因解明にモブ調査してみた

はじめに

タイトル通りです。

最近話題になっている、モブプログラミングを取り入れて開発をしているチームのモブに混ざってエラーの原因調査を実施しました。

モブプログラミング自体についての説明はとくにしません。

今回は30分程度の作業だったので、短い感想の記録です。

背景としては開発チームがモブプログラミングで開発を進めており、インフラ絡みのエラーが発生していたのでインフラチームがそのモブに参加して原因調査を実施しました。

メンバーは全体で5名で開発3名、インフラ2名という構成でした。

やってみた感想

事前に私と開発チームの3名は下記リンクのようにモブプログラミングを体験しており、さらに開発チームは現在の作業もモブプロで進めており、経験があるという状態でしたがもう1名のインフラメンバーはモブ経験がありませんでした。

しかしながら、ペア作業の経験があったからかドライバーをしてもらいましたが問題なく作業を完了まで進めることができました。

感想を聴いたところ、最初の10分くらいは緊張したがあとはペア作業と同様で問題なく作業できたそうです。

モブ作業をしていて、良かったところとして、インフラ系の調査では一人が実際にサーバに入り、別の人が必要に応じてLBからの切り離しなどのオペを平行で進めることができるなど、 検証で必要な作業がよりスムーズに進めることができたなと思いました。

またアプリの挙動に合わせて検証が必要だったので、インフラメンバーだけでは検証の前にアプリ自体の挙動を正しく把握する必要があるなど、より時間がかかることも考えられましたが、開発チームとのモブ作業ではその部分が不要でディスカッションしつつ必要な動作確認ができるのでこの点もスムーズでいいなと思いました。

今回は実作業時間が短く、大きな課題となるような点は出てきませんでしたが、今後インフラチームでもモブプログラミングのようにモブオペレーションであったりモブ設計であったりといろいろ試してみて、向き不向きの検証をしていければなと思いました。

おわりに

今回は短いですが、モブプログラミングを実施しているチームにまざり、モブ調査を実施したという内容のまとめでした。

現在はインフラチームでペア作業でタスクを進めることを試していますが、さらに次のステップとしてモブオペレーションやモブ設計などタスクをモブで進めるのも良さそうだなと感じました。