2023年の決算として、今年やってよかったことを書いていこうと思う。
地産地消の促進
地産地消自体は3年ほど前からやっている取り組みだが、今年はこれを飛躍的に促進させた。具体的には物を買うときに神戸市産>兵庫県産>京阪神産>近畿地方産>西日本産>国内産>輸入品といった序列で、徹底的な差別化を行うことにした。
これは地域を愛していたいからというのが理由だが、意外な出会いも多く、個人的には満足している。
実際の取り組みとしては以下のようなものがある。
- 醬油をヤマサ醤油(千葉県銚子市)からヒガシマル醤油(兵庫県たつの市)に変更
- ぽん酢をミツカン(愛知県半田市)からカネトシ(兵庫県三木市)に変更
- かまぼこなどの魚肉加工製品を紀文(東京都中央区)からカネテツデリカフーズ(兵庫県神戸市)、ヤマサ蒲鉾(兵庫県姫路市)に変更
- 野菜を全て兵庫県産に変更
- もち大麦を兵庫県産に変更(南あわじ市、福崎町)
- 卵を兵庫県産に変更
- 豆腐とあげを神戸市産に変更
- 餅を兵庫県産に変更(小野市産もち米使用、姫路市製造)
- パスタを兵庫県加古川市産に変更
- 神戸市産(神戸市産大豆・米使用、神戸市内製造)の味噌の利用を開始。これに出会うまでは元々味噌を使ったことがなかった
- まな板を中国産から三重県名張市産に変更(三重県産木材使用)
- 神戸新聞の購読を開始
割と徹底的に変えていると思うが、特に生活面の負担はなく、困ったりはしていない。何故なら大半は農作物で、私はスーパーより八百屋が近く、容易に手に入るためだ。また最寄りのスーパーは兵庫県産品の取り扱いが多く、これもあまり不自由しない理由の一つだ。以前調査のために神戸市内のスーパーを10程視察しているが、こういうスーパーは珍しく、あまりないので運よく恵まれていると思う。この地に住んだのは運命だったのかもしれないと思うほどだ。
米についても変更を検討しているのだが、兵庫県産のあきたこまちが見当たらないので悩んでいる。コシヒカリやキヌヒカリは見かけるのだが…。米だけはあきたこまちに強いこだわりがあるため、これは変更しないかもしれない。あきたこまちは秋田県産以外見かけることがほぼなく、正直絶望的だとは思っている。とはいえ何もかもすべて兵庫県産というのも極端な話なので、これはこれでありだと思っている。
因みに今年変えたわけではないが料理酒はキング醸造(兵庫県稲美町)のものを利用している。同社は料理酒で国内トップシェアを誇るといわれているメーカーで、こういうのが県内にあるのは誇らしい。というか兵庫県は伊藤ハム(西宮市)やUCC(神戸市)、ケンミン(神戸市)、フジッコ(神戸市)などもあり、各社ともに県内生産があるため比較的食品製造に恵まれていると思う。関西にスコープを広げても丸大ハムや日本ハム、ハウス食品、サントリー、日清食品、神戸屋など食品製造が多い。
新聞紙面の購読
今年あたりから神戸新聞の電子版を見るようになったのだが、いっそのこと紙面で見てみるのはどうだろう?新しい発見があるかもしれないと思ったのが発端だ。
実際紙面購読をしてみると、Webより記事が見やすいという発見があった。Webでは記事タイトルくらいしか見れなかったのが紙面では紙を見ただけで一気に情報が見れる。これは利点だった。また毎日新聞を取りに行くので、家から一歩も出ない日がなくなった。大したことではないとはいえ、これも利点だとは思う。
紙面を見るのにはサイトにアクセスしなくていいし、一回とってくれば部屋に転がってるのを読むだけというのもいい。情報量もスマホやPCの画面より多く、思いがけない情報が目に入りやすいのもメリットだ。例えば地域限定の情報や、読者から寄せられた一言など、Webだとアクセスするのに地味に労力のかかる部分も見やすい。神戸新聞にはWebで紙面を読む機能もあるが、私は一般プランで年間契約をしているため、来年になるまでこれは使えないし、多分使えたとしても紙面実物より一覧性は悪い気がするので、紙面は見続けるだろう。
他にも必然的に新聞紙やチラシが大量に手に入るので、おやつを食べるときの下敷きなどにも重宝している。
外部との交流
今年はLT会や勉強会にも出ることができた。これによって自分の考えを外部の人に共有したり、外部の人の考えを聞いたり、評価しあうといったようなことができるようになった。また知らない人に話しかける経験もできたので、こういった場でほかの人に近づくためのスキルも身に着けることができた。
こういったことで持っている仮説を他の人に聞いてもらって評価して貰ったり、他の人の意見を聞くことで、自分を客観的に見る機会を作れるので、来年も継続していきたいと思った。アウトプットとインプットの機会を今より増していきたい感じだ。
参考までに今年は以下の会に参加した。
関西では会自体が多くないので自分で作っていくのも一つのような気がした。
ブートドライブの交換をする時に色々やったので、その記録です。メインはM2SSDの固着ネジの取りはずしです。
内容としてはCrucial P1 CT500P1SSD8JPをSolidigm P44 Pro SSDPFKKW020X7X1に更新しました。
既存SSDの抜去
交換するために既存のSSDを取り外す必要があったのですが、まずここでハマりました。何故かというと、ネジが固着してて回らないんですね…。そしてネジ穴が潰れて終わりました。しかし外せないと困るのでいくつか試してみました。
まずはネジすべり止め液。これを使えばネジ穴が潰れていてもたちまちネジが回るのだとか!
先端部が細くなっていて、ネジ穴だけに上手く差せそうですが実際はM2SSDのネジだと溢れました。ザラザラしてて取り除くのがやや面倒なのでマザボにはこぼさないほうがいいと思います。サラサラしてて割とドバッと出ます。
ネジすべり止め液を差してみたところ。SSDの基板に掛かっていますがとりあえず無事でした。結局これは効果がなく、次の手を探ることに…。
そこで見かけたのが、なめたネジはずし精密用 なめたネジはずし精密用ハンドル付M1~2.6 No.3610-N)。これなら基板にダメージを与えずにネジを取り去れそうですが、近くに売っているところがなく断念しました。
次に浮かんだのがネジを外す道具として定評のあるネジザウルスです。ネジを掴んで回すのでネジ穴が潰れてても原理上問題ありません。ただ、背の低いM2SSDのネジを掴めるのかと、回してる時に基板をこすって壊さないかが心配でしたが、外せないとどうしようもないですし、試してみないことには解らないということもあり、一か八かの掛けで試してみることにしました。幸いこいつはヨドバシにあったのでその日のうちに買いに行きました。(翌日まで待つとかできない!
神戸に住んでるので頑張って梅田まで出張って買ってきました。(しかし、この後買い忘れに気づきもう一回行くハメに…
という訳でネジザウルスを買ってきました。
結果としてはM2SSDのネジの頭を掴むことができ、特に基板にダメージも与えずネジを外すことができたので良かったです。
ブートドライブのクローン
今使ってるマザボはM2SSDスロットが2つあり、片方がブートドライブになっているため、ドライブをクローンして新しいドライブをブートドライブとして使えるようにしていきます。残念ながらフリーのクローンソフトにめぼしいのがなかったのとDDコマンドを使ってまでやる気が出なかったので、かつてお世話になったAcronis True Imageの後継ソフトであるAcronis Cyber Protect Homeを頼ることにしました。
手順は簡単でツール → ディスクのクローンの作成を選び、表示されるウィザードに沿って進めるだけです。
日本語が怪しくてやや分かりづらいですが一番上のやつで行けました。
NVMeSSDからNVMeSSDへのクローンだったので体感30秒くらいで終わりました。
この後は新M2SSD抜去 → 元々差していたM2SSDを挿入 → 元々のブートM2SSDを抜去 → 新M2SSDに置換という手順で更新を完了しました。M2SSDの交換はPCケースを倒した状態でグラボも外してないと出来ないので、クローン作業との兼ね合いで結構面倒でした…。もう当分やりたくない作業です。
何はともあれブートドライブの容量を500GBから2TBに拡張できたのは良かったです。先日グラボを更新したのもあり、新鮮な気分です。
幾らか詰まった箇所があったので、その備忘録も兼ねて書いておく
前提条件
- Ubuntu Desktop 20.04.6 LTS -> Ubuntu Desktop 22.04.2 LTS
- ターゲットは物理マシンでモニタとキーボードは未接続
- 作業はリモートで実施
実行マシンのスペック
| デバイス | 製品 | 諸元 |
|---|---|---|
| CPU | AMD Athlon 200GE | 2C4T 3.2GHz Vega3 TDP35W |
| MEM | G.SKILL F4-2666C19D-16GNT | DDR4-2666 8GB * 2 |
| SSD | Crucial P1 CT500P1SSD8JP | NVMe SSD 500GB |
| ネット回線 | フレッツ光ネクストスーパーハイスピードタイプ隼 | 実効速度 360Mbps |
手順
この作業では設定ファイルが勝手に更新されることはない
アップデート方法
事前にSSHを2本立てておくと作業しやすい
- SSHの認証鍵がRSA1の場合、ED25519など強力な鍵に置き換えておく
- これをしないと再起動後SSHで繋がらなくなる
- 次のコマンドを叩く
sudo apt update -y && sudo apt upgrade -y && sudo do-release-upgrade
トラブルシューティング
手順通りやっていれば遭遇しないが、ハマりポイントだったので残しておく
Software Updateでアップグレードできない
日本語表示だと「ソフトウェアの更新」になるが、アップグレードボタンを押してもダイアログが消えるだけで何も起きない
これは次のコマンドを叩くことで回避出来る
sudo apt update -y && sudo apt upgrade -y && sudo do-release-upgrade
再起動後にRLoginから接続しようとするとエラーになる
SSH2 User Auth Failure "publickey" Status=0004
Send Disconnect Message...
publickey(ssh-rsa)
上記のエラーが出る場合、SSH認証鍵をRSA1を超える強度のものにする必要がある。XRDPがあればXRDPから復旧できるが、ない場合はモニタとキーボードを繋いでどうにかするしかない
参考までに/var/log/auth.logには以下のログが出る状態
sshd[7330]: userauth_pubkey: key type ssh-rsa not in PubkeyAcceptedAlgorithms [preauth]
アップグレード所感
セキュリティ面に改善がされているのは良かった(SSHの話)。またGUI周りのパフォーマンスが良くなったのか、キビキビ動くようになった気がする
後はこんなしょぼいスペックも中々ないだろうなというので貼っておく。主にAthlon 200geの部分の話
公式のリファレンスが情報少なすぎるのでメモ
特にこれというフォーマットはなく、ある程度幅広い書式があるようで、公式のドキュメントを見る限り、多少のブレはよしなに解釈してくれるっぽい?
この記事ではoperatorなどの用語が登場しますが、これは私が勝手に名付けたものなので、特に公式の用語ではありません
手組するの面倒なので雑にコマンド生成ツールを作りました。
https://tool.lycolia.info/slack-remider-creator
登録
基本
- フォーマット
/remind [宛先] [メッセージ] [実行日時]
- 例
/remind #random "hoge piyo fuga" at 10:00 every monday, sunday
書式
宛先
| 宛先 | 意味 |
|---|---|
| me | 自分 |
| @someone | メンション |
| #channel | チャンネル |
メッセージ
"hoge piyo fuga"のように書けるが、hoge piyo fugaでも一応通じる
ダブルクォートで囲む場合、改行も利用可能
実行日時
<oparator> <repeat-operator><oparator>で実行日時を設定<repeat-operator>で繰り返しを設定
- 例
at 10:00 every monday, sunday
oparator
| オペレーター | 例 | 意味 |
|---|---|---|
| in <value> (seconds \ | minutes \ | hours) |
| at <HH:mm> | at 1700 | 指定時刻に実行 |
| on <yyyy-MM-dd HH:mm> | on 2023-10-10 09:15 | 指定日時に実行 |
repeat-operator
every <operator>- 例
every monday, sunday
| operator |
|---|
| day |
| weekday |
| sunday, monday, tuesday, wednesday, thursday, friday, saturday |
削除
/remind listでリスト表示して消す
一覧
/remind list
Twilogには特定ツイートを一括で削除する機能がなかったので適当に作りました。
ページネーション機能はないので暇な人作ってください。
事前にページネーションリンクを取得して各ページのHTMLを取得してID引っこ抜けばできると思います。多分
/**
* これは何?
* Twilogで現在表示中のページのツイートをすべて削除します
* 事前に削除対象のツイートを日付選択や検索などで表示した上で実行します
* ページネーション機能はありません
*
* 使い方
* このスクリプトをChromeのDevtoolsのConsoleにコピペして実行します
* 複数ページある場合はページをリロードして同様に操作します
*/
const getSession = () => {
const scr = [...document.getElementsByTagName('script')].find(v => v.text.match(/j-delete-tweet.rb/) !== null)
const mat = scr.text.match(/j-delete-tweet.rb\?c=(.+?)&.+&token=(.+)"/)
return {
c: mat[1],
token: mat[2]
}
}
const getDeleteIdList = () => {
return [...document.getElementsByClassName('tl-del')]
.map((el) => {
const mat = el.children[0].onclick.toString().match(/delete_tweet\('(.+?)','(.+?)',/)
return {
date: mat[1],
status_id: mat[2]
}
}
)
}
const createDeleteRequest = (c, token) => {
return async (date, statusId) => {
return fetch(`https://twilog.org/j-delete-tweet.rb?c=${c}&date=${date}&status_id=${statusId}&token=${token}`)
}
}
const session = getSession()
const requestDelete = createDeleteRequest(session.c, session.token)
const deleteIdList = getDeleteIdList()
let index = 0;
setInterval(async () => {
if (index < deleteIdList.length) {
const del = deleteIdList[index]
const result = await requestDelete(del.date, del.status_id)
console.log(`${index} / ${deleteIdList.length}`, result)
++index
}
}, 1000)


















