月: 2023年9月 Page 1 of 3

茶こしつきマグボトル、ファーストインプレッション。

試しに買ったところ、まず使えるアイテムでした。

ティーボトル:茶こし付き

Amazonによくあるこの手の商品。「お茶を携帯する」は日頃のテーマの一つなので、ちょっとした運試しがてらに購入です。

外観

大きさ的にはこの通り。クリア部分がある以外はステンレス製のマグボトルと言ったところ。

特徴

一番の特徴はクリア部分。ここに茶葉を入れておくという仕掛けです。

使い方

ひっくり返すことで茶葉が抽出される、シンプルな仕掛けとなっていました。

良かったところ

茶葉が口に入りにくい

別枠なので、茶葉を入れたままにしておけるのは美点。

抽出をコントロールできる

百均で作ったトラベル用のお茶システムでは、これがし辛いのが問題点でした。これはひっくり返しているときだけ抽出されるので、濃さを見ることが容易です。

また、中国茶のように数回抽出できる茶葉の場合でも便利です。

ある程度の保温/保冷機能

温かいお茶が欲しいシーンが少なからずあったので、通常のマグボトルとして使えるのもありがたかったです。

やや残念なところ

茶こしの目がちょっと粗い

茶葉が大きければ問題はありませんが、粉に近いお茶だとかなり漏れが発生します。

これに関しては茶葉のセレクトでカバーできます。

ギミック部分は保温が弱い

「ある程度」と言った部分です。この部分から熱が入り、出ていきます。熱湯や氷水を入れる場合には注意が必要です。

使って5日ほどの評価

かゆいところに手が届く便利な品です。お茶バッグを利用せず、携行できるのは助かってます。

特に、

  1. 起きてすぐ茶葉と水をセット
  2. ボトルを逆さまにしたまま出勤
  3. 職場に到着と同時に飲み頃の水出し茶ができている

一連の流れは今までの手間をぐっと省いてくれました。

後は、メンテナンスと耐久性がネック。換えがきくかどうかも含めて検証が必要です。

曜日を判別するmot_d。(Ubuntuシェルスクリプト)

概要

サーバにターミナル経由でログインした際に表示されるメッセージ、motd(Message of the Day)。

「特定の日時・曜日をを判別して、その条件を満たしたときにメッセージを表示することはできないか?」

ということでシェルスクリプトを書いてみました。

動作を確認した環境

  • Ubuntu 20.04

スクリプト内容

  • /etc/update-motd.d/02-Friday_Check(または既存のupdate-motdに追記します)

※管理者権限で追記する必要があります。

#!/bin/bash

# 現在の言語ロケールを保存します。
original_locale=$(locale | grep "LANG=" | cut -d= -f2)

# ロケールを英語に修正します。
export LANG="en_US.UTF-8"

# ロサンゼルス(カリフォルニア)の曜日を調べます。
day_of_week=$(TZ="America/Los_Angeles" date +"%A")

# 金曜日だった場合のみメッセージを表示します。
if [ "$day_of_week" == "Friday" ]; then
    echo "Today is Friday in California."
fi

# 元の言語ロケールに戻します。
export LANG="$original_locale"

追記後、

sudo chmod +x /etc/update-motd.d/02-Friday_Check

として、実行権限を付与してください。(既存スクリプトに追記する場合はその限りではありません)

スクリプトの動き

サーバにログインした際に

  1. 現在の言語ロケールを保存します。
  2. 言語ロケールを英語に修正します。(曜日の変数をFridayに固定しているため)
  3. タイムゾーンをチェックして、カリフォルニアで金曜日かどうかを判別します。
  4. PST(太平洋標準時)/PDT(太平洋夏時間)で金曜日の時間帯に
  5. Today is Friday in California. を表示します。
  6. 最後に、保存された言語ロケールへと戻します。

まとめ

今回は単に文字列を判別するだけ。ですが、月末時の処理や保守更新などの応用が利きそうです。

統率者メモ17:5つめのベースデッキ。

友人との対戦で非常に動きが気に入ったため、MtG統率者の構築済みを入手しました。

エルドレインの森統率者デッキ『美徳と武勇』

オリジナルのリストはこんな形。

// 統率者

1 僻境宮廷のエリヴェア/Ellivere of the Wild Court

// 土地

15 森/Forest
14 平地/Plains
1 統率の塔/Command Tower
1 クローサの境界/Krosan Verge
1 無限地帯/Myriad Landscape
1 都市の樹、ヴィトゥ=ガジー/Vitu-Ghazi, the City-Tree
1 梢の眺望/Canopy Vista
1 アーデンベイル城/Castle Ardenvale
1 要塞化した村/Fortified Village
1 ヘリオッドの高潔の聖堂/Hall of Heliod's Generosity
1 サングラスの大草原/Sungrass Prairie
1 豊潤の神殿/Temple of Plenty


// クリーチャー

1 配役の監督、ギルウェイン/Gylwain, Casting Director
1 解放された家畜/Liberated Livestock
1 雄牛曳き/Ox Drover
1 小間物のアウフ/Knickknack Ouphe
1 壌土造りのフォーン/Loamcrafter Faun
1 木製の聖騎士/Timber Paladin
1 アジャニに選ばれし者/Ajani's Chosen
1 太陽の恵みの執政官/Archon of Sun's Grace
1 天界の執政官/Celestial Archon
1 万戦の幻霊/Eidolon of Countless Battles
1 コーの精霊の踊り手/Kor Spiritdancer
1 王国まといの巨人/Realm-Cloaked Giant
1 豊潤の声、シャライ/Shalai, Voice of Plenty
1 星原の神秘家/Starfield Mystic
1 太陽のタイタン/Sun Titan
1 徴税人/Tithe Taker
1 陰影の神秘家/Umbra Mystic
1 開花の幻霊/Eidolon of Blossoms
1 聖域の織り手/Sanctum Weaver
1 セテッサの勇者/Setessan Champion
1 模範となる者、ダニサ・キャパシェン/Danitha Capashen, Paragon
1 卓絶した特使/Transcendent Envoy
1 オーラのナーリッド/Aura Gnarlid
1 運命を紡ぐ者/Destiny Spinner
1 楽園のドルイド/Paradise Druid
1 森のレインジャー/Sylvan Ranger
1 樹海の自然主義者/Jukai Naturalist
1 ピレアス号の艦長、シオーナ/Siona, Captain of the Pyleas
1 絡み架かりの見張り/Tanglespan Lookout
1 救世主、アーモント卿/Syr Armont, the Redeemer

// 呪文

1 歌鳥の祝福/Songbirds' Blessing
1 やり遺したこと/Unfinished Business
1 巨人の遺伝/Giant Inheritance
1 天使の運命/Angelic Destiny
1 質素な命令/Austere Command
1 夜明けの宝冠/Daybreak Coronet
1 古き者のまとい身/Mantle of the Ancients
1 再拘束/Retether
1 機を見た護法/Timely Ward
1 ラースの風/Winds of Rath
1 熊の陰影/Bear Umbra
1 女魔術師の存在/Enchantress's Presence
1 大力無双/Indomitable Might
1 リシュカーの巧技/Rishkar's Expertise
1 新緑の抱擁/Verdant Embrace
1 天上の鎧/Ethereal Armor
1 過大な贈り物/Generous Gift
1 賢人の夢想/Sage's Reverie
1 霊体の鋼/Spectral Steel
1 剣を鍬に/Swords to Plowshares
1 祖先の仮面/Ancestral Mask
1 入念な栽培/Careful Cultivation
1 肥沃な大地/Fertile Ground
1 ケンリスの変身/Kenrith's Transformation
1 蛇の陰影/Snake Umbra
1 楽園の拡散/Utopia Sprawl
1 戦茨の恩恵/Warbriar Blessing
1 花粉光の羽/Pollenbright Wings
1 秘儀の印鑑/Arcane Signet
1 太陽の指輪/Sol Ring

主な戦略

オーラによるビートダウンです。メイン統率者《僻境宮廷のエリヴェア》によって生成される聖者・役割・トークンは圧巻の一言。
「オーラがついているクリーチャーが戦闘ダメージを与えるたびにカードを1枚引く」能力によって、息切れもしにくくなっております。

また、墓地から回収するカードも含まれているのでリカバリーも強いのも好感が持てました。

入れ替えてみたいカード

  • 成長の季節
  • 信仰の守り
  • 繁茂
  • 怨恨
  • 空位の玉座の印章
  • 安全な領域
  • 魅知子の真理の支配

これらのカードを試して、無限トークンや戦線維持、打点強化を図りたいところです。

Linux:シェルスクリプトで天気表示。

概要

Linuxのコマンドラインで天気を知りたい状況があったので、簡単なスクリプトを書きました。

前提

  • Linux機がインターネットに繋がっていること。
  • ansiweatherがインストールされていること。

Ubuntuでのansiweatherインストール方法

以下のコマンドを実行します。

sudo aptitude install ansiweather
# 筆者の好みでaptitudeを用いています。必要に応じてaptを使ってください。

スクリプト

  • getweather.sh

以下の内容を教義・信仰に沿ったエディタで記載します。

#!/bin/bash

# ユーザーに都市名を尋ねる
echo "都市名を入力してください:"
read city

# ansiweatherコマンドを実行して天気情報を表示
echo "ansiweatherの情報:"
ansiweather -l "$city"

# curlコマンドを使用してwttr.inから天気情報を表示
echo "wttr.inの情報:"
curl wttr.in/"$city?lang=ja"
  • 実行権限付与
chmod +x getweather.sh

スクリプトの動き

  • スクリプト実行
./getweather.sh
  • 実行結果

都市名を入力します。(Tokyo, Londonなど)

入力後、以下のように1行で現在の天気の概要、アスキーアートで3日の予報が出てきます。

Ubuntuでプロンプトの挙動を変更(ちょいハマり-1-)。

ちょっとハマっていること

LinuxのCUI操作で、

  1. プロンプトの内容を「ユーザ名@ホスト名 カレントディレクトリ」に変更する。
  2. 一般ユーザの場合はプロンプトを緑にして\&で表記。
  3. rootに昇格した場合はプロンプトを赤にして#で表記。

という挙動にしています。

RockyLinuxの場合:OK

以下の内容を /etc/bashrc に組み込めばOKでした。

if [ "$PS1" ]; then
  if [ "$(id -u)" -eq 0 ]; then # rootユーザの場合
    PS1='\[\e[0;31m\][\u@\H \W]#\[\e[0m\] '
  else # 一般ユーザの場合
    PS1='\[\e[0;32m\][\u@\H \W]\$\[\e[0m\] '
  fi
fi

Ubuntuの場合:NG

ところが、Ubuntu系は

  1. 上記の設定を/etc/bash.bashrcに追記してもプロンプトの動きが想定通りとならない。
  2. source /etc/bash.bashrcと実行すると、設定が反映される。

これは相当面倒です。ログイン時に別のスクリプトか何かでこれを実行すればいいのでしょうが、新しいユーザを作成した場合など不都合が生じます。

Ubuntuでのワークアラウンド

取り急ぎ、当初の目的である「一般ユーザと特権ユーザでプロンプトの色や記号を変える」を優先させます。

ログインユーザ(一般ユーザ)の設定ファイル

  • ~.bashrc

末尾に以下を追記します。

# 一般ユーザ向けのプロンプト設定
if [ "$PS1" ]; then
  if [ "$(id -u)" -eq 0 ]; then # rootユーザの場合
    PS1='\[\e[0;31m\][\u@\H \W]#\[\e[0m\] '
  else # 一般ユーザの場合
    PS1='\[\e[0;32m\][\u@\H \W]\$\[\e[0m\] '
  fi
fi

rootの設定ファイル

  • /root/.bashrc

末尾に以下を追記します。

# rootユーザ向けのプロンプト設定
if [ "$PS1" ]; then
  PS1='\[\e[0;31m\][\u@\H \W]#\[\e[0m\] '
fi

これで当面の問題は回避できましたが、根本的な解決には至らず。

もう少し調査が必要です。

『ライザのアトリエ3』有料DLCロスカ島でのキーメイクを効率化。(要DLCアイテム)

DLC要素:白楼の鍵

DLCロスカ島で追加される無垢の鍵の上位種:白楼の鍵。

これによって得られる秘密の鍵は

「神域」と、無垢の鍵で得られるものよりも強化したシンボル効果が得られます。

これを効率的に生成するための方法を確立させました。

白楼の鍵でのキーメイクの難点

アドバンスドスキル:ファストキーメイクの成功率の低さです。

無垢の鍵と異なり白楼の鍵は確率補正がないために成功率は低めです。

かといって適当に攻撃を重ねたのでは手痛い一撃を食らい、高火力で押し切ると敵は全滅。キーメイクの機会そのものがなくなります。

このジレンマの解決策を鍵以外に求める必要がありました。

着目したコアアイテム:ナイトロシュテルン

そこで着目したのは有料DLC「冒険の極意」で追加されるコアアイテム、ナイトロシュテルン。

敵にブレイクダメージを与えることができるデバフアイテムの効果を高めました。

https://atelier.reisalin.com/issues/308

詳細は上記ですが、次のチューニングを施しています。

  1. 消費CC1で撃てるようにしています。
  2. 超特性「ブレイク必中」を入れることで敵をブレイクさせます。
    • これによって敵からのキーメイク成功率を開幕から上げていきます。
  3. 効果4をリンクコール「ブレイク値加算・極」にして、敵のリカバリーを難しくしています。

検証手順

  • DLCロスカ島での検証です。
  • 難易度はLEGEND。

また、ステータスはこんな形です。

戦闘開始~コアアイテム

開幕から:

  1. ラブリーブロッサム
  2. ナイトロシュテルン

の順番で発動。(CCが1残りますが、これは殲滅時に用います)

ブレイク~キーメイク

超特性「ブレイク必中」により、敵はブレイク状態。また、ブレイクゲージも大幅に減らしています。

キーメイクを行います。成功率は80%程になっています。

キーメイク成功。

戦闘終結

後は残っている1CCで一掃して戦闘完了です。

一応のまとめ

検証動画はこちら。

  • 開幕から
  • 一手間加えるだけで
  • 戦闘時のキーメイクの確率を上昇

は、コアアイテムによりどうにかなりました。後はより強いキーメイクのため、あちこちのワールドを奔走します。

Redmineに「どこでもポップアップ」実装。(View_Customize_Pluginのサンプルコード)

非常に便利なサンプルがあったので導入しました。

参照先

https://github.com/sk-ys/redmine-view-customize-scripts/blob/master/html/popup_anywhere/popup_anywhere.md

前提

  • Redmineの「View_Customize_Plugin」が稼働していることが前提です。
  • Redmine 4.2でも動作を確認しました。

インストール方法:

https://atelier.reisalin.com/projects/zettel/knowledgebase/articles/31

挙動

このようなチケット一覧で、任意のリンクにカーソルを合わせて「Ctrl+クリック」するだけ。

このようにポップアップ。

連続するチケットに対しても、ブラウザの戻る/進むをやらずとも閲覧が可能になります。

導入方法

  1. 管理者権限でRedmineにログインします。
  2. 管理>表示のカスタマイズ>新しい表示のカスタマイズをクリックします。
  3. 以下を設定していきます。

設定後、「有効」にチェックを入れて保存。

備考

このredmine_shortcutsとは凄まじいシナジーを誇ります。

ポップアップ→「E」で編集することで、ブラウザを遷移させることなくチケットのちょっとした編集や追記が可能になります。

Torの出口ノードリストからのWebアクセスを遮断する設定。(Mod_Securityとの連携)

こちらの記事の続きとなります。

Torの出口ノードリストを抽出するスクリプトと、既に稼働済みの不審なIPアドレスをブロックするスクリプトを連携させます。

前提

こちらにあるように、

  • Mod_Security導入済み
  • エラー検知時にブロックする設定をバーチャルサイトに設定済み

となります。

また、先日の記事である、

  • Tor出口ノードリストを抽出スクリプトがCron化されているものとします。

スクリプト

  • negativelist.sh
#!/bin/bash

# 読み込むログのディレクトリとファイル名を変数指定
log_dir="/var/lib/redmine/log"
log_file="error.log"

# シェルスクリプトから抽出したTorの出口ノードリストを指定
tor_list_dir="/path/to/directory"  # tor_list.txtのディレクトリを指定
tor_list_file="sorted_ip_addresses$(date +%Y%m%d).txt"

# 除外するIPアドレスをファイルで指定
# 自分のNWなど、偽陽性を防ぐために記載したアドレスのリストです。
exclude_ips_file="/path/to/directory/exclude_ips.txt"

# ログファイルからIPアドレスを抽出して重複を排除し、ファイルに保存します。
cd "$log_dir"
awk 'match($0,/[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+/) { print substr($0, RSTART, RLENGTH) }' "$log_file" | sort -u > "$log_dir/suspicious_ip/suspicious_ip.$(date +%Y%m%d)"
chown www-data:www-data "$log_dir/suspicious_ip/suspicious_ip.$(date +%Y%m%d)"

# 過去のIPアドレスを読み込んで重複を排除し、ファイルに保存します。
cat "$log_dir/suspicious_ip/suspicious_ip."2* | sort -u > "$log_dir/suspicious_ip_all.txt"
chown www-data:www-data "$log_dir/suspicious_ip_all.txt"

# 新たにリストに書き起こすと同時にTorの出口ノードリストを読み込んで重複を排除し、negativelist.txtに追加します。
cat "$log_dir/suspicious_ip_all.txt" "$tor_list_dir/$tor_list_file" | sort -u > /etc/apache2/sites-available/negativelist.txt

# 除外するIPアドレスをファイルから削除します。
while IFS= read -r exclude_ip; do
  sed -i "/$exclude_ip/d" /etc/apache2/sites-available/negativelist.txt
done < "$exclude_ips_file"

# Apacheを再起動します。
systemctl restart apache2.service

あとはこちらをroot権限でCron登録。

設定後の動き

以下のように動きます。

  1. 指定のログファイルからエラーとなったIPアドレスのみを抽出します。
  2. 全てのIPアドレスを統合し、重複を排除してsuspicous_ip_all.txtとして抽出します。
  3. suspicous_ip_all.txtとtor_list_fileを統合し、negativelist.txtとして作成します。(これらのIPアドレスからのアクセスに対しては全て403を返します)
  4. negativelist.txtから除外IPアドレスを取り除きます。
  5. Webサービスを再起動します。

ひとまず、WAFとの連携ができました。

IPアドレス抽出スクリプト。(Torの出口リスト)

必要があったので、スクリプトを書きました。

スクリプトの動き

  1. 公開されているTor出口リストをダウンロード。
  2. IPアドレスのみを抽出。
  3. 重複を排除してソート。

スクリプト内容

  • tor_exit_hodes.sh
#!/bin/bash

# 出口ノードリストのURL
TOR_EXIT_LIST_URL="https://check.torproject.org/exit-addresses"

# ダウンロード先ファイル名
OUTPUT_FILE="exit_nodes.$(date +%Y%m%d).txt"

# curlを使用してリストをダウンロード
curl -o "$OUTPUT_FILE" "$TOR_EXIT_LIST_URL" 

##curl -o "$OUTPUT_FILE" "$TOR_EXIT_LIST_URL" >/dev/null 2>&1
##cron処理などを行う場合はこちらを使います。

# ダウンロードが成功したかどうかを確認
if [ $? -eq 0 ]; then
  echo "Tor出口ノードリストをダウンロードしました。ファイル: $OUTPUT_FILE"
else
  echo "ダウンロード中にエラーが発生しました。"
  exit 1
fi

# IPアドレスのみを抽出し、ソートして出力
awk '/^ExitAddress/ {print $2}' "$OUTPUT_FILE" | sort | uniq | tee sorted_ip_addresses$(date +%Y%m%d).txt 

##awk '/^ExitAddress/ {print $2}' "$OUTPUT_FILE" | sort | uniq > sorted_ip_addresses$(date +%Y%m%d).txt >/dev/null 2>&1
##cron処理などを行う場合はこちらを使います。

これで、IPアドレスのみが抽出されますので、apache/nginxやFiwawall/WAFとの連携が容易になります。

今後の動き

  1. Cron化
  2. Mod_Securityとの連携

などやっていきます。

Redmineプラグイン:knowledgebaseでのリンクの張り方。

概要

Redmineプラグイン『knowledgebase』に書いた記事を他のチケットで参照したいときはままあります。

そんなときに使えるTIPSです。

Wiki Macro

https://github.com/alexbevi/redmine_knowledgebase

githubのレポジトリにリンクの張り方が書かれていました。

特記事項

  • <article_id>は http(s)://redmineのドメイン/プロジェクト識別子/knowledgebase/articles の後に書かれている数字です。
    • この数字は全プロジェクトで一意の数字が割り当てられるので、他プロジェクトで書かれたナレッジを参照できます。
    • そのプロジェクトへの閲覧権限がない場合はその限りではありません。
  • <category_id>は http(s)://redmineのドメイン/プロジェクト識別子/categories/ の後に書かれている数字です。
    • articleと同様、全プロジェクトで一意の数字が割り当てられます。
  • <>は外して、数字のみを入力します。

マクロ一覧

  • {{article(<article_id>)}}
    • 「kb#:記事名」でリンクをレンダリングします。(例:kb#1:障害手順書)
  • {{kb(<article_id>)}}
  • {{article_id(<article_id>)}}
    • 「kb#」 でリンクをレンダリングします。 (例: kb#1)
  • {{category(<category_id>)}}
    • 「カテゴリー名」でリンクをレンダリングします。

使用した例

https://atelier.reisalin.com/projects/ryza3

こちらの「概要」のように、「実績一覧」にナレッジベースの記事のリンクがあるという状態。

これで、連携を取りやすくなりました。

Page 1 of 3

Powered by WordPress & Theme by Anders Norén