動かざることバグの如し

近づきたいよ 君の理想に

Flaskでセッションの読み書きをする

Flaskでセッションの読み書きをやってみたメモ。

環境

準備

from flask import Flask, session
app = Flask(__name__)
app.secret_key = 'hogehoge'

@app.route('/')
def index():
  return 'hello'

if __name__ == '__main__':
    app.run(debug=True)

ポイントは2つあって、from flask import Flask, sessionで明示的にsessionをimportしている点と、app.secret_keyが必要な点。これがないと

RuntimeError: The session is unavailable because no secret key was set.  Set the secret_key on the application to something unique and secret.

とエラーになる。

書き込み

簡単

session['name'] = '太郎'

読み込み

name = session.get('name')

session['name']でも取得できるが、値がなかったときにエラーになるのでオススメしない。session.get()でなかった場合はNoneが返る。

第2引数に値を入れると初期値を入れることができる

session.get('name', '名無し')

削除

session.pop('name', None)

WindowsでEXT4形式のディスクをマウントする

「Ext2Fsd」というフリーソフトを使うと簡単にEXT4形式のディスクをマウントできる。非常にややこしいが、 名前がext2FsdだからあたかもEXT2しかマウントできないように思えるが実際はEXT4もマウントできる

メリット

  • 無料
  • EXT2,3,4のフォーマットをマウントできる
  • 繰り返すが、名前がext2FsdだからあたかもEXT2しかマウントできないように思えるが実際はEXT4もマウントできる ややこしい
  • ファイルエクスプローラーから直接扱える

ダウンロード

ここから最新版をダウンロード。「Ext2Fsd-0.69.exe」のようなexe形式が一番楽

インストール

適当に

確認

インストールした後で、すぐにエクスプローラーからファイルが見れる。ディスクの管理からもEXT4として認識される。

f:id:thr3a:20171106093226p:plain

PHPで「Call to undefined function bcadd() 」エラーが起きた

前にセットアップしていたときに見慣れないエラーに遭遇した

[Wed Nov 01 19:35:58 2017] [error] [client 192.168.1.66] PHP Fatal error:  Call to undefined function bcadd() in /******.php on line 117, referer: http://192.168.1.11/index.php

結論から言うと追加パッケージをインストールするだけだった。なんだ

Ubuntuの場合

apt-get install php-bcmath

CentOSの場合

yum install php56w-bcmath

Linuxコマンドで文字列から前後の空白を除去する

やりたいこと

例えば「 hello world 」という前後と文中に半角スペースがある文字列を「hello world」にしたい

方法1 sed

置き換えの万人、sedコマンドを使う。

$echo "  hello world " | sed 's/^[[:blank:]]*//'
hello world

が、いくらなんでも半角スペース消すだけでsedはちょっとオーバースペックじゃないか?

方法2 cat

どういうわけか、パイプで渡すと前後の半角スペースが消える。ので、それをcatで出力すると前後の半角スペースは消える。

echo "  hello world " | echo -e $(cat)
hello world

こうでも可

echo "  hello world " | echo `cat`

若干トリッキーではあるがシンプル。

方法3 xargs

xargsはもともと標準入力から生成したコマンドラインを実行するコマンド。ただxargs側で何もコマンドを指定しないとそのまま出力するので以下のようになる

echo "  hello world " | xargs
hello world

探した中ではこれが一番シンプルだった。

失敗編

今回探してて初めて知ったのがtrコマンドで、sedよりシンプルに文字列の置き換えができる。が、単純に半角スペースを指定すると

echo "  hello world " | tr -d ' '
helloworld

となってしまったので却下。trコマンド自体は便利そうなので覚えておきたい