mysql 8.0 にCSV(TSV)を流し込めない

表題の通り、mysql 8.0 にTSVを流し込めなかったのです。

ERROR 1148 (42000): The used command is not allowed with this MySQL version

バージョンはhomebrewで入れた8.0.12

mysql> select version();
+———–+
| version() |
+———–+
| 8.0.12 |
+———–+
1 row in set (0.01 sec)

で、クライアントとサーバに local_infile=1 を設定することで出来るようになりました。

$ mysql -u root –local_infile=1

mysql> SELECT @@local_infile;
+—————-+
| @@local_infile |
+—————-+
| 0 |
+—————-+
1 row in set (0.01 sec)

mysql> SET persist local_infile=1;

mysql> SELECT @@local_infile;
+—————-+
| @@local_infile |
+—————-+
| 1 |
+—————-+
1 row in set (0.00 sec)

セキュリティ的なことですかね。流し込めなくなったのは。

brewで入れたmysqlの文字コードをutf8mb4にしておく

今後のことも踏まえると、まあ最初からutf8mb4にしておくのがよいでしょう。

ちなみにうちのとこのmysqlは5.7.20でした。

my.cnfがそもそもなかったので

~/.my.cnf

に作ります。普通に /etc/my.cnf でも /usr/local/etc/ でもいいみたいです。

で、

[mysqld]
character_set_server=utf8mb4
collation_server=utf8mb4_unicode_ci

character setと。

再起動します。

$ mysql.server reload

でもutf8mb4にならない項目があるんだよなあ。

で、結果mysqlを初期化したら全てutf8mb4になりました。

mysql> show variables like “chara%”;
+————————–+——————————————————+
| Variable_name | Value |
+————————–+——————————————————+
| character_set_client | utf8mb4 |
| character_set_connection | utf8mb4 |
| character_set_database | utf8mb4 |
| character_set_filesystem | binary |
| character_set_results | utf8mb4 |
| character_set_server | utf8mb4 |
| character_set_system | utf8 |
| character_sets_dir | /usr/local/Cellar/mysql/8.0.12/share/mysql/charsets/ |
+————————–+——————————————————+
8 rows in set (0.02 sec)

強引ですが・・

DockerでDjango Qucikstart

DockerでDjango動いたら幸せになるんじゃないかという青い鳥を求めました。
とりあえず公式のQuickStartをやってみます。

https://docs.docker.com/compose/django/

なんにしろvenvで仮想環境を構築。

$ python3 -m venv dd_project
$ cd dd_prioject
$ source bin/activate

pipでdjango入れておきます。

$ pip install --upgrade pip
$ pip install "django==2.0.1"

Dockerfile作れとのこと。

$ vi Dockerfile
FROM python:3
ENV PYTHONUNBUFFERED 1
RUN mkdir /code
WORKDIR /code
ADD requirements.txt /code/
RUN pip install -r requirements.txt
ADD . /code/

psycopg2がいるらしいのでpipで入れておきます。

$ pip install psycopg2

requirements.txtを使うらしいので、作っときます。pipのいいところ。

$ pip freeze > requirements.txt

compose.ymlがいるとのこと。ここらへんのdocker設定、やったことあるはずなのにきちんと理解してないんですよね。。学ばねば。

$ vi docker-compose.yml
version: '3'

services:
db:
image: postgres
web:
build: .
command: python3 manage.py runserver 0.0.0.0:8000
volumes:
- .:/code
ports:
- "8000:8000"
depends_on:
- db

んで、docker-compose

$ docker-compose run web django-admin.py startproject composeexample .

これがよく分からないのであとで追わねば。まあwebサーバとしてrunして、djangoの新規プロジェクトを作ってる、っていうイメージの設定を書いてるんでしょね。

でup、と。

$ docker-compose up

これだ確かにlocalhost:8000でアクセスできます。
postgresも動いているっぽいです。

これでdbをrdsで動くようにして、サーバはdockerrunじゃなくてwebでって設定できればecsにあげるだけで動く幸せシステムができるんでしょか。

「SOLIDの原則ってどんなふうに使うの?」

ここまで考えて作ってないですね。。オーバースペックに感じるが、結局ちゃんと考えておいたほうがよかった、ということはよくありますw

macでbrewでpythonで”pyenv: python3: command not found”が出る

何も変えてないのに(まあOS updateとかで変わってるんですが^^;)

python使ってたら


pyenv: python3: command not found

と出てしまう時、

The `python3′ command exists in these Python versions:
3.5.1

と表示さるので、


$ pyenv global system 3.5.1

とするのでした。これでバージョンを指定できるというのは便利ですよね。

DQL; DynamoDBをSQLライクに扱う

AWS DynamoDBは素晴らしいんですが、WEBインターフェースが結構使いにくい、、ので、SQLっぽく操作できるこちらです。

https://github.com/stevearc/dql

これが早速Pythonだったりしてw
python2.7.11で動きました。

DQLを使ってDynamoDBをSQL操作する

SELECT 文に SAVE オプションを渡すと、ファイル出力できます。

とのこと。

> eu-central-1> SELECT * FROM Movies SAVE Movies.json;
> Saved 1 record to Movies.json

これは便利。

Pythonのpyenvがmac(Sierra 10.12.3)に入らない

というわけで、PythonとかGoも同じスクリプト仲間?ということでちょいちょい書くかもしれません。
で、Python2をずっと使ってたんですが、2も3も同居させたい時にはやはりpyenvじゃないでしょうか。
こういうものがある時点でカオスですがw

$ brew install pyenv

でpyenvを入れたはいいけど、

$ pyenv install 3.5.1

で、

 BUILD FAILED (OS X 10.12.3 using python-build 20160130)

と怒られてしまいました。あるあるですけど、Sierraにした際に、Xcode Toolsのアップデートが必要だったということで。これ、一緒にアップデートしてくれないかな?と思うのですが。。

$ xcode-select –install

私はこれで無事pyenvをインストールできました。

【雑文】php以外に学ぶべき言語は何か?

PHPはバリバリ使うんですけど、より便利にプロダクト制作をするためにはPHP以外のほうが効率よかったりする。
かもしれません(^_^;)

私はなんでも動けばいいのでPHPばかり使ってしまいますが、最近の機械学習ではPythonとか、並列処理ではGoとか、使えるといいなと思います。一通り触ってみるんですけどね。

pythonはpython2がまだ幅を利かせてるのが気になりますw

Goは新しいので、便利でスマートなんだけど、痒いところに手が届くか、というと難しいところが多いと思います。

でも触ってみた感じGoが安定してシェアを獲得しそうです。数こそ正義。

AWSでEC2を起動したらまずやっておく設定

http://qiita.com/shojimotio/items/79264678e9ea10b6fd19

何度もやるよね〜ということで上記URLを参考にメモメモ。いつもシェルスクリプトにしておこうと思うんだけど、やりたいこと、設定したいことが変わるかもと思うと手でやってしまう。

# yum update -y

これは忘れない。

# vim /etc/sysconfig/clock

ZONE=”Asia/Tokyo”
UTC=false

# cp /usr/share/zoneinfo/Japan /etc/localtime
# date
Thu Sep 4 10:37:21 JST 2014

※再起動
# /etc/init.d/crond restart

これを忘れると大変なことになる。

# free
# dd if=/dev/zero of=/mnt/swapfile bs=1M count=1280
# mkswap /mnt/swapfile
# swapon /mnt/swapfile
# chmod 0644 /mnt/swapfile
# free
# sudo vim /etc/fstab
これを追記
/mnt/swapfile swap swap defaults 0 0

イメージをコピーした時にswapどうなるんだっけ?問題ないか。

# echo “LANG=ja_JP.UTF-8” > /etc/sysconfig/i18n
# yum install -y man-pages-ja

日本語環境にしなくても今はデフォルトでなってる説。
一応メモ。

とりあえずこんな感じで後は思いついたら追記する。

モダンPHPアンチパターン

QiitaでモダンPHPアンチパターンが纏められていたのでメモ。

http://qiita.com/tadsan/items/157969b338fd8b782b21

なんでこれに行き着いたかってc++とphpのリファレンスの違いで混乱しちゃって
久々にPHPで参照渡しで速度&メモリを測ってみたら
普通に値渡しとパフォーマンスに差がない……というか参照渡しのほうが遅い、という結果になったので
色々調べてしまいました。

もう参照渡しは使わないぞ。
後、大量配列、大量ループでarray_shiftは遅いぞ。