<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <title>らるるの自宅と職場を往復する人生＠それをすてるなんてとんでもない！</title>
<link rel="alternate" type="text/html" href="https://www.rarul.com/mt/" />
    <link rel="self" type="application/atom+xml" href="http://www.rarul.com/mt/atom.xml" />
    <id>tag:www.rarul.com,2013-08-14:/mt//1</id>
    <updated>2026-08-05T13:03:41Z</updated>
    <subtitle>トラックバック・コメントとも無効にしています。
参考になればAmazonアフィから何か買ってやってください(パソコンのベストセラーへ)</subtitle>
    <generator uri="http://www.sixapart.com/movabletype/">Movable Type Pro 7.9.0</generator>

<entry>
    <title>令和時代のスクリプトからBBルータにアクセスする方法</title>
    <link rel="alternate" type="text/html" href="http://www.rarul.com/mt/log/2026/08/bb.html" />
    <id>tag:www.rarul.com,2026:/mt//1.1079</id>

    <published>2026-08-05T12:59:38Z</published>
    <updated>2026-08-05T13:03:41Z</updated>

    <summary>● 背景 2010年とかそれ以前は、いわゆる一般家庭向けのルータ、BB(ブロード...</summary>
    <author>
        <name>らるる</name>
        
    </author>
    
    
    <content type="html" xml:lang="ja" xml:base="https://www.rarul.com/mt/">
        <![CDATA[<p>● 背景<br />
2010年とかそれ以前は、いわゆる一般家庭向けのルータ、BB(ブロードバンド)ルータは、設定管理画面にアクセスするのに、HTTP Basic認証を使っていた。ので、curlなどのコマンドを使って一発でいろいろできた。<br />
2010年中ばからは、さすがに HTTP Basic認証はないだろうということで、ID/PASSWORDをPOSTしてセッションクッキーをもらってアクセスするものが増えてきた。ので、例えば下記の記事のように、Cookieを保持するHTTP Clientを動かして対応することになる。<br />
AndroidスマホでWi-Fiルータを定期再起動！Termux＋Pythonで自動化<br />
<a href="https://qiita.com/kamajiro/items/41d14f92c407aa06c087">https://qiita.com/kamajiro/items/41d14f92c407aa06c087</a></p>

<p>● この記事のお題<br />
たまたま使うことになった <a href="https://www.buffalo.jp/product/detail/wsr-1500ax2l.html">BUFFALOのWSR-1500AX2L</a> は、さらにもう一歩踏み込んでいて、セッションIDやセッションクッキーはもちろん必要として、パスワードをPOSTするときにクライアントで暗号化して送る必要がある、という中身になっていた。スクリプトなどから利用しようと思った場合に、もう一段階しきいが高くなった。</p>

<p>● 実装の中身<br />
作ったスクリプトがあまりにも汚いので、文章でのみメモっておくことにする<br />
- 1) Cookieをtmpで保持するHTTP clientを作る<br />
- 2) /login_time.html へ GET でアクセスして session_num を記録する<br />
- 3) /login.html へ、下記を添えてPOSTする<br />
----- nosave_Username - ユーザID<br />
----- nosave_encryptedPassword - 後述する<br />
----- MobileDevice - 0 固定でいい<br />
----- nosave_session_num - 2)で記録したもの<br />
- 4) /index.html へ GET でアクセスして sessionID を記録し、以後アクセスするときの Cookie に追加する<br />
- 5) 例えば /info.html へアクセスすれば、WAN側のIPアドレスなどの機器情報を取得できる</p>

<p>● nosave_encryptedPasswordの補足<br />
ルータはクライアントに jsencrypt.min.js を配信することで、クライアントがログインするときにクライアントにパスワードを RSA暗号(PKCS#1 v1.5 パディング) で暗号化させてからPOSTさせる。公開鍵は login.html に固定値でベタ書きされている。パディングありの方式なので、同じ文字列を同じ鍵で暗号化しても毎回異なる結果を得るが、秘密鍵を持つ側は復号化すればそれらが同じものであると判断できる。つまり、1回ChromeブラウザなどでログインしてそのときのPOSTのペイロードをダンプして記録しておけば、スクリプトからは毎回この同じダンプしたものを使うだけで良くなる。なので、先の 3) について、正しくダンプして記録しさえすれば nosave_encryptedPassword は固定値で問題ない。</p>]]>
        
    </content>
</entry>

<entry>
    <title>状態が変化したことを通知する設計の憂鬱</title>
    <link rel="alternate" type="text/html" href="http://www.rarul.com/mt/log/2026/07/post-198.html" />
    <id>tag:www.rarul.com,2026:/mt//1.1078</id>

    <published>2026-07-03T09:16:35Z</published>
    <updated>2026-07-03T09:19:48Z</updated>

    <summary>● お題 状態の値を持つオブジェクトの値が変わったらイベント通知する仕組みを用意...</summary>
    <author>
        <name>らるる</name>
        
    </author>
    
    
    <content type="html" xml:lang="ja" xml:base="https://www.rarul.com/mt/">
        <![CDATA[<p>● お題<br />
状態の値を持つオブジェクトの値が変わったらイベント通知する仕組みを用意したときにありがちな意見</p>

<p>● A) 同期的に取得する手段も欲しい<br />
まぁわかる</p>

<p>● B) イベント通知受けを開始したら必ず今の状態を初回通知してほしい<br />
Aとは反対方向の要望だけど、多人数開発だとよくある</p>

<p>● C) a->b->cと連続して変化したときbの通知も飛ばさないでほしい<br />
「状態」のはずなのにこういう要望が出てくると雲域が怪しくなる</p>

<p>● D) イベントはキューに溜まるのか/最大何個溜まるのか/あふれたらどのイベントが消えるのか<br />
Cを許すとこのようなことを言われてしまい実装の厳密性が問題になってくる</p>

<p>● E) イベントが溢れたことを検知できるようにしてほしい<br />
Dが出てくると当然こうなってくる</p>

<p>● F) イベントが溢れたときに何をすればよいのかを教えてほしい<br />
知らんがな、イベントを受けて何やりたいか次第だから、イベントを送る側が考えることじゃないはず</p>

<p>● G) a->cと変化しないでほしい、必ずbを経由してほしい<br />
なぜ外部の都合でこちらの内部状態の設計を変えなければいけないのか、これを許すと「bイベントを補間して送る」ような例外の実装をせざるを得なくなる</p>

<p>● H) イベント通知するとき1つ前の状態も添えてほしい<br />
自身の状態遷移の管理すらこちら側に押し付けてくるのは勘弁してほしい</p>

<p>● I) イベントハンドラ内からAの同期を呼ぶと届いたイベントとは異なる状態が取れる<br />
イベントが届いたタイミングとイベンドハンドラが実行されたタイミングが離れれば、そりゃそうなるよね</p>

<p>シンプルなお題ですらこうなるのだから、大人数が関わる開発ではわかりやすくて勘違いしにくい設計が好まれることになる。</p>]]>
        
    </content>
</entry>

<entry>
    <title>「100円ショップのガジェットを分解してみる!」読んだ</title>
    <link rel="alternate" type="text/html" href="http://www.rarul.com/mt/log/2026/05/100.html" />
    <id>tag:www.rarul.com,2026:/mt//1.1077</id>

    <published>2026-05-15T18:06:42Z</published>
    <updated>2026-05-15T18:09:51Z</updated>

    <summary>Amazonアフィリンク ダイソーやセリアで売ってる電子機器を分解し、中の構造や...</summary>
    <author>
        <name>らるる</name>
        
    </author>
    
    
    <content type="html" xml:lang="ja" xml:base="https://www.rarul.com/mt/">
        <![CDATA[<p><a href="https://amzn.to/4eL5dJ6">Amazonアフィリンク</a></p>

<p>ダイソーやセリアで売ってる電子機器を分解し、中の構造や回路やチップをリバースエンジニアリングする、という内容の本。回路図を起こしたり、チップの仕様書や素性を調査したり、かなり詳細まで調べている。</p>

<p>「100円ショップ」と言いつつ必ずしも100円のものばかりとは限らない、とはいえ数百円でもやっぱり十分に安い、というあたりはこの手の店へよく行く人ならばもはや常識か。ここ10年ほどは電子機器も増えてきていて、なんでこの値段でこの商品を作れるんだ、と疑問に持つ人も多いと思う。電気電子の知識が必要になるが、そういう疑問に答えてくれるような内容になっている。</p>

<p>著者はどちらかというと、分解して部品取りするのを目的にしているっぽいところがある。人によっては商品を作るときの原価がどうなってるのかまで知りたいんだろうけど、さすがにそこまでは語ってくれていない。原価は、原材料費、シンセンの現地価格、為替、関税、などにも大きく左右される水ものなので、ビジネス目的でそういうのを欲しい人はちゃんと自分で調査しましょう。</p>

<p>さすがに2026年にもなって「中国製は安かろう悪かろう」な認識の人はいないだろうと信じたい。ちょっとしたチップ程度なら中国本土で生産してる昨今、この手のオールインワンチップで機能実現する商品はもはや中国に価格・品質のバランスで勝てるとこはないだろう。国の産業のあり方を改めて考えさせられる。</p>

<p>ちなみに著者は、<a href="https://note.com/tomorrow56/m/ma0073059b5ac">100円ショップのガジェットを分解してみる</a>のサイトを運営していて、サイトの記事や雑誌に寄稿したものを書籍にまとめたものとなっている。ので、だいたいはこのサイトに行けばタダで読める。私はお布施の意味も兼ねて書籍を購入することにした。著者はこの2020年ごろから比較的注目されてるようで、続編2つや同系統の書籍を出したり、<a href="https://staff.persol-xtech.co.jp/i-engineer/technology/gadgetdisassembly">インタビュー特集</a>があったりしている。</p>

<p>というわけで、情報欲しいだけなら買わずにサイトへ行くといい。お布施目的や大きめ紙媒体の写真がほしいなら買おう。ただ、第3版まで刷ったのに誤字脱字がそのままっていうのはちょっと、、</p>]]>
        
    </content>
</entry>

<entry>
    <title>「詳解 組み込みシステム 第2版」読んだ</title>
    <link rel="alternate" type="text/html" href="http://www.rarul.com/mt/log/2026/05/-2.html" />
    <id>tag:www.rarul.com,2026:/mt//1.1076</id>

    <published>2026-05-04T21:34:51Z</published>
    <updated>2026-05-04T21:37:02Z</updated>

    <summary>Amazonアフィリンク 特にOSレスの規模の組み込みシステム向けのソフトウェア...</summary>
    <author>
        <name>らるる</name>
        
    </author>
    
        <category term="趣味・読書" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="https://www.rarul.com/mt/">
        <![CDATA[<p><a href="https://amzn.to/4u2d5uk">Amazonアフィリンク</a></p>

<p>特にOSレスの規模の組み込みシステム向けのソフトウェア開発の大まかな技術要素を解説した本。経験の浅いソフトウェア開発者や、ソフトウェアに明るくないハードウェア開発者をターゲットに、実開発の経験から、開発の定石やノウハウを語っている。</p>

<p>まえがきにも書かれているんだけど、体系的な技術の獲得というよりも、実開発の経験を詰め込んでいる章立てや内容になっている。また、OSレス程度の規模が対象とはいえ、(2026年から見て)ここ10年ほどの最近のトレンドがいまいち反映しきれていないようにも思える。一方で、日本語の訳者がLinuxに明るいこともあり、注釈が大規模組み込みLinux向けに誘導している風もあって、読んでて想定読者の像がブレてる印象が拭えない。</p>

<p>内容も、パソコンしか知らない(組み込みを知らない)ような初級開発者が組み込み中級を目指す、といったレベルの内容に感じた。細かく読めば、実体験から来る開発の難しさも書いてはあるんだけど、具体的な手法といった深い内容に入るのではなくて、あくまで初級者に向けて一般論を語りとくというか。著者は、DSPなどの信号処理が本当の専門のようで、いっそのことそっちの内容を増やしたほうがよかったのでは、と思わなくもない。「組み込み」と一口に言っても幅が広くてひとまとめにしづらい、という特有の課題なのかもしれない。</p>

<p>というわけで、私としては、組み込みを知らない初級者ソフト開発者が組み込みを本業にするときに読む本、と感じた。残念ながら今の日本ではそれに該当する人って非常に少ないんだよなぁ。</p>

<p>以下は個人的に気になった箇所のピックアップ集。</p>

<p>2.2.2 ブロック図(P11)<br />
＞SPI(スパイと発音)<br />
今までずっと「えすぴーあい」と呼んでた。というか「すぱい」と呼んでる人見たことない...</p>

<p>3.7.1 デジタルマルチメータ(P51)<br />
＞デジタルマルチメータ(DMM)だけは用意してください。<br />
昔ながらのアナログテスターと今どきの簡易ロジアナしか持ってない。1つくらいDMM持っとくべきかなと思った。<a href="https://www.youtube.com/channel/UCsOQ8NbS2hCLNb2j6YYJRwA">YouTuberの熊五郎お兄さん</a>が<a href="https://streetjunker.com/tools/member/diy20414383/astroai.html">使ってるAstroAI デジタルテスター</a>くらいがニワカにはちょうどいいのかな。</p>

<p>6章付近<br />
割り込み禁止と排他処理(mutex)との違いの説明が怪しかった。OSレスなのでSMP(マルチコア)ではないからこの程度で十分、なのかもしれないけど、逆にマルチコア当たり前なArm Cortex-A(Linux含む)なんかだと困るんだよなぁ。「割り込み禁止だけでクリティカルセクション対応できる」という思い込みをしてしまうと苦労する(経験談)</p>

<p>8.4.3 littlefs<br />
<a href="https://github.com/littlefs-project/littlefs/">https://github.com/littlefs-project/littlefs/</a>というOSレス環境で使えるFilesystemがあることを知れてよかった。</p>

<p>10 ネットワークとセキュリティ<br />
は、ネットワークに繋がるのが当たり前になりつつある昨今のIoT事情を反映していてよかった。</p>

<p>11.2 RAM不足の対策<br />
コンパイラ最適化の話がなにか古い気がする。GNU gccベースのそこそこ最近のバージョンならば、Cortex-M向けで「ローカル変数の数を減らす」ようなことは意味がない(コンパイラが賢く処理してくれる)ような。Arduinoくらいの規模でこういうのが必要なんだろうか。</p>]]>
        
    </content>
</entry>

<entry>
    <title>個人的に大嫌いなWebサイトデザイン</title>
    <link rel="alternate" type="text/html" href="http://www.rarul.com/mt/log/2026/04/web-5.html" />
    <id>tag:www.rarul.com,2026:/mt//1.1075</id>

    <published>2026-04-26T19:14:15Z</published>
    <updated>2026-04-26T19:25:04Z</updated>

    <summary>● 前置き あくまで私の個人の意見であり、こうでなければいけないという強い主張を...</summary>
    <author>
        <name>らるる</name>
        
    </author>
    
    
    <content type="html" xml:lang="ja" xml:base="https://www.rarul.com/mt/">
        <![CDATA[<p>● 前置き<br />
あくまで私の個人の意見であり、こうでなければいけないという強い主張をしたいわけではない。<br />
広告否定派ではない。むしろいわゆるAdBlock類はよくないものだと考えていて、実際使っていない。</p>

<p>● 小さなPopupウィンドウにたくさん詰め込む<br />
どんなにウィンドウ(表示可領域)を広げても、小さなPopupウィンドウの中でしかスクロールできない。<br />
一度に表示できるコンテンツの量を増やすことができない。<br />
特にデータを入力させる目的で使われることが多く、「そんなサイトは利用しない」選択をしづらいことが多い。</p>

<p>● ヘッダ・フッタがスクロールに追随する<br />
たいていはウィンドウが大きいことを前提にしている。大きくはない環境だと、コンテンツを表示できる領域が小さくなったり、そもそもヘッダ・フッタだけで覆い尽くされてしまう。<br />
今どきは、ウィンドウの横幅より縦幅が積まることが多く、またページを上下にスクロールするのが当たり前なので、ページの左右は問題になりにくく、ヘッダ・フッタが表示領域をせばめることになる。<br />
Googleはさすがというか、ウィンドウが小さいとき用のレイアウトを別途ちゃんと用意している模様。<br />
幸い、最近はJavaScriptではなくてCSSのpositionで位置を決めてることが多いため、ブラウザの機能を使いCSSを上書きして対処できる。</p>

<p>● 遅延ロードを多用する<br />
1つページ表示するだけで多量のデータを流したくない気持ちはわかるが、要素ごとに遅延ロードするなど多用されるとつらい。<br />
特に、サーバとの距離が遠いと、ロードごとに数百msec待たされてしまうため、ストレスが溜まりやすい。<br />
ロード完了させないとページ内検索ができない。なのにどこがまだロードされてないか確認しづらい。<br />
外資系の開発者向けサイトでサイトを探索するときにこれのせいで相当いらつくことが多い。</p>

<p>● 無限スクロール<br />
遅延ロードとも被るが、さらにたちが悪く、「次のページを表示」するごとに延々と続く。<br />
「10ページ先」のように一気に飛ばすことができず、サイトの探索が非常にやりづらい。<br />
「10ページ先」を表すようなURLを取得できない。<br />
無限にページが長くなるため、作りが悪いサイトでRAMやCPUが圧迫されることもある。<br />
ページのリロードなどをするとまた最初からロードを繰り返さないといけない。</p>

<p>● キーボードのスクロールを乗っ取る<br />
UP/DOWN/PageUP/PageDown/Home/Endなどを使ったスクロールができないようなページがときどきある。常にマウスがある前提にしてほしくない。<br />
キーを乗っ取った上でスクロール方法やスクロール量を独自方法にしてるサイトもあるが、ブラウザのデフォルトのスクロール量と違っていたりしていて、何をしたいのか本当にわからない。</p>

<p>● 「次を表示」操作にページ切り替えを伴わない<br />
無限スクロールとも被るが、「10ページ先」のような操作ができない、「10ページ先」を表すURLを取得できない、ことが多い。<br />
「次を表示」すると勝手にコンテンツの先頭へスクロールする、なんてのもあるが閲覧中のページへ勝手に操作を割り込まないでほしい。</p>

<p>● 文字ではなくて画像で埋め込む<br />
見た目を気にして画像にしたのだろうが、これだとページ内検索ができない。<br />
ただ、最近はかなり減ったか。あったとしてもピンポイントでのみの使用で実害は小さいようにしているサイトが多い気がする。<br />
今どき全部が画像なのは、謝罪文などのむしろ検索されたくない類かと思う。</p>

<p>● JavaScriptオフだと全く閲覧できない<br />
JavaScript多用してるから機能制限される、というのであればまだわかるが、何も表示されないサイトもある。<br />
ログインさせたり決済したり、はむしろJavaScriptオンじゃないと何もできないように意図的にしているように見える。<br />
JavaScriptオフを許容するかどうか、今だったら人により考えも違うかもしれない。</p>

<p>● ずっとJavaScript処理しててCPUを使ってる<br />
Coinhiveか？と思わせるような、サイトを表示してるだけでずっと何かにCPUを使ってることがちらほらある。<br />
何かのファイル読み込みが詰まってonLoad完了しないせいなのか、本当に仮想コインを掘ってるのかは知らない。<br />
動画などの広告が動き続けてるせいなこともあるが、さすがに最近はそういうのは減ってきた気がする。<br />
一方で最近は、あえてJavaScriptでCPU無駄遣いさせて「ボットでない」ことを証明させる例もある<br />
一部のウェブサイトで一瞬だけ表示される「ケモ耳少女のイラスト」は一体何者なのか？ - GIGAZINE<br />
<a href="https://gigazine.net/news/20250823-anubis-web-ai-firewall/">https://gigazine.net/news/20250823-anubis-web-ai-firewall/</a></p>

<p>● 嫌いな広告<br />
何が許されて何が許されないか、人により考えは違うけど、あくまで私の考えはということで。<br />
リンククリックや「戻る」操作時にナビゲーションを乗っ取り広告を出す。<br />
他のウィンドウからフォーカスが戻ってきたときに広告を出す。<br />
ページ全体を覆い尽くすようなのを出す。<br />
広告動画を見ないとコンテンツを閲覧できない。<br />
「閉じる」が押しにくいを主張する意見もわからなくはないが、あれはもはや、音を出したりウィンドウ閉じさせない類の詐欺と同じだと思ってる。</p>

<p>● 番外編<br />
ブラウザやパソコン環境が良くなったおかげで気にならなくなったものとして。<br />
onLoadのJavaScriptが走らないとコンテンツを利用できない --- ネット詰まりで起こってもリロードで解決しやすい<br />
埋め込み画像にwidth/height/alt指定がないせいであとからロード時にレイアウトが変わる --- ネット速度が上がったから困ることが減った<br />
過度なウィンドウ横サイズを要求する --- 横1000あれば足りるサイトがほとんどだし、そういうサイトの時だけウィンドウ広げるし、最悪横スクロールできるし。<br />
文字を大に変更するとレイアウト崩れて閲覧できない --- ブラウザの拡大機能が優秀になったおかげで困らなくなった</p>]]>
        
    </content>
</entry>

<entry>
    <title>Linux memo 2026/4/26(Sun) ssh DSCP</title>
    <link rel="alternate" type="text/html" href="http://www.rarul.com/mt/log/2026/04/linux-memo-2026.html" />
    <id>tag:www.rarul.com,2026:/mt//1.1074</id>

    <published>2026-04-25T14:32:06Z</published>
    <updated>2026-04-25T14:34:04Z</updated>

    <summary>● .ssh/config いちいち/etc/hosts書き換えたり、ssh -...</summary>
    <author>
        <name>らるる</name>
        
    </author>
    
    
    <content type="html" xml:lang="ja" xml:base="https://www.rarul.com/mt/">
        <![CDATA[<p>● .ssh/config<br />
いちいち/etc/hosts書き換えたり、ssh -p /scp -P したりしなくてよい<br />
　　User rarul<br />
　　HostName 192.168.123.234<br />
　　Port 1022<br />
NAPTごしなど勝手に切断されちゃうなどのとき<br />
　　ServerAliveInterval 60<br />
　　TCPKeepAlive yes<br />
セッションを圧縮して帯域の使用を効率化。ssh -C /scp -C でもいい。<br />
　　Compression yes<br />
同じサーバに複数ターミナル立ち上げるとき<br />
　　ControlMaster auto<br />
　　ControlPath ~/.ssh/mux-%r@%h:%p<br />
　　ControlPersist 15<br />
多段sshしたいとき<br />
　　ProxyJump yourhostname # 踏み台にしたいHostの箇所の名前を指定する<br />
ToS/DSCPでおかしくなるとき<br />
　　IPQoS none<br />
※ Opensshは「lowdelay throughput」がデフォルトだったのが、7.8 から「af21 cs1」になった。<br />
...までは比較的ネット上に書かれているが、10.1から lowdelay reliability throughput のキーワード自体が廃止されたので注意。</p>

<p>● ToS / DSCP<br />
IPv4/IPv6パケットにはToS/DSCPのフィールドが存在し、パケットの優先度を指定することができる。QoSの目的で使われる。<br />
Opensshはこれを指定して通信を行うが、その動作がフレッツ光で問題になることがある。このへんに詳しい。<br />
フレッツ光ネクスト + IPoE における IPQoS設定と scp転送速度 -  tsutsuiの作業記録置き場<br />
<a href="https://tsutsui.hatenablog.com/entry/2024/10/17/013432">https://tsutsui.hatenablog.com/entry/2024/10/17/013432</a><br />
結局のところ、コンシューマなレベルのユーザがQoS目的でパケットのフィールドを設定するなんてのは状況を悪化させるに等しいと思うので、フレッツでの問題を回避する場合でも、OpensshのIPQoSはnoneが無難かと思う。<br />
先の通り「lowdelay throughput」は10.1から意味をなさなくなるので、もう少し時間が立つとそのことに触れるメモ書きも増えるのではと思う。</p>]]>
        
    </content>
</entry>

<entry>
    <title>Linux memo 2025/09/06 mqueueの制限編</title>
    <link rel="alternate" type="text/html" href="http://www.rarul.com/mt/log/2025/09/linux-memo-2025-3.html" />
    <id>tag:www.rarul.com,2025:/mt//1.1073</id>

    <published>2025-09-06T12:53:57Z</published>
    <updated>2025-09-25T17:13:47Z</updated>

    <summary>(2025/9/20追記: ipc namespaceがらみの話が弱かったため多...</summary>
    <author>
        <name>らるる</name>
        
    </author>
    
        <category term="Linux" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="https://www.rarul.com/mt/">
        <![CDATA[<p>(2025/9/20追記: ipc namespaceがらみの話が弱かったため多めに加筆)<br />
(2025/9/26追記: 書き漏れがあったのでさらに加筆)</p>

<p>● お題<br />
mq_open()がerrno==EMFILEで失敗した</p>

<p>● マニュアル<br />
man 3 mq_openによれば、<br />
<a href="https://man7.org/linux/man-pages/man3/mq_open.3.html">https://man7.org/linux/man-pages/man3/mq_open.3.html</a><br />
 - プロセスあたりのfile descriptor数上限に引っかかった -> RLIMIT_NOFILE(ulimit -n) を確認する<br />
だが、該当しているように見えない。<br />
ENFILEの可能性も考え、/proc/sys/fs/file-max と /proc/sys/fs/file-nr を確認するも、こちらも問題なし。</p>

<p>● mqueueのsysctlパラメータ(1)<br />
/proc/sys/fs/mqueue/ にこんなのがある<br />
 - msg_max --- 1つのキューに入れられるメッセージの最大個を変更するときの上限、kernel内での変数名は(mq_msg_max)または(mq_maxmsg)、以下カッコ内のものは同じ意味<br />
 - msg_default --- mq_open()の引数で特に指定しなかったときの新規作成された1つのキューに入れられるメッセージの最大個 (mq_msg_default)<br />
 - msgsize_max ----- 1メッセージの最大サイズを変更するときの上限 (mq_msgsize_max)<br />
 - msgsize_default ---- mq_open()の引数で特に指定しなかったときの新規作成されるキューへ入れる1メッセージの最大サイズ (mq_msgsize_default)<br />
 - queues_max ----- システム全体で作れるqueueの個数 (mq_queues_max)<br />
いずれも特権(CAP_SYS_RESOURCE)があれば制限を受けない。<br />
mq_open()のエラーとなると、queues_maxが怪しいが、/dev/mqueue を見る限りキューの個数の上限に達したようには見えない。</p>

<p>● mqueueのsysctlパラメータ(2)<br />
/proc/sys/kernel/ にこんなのがある<br />
 - msgmax 1つのメッセージの最大バイト数を制限する (msg_ctlmax)<br />
 - msgmnb システム全体で、msg_qbytesの初期化のパラメータ (msg_ctlmnb)<br />
 - msgmni システム全体で、mqの名前の個数を制限する (msg_ctlmni)<br />
 - auto_msgmni 今は意味をなさない。過去はメモリサイズが msgmni に影響していたため、これに1を書くことでmsgmniの再計算が走るようになっていた<br />
 - msg_next_id 次に作成するmqのIDを指示する、がデバッグ用なので通常は使わない？<br />
こちらも同様、引っかかっているようには見えない。</p>

<p>● limitパラメータ<br />
man 7 mq_overview をきっちり読むまでこれに気づかなかった。<br />
<a href="https://man7.org/linux/man-pages/man7/mq_overview.7.html">https://man7.org/linux/man-pages/man7/mq_overview.7.html</a><br />
RLIMIT_MSGQUEUE (ulimit -q) というのがある。1ユーザ(uid)あたりで使えるmqueueのメッセージの合計サイズの条件になる。<br />
管理情報も含むため、メッセージの中身のバイト数の合計よりもちょっと厳しく働く。<br />
サイズを予約するときにチェックする？という方向のため、mq_open()のタイミングで失敗する。<br />
たとえ CAP_SYS_RESOURCE を持っていても制限を回避できない<br />
CAP_SYS_RESOURCE を持ってるとlimitを変更する(ulimit -q unlimited)ことができ、制限を回避できる。<br />
結局原因はこれだった。limitを変更すると動作するようになった。</p>

<p>● mqueueについてのその他の補足<br />
 - /dev/mqueueは、存在するqueueの名前を確認できる程度で、ここを直接catしたりduしたりはできない<br />
 - /dev/mqueue で rm すると、誰も開いていないqueueを名前指定で削除できる<br />
 - mqueueのnamespaceは ipc_namespaces になる。mqueueとsysvipcとが対象にある<br />
 - /proc/sys/ や /proc/sys/kernel/ のパラメータはnamespaceごとの制限となる。「システム全体」という古い記載がドキュメントに残ったままなことがあるので注意必要<br />
 - プロセスがどのnamespaceに属しているかは file /proc/self/ns/ipc で確認できる<br />
 - queueのリストやメッセージの状況は ipcs -q もしくは /proc/sysvipc/msg で確認できる<br />
 - /dev/mqueueには見えないのにqueueが作られたという状況になることがある模様？その場合 ipcrm -q でID指定すれば削除できる</p>

<p>● mq_open()のソースコードの確認<br />
linux/ipc/mqueue.c の mqueue_get_inode()あたりでmq_open()を呼んだときのパラメータチェックがなされる。<br />
 - バックトレースはこうなる mq_open() -> do_mq_open() -> prepare_open() -> mqueue_create_attr() -> mqueue_get_inode()<br />
 - CAP_SYS_RESOURCEがあれば、HARD_MSGMAX HARD_MSGSIZEMAX でチェックし、ダメなら -EINVAL を返す<br />
 - CAP_SYS_RESOURCEがなければ、mq_msg_max と mq_msgsize_max でチェックし、ダメなら -EINVAL を返す<br />
 - mq_maxmsg * mq_msgsize を計算し、unsigned intをオーバフローしたら、-EOVERFLOWを返す<br />
 - mq_maxmsg * mq_msgsizeとオーバヘッド(sizeof(struct posix_msg_tree_node)かける個数)を ulimit -q に計上し、rlimitに引っかかったら -EMFILEを返す (★ CAP_SYS_RESOURCEを見ない)</p>

<p>● limitについての補足<br />
下記のrlimitはuid namespaceごとで制限チェックされる(==同じUIDのプロセスの合計値もしくは共通で効く)、ただしややこしいことに制限値はプロセスごとに設定できる。<br />
 - RLIMIT_NPROC (UCOUNT_RLIMIT_NPROC)<br />
 - RLIMIT_MSGQUEUE (UCOUNT_RLIMIT_MSGQUEUE)<br />
 - RLIMIT_SIGPENDING (UCOUNT_RLIMIT_SIGPENDING)<br />
 - RLIMIT_MEMLOCK (UCOUNT_RLIMIT_MEMLOCK)<br />
逆に下記はそうではない(==自プロセスのみに閉じた制限チェックになる))<br />
 - RLIMIT_CPU<br />
 - RLIMIT_FSIZE<br />
 - RLIMIT_DATA<br />
 - RLIMIT_STACK<br />
 - RLIMIT_CORE<br />
 - RLIMIT_RSS<br />
 - RLIMIT_NOFILE<br />
 - RLIMIT_AS<br />
 - RLIMIT_LOCKS<br />
 - RLIMIT_NICE<br />
 - RLIMIT_RTPRIO<br />
 - RLIMIT_RTTIME</p>

<p>● capabilitiesについての補足<br />
 - ランチャープログラムの場合は Ambient Capabilities で付与するのがよい(子に引き継げるため)、ただしUID/GIDの動的変更をしないfile capabilitiesによる付与を行わないという前提で。<br />
 - そうでない場合はマジメに capabilities のexec時の継承ルールを理解して利用するのがよい。<br />
 - <a href="https://man7.org/linux/man-pages/man7/capabilities.7.html">man capabilities(7)</a> にcapabilitiesを継承するルールが記載されているがこの記号式は何度見ても理解できない。下記に抜粋しておく。<br />
P'(ambient)     = (file is privileged) ? 0 : P(ambient)<br />
P'(permitted)   = (P(inheritable) & F(inheritable)) | (F(permitted) & P(bounding)) | P'(ambient)<br />
P'(effective)   = F(effective) ? P'(permitted) : P'(ambient)<br />
P'(inheritable) = P(inheritable)    [i.e., unchanged]<br />
P'(bounding)    = P(bounding)       [i.e., unchanged]</p>

<p>● 個人の感想<br />
 - rlimit(rlim)の値は、kernelのtask_structのメンバsignalの中にある。なんか直感に対して違和感があった<br />
 - msgctlというsysctlがあることを初めて知った<br />
 - getpcapsなにもわからない。capabilitiesを読みやすいテキストに表示してくれるという触れ込みなのに、表示されるテキストが記号的で逆に分かりづらい<br />
 - ゼロが多い巨大ファイルを強制的に Filesystem sparse (hole) に変換したい場合は cp --sparse=always で別ファイルを作るのがよい</p>]]>
        
    </content>
</entry>

<entry>
    <title>Linux memo 2025/08/07 cache cleanup編</title>
    <link rel="alternate" type="text/html" href="http://www.rarul.com/mt/log/2025/08/linux-memo-2025-2.html" />
    <id>tag:www.rarul.com,2025:/mt//1.1072</id>

    <published>2025-08-06T16:16:16Z</published>
    <updated>2025-08-06T16:34:23Z</updated>

    <summary>● ccache ccacheの--evict-older-thanオプションは...</summary>
    <author>
        <name>らるる</name>
        
    </author>
    
        <category term="Linux" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="https://www.rarul.com/mt/">
        <![CDATA[<p>● ccache<br />
ccacheの--evict-older-thanオプションは、atimeではなくてmtimeを見るため、「キャッシュ作ったのは昔だけど最近も使った」ようなものまで消してしまう。<br />
Clarify --evict-older-than ・ Issue #1292 ・ ccache/ccache<br />
<a href="https://github.com/ccache/ccache/issues/1292">https://github.com/ccache/ccache/issues/1292</a><br />
mtimeではなくatimeを見るようにccacheそのものを変更してしまう以外のいい方法がわからない。<br />
サイズあふれしてないことを確認しながら ccache -M 10G などしてサイズ上限で自動的にクリーンナップさせるくらいがよい？</p>

<p>● git lfs<br />
git.lfs.storage (LfsStorageDir)を使っている場合、古いLFSオブジェクトをクリーンナップするよい方法が見つからなかった。</p>

<p>● repo<br />
reop list -p すればrepoで管理するgitのリストを表示してくれるので、これをもとに git -C DIR gc すればよい。<br />
ただ、1つずつgit gcしてると、対象がたくさんあるときに時間がかかる。<br />
そういう場合、一般的には GNU parallel を使うのが良いとされるが、GNU parallel はオプションやら前置後置やらの使いこなしがクソめんどい。<br />
ので、GNU parallelっぽく使える mypara.pl を作って公開してるので、興味ある人は使ってみて。<br />
<a href="https://github.com/rarul/tools/blob/master/script/mypara.pl">https://github.com/rarul/tools/blob/master/script/mypara.pl</a><br />
下記のように、mypara に pipe で行単位で送ると、1行1コマンドとして -j 4 の最大4並列で実行する。<br />
 - $ for ff in `repo list -p`; do echo ${ff}; done | xargs mypara -j 4 -c "git -C" -C "gc"<br />
(-p なのか -n なのか、--mirrorの場合はディレクトリ名に".git"が追加でつくとか、そのへんは適当に調整してください)</p>

<p>● bitbake DL_DIR<br />
単純にアクセス時間の古いものを消せばよい。<br />
 - $ cd /mnt/share/downloads<br />
 - $ find . -type f -atime +60 -delete<br />
 - $ find . -type d -empty -delete<br />
まれに「atime記録書き込みするのがイヤだから-noatimeにしている」人がいるが、ことLinuxに関しては、<a href="https://qiita.com/rarul/items/5e6629387887c2f554b9">過去に私が記事に書いた</a>通り、relatimeがあるので、あえてnoatimeにする価値は低い。</p>

<p>● bitbake SSTATE_DIR<br />
DL_DIR同様、単純にアクセス時間の古いものを消せばよい。<br />
 - $ cd /mnt/local/sstate-cache<br />
 - $ find . -type f -atime +60 | xargs rm -f<br />
 - $ find . -type d -empty | xargs rmdir<br />
bitbake環境では、sstate-cache-management.py というスクリプトも提供されるが、これは、1つのbitbakeツリーから1つのSSTATE_DIRを利用している場合にのみ利用できる。<br />
複数のbitbakeツリーから1つのSSTATE_DIRを共有している場合には sstate-cache-management.py は役に立たない。<br />
下記も参考に。<br />
26 Conserving Disk Space<br />
<a href="https://docs.yoctoproject.org/dev-manual/disk-space.html">https://docs.yoctoproject.org/dev-manual/disk-space.html</a></p>]]>
        
    </content>
</entry>

<entry>
    <title>Linux memo 2025/05/15 プロキシ設定no_proxy編</title>
    <link rel="alternate" type="text/html" href="http://www.rarul.com/mt/log/2025/05/linux-memo-2025-1.html" />
    <id>tag:www.rarul.com,2025:/mt//1.1071</id>

    <published>2025-05-14T16:02:27Z</published>
    <updated>2025-05-14T16:03:51Z</updated>

    <summary>● 結論 - 環境変数は小文字のみを使う - wgetは使わない - IPアドレ...</summary>
    <author>
        <name>らるる</name>
        
    </author>
    
    
    <content type="html" xml:lang="ja" xml:base="https://www.rarul.com/mt/">
        <![CDATA[<p>● 結論<br />
- 環境変数は小文字のみを使う<br />
- wgetは使わない<br />
- IPアドレス範囲はCIDRで記載する<br />
- ドメイン部分マッチは「.example.com」形式にする</p>

<p>● 設定の具体例<br />
私は /etc/profile.d/proxy.sh に記載することにしている<br />
- export http_proxy="http://proxy.example.com:8080/"<br />
- export https_proxy="http://proxy.example.com:8080/"<br />
- export no_proxy="localhost,.example.com,192.168.0.0/16,10.0.0.0/8"</p>

<p>● 結論の説明<br />
- wget はもはや環境変数解釈の変更が受け入れられるほどはメンテされていないのであきらめて curl を使う<br />
- cURLは、Curl-v7.86 (2022/10/26)から明文化された <a href="https://github.com/curl/curl/issues/9773">https://github.com/curl/curl/issues/9773</a><br />
- Dockerは、Go次第だが、明文化されている <a href="https://pkg.go.dev/golang.org/x/net/http/httpproxy">https://pkg.go.dev/golang.org/x/net/http/httpproxy</a><br />
- gitは、curlをライブラリとして使っているため、curl次第となる<br />
- Goだけが環境変数の大文字から探しに行くため、混乱避けるためにも、大文字環境変数は一切使わない、小文字環境変数のみにするべき<br />
- アスタリスク(asterisk"*")は、「アスタリスクのみ」の場合だけ明文化されている('export no_proxy="*"')ため、これ以外は使わない<br />
- 「no_proxy環境変数の解釈はツール次第だから注意必要」なのはその通りだが、現実的にno_proxyを使うのは上記くらいなので、あまり困らないと思う</p>

<p>● そもそもの前提<br />
 - HTTPプロキシが必要な環境の場合、毎回プロキシ指定するのはめんどいので、環境変数 http_proxy や https_proxy で設定することが多い<br />
 - LAN内サーバはプロキシなしアクセスする必要あるので、シームレスに使うために、no_proxy 環境変数に除外するものを設定することが多い<br />
 - これら環境変数はしょせんは各ツールが各ツールごとに解釈するという動きをする<br />
 - no_proxyの解釈がツールによりバラバラなので統一的な no_proxy の設定方法が定まらずみんな困っていた</p>

<p>● 記事<br />
no_proxyを標準化する方法：お客様事例で徹底解説<br />
<a href="https://about.gitlab.com/ja-jp/blog/2021/01/27/we-need-to-talk-no-proxy/">https://about.gitlab.com/ja-jp/blog/2021/01/27/we-need-to-talk-no-proxy/</a><br />
↑の記事の翻訳元の記事がこれ<br />
We need to talk: Can we standardize NO_PROXY?<br />
<a href="https://about.gitlab.com/blog/2021/01/27/we-need-to-talk-no-proxy/">https://about.gitlab.com/blog/2021/01/27/we-need-to-talk-no-proxy/</a><br />
no_proxy の設定方法が定まらない話を12年前に取りまとめた記事<br />
no_proxy にネットワークアドレスとかワイルドカードを指定しても期待通りに動かない、でどうするかというお話 - 双六工場日誌<br />
<a href="https://sechiro.hatenablog.com/entry/2013/08/06/no_proxy_%E3%81%AB%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E3%82%A2%E3%83%89%E3%83%AC%E3%82%B9%E3%81%A8%E3%81%8B%E3%83%AF%E3%82%A4%E3%83%AB%E3%83%89%E3%82%AB%E3%83%BC%E3%83%89%E3%82%92">https://sechiro.hatenablog.com/entry/2013/08/06/no_proxy_%E3%81%AB%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E3%82%A2%E3%83%89%E3%83%AC%E3%82%B9%E3%81%A8%E3%81%8B%E3%83%AF%E3%82%A4%E3%83%AB%E3%83%89%E3%82%AB%E3%83%BC%E3%83%89%E3%82%92</a></p>

<p>● その他<br />
今でも外部と通信するのにプロキシ必須としているような組織ってどのくらい残ってんだろ</p>]]>
        
    </content>
</entry>

<entry>
    <title>自作PCを組んだ(2025年)</title>
    <link rel="alternate" type="text/html" href="http://www.rarul.com/mt/log/2025/05/pc2025.html" />
    <id>tag:www.rarul.com,2025:/mt//1.1070</id>

    <published>2025-04-30T17:06:10Z</published>
    <updated>2025-04-30T17:08:51Z</updated>

    <summary>前に組んだのが2017年だからまる8年立つし、Windows10サポート切れが迫...</summary>
    <author>
        <name>らるる</name>
        
    </author>
    
    
    <content type="html" xml:lang="ja" xml:base="https://www.rarul.com/mt/">
        <![CDATA[<p>前に組んだのが2017年だからまる8年立つし、Windows10サポート切れが迫っている(2025年10月)し、という事情で久々にデスクトップ自作PCを組んだ。とはいえ面白みがほぼない普通すぎる構成で。<a href="https://www.rarul.com/pc/#2025">パーツの詳細はこっち</a>へ。</p>

<p>オーバクロックよりも省電力を優先して試行錯誤する。最近は電圧を下げるよりもLLC(CPU Load Line Calibration)を調整するのが流行りの模様。ということで試してみるも、Non-KシリーズのCPUだと相対的に上下幅が小さくなるので、そこまでの差はでない模様。一方で、電圧下げ(offsetでマイナスする)の方向も、最近のCPUはいよいよ上も下もピーキーにコントロールするので、特に低負荷からの立ち上がりで引っかかってしまうことが多い模様。というわけで、申し訳程度に電圧を下げてはみたものの、実際のとこ効果はかなり小さい。</p>

<p>ロード時の負荷管理という意味では、PL1/PL2の電力上限と期間を管理するほうがわかりやすい。PL1/PL2の考えのおかげで、オーバクロックの目的だけではなく、省電力志向もやりやすくなった。i5-14400でテストしてみた感じだと、ワットあたりのCinebenchスコアで計算すると、35W制限が一番効率よく、高効率を選ぶと35W-55Wくらい、定格TDPの65Wを包含しようとすると30W-65Wくらい、となった。ので、PL2を55W、PL1を45Wにしておいた。とはいえ、リテールのCPUクーラでも14400のOCのほぼ上限の85Wくらいで回し続けても十分に冷やせるんだけどね。</p>

<p>ASPMを有効にするのは引き続きアイドル時電力を下げる効果がそこそこあるのを確認した。</p>

<p>ただ、とはいえ自作PCを組む作業は世間一般的には本当に廃れた。特定の目的(ゲーム・動画編集・VTuberなど)があって高性能構成を用意するくらいで、一般的な用途だとちまたにあふれてる小型PCのほうが取り回し含めて十分だなぁとは思う。私も、今回はパーツ流用を考えたから組んだものの、電源やケースも買い替えとなったならば小型PCに走ったかなぁと思う。</p>

<p>あと、Windowsを使う優先度が下がった。旧来の設定を廃することの多いWindows11で、安定性にも疑問を抱くようなトラブルもちらほらとあり、Linuxを使う頻度も上がっている私の事情からすると、そう遠くない時期にWindowsはもう用意しなくてもいいやとなるのかもしれない。</p>]]>
        
    </content>
</entry>

<entry>
    <title>Linux memo 2025/01/09 Yocto編</title>
    <link rel="alternate" type="text/html" href="http://www.rarul.com/mt/log/2025/01/linux-memo-2025.html" />
    <id>tag:www.rarul.com,2025:/mt//1.1069</id>

    <published>2025-01-08T15:18:11Z</published>
    <updated>2025-01-31T15:06:23Z</updated>

    <summary>● ビルド関連  - ダウンロード時間の節約をがんばる  - ビルド並列数を適切...</summary>
    <author>
        <name>らるる</name>
        
    </author>
    
        <category term="Linux" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="https://www.rarul.com/mt/">
        <![CDATA[<p>● ビルド関連<br />
 - ダウンロード時間の節約をがんばる<br />
 - ビルド並列数を適切にする<br />
 - sstate chaceを使う<br />
 - iceccを使う</p>

<p>● confパラメータ<br />
 - PARALLEL_MAKE ?= "-j 4 -l 12"<br />
 - BB_NUMBER_THREADS ?= "4"<br />
 --- 上記の掛け算になるので最大16並列になる<br />
 --- 1ジョブあたり1GiBくらいメモリを平気で使う<br />
 --- 過大な値が初期値に記載されてることが多いので要注意<br />
 --- よくばってもスワップで遅くなったりOOMで失敗したりする<br />
 --- 深さ優先ビルドのほうが効率良いのでPARALLEL_MAKEを大きくするのがよいと思う<br />
 --- "-l 12"でload average制限もつけておくと安全かもしれない<br />
 --- - ninjaの場合に -l も引き継ぐ場合と引き継がない場合とがある？(詳細未確認)<br />
 --- 「?=」で記載しとくとexportで環境変数で上書きできるので便利<br />
 --- - 実は引き継いでほしい変数を宣言しておかないといけない？<br />
 --- - 「export BB_ENV_PASSTHROUGH_ADDITIONS="SSTATE_DIR "」など？<br />
 - BB_NUMBER_PARSE_THREADS ?= "4" --- parse時はあまり負荷意識する必要ないので特に設定しなくてよいと思う<br />
 - PACKAGE_CLASSES ?= "package_ipk" --- rpmからipkにするとビルドは早くなるらしい<br />
 --- いまいち効果を確認できず。要追加検証。<br />
 - DL_DIR ?= "${TOPDIR}/downloads" --- 複数ツリーでダウンロードフォルダを共通化する<br />
 - SSTATE_DIR ?= "${TOPDIR}/sstate-cache" --- 複数ツリーでsstate cacheフォルダを共通化する<br />
 - SSTATE_MIRRORS ?= "file://.* http://someserver.tld/share/sstate/" --- リモートや複数PCでsstate cacheを共有する<br />
 - INHERIT += "own-mirrors"<br />
 - SOURCE_MIRROR_URL = "http://example.com/my-source-mirror"<br />
 --- DL_DIRになかったときはここも確認する、PREMIRRORSとほぼ同じだがPREMIRRORSよりも便利らしい<br />
 - BB_SERVER_TIMEOUT ?= "20" --- 仕事なくなったbitbake serverが終了するまでの待ち時間、bitbakeコマンドを頻繁に実行するなら大きめの方が良い？<br />
 - BB_PRESSURE_MAX_CPU = "200000" --- PSI(Pressure Stall Information)のCPUで追加job実行の制限をする<br />
 --- CPUの(論理)個数をNとして、N >> 2 だと仮定して、「2 * 1000000 / N"」 くらいか、と思う<br />
 --- 詳細は<a href="https://qiita.com/rarul/items/51c2a7a4e4133e53715e">このへん</a>を見て<br />
 - BB_PRESSURE_MAX_MEMORY --- Pressure Stall(PSI)のmemoryはピーキーなので「スワップ発生中」判定くらいしか使いにくいと思う<br />
 - BB_PRESSURE_MAX_IO --- Pressure Stall(PSI)のioは負荷の程度を判断する目的では使い物にならないと思う<br />
 - INHERIT += "rm_work" --- 中間ファイルを消してくれるのでディスク容量節約になる</p>

<p>● bitbake基本<br />
 - bitbake -c taskname recipe-name<br />
 --- "taskname"で普段使うのはこのへんか？<br />
 --- fetch patch configure compile install deploy image<br />
 --- rm_work --- 中間ファイルを消す<br />
 --- clean --- outputを削除する<br />
 --- cleansstate --- build時に作ったsstate cacheも削除する<br />
 --- cleanall --- ダウンロードしたファイルも削除する<br />
 - -f --- 強制実行<br />
 - -s --- レシピ一覧<br />
 - bitbake -c cleansstate world --- すべてのレシピを指定<br />
 - bitbake -c populate_sdk recipe-name --- SDKを作る<br />
 - bitbake --runall=fetch recipe-name --- すべてのレシピのfetchのみ実行する<br />
 - bitbake -c menuconfig virtual/kernel --- menuconfig実行する</p>

<p>● bitbake応用<br />
 - bitbake -e recipe-name --- すると変数名が出る？<br />
 - bitbake-layers show-layers --- レイヤー一覧を表示<br />
 - bitbake-layers show-recipes --- レシピ一覧を表示<br />
 - bitbake-layers show-appends --- bbappend一覧を表示<br />
 - oe-pkgdata-util find-path /lib/libc.so.6 --- ファイルを提供するレシピを探す<br />
 - bitbake-getvar -r recipe-name VARIABLE --- 変数を参照する箇所をデバッグ表示する<br />
 - bitbake -g -u recipie-name target-name --- 依存を調査するためのグラフィカルツール<br />
 - bitbake -c devshell recipie-name --- ビルドエラーなどのデバッグ用のdevshellを立ち上げる<br />
 --- buildhistory-diff<br />
 - bitbake-layers create-layer -p PRIORITY LAYER<br />
 --- レイヤーは理解できてないのでこれあまり以上書けない、、</p>

<p>● レシピ基本<br />
 - PACKAGES --- レシピが提供するパッケージ名、test.bbがあると「"test-dbg test-staticdev test-dev test-doc test-locale test"」が提供される<br />
 - PROVIDERS --- レシピが提供するプロバイダ名、要はbbが提供する成果物のこと、test.bbがあると「test 」が提供される<br />
 - DEPENDS --- このレシピのビルドのために先にビルドする必要がある依存パッケージを書く<br />
 - RDEPENDS --- このレシピの実行のために必要となる依存パッケージを書く<br />
 - SRC_URI --- 「file://」「https://」 あたりを使う、sshの場合は「protocol=ssh;」を追加する形になる？<br />
 - SRCREV --- git sha1とかを入れる、「SRCREV = "${AUTOREV}"」でブランチ名オンリーにできるが毎回fetchして最新の変更を追随してしまうので推奨されていない</p>

<p>● レシピ変数<br />
ほぼ下記ここからパクった、、<br />
<a href="https://qiita.com/rg125_suzuki/items/702e90084e12e0fdf6de">https://qiita.com/rg125_suzuki/items/702e90084e12e0fdf6de#%E3%81%9D%E3%81%AE%E4%BB%96</a><br />
 - ${S} --- ソースコードの展開先<br />
 --- gitの場合明示的に「S = "${WORKDIR}/git"」とする必要がある<br />
 - ${BPN} --- 基本レシピ名、zlib-native-1.2.11-r0の場合、zlib<br />
 - ${PN} --- fixつきレシピ名、zlib-native-1.2.11-r0の場合、zlib-native<br />
 - ${PV} --- バージョン、zlib-native-1.2.11-r0の場合、1.2.11<br />
 - ${PR} --- リビジョン、zlib-native-1.2.11-r0の場合、r0<br />
 - ${BP} --- ${BPN}-${PV}、zlib-native-1.2.11-r0の場合、zlib-1.2.11<br />
 - ${PF} --- ${PN}-${PV}-${PV}、zlib-native-1.2.11-r0の場合、zlib-native-1.2.11-r0<br />
 - ${TOPDIR} --- ビルドトップディレクトリ、pock/buil dなど<br />
 - ${TMPDIR} --- ${TOPDIR}/tmp<br />
 - ${WORKDIR} --- レシピの作業ディレクトリ、poky/build/tmp/work/x86_64-linux/zlib-native/1.2.11-r0 など<br />
 - ${D} --- ${WORKDIR}/image<br />
 - ${B} --- このレシピを処理するときの一時インストール先？デフォルトは ${S} と同じ？<br />
 --- ${S}がsrc、${B}がconfigureしたときのobj、${D}がインストール先、という関係？</p>

<p>● レシピ拡張<br />
 - レシピを書き換えるのではなくてレイヤーで重ねるべき、とドキュメントに書かれてる<br />
 - bbappendはバージョン固有であるべき、とドキュメントに書かれてる<br />
 - example_1.0.bb を example_1.0.bbappend で拡張する<br />
 - example_1.%.bbappendは、example_1.0.bb にも example_1.1.bb にも効く<br />
 - パッチファイルなどを足すときは.bbappendにこんなのを書く<br />
 --- FILESEXTRAPATHS:prepend := "${THISDIR}/files:"<br />
 --- SRC_URI += " file://custom-modification-0.patch "<br />
 - タスクを拡張するときは.bbappendにこんなのを書く<br />
 --- do_install:append() {<br />
 ---    install -d ${D}${sysconfdir}<br />
 --- }</p>

<p>● 仮想パッケージ<br />
 - PROVIDES = "virtual/libgl" --- 複数レシピが同じ仮想名を提供できる<br />
 - PREFERRED_PROVIDER_virtual/libgl = "mesa" --- 仮想パッケージを選ぶ？<br />
 - PREFERRED_VERSION_linux-yocto = "5.14%" --- 特定バージョンを選択する、%はワイルドカード</p>

<p>● レシピ応用<br />
 - .bbclass --- レシピのルールのテンプレートみたいなやつ、わざわざ自分でカスタム.bbclassを作るケースはほぼないかと<br />
 - base.bbclass kernel.bbclass autotools.bbclass cmake.bbclass meson.bbclass useradd.bbclass などがある<br />
 - inherit <bbclass></p>

<p>● 変数代入<br />
 - "=" --- 変数を使用するときに展開(makeと同じ？)<br />
 - ":=" -- - 即座に展開(makeと同じ？)<br />
 - "+=" --- 後置スペースあり追加<br />
 - "=+" --- 前置スペースあり追加<br />
 - ".=" --- 後置スペースなし追加<br />
 - "=." --- 前置スペースなし追加<br />
 - "?=" --- 未割り当てのときに割り当てる<br />
 - "??=" --- 未割り当てのままのときにのみ反映されるデフォルト値、ややこしいので使わないほうがいいと思う<br />
 - VARIABLE:override = "some_value"<br />
 --- 変数展開時に先頭に追加する<br />
 --- 「VARIABLE_override」という書き方があったが古い構文なので今後は使わない<br />
 - IMAGE_INSTALL:append = " dropbear" --- 末尾にスペースなし追加<br />
 - FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:" --- 先頭にスペースなし追加<br />
 - IMAGE_INSTALL:remove = "i2c-tools" --- 変数内のすべての出現を削除<br />
 - KERNEL_DEVICETREE:beaglebone = "am335x-bone.dtb"<br />
 --- OVERRIDES内に「beaglebone」があるときのみ代入される<br />
 --- 優先代入されるので「beaglebone」がある場合は「KERNEL_DEVICETREE = ""」は無視される</p>

<p>● 変数フラグ<br />
 - 主にタスクに条件を足すことができる<br />
 - do_compile[dirs] = "${B}" --- タスクを実行する前に生成されるべきディレクトリ<br />
 - do_settime[noexec] = "1" --- タスクの実行を無効にする<br />
 - do_menuconfig[nostamp] = "1" --- タスク実行時にstampファイルを作らない、のでタスクが常に実行される<br />
 - do_patch[depends] = "quilt-native:do_populate_sysroot" --- タスク間の依存を追加</p>

<p>● イメージ作成<br />
 - IMAGE_INSTALL --- イメージに入れる<br />
 - IMAGE_BASENAME --- イメージファイル名<br />
 - IMAGE_FSTYPES --- イメージタイプ、ext4 squashfs などに処理できる？</p>

<p>● FAQ<br />
 - Q: DEPENDS と RDEPENDS の違いがわからん<br />
 --- A: DEPENDSはビルド時依存、RDEPENDSは実行時依存(だからIMAGE_INSTALLにも効く？)<br />
 - Q: ビルドエラーログってどこ？<br />
 --- A: モジュール毎の temp/ 以下の "log.do_compile"、"run.do_compile"はそのまま実行可能、どちらもsymlink<br />
 - Q: include と require の違いは？<br />
 --- A: includeはファイルがなくてもエラーじゃない、requireはパースエラー<br />
 - Q: ちょっと変更しただけなのにモジュールやファイルがないというビルドエラーが出る<br />
 --- A: 既存のレシピで依存やinstallの記載漏れがあるせいと思われる、bitbakeレシピはチェックが厳格なのでこういうのが起こりやすい</p>

<p>● 参考サイト<br />
Yocto build 時間を10時間から10分に高速化した話 - Qiita<br />
<a href="https://qiita.com/naohikowatanabe/items/868eefed28cefec20ff8">https://qiita.com/naohikowatanabe/items/868eefed28cefec20ff8</a><br />
【yocto】レシピ内変数の早見表 - Qiita<br />
<a href="https://qiita.com/rg125_suzuki/items/702e90084e12e0fdf6de">https://qiita.com/rg125_suzuki/items/702e90084e12e0fdf6de</a><br />
lockfileでdo_compileをシリアライズするという裏技<br />
<a href="https://stackoverflow.com/questions/71885775/mutually-exclusive-bitbake-recipes-tasks">https://stackoverflow.com/questions/71885775/mutually-exclusive-bitbake-recipes-tasks</a></p>

<p>● ドキュメント<br />
12 Variables Glossary / The Yocto Projec<br />
<a href="https://docs.yoctoproject.org/ref-manual/variables.html">https://docs.yoctoproject.org/ref-manual/variables.html</a><br />
Yocto Project and OpenEmbedded system development training (PDF注意)<br />
<a href="https://bootlin.com/doc/training/yocto/yocto-slides.pdf">https://bootlin.com/doc/training/yocto/yocto-slides.pdf</a><br />
このへんにサンプルレシピの具体的な例のURLもぜひほしい</p>

<p>● 所感<br />
Yoctoなにもわからない<br />
Yoctoはプログラマ向けではなくてディストリビュータ向けなので開発には向かないと思う<br />
追加のハマりどころがあれば追記する予定<br />
2025/1/31(Fri): 便利そうなコマンド類を追記、誤字脱字訂正</p>]]>
        
    </content>
</entry>

<entry>
    <title>「Binary Hacks Rebooted」読んだ</title>
    <link rel="alternate" type="text/html" href="http://www.rarul.com/mt/log/2024/09/binary-hacks-re.html" />
    <id>tag:www.rarul.com,2024:/mt//1.1068</id>

    <published>2024-09-05T16:35:37Z</published>
    <updated>2024-09-05T16:39:39Z</updated>

    <summary>Amazonアフィへのリンク 約17年前に発売された「Binary Hacks」...</summary>
    <author>
        <name>らるる</name>
        
    </author>
    
        <category term="Linux" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="趣味・読書" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="https://www.rarul.com/mt/">
        <![CDATA[<p><a href="https://amzn.to/3ARdAAR">Amazonアフィへのリンク</a></p>

<p>約17年前に発売された「<a href="https://amzn.to/3XeKYZR">Binary Hacks</a>」の名前を冠する続編本。一般的に「低レイヤー」と呼ばれることの多い、コンピュータソフトウェアの中でも特にOSやCPUに近い部分の技術を、章ごとに1つずつ紹介するという内容になっている。</p>

<p>「Binary Hacks」はそれなりに反響のあった本だったため、その名前を冠するだけで、それ相応に注目を集めることになる。本を読んだ限りでは、名前に恥じることのない程度には濃い内容に仕上がっている。まぁ逆に、こんな内容の濃い本を好き好んで読もうと思うような人がいったいどれだけいるのかというあたりにも疑問を持つ。20年ほど前と比べると、今やこの日本でこういった内容のソフトウェア技術を必要とする仕事やらは本当に減ってしまったなというのが個人的な印象だ。</p>

<p>低レイヤーは技術の進化が早いわけではないとはいえ、20年近くも時代が進むとそれ相応に変わっていくわけで、その内容を雑多的に情報として知れるというのは実際のとこ個人的には非常にありがたい。書籍として出版されることが減ってきているという時代に、しかも需要がどんどん減ってる日本語での技術情報提供でというあたり、儲かりもしないのにこれだけのレベルでまとめ上げてくれた各位には本当に感謝したい。</p>

<p>著者らは「＊年後にさらにこの本の続編が出ることを期待して」のような記載を残している。これこそ、こういう領域に熱意を持って力を注ぎこむような人が今後も続くのかどうか、もっと言えば、こんな領域のソフトウェア技術開発を未来の時代に行っているほど日本(なのか日本語なのか)がグローバルに競争力を維持できているのかどうか、という話なのかなと思う。</p>

<p>前作と比べるとページ数が約1.5倍になっている。改めて前作を斜め読みするに、あまり細かく丁寧に説明するような文章にはなっていなくて、それに対し本作は文章をかなり丁寧に書いている事が多いので、その分がページ数の差なのかなと感じた。600ページ超えとなるともはや大型本よね。「サクッと読む」には少々重いというのが若干残念なところか。</p>

<p>というわけで、低レイヤー技術を対象に日本語で書かれた非常にレアな本で、その領域に片足を突っ込んでる人は迷わず買っておけというところ。逆に、低レイヤーに興味がない人には全くささらないと思う。</p>

<p>下記は本の内容で気になったところをメモがてらに。</p>

<p>HACK#6 共有ライブラリの検索の実例 <br />
P39「AT_SECUREタグを持つエントリが含まれていた場合」<br />
今まではsuなどのときにLD_LIBRARY_PATHが無効になる条件がわからなかったけど、補助ベクトルが効いていることを知れてよかった。<br />
過去の記事のどこかに「わからない」と自分で書いた記憶があるんだけど、探しても見つからなかったので、訂正ができない。。</p>

<p>HACK#10 TLSのしくみを理解する<br />
P58「TLSアクセスモデル」<br />
gdbでattachしている最中にThread Local Storageな変数へアクセスする方法がいつもわからずに苦労していた。このあたりの記載を頼りに調査すれば、今どきのgdbからのアクセス方法を確立できそう。</p>

<p>HACK#17 LIEFを使ってELFバイナリを書き換える<br />
P92あたり<br />
まさに最近はシンボルの書き換えがクソめんどいから、こういう専用のツールがあることを知れてよかった。ただPython製というのはどうなんだろ。特にクロス環境にて、いずれにしてもlibelfに依存することを考えれば、Pythonに追加対応させるためのツール整備も最近なら大した事ない？</p>

<p>HACK#38 cgroupでプロセスのリソースを管理する<br />
P248 「IOCOST」<br />
I/O Schedulerで制御することしか知らなかった私からすると、こんな他の手段もあるんだなぁと知れてよかった。けど、本書での紹介っぷりからすると、必ずしも思い通りにI/O量を制御できるわけではなさげ？I/O Schedulerでも制御が難しいし、やっぱりI/O制御は難しいという話なのか？</p>

<p>HACK#43 /proc/PID/rootからコンテナ内のファイルに直接アクセスする<br />
docker内のファイルへ外から簡単にアクセスする方法、ずっとこれのやり方が知りたかった。わからなかったので、わざわざdocker cp使って毎回中から外へ大量のコピーをしてしまっていた。</p>

<p>HACK#49 ftraceを使ってカーネル内で起こっていることをトレースする<br />
P341あたり、<br />
KernelShark trace-cmd、あたりは過去に使ってみたことはあるんだけど、これ、目的を定めて使わないと逆に迷走するなと感じた。GUIで可視化すると一部のエライ幹部に受けが良くて、かえって性能改善活動のジャマになって(以下略</p>

<p>セキュリティの大章は全般的にツールを使った力技的な話が多くて「HACKしている」感があまりしないと感じた。数値表現の大章はいわゆる数値計算の分野だというイメージが強くて「まぁ知らなくてもいいかな」と読み飛ばし気味になってしまった。</p>]]>
        
    </content>
</entry>

<entry>
    <title>C++ Programmingメモ 2024/06/17 デストラクタ noexcept</title>
    <link rel="alternate" type="text/html" href="http://www.rarul.com/mt/log/2024/06/c-programming-2.html" />
    <id>tag:www.rarul.com,2024:/mt//1.1067</id>

    <published>2024-06-17T13:05:24Z</published>
    <updated>2024-07-06T15:47:23Z</updated>

    <summary>● いきなり結論 dtorは可能な限り noexcept を明示的につける。 ●...</summary>
    <author>
        <name>らるる</name>
        
    </author>
    
    
    <content type="html" xml:lang="ja" xml:base="https://www.rarul.com/mt/">
        <![CDATA[<p>● いきなり結論<br />
dtorは可能な限り noexcept を明示的につける。</p>

<p>● 参考サイト<br />
非自明なデフォルトのデストラクタは暗黙にnoexcept<br />
<a href="https://faithandbrave.hateblo.jp/entry/20120322/1332399681">https://faithandbrave.hateblo.jp/entry/20120322/1332399681</a><br />
C++ の noexcept specifier のちょっとややこしい仕様<br />
<a href="https://zenn.dev/mafafa/articles/a8ae1e546f7634">https://zenn.dev/mafafa/articles/a8ae1e546f7634</a></p>

<p>● 仕様の要点だけを抽出<br />
 - 派生クラスのdtorが例外を出すなら、dtorは暗黙にnoexcept(false)である<br />
 - 基底クラスのdtorがvirtualかつ例外を出すなら、dtorは暗黙にnoexcept(false)である<br />
 - = deleteと定義したら、dtorのnoexceptは翻訳対象から外れ考慮外になる<br />
 - 上記に当てはまらなかったら暗黙にnoexcept(true)である<br />
上記のルールにより、declareとdefineとでnoexcept(true|false)が入れ替わるということが起こり得る</p>

<p>● ハマった点<br />
Effective Modern C++ 項目22: Pimpl イディオムを用いる際は特殊メンバ関数を定義する<br />
のルールに則ると、<br />
 - a.hpp に class A で virtual ~A(); とdeclare する<br />
 - a.cpp に class A で A::~A() = default; と define する<br />
という具合になると思う。<br />
が、このように書くと、バカマジメに仕様を解釈しようとするやつ(某静的解析ツール)は、<br />
 - declare と define とで noexcept のprototypeが異なるかもしれない<br />
みたいなことを言い出す。<br />
回避するためには、基本的に noexcept(true) であると明示した方が良いとなる。<br />
 - a.hpp に class A で virtual ~A() noexcept; とdeclare する<br />
 - a.cpp に class A で A::~A() noexcept = default; と define する</p>

<p>● 所感<br />
C++ﾏｼﾞ闇。。ﾏﾘｶしょ。。</p>]]>
        
    </content>
</entry>

<entry>
    <title>Linux memo 2024/05/23 録画サーバ編</title>
    <link rel="alternate" type="text/html" href="http://www.rarul.com/mt/log/2024/05/linux-memo-2024-2.html" />
    <id>tag:www.rarul.com,2024:/mt//1.1066</id>

    <published>2024-05-23T14:36:21Z</published>
    <updated>2024-05-23T14:43:05Z</updated>

    <summary>● 概要 「Mirakurun + EPGStationで録画サーバを作ってみた...</summary>
    <author>
        <name>らるる</name>
        
    </author>
    
    
    <content type="html" xml:lang="ja" xml:base="https://www.rarul.com/mt/">
        <![CDATA[<p>● 概要<br />
「Mirakurun + EPGStationで録画サーバを作ってみた」みたいな記事はもはやそこら中に溢れてるし、手順通りやると構築するだけなら難しくないので、ここではそういうのに書かれてなさそうな点を中心にメモしておく。</p>

<p>● パソコン<br />
TRIGKEY G4 N95にした(<a href="https://amzn.to/3VeP3xz">Amazonアフィ</a>)<br />
ライセンスの怪しいWindowsは使わない、技適が怪しいBluetooth/WiFiは使わない。<br />
<a href="/mt/log/2024/03/linux-memo-2024.html">以前にも書いた</a>けど、BIOSで「Advacnced→Power→GT→RC6」を「Enable」にするとGPU消費電力を抑えやすい。あとは、PL1/PL2制限をキツめにし、Ethernetを100Base-TXに制限し、不要なUSBは接続しない(キーボード・マウス)、不必要なHDMIを接続しない、systemctlでbluetoothdを止める、/sys/devices/system/cpu/cpufreq/policy0以下で「energy_performance_preference = balance_power」「scaling_governor = powersave」「scaling_max_freq = 1500000」とかしておけば、idle時で5W前後にはなるはず。WiFiドライバやBluetoothドライバをrmmodしても特に変化は見られなかった。</p>

<p>● チューナ<br />
PLEX PX-W3U4(<a href="https://amzn.to/3Kc1LGK">Amazonアフィ</a>)<br />
<a href="https://github.com/nns779/px4_drv">px4_drv.git(@nns779)</a>という非公式ドライバがあるが、メンテが止まっちゃっているので、<a href="https://github.com/tsukumijima/px4_drv">forkしたこっち(@tsukumijima)</a>のほうがいいかもしれない。Ubuntu-24.04LTSで試すと、UBSANのオーバラン誤検出でdmesgが汚れて困ったので、<a href="/mt/img/24/0001-change-usage-for-variable-array.txt">パッチ(0001-change-usage-for-variable-array.txt)</a>作った。が、同じようなパッチを作った<a href="https://rentry.co/tschardev20240203">人がすでにいた(px4_drv_chrdev20240521.patch)</a>。</p>

<p>● ICカードリーダ<br />
SCR3310/v2.0(<a href="https://amzn.to/4arJHDm">Amazonアフィ</a>)<br />
可能なら、ICカードリーダはPX-W3U4に内蔵のを使ってみたかったが、Windowsで実際に動かしてUSBバスのダンプを取って...みたいなリバースエンジニアリングする気力までは出なかった。</p>

<p>● Mirakurun(チューナサーバ)<br />
docker拾い食いに抵抗がないなら、<a href="https://github.com/l3tnun/docker-mirakurun-epgstation">docker-mirakurun-epgstation.git</a>が楽だと思う。recpt1を自分でコンパイルして準備し、tuners.ymlとchannels.ymlを整える必要はあるが、逆にそれだけ行えばもう動いてしまう。後述するが、私はEPGStationは自前で立てることにしたので、docker-compose.ymlでそのへんをごまかした。</p>

<p>● EPGStation(録画視聴サーバ)<br />
Ubuntu-24.04LTSのaptで取れるffmpegでも、vaapiとIntelプロプラドライバを整えれば、QSVによるハードウェアエンコードができるということがわかったので、Ubuntuホストのffmpegを使うためにも、EPGStationはdocker板ではなくて自分で立てることにした。とはいえ<a href="https://github.com/l3tnun/EPGStation">公式のレポジトリ</a>から持ってきて手順通り動かすだけだけど。ffmpegをvaapiのh264で動かすために、<a href="/mt/img/24/config.txt">config.yml</a>と<a href="/mt/img/24/enc.txt">enc.js</a>を変更した。QSVを使うとN95の1.5GHzでもh264エンコードは余裕だった。まぁソフトエンコでも-threads対応だから200-300%くらいでリアルタイムでも回るんだけど。改めてN95/N100シリーズってすげぇ。</p>

<p>● サスペンド<br />
いくら省電力とはいえ、何もやっていないときにも動かしっぱなしにするのはなにかもったいない。ということで、スケジュールをチェックしてサスペンドする<a href="/mt/img/24/suspendd.txt">suspendd.plのPerlスクリプト</a>を書いた。次の録画予約、3日に1回EPGデータ巡回、重要なプログラム(sshログイン・Sambaアクセス中・recpt1使用中)、をチェックして空いていたらサスペンドする(rtcwake -m mem -s 3600)ようにしてみた。注意点として、EPGStationは<a href="https://github.com/l3tnun/EPGStation/issues/419">公式にはサスペンドをサポートしていない</a>ので、起き上がってきたらresettimer(curl -X POST "http://127.0.0.1:8888/api/recording/resettimer")をしてタイマーのイベントドリブンを再スケジュールする必要がある。しなかったらタイマーイベントがずれて録画予約に失敗する。</p>

<p>● その他<br />
マジメに使い倒すならばデータ置き場をHDDにしたりもいいんだけど、まぁ遊びだから、たぶんこのくらいまでにとどめておくことになるんじゃないかなと思う。暇があれば、生のMPEG2-TSからパケットパースしてschedule EITやpf EITをひろってきて番組表を自力で作る、なんてのもいいのかもしれない。</p>]]>
        
    </content>
</entry>

<entry>
    <title>「鉄道会社vs地方自治体 データが突き付ける存続限界」読んだ</title>
    <link rel="alternate" type="text/html" href="http://www.rarul.com/mt/log/2024/05/vs.html" />
    <id>tag:www.rarul.com,2024:/mt//1.1065</id>

    <published>2024-05-19T14:25:14Z</published>
    <updated>2024-05-19T14:29:24Z</updated>

    <summary>Amazonアフィリンク 鉄道業界が社会や地域へ貢献できなくなっている具体例を示...</summary>
    <author>
        <name>らるる</name>
        
    </author>
    
    
    <content type="html" xml:lang="ja" xml:base="https://www.rarul.com/mt/">
        <![CDATA[<p><a href="https://amzn.to/4bozY20">Amazonアフィリンク</a></p>

<p>鉄道業界が社会や地域へ貢献できなくなっている具体例を示して問題点を指摘する本。地方赤字路線の廃止を主題にしつつも、鉄道存続そのもののみを議論しても意味がなく、交通を介し地域や自治体が自身を今後どのように運営するべきかを考えないといけない、と説いている点が特徴となる。</p>

<p>趣味のジャンルで活動する人が多い鉄道系YouTuberの分野で、社会問題の観点で語る<a href="https://www.youtube.com/channel/UCX2B8AAnHPRMmJFjjUo7EeQ">YouTubeチャネルを運営する鐵坊主氏</a>の著作。元旅行代理の経歴から鉄道を切り口に地域や自治体のあり方を考える動画をカナダから投稿する、というなかなか類のない活動を行っている。自治体や会議体の公表する資料を読み解きながらていねいに根拠を積み上げて議論する、という点も著者の強みとなっている。</p>

<p>鉄道事業は固定費が重く、また関東ですら今後人口減を迎えるため、それを踏まえ各社は長期計画を立てて運営していたが、それが新型コロナの登場で短期計画がすべて吹っ飛ぶほどの赤字になり経営が揺れ動いた。このため、各社により温度差はあるものの、どこも人口減を見据えた長期計画を前倒しで始めざるを得なくなった。これが、特にJRで、地方の赤字鉄道路線を維持するのはこれ以上はムリだとして廃線に向けて議論を加速したい動きになっている。方や地元自治体は、従来通りの廃線反対な声を上げるだけの例が未だに多い。議論を単に先延ばしにするだけではダメで、人口減の速度と社会情勢を踏まえた地域交通のあり方を真剣に考えなければいけない、と著者は説いている。</p>

<p>私も素人ながら地域や都市機能と交通とのあり方をおぼろげながら考えることがあったけど、著者のYouTubeチャネルを見始めてから、かなりマジメに考えるようになった。特に、ここ25年ほどは一貫して、(新幹線を除き)鉄道路線の整備よりも高速道路網の整備が優先され続けてきていて、それにより、高速バスがJRの特急に勝つ方面が増えた、という点をきちんと理解できていなかったと反省している。是非はともかく、JR分割民営化により、大都市部と新幹線以外はもう諦めて手を抜くんだという国交省の方針の成れの果てが今なんだと思い知らされた。これでは、未だに「国鉄」の認識と変わらない主張をするような自治体とは議論がかみ合わないわけで。</p>

<p>新聞や銀行と並び、もはや斜陽だと言われることもある鉄道業界の現状を知るうえでの良本。特に、鉄道を主人公に語るのではなくて、自治体や社会のあり方に踏み込んで考えている点がよい。逆に、現在の議論が停滞している状況を一変させるアイディアを語っているわけではない点には、現実的になかなかいい案があるわけではないとはいえ、仕方がないのかもしれない。</p>]]>
        
    </content>
</entry>

</feed>
