自分のブログに棋譜を簡単に貼り付けられるようにした

主に反省すべき棋譜を忘れないためにw

[kif:fujiko-mefjuz-20140513_203413.kif]

という記法が使えるようにした。

のんびり四間飛車を組んでいたら、速攻で銀が上がってきてボロボロにされた。

こちらも早めに銀をあげるべきだったんだろうな。

pyjadeを1.X系にあげた

いままで0.6.1を使っていたのだけど、バージョンが上がってJade互換になったそうなので週末を使って自分のブログシステムに対応させていた。

テンプレート周りの設定が色々変わっていてエラー吐きまくったんだけど、出来上がったテンプレートはJinjaっぽさ({{ }})が排除されていい感じに洗練されてきている。

JadeがヨサゲなのはBrunchと一緒に開発すればサーバーサイド(Flask)とクライアントサイド(backbone.js)で同じテンプレート言語を使えるっていうのもありそう。そういうwebアプリを作ってみたいと思っているが。

それから、1.0はutf-8のテキストを渡すとエラーになるバグがあったのでgithubのissueに登録したらすぐに対応してもらえて1.01になったので、サーバーのpyjadeのバージョンを上げて動作を確認してデプロイして、酒を飲みながらこのエントリを書いている。ソーシャルコーディングってサイコーですね。製薬系みたいな閉鎖系では味わえないスピード感がある。

0.6.1から1.0での変更点

url_forの使い方

ダブルクォーテーションとか中括弧が省略できるようになっている

autoescape

0.6.1だと

autoescape(false)= entry.content

ってやればJinjaのautoescapeが使えたんだけど1.0ではautoescapeタグになってしまう。

.contents= entry.content|safe

ってやってフィルタをかますようにした。

今年ブログにつけたタグを数えた

今年は640エントリ投稿してた。

エントリについたタグをカウントして多い順に並べてみた。

宣言通りにjavascriptを重点的に学んだ気がする。

tw11128

ちなみに、タグとそのカウントの辞書を作った後に、itemでソートしたい場合にはちょっとめんどくさかった。

for k,v in  sorted(tag_table.items(), key=lambda (k, v): (v, k), reverse=True):
    print k,v

来年はAndroidかなぁ

Flaskでhamlish-jinjaを使う

Express+Jadeで幾つか書いていたらJadeの読みやすさに慣れてしまった。

FlaskでもHamlっぽい記法を使いたいなぁとググッてみたらhaml and flaskというエントリをみつけたので、この通りに入れてみた。

-extends "layout.html"

-block title
  Page Not Found

-block body
  %h1 << Page Not Found
  %p
    %a href="{{ url_for('show_entries') }}" << go somewhere nice

  %p << or find by tag
  %div.tags
  %script type="text/javascript"
    |$.getJSON('{{ url_for('show_jsontags') }}', null, 
    |  function(json){
    |    for (i in json.tags.sort()){
    |      $('div.tags').append("<a href=\"/tag/" + json.tags[i] + "\">" + json.tags[i] + "</a> ");
    |    }
    |  }
    |);

かなり読みやすくなった。入れ子をインデントで表現するのでPythonistaにはありがたいですね。ちなみにこっちがもとのjinjaのテンプレート。

{% extends "layout.html" %}
{% block title %}Page Not Found{% endblock %}
{% block body %}
  <h1>Page Not Found</h1>
  <p><a href="{{ url_for('show_entries') }}">go somewhere nice</a></p>
  <h1>or find by tag</h1>
  <div class=tags></div>
<script type="text/javascript">
$.getJSON('{{ url_for('show_jsontags') }}', null, 
function(json){
  for (i in json.tags.sort()){
   $('div.tags').append("<a href=\"/tag/" + json.tags[i] + "\">" + json.tags[i] + "</a> ");
  }
}
);
</script>
{% endblock %}

pipとかeasy_installで0.1を入れるとdiv#idとかdiv.classという記法が使えないので、GitHubの最新版を入れたほうがよいです。


ところで、HTML5においてセマンティクスが重視されると、デザインまわりはCSSに集約されていきHTMLタグとデザインっていうのは分離されていくと思うんですね(rdfとか昔っからあるし)。

セマンティクスってデザイナーというよりはプログラマー側が考えることだろうから、マークアップエンジニアとか呼ばれているヒト達はCSSエンジニアとかそういう名称になっていくの?

よくわからんので、今度誰かに聞いてみよう

ProductName HTML5&CSS3実践入門 最新Web標準を使いこなす (The Pragmatic Programmers)
ブライアンP.ホーガン
インプレスジャパン / 2940円 ( 2011-07-08 )


静岡(東部のあたり)ではHTML5の入門書の読書会をしています(宣伝)

Flask-Cacheを使ってみた

自作のブログシステムのなかにデータベースに頻繁にアクセスしすぎて困るAPIがあるので、Flask-Cacheを使ってキャッシュするようにした。

設定を読ませてからcacheの設定をしないといけない(まぁ当たり前か)のだけどapp.config.from_objectで読ませる前にCacheしてたらキャッシュが効かなくてちょっとはまった。

CACHE_TYPE = 'simple'

app = Flask(__name__)
app.config.from_object(__name__)
cache = Cache(app) # 設定読ませたあとに

ソースは読んでたらキャッシュのタイプはwerkzeugに任せているらしいので、そっちのドキュメントを読めば大丈夫な感じですね。

python-amazon-product-apiが動かなくなった

あーそういえばメール来てたなと思い探してみたら、アソシエイトタグが必須になったらしい。

ドキュメントにはナニも書いてないので、ソース見たらアソシエイトタグが含められるようになったいたので、

api = amazonproduct.API(AWS_KEY, SECRET_KEY, 'jp', ASSOCIATE_TAG)

とロケールのあとにアソシエイトタグ含めておけばOK

自動ページ送りに対応した

jQuery.autopagerを使えば楽ちんだった。

ページ送りするとTwitterボタンが変になるので、それはそのうち直さないといけない。

ProductName jQueryクックブック
jQuery Community Experts
オライリージャパン / ¥ 3,780 ( 2010-08-18 )