memo.xight.org

日々のメモ

systemd-tty-ask-password-agent - サーバの自動起動時にパスフレーズが求められたときの対応

Summary

サーバの再起動後など、Webサーバの自動起動時にパスフレーズが求められたときの対応。
systemd によるパスワード要求の一覧表示、処理には systemd-tty-ask-password-agent を利用する。

% sudo systemd-tty-ask-password-agent --query
[sudo] password for foobar: 
Enter Private Key Password: ****************


Reference

ubuntu - manpages - 18.10 - ystemd-tty-ask-password-agent
http://manpages.ubuntu.com/manpages/cosmic/en/man1/systemd-tty-ask-password-agent.1.html

via

解せぬ日記 - 2015-06-17 - systemd-tty-ask-password-agentの使い方
http://terut.hatenablog.com/entry/2015/06/17/021205

技術関連の覚書 - 2017-04-01 - systemd-tty-ask-password-agent
http://boctoc1969.hatenablog.com/entry/2017/04/01/122522

PowerPoint起動時に自動保存されたファイルが毎回表示される問題の原因と対策

Summary

PowerPoint起動時に タイトルの末尾が Autosaved という名前のスライドが毎回表示されてしまう。
原因はオートリカバリが発動しているため。

以下のディレクトリにオートリカバリ用のファイルが作成されている。
$HOME/Library/Containers/com.microsoft.Powerpoint/Data/Library/Preferences/AutoRecovery

このディレクトリ内のファイルを削除すれば解決できる。
$ rm $HOME/Library/Containers/com.microsoft.Powerpoint/Data/Library/Preferences/AutoRecovery/*_autorecover


Reference

Microsoft コミュニティ - 2018-02-22 - PPT ドキュメントの回復が毎回起動するのを中止できない
https://answers.microsoft.com/ja-jp/msoffice/forum/msoffice_powerpoint-mso_mac-mso_mac2016/ppt/084556f0-6550-4774-a5e4-4ad9fbd6d18c?auth=1

コマンドラインから拡張子を隠す / 拡張子を表示する

Summary

CLIで指定したファイルの拡張子を隠したい。
Xcode がインストールされていれば、SetFile コマンドで指定したファイルの拡張子の表示を制御可能。

拡張子を隠す (Hide extension)

SetFile -a E <file>


拡張子を表示する (Show extension)

SetFile -a e <file>


指定したフォルダ以下のファイルの拡張子を隠す

find /path/to/target -type f -print0 | xargs --null SetFile -a E


Reference

superuser - Show/hide extension of a file through OS X command line
https://superuser.com/questions/399899/show-hide-extension-of-a-file-through-os-x-command-line

bump-formula-pr を使った homebrew の formula の pull request

Summary

アーカイブのURLとSHA256をオプションに指定すると、pull requestまで作ってくれる。

$ brew bump-formula-pr --url=https://example.com/path/to/archive.tar.gz --sha256=ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff formula-name


xonsh 0.7.9 の場合

$ brew bump-formula-pr --url=https://github.com/xonsh/xonsh/archive/0.7.9.tar.gz --sha256=69cfd3aebf5995ab208cec76748f20a99f82159d59eca25d1484790d7de690c2 xonsh


Reference

HsbtDiary - 2016-09-13 - bump-formula-pr を使った
https://www.hsbt.org/diary/20160913.html

iPhone 機種変更に伴う移行備忘録 (Suica, LINE, MFA)

Suica

新旧端末を同一のApple IDで管理していれば簡単。
古い端末のWalletからSuicaを削除して、新しい端末のWalletから追加すればOK。
チャージ金額も引き継がれる。

旧端末から新端末へのSuica切り替え(移動)は簡単にお手続きいただけます。ただし、新旧端末が同一のApple IDで管理されていないと、Suica情報を移動させることはできません。
 
【Suica情報の端末間移動手順】
---旧端末にて---
1. Walletを起動
2. 設定されたSuicaを選択(1枚ずつ)
3. 画面右下の i ボタンをタップ(Apple Watchの場合はSuicaの画面を強く長押し)
4. 「情報」タブを選択(Apple Watchの場合は手順④はありません)
5. 「カードを削除」をタップ ※削除するとiCloudに紐づいたサーバに退避されます。

---新端末にて--- Touch ID/Face IDの設定は以下手順の前にお済ませください。
6. Walletを起動
7. 右上の + ボタンをタップ
8. Apple Payの案内画面は「続ける」をタップ
9. カードの種類「Suica」をタップ
10. カードを追加で⑤操作より退避されたSuicaが表示されますので「次へ」をタップ(1枚ずつ)


JR東日本 - Suica - よくあるご質問 - 機種変更

LINE

事前設定をしないで新しい端末で「新規登録」をしてしまうとすべてのデータが消えてしまうので注意。

旧端末にて

1. 電話番号、メールアドレス、パスワードが最新の情報か確認
2. 設定 - アカウント から 引き継ぎの許可をON

新端末にて

3. LINEアプリのインストール
4. メールアドレス、パスワードを入力
5. SMSで送られてきた番号を入力

LINE公式ブログ - LINEのアカウントを引き継ぐ方法

Google Authenticator

Googleアカウント、Dropbox, GitHubはiTunesバックアップから復元して引き継がれた。

Google

1. 2段階認証プロセス から設定
2. QRコードをスキャン
3. 認証アプリで生成されたコードを入力

Facebook

1. Two-Factor Authentication から設定
2. Add a new app
3. QRコードをスキャン
4. 認証アプリで生成されたコードを入力

Slack

1. Configure Two-Factor Authentication から設定
2. QRコードをスキャン
3. Authenticatorに表示される数字を入力
4. "Two-Factor Authentication Backup Codes" を記録しておく。

Slack - 2要素認証を設定する

Amazon

1. アカウントサービス - ログインとセキュリティ - 高度なセキュリティ設定 をクリック
2. 新しいアプリを追加 をクリック
3. QRコードをスキャン
4. 認証アプリで生成されたコードを入力

AWS

1. メニュー - セキュリティ認証情報 - Multi-Factor Authentication (MFA)
2. MFAを無効化
3. MFAの有効化
4. QRコードのスキャン
5. 連続する認証コードを2つ入力

Microsoft

1. [セキュリティの設定|https://account.live.com/proofs/Manage]
2. Microsoft アカウントにサインイン
3. 「本人確認アプリをセットアップ」をクリック
4. 「別の認証アプリを設定します」をクリック
5. 「この設定を行うと、以前に認証アプリを使って生成し、設定したコードがすべて無効になります。続行してもよろしいですか?」で「次へ」
6. QRコードをスキャン
7. 認証アプリで生成されたコードを入力

Microsoftアカウントサポート - Microsoft アカウントの 2 段階認証を有効または無効にする

DigitalOcean

Google SSOを有効にすればDigitalOcean独自のMFAの仕組みは不要になる

さくら

1. 2段階認証設定 から設定
2. 2段階認証設定を「無効」にして「設定変更」
3. 2段階認証設定を「有効」にして「設定変更」
4. 「QRコードを発行する」をクリック
5. QRコードをスキャン
6. 認証アプリで生成されたコードを入力
7. バックアップコードを作成

リクルートID

1. 会員情報変更
2. セキュリティ設定
3. 2段階認証
4. 受け取り方法を変更
5. 認証アプリを選択して「次へ」
6. メールアドレスを入力
7. メールを確認し、コードを入力

坂本龍一の監修したレストラン向けプレイリスト

Reference

YouTube - The Kayitsu Restaurant Playlist (Ryuichi Sakamoto)
https://www.youtube.com/watch?list=PLzegnRYQqxIiI73ZJt6aoXFQj_-x0C7Vf&v=LvOoQ0Ff2nA

Spotify - nytimes - The Kajitsu Playlist
https://open.spotify.com/user/nytimes/playlist/2YY3rAwm9tldNhlBmuMqgY#_=_

via

The NewYork Times - 2018-07-23 - Annoyed by Restaurant Playlists, a Master Musician Made His Own
https://www.nytimes.com/2018/07/23/dining/restaurant-music-playlists-ryuichi-sakamoto.html?smid=tw-nytfood&smtyp=cur

Macを売却または譲渡する前に行うべき作業

Summary

Macbook Proを返品、売却、譲渡する前にやっておいたほうが良いこと。

1. バックアップ
2. iTunesからサインアウトとdeauthorize
3. iCloudからサインアウト
4. iMessageからサインアウト
5. Bluetoothデバイスのペアリング解除
6. Touch Barの情報削除
xartutil --erase-all

7. ハードドライブの消去
8. macOSの再インストール

Reference

Apple サポート - Mac を売却または譲渡する前に
https://support.apple.com/ja-jp/HT201065

macOS High Sierra + homebrew + MacTeX

Summary

macOS 10.13 High Sierra で TeX 環境の構築。

homebrew, brewcask で ghostscirpt, imagemagick, mactex をインストール

$ brew install ghostscript imagemagick
$ brew cask install mactex
$ sudo chown -R USERNAME:admin /usr/local/texlive

mactexをアップデート

$ tlmgr update --self --all

texmf.cnf を作成

$ mkdir /usr/local/texlive/texmf-local/web2c
$ vi /usr/local/texlive/texmf-local/web2c/texmf.cnf

texmf.cnf

shell_escape_commands = \
bibtex,bibtex8,bibtexu,upbibtex,biber,\
kpsewhich,\
makeindex,mendex,texindy,\
mpost,upmpost,\
repstopdf,epspdf,extractbb

日本語フォント対応

$ git clone https://github.com/texjporg/cjk-gs-support.git
$ cd cjk-gs-support
$ ./cjk-gs-integrate-macos.pl --cleanup
cjk-gs-integrate: reading font database ...
cjk-gs-integrate [WARNING]: Cannot find cjkgs-morisawa-extra.dat, skipping!
cjk-gs-integrate: searching for Ghostscript resource
cjk-gs-integrate: going to clean up /usr/local/share/ghostscript/9.23/Resource
cjk-gs-integrate: cleaning up all links, snippets and cidfmap.local ...
cjk-gs-integrate: removing cidfmap.local from cidfmap file ...
cjk-gs-integrate: removing snippets and cidfmap.aliases for font aliases ...
cjk-gs-integrate: removing cidfmap.aliases from cidfmap file ...
cjk-gs-integrate: finished
$ ./cjk-gs-integrate-macos.pl --link-texmf --fontdef-add=./database/cjkgs-macos-highsierra.dat --force
cjk-gs-integrate: reading font database ...
cjk-gs-integrate [WARNING]: Cannot find cjkgs-morisawa-extra.dat, skipping!
cjk-gs-integrate: checking for files ...
cjk-gs-integrate: searching for Ghostscript resource
cjk-gs-integrate: output is going to /usr/local/share/ghostscript/9.23/Resource
cjk-gs-integrate: generating links and snippets for CID fonts ...
cjk-gs-integrate: generating links, snippets and cidfmap.local for non-CID fonts ...
cjk-gs-integrate: Removing link /usr/local/texlive/texmf-local/fonts/truetype/cjk-gs-integrate/batang.ttc due to --force!
cjk-gs-integrate: Removing link /usr/local/texlive/texmf-local/fonts/truetype/cjk-gs-integrate/Dengb.ttf due to --force!
cjk-gs-integrate: Removing link /usr/local/texlive/texmf-local/fonts/truetype/cjk-gs-integrate/Dengl.ttf due to --force!
cjk-gs-integrate: Removing link /usr/local/texlive/texmf-local/fonts/truetype/cjk-gs-integrate/Deng.ttf due to --force!
cjk-gs-integrate: Removing link /usr/local/texlive/texmf-local/fonts/truetype/cjk-gs-integrate/gulim.ttc due to --force!
cjk-gs-integrate: Removing link /usr/local/texlive/texmf-local/fonts/truetype/cjk-gs-integrate/HGRGE.TTC due to --force!
cjk-gs-integrate: Removing link /usr/local/texlive/texmf-local/fonts/truetype/cjk-gs-integrate/HGRSMP.TTF due to --force!
cjk-gs-integrate: Removing link /usr/local/texlive/texmf-local/fonts/truetype/cjk-gs-integrate/HGRME.TTC due to --force!
cjk-gs-integrate: Removing link /usr/local/texlive/texmf-local/fonts/truetype/cjk-gs-integrate/HGRSGU.TTC due to --force!
cjk-gs-integrate: Removing link /usr/local/texlive/texmf-local/fonts/truetype/cjk-gs-integrate/msgothic.ttc due to --force!
cjk-gs-integrate: Removing link /usr/local/texlive/texmf-local/fonts/truetype/cjk-gs-integrate/msmincho.ttc due to --force!
cjk-gs-integrate: Removing link /usr/local/texlive/texmf-local/fonts/truetype/cjk-gs-integrate/malgunsl.ttf due to --force!
cjk-gs-integrate: Removing link /usr/local/texlive/texmf-local/fonts/truetype/cjk-gs-integrate/malgunbd.ttf due to --force!
cjk-gs-integrate: Removing link /usr/local/texlive/texmf-local/fonts/truetype/cjk-gs-integrate/malgun.ttf due to --force!
cjk-gs-integrate: Removing link /usr/local/texlive/texmf-local/fonts/truetype/cjk-gs-integrate/meiryo.ttc due to --force!
cjk-gs-integrate: Removing link /usr/local/texlive/texmf-local/fonts/truetype/cjk-gs-integrate/meiryob.ttc due to --force!
cjk-gs-integrate: Removing link /usr/local/texlive/texmf-local/fonts/truetype/cjk-gs-integrate/msjhbd.ttf due to --force!
cjk-gs-integrate: Removing link /usr/local/texlive/texmf-local/fonts/truetype/cjk-gs-integrate/msjh.ttf due to --force!
cjk-gs-integrate: Removing link /usr/local/texlive/texmf-local/fonts/truetype/cjk-gs-integrate/msyh.ttf due to --force!
cjk-gs-integrate: Removing link /usr/local/texlive/texmf-local/fonts/truetype/cjk-gs-integrate/msyhbd.ttf due to --force!
cjk-gs-integrate: Removing link /usr/local/texlive/texmf-local/fonts/truetype/cjk-gs-integrate/msyhl.ttf due to --force!
cjk-gs-integrate: Removing link /usr/local/texlive/texmf-local/fonts/truetype/cjk-gs-integrate/mingliu.ttc due to --force!
cjk-gs-integrate: Removing link /usr/local/texlive/texmf-local/fonts/truetype/cjk-gs-integrate/STHUPO.TTF due to --force!
cjk-gs-integrate: Removing link /usr/local/texlive/texmf-local/fonts/truetype/cjk-gs-integrate/STLITI.TTF due to --force!
cjk-gs-integrate: Removing link /usr/local/texlive/texmf-local/fonts/truetype/cjk-gs-integrate/STXINGKA.TTF due to --force!
cjk-gs-integrate: Removing link /usr/local/texlive/texmf-local/fonts/truetype/cjk-gs-integrate/STXINWEI.TTF due to --force!
cjk-gs-integrate: Removing link /usr/local/texlive/texmf-local/fonts/truetype/cjk-gs-integrate/STZHONGS.TTF due to --force!
cjk-gs-integrate: Removing link /usr/local/texlive/texmf-local/fonts/truetype/cjk-gs-integrate/simhei.ttf due to --force!
cjk-gs-integrate: Removing link /usr/local/texlive/texmf-local/fonts/truetype/cjk-gs-integrate/simsun.ttf due to --force!
cjk-gs-integrate: Removing link /usr/local/texlive/texmf-local/fonts/truetype/cjk-gs-integrate/YuGothM.ttf due to --force!
cjk-gs-integrate: Removing link /usr/local/texlive/texmf-local/fonts/truetype/cjk-gs-integrate/yumindb.ttf due to --force!
cjk-gs-integrate: Removing link /usr/local/texlive/texmf-local/fonts/truetype/cjk-gs-integrate/yuminl.ttf due to --force!
cjk-gs-integrate: Removing link /usr/local/texlive/texmf-local/fonts/truetype/cjk-gs-integrate/yumin.ttf due to --force!
cjk-gs-integrate: adding cidfmap.local to cidfmap file ...
cjk-gs-integrate: generating snippets and cidfmap.aliases for font aliases ...
cjk-gs-integrate: adding cidfmap.aliases to cidfmap file ...
cjk-gs-integrate: finished

dvipdfmxのためのmapファイルを作成する


$ git clone https://github.com/texjporg/jfontmaps.git
$ cd jfontmaps
$ kpsewhich -var-value=TEXMFHOME
/Users/username/Library/texmf
$ make
$ make install
mkdir -p /Users/username/Library/texmf/doc/fonts/ptex-fontmaps
cp ./README /Users/username/Library/texmf/doc/fonts/ptex-fontmaps/
mkdir -p /Users/username/Library/texmf/fonts/cmap/ptex-fontmaps
cp cmap/* /Users/username/Library/texmf/fonts/cmap/ptex-fontmaps/
mkdir -p /Users/username/Library/texmf/fonts/map/dvipdfmx/ptex-fontmaps
cp -r maps /Users/username/Library/texmf/fonts/map/dvipdfmx/ptex-fontmaps/
mkdir -p /Users/username/Library/texmf/fonts/misc/ptex-fontmaps
cp database/*.dat /Users/username/Library/texmf/fonts/misc/ptex-fontmaps/
mkdir -p /Users/username/Library/texmf/scripts/ptex-fontmaps
ls script/* | grep -v updmap-otf.sh | xargs -I % cp % /Users/username/Library/texmf/scripts/ptex-fontmaps/
mkdir -p /Users/username/Library/texmf/source/ptex-fontmaps/script
cp script/updmap-otf.sh /Users/username/Library/texmf/source/ptex-fontmaps/script
mkdir -p /Users/username/Library/texmf/source/ptex-fontmaps/tools
cp tools/* /Users/username/Library/texmf/source/ptex-fontmaps/tools/
$ mktexlsr
mktexlsr: Updating /usr/local/texlive/2018/texmf-config/ls-R...
mktexlsr: Updating /usr/local/texlive/2018/texmf-dist/ls-R...
mktexlsr: Updating /usr/local/texlive/2018/texmf-var/ls-R...
mktexlsr: Updating /usr/local/texlive/texmf-local/ls-R...
mktexlsr: Done.

ヒラギノをPDFに埋め込み

$ kanji-config-updmap-sys --jis2004 hiragino-highsierra-pron
Setting up ... ptex-hiragino-highsierra-pron.map
Creating new config file /usr/local/texlive/2018/texmf-config/web2c/updmap.cfg
updmap will read the following updmap.cfg files (in precedence order):
  /usr/local/texlive/2018/texmf-config/web2c/updmap.cfg
  /usr/local/texlive/2018/texmf-dist/web2c/updmap.cfg
updmap may write changes to the following updmap.cfg file:
  /usr/local/texlive/2018/texmf-config/web2c/updmap.cfg
dvips output dir: "/usr/local/texlive/2018/texmf-var/fonts/map/dvips/updmap"
pdftex output dir: "/usr/local/texlive/2018/texmf-var/fonts/map/pdftex/updmap"
dvipdfmx output dir: "/usr/local/texlive/2018/texmf-var/fonts/map/dvipdfmx/updmap"

updmap is creating new map files
using the following configuration:
  LW35 font names                  : URWkb (/usr/local/texlive/2018/texmf-dist/web2c/updmap.cfg)
  prefer outlines                  : true (/usr/local/texlive/2018/texmf-dist/web2c/updmap.cfg)
  texhash enabled                  : true
  download standard fonts (dvips)  : true (/usr/local/texlive/2018/texmf-dist/web2c/updmap.cfg)
  download standard fonts (pdftex) : true (/usr/local/texlive/2018/texmf-dist/web2c/updmap.cfg)
  jaEmbed replacement string       : hiragino-highsierra-pron (/usr/local/texlive/2018/texmf-config/web2c/updmap.cfg)
  jaVariant replacement string     : <empty> (/usr/local/texlive/2018/texmf-config/web2c/updmap.cfg)
  scEmbed replacement string       : arphic (/usr/local/texlive/2018/texmf-dist/web2c/updmap.cfg)
  tcEmbed replacement string       : arphic (/usr/local/texlive/2018/texmf-dist/web2c/updmap.cfg)
  koEmbed replacement string       : baekmuk (/usr/local/texlive/2018/texmf-dist/web2c/updmap.cfg)
  create a mapfile for pxdvi       : false (default)

Scanning for LW35 support files  [  3 files]
Scanning for MixedMap entries    [ 44 files]
Scanning for KanjiMap entries    [ 11 files]
Scanning for Map entries         [272 files]

Generating output for dvipdfmx...
Generating output for ps2pk...
Generating output for dvips...
Generating output for pdftex...

Files generated:
  /usr/local/texlive/2018/texmf-var/fonts/map/dvips/updmap:
	   15796 2018-05-07 16:22:20 builtin35.map
	   21269 2018-05-07 16:22:20 download35.map
	 2477037 2018-05-07 16:22:21 psfonts_pk.map
	 2737932 2018-05-07 16:22:21 psfonts_t1.map
	 2731344 2018-05-07 16:22:20 ps2pk.map
		  14 2018-05-07 16:22:22 psfonts.map -> psfonts_t1.map
  /usr/local/texlive/2018/texmf-var/fonts/map/pdftex/updmap:
	 2731351 2018-05-07 16:22:22 pdftex_dl14.map
	 2729686 2018-05-07 16:22:22 pdftex_ndl14.map
		  15 2018-05-07 16:22:22 pdftex.map -> pdftex_dl14.map
  /usr/local/texlive/2018/texmf-var/fonts/map/dvipdfmx/updmap:
	   10906 2018-05-07 16:22:20 kanjix.map

Transcript written on "/usr/local/texlive/2018/texmf-var/web2c/updmap.log".
updmap: Updating ls-R files.

TexShopの削除とbrewcask から最新版をインストール

$ sudo rm /Applications/TeXShop.app
$ brew cask install texshop

TeXShopの環境設定

TeXShop Preferences - Sources - Set Default Values から "upTeX (ptex2pdf)" を選択

定期的なアップデート

$ tlmgr update --self --all

uplatex用テンプレート

\documentclass[report,12pt,uplatex]{jsarticle}
\begin{document}
\section{セクション}
内容内容内容
\end{document}

Reference

TeX Wiki - macOS 10.13 High Sierra / macOS 10.12 Sierra / OS X 10.11 El Capitan への対応
https://texwiki.texjp.org/?TeX%20Live%2FMac#elcapitan

JupyterLab + Docker

Summary

JupyterLab Betaがリリースされた。
dockernize してパスワード作成スクリプトを作っておいた。

Reference

github - xight - jupyterlab-docker
https://github.com/xight/jupyterlab-docker

github - jupyterlab - jupyterlab
https://github.com/jupyterlab/jupyterlab

via

Jupyter - 2018-02-20 - JupyterLab is Ready for Users
https://blog.jupyter.org/jupyterlab-is-ready-for-users-5a6f039b8906

Publickey - 2018-03-01 - オープンソースのWebIDE「JupyterLab」がベータ公開
http://www.publickey1.jp/blog/18/webidejupyterlabpythonrscala.html

APFS + Mobile Time Machine (local snapshot) のスナップショットを削除する

Summary

ファイルを削除しても、ローカルストレージの容量が増えない。
macOS High Sierra から導入された APFS + Mobile Time Machine が原因。
ローカルストレージに空き容量があると、自動的にTime Machine Backup を作成してくれる。

ローカルストレージのスナップショットを確認

% tmutil listlocalsnapshots /
com.apple.TimeMachine.2018-02-28-140507
com.apple.TimeMachine.2018-02-28-153416
com.apple.TimeMachine.2018-02-28-163003
com.apple.TimeMachine.2018-02-28-172959
com.apple.TimeMachine.2018-02-28-183043
com.apple.TimeMachine.2018-02-28-193048
com.apple.TimeMachine.2018-02-28-203043
com.apple.TimeMachine.2018-02-28-220300


ローカルのスナップショットを個別に削除

% tmutil deletelocalsnapshots 2018-02-28-203043


ローカルのスナップショットをまとめて削除

% tmutil thinlocalsnapshots / 99999999999 (大きな数値)


使用前後の比較


tmutil thinlocalsnapshots 前

Filesystem      Size  Used Avail Use% Mounted on
/dev/disk1s1    895G  862G   30G  97% /


tmutil thinlocalsnapshots 後

Filesystem      Size  Used Avail Use% Mounted on
/dev/disk1s1    895G  579G  313G  65% /


Reference

Apple - サポート - Time Machine のローカルスナップショットについて
https://support.apple.com/ja-jp/HT204015

stack overflow - APFS Container Resize error code is 49153
https://stackoverflow.com/questions/46424915/apfs-container-resize-error-code-is-49153

plenv + cpanm + chalow

Summary

plenv install 5.26.1
plenv global 5.26.1
curl -L https://cpanmin.us | perl - App::cpanminus
cpanm CGI --local-lib=vendor
cpanm HTML::Template --local-lib=vendor
cpanm URI --local-lib=vendor
cpanm Jcode --local-lib=vendor
cd path/to/chalow
./chalow