2023 年振り返り

今年は人生で初めて入院 ~ 手術を経験した。

1月 ~ 3月が非常に激務で、2月くらいに歯の奥と耳元付近が違和感が出てきて、そのうち痛みになってきた。

最初は歯かと思ったので、近所の歯科医に行ったが、特に虫歯でもないしレントゲンを撮ったが、親知らずではなさそうという話になった。

親知らずは下の2本残っていて歯茎に埋まっていて、取れないから大学病院で手術になると随分昔に言われていた。 歯ではなさそうだから、耳鼻科に行って診てもらってと言われて耳鼻科に行った。

耳は忙しくなってくると音が聞きづらくなるということが何年か続いてきたので、 何か起きてるのかもしれないと言われて薬をもらって様子をみようとなったが、 薬を飲み終わっても続いたので、再度診療してもらうと、親知らずの可能性があるかもしれないと言われたため、 大学病院で検査をすることになった。

精密検査をし、おそらく親知らずが原因の可能性が高いと言われて、放っておいたら痛みはおさまる可能性はあるが、 完治することはないと言われたため、抜歯することを勧められた。

色々考えた結果、歳をとって体力が無くなってから手術するより、 まだ体力がある今のうちに抜いておいた方が良いと判断し、 入院し両方の親知らずの抜歯手術を受けることにした。

3 月と4月に入院前の検査と麻酔科の診断などを受けて、また仕事が4月にだいぶ落ち着いたので、 5月末に手術と入院をすることが確定した。

入院と手術

手術前に前泊し手術後に一泊するという二泊三日の予定だった。 病室はたまたま個室が割り当てられて快適だった。 PC を持っていったが、コードを書く気にもならなかったので、開くことすらしなかった。 病院食もまずいとは思わなかった(ふりかけを持っていくのを忘れて病院内にあるコンビニで買い足した)。

夕方に手術内容を説明を受けた。 歯茎を切開し親知らずの頭を切り落としてから抜くという説明を受け、何か質問あるか?と聞かれたので、 技術的な難易度はどんなものか?という質問をしたところ、歯の隙間が CT スキャンの画像を見る感じ 狭そうだから技術的な難易度は割と高めと教えてもらった。

手術当日

手術当日は朝から点滴用の針を入れられ(新人の看護師さんが失敗したようで、昼前にもう一度刺された)、 待機していてくださいと言われて待機。 なかなか呼ばれなくて結局予定より一時間半ほど待たされた(前の手術が伸びたそう)。

呼ばれてから看護師さんに手術室に連れていかれた。 初めて入る手術室は人類のテクノロジーが詰め込まれてる感じがし、 また手術に多くの医師や看護師、技術士が関わってるというのを目の当たりにし、 機器等について正直色々聞きたかったのを覚えているが、 手術台に寝かせられて、器具を手足や胸に付けられてるうちに意識を失った。 (意識を失う直前に足に激痛が走ったのを覚えていて、ごめんなさいと謝られた)

名前を呼ばれて起こされた時には手術が終わって手術室を出る時だった。 手術は2時間ほどで終わった模様で、特に問題なく終わったと聞かされたが、麻酔で朦朧としていた。 病室に戻ってから顔の両側が痛かったのを覚えている。

夕食が出たが、激痛のため食べる気になれず絶食。 また冷やしておくようにと言われたため、氷嚢を当てて寝た。 夜中氷がなくなったので、初めてナースコールを押して氷嚢を取り替えてもらった。

退院当日

明け方口が気持ち悪くなったので、口をゆすいだら激痛が走ったため、口に物を含むのが怖くなった。 朝に術後の確認で診察を受け、傷口も特に化膿してないとのことだったので退院して良いと言われて 精算し退院した。 どうせしばらくまともに食事取れないだろうと思って、飲むゼリー系をたくさん買って帰った。 案の定十日ほどは固形物は食べられなかった。

経過

その後一週間ほど痛くて起き上がれなかった為仕事は休んだ(5月後半は GitHub のコミットがない)。

顔が見事に腫れ上がり面白かった。 一週間後に抜歯し、定期的に診察してもらうことになったので、しばらく通院することになった。 二、三週間で治るのかなと思ったけど、全然そんなことなかった。 骨を削ったためそれが再生するのに三ヶ月ほどかかるだろうと言われた。

しばらく顔が痛いし、食事はまともに取れないし割ときつかった。 今でもたまに起きるが、神経があるところを手術で触ってるので、顔がピクピクすることがあって結構鬱陶しい。

結局痛みが引いて通院が終わったのが診断された通り三ヶ月くらいだった。

手術自体経験したのは非常に良い経験をした。 執刀医の先生、看護師さんのおかげで痛みは無くなったのはよかった。

お仕事

前述の通り 1月 ~ 3月は非常に激務だった。4月からまた副業で去年のプロジェクトに関わらせてもらって 自分のプロジェクトに還元できた。 作って3年ほどのフロントエンドのプロジェクトを大幅にリプレイスする際に非常に役に立った。

新しく学んだ技術としては Tailwindcss のプラグインの仕組みを使った共通システム的なのを実践に投入できてよかった。 複数のプロジェクトでベースとなるデザインを GitHub のプライベートレジストリに入れて、 各々のプロジェクトで使うというのが実現できてよかった。

また久しぶりに Next.js を触っているが個人的な好みとかけ離れていっているのが再確認できた。 (SSG が必要なだけで vike が良さそうだったが、ちょうど vike にリネームしたてくらいで時期尚早な感じがしたので Next.js にした)

来年

今年は色々むむ?と思うことやモヤモヤすることが非常に多かったので、来年はどうなってるやら。 続くようであれば色々考える必要が出てきそう。

ともあれ長年のずっこ頭の隅っこにあった、いつか親知らずを抜く必要があるというのに、 悩まされることは無くなったのはいいことだった。

2022 年振り返り

今年は 2 回ほど倒れた(コロナではなく夏風邪 & 扁桃腺炎)。 高熱が出るとコロナのかと思って PCR 検査をしたが陰性だった。 それ以外は微妙な不調が相変わらず続いた。

お仕事

9 月以降大きい案件が続いてて非常に精神的にも肉体的にもしんどかった。 暖かくなる頃には落ち着いているはず。

それ以外は初めて副業を一年ほどやった。 技術スタックは割と似ていたが、非常に良い経験になった。 自分がメインの本業のプロジェクトを見直すいい機会にもなった。

特に新規でプロジェクトが立ち上がった時に役立った。 一方で既存のプロジェクトの方の負債が目につくようになった。 来年はこの負債を片付ける期間を取ったので、そこで一気に返したい。

作ったもの

OSS

去年出した Django REST Framework への PR が一年越しに入ったり、あとは細かい issue 報告くらいしか活動できなかった。 自分のメンテしてるライブラリーやプラグインも大きい変更を入れようとしたまま中途半端になってしまっている。 そろそろちゃんとしないといけない。

開発環境

十年ものの vimrc を見直した。 Vim9 script で基本的なところを書き直して、不要な設定を捨て、プラグインの断捨離を行った。 起動時間がだいたい 200~300msec 掛かってたのが最速で 30msec、遅くて 100msec くらいまでできた。 もう少し詰めるかーとなったところで仕事が忙しくなって放ったままになり、まだ移行できてない。

買ったもの

オーディオインターフェイス

去年買わなかった UAD Aopplo solo が価格改定する前に滑り込みで購入した。 その他は特に大きな買い物はなかった(経費にもほとんどしなかった)。

Web カメラ

OPAL C1。待機リストに申し込んでたのが、購入できるって来たので悩んだけど買ったが、 お仕事は結局セットアップがめんどくさいので MacBook Pro の内臓のカメラを使うことが多い。

買えなかったもの

カメラ

α7V が出たけど、お高い…。

iPad

M1 が積んだのを一瞬考えたけど、コンテンツ消費だけのツールになりそうなので結局買わなかった。

来年

結局どれも中途半端で終わってしまってるので、それらをなんとかする。 あと平和に暮らしたい。

2021 年振り返り

f:id:heavenshell:20211231013320p:plain

相変わらず引きこもりの生活。 おかげで肩関節周囲炎が年末になって再発した(前回とは違う肩だけど)。 初期症状だったのが幸いだけど、ずっと痛いし微妙に生活に困る。

お仕事

相変わらず DjangoDjango template と React 書いてる。 特に Django REST framework から OpenAPI のスキーマを吐き出して、クライアントを自動生成して連携することができてまぁまぁ気に入ってる。 REST framework の自動生成に罠が割とあるけど、とりあえず困ってない。 (REST framework にPR 出してるのは早くマージしてほしいけども)

作ったもの

新規でリポジトリを作ったものは素振りのやつのみ。 今年は主に vim-lsp-settings への PR が多かった。 新しい何かを作ってみたいという思いはあるけど、来年は何か一個作ろう。

買ったもの

MacBook Pro 16 インチ

待ちに待ってた。前使ってたプライベートマシンが 2012 年の Macbook Pro 15 インチだったので何をやっても満足しかない。 フロントエンドのツールのビルド速いし、Vim のビルドも速い。 何よりファンが回らないことはものすごく嬉しい。

エクストラクール・ハイバックチェア

実家での作業用の椅子が限界が来てたので、アイリスプラザのエクストラクール・ハイバックチェアを購入した。 自室ではオカムラのバロンを使ってるので、ジェネリック・バロンチェアみたいな感じだが、 オカムラのバロンを知ってるので、満足度はそこまではない(値段を考えれば当然だが)。

買えなかったもの

オーディオインターフェース

新しい MacBook Pro になったのし Thunderbolt 対応なものを購入したいと思ってる。 UAD Aopplo solo あたり。

カメラ

α7IV が出たけど、お高い…。

来年

平和に暮らしたい。

2020 年振り返り

f:id:heavenshell:20201231132626p:plain どん底だった 2019 年に比べて多少マシだった程度。

2 月後半から世間が COVID-19 で work from home の流れになってきたけど、2016 年からフルリモートを始めた時に機材などは全て揃えたし、働き方にはなんら変わってなかった。 相変わらず Slack がオフィスだし、Zoom は会議室という認識でいる。

とは言っても元々引きこもってたのがさらに引きこもるようになってしまった。 1 日も早く収束することを願ってる。 気軽にライヴに行けなくなったのは辛い…。

機材も少し古くなってきたので、Apple Silicon が乗った MacBook Pro 16 インチが出たら色々買い換えようと思っている。 - オーディオインターフェイス - UAD Appolo solo あたり - マイクプリ - 入力のゲイン稼ぎたい - ミラーレスカメラ - α7IV が出ると思ったけど 2020 年は出なかったので待ち

お仕事

2020 年お仕事は後半ほぼ DjangoDjango template だけを書いていた(素振りで Angular / React(Next.js) あたりはやっていた)。 2021 年はもう少しフロントエンドを書くことができそう。

作ったもの

Print repositories created this year · GitHub

$ ruby this-year-repos.rb
https://github.com/heavenshell/vim-gql
https://github.com/heavenshell/py-doq
https://github.com/heavenshell/vim-flocke
https://github.com/heavenshell/ts-react-boilerplate
https://github.com/heavenshell/ts-lehre
https://github.com/heavenshell/heavenshell
https://github.com/heavenshell/vim-shutup
https://github.com/heavenshell/vim-tsukasa

新規で作ったものは Vim 関連ばっかり。 今年は昔作って負債化したものを作り直した。 Vim script で TypeScript や Python の型情報をパースするのはいい加減限界だったので、 TypeScript の Compiler APIPython の AST をラップしたライブラリーを使って AST を解析するものを作って、Vim script からそれを呼ぶだけというデザインにした。 この決断は割と正解だった。リリースしてからほとんどバグも出なくて安定してる。

そのほかに vim-shutup は少ないコード量でやりたいことができて、また日々の開発で便利に使ってる。

来年

平和に過ごしたい。

2020 年振り返り

f:id:heavenshell:20201231132626p:plain どん底だった 2019 年に比べて多少マシだった程度。

2 月後半から世間が COVID-19 で work from home の流れになってきたけど、2016 年からフルリモートを始めた時に機材などは全て揃えたし、働き方にはなんら変わってなかった。 相変わらず Slack がオフィスだし、Zoom は会議室という認識でいる。

とは言っても元々引きこもってたのがさらに引きこもるようになってしまった。 1 日も早く収束することを願ってる。 気軽にライヴに行けなくなったのは辛い…。

機材も少し古くなってきたので、Apple Silicon が乗った MacBook Pro 16 インチが出たら色々買い換えようと思っている。 - オーディオインターフェイス - UAD Appolo solo あたり - マイクプリ - 入力のゲイン稼ぎたい - ミラーレスカメラ - α7IV が出ると思ったけど 2020 年は出なかったので待ち

お仕事

2020 年お仕事は後半ほぼ DjangoDjango template だけを書いていた(素振りで Angular / React(Next.js) あたりはやっていた)。 2021 年はもう少しフロントエンドを書くことができそう。

作ったもの

Print repositories created this year · GitHub

$ ruby this-year-repos.rb
https://github.com/heavenshell/vim-gql
https://github.com/heavenshell/py-doq
https://github.com/heavenshell/vim-flocke
https://github.com/heavenshell/ts-react-boilerplate
https://github.com/heavenshell/ts-lehre
https://github.com/heavenshell/heavenshell
https://github.com/heavenshell/vim-shutup
https://github.com/heavenshell/vim-tsukasa

新規で作ったものは Vim 関連ばっかり。 今年は昔作って負債化したものを作り直した。 Vim script で TypeScript や Python の型情報をパースするのはいい加減限界だったので、 TypeScript の Compiler APIPython の AST をラップしたライブラリーを使って AST を解析するものを作って、Vim script からそれを呼ぶだけというデザインにした。 この決断は割と正解だった。リリースしてからほとんどバグも出なくて安定してる。

そのほかに vim-shutup は少ないコード量でやりたいことができて、また日々の開発で便利に使ってる。

来年

平和に過ごしたい。

2019 年振り返り

f:id:heavenshell:20191231171259p:plain

とにかく辛い一年だった。今までの一番の底。 春先に辛い出来事があって、今年はその状態から立て直そうと精一杯生きようとしてたら、夏に退職勧奨を受けたので職場を変えた。

悲しみのどん底にいるときに、色々察してくれて、そっと支えてくれた最高のチームで、 そのチームの仲間全員を卑怯な方法で追い出すとか、今でも意味がわからんし怒りしかない。

よくよく考えてみればチームごとのレイオフか。

悲しみの方はもうほんと時が経つのを待つしかない感じだが、受けた仕打ちに対しての怒りと恨み辛みは当分尽きそうにない。

という感じですっかりメンタルをやられた一年だった。

作ったもの

pocke.hatenablog.com

https://github.com/heavenshell/vim-genshijin
https://github.com/heavenshell/vim-recents
https://github.com/heavenshell/ts-react-hooks-redux
https://github.com/heavenshell/vim-eslint
https://github.com/heavenshell/vim-golinter
https://github.com/heavenshell/ts-react-redux-hooks
https://github.com/heavenshell/vim-inhibitor
https://github.com/heavenshell/rs-pluginbaby
https://github.com/heavenshell/nkgrnkgr.github.io
https://github.com/heavenshell/ts-react-static
https://github.com/heavenshell/ts-angular
https://github.com/heavenshell/ts-angular-tutorial

vim 関連は相変わらずネタプラグインと linter しか書いてない。 TypeScript がらみは React の素振りと Angular の素振り。

来年

ただただ平和に平穏に生きたい…。辛いことも悲しいことはもうたくさん。

Tsuquyomi で popup する

本記事は Vim advent calendar 21 日目の記事です。

例年は割と準備してたけど、もっとカジュアルに書いていい気がしたという完全な言い訳をして、自分の vimrc に書いてた設定をブログにコピペ。

その 1

TypeScript で変数とか関数のシグネチャーとかをポップアップで表示する。 組み込みの popup 関係の関数だと表示位置によって微妙にポップアップの位置をずらすとか微調整ができなかったので、自前で描画する場所を計算してやる。

let s:winid = -1
function! s:ts_hint_popup()
  if s:winid != -1
    call popup_close(s:winid)
    let s:winid = -1
  endif
  let l:content = tsuquyomi#hint()
  let l:contents = split(l:content, '\n')

  let l:border_size = 2 " both side of `|` and top and bottom `-`

  " col position
  let l:current_col = col('.')
  let l:max_width = strlen(sort(copy(l:contents), function('s:sort'))[0])

  let l:col = l:current_col
  if l:current_col + l:max_width > &columns
    " popup is overflowed
    if l:max_width > &columns
      let l:col = 0
    else
      " If popup is overflow from buffer window, popup like followings.
      "
      " +=========================+
      " |      +-----------------+|
      " |      |const foo: string||
      " |      +-----------------+|
      " |  { bar, baz, bazz, foo }|
      " |                    ^    |
      " |     cursor is here |    |
      " +=========================+
      "
      let l:col = l:current_col + (&columns - (l:current_col + l:max_width + l:border_size)) + 1
    endif
  endif

  " line position
  let l:current_line = winline()
  let l:popup_height = len(l:contents) + l:border_size

  " Calc popup overflow size
  for l:line in l:contents
    let l:width = strlen(l:line)
    if l:width + l:border_size >= &columns
      let l:popup_height += 1
    endif
  endfor

  let l:lnum = l:current_line < l:popup_height
    \ ? l:current_line + 1
    \ : l:current_line - l:popup_height

  let s:winid = popup_create(split(l:content, '\n'), {
    \ 'line': l:lnum,
    \ 'col': l:col,
    \ 'border': [1, 1, 1, 1],
    \ 'moved': 'WORD',
    \ })
  let bufnr = winbufnr(s:winid)
  call setbufvar(winbufnr(s:winid), '&filetype', &filetype)
  return s:winid
endfunction

command! TsHintPopup :call s:ts_hint_popup()
noremap <silent> <buffer> <Plug>(TsuHintPopup) :<c-u>TsuHintPopup<CR>

Tsuquyomi には変数とかシグネチャーを取得する関数があるので、それを利用して、Vim のポップアップに流し込んだだけ。

その 2

Angular を書いてて、html でも補完とか、定義ジャンプを使いたい(こっちがメイン)。 Angular は LSP を提供してるので、それを使う。 VSCode で Angular Language Service(angular.ng-template-0.802.3) の拡張を入れる(angular.ng-template-0.900.3 はうまく動いてなかったので要調査)。

function! s:is_angular()
  let current = expand('%:p:h')
  let path = findfile('angular.json', current . ';')
  if path == ''
    return 0
  endif
  return 1
endfunction

augroup Angular
  let s:server = expand('~/.vscode/extensions/angular.ng-template-0.802.3/server/server.js')
  let g:lsp_async_completion = 1
  autocmd User lsp_setup call lsp#register_server({
    \ 'name': 'Angular Language Service',
    \ 'cmd': {server_info -> [&shell, &shellcmdflag, printf('node %s --stdio', s:server)]},
    \ 'root_uri':{server_info -> lsp#utils#path_to_uri(lsp#utils#find_nearest_parent_file_directory(lsp#utils#get_buffer_path(), 'angular.json'))},
    \ 'whitelist': ['html'],
    \ })
augroup END
autocmd FileType html if s:is_angular() | setlocal omnifunc=lsp#complete | endif

なお Angular の TS なファイルは普通に Tsuquyomi で何の問題もなく動いている。

追記

最新 の angular.ng-template-0.900.3 の場合。

let base = expand(printf('~/.vscode/extensions/%s', 'angular.ng-template-0.900.3'))                  
let node_modules = printf('%s/node_modules/', base)
let ng = expand(printf('--ngProbeLocations %s/server', base))
let ts = expand(printf('--tsProbeLocations %s', node_modules))
let s:server = printf('%s/server %s %s', base, ng, ts)

とすればうまくいく。

また angular.ng-template-0.802.3 は適当に GitHub からダウンロードして、

yarn
yarn compile

して出来上がった /angular.ng-template-0.802.3/server/out/server.jslet s:server に指定すれば OK。