Django1.7から追加されたmigration周りについてメモしておく

Django1.7からAlembicみたいな機能が標準で実装されました。便利なので使い方をメモしておきます。

最初に

python manage.py makemigrations your_app_name

と入力するとyour_app_nameの中でモデルのカラム/テーブル名が追加、削除された箇所を自動で判別して

Migrations for 'your_app_name':
0001_initial.py:
- Create model ...
- Add Field ...

上記の様なメッセージが表示されます。

これはyour_app_nameから…という新しいテーブルとカラムが作られて0001_initial.pyというファイルを作成しました、という意味です。 この0001_initial.pyを反映させると既存のDBに新しいテーブル/カラムが追加/削除されます。

また、どのようなsqlファイルを吐き出すかチェックする場合は

python manage.py sqlmigrate your_app_name 0001

とすると確認できます。

最後に中身を見て問題がないようでしたら、

python manage.py migrate

を実行して0001_inital.pyを反映させましょう。

この機能はかなり便利!

ブログのデザインを変更したのでその製作工程をメモしておく。

5日間ほどかけて、ゼロからブログのデザインをリニューアルしました。今回いい感じのデザインの製作工程が踏めたので今後のためにメモしておきます。

1日目: サイトのイメージを決める

一日目では色々なブログを参考にしながらどんなデザインにするかを妄想していました。この時に自分は今回のfurodriveの名前から風呂っぽい、ゆらぎのある雰囲気を出して没入感の高いデザインにすることが決まりました。

2日目: 紙の上でイメージ図を出す

いきなりデザインソフトを使うのではなく、 紙の上でいくつかラフ案を出して試行錯誤を重ねました。

3日目: サイトのモックをSketchで作る

sketch

SketchというAdobeのIllustratorの代替になりうるアプリがあるのですが、今回これを使用しました。このアプリを使うと、アートボードがあるし、パスも書けるし、簡単に画像のスライスも出来ます。海外だと結構このソフトを使って脱Adobeをする人がいるらしいです。まだ使い出して一週間も経ってないのですが、非常に直感的に作業ができるので気に入ってます。

またモックの段階では作りこむのではなく、ざっくりと作ることで遊びをもたせて細かいところはHTML,CSSで実装しながら考えると、という方法を取ったのですがうまくいきました。

4,5日目: HTML,CSSで表現する

モックをベースにHTML,CSSに流し込む作業をしました。しっかりと前準備ができていたので特に難しいこともなく2日で終わりました。

感想

自分としてはそれなりに満足の行くものが出来た。前段階でしっかりと準備したおかげで、コードを書く段階では試行錯誤が格段に少なくなり素早くコーディングができた。

これから自分がアプリやウェブサービスを作るときもこのような製作工程をきちんと行っていきたい。

Pythonでひらがなを判別する

で文字がひらがなかどうかを判別できる。 例えば


 "あ" <= "お" <= "ん" #=> True
 "あ" <= "b" <= "ん" #=> False
 

となる。

ちなみに文字列が全てひらがなで書かれているかどうかは以下のメソッドで判別できる。


def is_h(title):
    a =   [ch for ch in title if "あ" <= ch <= "ん"]
    if len(title) == len(a):
        return True
    return False
 

CLIのVimでもタブ機能を使って快適にコーディングする

本日Vimのことについて調べていたらCLIのVimでもタブ機能があることを知りました。 これを使用するとSublime Textみたいにタブでファイルを開いて自由に複数のファイルを行き来できるそうです。これは嬉しい!

このコマンドさえ覚えておけば十分使えるというコマンドをリストアップしておきます。

  • tabnew {filename} : fileを新規タブで開く
  • ノーマルモードにて gt: 次のtabに移動
  • ノーマルモードにて gT: 前のtabに移動
  • ノーマルモードにて {i}gt: i番目のtabに移動

コツコツとVim力を上げていきたいです。

Decoratorのついている特定のメソッドを別スレッドで呼ぶようにする

@asyncデコレータが付いているメソッドに対して別スレッドで呼び出せるようにした。


from threading import Thread

def async(f): def wrapper(args, *kwargs): thread = Thread(target = f, args = args, kwargs = kwargs) thread.start() return wrapper

@async def long_task_async(): print("long task")

上のコード例だとlong_task_async()メソッドが別スレッドで呼ばれる。これで気兼ねなく時間のかかる処理を呼び出せるようになった。