カテゴリー: PC Page 1 of 55

出先での記録環境。

中古で購入したThinkPadがもたらしたのは、「出かけることのハードルの低さ」です。

常に行う

  • 日記
  • ブログの更新
  • 体調、入出金などライフログの記録

が、自宅で行うことなく可能になったからです。

喫茶店で食事を取りながらの入出金記録を行い(この食事代も記録しながら)

また、出先に椅子とテーブルがあると分かっていれば、このように、アナログな記録も同時に実施することができます。

記録するための道具がそろっていれば、記録する環境は問わない(というか状況に合わせて選べる)

というのが分かったのが、このThinkPadでの収穫です。

Ubuntuでhistoryの履歴を追いやすくするシェルスクリプト並びにコマンド化。

概要

設定変更時、過去のコマンド履歴を確認するため

history | grep command

として過去の履歴を確認します。これをシェルスクリプトの力で解決します。(スクリプト作成にはGemini pro 2.5を利用)

スクリプト

  • histgrep.sh
#!/bin/bash

# スクリプトに引数が渡されたかどうかで処理を分岐
if [ "$#" -gt 0 ]; then
  # 引数が存在する場合、その値を検索文字列として使用
  SEARCH_TERM="$1"
else
  # 引数がない場合、対話式でユーザーに入力を促す
  read -p "探したいコマンドを入力してください: " SEARCH_TERM
fi

# 検索文字列が空の場合はエラーメッセージを出して終了
if [ -z "${SEARCH_TERM}" ]; then
  echo "検索文字列が入力されていません。"
  exit 1
fi

# historyコマンドの代わりに、履歴ファイルを検索する
HISTFILE_PATH="${HISTFILE:-$HOME/.bash_history}"

echo "実行履歴から「${SEARCH_TERM}」を含むコマンドは以下の通りです。"
grep "${SEARCH_TERM}" "${HISTFILE_PATH}"

これを保存して、

chmod +x histgrep.sh

で実行権限をつけます。

コマンド実行例

引数無しの対話型

./histgrep.sh
探したいコマンドを入力してください: bundle
実行履歴から「bundle」を含むコマンドは以下の通りです。
sudo -u www-data bundle install --without development test --path vendor/bundle
sudo -u www-data bundle install
sudo -u www-data bundle install --without development test --path vendor/bundle
sudo -u www-data bundle exec gem install rake
sudo -u www-data bundle install --without development test --path vendor/bundle
sudo -u www-data bundle install --without development test --path vendor/bundle
sudo bundle install

と、探したい文字列を含む履歴をhistory(正確には履歴ファイル)から参照します。

引数型

./histgrep.sh configtest
実行履歴から「configtest」を含むコマンドは以下の通りです。
sudo apache2ctl configtest

このように、探したい文字列を引数とすることで、そのコマンドを探せます。

コマンド化

これをコマンド化します。

sudo ln -sf /path/to/script/directory/histgrep.sh /usr/local/bin/histgrep

/path/to/script/directory/histgrep.shはフルパスで、スクリプトがある場所を指定します。

which histgrep

で、/usr/local/bin/histgrepを確認。

後は、作業中でも

histgrep tar

などとすれば、過去に実行したコマンドの履歴を容易に参照することができます。

トラックポイント付きのキーボードをデスクトップに導入。

今月購入したThinkPadキーボードが非常に自分好みだったことと、「トラックポイントをデスクトップPCでも使いたい」ことから買ってみました。

有線 ThinkPad トラックポイント・キーボード - 日本語 0B47208

  • ThinkPadロゴ付き
  • 有線

英語配列キーボードでなかったのは、使っているノートに合わせての配慮です。

ノートPCと比べるとこの通り。x13の方が心持ち狭く、トラックパッドもありません。

とはいえ、キーストロークは自分好みだったのは分かっているため、安心して使うことができそうです。

Redmine5.1にadditionalsをインストール

以前も書いていたadditonalsプラグインのインストール、Redmine5.1版です。

このプラグインの最新版はRedmine6.0のみ対応しています。そのため、ややバージョンの落ちるRedmine5.1で動かすには少し手間があります。

概要

Redmineにかなり強力なマクロを付与するプラグイン:additionalsをインストールします。

また、このプラグインは「additonal_tags」プラグインでも必要です。

プラグイン名

注意

2025年にリリースされているプラグインはRedmine 5.xをサポートしていないため、動くバージョン(タグ)をダウンロードしてのインストールです。

動作を確認した環境

  • Ruby 3.1
  • Redmine 5.1
  • Apache 2.4

さっくりとした手順

  1. SSHログイン後、作業ディレクトリに移動
  2. wgetでRedmine5.1に即したパッケージをダウンロード
  3. パッケージの配置
  4. 新規ジェムをインストール
  5. DBマイグレーション
  6. Webサービス再起動

作業用ディレクトリに移動します。

cd /hoge

任意のディレクトリに移動します

Redmine5,1に即したバージョンをダウンロードして展開します。

  • ファイル入手
wget https://github.com/AlphaNodes/additionals/archive/refs/tags/3.4.0.zip
  • zipファイルの所有者変更
sudo chown www-data:www-data 3.4.0.zip

apache / nginxの実行ユーザに所有者を合わせます

  • 解凍
sudo -u www-data unzip 3.4.0.zip

Redmineディレクトリにプログラムを配置します。

  • ファイル配置
sudo -u www-data mv additionals-3.4.0 /path/to/redmine/root/directory/plugins/additionals

このとき、リネームも行います。(-3.4.0を外す)

自分の環境に合わせます。(筆者環境/home/www-data/redmine/plugins/)

Redmineのルートディレクトリに移動します。

cd /path/to/redmine/root/directory && pwd

自分の環境に合わせます。(筆者環境/home/www-data/redmine)

Gemをインストールします。

sudo -u www-data bundle install

DBのマイグレーションを行います

sudo -u www-data bundle exec rake redmine:plugins:migrate RAILS_ENV=production

Webサービスを再起動します。

sudo systemctl restart apache2

動作確認

  1. Redmineに管理者アカウントでログインします。
  2. 管理に「Additionals」が加わっていればインストールされています。

公開用Redmineの整備。

別サイトとして運営している

(上記マルチドメインのため、どちらのサイトでも同じ内容です)

こちら、『ライザのアトリエ トリロジーDX』のリリースにより整備する必要が出てきました。

プロジェクトの追加とキャッチ画像の追加

プロジェクト - クーケン島観光ガイド

それぞれにBing Image Creatorで生成したアイコンを指定。

更に、今まで作っていなかったプロジェクトとして

概要 - 02_arライザのアトリエ1 - クーケン島観光ガイド

『ライザのアトリエ』を追加です。DX版に伴い、もう一度、最初からやっていき言語化していきたいなと思った次第です。

ただ、それまでの間に今止まっている

  • 『ユミアのアトリエ』のクエストなどの整理
  • 『ライザのアトリエ2』陽炎の島の装備の解説

など、やることは多いです。

モバイルバッテリー・流用。

中古で購入したThinkPad。

状態がよいとはいえ、5年も前の機体なのでバッテリーの損耗はどうしても発生します。

現状、稼働時間に不満はありませんが、外出時のバッテリー切れに対応できるものはということで

MSI Claw用のモバイルバッテリー導入。 – Manualmaton's Laboratory

こちらをそのまま使うことにしました。AnkerのPowerbank。

ノートPCと比してもその存在感は相当なもの。

昨今のPCモデルらしく、PD給電に対応しているのが幸いしていました。

無事にUSB-Cケーブルと接続して、

充電されていることを確認です。これなら、いざというときにも使えると判明したので助かりました。

出先での記録環境・確立。

先だって購入したThinkPad。

これを様々な場で使ってみます。

しかし、その前にアナログ環境の整備です。

まず、確固たるアナログ環境を整備。(オリジナルは林檎を収められますが、この暑さや湿気などで手が広がっているのが残念ですが、代わりに、大きな檸檬を持たせられるようになっています。

そして、出先ではThinkPad X13を使います。

訪れた場所は葛西臨海水族園。

やや天気が落ち着いた中での作業。屋外でも液晶は明るいまま。ちょっとした入力のみならず、本格的なアイディア出しにも威力を発揮です。

それ以上に、ここでの楽しみが食事。特にフィッシュカクテルのジャガイモはとても美味しく、パスタのトマトソースとの相性も抜群。

そして、記録を進めつつ魚も撮影。

こちら、どこでも記録ができるようになったことで、お気に入りの場所を「カフェ」のような使い方ができるようになっています。

Redmine_View_Customizeでチケットのステータスにラジオボタンを追加する

やりたいこと

Redmineのステータス一覧のドロップダウンリストにラジオボタンを追加し、ステータスの遷移を行いやすくします。

前提

  • Redmine View Customize がインストールされていること。
  • Redmine 5.1で動作を確認しています。

手順

画面移動

  1. Redmineに管理者権限でログインします。
  2. 管理>表示のカスタマイズに移動します。

カスタマイズ作成:JavaScript

表示のカスタマイズに移動後、「新しい表示のカスタマイズ」をクリックします。

以下の通りに入力します。

  • パスのパターン
  • /issues/[0-9]+
  • プロジェクトのパターン
  • 空白
  • 挿入位置
  • 全ページのヘッダ
  • 種別
  • JavaScript

コード

$(function() {
  const $select = $('#issue_status_id');
  if ($select.length === 0) return;

  const currentVal = $select.val();

  // ラジオボタンを入れるコンテナ
  const $radioContainer = $('<div class="status-radio-container"></div>');

  $select.find('option').each(function() {
    const val = $(this).val();
    const label = $(this).text();

    if (!val) return; // 空value(プレースホルダなど)はスキップ

    const id = 'status_radio_' + val;

    const $radio = $('<input type="radio">').attr({
      id,
      name: 'issue_status_radio',
      value: val
    });

    if (val === currentVal) {
      $radio.prop('checked', true);
    }

    const $label = $('<label>').attr('for', id).text(label);
    const $wrapper = $('<div class="radio-wrapper"></div>').append($radio, $label);

    $radioContainer.append($wrapper);
  });

  // ドロップダウンを非表示にし、ラジオボタンを挿入
  $select.hide().after($radioContainer);

  // ラジオ選択時に元のselectを更新
  $radioContainer.on('change', 'input[type=radio]', function() {
    $select.val($(this).val());
  });
});
  • コメント
  • 任意「チケットステータスにラジオボタンを追加する-JavaScript-」など
  • 有効
  • チェック
  • プライベート
  • チェックを外す

設定後、保存をクリックします。

カスタマイズ作成:CSS

表示のカスタマイズに移動後、「新しい表示のカスタマイズ」をクリックします。

以下の通りに入力します。

  • パスのパターン
  • /issues/[0-9]+
  • プロジェクトのパターン
  • 空白
  • 挿入位置
  • 全ページのヘッダ
  • 種別
  • CSS

コード

.status-radio-container {
  display: flex;
  flex-wrap: wrap;
  gap: 10px 20px;
  margin-top: 5px;
}

.radio-wrapper {
  display: flex;
  align-items: center;
  width: 220px; /* カラム幅は調整可能 */
}

.radio-wrapper label {
  margin-left: 6px;
  cursor: pointer;
}
  • コメント
  • 任意「チケットステータスにラジオボタンを追加する-CSS-」など
  • 有効
  • チェック
  • プライベート
  • チェックを外す

設定後、保存をクリックします。

動作を確認します。

任意のチケット編集画面をクリックします。

ステータス変更画面がドロップダウンリストからラジオボタンに変わっていれば成功です。

Thinkpad X 13 2020年モデルのキーバインド変更。(FnとCtrl)

使っていて違和感があったので修正しました。

中古で購入したThinkapd X13。左にあるFnとCtrlが使っているうちに違和感。その2つが逆であれば自分での混乱は少ないと思い、対処しました。

手順

BIOSに入ります。

このモデルでは、電源を投入後に「Enter」連打です。F2やDelではないことに注意。

BIOS画面からConfigに遷移します。

左のメニューからConfigをクリック。

Keyboard / Mouseをクリック。

FnとCtrlを入れ替えます。

“Fn and Ctrl key swap”をOnにして保存します。

設定を保存します。

設定後、それぞれの動作が逆になっていれば設定完了です。

Thinkpad X 13 2020年モデル数日使っての感想。  

Windows用ノートPC購入。(Thinkpad X 13 2020年モデル) – Manualmaton's Laboratory

こちらの記事の続き。5年前の中古PCとはいえ5万円弱と結構な値段でしたが「その価値はあった」というのが現時点での結論です。

よかった点

キーボードの打ちやすさ

見た目以上にキーストロークが深く、また、キーピッチも十分なので手が大きめの筆者でも打ちやすい感覚です。

思った以上に便利なトラックポイント

いわゆる赤ポチ。Thinkapdの代名詞的な存在であるトラックポイント、これを使ってみて「ファンが多いのも納得」と思った次第です。

  • ホームポジションから手を離すことなくカーソルの移動ができる
  • クリックボタンも手の届く場所にある
  • スクロールボタンによりトラックポイントでページのスクロールも可能

と、モバイル環境で追加のマウスを買う必要がないというのは非常に便利です。

Windowsならではのソフトの多さ

日本語入力ソフトATOKはもちろんのこと、

  • Teraterm
  • Putty
  • RLogin

など、逆に、CLIユーザーへの配慮がなされたターミナルソフトが使えるというのはWindowsの利点の一つです。

現時点での不満点

SDカードスロットがない

カメラと一緒に持ち運ぶケースを考えると、これは不満点ではありますが、カメラケースに小型のカードリーダーを携えればいいので運用でカバーできます。

今のところ

  • 軽さ
  • スペック
  • 金属製の筐体による高級感と放熱性

など、いい買い物ができたという感じです。

早速、天板も自分好みのステッカーを貼ることにしました。

Page 1 of 55

Powered by WordPress & Theme by Anders Norén