読者です 読者をやめる 読者になる 読者になる

無駄と文化

実用的ブログ

Python2 で日本語(Unicode)対応の PrettyPrint

Python

通常、print はユニコード文字列であっても読みやすく表示してくれます。

print(u"ほげ")
# => ほげ

しかし pprint モジュールの pprint() を使うと、なぜだかユニコード文字列がエスケープされるようになります。

pprint.pprint(u"ほげ")
# => u'\u307b\u3052'

ちょっとしたデバッグ目的で PrettyPrint するときはユニコード文字列の部分もちゃんと読みたいし不便ですね。


ユニコード対応版

というわけで、

# -*- coding: utf-8 -*-

from __future__ import print_function

import pprint


def pp(obj, end="\n"):
    print(pf(obj), end)

def pf(obj):
    return (pprint
        .pformat(obj, indent=4)
        .decode("unicode-escape")
    )


if __name__ == "__main__":
    obj = {
        u"ほげ": u"ぴよ",
        u"nums": [1, 2, 3, u"四", u"五"],
        u"bool": True,
    }

    pprint.pprint(obj, indent=4)  # 通常
    # =>
    # {   u'bool': True,
    #     u'nums': [1, 2, 3, u'\u56db', u'\u4e94'],
    #     u'\u307b\u3052': u'\u3074\u3088'}

    pp(obj)                       # ユニコード対応版
    # =>
    # {   u'bool': True,
    #     u'nums': [1, 2, 3, u'四', u'五'],
    #     u'ほげ': u'ぴよ'}

はい


pformat() した後に .decode("unicode-escape") でユニコードエスケープされたところを元に戻しています。


参考にしました

qiita.com

d.hatena.ne.jp

感謝!


私からは以上です。

JavaScript のコールスタックが溢れていたのをどうにかしたら JS 要らなくなった話

CSS ECMAScript 6 JavaScript

約5ヶ月前にこんな記事を書いたわけですが、

blog.mudatobunka.org

この記事が今になってよく見られるようになってます。

f:id:todays_mitsui:20161119224602p:plain

先週までは毎日1桁のPVをコツコツを積み重ねていたのが本日だけで130PVです。
どこかの誰かに拾っていただいたんでしょうね。はてブもジワッと増えていますし。


んで、はてなブックマークのコメントの中にこんな意見が、

【今日のバグ取り】 JavaScript でコールスタックが溢れていたのをどうにかした話 - 無駄と文化

js(es6)にtail call optimizationはあるし、アニメーション後のcallbackは非同期だから22時間たとうが問題ないし、cssにするならtransitionよりcss-animationのほうが向いてるし、最近ならjsでwebanimation使えるし。。。

2016/11/19 21:57
b.hatena.ne.jp

...、確かに!!

なんで執筆当初これに気づかんかったんやろ。
完全に『JS を修正する』というところに脳みそを持っていかれてました。


改良版

アドバイス通り CSS の animation プロパティを使ったバージョン書きました。

コードの主要部分はこんな感じ。

<style>
/* 背景色をゆっくりと変化させるために 5s * 7F = 35s でループさせるアニメーションを設定 */
body { animation: bgcolor 35s linear infinite; }

/* 切り替えの基点になる色を設定 */
@keyframes bgcolor {
  0%    { background-color: #346caa; }
  14.3% { background-color: #3386c8; }
  28.6% { background-color: #4aa45d; }
  42.9% { background-color: #8fb84f; }
  57.1% { background-color: #debc1c; }
  72.4% { background-color: #e09532; }
  85.7% { background-color: #eb7889; }
  100%  { background-color: #346caa; }
}
</style>

完全に JavaScript が不要になりました。
CSS アニメーションの表現力はゴイスー


末尾再帰最適化

あと、末尾再帰最適化についても lazexさまが云われてるとおり ES6 からは効くようになるみたいですね。

時が経てば「JavaScript に末尾再帰最適化は無い」という文言は嘘になることでしょう。

現時点でのブラウザ対応がいかほど進んでいるのか把握していないんですよね。
Babel が末尾再帰最適化に対応したって話 は聞いたんですが。

元記事の表記についても検討しますかね。


私からは以上です。