読者です 読者をやめる 読者になる 読者になる

カラクリサイクル

『輝かしい青春』なんて無かった人の雑記

TypeScript の const enum でちょろっとハマった

Development Tips Diary

まあ、ハマってたと言ってもちょっとだけなんですが、

に書かれているconst enum の仕様を把握していなくて、

TypeScript で export した enum が undefined になってコードが動かん。なんでや?

ってなってました。

で、詳しい話は、上記リンク先のサンプルコード読めば判るんですが、今日ハマっていた内容としては、

export const enum Foo { Bar = 1 };

とかしていると、これが Foo.Bar と言う定数の宣言みたいになって、TypeScript から JavaScript へ emit する時に、 その定数みたくなっている Foo.Bar がインライン展開され JavaScript からは Foo.Bar が見えなくなる、という TypeScript の仕様にハマった、という話です。

ま、言語仕様とかはキチンと把握しとけって話ですね。はい。

今日も今日とてプログラミングをした

Diary

と言う雑記未満。


今日は割とやる気が始動するのが遅くて、夜になってからプログラミングしていたので、 なんか気がついたら風呂とか入る時間で、あれこれやってたら、もう寝る時間となってしまった。

で、午後 10 時過ぎてからこのブログを書いているワケなんだけれども、 もう眠くて眠くて限界っぽいので、とりあえずもう寝ますです。はい。

OSC52 を使ってリモートからコピペ出来る様にした

Development Tips Software

と言う小ネタです。


今、僕のメインの開発環境は、

  • Archlinux on Hyper-V Gen2 VM

なんですが、はてなブログの Theme を弄ったりする時に、 macOS Sierra とか使っていた時に良く行なっていた、

$ cat hogehoge.txt | pbcopy

みたいなコトが出来なくて微妙に不便だったので、それに相当するコトを、

qiita.com

に書かれている OSC52 シーケンスを使って実現してみました。

んで、その実際に僕が使っている、

元ネタほぼそのまんまやんけ

って言うコードはこちら:

#!/usr/bin/env zsh

function has() {
  which "${1}" 2>&1 >/dev/null
}

if has pbcopy ; then
  cat - | pbcopy
elif has wcmd; then
  cat - | wcmd clip
else
  payload="$(cat - | base64)"
  printf "\x1bPtmux;\x1b\x1b]52;;%s\x1b\x1b\\\\\x1b\\" $payload
fi

ちなみに、このスクリプトは僕の dotfiles に bin/uclip という、 ちょっと微妙な名前で入ってるんですが、行っているコトとしては極めて単純で、

  • 標準入力から文字列を受け取り、その内容を Clipboard にセットする

と言うシンプルな処理だけを行っています。

それで、上記コードの一番最後の printf で始まるヤツが、実際に OSC52 のシーケンスを吐くヤツなんですが、 これが何故にこうもややこしい記述になっているかっていうと、これは、 上記スクリプトから Termnal Emulator までシーケンスが届く間に tmux が挟まっているので、 それを貫通させるために、tmux のエスケープシーケンスで OSC52 を Wrap する必要がある為、です。 まあそれが無かったら tmux 云々のシーケンスは必要ないです。はい。

あと OSC52 のシーケンスは当然の事ながら、OSC52 をサポートしている Terminal Emulator が必要になるため、 OSC52 を使いたい場合には、その OSC52 をサポートしている Terminal Emulator が必要です。

なお、僕は現在のメインの Desktop Environments である Windows 10 Pro では、

を使っています。便利。


と言う事で本日の小ネタは以上です。

なんかコレ、書いていて思った以上に文書量が増えたぞ……

久々にプログラミングなどをした

Development Diary

575 じゃん (タイトルが)


今日、先日から作り直していた、

Archlinux on VM

の環境やらが出来上がり、作業とかが出来る環境が一応は整ったので、久しぶりにプログラミングなどをしていました。

で、今回の Archlinux 環境は過去の Windows 10 Pro 上の Archlinux on WSL とは違って、 普通に Hyper-V Gen2 の VM なので、あんまり非互換性とかに悩まされなくて済んでいるので良いです。 ただ、Resilio Sync で同期しているファイルを編集していると、 Vim で 謎の ファイルが更新されてますよエラー が良く出るので、 その辺り、もうちょっとなんとか出来ないかな、とは思っていますが。


ま、とりあえず今日はそんな感じで、久しぶりにプログラミングなどが出来たので、 それはそれで良かったです。はい。

今日の活動記録

Diary

とりあえず、今日は下記のコトを行っていた:

  1. macOS Sierra on Mac mini late 2012 の環境整備
  2. Archlinux VM on Hyper-V の作り直し
  3. バックアップ体制の見直し

で、(1) と (2) については、いつも使っている dotfiles を調整して云々、って作業をしていただけなんけど、 (3) については、色々とややこしいコトを行なっていて、今は大体下記の様な構成になっている:

  • PC or VM 間のファイルの同期 (windows 10 Pro, macOS Sierra or Archlinux)
    • Resilio Sync を使用
    • ちなみにこれの旧名は BitTorrent Sync で、btsync 時代に買ったライセンスが今も使えている
  • ローカルでのバックアップ
    • UDF Format な USB 3.0 HDD に、 Resilio Sync でファイルを同期 (on macOS)
    • exFat な USB 3.0 HDD に、上記で同期したファイルを restic で dedup + snapshot
  • クラウドへのバックアップ
    • gdrive を使って restic の Repository を Google Drive へバックアップ
    • なお、ファイルを直上げしてないのは、直上げだと色々トラブった経験が有るため

とりあえずは上記の構成でバックアップやらを取っているけれども、 最終的な構成がこれで安定するかどうか、は、まだ未知数。 まあ、大きくトラブったりしない限りは、当面はそのままだと思うけど。


ちなみに今日は我が家のキャッツ (猫) の避妊手術の日で、両親はキャッツを動物病院まで送り届け、 その処置が終わるまでの時間を何かしらの手段で待ち、最後にキャッツを迎えに行って帰宅する、 というハードスケジュールだったっぽい。で、自分は基本的に留守番。

なお、今回の避妊手術を受け持った動物病院は、ドクターの腕が良く、 かつ猫たちの身体的負担が少なくて済むような動物病院だったらしいのだけれども、 自宅からは遠方にあるので、まー移動中のストレスは割と大きかったんじゃね? とは思う。 で、実際、結構行きはにゃーにゃー怒って大騒ぎだったらしい。

それで、キャッツの健康診断とか手術とかは無事終わって帰ってきたんだけど、 家に帰ってきてから、キャッツはヨタヨタモゾモゾとしつつ寝てたものの、 途中で起きて毛繕いは出来てたっぽいので、とりあえずは一安心って感じです。

なお、今回利用した動物病院での手術は、なんか避妊手術しても傷口は小さくて済み、 かつ猫たちが傷口をペロペロしても大丈夫な様に縫い、さらに抜糸もしなくて済むような感じらしいので、 すごい腕の立つアニマルドクターなんだなーとか思いました。あと、病院とかでの受付での対応も良かったらしいし。

ただ、僕は肝心のその動物病院の名前を聴いてなかったので、どこの動物病院か、まではあんまり知りません。 が、なんかその動物病院は、三重県の津の方面にあるらしく、そこそこには動物病院歴が長いらしいです。はい。


とまあそんな感じで、寝るまでに今日の活動をブログに書いてたけど、 なんかこれ結構長くなったな。もうちょっとで 1600 文字超えそうだし。

あとまあ、明日ぐらいからは、 Archlinux on VM の環境も整備し直して、 色々と開発とか出来たらなーとか思っています。はい。