ツェラーの公式のシェルスクリプト関数。
20分くらいでヤッツケた。
calcwday() { [ $2 -lt 3 ] && y=`expr $1 - 1` || y=$1 [ $2 -lt 3 ] && m=`expr 12 + $2` || m=$2 d=$3 echo "( $y + $y / 4 - $y / 100 + $y / 400 + ( $m * 13 + 8 ) / 5 + $d ) % 7" | bc }
この程度で、だいたい用は足りそう。
Vimconf2017
2014年の会に参加して、しばらく日程が合わず参加できなかった vimconf に
今年は強権発動して日程調整して、無理やり参加できました。
相変わらず nvi ユーザなのに、vim のカンファレンスてどうよ…と自分に疑問を感じつつ。
10:10 - 11:10
Vim, Me and Community
@haya14busa
https://docs.google.com/presentation/d/14pViuMI_X_PiNwQD8nuGRG72GUqSeKDqoJqjAZWS39U/edit
残念ながら遅刻して、最初の方は聞き逃しました。スライドの 43枚めあたりで到着。
「酒が呑めるgif」という言葉にグっときました。
11:20 - 12:05
The Past and Future of Vim-go
@fatih
https://speakerdeck.com/farslan/the-past-and-future-of-vim-go
広く使ってもらうために使われやすいライセンスを明示的に採用することなど、なるほどと思わされる作戦。go はぜんぜん使っていませんが、vim-go を使ってみたいと感じさせられました。
しかし何しろ、翻訳の良さが際立っていました。 "super awesome" が "めっちゃやばい" になったり、ネーミングに .vim と付けるか付けないかなどの迷った点については訳者の私見も交えたり。
内容を理解した上で行われる同時通訳の妙に唸らされました。
13:05 - 14:05
Talk show
@mattn_jp @k_takata @kaoriya
# no URLs. (movie...?)
今半のすきやき弁当、めっちゃ美味しかったです。
壇上にレジェンドが3人。実物の mattn さんを初めて拝見しました。
気になるプラグインとして minpac なるものが上げられていて、そもそもプラグインを全く使わない自分としてはプラグインマネージャから試してみるのがよいのかな、と思ってみたり。
14:15 - 14:45
Creating your lovely color scheme
@cocopon
https://speakerdeck.com/cocopon/creating-your-lovely-color-scheme
最も感動した発表。
- lovely にするには、まずコンセプトを決める。
- 背景と前景となる primary color を設定して、あとは色相だけを調整してカラーパレットを作る。
- そうやって最初にパレットを決めておくと色数が爆発しなくてすむ。
- positive な要素を増やし、negative な要素を減らす。
- 先人の知恵を参考にする。
こつこつやること、継続すること。語りに愛を感じる発表だったし、スライドのデザインがこれまた秀逸。
colorscheme を探すときには http://colorswat.ch/vim を使おう。
14:45 - 15:15
vim-mode-plus: The most ambitious vim emulator in the world
@t9md
https://qiita.com/t9md/items/236d09fea9bcdfabdcea
油断してたら英語発表。
でも atom か、そんなら自分はそんなにがっつり関係ないかも、と思っていたら、なんという力強いデモ。うぉ、なんだそりゃ、便利そうではないか、と ぐいぐい惹きつけられました。
このデモの見せ方がとても巧い。タイピングしている内容(キーとその機能)が hover されるし、その hover のフォントサイズはデモしながら on the fly に調整するし。
で、これまた同時通訳が最高に awesome でした。デモの通訳、なんてハードル高いんだ。"「ぽっ」とすると「あっ」てなって「しゅっ」と" とか、ツボりました。
デモで特に惹かれた move-down-to-edge , move-up-to-edge は便利そう…と思っていたら 数時間で haya14busa さんが実装してて「え?え?」とびっくりしました。
https://twitter.com/haya14busa/status/926712287066406912
早い…早すぎるよ…
15:35 - 16:05
Vim and Compatibility
@senopen
http://lamsh.github.io/slide/2017/20171104_VimConf2017/index.html
POSIX原理主義者きたー!?とビビったけど、内容は至ってまとも。ed からのエディタの歴史のまとめとか、現在の主要 distribution で搭載されている vim バージョンとか、資料性も高い。
16:05 - 16:35
neosnippet.vim + deoppet.nvim
@ShougoMatsu
https://www.slideshare.net/Shougo/neosnippetvim-deoppetnvim-in-vim-conf-2017
歌はありませんでした。
16:45 - 17:10
How ordinary Vim user contributed to Vim
@dice_zu
https://speakerdeck.com/daisuzu/how-ordinary-vim-user-contributed-to-vim
http://daisuzu.hatenablog.com/entry/2017/11/04/212947
「大したことしてません」て、いやいやいやいやご謙遜を。「壊れていることがわかる」と「どこを直せばいいかがわかる」の間には圧倒的な違いがありますし、それを upstream にきちんと取り込んでもらって世界中の誰かの時間を節約できているというのは「大したこと」です。
17:10 - 17:30
The new syntax highlighter for Vim
@p_ck_
https://speakerdeck.com/pocke/the-new-syntax-highlighter-for-vim
ruby か、… と思いながら聞きました。外部ツールにぶん投げて結果をうまいこと使う、という発想は好き。
17:30 - 17:50
You've been Super Viman. After this talk, you could say you are Super Viman 2 -- Life with gina.vim
@lambdalisue
https://github.com/lambdalisue/vimconf2017
勢いのある英語発表。
そりゃ「Gina のために vim を使う」という発想も出てくることでしょう。非同期処理は vim8 でも neovim でも使えるように切り出されるという話だし、不慣れな後輩ちゃん達に使ってもらうには敷居は低いほうがいいのは間違いない。
総じて今年も「天才たちの挙動を見られるイベント」でした。内容もさることながら、発表のやり方、見せ方、喋り方、という面でも非常に刺激になりました。
「高まる」とか「感極まる」とか言われるのも頷けます。これで参加費 5000yen は、破格だと思います。
kaoriyaさんはじめ、スタッフ各位の熱意に感服仕ります。
ローカル環境をあまり贅沢にして慣れてしまって素の vi しか無い環境で困るようになってしまわないように気をつけなければならないと自分を戒めつつも、まずは windows機に vim8 を入れて :Terminal を使ってみることにします。
ssh 経由でコマンドが実行できない時に読むメモ
server 上にあるコマンド hogehoge を
user@ws% ssh server hogehoge
のように呼び出すことができないことがある。
これは、「リモートコマンドを実行する時、リモート側ではログインシェルは動作しない」という ssh の動作にハメられている可能性がある。
この場合、まず以下のように
user@ws% ssh server "echo $PATH"
リモート側での PATH を確認する。ここに hogehoge への PATH が含まれていなかったら、ビンゴだ。
- server の sshd_config で PermitUserEnvironment が Yes になっているか
- server 上の ~user/.ssh/environment に PATH がちゃんと書いてあるか
- server 上の ~user/.ssh/environment に書かれている PATH に hogehoge があるか
- server の hogehoge に、user が実行できる権限があるか
このあたりを確認しよう。ちなみに sshd_config を書き換えた場合、sshd に -HUP を送ってあげる必要がある。
ディレクトリ追加失敗時の挙動はアトミックでない
ちょっとびっくりしたので記録。
ディレクトリを追加する操作で、先行の追加に失敗すると後行はローカル作業ディレクトリだけ管理情報が更新されてしまい、リポジトリには存在しない状態になる。
例えばリポジトリ内に hoge が既に存在し、moge は存在しないとする時に、以下のように両方を追加しようとすると
% cvs add hoge moge (←二つのディレクトリを追加しようとする) cvs [add aborted]: there is a version in hoge already (← hoge は既にある) % cvs update cvs update: cannot open directory /repo/module/moge: No such file or directory cvs update: skipping directory moge (← moge はリポジトリ内に追加されていない) % find moge moge/CVS/Root moge/CVS/Repository moge/CVS/Entries (↑しかし、作業ディレクトリ側の管理情報は、できてしまっている…)
5.1 には atoll が無い
急遽、AIX 5.1 な環境で long long を使う必要が湧いて出た。値の範囲が long では足りなくなったためだ。
既存のソースでは atol を使っていたので、安直に atoll にすればよいかと思ったが、これがうまくない。無いみたいなのだ。
AIX5100-09 % oslevel -r 5100-09 AIX5100-09 % lslpp -hac bos.rte.libc | sort | tail -1 /usr/lib/objrepos:bos.rte.libc:5.1.0.69::COMMIT:COMPLETE:07/09/25:10;04;40 AIX5100-09 % nm /usr/lib/libc.a | grep atol ../../../../../../../src/bos/usr/ccs/lib/libc/atol.c f - .atol T 319216 .watol T 1476716 atol D 262148 12 watol D 280756 12
一方、AIX 5.2 の libc にはちゃんと装備されているようだ。
AIX5200-10 # oslevel -r 5200-10 AIX5200-10 # lslpp -hac bos.rte.libc | sort | tail -1 /usr/lib/objrepos:bos.rte.libc:5.2.0.107::COMMIT:COMPLETE:11/27/08:09;41;08 AIX5200-10 # nm /usr/lib/libc.a | grep atol ../../../../../../../src/bos/usr/ccs/lib/libc/atol.c f - ../../../../../../../src/bos/usr/ccs/lib/libc/atoll.c f - .atol T 305824 .atoll T 818548 .watol T 1473336 atol D 274048 12 atoll D 274060 12 watol D 292824 12
AIX 5.1 は既に EOL なので、今さら libc が更新されるとは考えにくい*1。念のため最終FIX (Post ML9 Bundle) まで確認したが、やはり存在しないものは存在しない。仕方がないので strtoll を用いて書いた。書いてみてからいろいろ探ったら、手もとにあった FreeBSD の libc のソース*2によれば、atoll とは strtoll の wrapper のようだ。テストもうまく通った。
規格に照らしてみれば、atoll は C99 に含まれるようだ。逆に言えば C90 には含まれていない。
要するに 5.2 以上に上げなさい…ということで FA と言えよう。
JavaVM のオプションにはまる
Tomcat の使っているメモリの状況を外部からモニタしたいと思って調べたところ、いまどきはいろいろと便利なオプションがあることがわかった。自分の脳内は Java 1.4.0 で止まっていたので、いい勉強になった。
まず一つは、JAVA_OPTS で設定する内容と、その出力先の関係。
- -verbose:gc を付けるだけ。
勝手に GC の状況がげろげろ吐かれる。標準出力へ流れて行く。
勝手に GC の状況がげろげろ吐かれる。指定したファイルへ流れて行く。ファイルの吐かれるディレクトリが存在しない(ファイルが作れない)場合、標準出力に流れて来るようだ。
- -X:+PrintClassHistogram を付ける。
SIGQUIT (番号で言うと 3) を送ると、スレッドダンプとともにヒープの情報、クラスのヒストグラムが出力される。ヒストグラムは「インスタンス数」「サイズ」「名前」の一覧。出力は標準出力に送られるようだ。
- -Xloggc:/some/where/gc.log と -X:+PrintClassHistogram の組合せ。
SIGQUIT (番号で言うと 3) を送ると、スレッドダンプとともにヒープの情報、クラスのヒストグラムが出力される。クラスのヒストグラムだけ、-Xloggc で指定したファイルへ吐かれる。スレッドダンプやヒープの情報は標準出力に送られる。
これらは Sun の JavaVM の話。
さて、本当に知りたいのは IBM の JavaVM で同等のことをする方法なんだが…、困ったものだ。