2024-04-06: りらいん

Fiddleが読み込める、cursesが読み込める、TERMがterminfoにない、というときにRelineが起動せずに例外を出して落ちていたのを修正するPRを出した。環境によってはtmux-256colorがterminfoになかったりして発生してたっぽい。

Fiddleが読み込めないときとcursesが読み込めないときはフォールバック先があるのだからフォールバックすればよさそう。処理を止めさせるほどではないと思う。

返り値は使っていなかったので消した。

github.com

man 3x curs_terminfosetupterm の返り値の意味を見れた。例外のコメントどおりだった

ドキュメントの位置がよくわからなくて、ncursesを落としてきて setuptermgrepしてその結果をChatGPTに入れてドキュメントの場所を教えてもらった。man 3x curs_terminfo があることを知った。対象の分野についてよくしらないときに、手がかりを得るのに本当に便利だなーと思う

Q: これはncursesのディレクトリでgrepした結果です。setuptermの返り値や使い方を調べるにはどのファイルを見ればよさそうですか。ドキュメントとソースコード両方教えて下さい ~/Downloads/ncurses-6.4-20240330 ❯ rg setupterm (以下grepの結果)

A:

2024-03-26

2024-03-26が現職の最終出社日でした。3月末日の退職となります。3年3ヶ月の勤続でした。

フィヨルドブートキャンプから右も左もわからないままこの道への確信だけを抱いてきた自分が、自分がRailsプログラマだと胸を張って言えるようになったのはESMの環境あってのことでした。

フィヨルドブートキャンプからの就職先としてESMを志望したのは、Rubyコミュニティとの関わりを大事にしていること、技術力が高い人が多そうで成長できそうだという理由だったと思います。入ってみて、その見立ては合っていたと思います。Rubyコミュニティとの関わりについては、自分がやりたいと思うことをいいね、やってみようと言ってもらえる環境でした。自分が楽しく活動していたらRubyコミュニティに興味を持ってくれる同僚も増えたのではないかと思います。カンファレンス参加についてもかなり自由度が高く、台湾まで行かせてもらえる会社はなかなかないのではと思います。それは私たちが受託開発を生業としており将来の顧客が同じエンジニアの可能性があることや、コミュニティでの存在感を発揮するのもある意味では仕事の一部だからなのだと解釈しています。そういう意味では私がやってみたいこととアジャイル事業部の目指す方向性は合っていました。

技術力が高い人が多そうという期待はいい意味で裏切られました。技術力だけではなく、チームで開発していくことが好きな人、アジャイル開発が好きな人が多かったです。また、仕事以外のプログラミングも好きなメンバーばかりでした。アジャイル事業部技術ブログのトピックの幅の広さが好きです。

最初のプロジェクトでは先輩と組んでPHPからRailsへのリプレイスをしました。何もない場所から何をすべきか決めて進んでいく姿がかっこいいなと思っていました。それからいくつかのプロジェクトを渡り、Railsを中心に開発しつつ、インフラやCIにちょっかいをかけたり、アジャイルな仕事の進め方を学んだり、機能開発の交通整理をしたり、性能試験をしたり、なんやかんやあってふつうのRailsエンジニアになりました。フロントは弱くてインフラにちょっと強く、Railsはぼちぼちです。経験したことがないこともたくさんありますし、ESM基準で一人前とはとても言えませんが、見習いは卒業して自分のことを少し俯瞰して見られるくらいにはなったかなと思います。

いろいろなプロジェクトで仕事をする中で、受託開発であることの情報の流れに限界を感じていました。私たちはどこまでいっても外様で、情報は自分から手に入れにいかないと手に入らないことが多いです。私はたくさんの情報を得て自分の中にそれが動く模型を作るのが好きで、そのためには誰かに聞かなくても手に入れられる場所に情報が存在していてほしいです。誰かを通して得る断片的な情報では満足できなくなってきました。何かを作るときに、その動機から納得して共感して作りたい気持ちが強くなって、そして転職することにしました。新しい環境に入るのは怖い気持ちはありますが、自分がどこまでできるのか、どう感じるのか楽しみな気持ちもあります。1人のWebエンジニアとして、フロント、バックエンド、インフラ、チームなどの分野に関わらずプロダクトのためにできることを精一杯やっていけるようになりたいです。

4月1日からは新しい職場で働きます。不安と楽しみがないまぜになっています。今までありがとう。挑戦を楽しめますように。

2024-03-25: りらいん

コードリーディングメモ

github.com

autocompleteとtab completionの状態分離

tab completion は --noautocomplete で使える

Reline::DEFAULT_DIALOG_PROC_AUTOCOMPLETE

最終的にDialogRenderInfoを返す。表示のために必要な枠組みの情報

      DialogRenderInfo.new(
        pos: cursor_pos_to_render,
        contents: result,
        scrollbar: true,
        height: [15, preferred_dialog_height].min,
        face: :completion_dialog
      )

journey_data として completion_journey_data から.DialogProcScope::CompletionJourneyData をもらってくる。 これは @completion_journey_state としてダイアログ遷移中の状態のときにどこにいるか、前後の行情報、ダイアログに何を表示すべきかのリスト、ポインタをもっている。 遷移中じゃなければ @completion_journey_statenil になる。

移動を表すのにjourneyという単語を使っているの好き

    def completion_journey_data
      @line_editor.dialog_proc_scope_completion_journey_data
    end

  def dialog_proc_scope_completion_journey_data
    return nil unless @completion_journey_state
    line_index = @completion_journey_state.line_index
    pre_lines = @buffer_of_lines[0...line_index].map { |line| line + "\n" }
    post_lines = @buffer_of_lines[(line_index + 1)..-1].map { |line| line + "\n" }
    DialogProcScope::CompletionJourneyData.new(
      pre_lines.join + @completion_journey_state.pre,
      @completion_journey_state.post + post_lines.join,
      @completion_journey_state.list,
      @completion_journey_state.pointer
    )
  end

dialog_proc_scope_completion_journey_data が呼ばれるのは Reline::DEFAULT_DIALOG_PROC_AUTOCOMPLETE からのみ

@completion_journey_state はこう。move_completed_list で動いたときに CompletionJourneyState が入る。それ以外はnil

      @completion_journey_state = CompletionJourneyState.new(
        @line_index, pre, target, post, [target] + candidates, pointer
      )

pre target post は入力中の line を区切り文字などを考慮して切ったもの。例えば S を入力すると targetS になる

call_completion_proc_with_checking_args の返り値は STDERR とかダイアログに表示すべき文字列が Array に詰め込まれる

["STDERR", "STDIN", "STDOUT", "ScriptError", "SecurityError", "Set", "Shellwords", "Signal", "SignalException", "SimpleDelegator", "SingleForwardable", "Singleton", "SizedQueue", "S...

move_completed_list

ダイアログ表示中に tab を押したときなど移動が発生したときに入る。移動だけのときはCompletionJourneyStateの作成はスキップし、@completion_journey_state のポインタの位置更新とset_current_line でカーソル位置の更新を行う。

if (delta = { up: -1, down: +1 }[direction])

これで direction の存在チェックしながらdelta に数字を代入するの、こう書けるんだ..!面白い。

preposing, target, postposing = retrieve_completion_block でターゲットの文字列を前後に分割する。preposingが入力中の文字の手前、targetが入力中の文字、postposingが入力中の文字の後

list = call_completion_proc で表示対象の文字列を Array に詰め込んで返す。 call_completion_proc_with_checking_args と大体同じ(何が違うんだろう)

@completion_journey_state の更新が入るとこんな感じの状態を持つ

#<struct Reline::LineEditor::CompletionJourneyState line_index=0, pre="", target="S", post="", list=["S", "STDERR", "STDIN", "STDOUT", "ScriptError", "SecurityError", "Set", "Shellw...

list の最初の要素は入力中の文字っぽい。

em_delete_or_list

delete_char_of_list のalias

elsif !@config.autocompletion になったのはautocompleteが有効なときには補完周りの処理をしないためかな

delete-char-or-list Deletes the character under the cursor if not at the beginning or end of the line (like delete-char). If at the end of the line, behaves identically to possible-completions.

readline(3) - Linux manual page

2024-03-24: りらいん

レビューした

github.com

github.com

insert modeかcommand modeかを表示できるの知らなかった。viモードのときは設定したい機能だ。

レビューしてる

github.com

@config.disable_completion の条件判定がすべて!なりnotつけて見てそうなので、 enable_completion でもよさそうだと思った。

ダイアログまわりの機能はどこからどういう順番で処理がはじまってるのかよくわからない。入力起因でいつのまにか始まってrender_differentialまでにデータが整えられている...(それはそう)

やってる

masterで落ちないテストがこのブランチだと3回連続で落ちて謎

masterとの差分はバージョンだけのはずなんだけどなぁ。

github.com

2023-03-22: DDR二段

DDR8クレプレイした。二段になり、SUNKiSS♥DROP激を初クリアした。

  • REBORN MAGIC 激 782k
  • sync (EXTREME version) 激 831k
  • Sweet Sweet ♥ Magic 踊 856k
    • もうちょい伸ばせるかと思ったけど途中で踏めなくてあまり変わらず。
  • ラキラキ 踊 767k
    • 練習によさそう
  • SigSig 鬼 867k
  • 華爛漫 -Flowers- 激 783k
    • 記憶がない
  • アルストロメリア (walk with you remix) 激 783k
    • やはり練習によさげ。楽しい
  • 恋 激 762k
    • 途中までいい感じだったけど結局伸びず
    • でも序盤は踏めて嬉しい
  • フー・フローツ 激 700k
    • 落ちるかと思った
  • 朧 楽 944k
  • Electric Dance System Music 踊 774k
    • なんか踏みづらくて難しかった
  • 十二星座の聖域 踊 812k
    • 楽しい
  • siberite 踊 770k
    • ぼちぼち
  • 二段 815k 合格
    • Electric Dance System Musicが一番きつかったかも
  • Second Heaven 激 777k
    • ビジステとか。練習になりそう。
  • ビューティフル レシート 踊 936k FC
    • ハイスコア!うれしー
  • チルノのパーフェクトさんすう教室 激 735k
    • 足13
    • バーカバーカの地帯がアフロ踏みなのでアフロ踏みの練習によさそう。
    • 私はアフロ踏みできないので無理やり取ってクリアした
  • Evans 踊 378k
    • 足14はまだ無理っぽい
    • ハイスピあげないと譜面が認識できない
  • SUNKiSS♥DROP 激 712k
    • 私はビジステに勝った!!!
    • 嬉しい
    • もっと練習したい
    • 体力結構使う
    • 足と体力が持ってかれた
  • sakura storm 激 881k
    • 余裕を持ってビジステを踏めるぞ
  • 朧 楽 942k
    • FCならず
  • Sweet Sweet ♥ Magic 激 718k
    • 踊と結構違う譜面だった
  • Sakura Sunrise 踊 908k
    • わりと余裕を持って踏めるようになったとはいえやっぱり体力を使う
  • Death by Glamour 踊 881k
    • ハイスコアだったような気がする
    • AIR多めだから体力切れてるときつい

アフロ踏み、↑絡みのビジステ、ビジステからの展開、あたりが苦手な感じする。あと黄色矢印が来るとビビる。

足14に足りないのは体力と譜面認識力かなー...いろいろなパターンをプレイする必要がありそう。

8クレプレイしたあと疲れ果てて何もできなくなった。プレイしたから何時間かたったけどまだぼんやりしている。一日の終わりにプレイできるといいんだけど...食事タイミングとの兼ね合いとか移動もあるからなかなか難しい。

2023-03-20: りらいん

0.5.0.preに向いてたPRが再作成されたのをdescriptionだけざっと眺めた。

RelineのCIが落ちてるのを見ていた。これが入ったことでyamatanoorotiでwarningが出力されるようになり、それがSTDOUTを見るassertionに影響して落ちてそう。

github.com

こういうメッセージがたくさん出ている。

/home/runner/.rubies/ruby-head/lib/ruby/gems/3.4.0+0/bundler/gems/yamatanooroti-8539beef8dde/lib/yamatanooroti/vterm.rb:97: warning: literal string will be frozen in the future

手元ではfrozen string literalマジコメを入れて例外を上げるようにしつつ、 str << 'a' みたいなのを str = str + 'a' みたいな形に置き換えて例外が上がらないことは確認した。しかしこれでいいんだっけ。unfrozenしたほうがいいのかなぁ。+ つけるのと再代入はどっちが軽いんだろう。明日見てみよう

2024-03-20: DDR

DDR4クレプレイした。

  • REBORN MAGIC 激 835k
  • sync (EXTREME version) 激 837k
  • 3y3s 楽 921k FC
    • 弐寺プレイして解禁した✌️
  • 黒髪乱れし修羅となりて〜凛 edition〜 踊 848k
    • 聞こえづらい
  • MEGALOVANIA 楽 886k FC
  • sakura storm 激 883k
    • ビジステがむりぽ
  • KIMONO♥PRINCESS 楽 979k FC
  • 不沈艦CANDY 激 137k Failed
    • 足14に挑んで沈没。
    • プレミアムプレーだと1曲目だけは落ちても曲を最後までプレイできたりするのかな?
    • わりと速攻落ちたけど最後まで終われなくて譜面眺めてた
    • 体力とかいろいろ足りてないけど、そもそも1.5xだと密度がありすぎて踏めない問題がある
  • ALBIDA 踊 677k
    • 落ちるかと思った...
  • TWINKLE♡HEART 激 735k
    • ギリギリ攻めた後の曲はスコア悪いがち
    • 踊譜面を忘れたほうが踏めるようになりそう
  • Death by Glamour 踊 825k
  • TRUE♥LOVE 激 772k
    • 結構スイッチ必要で難しい!
    • もしくは回転するか
  • 恋する☆宇宙戦争っ!! 踊 803k
    • だいぶスコア伸びて嬉しい。

足13と引き続きビジステの練習かなー。足14はまだちょっと遠そう。

やっぱり↑絡みのビジステが苦手