やっくしぇいびんぐ

目的とすることを成し遂げる前の本質的でない事に時間をかけてしまう、またはかかってしまう様のこと。

IT業界ではよく使われる言葉。

例えば、 Tensorflow でディープラーニングしよう!!と思って、インストールしてみたらGPU版をインストールできず、調査したらglibのバージョンが低い → Glibってどうやったらアップデートできるか調べる → あれ?使ってるOSに提供されてるパーゲージなくね? → ビルド方法調べる → ビルドに必要なライブラリなくね? → ビルドに必要なライブラリ調べる → あれ?ライブラリ提供してるパッケージなくね? → ライブラリのビルド方法調べる → あry.. → 結局別OSバージョンでやる

みたいなケース。

 

これあるあるだと思ってたんだけど、よく考えたら防げることも多い。

そして人のメンタリティによる部分も大きい。実現したい事に対してまっすぐ進め、諦める事の決断が早い人は陥りにくい気がする。

自分の場合にはこれが本当に苦手で特に機械学習周りでよく起きる。アルゴリズムの原理が気になって先に進まない、もっといい方法がないか考えて先に進まない、先進的なライブラリがないか探して進まない。

これは本当に直さないといけない。

エクセルだって何だって実現方法なんて何でもよくて、目的をいかに素早く達成できるかのみを考えて決断して行動しないと、、、

 

ひとまず以下のことをする。

どんなコンテキストで、何を実現するために今何をすべきで、行った結果はどんなもので、その結果をもとに何するべきかの予想を立てて、出た結果をもとに次のアクションプランを立てる

 

すごく基本的なことだけど意識しないと出来ない

 

 

vagrantでboxファイル圧縮 [ProviderがVirtualBoxの場合]

1. 仮想マシン上で以下を実行

$ sudo su -
# umount /vagrant
# yum clean all
# dd if=/dev/zero of=/EMPTY bs=1M
# rm -f /EMPTY

2. 仮想マシンをシャットダウン

$ vagrant halt

3. VirutalBoxのファイルを形式をvmdk から vdiに変更したり諸々

# VirtualBoxのHDDファイルがある場所を探す.
$ vboxmanage list vms
$ vboxmanage showvminfo 

# HDDファイルがある場所へ移動する
$ cd ~/VirtualBox VMs/test-app

# vmdk -> vdi
$ vboxmanage clonehd test-app.vmdk test-app.vdi --format vdi

# vdi形式のファイルを圧縮
$ vboxmanage modifyhd test-app.vdi compact

# 作成したvdiをvmdkに変換する
## ファイル名を前のvmdkファイルと別にする必要性がある。
$ vboxmanage clonehd test-app.vdi test-app-compact.vmdk --format vmdk

# 前のvmdkファイルを取り外し、圧縮したvmdkファイルを接続する。
# VirtualBoxのGUIでやるのが簡単なため割愛。

4. vagrant の boxファイルを作成 (これより前に圧縮したvmdkで動作するかどうか確認するほうが無難)

# vagrant package --out test-app.box

mecabで記号が名詞, サ変接続とされてしまう問題の解消

概要

  • MeCabのデフォルトでは半角記号が名詞、サ変接続とされてしまう。
$ mecab
;
;       名詞,サ変接続,*,*,*,*,*
EOS
  • この問題を解消するために未定義語の辞書を編集して、半角記号が記号として取り扱うことができるようにする

前提環境

ステップ

  1. unk.def の編集
  2. 辞書の再インストール

1. unk.def の編集

$ cat unk.def | grep SYMBOL
SYMBOL,1283,1283,17585,名詞,サ変接続,*,*,*,*,*
$ sed -i unk.def -e '/^SYMBOL,/s/名詞,サ変接続,\*,\*,\*,\*,\*/記号,一般,\*,\*,\*,\*,\*/' 
$ cat unk.def | grep SYMBOL
SYMBOL,1283,1283,17585,記号,一般,*,*,*,*,*

2. 辞書の再インストール

$ sudo /usr/local/libexec/mecab/mecab-dict-index
$ sudo make install
$ mecab
;
;       記号,一般,*,*,*,*,*
EOS

CentOS7でnkfを使う

インストール方法

$ sudo yum localinstall -y http://mirror.centos.org/centos/6/os/x86_64/Packages/nkf-2.0.8b-6.2.el6.x86 _64.rpm

nkfEUC-JPなファイルをUTF8に変換し、変換元を書き換える

$ nkf -g hoge.csv
EUC-JP (LF)
$ nkf -w --overwrite hoge.csv
$ nkf -g hoge.csv
UTF-8 (LF)

ssh で ProxyCommandが動かない問題の解決

ssh で多段ポートフォワーディングやプロキシを通す時に、~/.ssh/configにProxyCommandを設定してsshコマンドを実行しようとしたところ、下記のようなエラーが発生した。

$ ssh hoge
zsh: No such file or directory
write: Broken pipe

むむ、と思い、取り合えずデバッグモードで実行してみても..

$ ssh hoge -vvv
...
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: Executing proxy command: exec ssh -CW 192.168.56.112:22 hoge
debug1: permanently_drop_suid: 197609
zsh: No such file or directory
...

エラーを見る限り、ProxyCommand内に設定しているコマンドを見つけることが出来ないのではなく、zsh自体のパスが解決できていない模様。

$SHELLを見てみると zshとなっている。

$ echo $SHELL
zsh

これをフルパスに直して実行すると、問題なく実行できた。

$ export SHELL=/bin/zsh
$ ssh hoge

Oracle Linuxのバージョンを知る方法

RHEL系のOSの場合以下のファイルをcatすることでバーションを知ることができる。

/etc/*-release

Oracle Linuxの場合は以下の通り

$ ls /etc/*release
/etc/oracle-release  /etc/os-release  /etc/redhat-release  /etc/system-release
$cat /etc/os-release 

NAME="Oracle Linux Server"
VERSION="7.3"
ID="ol"
VERSION_ID="7.3"
PRETTY_NAME="Oracle Linux Server 7.3"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:oracle:linux:7:3:server"
HOME_URL="https://linux.oracle.com/"
BUG_REPORT_URL="https://bugzilla.oracle.com/"

ORACLE_BUGZILLA_PRODUCT="Oracle Linux 7"
ORACLE_BUGZILLA_PRODUCT_VERSION=7.3
ORACLE_SUPPORT_PRODUCT="Oracle Linux"
ORACLE_SUPPORT_PRODUCT_VERSION=7.3

$ cat /etc/oracle-release
Oracle Linux Server release 7.3