ブログ

読んで思い出す。忘れるために書く

Amazon Q と対話した

Amazon Q ってなに?

AWS... Amazon が提供している AI アシスタントのこと

分類としては「生成AI」に当たるらしい

英語 or 日本語?

初期状態だと英語を話していた。

英語で「日本語を話せますか」と訊ねたところ、「(英語のほうが意思疎通に不便が無いけど) 話せますよ」といった旨、返答してくれて日本語に切り替わった

やったこと (おねがいしたこと)

お願いしたのはつぎのひとことだけ。

「サンプルの Rails アプリケーションを作成して、Lightsail にデプロイしてください」

とくに成果物とかはここには載せない。

けど、最初から最後まで、「このコマンドを実行したいです、いいですか?」に「はい、だいじょうぶですよ (の意の [y])」と答えるだけだった

セッションを跨いだ作業

作業を任せてる身ではあれど、ニンゲンなので、途中で疲れてきて、作業を中断したくなる

そんなときは次の一言を添える

「これまでの作業と、これからの作業を ~/blog_app/Amazon_Q_tasks.md にまとめてください」

再開するときは察しの通り

~/blog_app/Amazon_Q_tasks.md を読み取って、残りの作業を再開してください。コマンド実行は許可します。」

任せっきりじゃできない部分

「コマンドを実行したいです」のとき、明示的に CLI エディタを開こうとしているとか、実行結果が暗にそうなっている場合には、結果的に「許可」できなかった。

この場合は次の文言を用いて自分で作業する

「このコマンドはあなたには実行できないので、わたしにやらせてください。どのような内容を編集すれば良いですか?」

(依頼した) 作業を終えて

セッションを跨いだ作業では毎回なにをしたのかまとめてくれたし、作業を終えたときも、「次はこうしたらセキュリティ強化ができていいかもですね」のような提案もしてくれた

作業後の Amazon Q からの提案

蛇足・謎の正解リカバリ

あと、Rails アプリケーションをデプロイする過程で make が走るのだが、そこでサーバの貧弱なスペックだとメモリ不足で止まってしまって、SSH 接続をこちらで中断することになった。

その旨伝えたら、「スワップ領域の設定が必要かもしれません」とエスパーしてくれた

それ知りたい!

なにか自分が知らないこと、知りたいことがあればファイルに保存するようにお願いしてみるといい

「後学のため、swap 領域の追加方法について、 ~/blog_app/doc/add_swap_area.md にまとめておいてほしいです。」

Links

Unison でソースコードを同期する

Unison で双方向同期が出来たのが便利だったのでメモ

※使い方の記録はないので、外部リンク参照のこと

前提例:

  • 開発環境として VirtualBoxCentOS 7 系を使っている
  • 環境が旧すぎるので、じぶんがつかっている「いつもの環境」に近づけるのが困難、ゲスト OS 側では エディタ環境などの最新版が使えない
  • ホスト OS が Windows なので、WSL (Ubuntu) が使える
  • OCaml のバージョンが ホスト OS, ゲスト OS で異なる

解決

Unison を使う

同期

VirtualBox 側で git clone してきたプロジェクトを、Unison を使って、WSL (Ubuntu) 側に同期する

(同時編集しない前提なら、 .git ディレクトリも同期できる...!!)

通常使用

エディタは WSL (Ubuntu) 側で「いつもの環境」を構築しソースコードを編集、Unison で VirtualBox 側に転送する

Unison をインストールする際に、ホスト/ゲスト OS 双方の OCaml のバージョンを合せた記憶があるので、必要になったら opam を使うといいかもしれない

環境

例に挙げたような旧い環境と共存している場合、そもそも Unison のインストールはソースコードからビルド・インストールした方がいい場合がある

インストール方法は 公式リポジトリ内に書かれているので、それを参考にされたい

解説?

そのほかの解説は外部リンクに譲る

Links

プラグイン coc.nvim を導入した

プラグインマネージャは dein.vim を使っているので、そこだけインストール方法がちがう

プラグインを羅列している .vimrc のブロックに 1行足す

  call dein#add('neoclide/coc.nvim', {'rev': 'release'})
# 依存ライブラリのインストール
bundle install solargraph

Vim を起動したあと、機能有効化のため拡張機能をいくつかインストールする

(Ruby なら solargraph だけで OK)

:CocInstall coc-solargraph
:CocInstall coc-json
:CocInstall coc-sql
:CocInstall coc-css
:CocInstall coc-eslint
:CocInstall coc-toml
:CocInstall coc-tsserver

たとえばクラスのインスタンス化をしたいときなど、必要な引数がすぐに判るようになった!

Links

watch コマンドで設定したコマンドを自動で定期実行する

前提

下記 いずれかを満たしている環境の話 :

  1. ターミナルの画面を2画面用意している
  2. tmux などの画面分割で2画面同時操作できる
  3. VSCode などの IDE で、「エディタ画面」「ターミナル画面」2画面同時操作できる

やりたいこと・解決したいこと

  1. プログラミング・デバッグだけに集中したいので、いちいち手作業で Ruby ファイルを実行したくない
  2. 標準入力を伴う問題を解きたいので、入力テスト用ファイルを用いたい
  3. エラーがあればすぐに確認したい

準備と解決

準備

標準入力テスト用ファイルを用意する

input.txt :

1 3 4 5

最初の一歩として、標準入力を受け取る Ruby コードを書く

main.rb :

input = gets.chomp
puts input

解決

watch コマンドを使う

watch コマンドを使うことで、指定したコマンドを自動的に定期実行できる

watch -c -n 2 "ruby main.rb < input.txt"

(意味: 毎回画面表示をクリアして、2秒ごとに、渡されたコマンドを実行する)


おまけ

徐々に Ruby のコードを書いて、完成像に近づける

map で to_i 適用したい

input = gets.chomp.map(&:to_i)
# => undefined method `map` for an instance of String (NoMethodError)

puts input

split 忘れてた

input = gets.chomp.split.map(&:to_i)
puts input
# => 3
#    4
#    5

合計値を出したい (完成)

input = gets.chomp.split.map(&:to_i).sum
puts input # => 12