投稿者: manualmaton Page 5 of 243

BBC Newsの見出しを取得するBashスクリプト・改良

概要

以前に書いたBBC Newsの特定のセクションから最新の見出しを取得するBashスクリプトを改良しました。Ubuntu 24.04で動作を確認しています。

必要なライブラリのインストール

このスクリプトを実行するには、xmllintが必要です。

sudo aptitude update
sudo aptitude install libxml2-utils

コード

bbc_headlin.sh

#!/bin/bash

# デフォルト値の設定
default_section="world"
default_count=3

# メインセクションのリスト
main_sections=("world" "uk" "business" "politics" "health" "education" "science_and_environment" "technology" "entertainment_and_arts")

# 引数の処理
if [[ "$1" =~ ^[0-9]+$ ]]; then
section=$default_section
count=$1
else
section=${1:-$default_section} # 引数1が指定されていない場合はデフォルト値を使用
count=${2:-$default_count}     # 引数2が指定されていない場合はデフォルト値を使用
fi

# メインセクションのURLの構築
if [[ ! " ${main_sections[@]} " =~ " ${section} " ]]; then
echo "Error: Invalid section '${section}'. Valid sections are: ${main_sections[*]}"
exit 1
fi

url="https://feeds.bbci.co.uk/news/${section}/rss.xml"

# BBC NewsのRSSフィードから見出しを取得
headlines=$(curl -s "$url" | xmllint --format - | grep -oP '(?<=<title>).*?(?=</title>)' | sed -n '3,'"$((count+2))"'p' | sed 's/<!\[CDATA\[//g' | sed 's/\]\]>//g')

# 見出しの表示
if [ -z "$headlines" ]; then
echo "No headlines found for section '${section}'. Please check the section name or try again later."
else
echo "BBC News - ${section} section (${count} headlines)"
echo "$headlines"
fi

作成後、

chmod +x bbc_headline.sh

としてスクリプトに実行権を与えます。

動作例

このスクリプトの動作例です:

デフォルトのセクション(world)から3つの見出しを取得する場合:

./bbc_headline.sh
  • 出力例:
BBC News - world section (3 headlines)
I hope Assad pays the price, says mother whose son's death inflamed 2011 Syrian revolution
Israel confirms attack on Syrian naval fleet
Another headline example

technologyセクションから5つの見出しを取得する場合:

./bbc_headline.sh technology 5
  • 出力例:
BBC News - technology section (5 headlines)
Tech company announces new product
Breakthrough in AI technology
Another tech headline
More tech news
Latest in technology

見出し数のみを指定する場合(デフォルトのセクションworldを使用):

./bbc_headline.sh 5
  • 出力例:
BBC News - world section (5 headlines)
I hope Assad pays the price, says mother whose son's death inflamed 2011 Syrian revolution
Israel confirms attack on Syrian naval fleet
Another headline example
More world news
Latest in world news

利用可能なセクション

利用可能なセクション
スクリプトで指定できるセクションは、以下の通りです:

  • world: 世界のニュース
  • uk: イギリス国内のニュース
  • business: ビジネス関連のニュース
  • politics: 政治関連のニュース
  • health: 健康関連のニュース
  • education: 教育関連のニュース
  • science_and_environment: 科学・環境関連のニュース
  • technology: テクノロジー関連のニュース
  • entertainment_and_arts: エンターテインメント・アート関連のニュース

メインセクション及び見出し数を引数として利用できるのが改善点です。

ボードゲーム『真打』ルールのメモ。

落語を舞台にしたドラマを見たため、久しぶりに引っ張り出しました。

このボードゲーム『真打』を買ったとき、「トリックテイキング」という言葉すら知らない状態だったので改めて整理します。

  1. スート無し
  2. ビッド無し
  3. 切り札なし(単純な数字の大きさ)でトリックを競う
  4. 同じ題目のカードは 「フォローできない」ルールあり
  5. トリックの勝者が落語会カードを獲得し、次のリードを行う
  6. トリックの敗者順に公開された3枚/または非公開の1枚を選ぶことができる
  7. トリック獲得の勝利点/特殊な勝利点/セットコレクションにより勝敗決定

が大まかなルールです。

流れ

  • トリックの勝敗にかかわらず、自分がプレイしたカードを左から並べていきます。(後のセットコレクションで使うため)
  • トリックの勝者が、演目のカード上にトリック(落語名)のカードを置きます。
  • 同一プレイヤーが同一演目のカードを「3回」出したら、「十八番」のカードを3枚目の上に置きます。

得点(名声点)の計算

  1. トリックの勝者が獲得する落語会カードの合計
  2. 獲得した「十八番カード」の枚数
  3. カードごとの特殊ルール
  4. セットコレクション(マイナスあり)

特殊ルール

季節の演目
『牡丹灯籠』を納涼落語会、
『芝浜』を年末落語会で「トリック(落語会) の勝者となったら」3名声点獲得。

そのため、これらのトリック(落語会)では、上記のネタに特に注意。

余談ですが、これら大ネタは本番に備え、別の季節に高座にかけることがあるそうです(俗に『噺家の時知らず』) 

『紺屋高尾』
2枚出すことができたら3名声点獲得。トリック(落語会) の勝者である必要は無い)

『死神』
出したプレイヤーは次の処理を行う。
1. 任意の相手から無作為に1枚を選んで自分の手札に加える。
2. 自分の手札から「選んで」その相手にカードを渡す。

『時蕎麦』
十八番になった(3枚目をプレイした)瞬間 から、数が「14」として扱われます。つまり、『芝浜』に勝つことができます。

称号カード(セットコレクション)

  • 称号の対象者が複数の場合は、その全員が同じ点数を得ます
  • 特定の演目を演じた場合に取得できる称号があります。
  • マイナスの称号があります。「マイナス5点」は相当大きな失点なので気をつけましょう。

レベルの底上げ。(統率者メモ2024/12/11)

このデッキをのコンボを複数ルートにしました。

統率者

  • リスの将軍、サワギバ/Chatterfang, Squirrel General

デッキ

クリーチャー

  • ズーラポートの殺し屋/Zulaport Cutthroat
  • マリオネットの見習い/Marionette Apprentice
  • 巣穴の魂商人/Warren Soultrader
  • 実験的な菓子職人/Experimental Confectioner
  • 悲哀の徘徊者/Woe Strider
  • ネイディアの夜刃/Nadier's Nightblade
  • 無情な無頼漢/Ruthless Knave
  • 無情な屍技術師/Ruthless Technomancer
  • さえずる魔女/Chittering Witch
  • ヘイゼルの醸造主/Hazel's Brewmaster
  • 無慈悲な略奪者/Pitiless Plunderer
  • 溜め込む親玉/Hoarding Broodlord
  • 極楽鳥/Birds of Paradise
  • 金のガチョウ/Gilded Goose
  • 裕福な亭主/Prosperous Innkeeper
  • 茨越えの餌あさり/Thornvault Forager
  • 献身のドルイド/Devoted Druid
  • ペレグリン・トゥック/Peregrin Took
  • リスの小走り/Scurry of Squirrels
  • 不屈の補給兵/Tireless Provisioner
  • 小走り樫/Scurry Oak
  • 秘密を知るもの、トスキ/Toski, Bearer of Secrets
  • 永久の証人/Timeless Witness
  • 錯乱した隠遁者/Deranged Hermit
  • 貪欲なるリス/Ravenous Squirrel
  • 悪魔の職工/Fiend Artisan
  • 蔦刈りの導師/Vinereap Mentor
  • 種選奴、カメリア/Camellia, the Seedmiser
  • 根花のヘイゼル/Hazel of the Rootbloom
  • リスの巣の守り手/Drey Keeper
  • どっきりドングリ団/The Odd Acorn Gang
  • 歩行バリスタ/Walking Ballista
  • アカデミーの整備士/Academy Manufactor
  • カルドーサの鍛冶場主/Kuldotha Forgemaster
  • マイアの戦闘球/Myr Battlesphere

インスタント

  • 命取りの論争/Deadly Dispute
  • 切断マジック/Saw in Half
  • 蓄え放題/Cache Grab
  • 新緑の命令/Verdant Command
  • 暗殺者の戦利品/Assassin's Trophy
  • ウィンドグレイスの裁き/Windgrace's Judgment

ソーサリー

  • 群がり庭の虐殺/Swarmyard Massacre
  • 根鋳造の弟子入り/Rootcast Apprenticeship
  • 大渦の脈動/Maelstrom Pulse
  • 戦争の犠牲/Casualties of War

エンチャント

  • 清掃人の才能/Scavenger's Talent
  • 想起の拠点/Bastion of Remembrance
  • 美食家の才能/Gourmand's Talent
  • パンくずの道標/Trail of Crumbs
  • イトリモクの成長儀式/Growing Rites of Itlimoc
  • 獣使いの昇天/Beastmaster Ascension
  • 殺しのサービス/Killer Service
  • 似通った生命/Parallel Lives

アーティファクト

  • 太陽の指輪/Sol Ring
  • 恐竜の遺伝子/Dino DNA
  • 頭蓋骨絞め/Skullclamp
  • ゴルガリの印鑑/Golgari Signet
  • 秘儀の印鑑/Arcane Signet
  • 反発のタリスマン/Talisman of Resilience
  • ヌカコーラ自動販売機/Nuka-Cola Vending Machine
  • アシュノッドの供犠台/Ashnod's Altar
  • 前兆の時計/Clock of Omens
  • 旗印/Coat of Arms
  • 囀り吐き/Chitterspitter

プレインズウォーカー

  • 呪われた狩人、ガラク/Garruk, Cursed Huntsman

土地

  • 8:沼/Swamp
  • 8:森/Forest
  • ボジューカの沼/Bojuka Bog
  • 草むした墓/Overgrown Tomb
  • ゴルガリの腐敗農場/Golgari Rot Farm
  • 憑依されたぬかるみ/Haunted Mire
  • ジャングルのうろ穴/Jungle Hollow
  • ラノワールの荒原/Llanowar Wastes
  • 屍花の交錯/Necroblossom Snarl
  • 汚れた森/Tainted Wood
  • 疾病の神殿/Temple of Malady
  • 黄昏のぬかるみ/Twilight Mire
  • 森林の墓地/Woodland Cemetery
  • 緑ばんだ沼/Viridescent Bog
  • 統率の塔/Command Tower
  • 風変わりな果樹園/Exotic Orchard
  • 祖先の道/Path of Ancestry
  • 不気味な辺境林/Grim Backwoods
  • 群がりの庭/Swarmyard
  • 新緑の地下墓地/Verdant Catacombs

搭載したコンボ

統率者と絡めたコンボ

サワギバがいる状態で

無限マナ/無限ドレイン
  • 巣穴の魂商人+裕福な亭主/ネイディアの夜刃/ズーラポートの殺し屋
無限マナ/条件付きの全除去
  • 無慈悲な略奪者+リストークン2体
  1. 戦場のクリーチャーを対象にしてリストークン2体を生け贄に捧げ、サワギバの起動型能力を起動します。
  2. 1の解決の上に無慈悲な略奪者の宝物生成能力(クリーチャーが死亡する度に宝物生成)が詰まれます。
  3. サワギバの置換能力により、宝物2つとリス2つが出てきます。
  4. まだ1がスタックに詰まれていますが、3で出てきた宝物1つとリス2つを使って1~3の処理が繰り返されます。

プロテクションや呪禁などで無い限り、場にいるクリーチャーを全て壊滅させ、無限宝物が出てきます。

ライブラリーが尽きるまでドロー/半無限マナ

(食物3個の状態で)

  • ヌカコーラ自動販売機
  • ペレグリン・トゥック

旗印による無限トークン

  • 旗印
  • 小走り樫

裕福な亭主がいれば無限ライフも得られます。ネイディアの夜刃/ズーラポートの殺し屋などと無料のサクり台で無限ドレインも可能です。

他、

  • マイアの戦闘球+恐竜の遺伝子+アシュノッドの供犠台
  • 献身のドルイド+ヘイゼルの醸造者

の無限マナなど、使っていて楽しいデッキになりました。

2024年12月、統率者/ボードゲーム3人会メモ。

11月、友人と外で会う機会が無かったので、久しぶりのボードゲーム会となります。

『ウォードクター&K-9 マークI型』は狙ったとおり、1ショットキルが狙え、

ミシュラは『身代わり合成機』と『ゴンティの無限心臓』による無限コンボが狙えました。

その後のボードゲームとして

『ワーリング・ウィッチクラフト』青の一点集中を喰らって3ターンめにゲームが終了。

ドラマ『タイガー&ドラゴン』を見た影響ということで『真打』をチョイス。

作中にも出てきた『明烏』と『芝浜』をかけることに成功したものの、

数え間違い(3枚目以降の数値が14になる)『時そば』により、年末落語会のトリを取られ敗北。

その他、いくつかゲームを実施。負けが多かったものの、充実した時間でした。

『ライザのアトリエ3』DLCクエスト調合例・改。

この記事の補足事項です。

クエスト「クレリアの想い人」は、特性「自由な魂」が付与された薬品を納品します。

当初、

  1. 超純水のマテリアル環「気体」にスカイバブルを入れる→薬の材料
  2. 隠者の軟膏を調合する

手段を執っていました。ですが、スキルツリーの最初の方に出てくる「ヘイズブレス」が遥かにやりやすいので、こちらの手順を紹介です。

調合可能なタイミング

無垢の鍵解禁後の方がやりやすいです。

必須素材

霞石

ランドマーク星見の高台近くにある小岩を斧で採取します。

狼煙草

ランドマーク紅の箱庭にある花から通常採取できます。

スカイバブル

特性付与に使います。ランドマーク尖晶の森から網で採取します。

オプション:水環石

ランドマーク星見の高台近くにある小岩をハンマーで砕きます。(要DLC)

これはリンクコールで使います。

調合

調合メニューから「ヘイズブレス」を選択します。

霞石を入れ、

狼煙草を入れます。

気体スロットにスカイバブルを入れます。

降下2をリンクコールします。「水環石」を代わりに発現。

クレリア地方~ネメド地方を最初に探索する際、全体回復を持つコアアイテムは地味に少ないので重宝します。

残りの効果発現は影響拡大を持つ素材で一気に行いました。

特性に「自由な魂」を忘れずに選択して調合完了。

これで、

  • 比較的省CC
  • 回復効果を持ち
  • 後のクエストにも役立つ

アイテムが完成です。

ボードゲーム『カスカディア』紙ペン版の開封。

今年購入したボードゲームの中でも面白さが特に際立っていた作品『カスカディア』

その紙ペン版が出たので早速入手です。

ダイスやシートなどにより1つに4種類、計8種の紙ペンが遊べるというのも好みです。

内容物は

  • スコアシート
  • 動物記録シート
  • カード2種
  • ダイス

となっています。

ルール確認のついでに遊んでみました。

まだ把握し切れていませんが、しっかりと遊びがいがあります。

snipe-itでのDBマイグレーションエラー(プロフィール画像の更新時にエラー)に対処。

Ubuntu 20.04→Ubuntu24.04にデータ移行を行った資産管理ツールsnipe-it。

その後、バージョンアップを行いましたが、それに伴うDBの不整合が問題でエラーが発生しました。

こちら、メモとして残します。

環境

  • Ubuntu 24.04
  • php 8.3
  • MySQL 8.0.40
  • Apache 2.4
  • Snipe-IT v7.0.12

発生したエラー

自分のアカウントの画像を変更しようとしたところ、500 internal server errorが発生しました。

エラーの特定

  • snipe-itのログディレクトリに移動
cd /home/www-data/snipe-it/storage/logs
  • ログ確認
cat laravel.log |grep ERROR
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'enable_sounds' in 'field list'

プロファイルの編集にこのような機能があったことから、DBのusersテーブルにenable_soundsenable_confetti列が存在しないことが原因で、画像変更時にSQLエラーが発生したと考えられます。

調査

このエラーが原因と考え、まずはsnipe-itのルートディレクトリに移動。

cd /home/www-data/snipe-it

artisan migrateを実行。

sudo -u www-data php artisan migrate

以下のエラーが見つかりました。

SQLSTATE[42S01]: Base table or view already exists: 1050 Table 'accessories_checkout' already exists

対処を行います。

対処

MySQLでの対処

  • MySQLログイン
mysql -u snipeit -p snipeit
  • DB切り替え
USE SNIPEIT;
  • テーブル確認
SELECT * FROM migrations WHERE migration = '2024_07_26_143301_add_checkout_for_all_types_to_accessories';

→ 結果: Empty Set このため、これが記録されていないことが分かりました。

  • 該当テーブルの構造確認
DESCRIBE accessories_checkout;

→ テーブルが既に存在しています。

このことで、マイグレーションをスキップして対応することにしました。

  • マイグレーションスキップ
INSERT INTO migrations (migration, batch) VALUES ('2024_07_26_143301_add_checkout_for_all_types_to_accessories', 1);
  • MySQLログアウト
exit

phpでの対応

  • snipe-itのルートディレクトリ確認
cd /home/www-data/snipe-it && pwd

/home/www-data/snipe-itを確認

  • 改めてのDBマイグレーション
sudo -u www-data php artisan migrate
  • マイグレーション結果
2024_08_06_175114_add_shortcuts_enabled_to_settings_table ......................................................... DONE
2024_08_07_204014_add_play_sounds_to_profile ..................................................................... DONE
2024_08_15_111816_add_confetti_to_users .......................................................................... DONE
2024_08_16_104137_add_due_checkin_days_to_settings ............................................................... DONE

今度はマイグレーションが通ったことを確認です。

  • 結果反映
sudo -u www-data php artisan config:clear
sudo -u www-data php artisan cache:clear
sudo -u www-data php artisan view:clear
  • Webサービス再起動
sudo systemctl restart apache2.service && echo $?

0と表示されれば正常に再起動しています。

対処完了確認

ブラウザでsnipe-itにアクセスし、画像がアップロードされることが確認できたので、対処完了です。

食事と庭園。

日曜日に少し時間ができたので、巣鴨周辺を訪れました。

巣鴨の定食屋。

お刺身のおいしさはもちろん、サイドに頼んだあじフライも絶品でした。

そこから少し歩いて六義園。

ちょうど見頃でしたし、寒さも和らいでいた中で散策に興じることができました。

Redmine View Customizeを用いて、alt属性がついた画像を拡大して表示する。

こちらの記事の応用となります。

のように、alt属性がついた画像をマウスオーバーしたときに

拡大表示させます。

前提

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

手順

画面移動

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

カスタマイズ作成:JavaScript

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

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

  • パスのパターン
  • 空白
  • プロジェクトのパターン
  • 空白
  • 挿入位置
  • 全ページのヘッダ
  • 種別
  • JavaScript

コード

// JavaScript部分
$(document).ready(function() {
$('img[alt]').hover(
function() {
$(this).css({
'transform': 'scale(1.5)',
'transition': 'transform 0.3s ease'
});
},
function() {
$(this).css('transform', 'scale(1)');
}
);
});

// CSS部分
var style = document.createElement('style');
style.innerHTML = `
img[alt] {
transition: transform 0.3s ease;
}
`;
document.head.appendChild(style);
  • コメント
  • 任意「alt画像のホバー表示(javascript)」など
  • 有効
  • チェック
  • プライベート
  • チェックを外す

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

動作を確認します。

上記設定後、チケット詳細などのアイコンが表示されているページに遷移します。

冒頭のようにマウスカーソルを近づけた際に拡大されれば設定は完了です。

Redmine View Cutomizeを用いてアイコンを拡大表示させる。

概要

アイコンの画像にマウスを近づけたとき、

アイコンを拡大表示させるためのView_Customizeのスクリプトです。

前提

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

手順

画面移動

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

カスタマイズ作成:JavaScript

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

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

  • パスのパターン
  • 空白
  • プロジェクトのパターン
  • 空白
  • 挿入位置
  • 全ページのヘッダ
  • 種別
  • JavaScript

コード

$(document).ready(function() {
// gravatarクラスを持つ画像にホバーイベントを追加
$('img.gravatar').hover(
function() {
$(this).css({
'transform': 'scale(1.5)', // 拡大率
'transition': 'transform 0.3s ease' // 拡大のスムーズなアニメーション
});
},
function() {
$(this).css({
'transform': 'scale(1)', // 元のサイズに戻す
'transition': 'transform 0.3s ease' // 縮小のスムーズなアニメーション
});
}
);
});
  • コメント
  • 任意「アイコンのホバー表示(javascript)」など
  • 有効
  • チェック
  • プライベート
  • チェックを外す

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

カスタマイズ作成:CSS

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

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

  • パスのパターン
  • 空白
  • プロジェクトのパターン
  • 空白
  • 挿入位置
  • 全ページのヘッダ
  • 種別
  • CSS

コード

/* gravatarクラスを持つ画像のスタイル */
img.gravatar {
transition: transform 0.3s ease; /* スムーズなアニメーション */
cursor: pointer; /* ポインタを表示 */
}
  • コメント
  • 任意「アイコンのホバー表示(CSS)」など
  • 有効
  • チェック
  • プライベート
  • チェックを外す

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

動作を確認します。

上記設定後、チケット詳細などのアイコンが表示されているページに遷移します。

冒頭のようにマウスカーソルを近づけた際に拡大されれば設定は完了です。

Page 5 of 243

Powered by WordPress & Theme by Anders Norén