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

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()メソッドが別スレッドで呼ばれる。これで気兼ねなく時間のかかる処理を呼び出せるようになった。

defaultdictを理解する

collectionsモジュールのdefaultdictについて調べてみら、dictメソッドを上書きして、辞書形式の書き込み可能なインスタンスを返すということがわかった。これを使うと、いちいちその辞書にキーが有るかどうかの処理を書かなくてよくなる。

defaultdict関数の引数に入れたタイプを指定すると自動的にその形式が返ってくる。strだったら””,intだったら0,listだったら[]みたいになる。

例1 (key,val)形式が入っているリストに対してキー名でグルーピングする

from collections import defaultdict

colors = [('yellow', 1), ('blue', 2), ('yellow', 3), ('blue', 4), ('red', 1)]
d = defaultdict(list)
d["c"].append("foo")
d["c"].append("hoge")
print(d["c"]) #=> [foo,hoge]


for k, v in colors:
    d[k].append(v)


print(d.items())

#=>[('blue', [2, 4]), ('c', ['foo']), ('b', []), ('yellow', [1, 3]), ('red', [1])]

d は{}を返し、d["key"]は初期値として[]を持っているのでd["c"].append("foo")["foo"]を返す。

例2 文字列から文字の頻度を取得する。

from collections import defaultdict
s = "hello world"
d = defaultdict(int)

for i in range(0,len(s)):
    ch = s[i]
    d[ch] += 1
    sorted_chs = sorted(d.items(),key = lambda x:x[1],reverse=True)
    print(sorted_chs)

#=>[('l', 3), ('o', 2), (' ', 1), ('e', 1), ('d', 1), ('h', 1), ('r', 1),
('w', 1)]

defaultdict(int)によってdに対象のキーが存在していなかったら0を返すようになる。

結論

今まではキーチェックを毎回行っていたけど、これを使ったら今まで書いていたコードが結構減らせそう。これを良いきっかけにして今後はdefaultdictを使ってコードダイエットを積極的に行いたい。