« ^ »

今日やった事 - 20240817

所要時間: 約 5分

いつも一緒にゲームしている仲間達が、集えるような環境を作りたいと考えている。Discordのサーバーも準備したし、認証付きのWebサイトも用意しているし、メタバースのようなバーチャル空間も用意した。それぞれ歩みは遅いけれど、少しずつ進化している。いろんな事があったけれど、バーチャル空間にいて楽しいと思える環境を作っていきたい。

  • 08:00 朝会
  • 10:00 音量変更のためのEmacs Lispを実装する id:37A1D24A-E95D-483C-B377-CC6195C414E6
  • 12:00 ソースコードの取得
  • [x] 12:30 コマンド補完の仕組みを調べる id:65FC01A7-9BFE-434B-8ED3-E69DA69B2123
  • 13:00 podmanをインストールする id:21238AB4-4F7A-4BBA-A7C6-165EAB70569A
  • 15:00 ライブラリアップデート影響調査 id:55A5C9B7-7B89-4823-904C-A433C9D729C8
  • Webサイト更新 id:48925AF9-6040-482F-9764-3D4FE56EBE92
  • agのインスール
  • Webサイト更新 id:F97A6D04-C2D8-412E-B4A9-7F72E14D272C
  • 配信環境改善 id:D3C45221-3A4A-4B0B-BEC4-688B96700DB6

    • ffmpegのインストール
    • soxのインストール
    • トークンを表示させず配信を開始/終了する

      • 開始 ffmpegの実行バッファを表示させないようにmake-processで開始する。
      • 終了 配信用ffmpegプロセスを終了するコマンドを作成する
  • 続.podmanをインストールする id:21238AB4-4F7A-4BBA-A7C6-165EAB70569A

音量変更のためのEmacs Lispを実装する

作業PCの移行をしているけれど、macOS Sonomaの音量変更ショートカットが以前のOSと異なるものになってしまっていた。しかしショートカットみたいな重要なものを、なぜ気軽に変更してしまうんだろう。作業環境を変えるたび、その都度微妙に操作感が変わるのは困る。言っていても仕方がないので、Emacsから設定するように変更する事にした。

macOS sonomaで音量変更をCLIで行いたい

macOS Sonomaでコマンドラインインターフェース(CLI)を使用して音量を変更する方法は、`osascript`を使う方法が一般的です。

以下に具体的な方法を示します。

  1. 現在の音量を確認する ```sh osascript -e "output volume of (get volume settings) " ```
  2. 音量を変更する 音量を0から100の範囲で設定します。例えば、音量を50%に設定する場合: ```sh osascript -e "set volume output volume 50" ```
  3. 音量をミュートにする ```sh osascript -e "set volume with output muted" ```
  4. ミュートを解除する ```sh osascript -e "set volume without output muted" ```

これらのコマンドをTerminal.appで実行することで、音量の変更が可能です。

AIの回答

なるほど。 osascript で音量の変更はできるようだ。そこで osascript を呼び出すような、簡単なEmacs Lispを書いた。

;;; macos-sound --- macOS Utility. -*- lexical-binding: t -*-

;; Copyright (C) 2024 TakesxiSximada

;; Author: TakesxiSximada <[email protected]>
;; Maintainer: TakesxiSximada <[email protected]>
;; Version: 3
;; Package-Version: 20240817.0000
;; Package-Requires: ((emacs "29.1"))
;; Date: 2024-08-17

;; This file is not part of GNU Emacs.

;;; License:

;; This program is free software: you can redistribute it and/or
;; modify it under the terms of the GNU Affero General Public License as
;; published by the Free Software Foundation, either version 3 of the
;; License, or (at your option) any later version.

;; This program is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
;; Affero General Public License for more details.

;; You should have received a copy of the GNU Affero General Public
;; License along with this program.  If not, see
;; <https://www.gnu.org/licenses/>.

;;; Code:
(defvar macos-sound-osascript-base-command-list
  '("/usr/bin/osascript" "-e"))

(defvar macos-sound-get-current-volume-level-buffer-name "*macOS Volume: status*")

(defun macos-sound-get-current-volume-level ()
  (with-current-buffer (get-buffer-create macos-sound-get-current-volume-level-buffer-name)
    (erase-buffer)
    (call-process
     "/usr/bin/osascript" nil (get-buffer macos-sound-get-current-volume-level-buffer-name) nil
     "-e" "output volume of (get volume settings)")
    (string-trim
     (buffer-substring-no-properties (point-min) (point-max)))))

(defun macos-sound-mute ()
  (interactive)
  (make-process
   :name "*macOS Volume*"
   :buffer "*macOS Volume*"
   :command `(,@macos-sound-osascript-base-command-list
	      ,(format "set volume with output muted"))))

(defun macos-sound-unmute ()
  (interactive)
  (make-process
   :name "*macOS Volume*"
   :buffer "*macOS Volume*"
   :command `(,@macos-sound-osascript-base-command-list
	      ,(format "set volume without output muted"))))

(defun macos-sound-change-volume (volume-level)
  (interactive (list (completing-read "Volume Level: " '("0" "10" "20" "30" "40" "50" "60"))))
  (make-process
   :name "*macOS Volume*"
   :buffer "*macOS Volume*"
   :command `(,@macos-sound-osascript-base-command-list
	      ,(format "set volume output volume %s" volume-level))))

(provide 'macos-sound)
;;; macos-sound.el ends here

YouTube LiveのためのEmacs Lispを改良する

コマンド補完の仕組みを調べる

  ME: bashなどでのコマンドの補完やサジェスト機能はどのように実現されているのか
------------------------------------------------
AI:
Bashなどのシェルでのコマンド補完やサジェスト機能は、いくつかの要素によって実現されています。以下にその基本的なメカニズムを説明します。

### 1. ユーザー入力のキャプチャ
ユーザーがターミナルにコマンドを入力する際、シェルはユーザーの入力をリアルタイムで監視しています。

### 2. インタープリタの補完機能
Bashなどのシェルには、補完機能が標準で組み込まれています。これらのシェルは一般的に「tab」キーを押すことで補完を試みます。

### 3. 補完のためのデータベース
シェルは補完の際に利用するデータベースを持っています。これには以下のようなデータが含まれます:
- コマンド名
- ファイル名とディレクトリ
- 環境変数
- エイリアス
- 関数名

### 4. `readline` ライブラリ
Bashなどのシェルは、GNU Readlineライブラリを使用して、コマンドライン編集と履歴管理を行います。Readlineには補完機能が組み込まれており、ユーザーの入力に応じて動的に補完を行います。

### 5. 補完スクリプト
多くのシェルは補完をカスタマイズするためのスクリプトや設定ファイルをサポートしています。Bashでは、通常 `/etc/bash_completion` や `~/.bash_completion`、`/etc/bash_completion.d/` などに補完スクリプトが配置されます。これらのスクリプトは、特定のコマンドに対してより詳細な補完ロジックを提供します。

#### 例: `git` コマンドの補完
多くのシステムでは、 `git` コマンドの補完スクリプトが `git-completion.bash` のような名前で提供されており、特定のサブコマンドやオプションに対する補完を行います。

### 6. 補完関数
カスタム補完関数を使用して、さらに高度な補完を実現することもできます。Bashでは、 `complete` コマンドを使用して特定のコマンドに対する補完関数を定義できます。

#### 例: 簡単な補完関数
```bash
_my_custom_completions() {
    local cur="${COMP_WORDS[COMP_CWORD]}"
    COMPREPLY=( $(compgen -W "option1 option2 option3" -- "$cur") )
}

complete -F _my_custom_completions mycommand
```

このスクリプトは、 `mycommand` を入力した際に `option1`, `option2`, `option3` を補完候補として提供します。

### まとめ
Bashなどのシェルにおける補完機能は、標準ライブラリ(例えばGNU Readline)、既存のデータベース、補完スクリプト、カスタム補完関数などの要素を組み合わせることで実現されています。これにより、ユーザーはターミナルでの操作をより効率的に行うことができます。
AIの回答

podmanをmacOSにインストールする

brew install podman
podman machine init
podman machine start

外出先で作業していたが、ここで1GBのVMのイメージのダウンロードが始まったため、ダウンロードを中断した。事務所に戻ってから、固定回線で再度行った。