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

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

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

『ライザのアトリエ3』コアアイテムのダメージ増強検証-5- (再びのロールと特性見直し)

この記事のアップデートとなります。

上位ロールは、基本の

  • アタッカー
  • サポーター
  • ディフェンダー

のうち、最も高いレベルに応じて決定されます。

故に、引用元で示したように各ロールをばらけさせるのではなく集中してやってみました。

装備品

※リンク先は詳細

アニエスルーチェ

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

リンクコールでサポーターの証をアタッカーの証に上書き。超特性も英雄の心得で更に上げています。

クルーガークローク

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

効果1を合ったカーの証に上書きしました。ここだけ超特性「英雄の心得」が見つかっていません。

ハーナルリング

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

いずれもコアアイテムに関係する効果のため、上書きする効果は悩みましたが、ダメージと直結しないと思われる効果4をリンクコールしました。

ウォーロックリング

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

効果3の攻撃力上昇が浮いていたのでリンクコールで上書き。

上記装備品効果で、アルケミスト(アタッカー)レベルは82まで上昇です。

効果検証

難易度LEGENDでの検証です。

例によって敵は同じシャープシザーズ×3。

ここで抜群の効果を見せたラブリーブロッサムとの合わせ技です。

4,171,864です。前回検証時の倍以上のダメージが当たっています。

現段階で判明したこと

  • コアアイテムは装備品でバフが乗る。
  • 装備品にロールを載せる場合は基本3ロールのどれかを集中させる。

でした。この検証ではロスカ島に進んでいないので、ここで得られる特性や新たな鍵での検証が楽しみです。

旅行用ティーセットのフィードバック。

こちらのフィードバックです。

これを携えて寺泊と湯桧曽に訪れ、使い勝手の報告です。

よかったところ

移動中に水出しのお茶が作れる安心感。

旅のクォリティを格段に高めてくれました。宿に着いたときや移動中にお気に入りのお茶が手元にあるというアドバンテージは思った以上です。

しかも、朝のうちや高速乗る前などにセットしておけば、適当な時間にお茶を楽しむことができます。

保冷バッグ効果。

収納するバッグを弁当用の保冷バッグにしたことで冷たい水出しを作ったとしても水分が外に出ることはありません。

また、道の駅やSAで生菓子を買ったとき、それを補完しておける余裕があったのも+点です。

改善点

洗浄道具

香りが強いフレーバーティーを中心に持っていったため、水ですすぐだけではボトルの匂いが取れませんでした。

なので、

  • スポンジ
  • 洗剤

はどこか詰めておく必要があります。そして、洗剤は絶対に茶葉と混ざらないような物理的措置を執る必要があります。

出がらしの茶葉置き場

ジップバッグだけでは不十分でした。こればかりは道中に出てくるゴミを入れる袋に入れて、まとめて処分する方法が良かったです。

現時点でのまとめ

  • 百均で手に入る道具で
  • 気休め程度の保冷効果があり
  • 水出しのお茶が作れる

システムは正解でした。後はこれをどうやって洗浄するかを考えていきます。

連休のボードゲーム会。

3連休初日、レンタルスペースでボードゲーム会を開きました。

タイニータウン

程よく終わり、インタラクションとパズル感が楽しい箱庭ゲーム。

勝利点を狙っていったのが功を奏しました。

ナナイロアジサイ

2人でやったときには気づかなかったものの、3人だと乱戦気味。また、色が本当に変わるのでルールが混乱しがちでした。

キャット・イン・ザ・ボックス

カードを出さない限りスートが決まらないトリックテイキング。2連続でバーストするという不本意な結果となりました。

コーンウォール

3年半ぐらいぶりに回せたゲーム。こちらは沼のマジョリティで一歩及ばず。

ニューファンドランド

今回自分が担当した国はフランス。国別の固有能力:徴税所(配達達成時に+3勝利点」が思った以上に強く、常に先頭で駆け抜けることができました。

「もう少し重いゲームでも大丈夫そうだ」という参加者の意向を受け、90分級のゲームをキチッと回せたのが大成果です。

Page 44 of 238

Powered by WordPress & Theme by Anders Norén