スープジャーを使うことにして、日々のスープを工夫しています。
そんな中でバリエーションの広がりを見せたのが「鍋キューブ」などを用いたスープの作成でした。
寄せ鍋ベース

あっさりとしながらも出汁がきいています。海苔、油揚げとも映えます。
カレー鍋ベース

辛さと濃厚な味。かき玉にすることでマイルドに。
ごま豆乳鍋ベース

もとより濃厚だったこと、そしておかずの脂を中和するためにショウガをきかせました。
他のおかずが単調でもスープのベースを変えることでバリエーションが広がります。
スープジャーを使うことにして、日々のスープを工夫しています。
そんな中でバリエーションの広がりを見せたのが「鍋キューブ」などを用いたスープの作成でした。

あっさりとしながらも出汁がきいています。海苔、油揚げとも映えます。

辛さと濃厚な味。かき玉にすることでマイルドに。

もとより濃厚だったこと、そしておかずの脂を中和するためにショウガをきかせました。
他のおかずが単調でもスープのベースを変えることでバリエーションが広がります。
昨年読み終えたハリー・ポッターシリーズの原作小説。
ハリー・ポッターのあるシーンを読み返していた時、登場人物の行動がOODAループという意思決定プロセスと酷似していることに気づきました。
この記事では、OODAループに着目してみようと思います。
OODAループとは、アメリカ空軍のジョン・ボイド大佐が提唱した意思決定プロセスです。
変化の激しい状況下での迅速な意思決定に役立つフレームワークですが、相手のOODAループを意図的に混乱させることで、優位に立つことも可能です。
ホグワーツの守りを固める際のキングズリー・シャックルボルトたちがその好例です。
戦略立案の際に
「マクゴナガル先生に伝えろ。こっちは私とリーマスで守る」
「了解」
まずは必要な人員をキングズリー自身とリーマス(ルーピン)であると判断。
「いやディーン、ちょっと待て」
城外の大攻勢が見積と大きく違うことを判断。
「杖をもう1~2本、応援によこせと伝えてくれ」
ここでいう「杖」は「魔法を使える者」。つまり「戦えるもの」を指します。
その言葉を聞いたフレッド・ウィーズリーとジョージ・ウィーズリーがすっと前に入ります。
戦場の状況を見て彼我の戦力を算出し、その「戦力」が行動する様は先に説明した「激しく変化する状況下での柔軟な意志決定」を可能にします。
OODAループを逆用するとは、相手に誤った情報を提供したり、選択肢を限定したりすることで、意図的に誤った判断をさせることです。
小説『ハリー・ポッターと炎のゴブレット』に登場するフレッド&ジョージ・ウィーズリーの「トン・タン・トフィー(ベロベロ飴)」作戦が、OODAループ逆用の好例でした。
状況:
ダドリーの思考の流れと、フレッド&ジョージの介入:
| OODA段階 | ダドリーの思考の流れ | フレッド&ジョージの介入 | 介入の結果 |
|---|---|---|---|
| 1. 観察 (Observe) | 「魔法の食べ物は危険だ!でも、これは美味しそう…」 | 落としただけなので、敵意がないように見せかける | 観察情報が誤誘導される |
| 2. 状況判断 (Orient) | 「落ちているなら安全かもしれない。甘いもの食べたい…」 | 甘味に飢えている心理を利用し、警戒心を解く | 安全と錯覚させる |
| 3. 意思決定 (Decide) | 「食べちゃおう!」 | 選択肢を“食べる”しかない状況に誘導 | 誤った決定を下す |
| 4. 行動 (Act) | 食べる | トフィーの効果で舌が膨れ上がる | OODAループの完全破壊 |
このループに加え、以下の戦略もありました。
他人の意志決定プロセスを誤誘導するだけでは無く、自身が安全圏に逃げる手段まで画策していたのです。
OODAループは、迅速な意思決定を支援するだけでなく、相手のOODAループを破壊することで、優位に立つための強力な武器となります。
フレッド&ジョージの戦略は、OODAループの逆用だけでなく、心理学的な要素も巧みに利用した高度な心理戦と言えるでしょう。
戦略立案においては、OODAループの活用と同時に、相手のOODAループをいかに妨害するかという視点も重要になることを示唆しています。
筆者の趣味、ボードゲームにおいても以下の逆用が考えられると思いました。
この、相手のOODAループを読み、逆手に取るメソッドはあらゆる状況に使えます。
SSL証明書の有効期限を確認するスクリプト、改修しました。
require 'openssl'
require 'socket'
require 'date'
require 'uri'
require 'timeout'
# ユーザーからURLを対話的に受け取る
def get_user_input
print "チェックしたいサイトのドメインを入力してください(例: example.com): "
domain = gets.chomp
# 入力がhttp://またはhttps://で始まらない場合は、https://を追加
domain = "https://#{domain}" unless domain.start_with?('http://', 'https://')
domain
end
# 変数で指定したURLに接続して証明書の有効期限を取得するメソッド
def get_certificate_expiry_date(url)
uri = URI.parse(url)
hostname = uri.host
ssl_socket = nil
tcp_client = nil
begin
# タイムアウトを5秒に設定してSSL接続を確立
Timeout.timeout(5) do
tcp_client = TCPSocket.new(hostname, 443)
ssl_context = OpenSSL::SSL::SSLContext.new
ssl_socket = OpenSSL::SSL::SSLSocket.new(tcp_client, ssl_context)
ssl_socket.hostname = hostname
ssl_socket.connect
# 証明書の有効期限を取得
cert = ssl_socket.peer_cert
expiration_date = DateTime.parse(cert.not_after.to_s)
days_remaining = (expiration_date - DateTime.now).to_i
return expiration_date, days_remaining
end
rescue Timeout::Error
return nil, "サーバーへの接続がタイムアウトしました。"
rescue => e
return nil, e.to_s
ensure
ssl_socket&.close
tcp_client&.close
end
end
# メイン処理
def main
# コマンドライン引数を確認
url = if ARGV[0]
# 引数でドメインが指定されている場合
domain = ARGV[0]
domain = "https://#{domain}" unless domain.start_with?('http://', 'https://')
domain
else
# 対話的に入力を受け付ける
get_user_input
end
expiration_date, days_remaining = get_certificate_expiry_date(url)
if expiration_date
formatted_date = expiration_date.strftime("%Y/%m/%d")
puts "サイト #{url} の有効期限は #{formatted_date} です。残り #{days_remaining} 日です。"
else
puts "証明書の取得に失敗しました: #{days_remaining}"
end
end
# メイン処理を呼び出し
main
引数化したことです。
ruby ssl_checker.rb google.co.jp
サイト https://google.co.jp の有効期限は 2025/03/31 です。残り 61 日です。
と、スクリプトの後にドメイン指定で残り日数を示します。
ruby ssl_checker.rb
チェックしたいサイトのドメインを入力してください(例: example.com): google.co.jp
サイト https://google.co.jp の有効期限は 2025/03/31 です。残り 61 日です。
引数なしだと対話式に切り替わります。
これで、変数をハードコートする必要がなくなり、他のスクリプトにも組み込みやすくなりました。
「中和剤」は本作の基本的な調合剤であると同時に
ため、終盤であっても(むしろゲームが進むにつれ)重要になってくる調合アイテムです。
本作が簡単に進むか難しく感じるかは、この、中和剤の作り方を序盤から理解するか否かにかかっています。
とはいえ、最初期の(カーク群島を目指すような)タイミングでは、投入回数の少なさに加え「そもそも良質な素材が取れない」制約があります。
そんな中で、多少、いい品質を作るためのTIPSです。
カーク群島を目指すタイミングでの最優先は「中和剤・赤」です。
などの良好な条件が揃っています。
中和剤・赤の基本材料は
です。とりわけ重要な「火薬」と「水」に沿っていきます。

ランドマーク『彩花の円環』にある赤い岩をスウィングすることで得られるセキネツ鉱は

「火薬」を持ち、属性値がこの段階では2もあります。

ライザの家から北東に延びる道で通常採取可能。

最序盤で属性値が「2」ある「水」を持つ素材。
基本的にこれを用いて調合します。

調合メニューから「中和剤・赤」を選択して、効果1に属性値2のセキネツ鉱を入れます。

効果2に属性値2の七色葡萄と属性値1の氷属性を持つ属性値1の水を入れます。

効果3に、セキネツ鉱を2と1で足して3になるように入れます。

スキルツリーが最初の状況だと、この特性枠を1つだけ埋めることができます。

このタイミングで投入回数がリミットになるので、特性を1つだけ選んで調合を終えます。
こうして得た中和剤・赤は「属性値が2」ある火薬/燃料となります。
これ自体を中和剤・赤のループになります。
を心がけることで、道中の調合に如実に差が出ていきます。
続いては「陽炎の島」についての遺跡の欠片をまとめます。
こちらの本筋はむしろ
どうにかしていくのが私見のため、ストーリーは余り印象に残らなかったという形。
ですが、どのようにしてライザにあのアイテムがもたらされたかが分かるようになっています。
特別なレシピからです。最後のエリアでの開放ですが、そもそもここにたどり着くのが大変です。
『ライザのアトリエ2』もこの機会に整理を進めます。
無料DLC「ケルドラ城」の遺跡の欠片をまとめます。
文章はネタバレになるので、「どの欠片を上から埋めていったか」の記録です。
※ DLCのため、実績には関係ありません。
※ このDLC「ケルドラ城」と有料DLC「陽炎の島」に出てくる人物は、ライザが使うことになったアイテムと縁があります。
雲上楼閣エリア2最奥 で入手します。 エリア3へと進むアイテムのレシピが報酬なので、まずはこの欠片を埋めるところからです。
エリア3:地を結ぶ旧鉱で入手します。
エリア1、山麓の火炎林から入手します。
エリア2「雲上楼閣」で入手します。
エリア2「雲上楼閣」で入手します。
以前作成したコマンドラインでの天気予報ツールについて改良を行いました。
まず、修正前のスクリプトはこちらです。
#!/bin/bash
# 都市名をコマンドライン引数から取得するか、ユーザーに尋ねる
city=$1
if [[ -z "$city" ]]; then
echo "都市名を入力してください:"
read city
if [[ -z "$city" ]]; then
echo "都市名が入力されませんでした。"
exit 1
fi
fi
# ansiweatherコマンドを実行して天気情報を表示
echo "ansiweatherの情報:"
if ! ansiweather -l "$city"; then
echo "ansiweatherから情報を取得できませんでした。"
fi
# curlコマンドを使用してwttr.inから天気情報を表示
echo "wttr.inの情報:"
if ! curl -s "wttr.in/${city}?lang=ja"; then
echo "wttr.inから情報を取得できませんでした。"
fi
このスクリプトは、コマンドライン引数で都市名を受け取るか、引数がなければユーザーに都市名の入力を求め、ansiweatherとcurlを使って天気情報を取得し表示します。
ansiweatherやcurlコマンドが失敗した場合の処理は警告メッセージを表示するだけです。そこで、以下のように修正です。
#!/bin/bash
# 都市名を取得する関数
get_city() {
if [[ -z "$1" ]]; then
read -p "都市名を入力してください: " city
if [[ -z "$city" ]]; then
echo "エラー: 都市名が入力されていません。" >&2
return 1
fi
else
city="$1"
fi
# 入力値の検証
if [[ "$city" =~ ^[[:space:]]+$ ]]; then
echo "エラー: 都市名に空白のみが入力されています。" >&2
return 1
fi
return 0
}
# 天気情報を表示する関数
show_weather() {
local city="$1"
echo "--------------------"
echo "ansiweatherの情報 (${city}):"
if ! ansiweather -l "$city"; then
echo "警告: ansiweatherから情報を取得できませんでした。" >&2
fi
echo "--------------------"
echo "wttr.inの情報 (${city}):"
if ! curl -fs --connect-timeout 5 "wttr.in/${city}?lang=ja"; then
echo "警告: wttr.inから情報を取得できませんでした。" >&2
fi
}
# メイン処理
if [[ $# -eq 0 ]]; then
if ! get_city; then
exit 1
fi
show_weather "$city"
elif [[ $# -gt 0 ]]; then
for city in "$@"; do
if ! get_city "$city"; then
echo "$city の処理をスキップします。" >&2
continue
fi
show_weather "$city"
done
fi
exit 0
get_city()関数とshow_weather()関数に処理を分割し、コードの可読性と再利用性を向上させました。get_city()関数内で都市名が入力されない場合や空白のみが入力された場合にエラーメッセージを出力し、終了ステータスを返しています。エラーメッセージは標準エラー出力(>&2)に出力することで、通常の出力と区別しています。show_weather()関数内でansiweatherやcurlコマンドが失敗した場合に警告メッセージを標準エラー出力に出力するように変更しました。get_city()関数内で空白のみの入力に対する検証を追加しました。forループを使って、それぞれの都市に対して天気情報を取得し表示します。./script Narita Londonとすることで、出発地と目的地の天気を同時に示すことができます。curlコマンドのオプション変更: curl -sに加えて-f(エラー時にHTTPステータスコードを返す)と--connect-timeout 5(接続タイムアウトを5秒に設定)を追加し、より堅牢な処理を実現しました。./script.sh Osaka Kyotoansiweatherやcurlコマンドが失敗した場合、警告メッセージが標準エラー出力に出力されるようになりました。curlコマンドのタイムアウトが設定されたため、ネットワークの問題などで応答がない場合に処理が止まるのを防ぐことができます。こちらの記事の補足となります。
2025/01/23時点のdmsfプラグインの最新バージョンはRedmine 6.0に合わせたものです。
そのため、git cloneする際に
https://github.com/danmunn/redmine_dmsf/releases
を確認して、Redmineのバージョンと合っているかを確認。
その上で
sudo -u www-data git clone -b v3.2.4 https://github.com/danmunn/redmine_dmsf
バージョンを指定してからgit cloneします。
自分の例ですが、「Redmineそのものが深刻な機能不全を起こしました」。
具体的に言うと
などです。
と、躓いた上での経験談でした。
Redmineのプラグインをかんばんからダッシュボードプラグインに差し替えたときのメモです。
cd /hoge && pwd
任意の作業ディレクトリに移動
mysqldump -h localhost -u redmine -p --no-tablespaces --single-transaction redmine > redmine_backup.$(date +%Y%m%d).sql
view redmine_backup.$(date +%Y%m%d).sql
cd /path/to/redmine/root/directory/plugins && pwd
sudo mv kanban /path/to/backup/directory/kanban_org_$(date +%Y%m%d)
ls -ld /path/to/backup/directory/kanban_org_$(date +%Y%m%d)
sudo systemctl restart apache2.service && echo $?
→ 0を確認
sudo -u www-data git clone https://github.com/jgraichen/redmine_dashboard
ls -ld redmine_dashboard
cd /path/to/redmine/root/directory && pwd
sudo -u www-data bundle install --without development test
sudo -u www-data bundle exec rake redmine:plugins:migrate RAILS_ENV=production
sudo systemctl restart apache2.service && echo $?
→ 0を確認
Powered by WordPress & Theme by Anders Norén