VimのSingularityシンタックスハイライトプラグインを作った。

最近SingularityというDockerの親戚みたいなのをいじっている。 runするときにsudoいらなくて便利。

このSingularity、コンテナイメージを作成するためのDockerfileみたいなSingularityってファイルがある。 個人的にはDockerfileより好きな文法。

なんだけど、SingularityファイルをVimで編集してて、シンタックスハイライトがないのが気になる。 そこでシンタックスハイライトするプラグインを作ってみました。

github.com

Vimプラグインを作ったのは初めて。 普段Neovimを使っているんだけど、Pythonとかでもプラグイン書けるらしいし、また何かあれば作ってみたい。

大学のバスの時刻表を取ってくるgolangパッケージを作った。

大学から帰る時に、いつも次のバスが何時か探すの面倒なので、 次のバスの時間を教えてくれるslackbotがあるといいなと思っている。

そのbotを作成するための前段階として、大学のホームページからバスの時刻表を取ってくるgoのパッケージを作りました。

ほんとは大学のホームページにAPI用意してくれてると楽なんだけど。。そんなもの存在するはずもなく。 html取ってきてスクレイピングしました。

通常の月曜から金曜の時刻表と、土曜日、休業中の時刻表がフォーマット違くて面倒だった。。 スクレイピングには、 https://github.com/PuerkitoBio/goquery

を使いました。まだあんまり使いこなせてないけど、便利。

久しぶりにコード書いたけど、やっぱり楽しいなあ。 今回ゴリ押しで書いてしまったので、もっときれいに書けるようになりたい。

juliaのPyCallを使おうとして手こずった話

homebrewでjuliaを入れるのは非推奨。

使っているパソコンはMacBook Air。 なので、はじめはhomebrewでインストールした。 Pkg.add("PyCall") でインストールするまではうまくいったが、 いざスクリプトを書いて実行しようとすると using PyCall のところでエラーになる。

どうもhomebrewでインストールしたjuliaだとこのエラーが発生するらしい。 公式のバイナリを落としてくることにした。

公式juliaの設定

公式のダウンロードページ からjuliaをダウンロードし、インストールした。

最初、/Applications/Julia-0.4.6.app/Contents/MacOS/Julia を起動したらなぜかターミナルが起動して別ウィンドウが開いた。 iTermで普通にjuliaを使いたいので、調べたら/Applications/Julia-0.4.6.app/Contents/Resources/julia/bin/juliaが普通にiTermで使えるやつらしい。

このままではコマンドとして使えないので、シンボリックリンクを貼る。

$ ln -s /Applications/Julia-0.4.6.app/Contents/Resources/julia/bin/julia /usr/local/bin/julia

これでjuliaが使えるようになった。

PyCallの設定

私はpyenvでpython2と3両方使える環境にしているのだが、普通にPyCallをインストールするとpython2のライブラリを見に行ってしまう。 python3を見に行ってほしいので、以下のようにインストールした。

ENV["PYTHON"] = "/Users/username/.pyenv/versions/3.5.2/bin/python3"
Pkg.add("PyCall")

これでPyCallが使えるようになった。using PyCallしてもエラーが出ない! 素晴らしい。

自宅サーバにSSH接続しようとしてハマった。

つい最近、自作PCをしまして、centos7を入れた。 で、ポート変更やfirewalledの設定などして、SSH接続しようとしたら... 内部からは接続できた。でも、外部から接続しようとすると...

接続できない!

その後、いろいろ調べてどうにかなったのでメモ。

そもそもプライベートIPアドレスを指定していた

外部に露出してるのはWAN側のグローバルIPだけ。内部のIPを 指定してたらそりゃ繋がらない。

centosのブラウザでここを見てグローバルIPを確認。

ポートマッピング

グローバルIPはルータ側に1つ割り当てられているらしいので、ルータの設定画面(私のルータではhttp://192.168.0.1で接続)で特定のポートに対する接続要求が来たら、内部の特定のプライベートIP宛に流すポートマッピングをした。

しかし接続できない...

色々調べたところ、内部からだとグローバルIPを指定した接続ができないみたい。ポートマッピングが外部からの接続に対してしか働かないっぽい。

最終的に

内部からの接続にはプライベートIP外部からの接続にはグローバルIPで接続することで解決。

biblatex+biber+latexmkで参考文献の埋め込み

参考文献の埋め込みがうまくいったのでメモ。

設定方法

1  .latexmkrcに以下のコマンドを追加。(latexmkの設定については省略。)

$bibtex = 'pbibtex';

$biber = 'biber --bblencoding=utf8 -u -U --output_safechars';

2   参考文献を書いたファイル(hoge.bib)を作る

内容はこんな感じ。

@book{yamada,
author ={山田太郎},
title = {「ももたろう」},
publisher={昔話新書},
year= {1821},
}

3  プリアンブルに以下のように書く。(ここから.texファイル)

\usepackage[backend = biber,bibstyle =ieee,]{biblatex}
\addbibresource{hoge.bib}

4  文献を参照するときは、以下のように書く。

ももたろうは桃から生まれたとされている\cite{yamada}。

5  参考文献を出力する場所で以下のように書く。

\printbibliography[title=参考文献]

ももたろうは、ももから生まれた。\cite{yamada}

以上。これでlatexmkすれば完成するはず。