たにしきんぐダム

プログラミングやったりゲームしてます

〇〇(自分の経験したことや得意なこと)は重要であるという認知の歪み

最近Twitterで次のような発言をいくつか目にした(〇〇にはその人が得意とすることや経験したことが入る)

  • 〇〇という本を読んでないやつは☓☓としてダメ
  • 社会人なら〇〇くらい一度はやっておくべき
  • 〇〇もできないとかヤバいだろ

自分が正しい選択をしたのだ・自分は重要な人間なのだと思いこむために、自分が既に経験したことや習得しているものをとても重要なものだと思い込む認知の歪みから、こういう発言に繋がっているのかなと思った。

例えば自分もソフトウェアエンジニアやるなら英語はある程度読み書き出来たほうがいいのでは?みたいな風に思うことがあるけれど、これは自分がすでに英語がある程度読み書き喋れるからそう思っているのであって、もしそうでなかったらこうは思わないだろうな思う。 別に英語以外にもソフトウェアエンジニアにとって重要な物事はたくさんあるのに、自分が既に習得しているものだけを特別重要視しているような気がして、自分の認知の歪みに気づいてとても恥ずかしい気持ちになった。

謙虚に生きよう

自分のスキルや経験が自信に繋がるのは良いことだけど、それを他人に対して〇〇すべきと考えるのは認知が歪んでいる気がするね。こういう認知の歪みを表すXX効果みたいな心理学の言葉とかってあったりするのかな -> 確証バイアスとかはちょっと近いかも

(メモ)複数のオブジェクトファイルが同じ compilation unit DIE を持っていてmtimeが同じだと、Darwin linkerが重複したオブジェクトファイルのデバッグ情報を無視する?

zenn.dev に移しました

github.com

Darwin linker はデバッグ情報を最終成果物のバイナリにリンクしない。その代わりに、リンクされたオブジェクトファイルへの絶対パスとタイムスタンプを含む N_OSO タイプの symbol を出力バイナリのシンボルテーブルに出力する。

このへん? github.com

こういうやつ

cat foo.c
int main() {
  int x = 1;
  return x;
}


❯ clang -g -o foo foo.c

❯ dsymutil --symtab foo | grep N_OSO
[     3] 00000061 66 (N_OSO        ) 00     0001   0000000064f56464 '/var/folders/xt/hyn73bjx4kl6hjj9sxnf1yzh0000gn/T/foo-e04e09.o'

デバッガは N_OSO シンボルを見て、object file 内のデバッグ情報を参照したり、dsymutil コマンドは N_OSO のエントリを参照して obect file から デバッグ情報をかき集めて dSYM bundle を生成する。 llvm-project/llvm/lib/Object/ArchiveWriter.cpp at e2cb07c322e85604dc48f9caec52b3570db0e1d8 · llvm/llvm-project · GitHub

(ここはちょっと怪しい)

// For an object file, the N_OSO entries contain the absolute path

// path to the file, and the file's timestamp. For an object

// included in an archive, the path is formatted like

// "/absolute/path/to/archive.a(member.o)", and the timestamp is the

// archive member's timestamp, rather than the archive's timestamp.

//

// However, this doesn't always uniquely identify an object within

// an archive -- an archive file can have multiple entries with the

// same filename. (This will happen commonly if the original object

// files started in different directories.) The only way they get

// distinguished, then, is via the timestamp. But this process is

// unable to find the correct object file in the archive when there

// are two files of the same name and timestamp.

llvm-project/llvm/lib/Object/ArchiveWriter.cpp at e2cb07c322e85604dc48f9caec52b3570db0e1d8 · llvm/llvm-project · GitHub

archive object 内の object file が同一 path かつタイムスタンプをもつ場合に Darwin linker がオブジェクトファイル(内のデバッグ情報を)区別できないという話。

archive object の話だから関係ないかなと思ったけど、同一 object file の CU DIE が同一 DW_AT_comp_dirDW_AT_name と同じ mtime を持っている場合、明らかに重複した object file に対する N_OSO シンボルが生成されてない問題を見つけた。

なので、上の LLVM 内の記述は 1 source file - 1 object file でコンパイルすることを前提として書かれているのではないか? object file の path と行っているけど実際はその object file に含まれる CU DIE の属性を参照しているのでは? (推測)


ScalaNative 0.4.14 での実装では package ごとに .ll ファイルを生成して、.ll.o にコンパイルする。その結果 1 Scala ファイル内に複数 package があると 複数の .o ファイルが作られるし、それらの CU DIE はいずれも同じ Scala ファイルを指す。

// Test.scala
package A { ... } // A.ll.o whose compilation unit DIE points to Test.scala
package B { ... } // B.ll.o whose compilation unit DIE points to Test.scala
package C { ... } // same

これで Test.scala から生成される .o ファイルの mtime が同じだと重複したうち一つの .o ファイルしか N_OSO が最終的なバイナリのシンボルテーブルに追加されず、dsymutil はオブジェクトファイルの検索に失敗する。

そして warning: (arm64) could not find object file symbol for symbol __SM33scala.scalanative.issue1359.Main$D1fL16java.lang.ObjectEO みたいな warning を吐いてくる。

llvm-project/llvm/tools/dsymutil/MachODebugMapParser.cpp at 1ef1eec8db21f35286d9c7fa0a48bb0b6446fe11 · llvm/llvm-project · GitHub

github.com

どうなるかな -> ディレクトリごとに分割するようにしました

参考

dkimitsa.github.io

github.com

github.com


archive 内の object file が同一 path かつタイムスタンプをもつ場合に Darwin linker がオブジェクトファイル(内のデバッグ情報を)区別できない問題を回避するため(OSXの?)arコマンドはアーカイブ内の.oファイルのmtimeをわざと1秒ごとずらす?みたいなことやるっぽい https://github.com/llvm/llvm-project/blob/e2cb07c322e85604dc48f9caec52b3570db0e1d8/llvm/lib/Object/ArchiveWriter.cpp#L698-L739

(けど、その結果link結果がdeterministicじゃなくなって困るみたいな話もあったっぽい (これは ZERO_AR_DATE=1 で回避))

github.com

B/43 1週間使ってみたけど結構良い気がする

b43.jp

家計簿みたいなものをつけたことがなく、自己認知では食費はせいぜい月5万程度でしょうと思ってるけど、実際は全然そんなことないみたいなことが多くB/43を使い始めてみた(一人での利用)。

正直ペアカードとか使わない限り、一人で利用してもそんなに嬉しくないのでは?って思っていたけどかなり良い。

もともとマネフォやマネーツリーなどを使ってみるみたいなことをやっていたけれど、銀行引き落としと現金/カードの利用が二重計上されている(実際はうまいこと計算されてる?のかもしれないけどそこがよくわからないこともストレスになっていた)のとか、反映が遅いのとかもあり登録だけして活用できた試しは無かった。

B/43の良いところ

  • お金の出処がB/43プリカからしかないので、銀行引き落としだのなんだののノイズが混じって訳分からんくなることがない。
  • プリカ利用すると即反映されてアプリに通知が来る。
    • 即反映思ったより嬉しくて、その場で支出カテゴリの変更とかができる
  • なんか全体的にできることを削ってユーザーに自由度を与えないデザインにすることで簡単に利用できるようになってる気がする
    • 例えば、たまにプリカ以外の支出を登録したいとか、支出のタイトル変更したいみたいなことを思うのだけれど、それができるとそれをやってしまって結局疲れてしまいB/43の利用自体もやめてしまう気がする
  • VISAタッチ
    • 逆にそうじゃなかったら絶対使ってないと思う
  • ペアカードとか家族カードとかも将来的に便利そうですね

B/43の微妙なところ

  • たくさんトラッキングするためにはできるだけB/43プリカからお金を払う必要がある。
    • その結果、ポイント還元率の高いカードやアプリでの支払いが減るので全体的にはポイント還元分だけ損していることにはなる。
    • 個人的にカード単体のポイント還元とかたかが知れてて、それよりもトラッキングできることのほうが重要だと思っているので、まあ良いかなと思ってる。
  • Google Pay での 非接触決済ができない Google ウォレットにカード登録できますか? – B/43 ヘルプ
  • プリカ以外の支出を登録したい気もする(ほんまか?)
    • なんか細々した現金支出は別にいいんだけど、定期的な銀行引き落としとかが登録できると良いなーと思う。良いと思うけど自動で登録するのは難しそうだし、手動では絶対やりたくない。あとそれができるようになると頑張りすぎて疲れる予感もある。
  • B/43 プラス に行きたいモチベーションがなさすぎる
    • カテゴリ追加とか、明細分割は地味に便利そうだけど、B/43の手間がかからない良さが低減してしまう気がする。

今後どれくらい使うかわかりませんが、少なくともこれまで家計簿アプリ使ってポジティブな感情になったことが無かったことを考えるとB/43はかなり良い気がしている。

プログラミングと作りたいもの(がない)

プログラミングという行為自体が好きで、その行為自体があまりにも好きなので最近はプログラミングを補助するツール(IDEコンパイラやら)を作ったり、プログラミング体験に関する論文を読んで研究しようとしたりしている。一方でプログラミングにより作りたいものみたいなものがない。(プログラミングのためのプログラミング以外で)

なんか面白いプログラム支援ツールが作れるといいなーと思うけど、正直それよりも大きなシステムの一部の機能をカチャカチャ盆栽みたいにいじくったり、人の書いたコードの歴史を読み解くのが好きだ。

最近はそういう感じで楽しくやっているのだけれど、プログラミングを初めて2-3年あたりは、プログラミング自体が好きでつくりたいものがないということにとても悩んでいたなーとふと思い出した。

多分これは就職活動やアルバイトの面接でどういうものを作ったんですか?どういうものを作りたいんですか?みたいなのを聞かれる一方で、自分は特に作りたいものがなくて、その工程が好きなだけというギャップがあったからなんだと思う。

そういえば数年前、就職相談会みたいなので学生さんから似たような悩み(プログラミングがやりたいだけで、何を作りたいとかない)みたいな相談されてとても共感して、自分もそうだけどなんとかやれてるので大丈夫だよという話をしたのを覚えている。相談してきた彼の心をいくぶんか軽くできたならいいなーと思う。


ところで自分がソフトウェアエンジニアとして楽しくやれているのはこういうルーツがあるからなのだけれど、いっぽうでITプロダクト自体やお金儲けをするビジネスにあまり興味がないので、マネジメントなどのレイヤーになる場合自分はそれでもソフトウェアエンジニアという職業にしがみつくべきなんだろうか?とか思っていた。絶対仕事楽しめない気がする。

しかしこの間 podcast を聞いていたら #28: Tolerance for Chaos (Part 1) – PositiviTea マネジメントも人間という独立したコンポーネントをうまいこと操作することみたいな話であり分散システムみがあるという話を聞いて、なんだかんだ面白いのかもしれないという気もしてきた。

一方IT関係の仕事やるなら手は動かしていたいのでスタッフエンジニアの本とか読むと良いのかもしれない。

大学院どうすんの

最近研究へのモチベーションがない、ないというか優先度が低い

  • 仕事が今アツすぎる
    • Scalaコンパイラや開発支援ツール作る仕事 (しつつクライアントワークも) してて、正直暇があればそっちの勉強とかしてしまう
    • 半年か1年くらいしたら仕事も単調になって研究やる暇もできるだろうと思ってたけど、ひっきりなしに新しいプロジェクト(完全に違う分野)にアサインされてて今は4-5プロジェクトくらい並行でやっててあまり暇じゃない。
  • 休みの日に仕事の勉強しない方がいいのでは?
    • それはそう、そうなんだけど、楽しいんだよなぁ
  • 趣味がアツすぎる
    • 最近ボルダリング再開してから楽しすぎる、まあ週3-4で一回3-4時間なので、週に使ってる時間は9-16時間程度ではあるけど確実に時間を圧迫してる。優先度は仕事より高い。
  • 修士号は大事ですか? 正直今のところ博士号進学は考えてないし、アカデミアでやっていきたい気持ちもない。じゃあ修士号いらなくない?
    • 将来的に(やるかは分からんけど)リロケーションとかしようと思ったときに点数になる。
    • 専門性(開発支援ツールなど)の話をするときに泊がつく? なんか称号で泊がつくとかそういうのくだらないなと思いつつ、全く知らない人間には有効だよね
  • やる気ないなら大学院やめちゃえば?
    • サンクコストではあるけど今まで払ってきた学費や時間を捨てるのもなぁ、まあ得られた経験や知識は残るんですが...
    • やめてしまうとまた研究やる気になってきたときに、受験し直して、単位とってみたいなのがダルすぎる。
  • 研究はしたいんですか?
    • どうなんだろう、作りたいもののアイデアはいくつかあるんだけど優先度が低くて手が出ない。
    • ガチでやる気があるなら他の時間削ってでもやるはずなのかもしれない。
  • 休学すれば?
    • 実際一旦研究以外の単位全部とって一旦休学しつつモチベーションが上がったり、仕事が暇になる機を伺うのが安牌な気はする。
    • しかしなんかそうやって未練たらしくダラダラ大学院に残ってそんな近い未来に機会が訪れるのか?本当に?