Zshでmvの補完をするとcommand not found: _mv

OSXzshmvとtypeした後にTABで補完すると以下のようなerrorがでる

mv (eval):1: command not found: _mv

もしくは

(eval):1: _mv: function definition file not found

原因はzshのinstall directoryのzsh/share/zsh/functions/_mv が何かの理由で読み込めてない。 以下のような対処法が考えられる。

zshを最新にする

brew uninstall zsh
brew install zsh

iterm/terminalを再起動する

zcompdumpを削除

compinitのcacheを作っている場合は削除する。

rm -f ~/.zcompdump*
exec zsh -l

iterm/terminalの使っているshellを変更する

自分の場合はitermのshellが/bin/zsh でdefaultでOSXに入ってるzshを使っていたのが原因だった。 homebrewでいれている場合は/usr/local/bin/zshにすれば良い。

Reference

Mathjaxで写像/関数の定義域の制限

Mathjaxでrestriction map/functionを書く。 基本的にはtex/latexと同じである。

method1

Definition:Restriction/Mapping - ProofWiki

Proofwikiやでは|の過度な仕様を避けるため、harpoon \(\upharpoonright\) 記号を使うことを推奨している。

 f_{\restriction_{A}}

$$ f {\restriction_{A}} $$

method2

多くの本では以下の|が利用されている。 下記のlinkで紹介されているように、| をつける方法はいくつかある。 math mode - How to typeset function restrictions - TeX - LaTeX Stack Exchange

ちょっと長めの|

left. f \vphantom{\big|} \right|_{A}

$$ \left. f \vphantom{\big|} \right|_{A} $$

ちょっと短めの|

    \left.f\right|_{A}

$$ \left.f\right|_{A} $$

\defでcommandを定義できるので、commandとして登録しても良い。 \defは使用するより前に宣言していれば良い。

$$
    \def\maprestriction#1#2{\left. #1 \right|_{#2}}
    \maprestriction{f}{A}
$$

$$ \def\maprestriction#1#2{\left. #1 \right|_{#2}} \maprestriction{f}{A} $$

Airflowのconfigで環境変数を使う

documentなどに明示的に記載されてないが、Airflowのconfig file airflow.cfgでは環境変数が使える。 AIRFLOW_HOME環境変数として設定されていれば、以下のようにかける。

[core]
# The home folder for airflow, default is ~/airflow
airflow_home = ${AIRFLOW_HOME}

# The folder where your airflow pipelines live, most likely a
# subfolder in a code repository
# This path must be absolute
dags_folder = ${AIRFLOW_HOME}/dags

# The folder where airflow should store its log files
# This path must be absolute
base_log_folder = ${AIRFLOW_HOME}/logs

また、config fileを使わず環境変数で直接設定することも可能。 formatは$AIRFLOW__{SECTION}__{KEY}の形式である。 SECTIONKEYの間は_が2つであることに注意する。 上の例の場合は

export AIRFLOW__CORE__AIRFLOW_HOME=/path/to/airflow/home
export AIRFLOW__CORE__DAGS_FOLDER=/path/to/airflow/dags
export AIRFLOW__CORE__BASE_LOG_FOLDER=/path/to/airflow/logs

である。 環境変数がconfig fileの設定より優先されることに注意する。

OSX Sierraで Could not resolve host: github.com

xcodeを9.2にupdateしたら? git-pushで以下のerrorがでるようになった。

fatal: unable to access 'https://github.com/username/repository.git/': Could not resolve host: github.com

xcodeのcommand line toolsが消えていたようで、command line toolsをinstallしたらでなくなった。 terminalから以下のコマンドでinstallできる。

xcode-select --install

正確な原因は不明。

scikit imageでHue(色相), Saturation(彩度)の変更をする

scikit-image: Image processing in Python — scikit-image

Hue(色相)とSaturation(彩度)の変更方法は、RGBをHSV変換して、HとSのchannelを変更すれば良い。 どの程度変更すれば良いかがわかりにくいので、GIMPと同じになるように値を調整したものを作成した。

  • Hueの調整値: -180から180で指定
  • Saturationの調整値: -100から100で指定
import skimage.color
import numpy as np


def to_valid_image(image):
    return np.clip(image, 0, 255).astype('uint8')


def adjust_hue_saturation_lightness(
        image, hue_range=0, hue_offset=0, saturation=0, lightness=0):
    # hue is mapped to [0, 1] from [0, 360]
    if hue_offset not in range(-180, 180):
        raise ValueError('Hue should be within (-180, 180)')
    if saturation not in range(-100, 100):
        raise ValueError('Saturation should be within (-100, 100)')
    if lightness not in range(-100, 100):
        raise ValueError('Lightness should be within (-100, 100)')
    image = skimage.color.rgb2hsv(image)
    offset = ((180 + hue_offset) % 180) / 360.0
    image[:, :, 0] = image[:, :, 0] + offset
    image[:, :, 1] = image[:, :, 1] + saturation / 200.0
    image[:, :, 2] = image[:, :, 2] + lightness / 200.0
    image = skimage.color.hsv2rgb(image) * 255.0
    image = to_valid_image(image)
    return image

使い方は以下のようになる。

import skimage.io

img = sikimage.io.imread(path_to_image)
# Hue + 50
img = adjust_hue_saturation_lightness(img, 0, 50, 0, 0)
skimage.io.imshow(img)

元画像

20171204010033

Hue + 50

20171204010032

Saturation + 50

20171204010034

Value + 50

20171204010035

GitHub ioでjekyllをdisableにする

GitHub ioで静的web siteを公開する際にはdefaultではjekyllがONになっており、GitHubにpushした後jekyllによってcodeが処理される。 この時、jekyllのmeta directory _で始まるfolderなどが存在すると、除外されるなど、既にrepository内に静的HTMLを追加している場合は、jekyllの機能は邪魔になる。 jekyllを無効にする場合は、.nojekyllというfileをrepositoryに於けば良いが、置く場所はGitHub ioの設定によって変わる。

  • master branch
    • repositoryのroot
  • /docs folder
    • /docs/.nojekyll として置く
  • gh-pages branch
    • repositoryのroot

sphinx + breatheでAttributeError: 'NoneType' object has no attribute 'replace'

以下のようなエラーがSphinx + Breatheで出る。

# Sphinx version: 1.6.3
# Python version: 3.6.2rc1 (CPython)
# Docutils version: 0.13.1 release
# Jinja2 version: 2.9.6
# Last messages:
#   building [mo]: targets for 0 po files that are out of date
#
#   building [html]: targets for 1 source files that are out of date
#
#   updating environment:
#
#   1 added, 0 changed, 0 removed
#
#   reading sources... [100%] index
#
# Loaded extensions:
#   alabaster (0.7.10) from /usr/local/lib/python3.6/site-packages/alabaster/__init__.py
#   breathe (4.6.0) from /usr/local/lib/python3.6/site-packages/breathe/__init__.py
#   sphinx.ext.todo (1.6.3) from /usr/local/lib/python3.6/site-packages/sphinx/ext/todo.py
#   sphinx.ext.mathjax (1.6.3) from /usr/local/lib/python3.6/site-packages/sphinx/ext/mathjax.py
Traceback (most recent call last):
  File "/usr/local/lib/python3.6/site-packages/sphinx/cmdline.py", line 306, in main
    app.build(opts.force_all, filenames)
  File "/usr/local/lib/python3.6/site-packages/sphinx/application.py", line 339, in build
    self.builder.build_update()
  File "/usr/local/lib/python3.6/site-packages/sphinx/builders/__init__.py", line 331, in build_update
    'out of date' % len(to_build))
  File "/usr/local/lib/python3.6/site-packages/sphinx/builders/__init__.py", line 344, in build
    updated_docnames = set(self.env.update(self.config, self.srcdir, self.doctreedir))
  File "/usr/local/lib/python3.6/site-packages/sphinx/environment/__init__.py", line 583, in update
    self._read_serial(docnames, self.app)
  File "/usr/local/lib/python3.6/site-packages/sphinx/environment/__init__.py", line 602, in _read_serial
    self.read_doc(docname, app)
  File "/usr/local/lib/python3.6/site-packages/sphinx/environment/__init__.py", line 723, in read_doc
    pub.publish()
  File "/usr/local/lib/python3.6/site-packages/docutils/core.py", line 218, in publish
    self.apply_transforms()
  File "/usr/local/lib/python3.6/site-packages/docutils/core.py", line 199, in apply_transforms
    self.document.transformer.apply_transforms()
  File "/usr/local/lib/python3.6/site-packages/docutils/transforms/__init__.py", line 171, in apply_transforms
    transform.apply(**kwargs)
  File "/usr/local/lib/python3.6/site-packages/docutils/transforms/universal.py", line 294, in apply
    txtnode.parent.replace(txtnode, nodes.Text(newtext))
AttributeError: 'NoneType' object has no attribute 'replace'

breatheのbug

issueに解決方法が記載してある。 以下の該当行を次のコードで置き換えれば良い。

https://github.com/michaeljones/breathe/blob/d3eae7fac4d2ead062070fd149ec8bf839f74ed5/breathe/renderer/sphinxrenderer.py#L1103

        if nodelist:
            # nodelist[0].children = [term, separator] + nodelist[0].children
            nodelist[0].insert(0, term)
            nodelist[0].insert(1, separator)
        else:
            nodelist = [term]