Ubuntu18.04にsnapでdockerを入れるとDNSの再設定が必要
Ubuntu18.04LTSのインストール時にdockerを入れると、その時点ではGoogle DNSを追加していないためにコンテナ内でDNS周りがおかしくなる。
dockerのブリッジを作り直すと直る。
pkill docker iptables -t nat -F ifconfig docker0 down brctl delbr docker0 systemctl status snap.docker.dockerd.service
参考リンク
How can I safely reinstall Docker without removing volumes? - Stack Overflow
シェルスクリプトで並列処理して単一ファイルに書き込む
flock
とmktemp
を使えばよい
#/bin/bash -u lockfile=$(mktemp) myjob(){ # do something flock $lockfile echo "hoge" >> output } for file in $(find . -maxdepth 1); do myjob $file & done
参考リンク
排他を実現するコマンドflock(1)の使い方メモ | 上田ブログ
安全な一時ファイルの作成と削除の方法 - 拡張 POSIX シェルスクリプト Advent Calendar 2013 - ダメ出し Blog
CircleCIでLaTeXメモをビルド
普段メモをLaTeXで書いてGitHubで管理しているのだが、コンパイル後のpdfをクラウド上で見られると便利そうなので実装した。
circleciではartifactsを3GBまでアップロードすることができる。
CircleCI CLI
(CircleCIのconfig.yml
をローカル実行できることを最近知った)
.circleci/config.yml
が間違っていないかチェック:
circleci config validate
ローカルでジョブを実行:
circleci local execute
CircleCI上でLaTeXをビルド
以下のような構成のレポジトリで*.tex
とcitation.bib
をもつディレクトリに対してlatexmkを実行して<ディレクトリ名>.pdf
を生成する。
+----.circleci | +----config.yaml +---- build_files.sh +---- artifacts +---- mynote +----mynote.tex +----citation.bib
# .circleci/config.yaml defaults: &defaults docker: - image: paperist/alpine-texlive-ja:2018 version: 2 jobs: build: <<: *defaults steps: - run: name: "Installing additional packages" command: | tlmgr update --self tlmgr install algorithms algorithmicx mhchem ulem apk add --no-cache git - checkout - run: name: Create artifact directory command: mkdir -p /artifacts - run: name: build pdf files command: | cp .latexmkrc ~/.latexmkrc bash build_files.sh cp -r artifacts /artifacts - store_artifacts: path: /artifacts
# build_files.sh #!/bin/bash -eu CURR_DIR=`pwd` SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" ARTIFACTS_DIR="artifacts" cd $SCRIPT_DIR mkdir -p $ARTIFACTS_DIR for texpath in `find . -name "*.tex"`; do texdir=`dirname $texpath` # like "./notes/dft" texbasename=`basename $texpath` # like "main.tex" pdfbasename=`echo $texbasename | sed "s/tex$/pdf/"` # like "main.pdf" # ifgore template file if [ $texdir -e "." ]; then continue fi outbasename=`echo $texdir | sed -e "s@^\./@@g" -e "s@/@-@g"` # like notes-dft output="${SCRIPT_DIR}/${ARTIFACTS_DIR}/${outbasename}.pdf" cd $texdir latexmk $texbasename cp $pdfbasename $output cd $SCRIPT_DIR done cd $CURR_DIR
参考リンク
- 日本語対応したplatex, latexmkが入ったdocker image
https://hub.docker.com/r/paperist/alpine-texlive-ja/
algorithm.sty
を入れる
RSSリーダーに数式を表示する
普段arxivやジャーナルのRSSフィードを購読してinoreaderで読んでいるのだが、タイトル中のTeX記法がそのまま表示されて読みづらかった。
そこでMathjaxで数式を表示するJSスクリプトを書いてTampermonkeyで実行させることにした。
動的に生成される要素に対してMathJaxを適用させるいい方法が思いつかなかったので、setInterval
で一定時間ごとにtypesetさせてごり押ししている。
動作画面は↓みたいな感じ。化学式がかなり読みやすくなった。
コードは以下の通り。@match
をいじれば好きなサイトでMathJaxを使うことができる。
gist.github.com
参考リンク
Tampermonkey User Script to add MathJax to, e.g., Trello · GitHub
JSmolで結晶をブラウザで表示する
CODで結晶構造をブラウザで表示できるのが面白いと思ったので、やり方を調べた。
JSmol
https://sourceforge.net/projects/jmol/files/から最新版のJmolを取ってくる
zipを解凍して
jmol-14.29.46
みたいなディレクトリを得る(以下このバージョンのjmolを使うとする)。以下のようなディレクトリ構成にする
. +-- data.cif // 表示したいcifファイル +-- JSmol.min.js // jmol-14.29.46/jsmol/JSmol.min.js をコピーしてくる +-- idioma // jmol-14.29.46/jsmol/idioma をコピーしてくる(英語のみ使用する場合は要らないらしい) +-- j2s // jmol-14.29.46/jsmol/j2s をコピーしてくる +-- index.html
index.html
<!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <script type="text/javascript" src="JSmol.min.js"></script> </head> <body> <h1>JSmol Test</h1> <script type="text/javascript"> const Info = { color: "#FFFFFF", // white background (note this changes legacy default which was black) height: 400, // pixels (but it may be in percent, like "100%") width: 400, use: "HTML5", // "HTML5" or "Java" (case-insensitive) j2sPath: "./j2s", // only used in the HTML5 modality script: "load ASYNC data.cif {1, 1, 1}", // script to run defaultModel: "", // name or id of a model to be retrieved from a database addSelectionOptions: false, // to interface with databases disableInitialConsole: false, // shows a bunch of messages while the object is being built debug: true }; Jmol.getApplet("myJmol", Info); </script> </body>
動作例
↑のindex.html
で表示される例
Materials projectのMaterials Explorerみたいに配位多面体を表示できるとよりよいけどJ(S)molの範囲で実現できるのか分からない。
できてないこと
index.html
中のJSのコードをindex.js
みたいなファイルに分離しようとすると
Failed to execute 'write' on 'Document': It isn't possible to write into a document from an asynchronously-loaded external script unless it is explicitly opened.
と怒られる。
↓とかが関連しそうだけど解決できてない。 lucybain.com