hotoolong's blog

プログラムのことやエンジニアリングに関することを記事にしています。

awscli再インストール時のエラー対応

前回の記事でbrewpythonを入れ直したのが影響なのか、awsコマンドが使えなくなりました。

/usr/local/bin/aws: /usr/local/opt/python/bin/python2.7: bad interpreter: No such file or directory

というエラーが出ていました。pipでコマンド確認したところ。pipのパスが通ってなかったので 再インストールしてみました。

sudo easy_install pip
sudo easy_install --upgrade pip

awscliもインストールし直しました。

sudo pip install awscli

すると変なエラーが

    DEPRECATION: Uninstalling a distutils installed project (six) has been deprecated and will be removed in a future version. This is due to the fact that uninstalling a distutils project will only parti
ally uninstall the project.
    Uninstalling six-1.4.1:
Exception:
Traceback (most recent call last):
  File "/Library/Python/2.7/site-packages/pip-9.0.2-py2.7.egg/pip/basecommand.py", line 215, in main
    status = self.run(options, args)
  File "/Library/Python/2.7/site-packages/pip-9.0.2-py2.7.egg/pip/commands/install.py", line 342, in run
    prefix=options.prefix_path,
  File "/Library/Python/2.7/site-packages/pip-9.0.2-py2.7.egg/pip/req/req_set.py", line 778, in install
    requirement.uninstall(auto_confirm=True)
  File "/Library/Python/2.7/site-packages/pip-9.0.2-py2.7.egg/pip/req/req_install.py", line 754, in uninstall
    paths_to_remove.remove(auto_confirm)
  File "/Library/Python/2.7/site-packages/pip-9.0.2-py2.7.egg/pip/req/req_uninstall.py", line 115, in remove
    renames(path, new_path)
  File "/Library/Python/2.7/site-packages/pip-9.0.2-py2.7.egg/pip/utils/__init__.py", line 267, in renames
    shutil.move(old, new)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/shutil.py", line 302, in move
    copy2(src, real_dst)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/shutil.py", line 131, in copy2
    copystat(src, dst)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/shutil.py", line 103, in copystat
    os.chflags(dst, st.st_flags)
OSError: [Errno 1] Operation not permitted: '/tmp/pip-iN62ln-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/six-1.4.1-py2.7.egg-info'

sixがインストール済みだったのでエラーになったようです。

sudo pip install awscli --upgrade --ignore-installed six

としてsixを無視すると再インストールできました。 無事awsコマンドも使えてました。

MySQLでユーザ定義変数とcountを組み合わせて失敗した

MySQLでユーザ定義変数を使っていたときのお話です。

ユーザ情報に紐づくアカウント数に合わせて出力する形式を変更して解析しようとしてたのですが、 MySQLのユーザー定義変数をcase文で判断させようとしたところ挙動がおかしくなってしまいました。

ユーザ情報はusersテーブルに 紐づくアカウント情報はaccountsテーブルに登録してるとして、 ユーザ情報毎にアカウント情報の数を出力させて 5件以上アカウント情報が登録されているユーザは!!で強調するように出力しようとしたときに 一旦ユーザ定義変数に格納してcase文で条件分岐しようとして以下のようなSQL文を作成していました。

select
   u.id ,
   u.name,
  @b:=count(a.id),
  case @cnt:=count(a.id)
    when @cnt >= 5 then concat('!! ', @cnt, ' !!')
    else @cnt
  end
from users u
inner join accounts a on a.user_id = d.id
group by u.id;

出力はしようとしたcount(a.id)の値は何も表示されずに出力されてしまいました。

MySQL :: MySQL 5.6 リファレンスマニュアル :: 9.4 ユーザー定義変数

には

SELECT ステートメントでは、それぞれの選択式は、クライアントに送信されるときにのみ評価されます。つまり、HAVING、GROUP BY、または ORDER BY 句では、選択式リストで値を割り当てられた変数を参照しても、予想どおりには機能しないということです。

と記載されているので、countで式評価したものを変数に入れるというのは難しそうです。 面倒ですが、 count(a.id)を何度も記載して出力結果を表示することで代用することにしました。 count(a.id) のような短さであればいいのですが、すごく長くなってしまった場合は一時変数に入れたくなりますね。

Amazon Musicが固まる

仕事しながらAmazon Musicで音楽聞いていますが、 MacBook Proで会社と自宅を行き来してるとスリープ起動、スリープ起動を繰り返すことになります。 なぜかCPUを食って固まることになってしまいます。 f:id:hotoolong:20180307165701p:plain

バージョンは以下の6.3.4.1269です。 随分前のバージョンでも同様な状態になるケースがあったのですが、 PCが熱暴走してるような感じになるので、困ったものです。 f:id:hotoolong:20180320153558p:plain

対処方法としてはAmazon Musicを閉じるのですが、普通に操作しても反応しないので、
アクティビティモニタから無理やり強制終了するとよいです。

brew install で Warning: python is outdated になり、nvimでWarningが発生する

Macgawkのインストールを行いたくなり

brew install gawk

したときに

==> Deleted Formulae
python3 ✔                llvm@3.8                 mal4s                    mimetic                  nazghul                  picolisp                 ufoai                    voltdb
==> Processing python3 formula rename to python
==> Unlinking python3
==> Temporarily unlinking python
==> Moving python3 versions to /usr/local/Cellar/python
==> Relinking python
Warning: python is outdated!
To avoid broken installations, as soon as possible please run:
  brew upgrade
Or, if you're OK with a less reliable fix:
  brew upgrade python

python3が削除されてしまって python になってるんですかね。

vi hogehoge.txt

vimで編集すると

function remote#define#FunctionBootstrap[1]..remote#host#Require[10]..provider#pythonx#Require, line 15
Vim(if):E475: 無効な引数です: Channel id must be a positive integer
[deoplete] deoplete failed to load: Failed to load python3 host. You can try to see what happened by starting nvim with $NVIM_PYTHON_LOG_FILE set and opening the generated log file. Also, the host stderr
is available in messages.. Try the :UpdateRemotePlugins command and restart Neovim. See also :CheckHealth.
続けるにはENTERを押すかコマンドを入力してください

となってしまって

何故かパスが外れたと勘違いしてしまい

brew install python3
Updating Homebrew...
==> Auto-updated Homebrew!
Updated 2 taps (homebrew/core, caskroom/cask). 
==> Updated Formulae
pipenv

Error: python 2.7.14_3 is already installed
To upgrade to 3.6.4_4, run `brew upgrade python`

python3入れ直すとエラーになり、pythonでいれてねということなので

brew upgrade python

して

再度vimを起動

vi hogehoge.txt

エラーはでてなくなった。念のため

:CheckHealth

しておくと

Running healthchecks...

  health#deoplete#check
  ========================================================================
  ## deoplete.nvim
    - OK: has("nvim") was successful
    - OK: has("python3") was successful
    - INFO: If you're still having problems, try the following commands:
      $ export NVIM_PYTHON_LOG_FILE=/tmp/log
      $ export NVIM_PYTHON_LOG_LEVEL=DEBUG
      $ nvim
      $ cat /tmp/log_{PID}
      and then create an issue on github

  health#nvim#check
  ========================================================================
  ## Configuration
    - OK: no issues found

  ## Performance
    - OK: Build type: Release

  ## Remote Plugins
    - OK: Up to date

  ## terminal
    - INFO: key_backspace (kbs) terminfo entry: key_backspace=^H
    - INFO: key_dc (kdch1) terminfo entry: key_dc=\E[3~
    - INFO: $XTERM_VERSION=''
    - INFO: $VTE_VERSION=''
    - INFO: $SSH_TTY=''

  ## tmux
    - OK: escape-time: 0ms
    - INFO: $TERM: screen-256color


  health#provider#check
  ========================================================================
  ## Clipboard (optional)
    - OK: Clipboard tool found: pbcopy

  ## Python 2 provider (optional)
    - INFO: Using: g:python_host_prog = "/usr/local/bin/python"
    - INFO: Executable: /usr/bin/python
    - ERROR: Command error (job=9): '/usr/bin/python' '-c' 'import neovim; print(neovim.file)'
      Output: Traceback (most recent call last):  File "<string>", line 1, in <module>ImportError: No module named neovim
    - INFO: Python2 version: 2.7.10
    - INFO: python-neovim version: unable to load neovim Python module
    - ERROR: Neovim Python client is not installed.
      Error: unable to load neovim Python module
      - ADVICE:
        - Run in shell: pip2 install neovim

  ## Python 3 provider (optional)
    - INFO: Using: g:python3_host_prog = "/usr/local/bin/python3"
    - INFO: Executable: /usr/local/bin/python3
    - INFO: Python3 version: 3.6.4
    - INFO: python3-neovim version: 0.1.13 (outdated; from /usr/local/lib/python3.6/site-packages/neovim)
    - WARNING: Latest python3-neovim is NOT installed: 0.2.4

  ## Ruby provider (optional)
    - INFO: Ruby: ruby 2.4.3p205 (2017-12-14 revision 61247) [x86_64-darwin17]
    - INFO: Host: /Users/hotoolong/.rbenv/shims/neovim-ruby-host
    - OK: Latest "neovim" gem is installed: 0.7.0

  ## Node provider (optional)
    - INFO: Node: v8.9.4
    - INFO: Host: /Users/hotoolong/.nvm/versions/node/v8.9.4/bin/neovim-node-host
    - OK: Latest "neovim" npm is installed: 3.5.2

エラーは出なくなった。brew install 時にはメッセージちゃんと見ておかないと嵌りそう。

neovim(nvim)でescの効きが悪いと思ったらtmuxの設定が影響していた

お題の通りですが、
以前からvimのInsert mode から抜けるのがすこし待つのが煩わしいと感じしていたのですが
何が原因でそのような症状になっているのかわかっていなかったのですが、
tmuxの影響だとわかりました。

tmuxのescape-timeがdetfault 500msになっていて、escキーの入力後に入力待になってしまっていました。 vimを使っている人にとってはかなり厄介な設定です。

.tmux.confの設定を

## esc の効きを良くする
set-option -g escape-time 0

に設定することで解消されました。 長い間この現象には苦しめられていたのでストレスから解放されてスッキリした気分です。

tmux(1) - OpenBSD manual pages

github.com

tmux 2.1から設定されていたようです。

vimのxpは有効にしたいけどxでコピーは無効にしたい

かなり久しぶりのブログになりました。 ブログやめようかと思っていたのですが、続けることにしました。 どこまで続くのかわかりませんがよろしくお願いします。

日頃からvimというかneovimを使っています。 init.vimには

set clipboard+=unnamedplus

クリップボードにヤンクしたデータを連携できるのですが、 xとすると無駄に1文字がコピーされてしまって意図しない振る舞いになってしまうため

nnoremap x "_x

としてブラックホールレジスタに登録してたのですが、 このままであると、ノーマルモードでxpを使うと文字をひっくり返すことができなくて少し困っていまいた。

よくよく考えてみると xpはヤンクレジスタに登録してペーストするといいんじゃないかとおもい。

nnoremap xp "0x"0p

登録するとxpは上手く動きxだけではレジスタに登録されませんでした。 これでvimライフが少し快適になります。

Re:dashをAWSに構築してみた

最近まであまりRe:dashのことを認識してなかったけど、結構使われてるのですね。 会社で入れてみたら?という話になり、構築してみました。
Qiitaなどの過去記事が散乱してるので、、
古いAMIから作ってしまったりしてしまったけど、 結局はhelpから探して最新版を入れるのがいいみたい。

構築

https://redash.io/help-onpremise/setup/setting-up-redash-instance.html

私が作ったときのが東京リージョンの以下を選択
ami-34cfe853
ただこれが Re:dashのバージョンが1.01になっている。
最新版ではないので後でバージョンアップする。

EC2のインスタンスは t2.micro で構築してたが、
後で面倒なことになるので small 以上で構築することをおすすめします。

インスタンスが立ち上がったら

アップグレードしておく

cd /opt/redash/current
sudo bin/upgrade

Ubuntuでつくっているからなのか再起動時に/etc/init.d配下に起動スクリプトがないと怒られてしまった。
最後の再起動ができてないだけのようなので、手動で再起動してしまう。

sudo supervisorctl restart redash_server

バージョン確認する。

readlink -f /opt/redash/current

最新になっていることを確認

Google認証でログイン

特定のドメインだけで Google認証でログインさせたかったので

cd /opt/redash/current
sudo -u redash bin/run ./manage.py org set_google_apps_domains {{domains}}

{{domains}}の箇所は適宜設定してくだされ。

このときに外部からcvsをインポートしようとするのかImportErrorとかRedisに書き込めないとかエラーになってしまった。
redash の プロセスを落としてから実行させたらエラーは出なくはなったがそもそもメモリ足りてないっぽいので インスタンスをsmall以上にしておいたほうがいい。
以下エラー内容。

Traceback (most recent call last):
File "/opt/redash/redash.1.0.1.b2833/manage.py", line 6, in <module>
from redash.cli import manager
File "/opt/redash/redash.1.0.1.b2833/redash/__init__.py", line 66, in <module>
import_query_runners(settings.QUERY_RUNNERS)
File "/opt/redash/redash.1.0.1.b2833/redash/query_runner/__init__.py", line 171, in import_query_runners
__import__(runner_import)
File "/opt/redash/redash.1.0.1.b2833/redash/query_runner/big_query.py", line 13, in <module>
from redash.utils import JSONEncoder
File "/opt/redash/redash.1.0.1.b2833/redash/utils/__init__.py", line 2, in <module>
import csv
File "/usr/lib/python2.7/csv.py", line 8, in <module>
from _csv import Error, __version__, writer, reader, register_dialect, \
ImportError: /usr/lib/python2.7/lib-dynload/_csv.x86_64-linux-gnu.so: failed to map segment from shared object
Traceback (most recent call last):
File "/opt/redash/redash.1.0.1.b2833/manage.py", line 6, in <module>
from redash.cli import manager
File "/opt/redash/redash.1.0.1.b2833/redash/__init__.py", line 70, in <module>
reset_new_version_status()
File "/opt/redash/redash.1.0.1.b2833/redash/version_check.py", line 36, in reset_new_version_status
_compare_and_update(latest_version)
File "/opt/redash/redash.1.0.1.b2833/redash/version_check.py", line 49, in _compare_and_update
redis_connection.set(REDIS_KEY, latest_version)
File "/usr/local/lib/python2.7/dist-packages/redis/client.py", line 1072, in set
return self.execute_command('SET', *pieces)
File "/usr/local/lib/python2.7/dist-packages/redis/client.py", line 573, in execute_command
return self.parse_response(connection, command_name, **options)
File "/usr/local/lib/python2.7/dist-packages/redis/client.py", line 585, in parse_response
response = connection.read_response()
File "/usr/local/lib/python2.7/dist-packages/redis/connection.py", line 582, in read_response
raise response
redis.exceptions.ResponseError: MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk. Commands that may modify the data set are disabled. Please check Redis logs for details about the error.

データソースの登録

最近のバージョンではデータソースの登録はすべて画面からできるようなので、
再起動できたらアクセスしてみて DatasourceにRDSを追加しておくと、SQLを使って簡単にグラフ化できたりする。

以上、色々データを使ってエンジニア以外の人にもデータを見てもらうには結構便利そう。