boto3 の AssumeRole をしたアカウントスイッチ credentials 利用時の MFA 突破対応
Flask+Service Worker on Heroku で PWA チュートリアル
toda-tocochan-bus flask on IBM Bluemix へ引っ越し

toda-tocochan-bus flask on IBM Bluemix へ引っ越し

GCP から IBM Bluemix へ引っ越しました!

toco ちゃんバス あと何分?

概要

さくら VPS から GCP、
そして今度は GCP から IBM Bluemix に引越ししました。

以前 GCP 運用時の話はコチラ

GCP は GKE に LB かましたら価格がバコッと上がってしまい
無料枠を逸脱してしまいました (>_<)

なんとか低価格で運用したいという目論見です。

何故 Heroku でなく IBM Bluemix ?

IBM Bluemix の良い所は機能が充実している所です。
無料・デフォルトで kibana が見れます。

その他 Git との連携も可です。

以下 Mac で作業することを前提に手順まとめました。

事前準備

  • IBM Bluemix に Sign Up しときます

Signup IBM Bluemix

  • clone
1
2
macOS%$ git clone https://github.com/kenzo0107/toda-tocochan-bus-on-ibmbluemix
macOS%$ cd toda-tocochan-bus-on-ibmbluemix
  • cloudfoundry の CLI インストール
1
2
macOS%$ brew tap cloudfoundry/tap
macOS%$ brew install cf-cli

デプロイ

1
2
3
macOS%$ cf api https://api.ng.bluemix.net
macOS%$ cf login
macOS%$ cf push <application name>
  • API は Region によって変わります。
Region API URL
米国南部 https://api.ng.bluemix.net
英国 https://api.eu-gb.bluemix.net

総評

Cloudfoundry の CLI のお陰で引っ越しも簡単でした ♪

セキュリティとして特定 IP やドメインからアクセスさせないとか出来たら
商用のメソッドとして利用出来そうかなと思いました。

その点質問してみましたが 2 週間ほど連絡がないので再度連絡してみます。
↑ 質問は英語限定でした!

サポートが強化されると有難いなと思いました。

以上
ご参考になれば幸いです。

Flask Python3 で 戸田市 tocoちゃんバスあと何分? Webアプリ作成♪

Flask Python3 で 戸田市 tocoちゃんバスあと何分? Webアプリ作成♪

Flask(フラスク) とは

Flask Official Site を参照すると冒頭に以下の文章があります。

1
Flask is a microframework for Python based on Werkzeug, Jinja 2 and good intentions

Flask は Python の小規模なフレームワークで、 Werkzug や Jinja 2 をベースとしています。

何がいいの?

最小限の構成で簡単な Web アプリケーションが作成できることです。
django, Rails でも簡単に出来なくもないですが、さらに手順は短く容易です。

チュートリアル

1
2
3
4
5
6
from flask import Flask
app = Flask(__name__)

@app.route("/")
def hello():
return "Hello World!"

Flask を利用する判断基準

  • 大規模なプロジェクトでない。(ファイル構成は自分 or チームで決定する必要がある為)
  • DB を使わない。使うにしても複雑な DB 設計でない。
  • 利用するライブラリが Python 製でその gateway として利用したい。

手始めに!

初心者向け記事は多数あるので割愛し
学習がてら Web アプリケーション作ったのでそちらをどうぞ ♪

実際動くものとそのソースを見た方がイメージ湧くと思います。

toco ちゃんバス あと何分?

戸田市のローカルバス toco ちゃんバスの停留所を指定しあと何分で来るかをカウントダウンするアプリです。
自分が使うので作ったら割と広まってきて嬉しい限り ♪

1
2
※ちなみに戸田市役所に確認し非公式ではありますが公開許可をいただいております。
※戸田市役所ご担当者様より「可能であれば最新の迂回情報なども載せていただけたら〜」という要望も頂きました♪

ソースはこちら ♪

ソースを参照頂けるとやってみたことがわかりやすいと思います。

やってみたこと

  • docker で flask ローカル開発環境作成
  • config ファイルからデータ呼び出し (config.py)
  • session 機能
  • Bootstrap 適用
  • superagent.js で非同期通信
  • flickity.js でフリッカブルに

本番動作環境

  • さくら VPS CentOS 6
  • httpd2.4 + wsgi + virtualenv + python3

さくら VPS には CakePHP や SpringBoot のプロジェクトが乗っかっていたりとやりたい放題の環境として所持しています。

開発期間

ほぼほぼ 1 週間。仕事の昼休みと日曜大工で 10 時間足らずで公開出来ました。
どちらかというと js 側の学習コストが掛かった感じ。

総評

今回作成したユーザ情報を管理しない、
DB を持たないアプリにはうってつけでした。
構成が複雑になりすぎず丁度良かったです。

やはり大きな規模のプロジェクトには django が適しています。

個人的に戸田市役所に電話して Web アプリ公開の許可を頂く、
という承認申請が出来、地域貢献できる喜びが非常に大きかったです。

今後、バージョンアップしたいと思います。

Flask 利用に際して参考になれば何よりです。

以上です。

Python ローカルとリモートサーバ上のファイル差分抽出ツール

概要

これまで数社経験してきましたが
必ずといっていいほど存在する、
現状のステータスがわからないサーバ。。

Git 上の master とも差分が激しく生じている状態。。

そんなサーバとローカルの workspace との差分を確認すべく
ツールを作成しました。

今後

今の所、
リモートからファイルをダウンロードする度に SSH のコネクションを張ってしまいパフォーマンス悪い(>_<)

はじめ pysftp で ssh コネクション張ってた方がパフォーマンスよかった気がする。
でも、手軽さを考えたら hostname 指定の方が良かったので
hostname 指定の方向でパフォーマンスを上げていくことを考えます。

ところが
pysftp で実装してみましたが 多段 ssh アクセスの場合がうまくいかず。。
随時解消させていきます。

golang で並行処理を試してパフォーマンスを上げるのも検討します。

MacOSX に Python2, Python3 仮想環境構築

MacOSX に Python2, Python3 仮想環境構築

経緯

MacOSX デフォルトでは python 2 系。

python 2.7 は 2020 年までのサポート なので
python 3 系 に慣れておこうということで
3 系環境を構築しようと思いました。

ですが
dlib など Python 2 系でないとうまく設定ができなかった経緯があり
(※自分の不手際の可能性もありますが)
両方残そうということで両仮想環境を構築します。

環境

1
2
3
4
5
$ sw_vers

ProductName: Mac OS X
ProductVersion: 10.11.5
BuildVersion: 15F34

Homebrew インストール

以下オフィシャルサイト参照してください。

Homebrew Ja

Python2, 3 インストール

2016/07/28 現在、 python = 2.7.10, python3 = 3.4.3

1
$ brew install python python3 pyenv

設定ファイル

.bashrc もしくは .zshrc に追記します。

以下仮に .bashrc とします。

1
$ vi ~/.bashrc
1
2
3
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"
  • 設定読み込み
1
$ source ~/.bashrc

virtualenv インストール

1
sudo easy_install virtualenv

仮想環境構築

  • python2 での仮想環境構築
1
2
3
$ which python

/usr/local/bin/python2.7
1
$ virtualenv -p /usr/local/bin/python2.7 ~/py2env
  • python3 での仮想環境構築
1
2
3
$ which python3

/usr/local/bin/python3
1
$ virtualenv -p /usr/local/bin/python3 ~/py3env

仮想環境切り替え

  • Python 2.7 仮想環境へ切り替え
1
$ source ~/py2env/bin/active
  • Python 3.4 仮想環境へ切り替え
1
$ source ~/py3env/bin/active

今更ですが備忘録的まとめでした。

CentOS5 系 に pip インストール

CentOS5 系 に pip インストール

2017 年 3 月にサポート終了する CentOS5 ですが
今なお利用されているサーバは多々あるかと思います。

今回の目的

デフォルトインストールされている Python 2.4.3 を残した状態で
Python 2.6 をインストールし、pip の上位バージョンを利用できるようにする、
ことを目的とします。

EPEL リポジトリ追加

1
$ sudo rpm -Uvh http://ftp.iij.ad.jp/pub/linux/fedora/epel/5/x86_64/epel-release-5-4.noarch.rpm

通常アップデートで EPEL からアップグレードするのを避ける様設定

1
2
3
4
5
$ sudo vi /etc/yum.repos.d/epel.repo

[epel]
...
enabled=0

EPEL リポジトリから python26 インストール

1
$ sudo yum install python26 -y --enablerepo=epel

バージョン確認

1
2
3
4
5
$ python26 -V
Python 2.6.8

$ python -V
Python 2.4.3

あくまで python26 は pip を利用するようにする為に共存させています。

pip インストール

1
2
3
$ wget --no-check-certificate https://bootstrap.pypa.io/ez_setup.py
$ sudo python26 ez_setup.py --insecure
$ sudo easy_install-2.6 pip
1
2
$ pip --version
pip 8.1.2 from /usr/lib/python2.6/site-packages/pip-8.1.2-py2.6.egg (python 2.6)

MacOSX python 3.4.3 インストール

概要

機械学習養成読本という素晴らしい本を頂き早速学習を深めています。

115ページ 第2部 第1章
「Pythonのインストール」がすんなりいかなかったのでメモです。

pyenv install 3.4.3 を実行すると以下のようなエラー出ませんでしたか?

1
2
3
4
5
6
7
8
9
Downloading Python-3.4.3.tgz...
-> https://www.python.org/ftp/python/3.4.3/Python-3.4.3.tgz
Installing Python-3.4.3...
ERROR: The Python ssl extension was not compiled. Missing the OpenSSL lib?

Please consult to the Wiki page to fix the problem.
https://github.com/yyuu/pyenv/wiki/Common-build-problems

BUILD FAILED (OS X 10.11.2 using python-build 20150519)

環境

  • MacOSX ElCapitan 10.11.2(15C50)
  • Homebrew 0.9.5
1
2
3
4
5
6
7
8
$ brew install sqlite3
$ brew install readline
$ brew install openssl
$ brew install pyenv
$ export CFLAGS="-I$(brew --prefix openssl)/include"
$ export LDFLAGS="-L$(brew --prefix openssl)/lib -L$(brew --prefix sqlite3)/lib"
$ export CPPFLAGS="-I$(brew --prefix sqlite3)/include"
$ pyenv install 3.4.3

以下コンパイラに渡す変数の設定が肝でした。

  • CFLAGS
  • LDFLAGS
  • CPPFLAGS

10.3 Variables Used by Implicit Rules

気をつければいけないのはMacにデフォルトでインストールされているPython
Python のPATH(/usr/local/bin)から外す

1
2
3
4
$ which python
/usr/local/bin/python

$ mv /usr/local/bin/python /usr/local/bin/python2.7.10

pip もインストール済みであるならば同様にパスから外す。

1
2
3
4
$ which pip
/usr/local/bin/pip

$ mv /usr/local/bin/pip /usr/local/bin/pip2.7

他にPythonのPATHをexportしていなければ
pyenv でインストールしたPythonにパスが通るはずです。

1
2
$ which python
/Users/kenzo/.pyenv/shims/python ←このように表示されればOK♪

Pythonエラー対応: UnicodeEncodeError: 'ascii' codec can't encode characters

結論

Pythonの文字コードを utf-8 に設定する。

概要

python で以下のような画像URLから画像をダウンロードする処理を実装した所
掲題のエラーが発生しました。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# -*- coding: utf-8 -*-

import urllib
import urllib2
import os.path
import sys
from HTMLParser import HTMLParser

def download(url):
img = urllib.urlopen(url)
localfile = open(os.path.basename(url),'wb')
localfile.write(img.read())
img.close()
localfile.close()
  • 具体的にはここでこけてました。
1
localfile.write(img.read())

環境

  • CentOS Linux release 7.0.1406 (Core)
  • Python 2.7.5

文字コード確認

以下対話式で確認してみると ascii と表示されました。
これを utf-8 に変更します。

1
2
3
4
$ python
>>> import sys
>>> sys.getdefaultencoding()
'ascii'

pip パス確認

バージョン確認時にパスが出力されます。

1
2
$ pip --version
pip 7.1.0 from /usr/lib/python2.7/site-packages (python 2.7)

site-packages配下に sitecustomize.py を作成

1
vi /usr/lib/python2.7/site-packages/sitecustomize.py
1
2
import sys
sys.setdefaultencoding('utf-8')

上記内容で保存。

再度文字コード確認

utf-8 になりました。

1
2
3
4
$ python
>>> import sys
>>> sys.getdefaultencoding()
'utf-8'

これで掲題のエラーが解決されました。