カテゴリー: ガジェット Page 32 of 85

キーホルダーとディスプレイ。

10日ほど前に遡ります。

アズールレーン×ライザのアトリエ2/3のコラボ商品が届きました。アクリルキーホルダーのセット。

これを飾るのに丁度いいものが百均に売られていました。ディスプレイケース仕切り付き(4マス)。

このように、収納と保管とディスプレイを全部こなしてくれるのがありがたい限りです。

そして、一つは手帳ケースのファスナーに飾りました。

ケースのデザインとも合うのがナイスです。

ChatGPTが各シェルスクリプト。(motdに一文をランダムで表示)

「ちょっとしたことを試したいけど方法が分からない」時のChatGPTは本当に頼りになります。

やりたいこと

こちらの発展系。サーバログイン時にランダムに一文を書いてほしいと思い立ちました。

スクリプト

管理者権限で以下のファイルを作成します。

/etc/update-motd.d/20-quote

#!/bin/bash

# 20-quote - MOTDにquote.txtからランダムな引用を表示するスクリプト

# quote.txtファイルのパス
QUOTE_FILE="/hoge/quote.txt"

# quote.txtファイルの行数を取得する
NUM_LINES=$(wc -l < "${QUOTE_FILE}")

# ランダムな行番号を生成する
RANDOM_LINE=$((1 + RANDOM % NUM_LINES))

# ランダムな行番号に該当する引用を表示する
sed "${RANDOM_LINE}q;d" "${QUOTE_FILE}"

作成後、実行権を付与。

sudo chmod +x /etc/update-motd.d/20-quote

引用文も書いてもらいました。

quote.txt

A penny saved is a penny earned / 節約した1ペニーは1ペニー稼いだのと同じ
Actions speak louder than words / 言葉より行動
All good things come to those who wait / 望むことは遠くにあり、我慢して待てば必ず手に入る
An apple a day keeps the doctor away / 1日にリンゴを食べると医者は遠ざかる
Don't count your chickens before they hatch / 卵を孵す前に小鳥を数えるな
Every cloud has a silver lining / 苦しいことの中にも良いことがある
Fortune favors the brave / 運は勇気ある者に付きもの
Honesty is the best policy / 誠実は最高の策略
If at first you don't succeed, try, try again / 失敗してもくじけずに何度でも挑戦せよ
Necessity is the mother of invention / 必要は発明の母
No pain, no gain / 苦労なくして報酬なし
Penny wise, pound foolish / 1を惜しんで100失う (木を見て森を見ず)
Practice makes perfect / 習うより慣れろ
Rome wasn't built in a day / ローマは一日にして成らず
The early bird catches the worm / 早起きは三文の徳
The grass is always greener on the other side of the fence / 隣の芝は青く見える
The squeaky wheel gets the grease / うるさい方が注目を集める
There's no such thing as a free lunch / 無料の昼食は存在しない
Time is money / 時間は金
Where there's smoke, there's fire / 煙のあるところには火がある

ChatGptが提供したイギリスのことわざ

これで、SSHログイン時に上記の文章がランダムで表示されるようになりました。

Kindle Paperwhite シグニチャーエディション(第11世代)購入。

思い立ったことがあったので購入しました。

Kindle Paperwhite シグニチャーエディション(第11世代)

これを買うに至った理由は

  • 小説や技術書など文字主体の本を読む機会が増えた。
  • それによってiPadminiよりも軽い電子書籍端末が欲しかった。

の2つ。ここに

  • 自分の推し色である緑系の本体とカバーがあった
  • 半年に及ぶプロジェクトが終わりを告げ、財布の紐が緩んでいた

が加わった形です。

開封しての感想

利点

より広くなった画面

第9だか第10世代だかのPaperwhite端末と比べて明らかに広い画面。(そして狭いベゼル)このため、読書への没入感が増えました。

思った以上に便利だったワイヤレス充電スタンド

最初は「10日ほど保つんだからケーブル挿すだけで充分」思っていましたが、この手の読書端末は寝るときに用いるので手元を確認せずともスタンドに置くだけで充電が始まるのは快適です。

ページめくりの速さ

これは正直予想外でした。割と初期のPaperwhtieから追いかけていたので、ここまで速度が改善するとは思いませんでした。漫画のページめくりは驚愕で、iPad miniと遜色ない速さを見せています。

欠点

タッチ画面の反応が鈍いことがある

ページの特定の箇所をタッチすることで表示されるメニューが表示されなかったり、他の機能が現れたりと不安定なときが見受けられました。タイミング、再現性などはこれから測っていきます。

総じて

元々の「純粋に読書だけを楽しめる」専用端末に

  • 広さ
  • 速さ
  • 利便性

が追加されました。後はこれを使って「どれだけの本を読むか」が課題になっていきます。

机周りの整理と簡易キャラホメスペース」。

休日、机周りの環境を整理しました。

ボードゲーム用のプレイマットを引いて見た目をリニューアル。

ポインティングデバイスがトラックボールのため、この素材でも十分実用に足りると判断。

また、このトラックボールは一度おいてしまえば動くことがありません。なので、周囲に様々なものをおけるメリットがあります。

そこで、ボードゲーム用のカードスタンドを用いて『キャラホメ』のスペースを新設。

機能性を維持したままこういう場ができたので満足です。

ChatGPTによるシェルスクリプト。(外為レートの表示と記録)

概要

定額制のLightsailを利用しているとはいえ、ドルベースで請求されるので相場観は気になる数字です。

そこで、ドル円の相場をスクリプトベースで取得することにしました。

参考:

【Linux】ドル円為替情報をwgetコマンドで取得する
https://www.mtioutput.com/entry/fx-info-wget

前提

  • Ubuntu 20.04で動作を確認しています。
  • 参考先にも書いてありますが、不正アクセスと間違われないよう実行頻度などはお気をつけください。
  • また、相場観を知るためだけにこのスクリプトを作成したことを前もって強調いたします。

ChatGPTへのお伺い

以下のように訊いてみました。

以下を満たすシェルスクリプトを書いてください。

1. 以下のコマンドを実行する
wget -O - -U "" http://www.gaitameonline.com/rateaj/getrate 2> /dev/null

2. コマンド実行時の日時を取得する。

3.USDJPYを含む以下を抽出する。(以下は1のコマンド抜粋)
{"high":"132.86","open":"132.86","bid":"132.54","currencyPairCode":"USDJPY","ask":"132.55","low":"132.49"}

4. 以下のように改行して並び替える。この時、:以外の記号を取り除く。
currencyPairCode:USDJPY
open:132.86
high:132.86
bid:132.68
ask:132.69
low:132.50

4. 次のように言葉を変えて表示する。
yyyy/mm/dd hh:mm 現在のドル円相場は以下の通りです。

open:132.86
high:132.86
bid:132.68
ask:132.69
low:132.50

作成結果

そこからいくつかの質疑応答や機能追加、そして手動による修正をを繰り返しました。

最終的にできあがったのがこちらです。

  • fx_info.sh
#!/bin/bash

# fx_info.shは、外国為替相場の情報を取得し、現在のレートを表示するシェルスクリプトです。
# USD/JPYをデフォルトの通貨ペアとして使用しますが、他の通貨ペアにも簡単に変更できます。
# また、同じディレクトリに相場.csvを作成。相場の履歴を追うことも可能です。
# 参照するURLは外為オンラインの情報です。

#### 変数定義ここから #####
# 通貨ペアを変数化する。
# USDJPY=ドル円 
# EURUSD=ユーロドル
# など、以下のURLに沿ったものを指定
currency_pair="USDJPY"
#### 変数定義ここまで ####

# 1. コマンドを実行してデータを取得し、標準エラー出力を/dev/nullにリダイレクトする。
data=$(wget -O - -U "" http://www.gaitameonline.com/rateaj/getrate 2> /dev/null)

# 2. 現在日時を取得する。
date=$(date '+%Y/%m/%d')
time=$(date '+%H:%M')

# 3. 指定された通貨ペアの情報を取得する。
currency_data=$(echo "$data" | grep -o '{"high":"[0-9]*\.[0-9]*","open":"[0-9]*\.[0-9]*","bid":"[0-9]*\.[0-9]*","currencyPairCode":"'$currency_pair'","ask":"[0-9]*\.[0-9]*","low":"[0-9]*\.[0-9]*"}')

# 4. 必要な情報を取り出し、並び替える。
currencyPairCode=$(echo "$currency_data" | grep -o 'currencyPairCode":"'$currency_pair'"' | cut -d ':' -f 2 | tr -d '"')
open=$(echo "$currency_data" | grep -o 'open":"[0-9]*\.[0-9]*"' | cut -d ':' -f 2 | tr -d '"')
high=$(echo "$currency_data" | grep -o 'high":"[0-9]*\.[0-9]*"' | cut -d ':' -f 2 | tr -d '"')
bid=$(echo "$currency_data" | grep -o 'bid":"[0-9]*\.[0-9]*"' | cut -d ':' -f 2 | tr -d '"')
ask=$(echo "$currency_data" | grep -o 'ask":"[0-9]*\.[0-9]*"' | cut -d ':' -f 2 | tr -d '"')
low=$(echo "$currency_data" | grep -o 'low":"[0-9]*\.[0-9]*"' | cut -d ':' -f 2 | tr -d '"')

# 5. 結果を表示する。
echo "$date $time 現在の${currencyPairCode}相場は以下の通りです。"
echo "始値:$open"
echo "高値:$high"
echo "売値:$bid"
echo "買値:$ask"
echo "安値:$low"

## 以下はファイルに書き込むための処理。

# ファイル名を${currencyPairCode}.csvとする。
filename="${currencyPairCode}.csv"

# ファイルが存在しない場合は、ファイルにヘッダーを書き込む。
if [ ! -e "$filename" ]; then
  echo "実行日,実行時刻,相場,始値,高値,売値,買値,安値" >> "$filename"
fi

# ファイルにデータを追記する。
echo "${date},${time},${currencyPairCode},${open},${high},${bid},${ask},${low}" >> "$filename"

スクリプト作成後の処理

chmod +x fx_info.sh

スクリプト実行結果

  • スクリプト実行
./fx_info.sh
  • 実行結果
2023/03/30 13:41 現在のUSDJPY相場は以下の通りです。
始値:132.86
高値:132.86
売値:132.56
買値:132.57
安値:132.45
  • 作成されたファイル閲覧
cat USDJPY.csv
  • ファイル内容
実行日,実行時刻,相場,始値,高値,売値,買値,安値
2023/03/30,13:29,USDJPY,132.86,132.86,132.60,132.61,132.45
2023/03/30,13:31,USDJPY,132.86,132.86,132.60,132.61,132.45
2023/03/30,13:41,USDJPY,132.86,132.86,132.56,132.57,132.45

これで、ブラウザを開くことなく情報を表示することができるようになりました。

キーボードフットスイッチを使ってみての感想。

諸条件が揃えば、役に立つツールであると判明です。

キーの最初の割当

最初は左から

  1. Ctrl
  2. Ctrl + Alt + Delet
  3. Win + L
  4. Enter

という順番でやっていました。ですが、以下の問題が判明。

最初の割当の問題点

Ctrl + Alt + Deletは思ったよりも使わない。

ロック画面から戻るときはEnterで十分でした。

踏み間違いが度々発生。

特にEnterを実行したらWindowsロックが走ることもしばしば。

そこで、運用を替えます。

キー割り当ての変更

左から

  1. Windows + L
  2. Shift
  3. Ctrl
  4. Enter

に変更し、更に、オートマ車を運転するときのように「左足は固定して右足だけで操作する」に変更です。

変更後の改善点

踏み間違いの低減

ロック時のキーを左端にすることで踏み間違いが減りました。また、固定した左足があるので、一番踏みにくいペダルになります。

変更後の感想

足一本でスクリーンロックが便利すぎる。

マグカップを持っての中座が多いので、手を使わずに画面をロックできるアドバンテージは大きいです。

小指の負担軽減。

Shift も Ctrlも小指で操作することが多いので、これを変わりに足で操作。慣れてしまえば指の負担がものすごく減りました。

まとめ

条件

  • キーの適切な配置
  • 運用方法
  • 運用に必要な広さ

が揃えば、このデバイスは入力効率がとても高まると判明。もう1つの購入も検討に入ります。

キーボードフットスイッチ最初の感想。

新たな入力デバイスに手を出しました。

エディクン フットスイッチ

こちらの分割キーボードを購入したところから以下の商品を購入です。

購入に至ったきっかけ

エディタをviからnanoに変えたことが大きいです。

こちらはCtrlを多用するため、小指の負担を少しでも減らそうと言う試みでした。

また、業務中に

  • Ctrl
  • Ctrl + Alt + Delete
  • Windows + L
  • Enter

の入力機会は特に多いので、これらを自動化してしまおうというのもあります。

設定

設定はとても簡単に行えました。

このように、ペダルに割り当てるアクションを割り当てるだけです。

設定後の感想

思った以上に便利ではありますが、

  • 存在を忘れる(ついついキーボード上のEnterを押してしまう)
  • 脚の操作が存外難しい

というところ。もう少し体が慣れてから改めて感想を書こうと思います。

ChatGPTによるシェルスクリプト。(続:Ubuntuサーバのパッケージ全体の更新とサービス再起動の有無) 

こちらのスクリプトを修正しました。(正確にはChatGPTに修正してもらいました)

修正版スクリプト

#!/bin/bash

# インストールされているパッケージの一覧を取得して別ファイルに出力します。
now=$(date +%Y%m%d)
dpkg-query -W > installed_packages_$now.txt

# aptitude updateを行います。
aptitude update

# updateの結果:
if aptitude search '~U' | grep -q '^i'; then
    # 対象パッケージ,変更前バージョン,変更後のバージョン を記入した日付付きのファイルを作成。
    now=$(date +%Y%m%d)
    upgraded_packages=$(mktemp)

    # パッケージのキャッシュをクリアした上でパッケージアップグレードを実施。
    aptitude clean
    aptitude -y full-upgrade | tee $upgraded_packages >/dev/null

    # パッケージ一覧からの差分を別ファイルで作成。(実行日の日付を付与)
    new_packages=$(mktemp)
    dpkg-query -W > $new_packages
    diff -u installed_packages_$now.txt $new_packages > package_diff_$now.txt

   # 新しいパッケージ名を取得
   DIFF_FILE="package_diff_$now.txt"
   NEW_PACKAGES=$(grep -E "^\+[^+]" $DIFF_FILE | awk '{print $1}' | cut -c 2-)

   # 変更されたパッケージの数と、新しいバージョンのパッケージ名のリストを表示
   UPDATED_PACKAGES=$(echo "$NEW_PACKAGES" | wc -l)
   echo "$UPDATED_PACKAGES 件のパッケージに変更がありました。以下のパッケージが更新されました:"
   echo "$NEW_PACKAGES"

    # checkrestartを実行して結果を取得
    now=$(date +%Y%m%d)
    checkrestart_output=$(checkrestart)

    # サービスを再起動する必要のあるプロセスを抽出してファイルに出力
    restart_services=$(echo "$checkrestart_output" | awk '/^(These are the systemd services|These are the initd scripts)/{flag=1;next}/^$/{flag=0}flag' | awk '{print $NF}' | sort -u)

    if [[ -n "$restart_services" ]]; then
        # ファイル名に日付を追加
        now=$(date +%Y%m%d)
        filename="restart_services_$now.txt"

        echo "以下のサービスを再起動してください:" >> "$filename"
        echo "$checkrestart_output" | awk '/^(These are the systemd services|These are the initd scripts)/{flag=1;next}/^$/{flag=0}flag' | grep -v "restart$" >> "$filename"
        echo "$checkrestart_output" | awk '/^(These are the systemd services|These are the initd scripts)/{flag=1;next}/^$/{flag=0}flag' | grep "restart$" >> "$filename"

        echo "以下のサービスを再起動してください:"
        echo "$checkrestart_output" | awk '/^(These are the systemd services|These are the initd scripts)/{flag=1;next}/^$/{flag=0}flag' | grep -v "restart$"
        echo "$checkrestart_output" | awk '/^(These are the systemd services|These are the initd scripts)/{flag=1;next}/^$/{flag=0}flag' | grep "restart$"


    else
        echo "再起動するサービスはありません"
    fi
fi

差分

+   # 新しいパッケージ名を取得
+   DIFF_FILE="package_diff_$now.txt"
+   NEW_PACKAGES=$(grep -E "^\+[^+]" $DIFF_FILE | awk '{print $1}' | cut -c 2-)
+
+   # 変更されたパッケージの数と、新しいバージョンのパッケージ名のリストを表示
+   UPDATED_PACKAGES=$(echo "$NEW_PACKAGES" | wc -l)
+   echo "$UPDATED_PACKAGES 件のパッケージに変更がありました。以下のパッケージが更新されました:"
+   echo "$NEW_PACKAGES"

これによって、アップグレードするパッケージを明確化させました。

次の展望

「どこまで自動化できるか」が課題となります。パッケージによっては設定ファイルを残すかどうかのウィザードが表示されるので、それに対する自動実行までいけたらと思います。

ChatGPTによるシェルスクリプト。(Ubuntuサーバのパッケージ全体の更新とサービス再起動の有無)

脆弱性などに対応するため、Linuxサーバのパッケージを最新に保つことは重要です。

ですが、どこかでトラブルが発生した際に「どのパッケージを更新してから異常が発生したか」の履歴を追うことも必要。

そこで、以下のシェルスクリプトをChatGPTに尋ねながら作ってみました。

動作確認環境

  • Ubuntu 20.04で動作を確認しました。
  • 筆者の好みの関係上、パッケージ管理はaptitudeを用いています。
  • また、サービス再起動の有無を確認するため、checkrestartをインストールします。(debian-goodiesをインストール)

要件

ChatGPTに要求した要件は以下の通りです。

  • パッケージ一覧のリストを作成する。
  • パッケージ全体のupdateを行う。
  • そのupdateで差異があった場合はファイルに出力して更新を行う。
  • サービス再起動があったらそれを標準出力とファイルに出力する。

かなりの試行を重ねて以下のスクリプトができあがりました。

スクリプト内容

  • update-packages.sh
#!/bin/bash

# インストールされているパッケージの一覧を取得して別ファイルに出力します。
now=$(date +%Y%m%d)
dpkg-query -W > installed_packages_$now.txt

# aptitude updateを行います。
aptitude update

# updateの結果:
if aptitude search '~U' | grep -q '^i'; then
    # 対象パッケージ,変更前バージョン,変更後のバージョン を記入した日付付きのファイルを作成。
    now=$(date +%Y%m%d)
    upgraded_packages=$(mktemp)

    # パッケージのキャッシュをクリアした上でパッケージアップグレードを実施。
    aptitude clean
    aptitude -y full-upgrade | tee $upgraded_packages >/dev/null

    # パッケージ一覧からの差分を別ファイルで作成。(実行日の日付を付与)
    new_packages=$(mktemp)
    dpkg-query -W > $new_packages
    diff -u installed_packages_$now.txt $new_packages > package_diff_$now.txt

    # checkrestartを実行して結果を取得
    now=$(date +%Y%m%d)
    checkrestart_output=$(checkrestart)

    # サービスを再起動する必要のあるプロセスを抽出してファイルに出力
    restart_services=$(echo "$checkrestart_output" | awk '/^(These are the systemd services|These are the initd scripts)/{flag=1;next}/^$/{flag=0}flag' | awk '{print $NF}' | sort -u)

    if [[ -n "$restart_services" ]]; then
        # ファイル名に日付を追加
        now=$(date +%Y%m%d)
        filename="restart_services_$now.txt"

        echo "以下のサービスを再起動してください:" >> "$filename"
        echo "$checkrestart_output" | awk '/^(These are the systemd services|These are the initd scripts)/{flag=1;next}/^$/{flag=0}flag' | grep -v "restart$" >> "$filename"
        echo "$checkrestart_output" | awk '/^(These are the systemd services|These are the initd scripts)/{flag=1;next}/^$/{flag=0}flag' | grep "restart$" >> "$filename"

        echo "以下のサービスを再起動してください:"
        echo "$checkrestart_output" | awk '/^(These are the systemd services|These are the initd scripts)/{flag=1;next}/^$/{flag=0}flag' | grep -v "restart$"
        echo "$checkrestart_output" | awk '/^(These are the systemd services|These are the initd scripts)/{flag=1;next}/^$/{flag=0}flag' | grep "restart$"


    else
        echo "再起動するサービスはありません"
    fi
fi

記入後、以下を実施します。

sudo chown root:root update-packages.sh
# root権限で実施するため

sudo chmod 744 update-packages.sh

確認結果

sudo bash update-packages.sh

を実行後、

  • 現在インストールされているパッケージのバージョンを別ファイルに出力
  • パッケージのアップデート
  • その際に差分があればアップグレード
  • サービス再起動の有無を判断し、あればそのサービスを表示

という結果が出ました。

今後の展望

  • 可読性を高くする
  • 自動実行を行う
  • ログ化してローテーションを行う

等は実施したいです。

多目的スコアシート。(電卓付き電子メモパッド)

百均で見つけ思わず購入です。

700円商品と結構高額。ですが、

  • ソーラー電卓
  • 電子メモ

が一緒になったもの。

広げたときのサイズはiPad miniより少し小さいかなという程度です。

「ボードゲームのスコア計算と記録を一緒にやってくれる」と思いました。早速、この使い勝手を確かめるために『アグリコラ』を広げます。

思った通り、右側のメモの所に得点源をかき、左の電卓で計算。最終スコアを記入する余白もありました。

また、iPadと比べて断然安価なのでボードゲームカフェやオープン会で広げても大丈夫ですし、各人がスマートフォンの電卓を立ち上げる必要も減ります。

何のかんので便利なので職場用にも持っておきたいやつでした。

Page 32 of 85

Powered by WordPress & Theme by Anders Norén