- 塗り薬をもらった
- 錠剤をもらった
- 1日2回、朝と夜
- 一つはビタミン剤
- もう一つはアレルギーの症状を抑える薬とか
- 飲むと眠たくなることがあるので朝は特に気をつけてと言われちょっと怖い
- まあ風邪薬と同じ原理か
- 肌関連で錠剤もらったの初めて
- 食生活に気をつけて
- はい
11月の体調まとめ
前回までの振り返り
寝てると首筋と肘が焼けるように熱くなり、痒くなる
- 10月にはもう発症しなくなったと思う
肌荒れ
- 継続中
目覚めの悪さ
- 生活リズムはそこそこ修正できた
- ただし油断して寝すぎることがあった
不安・緊張
- ときどきある
- 深夜急に悪くなることが多い
- 金銭面の不安が増えた?
今月の振り返り
睡眠
- 二度寝のしすぎがちらほらあった
- 寒さのせいもありそう
- 起きるタイミングで部屋を適温にする
歯
- 口を大きく開けると左奥歯のあたりが痛い
- 虫歯?
- 親知らず?
肌荒れ
- 首筋もう落ちついてる
- 手首まだ治ったり治らなかったりする
- 頭がかゆい
- フケ・かゆみ用シャンプーを買った
今月の健康活動
プランク
- 思い出したようにやってる
- #plank from:utgwkk - Twitter Search
追記
2分を1セットとして1日に1か2回やっています、そこそこ腹筋に来るぐらいにやるタイプです
— うたがわきき🔰💊 (@utgwkk) 2016年11月25日
https://t.co/swevO0MZYB の story とはデレステの story の MV のことです
— うたがわきき🔰💊 (@utgwkk) 2016年11月25日
野菜ジュース
- 1日分の野菜350g
- 1週間ぐらい飲んでる
シャンプー買い替え
- 先述した通り
- 今までは夏用のスースーするやつを使ってた
- 肌によいということはなさそう
- そもそも季節外れで寒い
- ちょっと高いので効いてほしい
まとめ
皮膚科さすがにそろそろ行こう(歯科も?)
Git 管理されたファイルの履歴を書き換えて、全てのファイルをまるごと特定ディレクトリ内に移動させる
tl;dr
書き換えないと死ぬという状況でなければ git mv
で済ませましょう (追記)
$ git filter-branch --tree-filter \ 'mkdir hoge; for file in `ls | grep -v hoge`; do mv -t hoge $file;
やりたいこと
Git リポジトリのルートディレクトリ以下のファイル/ディレクトリを全て hoge/
以下に移動させたい
main.py requirements.txt module/ __init__.py
を
hoge/ main.py requirements.txt module/ __init__.py
といった感じに移動したかった
最終的にやったこと
$ git filter-branch --tree-filter \ 'mkdir hoge; for file in `ls | grep -v hoge`; do mv -t hoge $file;
雑に mv * hoge/
とかだとできなかった
お気持ち
hoge/ に移動させたいとして
— うたがわきき🔰💊 (@utgwkk) 2016年11月11日
git filter-branch --tree-filter 'mkdir hoge; for file in `ls | grep -v hoge`; do mv -t hoge $file; done' HEAD したけどいい方法ありそう
git mv でいいじゃん、確かにそうだ……
— うたがわきき🔰💊 (@utgwkk) 2016年11月20日
意味もなく履歴を書き換えまくろうとしない方が命のためです(追記)
Ruby の dig メソッドが便利なので Python で実装した
dig メソッドとは
instance method Hash#dig (Ruby 2.6.0)
たとえば各種 API を叩いて返ってきた JSON をパースした後の辞書型のような、データがいくらでもネストしてあるようなデータ構造があるとき、普通なら obj['path']['to']['destination'][2]
とか obj.path.to.destination[2]
のようにしてアクセスしなければなりません。
この dig メソッドを使うと、先述したどちらの場合でも dig(obj, 'path', 'to', 'destination', 2)
のような形式で要素にアクセスすることができます。また、該当する要素がない場合の挙動(例外か、それとも None
を返す*1か)もメソッド側で制御することができます*2。
残念ながらまだ存在する、データ構造を掘り進めた先にあるものが辞書型なのかオブジェクトなのか分からないようなインターフェース、それを気にせずに我々は掘り進めるだけでよいというのが、この dig の実装のポイントです。
実装
def dig(obj, *keys, error=True): keys = list(keys) if isinstance(keys[0], list): return dig(obj, *keys[0], error=error) if isinstance(obj, dict) and keys[0] in obj or \ isinstance(obj, list) and keys[0] < len(obj): if len(keys) == 1: return obj[keys[0]] return dig(obj[keys[0]], *keys[1:], error=error) if hasattr(obj, keys[0]): if len(keys) == 1: return getattr(obj, keys[0]) return dig(getattr(obj, keys[0]), *keys[1:], error=error) if error: raise KeyError(keys[0]) return None
キーを用いて要素にアクセスするデータ構造(list
や dict
や、それに類似したインタフェースを持つオブジェクト)だけでなく、普通のオブジェクトにも用いることができます。
class Hoge: def __init__(self, p, q, r): self.p = p self.q = q self.r = r if __name__ == '__main__': h = { 'foo': { 'bar': { 'baz': 1 } } } print(dig(h, 'foo', 'bar', 'baz')) # => 1 try: print(dig(h, 'foo', 'zot', 'xyz')) # => KeyError except KeyError as e: print(e) # => 'zot' print(dig(h, 'foo', 'zot', 'xyz', error=False)) # => None g = { 'foo': [10, 11, 12] } print(dig(g, 'foo', 1)) # => 11 k = Hoge(1, 2, Hoge(Hoge(1, 2, 3), 4, 5)) print(dig(k, 'r', 'p', 'p')) # => 1 try: print(dig(k, 'r', 's', 'p')) # => KeyError except KeyError as e: print(e) # => 's'
このようにして用いることができます。こうして我々は掘り進めるだけでよくなります。よかったですね。
ところで、この実装にはまだ解決されていない問題があり、
hoge.method_one().method_two().destination
のようなメソッドチェーンには対応しておりません。それはまた別の話になりそうです*3。
[ディアマイレディ] 櫻井桃華
本日のめでたさ共有です pic.twitter.com/CSMqcjyLH8
— うたがわきき🔰💊 (@utgwkk) 2016年11月10日
いまてがふるえています……
— うたがわきき🔰💊 (@utgwkk) 2016年11月10日
ゼロ課金です
— うたがわきき🔰💊 (@utgwkk) 2016年11月10日
ラヴィアンローズの準備できたといっても過言ではありませんね……
— うたがわきき🔰💊 (@utgwkk) 2016年11月10日
ちゃまにクッキーあげてる
— うたがわきき🔰💊 (@utgwkk) 2016年11月10日
ありがとう千川ちひろ、ありがとうアイドルマスターシンデレラガールズ スターライトステージ
次回予告
たぶん次のスカチケ来たらシューコちゃんに使います……
— うたがわきき🔰💊 (@utgwkk) 2016年11月10日
慢性的な風邪
ここ最近ずっと風邪っぽい。くしゃみが出るだけの日と鼻水も出る日を繰り返している。熱はなさそう。
カジュアルに風邪薬を飲みまくってよいのだろうかと思っている。まず食生活を改善するべきだとは思っているけどなかなか実行に移せない。