ブログ

読んで思い出す。忘れるために書く

Unison でソースコードを同期する

Unison で双方向同期が出来たのが便利だったのでメモ

※使い方の記録はないので、外部リンク参照のこと

前提例:

  • 開発環境として VirtualBoxCentOS 7 系を使っている
  • 環境が旧すぎるので、じぶんがつかっている「いつもの環境」に近づけるのが困難、ゲスト OS 側では エディタ環境などの最新版が使えない
  • ホスト OS が Windows なので、WSL (Ubuntu) が使える
  • OCaml のバージョンが ホスト OS, ゲスト OS で異なる

解決

Unison を使う

同期

VirtualBox 側で git clone してきたプロジェクトを、Unison を使って、WSL (Ubuntu) 側に同期する

(同時編集しない前提なら、 .git ディレクトリも同期できる...!!)

通常使用

エディタは WSL (Ubuntu) 側で「いつもの環境」を構築しソースコードを編集、Unison で VirtualBox 側に転送する

Unison をインストールする際に、ホスト/ゲスト OS 双方の OCaml のバージョンを合せた記憶があるので、必要になったら opam を使うといいかもしれない

環境

例に挙げたような旧い環境と共存している場合、そもそも Unison のインストールはソースコードからビルド・インストールした方がいい場合がある

インストール方法は 公式リポジトリ内に書かれているので、それを参考にされたい

解説?

そのほかの解説は外部リンクに譲る

Links

プラグイン coc.nvim を導入した

プラグインマネージャは dein.vim を使っているので、そこだけインストール方法がちがう

プラグインを羅列している .vimrc のブロックに 1行足す

  call dein#add('neoclide/coc.nvim', {'rev': 'release'})
# 依存ライブラリのインストール
bundle install solargraph

Vim を起動したあと、機能有効化のため拡張機能をいくつかインストールする

(Ruby なら solargraph だけで OK)

:CocInstall coc-solargraph
:CocInstall coc-json
:CocInstall coc-sql
:CocInstall coc-css
:CocInstall coc-eslint
:CocInstall coc-toml
:CocInstall coc-tsserver

たとえばクラスのインスタンス化をしたいときなど、必要な引数がすぐに判るようになった!

Links

watch コマンドで設定したコマンドを自動で定期実行する

前提

下記 いずれかを満たしている環境の話 :

  1. ターミナルの画面を2画面用意している
  2. tmux などの画面分割で2画面同時操作できる
  3. VSCode などの IDE で、「エディタ画面」「ターミナル画面」2画面同時操作できる

やりたいこと・解決したいこと

  1. プログラミング・デバッグだけに集中したいので、いちいち手作業で Ruby ファイルを実行したくない
  2. 標準入力を伴う問題を解きたいので、入力テスト用ファイルを用いたい
  3. エラーがあればすぐに確認したい

準備と解決

準備

標準入力テスト用ファイルを用意する

input.txt :

1 3 4 5

最初の一歩として、標準入力を受け取る Ruby コードを書く

main.rb :

input = gets.chomp
puts input

解決

watch コマンドを使う

watch コマンドを使うことで、指定したコマンドを自動的に定期実行できる

watch -c -n 2 "ruby main.rb < input.txt"

(意味: 毎回画面表示をクリアして、2秒ごとに、渡されたコマンドを実行する)


おまけ

徐々に Ruby のコードを書いて、完成像に近づける

map で to_i 適用したい

input = gets.chomp.map(&:to_i)
# => undefined method `map` for an instance of String (NoMethodError)

puts input

split 忘れてた

input = gets.chomp.split.map(&:to_i)
puts input
# => 3
#    4
#    5

合計値を出したい (完成)

input = gets.chomp.split.map(&:to_i).sum
puts input # => 12

月額報酬額に対して日割り計算をする

コードを書いた。

github.com

copy_me.sh用意している ので、好きな関数名 (eg. hiwari) をつけて その年の月数を渡してあげると「営業日」「日割り額」を出力してくれる

hiwari 6 # 今年 (2024年) 6月の日割り額が知りたい

営業日: 20日
日割り額: 30,000

Link