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

参考リンク

snapでdocker - Qiita

How can I safely reinstall Docker without removing volumes? - Stack Overflow

lxc-docker startup script fails to set up iptables MASQ rule; WAS: dns issues while using docker run -dns · Issue #866 · moby/moby · GitHub

シェルスクリプトで並列処理して単一ファイルに書き込む

flockmktempを使えばよい

#/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.com

.circleci/config.ymlが間違っていないかチェック:

circleci config validate

ローカルでジョブを実行:

circleci local execute

CircleCI上でLaTeXをビルド

以下のような構成のレポジトリで*.texcitation.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

参考リンク

www8281uo.sakura.ne.jp

blog.ymyzk.com

blog.i544c.me

github.com

  • 日本語対応したplatex, latexmkが入ったdocker image

https://hub.docker.com/r/paperist/alpine-texlive-ja/

  • algorithm.styを入れる

ncat.jp

RSSリーダーに数式を表示する

普段arxivやジャーナルのRSSフィードを購読してinoreaderで読んでいるのだが、タイトル中のTeX記法がそのまま表示されて読みづらかった。

そこでMathjaxで数式を表示するJSスクリプトを書いてTampermonkeyで実行させることにした。

動的に生成される要素に対してMathJaxを適用させるいい方法が思いつかなかったので、setIntervalで一定時間ごとにtypesetさせてごり押ししている。

動作画面は↓みたいな感じ。化学式がかなり読みやすくなった。 f:id:lan496:20190930170226p:plain

コードは以下の通り。@matchをいじれば好きなサイトでMathJaxを使うことができる。 gist.github.com

参考リンク

docs.mathjax.org

www.math.ucla.edu

Tampermonkey User Script to add MathJax to, e.g., Trello · GitHub

JSmolで結晶をブラウザで表示する

CODで結晶構造をブラウザで表示できるのが面白いと思ったので、やり方を調べた。

JSmol

  1. https://sourceforge.net/projects/jmol/files/から最新版のJmolを取ってくる

  2. zipを解凍してjmol-14.29.46みたいなディレクトリを得る(以下このバージョンのjmolを使うとする)。

  3. 以下のようなディレクトリ構成にする

.
+-- 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で表示される例 f:id:lan496:20190728172520p:plain

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

参考サイト

wiki.jmol.org

katakago.sakura.ne.jp

Ubuntu18.04でHDDを増設した

増設するディスクの確認

fdisk -l

増設するディスクが/dev/sdbだったとして

gdisk /dev/sdb

パーティションが残っていたらoで消してからパーティションを作成(n)して書き込み(w)

ext4でフォーマット

mkfs -t ext4 /dev/sdb

www.nemotos.net

qiita.com

PuLPに入門した

pythonからMILPソルバーを触れるPuLPというパッケージを勉強した。

github.com

公式チュートリアルを参考に数独を解いてみた。 ソルバーを呼んだあとにpulp.valueを呼ばないと解を得られないのに若干ハマった。

実装: sudoku.py · GitHub

参考リンク

pythonhosted.org

web.tuat.ac.jp

組合せ最適化入門:線形計画から整数計画まで

https://www.jstage.jst.go.jp/article/jnlp/21/5/21_1059/_pdf