文字列の書式指定を使ってHTMLに変数を埋め込む

python_logo

HTMLの中に変数を入れ込むというCGIで良くやるやつです。
ソースはpython3.3を想定して書いてます。

結論から言えば、str.format() を使うだけです。

例えばPHPとかだと

$hello = 'こんにちは!';
print "<p>$hello</p>";
<p>こんにちは!</p>

となる。

これをPythonでやってみる。

hello = 'こんにちは!'
print('<p>' + hello + '</p>')
<p>こんにちは!</p>

んで、そのうちコメント(ヒアドキュメント)とprintf的な書き方を使ったりし始めてー

title = '挨拶は元気よく'
hello = 'こんにちは!'
print('''
<div>
    <h1>%s</h1>
    <p>%s</p>
</div>
''' % title, hello)
<div>
    <h1>挨拶は元気よく</h1>
    <p>こんにちは!</p>
</div>

とまぁここまでなら特に問題ないと思うけど、この書き方だと

1.変数を表示したい順番に並べなければいけない(% title, hello の部分)
2.埋め込まれた箇所を見てどの変数が入っているかわからない(どこを見ても%sだらけに)
 →何番目の変数か数えなきゃいけない!(>’A`)>

やりたいことは
・変数名でそのまま埋め込んで展開したい
・変数名をキーにした辞書(ディクショナリ)で管理したい

ということで解決策は「str.format() メソッドを使う」こと(・ω・)b
一目瞭然ソースを見てみる

greeting = {
    'goodmorning' : 'おはよう!',
    'hello' : 'こんにちは!',
    'goodevening' : 'こんばんは!'    
}
print('''
<p>
    {goodmorning}<br />
    {hello}<br />
    {goodevening}
</p>
'''.format(**greeting))
<p>
    おはよう!<br />
    こんにちは!<br />
    こんばんは!
</p>

辞書を別ファイルにしてインポートする形にすると
色々管理しやすくて良いですね(*´-`)

美味しくコーヒーを楽しむには

cup_of_beans

自称紅茶派の僕ですが、コーヒー講座が目についたので参加してきました。
そのとき殴り書いてたメモをまとめました…φ(.. )

基本的なお約束

1.良質で新鮮なコーヒーを使う
 コーヒーには12~20%の脂肪分が含まれているため、空気に触れると酸化してしまう。
 そこで購入の際は少量ずつ購入し、開封後は密閉容器に入れて冷蔵庫で保管するようにする。

2.使用する器具にあった豆の挽き方をして、しっかり計量して粉を入れる

3.器具やカップは予め温めておく
 冷たいものだと5~10度程下がります。
 コーヒーを淹れるお湯は100度で沸騰したお湯を使うと香りが立つ

4.気持ちよく飲める環境や気分で飲む

コーヒーの濃さとそれぞれの関係

濃い <<<<<<<<<< コーヒーの濃さ >>>>>>>>>> 薄い
===========================================
高い <---------- お湯の温度 ----------> 低い
少ない <---------- お湯の量 ----------> 多い
低い <---------- お湯の水位 ----------> 高い
多い <---------- コーヒーの量 ----------> 少ない
細かい <---------- 挽き方 ----------> 粗い
長い <---------- 抽出時間 ----------> 短い
深い <---------- 焙煎度合い ----------> 浅い

クワイエット・ドリップ法

アメリカの旧CBCの研究によると、コーヒーが熱湯で抽出できる30~50%の可溶性成分の内、
18~22%が人が美味しいと思えるコーヒーとのこと。この良い味だけを抽出するには
コーヒーの粉が踊らないように静かに注ぐ「クワイエット・ドリップ」が有効だそうです。

1.沸騰したお湯を人数分用意する (1人分約130ccが目安)
2.圧着させるためにフィルターの縁を折った円錐形フィルタをセットする
3.コーヒーの粉をフィルターに平らに入れて凹みをつける(お湯が外に出るまでに通るコーヒーの幅を均等にする)
3.コーヒーの粉が十分に浸る量のお湯を「の」の字に注いで、25~30秒間蒸らす。(アメリカンの場合は若干短く)
4.フィルター上端から2cm下のラインまで一気にお湯を注いでから、下記に注意しながら注ぎ続ける。
 ・水位を保つ
 ・水面真ん中すぐ上で固定して静かに注ぐ(回し入れたりしない)
 ・注ぐお湯で水面に浮いたコーヒーの微粉を混ぜ込んでしまわない
 ・コーヒーの粉を踊らせない
5.酸化が進みやすいので、できるだけ早く提供する

その他
・エスプレッソは蒸気で130度ぐらいで短時間で抽出。粉は細かいものを使う。
・コーヒーの「ACID=酸味」は甘みのことで、酸っぱみのことではないらしい。
・抽出したコーヒー液は酸化が進みやすいため、30分以上経ったコーヒー液は味も香りも乏しく使えない。
・酸化すると酸っぱみが出てくる。
・水出しコーヒーの抽出は3時間を目安にする。
・コーヒーは脂肪分を12~20%含むため、使用した器具等は綺麗に洗浄する
・CARITAの12g計量カップは使いやすいらしい
・ミルで挽き方が均一になるように挽いてる途中で振るのもあり。
・コーヒーの粉は空気を吸って香りを吸収しまうので、袋入りコーヒーはガスバリア製の袋が空気を通さなくて良い。
・豆のほうが粉より3~5倍長持ちする
・保存はビンが良い。理由は油分が洗って取れるため。
・冷蔵庫保存では味が抜ける傾向(結露が影響か?)にあるため、保存は常温で良い。
・粉にして1~2週間で飲み切る
・HARIOが分厚くて早く落ちる。表面が波打ってる(クレープ付き)ものがある。
・無漂白のフィルターは若干紙臭い。日本製で酸素漂白のフィルターが良い。
・環境に配慮したケナフが減少傾向なのでケナフのフィルターが少なくなり、バンブーが使われ始めている
・コーヒーは軟水のほうがよく抽出される
・コーヒー利き味をできるようになるには、まずロブスター、モカ、コロンビア、ブラジルの4種で何度も試す。
・ブラジルコーヒーは2~3月ごろ入荷され、国内初売りは10月頃。

PythonでCGIを学ぶ

python_logo

CGIはPerlとかPHPが多いイメージだけど、そこをあえてPythonで覚えてみたい!ヾ(・ω・)ノ
そこで下記サイトを参考にさせてもらいながら、基本的なことをまとめてみる。
Python CGIプログラミング入門
Python 2.7ja1 documentation20.2. cgi — CGI (ゲートウェイインタフェース規格) のサポート

500エラーとか出る人は前回の記事 サーバーでPythonを使うときに注意すること をチェック
してみてください(・ω・)b

HTMLとして表示するときは print で最初にヘッダーを書きだして1行開けるのがお約束。

print "Content-Type: text/html"     # 以降のデータが HTML であることを示す行
print                               # ヘッダ部の終了を示す空行

Pythonの中にHTMLコードを書くときは printステートメントをつける。

## こう書いても良いけど…
print "<TITLE>CGI script output</TITLE>"
print "<H1>This is my first CGI script</H1>"
print "Hello, world!"

## 僕はこう書く方が楽で好き
print """
<TITLE>CGI script output</TITLE>
<H1>This is my first CGI script</H1>
Hello, world!
"""

cgiモジュールをインポートする前に、デバッグ用のおまじないを書いておこう。
エラーが発生した際にブラウザ上に詳細なレポートを出力してくれるぞー。

import cgitb
cgitb.enable()

入力されたフォームデータを取得するには、 FieldStorage クラスを使うのがBEST!(゚∇^d) グッ!!
値を取得するには FieldStorage クラスの getfirst メソッドを使う。

import cgi
fs = cgi.FieldStrage()
txt = fs.getfirst('text', '')

print """
    <article>
        <h2>テキストフィールドに入力された文字を表示</h2>
        <p>入力された文字は、<strong>%s</strong> です。</p>
        <form action="cgi_fieldstorage_txtfld.cgi" method="post">
          <input type="text" name="text" />
          <input type="submit" />
        </form>
    </article>
""" % cgi.escape(txt) ## 特殊文字がある場合はHTML上で表示できるようにする

上記のコードのDEMO

HTML5の新要素をIE8以前に対応させる

html5-logo

IE8以前にもHTML5の新要素を対応させるために、html5shiv.jsを読み込みます。
下記のような新しいタグに対応することができますが、Javascript API等を含め
すべての新機能に対応しているわけではないので注意が必要です。

section・・・汎用的セクションを表す
article・・・独立して配信可能な情報を表す
header・・・セクションのヘッダーを表す
footer・・・セクションのフッターを表す
aside・・・補助的な情報を表す
nav・・・主要なナビゲーションを表す
hgroup・・・h1~h6の見出し要素をまとめる
figure・・・文章中の図を表す

<head>
<!-- HTML5の新要素にIE8以前も対応させる -->
<!--[if lt IE 9]>
<script src="common/js/html5shiv.js"></script>
<![endif]-->
</head>

以前はGoogleCode内のソースコード(http://html5shiv.googlecode.com/svn/trunk/html5.js)を直に読み込む方法が一般的でしたが、
・ソースコードリポジトリへのリンクは行うべきではない
・最新のソースコードではないことがある
・3分しかキャッシュされない
という上記3点の理由からサーバーにhtml5shiv.jsを保存して利用する形が良いみたい(・ω・)

参考
html5shiv
HTML5導入前に覚えておきたいこと
IE対応でよく利用するhtml5shivの使用方法変更について

サーバーでPythonを使うときに注意すること

python_logo

ちょっとしたことだけど、初めて使うときには躓くよね(´・ω・`)

・拡張子を.pyから.cgiに変更
・パーミッションを755に設定
・改行コードをWindowsのCR+LFからLinuxのLFに変更
・ヘッダでcharsetを指定しない

調べてみると同様の問題についてRubyでの対処法が書いてあったので、
もしかしたらPythonも同じかなぁと思って試したら大丈夫だった(・ω・)b

ちなみにモジュールファイルは.pyで問題なく利用できます。
その際はファイルのパーミッションを600に設定するなどで、
ソースコードが外部から閲覧できないように設定して下さい。

test.cgi

#!/usr/local/bin/python
# -*- coding: utf-8 -*-
 
print "Content-Type: text/html\n"
print
print "Hello world!"

選択肢メニュー表示のNVLモードとADVモード切り替え

WikiLogo
ver 6.14.1

NVLモードで文中に選択肢を表示させるときは、その前段階で

    $ menu = nvl_menu

のように設定しますが、途中でADVモードに切り替えても選択肢メニューまでは切り替わりません(´・ω・`)
試しに

    ## 間違った例
    $ menu = adv_menu

としてもエラーになってしまいます。

解決策として、選択肢メニューはデフォルトではADVモードなので
以下のようにデフォルト設定を上書きすることで解決しました(・ω・)b

    $ menu = renpy.display_menu

NVLモードとADVモードの切り換えって、window show とかも意味合い変わったりするし
色々注意してないとだね(・ω・)

チャプターごとにゲームを開始できるようにする

WikiLogo
ver 6.14.1

チャプターごとにゲームを開始できるようにする

書いてある通りです(・ω・)以上!

screens.rpy の中にある main_menu のあたりを探してメニュー項目を追加するだけ!

        textbutton _("Start Chapter 2") action Start("chapter2")

action Start の引数にラベル名を入れる。空の場合はゲームの先頭から開始になる。
開発中はショートカット代わりに作っても便利ヾ(・ω・)ノ

キャラクター名を独自ウィンドウで表示

WikiLogo
ver 6.14.1

How do I put the character’s name in its own box? に書いてるけど…英語っていうね(;´д`)
以下、内容を簡単適当良い加減超意訳してみた。

Q: どのようにキャラクター名の独自表示領域を設置できますか?
A: “show_two_window” を使えば可能です。
もしあなたがキャラクターの名前をメインウィンドウの外に表示したいとき、次の式をを加える必要があります。

$ e = Character("Eileen", show_two_window=True)

この名前ウィンドウの配置、背景などを編集するには、次の例のように属性を変更することで可能です。

    style.say_who_window.background = Frame("frame.png", 15, 15) #Background skin
    style.say_who_window.xalign = 0.0
    style.say_who_window.yalign = 1.0
    #style.say_who_window.xpos = 100 #For precise placement
    #style.say_who_window.ypos = 100 #For precise placement
    style.say_who_window.left_padding = 15
    style.say_who_window.top_padding = 15
    style.say_who_window.right_padding = 15
    style.say_who_window.bottom_padding = 15
    style.say_who_window.xminimum = 150
    style.say_who_window.yminimum = 15
    style.say_who_window.xfill = False

とりあえずメインウィンドウの外に表示ができた。
全体のイメージが決まるまではデフォルト設定で使ってみよう(・ω・)

danceとdancing

English

I like dance. でも、I like dancing.でもOKですが、ニュアンスが若干違います。
I like dancing.だと「踊ることがすき」の意味になります。
I like danceだと、「ダンスが好き」です。(見るのがすき、するのがすき、学校のダンスのクラスが好き、等々、いろいろな意味になりえます。)

なるほど。名詞形のdanceと動詞形のdance+ingで名詞形にするのとでは、意外と意味が変わってくるのね(・ω・)

参考
英語での言い方 – OKWave

発熱と震えのメカニズム

寒い時にブルブルと震えるのは何故か?風邪を引いて熱を出すのは何故か?
友達が風邪を引いたときに話にでたので引用のまとめ(・ω・)

人間を含めた多くの恒温動物は、寒冷環境中では、体温が低下してしまわないように、脳からの指令によって骨格筋を震えさせることで熱を積極的に産生します。この「ふるえ熱産生」は、感染による発熱時にも生じ、体温上昇に寄与します。こうした生理反応は、普段私達が身近に経験するものです

thermometer

一般に正常体温は36.5°C前後が最も多い。臨床的に発熱とは37.5°C以上のものを指す。

体深部温を上昇させる生理学的意義としては、
1.体内に侵入した細菌類の増殖至適温度域よりも体温を上げ、それらの増殖を抑える
2.体温を上昇させることで免疫系の活性化を促す

寒い環境では体表面の血管収縮により体表面からの熱放散が抑制させて
他方、運動神経を活性化させて骨格筋におけるふるえ熱産生を促すことで
体深部温を上昇させる・・・と。

人間ってよく出来てるね(・ω・)

参考
発熱 – Wikipedia
寒さによって「ふるえ」を起こす脳の仕組みを解明 – 京都大学