git update-index --skip-worktreeで無視したファイルを探す

git で管理されてて、更新したけどコミットする気はないファイルがあると色々面倒ですよね。
そんなときは git update-index --skip-worktree で更新を無視できるわけですが、これを適用したファイルがわからなくなった場合は、以下のコマンドで確認できます。

git ls-files -t | grep ^S

git ls-files -t *1

       This option identifies the file status with the following tags (followed by a space) at the start of each line:

       H
           cached

       S
           skip-worktree

       M
           unmerged

       R
           removed/deleted

       C
           modified/changed

       K
           to be killed

       ?
           other

Ubuntu Manpage: git-ls-files - Show information about files in the index and the working tree

という効果があります。

しかし、気になる記述もあります。

This feature is semi-deprecated. For scripting purpose, git-status(1) --porcelain and git-diff-files(1) --name-status are almost always superior alternatives, and users should look at git-status(1) --short or git-diff(1) --name-status for more user-friendly alternatives.

alternativeとして挙げられているコマンドを試しても S は出てこないので、廃止されると困るのですが……

*1:-v または -f でも可

私の知らないbashの世界

samplerで遊ぶにあたり、bashについて調べました*1github.com なんとなく使っていたbashですが奥が深いということがわかりました。

ここからの引用は特にことわらない限りJM projectのbash(1)からのものです。

Man page of BASH

おことわり

以下の文章はPOSIXシェルの仕様とbash拡張を区別しないで書いています。

単純なコマンド

まず、最も小さな単位である「単純なコマンド (simple command) 」から。

単純なコマンド (simple command) とは、 変数の代入を並べたもの (これは省略可能です) の後に、 ブランク区切りの単語とリダイレクションを記述し、 最後に制御演算子を置いたものです。

早くも驚きです。

変数の代入

変数の代入はsimple commandの構成要素であり、しかもそれを実行するコマンドの前に置くのも、最も基本的な使い方ということです。

コマンド名が残らなかった場合には、 変数を代入した結果が現在のシェル環境に効果を及ぼします。 それ以外の場合、変数は実行されるコマンドの環境に追加されるだけで、 現在のシェル環境には影響を与えません。

(現在のシェル環境における)変数を定義するのと、実行するコマンドの前に変数定義を置いてコマンドの環境変数を定義するのは、別々の構文だと思っていましたが、同じsimple commandなのですね。
実行するコマンドの前に変数定義を置いてコマンドの環境変数を定義するのは、なんとなく裏技っぽい(exportが正統な方法)と思っていましたが、そんなこともなし。

リダイレクション(リダイレクト)

リダイレクトはよく使いますが、これもsimple commandの一部なんですね。

パイプライン

パイプライン (pipeline)は、制御演算子 | または |& で区切った 1 つ以上のコマンドの並びです。 パイプラインのフォーマットを以下に示します:

[time [-p]] [ ! ] command [ [|||&] command2 ... ]

またしても驚きです。

timeキーワード

timeはキーワードであり、コマンドではないんですね。正確には、timeコマンドは存在するんですが、bashで普通に書くとコマンドの方は実行されません。

manpages.ubuntu.com

そして、time|, |&と同レベルの要素としてパイプラインを構成するということは、timeによる出力はコマンドの出力とは別であり、直接パイプラインで渡すことはできないということになります。

$ time sleep 1 |& cat > /dev/null 2>&1

real    0m1.007s
user    0m0.004s
sys 0m0.003s

timeによる出力をパイプラインで渡すにはひと工夫必要になります。

パイプラインとサブシェル

パイプライン中の各コマンドは、それぞれ別のプロセスとして (つまりサブシェル内で) 実行されます。

これも見落としがちな点ですね。

$ strace -f bash -c ': | :' |& rg -o "^\[pid\s+.+?\]" | sort | uniq | wc -l
3

うっかりパイプラインを多用するとプロセスがたくさん起動されることになりますが、それよりも問題なのは、もとのシェルと環境が違うことです。

echo hello | read foo
[ -v foo ]
echo $?
1

readコマンドにより"hello"fooに代入されたはずですが、[ -v foo ]は非ゼロ、つまりfooという変数は未セットということになっています。
これはread fooがサブシェルで行われているため、もとのシェルには影響しないからです。
これをどうにかするにもひと工夫必要です。

続く?

疲れたのでここで終わりにします。

*1:samplerが内部で実行するのはsh -cですが

LXD内でdockerを動かす

備忘録がてら、調べた技術ネタを書き留めておくことにしました。

タイトルのとおり、LXD内でdockerを動かす方法を調べました。
検索すればいっぱい出るのですが、自分はLXDをsnapで入れたのに対して、aptで入れたLXDでしか使えない方法だったり、コマンドだけ書いてあって出典がわからなかったりしたので、公式ドキュメントにあたりました。
このブログの技術記事では今後も極力公式ドキュメントを引用していきます。

では本題です。
LXD FAQ によれば、以下の設定をコンテナに適用するだけです。snap版LXD 3.22で確認しました。

security.nesting: "true"

fooコンテナに設定を適用するには、config setコマンドを以下のように用います。

lxc config set foo security.nesting true

上記FAQには

depending on your Docker configuration you may need to have the needed extra kernel modules loaded by the host.

とありますが、僕の場合にはこれはあてはまらず、security.nestingを設定するだけでできました。

以上です。
これからもこういう小さな記事から書き留めていきます。

感情という知的能力

「悩みにふりまわされてしんどいあなたへ 幸せになるためのいちばんやさしいメンタルトレーニング」という本を読みました。

 この本の重要なメッセージとして「感情(を引き起こす状況)を言葉で解釈せず、その感覚を十分に味わおう」というものがあります。

これとは無関係に「モラベックのパラドックス」というものを知りました。

モラベックのパラドックス - Wikipedia

これは「ずっと前から持っている能力は自然淘汰により磨かれているから簡単なことに感じるし、抽象的思考という最近の能力は未熟なので難しく感じる」というものです。

この2つの主張は通じるものがあると思いました。
我々は体験に対して、身につけたばかりで未熟な「思考」という能力で対峙しがちですが、それよりも遥か昔に身につけ磨かれてきた「感情」という能力をもっと信用してもいいんじゃないかと。
少なくとも「悩んでいる」ということは「思考」は有効ではないということなので、他の能力=「感情」を駆使していいんじゃないか、などと思いました。

「時間がない」とSpotifyの話とか

KIRINJI「時間がない」がなかなか気に入りました。

音楽としてもさりながら、歌詞の

まだ母さんは惚けてはない
今日も息子は学校に行かない
まだローンは残ってるし
俺、まだ世界を見てない

というところがなんとも、聞き流させてくれない感じです。「世界を見る」とかいった、未知のものへの好奇心というのは僕にはない(欲しくてしょうがない)んですが、それがある人にも僕と同じような(僕は結婚すらしてませんが)日常がある―平凡な日常を送りながら好奇心を絶やさないということを、全体でたった4フレーズの、最後の1フレーズで突然、しかし流れるように表現しているのが意表を突かれます。もうちょっと尺を取っても良さそうなテーマですけど、それこそ「時間がない」というところでしょうか。

 

www.sokonoasai.com

なんとなくググったらこちらの記事がヒットしましたが、これによるとKIRINJI(旧キリンジ)はもともと兄弟で、現在は弟が脱退しているそうです。
キリンジ」は昔Bay FMかなにかで何度か聞いたような気がするんですが、そのときはいいなと思った覚えがないですね。弟の特色が出た曲を聞いたのかな。

www.sokonoasai.com

筆者の方は、続く記事でKIRINJIの最新アルバム「愛をあるだけ、すべて」を取り上げる中で、少し前に話題になった以下の記事に触れています。

amass.jp

これに関して、少なくとも僕は逆です。30を過ぎたこの歳になってから新しい音楽を聴くようになりました。これは完全にSpotifyのおかげですね。Spotifyの「アーティストRADIO」を聴いていると、聴いているアーティストに近い他のアーティストの曲が再生されてくるんですね。実際にそれで「時間がない」を聴きました。確か、Fantastic Plastic MachineのアーティストRADIOだったかな。
「もともと聴いている曲に近い曲を」「ストリーミングで」聴くことが「新しい音楽を探」すことに該当するかと言われると困るんですが。

ちなみにSpotifyで「愛をあるだけ、すべて」からは他に「AIの逃避行」を聴き、これも気に入りました。この曲はCharisma.comというアーティストとのコラボで、Charisma.comの曲も聴いていくつか気に入っていたんですが、ふと調べたところ無期限活動休止だそうです。

それにしても……自分が中学生ぐらいの頃にSpotifyがあれば「CD高くて買えないしMD持ってないから借りてもしょうがない」だとか「マイナーだから地元じゃ手に入らない」なんてことはなかったのに。いや、Spotifyに限らず様々なサービス、っていうかインターネットですね。最近の子が羨ましい。僕も「欲しいものは手に入らない」と学習しなければ「まだ世界を見てない」と思えたかもしれない。欲しいものが欲しい……

無題

gigazine.net

ワーウィック大学のピーター・バッカス博士たちの研究グループは、チェスの世界での男女の実力の違いから、男性と女性の競争における優位性の原因を探りました。

 「チェスの世界で女性は男性に劣る」という固定観念こそが女性がチェスで上位に食い込めない原因であるとバッカス博士たちは指摘しています。

研究者たちは「チェスの世界にはびこる、男性優位の固定観念が影響を与えている」という可能性を指摘しています。否定的な固定観念に苦しむ者はそれを避けようとする不安を抱いたり、固定観念を受け入れ追随したりすることが多いことが知られており、「男性の方が強い」という固定観念に女性が縛られてしまうことで、本当の能力を発揮できていない可能性があるとバッカス博士たちは考えています。

この指摘が正しいとして、何かすべきなんだろうか。

勝負事において色々な思い込みがパフォーマンスに影響を与えるのは多くの人が経験していると思う。

この結果について言えば「勝てないと思っているから負ける」ということに過ぎない。それは性別に関係なく、そのプレーヤーの能力の問題。だから男女平等の観点からここに介入することはない。

では「女はチェスが弱い」という意見に対して「それはそういう観念が先に定着しているせいだ」という反論はどうだろう。いやなんかフェミニズムな感じになってきた。そういうのは何年も前から頭のいい人たちが時間を使って考え議論してきているはずだから、俺が考えるのはやめよう。

研究の動機はチェスに絞られてはいないので、色々な分野で女性が「女だから活躍できない」という固定観念に苦しめられているのであれば、それがなくなるといいですね。

生活保護

news.livedoor.com

 

「障害でも何でもない 健康そうなこの人、一度でも自分の置かれた立場を、納税者のことを考えたことがあるのでしょうか」と、一部の保護受給者を厳しく批判する。

面接した程度で、障害かどうかわかるんだろうか。大体障害と言っても様々なのに。

そして「障害でないなら生活保護を受給すべきでない」という考えはどうなのだろうか。

生活保護という制度があるからには、制度の目的、制度が必要であるとする思想がある。それを学んだ上で「制度が目的・思想に沿っていない」「そもそもその思想がおかしい」という批判はあるかもしれない。しかし学んでもいないのに批判するのは、この制度に関して積み上げられた議論を踏みにじる行為だ。制度が適切に運用されていないことを批判するのは、別に学んでなくてもいいけど。

生活保護はまさしく生活に関する制度。だから誰でも関心を持ちうる制度と言える。誰でも一言言いたい。それはしょうがない。でも制度や運用が、よく学んでいない多くの人の意を汲むようにはならないでほしい。