diff --git a/bun.lockb b/bun.lockb index ce232e33..981ab390 100755 Binary files a/bun.lockb and b/bun.lockb differ diff --git a/package.json b/package.json index 49507543..6d0ca8cc 100644 --- a/package.json +++ b/package.json @@ -51,6 +51,7 @@ "concurrently": "8.2.2", "eslint": "8.56.0", "eslint-config-next": "14.1.4", + "iconv-lite": "0.6.3", "jsdom": "24.1.0", "prettier": "3.2.5", "textlint": "14.0.4", diff --git a/scripts/fetch-ogp.ts b/scripts/fetch-ogp.ts index d79eed18..0a8a2990 100644 --- a/scripts/fetch-ogp.ts +++ b/scripts/fetch-ogp.ts @@ -1,4 +1,5 @@ import { promises as fs } from 'fs' +import { decode } from 'iconv-lite' import { JSDOM } from 'jsdom' const files = await fs.readdir('./src/contents/posts') @@ -17,8 +18,6 @@ const urls = ( ) ).flat() -console.log(urls) - type Data = { [url: string]: { title?: string | null @@ -27,9 +26,29 @@ type Data = { } } +const getCharset = (res: Response): string => { + const defaultCharset = 'utf-8' + + const contentType = res.headers.get('content-type') + if (contentType == null) { + return defaultCharset + } + + const regex = /charset=([^;]+)/i + + const matches = contentType.match(regex) + if (matches && matches[1]) { + return matches[1].toLowerCase() + } + + return defaultCharset +} + const fetchOgp = async (url: string): Promise => { const res = await fetch(url) - const html = await res.text() + const buf = await res.arrayBuffer() + const html = decode(Buffer.from(buf), getCharset(res) || 'utf-8') + const dom = new JSDOM(html) const data = { diff --git a/src/components/mdx/CardLink.tsx b/src/components/mdx/CardLink.tsx index c0c6b8e8..6077e64d 100644 --- a/src/components/mdx/CardLink.tsx +++ b/src/components/mdx/CardLink.tsx @@ -54,17 +54,24 @@ export const CardLink: React.FC = ({ href }) => { gap={6} > {ogp.image && ( - Link preview image + display="flex" + alignItems="center" + justifyContent="center" + > + Link preview image + )} - + {ogp.title} diff --git a/src/contents/posts/202406-review.mdx b/src/contents/posts/202406-review.mdx new file mode 100644 index 00000000..7a88f464 --- /dev/null +++ b/src/contents/posts/202406-review.mdx @@ -0,0 +1,144 @@ +--- +title: '2024 年 6 月 振り返り' +date: '2024-07-10T00:58:28+09:00' +--- + +もう 7 月に入って一週間以上経つが、6 月の振り返りをしていく。端的に総括すると音ゲー再燃の月だった。 +先月の振り返り: [2024 年 5 月 振り返り | fohte.net](/blog/posts/202405-review) + +# ゲーム + +## DDR + +6 月の最大の変化は DDR を始めたこと。DDR はずっと認知していたけど、運動自体に苦手意識があってやっていなかった。が、さすがにたるんだ体をなんとかせねばいけないと一念発起して DDR をやり始めた。ジムに行くことも考えたけど、結局音ゲーが一番楽しいしゲームセンターに行く習慣もあったので、運動習慣をつけるハードルとしては一番低かった。 + +いまはだいたい一週間に 5 日くらい、1 日 3 クレほどやっている。最高クリア難易度は 15。15 ギリギリクリアできるかできないか程度。 +エクササイズくらいの感覚なのであまり明確な目標は立てていないけど、年内に 19 なにかクリアできたらいいなあとはぼんやり思っている。よくわかってないのでめちゃくちゃハードル高い目標かも。 + + + +### DDR 用の靴とウェアがチートアイテムな件 + +DDR はもはやスポーツなのではと思うくらい疲れる。特に脚の脛あたりが苦しい。単に運動不足というのもあるだろうけど、靴とコンプレッションウェアを買ってみた。するとこれが劇的に良かった。もはや Pay to Win だ。 + +靴はスニーカーだったので厚底のランニングシューズに買い替えた。厚底かつグリップも効くのでやりやすい。パネルの段差がほとんど気にならなくなるし、パネルを押す感覚も頑張って足で押している感じから足を乗せるだけに変わった。 +自分の場合は足幅が広いらしく、4E でちょうどフィットする靴が見つけられたのも大きい。あまりのフィット感に靴を履きたくなる。ずっとかかとの靴擦れに悩まされていたのもあり、ここ最近で最も買って良かったものだと感じている。 + + + +コンプレッションウェアは想像よりもはるかに効果があって驚いた。屋外スポーツをしている人がよく着ているという印象しかなく、暑そうだし日焼け止めなのかなくらいの解像度だったのだが、実際に着用して DDR をしてみたらチートのように体が軽く感じた。脛の痛みを全然感じなくなったのと、プレー後の疲労が小一時間もすれば何もなかったかのように回復するようになった。 +全然原理を理解しておらず感覚でものを言うのだが、密着させることで筋肉が無駄に動くのを抑制して疲労を軽減させているのかなと感じた。 +また別の効果だと、固有受容感覚 (Proprioception, 自身の体がどこに位置しているのかを把握する感覚) が強化されるという研究があるらしい [^proprioception]。確かに感覚的にコンプレッションウェアを着ていない状態よりも自分の体をコントロールしやすく感じる。 +ただゲーセン行くだけなのにガチで運動する服装で行くのは若干の恥じらいがあるけど、そんなことが気にならなくなる程度には効果があるので、日々の DDR に欠かせないアイテムになった。 + +[^proprioception]: [コンプレッションウェアは本当にパフォーマンスとリカバリーに役立つのか?|JAPAN WELLNESS INNOVATION](https://note.com/jwi/n/nd0276c2a1bcf) + + + + +## IIDX + +DDR を始めたついでにまたやり始めた。DDR のすぐ近くに置いてあるので、なんとなくやってみたらこれがまた面白かった。DDR を 3 クレほどプレーして生まれたての子鹿になったあとに IIDX をやる習慣がついた。 + + + +いまはかなり面白くて、全盛期ほどまではいかないもののそれなりの頻度でプレーしている。面白いと感じる要因はいくつかある。 + +- 環境が改善されていつでも連コ (待ちなしでプレー) できるようになった +- なにかに追われるかのようにプレーする必要が無くなった + +前者については、1 年以上プレーしていない間に環境が変わっていた。筐体数が 2 倍ほどになって、以前のように常に混みすぎて待たないとプレーできず、ただ時間がなくなるだけという悲しい思いが減って嬉しい。とはいえゲーセンからすると稼働率 100 % を維持できなくなったのは厳しい気がしているし、それによっていつか筐体数が減るのではないかと危惧もしている。遊べるときに遊んでおきたい。 + +後者については、特に HEROIC VERSE と CastHour あたりではライバルと切磋琢磨したり大会に追われたりととにかく何かに追われてプレーしていることが多かった。大会はかなり大変で、普段プレーしないような譜面を対策のために何度もプレーする必要があった。対策に重点を置くので、必然的に好き・得意な譜面よりも苦手な譜面を何度もプレーすることになる。曲を聴き込んで譜面研究もして連日ゲーセンにこもるのは刺激的でもあり大変だった。 +いまではその苦悩から解放されて、ライバル登録もせず大会出場を目標にすることもなく自由気ままにプレーできていてとても面白い。BPI も見ていない。アリーナもしない。自己ベストと自己歴代だけは見ているけど、そのくらい。好きな譜面を好きなタイミングで好きなだけプレーできるというのはとても楽しく、初心に帰ったような気持ちで日々 IIDX を楽しんでいる。 + +# エンジニアリング + +## 登壇 + +登壇は落ち着いた。3-5 月の期間では 8 回も登壇やらのイベントをこなしていたらしいが、6 月は落ち着いて登壇はしなかった。というよりいろいろ大きめのカンファレンスに Proposal は出していたのだが、全て落ちてしまった。まだまだ Proposal を通すという観点では実力不足らしい。 +幾度とない登壇で燃え尽きた感は否めないけど、登壇は得られるものが多いし [^登壇メリット] 、まだ登壇を始めとする発信は続けたいなと思っているので、怠らずにやっていきたい。 + +[^登壇メリット]: [RubyKaigi で LT 初登壇したきっかけと感想 - Speaker Deck](https://speakerdeck.com/fohte/rubykaigi-te-lt-chu-deng-tan-sitakitukaketogan-xiang) + +## yabai + +[yabai](https://github.com/koekeishiya/yabai) という macOS でタイル型ウィンドウマネージャー的なことをシミュレートするツールを使い始めた。以前 Ubuntu をメイン OS として使っていたときに i3wm を使っておりとても気に入っていたのもあって、便利に使えている。 + +Ubuntu → macOS に変えてからはそんなにタイル型ウィンドウマネージャーの必要性は感じていなかったのだが、最近自宅のモニターをウルトラワイドモニターにしたこともあって、広い画面領域を有効活用するためにウィンドウをいい感じに整理してくれるツールを探していた。レイアウト調整用のスクリプトを書いたりもしたが、いまいち柔軟性に欠けたりして、手に馴染むものがなかった。そこでタイル型ウィンドウマネージャーなら全てを解決してくれるのでは、という期待から使ってみたというところ。 + +いまのところ、ウルトラワイドモニターを活用する幅が広がって割と手に馴染んでいる。ウィンドウを雑に垂直方向に 3 分割できるし、水平方向にも分割しやすくて便利。基本的に以下のようなウィンドウレイアウトにしていて、ここにウィンドウが新しく生えたら縦に 4 分割されたり中央が水平 2 分割されたりという感じ。 + +```text ++-----------------+-----------------------------+-----------------------+ +| | | | +| Memo | | Browser or | +| | Terminal or | Terminal | +| | Browser | | ++-----------------+ +-----------------------+ +| | | | +| Calendar | | ChatGPT App | +| | | | +| | | | ++-----------------+-----------------------------+-----------------------+ +``` + +いまの設定は dotfiles に置いているので参考までに。 + +- yabairc: https://github.com/fohte/dotfiles/blob/4144fce85406465f10a3dda41bb82eabe8a2f1cd/config/yabai/yabairc +- yabai のショートカット (Hammerspoon): https://github.com/fohte/dotfiles/blob/4144fce85406465f10a3dda41bb82eabe8a2f1cd/config/hammerspoon/rc/yabai.lua + +# コンテンツ + +⚠️ ここからはネタバレが含まれる可能性があります ⚠️ + +## 無職転生 2 期 (アニメ) + + + +1 期も最高だったが 2 期もとにかく最高だった。シルフィとの微笑ましい生活もよかったが、ロキシーとの再会やルーデウスの家族愛や絶望が存分に描かれていてとにかく良かった。登場人物が皆いいやつすぎる。全員いい人なんだけど、パウロが特に良きパパすぎた。いま 1 期を見返すとそれはもう格別の良さがありそう。 + +テーマはよくある (最近はブームが落ち着いた?) 異世界転生なろう系だけど、ただ主人公が無双するだけではなく後悔や絶望を味わいながら、そこから這い上がり幸せを掴み取っていく展開が本当に良い。自分が人生で見た中で一番好きな作品がリゼロなのだけど、それと肩を並べるほどに好きな作品だ。まだ見ていない人は 1 期からぜひ見てほしい。 +3 期待ってます。 + +## アルマ (漫画, 完結済み) + + + +全 4 巻。自分が好きなポストアポカリプス系 SF 作品。義人と呼ばれるロボットに支配された世界で、数少ない人間が抵抗し人間の世界を取り戻す、という物語。 +主人公であるレイが孤立した状態から、周りを巻き込みながら義人と人間の対立と衝突を解決していく展開が面白かった。サクサクと物語が進んでいき、話全体が綺麗にまとまっているという印象。絵も綺麗だし、非の付け所がない良い作品だった。ちゃんとネタばらしも用意されていて、読後感も良い。最終巻でのネタばらしは想像の斜め上をいく内容だったので、ぜひ読んでほしい。 + +## 菌と鉄 (漫画, 未完結) + + + +現在 5 巻まで発売されている未完結作品。これまたポストアポカリプス系 SF 感がある。閉鎖空間で訓練を受けるダンテという主人公が外の世界を知り、世界を牛耳る存在を倒すために仲間たちと奮闘する物語。 +戦闘! 仲間! みたいな王道漫画のような要素もありつつ、突然のポストアポカリプス系 SF 要素があり、そしてそれらがうまく融合して伏線回収されていくのが特に面白いと感じたポイント。読み進めていくにつれて見えていなかった伏線が回収され、そういうことだったのかと膝を打つような展開が続いていくのが面白い。 +続きが楽しみな作品。 + +## 恋する寄生虫 (漫画, 完結済み) + + + +全 3 巻。ひじりという不登校の少女と高坂という無職で潔癖症の青年のラブコメ (のようなもの)。タイトルにある通り「寄生虫」がこの物語の主軸。人に寄生するというのがミソ。寄生された上で、自分の在り方や人との関わり方を探っていくような作品。 +全体を通して面白かった。くどさがなくちょうどよくまとまっている作品で、謎や伏線が小気味よく回収されていくのが特に良かったポイント。設定も斬新に感じた。ラブコメ要素が少しあるミステリアスな作品、という印象だった。個人的にはあと 1, 2 巻長くしてラブコメ要素や日常的な要素が増えていればより読後感が良かったかなと思うが、3 巻で綺麗にまとまっているのもそれはそれで良かった。 + +# 生活 + +## 自炊 + +自炊 (SP BEGINNER) を始めた。スーパーで適当な海鮮を買ってきてご飯の上に乗せるだけの簡単なお仕事。 +いままでは完全栄養食だったり Uber Eats だったり nosh だったりに頼り切りだったのだが、何かを食べたいと思ったときに絶妙に食べたいものが見つからずに若干困っていた。それなら料理を自分で作れば良いのでは? とふと思い立って、簡単なところから料理とは言いがたいが雑などんぶりの自作から始めた。市販のキーボードに良いものがないから自作する、みたいなノリ。自分が好きなものを好きなように味付けして好きなだけ食べられるという体験が良い。 +自分は賞味期限管理が苦手なので、凝った料理はまだまだできなさそう。そのうち気合が生まれたらやりそう。やれたらやる。 + +## CHILL OUT + + + +chill する (落ち着かせる) ためのドリンク。割と有名なのかな。エナジードリンクの逆のドリンクだと思っている。 +chill するための作用は正直懐疑的なのだが、単純にジュースとして美味しい。味は酸っぱさがないグレープフルーツジュースという感じ。CHILL OUT ゼログラビティであれば 0 kcal なので無限に飲んでも罪悪感がない。風呂上がりに冷えたジュースを飲んでぼーっとしているとかなりリラックスできて結果的にめちゃくちゃ chill できる。CHILL OUT の効果なのかは知らない。 +chill しきってベッドに横たわって熟睡するのが最近のナイトルーティン。 + +## 入浴剤 + +浸かる CHILL OUT (?)。入浴する習慣はあるものの入浴剤を使う習慣は全くなかったのだが、スーパーで良い香りが気になってなんとなく買ってみたらハマった。香り以外にも効能があるようだが、香りでリラックスできて最高に chill できる。入浴しながら良い香りの中で Kindle で漫画を読むのが最近の趣味。 diff --git a/src/data/ogp.json b/src/data/ogp.json index cc159925..28c0b9e7 100644 --- a/src/data/ogp.json +++ b/src/data/ogp.json @@ -30,5 +30,46 @@ "https://gumichoko.hatenablog.com/entry/2019/07/26/230937": { "title": "【考察】おやすみプンプンにおける「黒点」とは何だったのか - 雲を掴むような", "description": "「おやすみプンプン」は浅野いにおが2007年からヤングサンデーで連載(2008年のヤンサン休刊に伴いその後はビックコミックスピリッツに移った)された全13巻の作品で、どこにでも居るような男の子、プンプンの半生を描いた物語です。 この作品はよく「鬱漫画」として紹介される事が多いです。 確かにファムファタル・自意識・人間関係・生死・愛、といった重く苦しいテーマを取り扱っている為、読んでいて苦しくなってしまう場面というのは往々にしてありますし、途中で挟まれるペガサス合唱団の話なんかも意味不明で「なんのこっちゃ」といったところで… よくわかんないけど鬱漫画って感じ…と、作品を読み終えて評価している人は…" + }, + "https://amzn.to/4cy4Mho": { + "title": "Amazon | UA Charged Pursuit 3 EX WIDE | ランニング", + "image": "https://m.media-amazon.com/images/I/51NAfSLsnUL._AC_SY500_.jpg" + }, + "https://amzn.to/3XV0LyQ": { + "title": "Amazon.co.jp: [2XU] ツータイムズユー PWXコンプレッション ロングスリーブトップ MA6398A 着圧 メンズ トレーニング BLK/SIL M : ファッション", + "image": "https://m.media-amazon.com/images/I/51EmrXYnR6L._AC_SY445_.jpg" + }, + "https://amzn.to/4eNv40u": { + "title": "Amazon | [アンダーアーマー] UA ISO-CHILL LEGGINGBlack LG | コンプレッションタイツ 通販", + "image": "https://m.media-amazon.com/images/I/41Ba-JfaipL._AC_SX385_.jpg" + }, + "https://www.amazon.co.jp/gp/video/detail/B0C9PD3KCL": { + "title": "Amazon.co.jp: 無職転生Ⅱ ~異世界行ったら本気だす~を観る | Prime Video" + }, + "https://amzn.to/3Wg0t4s": { + "title": "Amazon.co.jp: アルマ 1 (ヤングジャンプコミックスDIGITAL) eBook : 三都慎司: Kindleストア", + "image": "https://images.amazon.com/images/P/B08216HYZL.09_SL110_.jpg" + }, + "https://amzn.to/4eU91Fy": { + "title": "Amazon.co.jp: 菌と鉄(1) (週刊少年マガジンコミックス) eBook : 片山あやか: Kindleストア", + "image": "https://images.amazon.com/images/P/B09836CQLT.09_SL110_.jpg" + }, + "https://amzn.to/3WdoZ6l": { + "title": "Amazon.co.jp: 恋する寄生虫 (1) (角川コミックス・エース) eBook : ホタテユウキ, 三秋 縋, しおん・ホタテユウキ: Kindleストア", + "image": "https://images.amazon.com/images/P/B07KBYMX3Y.09_SL110_.jpg" + }, + "https://amzn.to/3S2lVY9": { + "title": "Amazon.co.jp: CHILLOUT(チルアウト) リラクゼーションドリンク 250ml (ゼログラビティ, 30本) 炭酸 炭酸飲料 カロリー0 ゼロカロリー 糖質0 リラックス ノンカフェイン ストレス 逆 エナジードリンク クールダウン くつろぎ GABA まとめ買い 缶 : 食品・飲料・お酒", + "image": "https://m.media-amazon.com/images/I/612zsqXXylL.__AC_SX300_SY300_QL70_ML2_.jpg" + }, + "https://jp.2xu.com/products/new-pwxcomp-longsleeve-ma6398a-blk-sil": { + "title": "【NEW】PWXコンプレッション ロングスリーブトップ MA6398A BLK/SIL", + "description": "上体に負荷がかかるスポーツでの姿勢強化ならびに体幹安定に最適。 強力で軽量な段階着圧素材‐PWX‐を使用し、上体の筋肉をサポートするため重量上げ、バスケットボール、サッカー、ランニングなどマルチなスポーツ競技に理想的なアンダーウエア。柔軟性があり動きやすいながら上体各所の筋肉のブレを抑制する事で体幹が安定しバランス良い体のポジショニングをサポート。その結果、運動パフォーマンスをUPさせると共に段階着圧によるホールド性能が筋肉の疲労軽減をもサポート。 背中中央と脇の下のパネルが空気の流れを約200%改善し、汗の蒸発を促進し、最適なパフォーマンス温度を維持します。全てのアスリートに理想的なコンプレッションウエアです。 生地構成:PWX ", + "image": "http://jp.2xu.com/cdn/shop/products/MA6398a_BLK-SIL_03.jpg?v=1661760946" + }, + "https://mushokutensei.jp/": { + "title": "TVアニメ「無職転生 ~異世界行ったら本気だす~」公式サイト", + "description": "「無職転生」第3期制作決定!第2期各種配信サービスで好評配信中!34歳の無職・ニートの男が剣と魔法の異世界に転生。「ルーデウス・グレイラット」として、前世の経験と後悔を糧に今度こそ本気で生きていく、壮大な大河ファンタジー!", + "image": "https://mushokutensei.jp/wp-content/themes/mushoku_re/img/common/ogpimg.jpg" } }