このページの記事一覧
● 2012年11月24日土曜日 - [Blogger] Syntax Highlighter V3 を導入する
● 2012年11月15日木曜日 - [AppEngine] jdoconfig のパラメータ
● 2012年11月13日火曜日 - [AppEngine] データ更新時の Index の使用量
● 2012年11月5日月曜日 - ツェラーの公式:曜日を計算する

2012年11月24日土曜日

[Blogger] Syntax Highlighter V3 を導入する

このブログでは Source コードを載せることが多いのだが、 キーワードのハイライトができる Script があったので導入してみる。
Blogger に導入する際に参考にしたのはこちら。 このページで 「 GENERATE SCRIPTS 」をすると、Blogger 用のスクリプトが生成されるので、 Blogger の HTML の編集で「 </head> 」タグの直前に貼り付ける。

今、貼り付けているコードはこんな感じ。
<link href='http://alexgorbatchev.com/pub/sh/current/styles/shCore.css' rel='stylesheet' type='text/css'/>
<link href='http://alexgorbatchev.com/pub/sh/current/styles/shThemeMidnight.css' rel='stylesheet' type='text/css'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shCore.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushJScript.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushJava.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushPlain.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushScala.js' type='text/javascript'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushXml.js' type='text/javascript'/>
<script language='javascript' type='text/javascript'>
    SyntaxHighlighter.config.bloggerMode = true;
    SyntaxHighlighter.all();
</script>
「 shThemeMidnight.css 」のところは使うテーマによって変わる。ファイル名の形式は「 shTheme<テーマ名>.css」。テーマは以下で Preview できる。
ハイライトする言語ごとに必要な JavaScript ファイルをロードする。
上の例では、 JavaScript, Java, PlainText, Scala, Xml(HTML) をロードしている。
使える言語と、記事中で指定する言語Alias、ロードするファイル名の一覧は、 に一覧されている。



記事の中で Syntax Highlighter を使うには、
<pre class="brush: html">
[ ここに ハイライトされるコードを書く ]
</pre>
を挿入する。
コード中の 「 < 」、「 > 」などは実体参照でエンコードする必要がある。 エンコードしないでも動いていたりするが、HTML 的に気持ち悪いし、本家でもエンコードしろと書いてあるのでエンコードして貼り付けている。

他にも、script タグ + CDATA で書く方法もあり、エンコードが不要などメリットもあるのだが、記事の内容が Script の一部として記載されるのはさすがに気持ち悪いので pre 方式を採用。
具体的な方法は、 を参照。

2012年11月15日木曜日

[AppEngine] jdoconfig のパラメータ

AppEngine の Eclipse プラグインでプロジェクトを作成すると、JDO 用の設定ファイルである jdoconfig.xml が作成される。
その中に、

<property name="javax.jdo.option.NontransactionalRead" value="true"/>
<property name="javax.jdo.option.NontransactionalWrite" value="true"/>
<property name="javax.jdo.option.RetainValues" value="false"/>
<property name="datanucleus.appengine.autoCreateDatastoreTxns" 
             value="true"/>

というパラメータがある。 JDO のドキュメント によると意味は以下の通り。

パラメータ意味
NontransactionalReadWhether to allow nontransactional reads
NontransactionalWriteWhether to allow nontransactional writes
RetainValuesWhether to suppress the clearing of values from persistent instances on transaction completion

autoCreateDatastoreTxns は JDO で規定されているパラメータではなく App Engine 固有の設定なので、 App Engine のトランザクションの説明 に記載されている。
false にすると JDO 的にトランザクションを有効にしても データストアのトランザクションは起動しないらしい。

実際に試してみよう。

2012年11月13日火曜日

[AppEngine] データ更新時の Index の使用量

この間、JDO でデータを挿入・削除した場合、それぞれ
キー以外の属性数×2 + 1」回のインデックス書き込みが発生した。

念のため、JDO で属性を一つだけ更新した場合のインデックス書き込みの回数を見てみよう。
予想としては、1属性で2つのインデックスがあるから2回発生するはず。

まずデータひとつ作成
MyData data = new MyData();
data.setName("one");
data.setName2("two");
data.setNo(10L);
pm.makePersistent(data);

ResourceDaily Quota
Datastore Entity Put Ops 0 → 1
Datastore Index Write Ops 0 → 7

キー以外の属性は3つなので想定通り 7 Index Write Ops。

2012年11月5日月曜日

ツェラーの公式:曜日を計算する

年月日が与えられたときに、その曜日を計算する公式として「ツェラーの公式 (Zeller's Congruence)」がある。

Wikipedia によると、
ツェラーの公式(Zeller's congruence)とは西暦の年、月、日からその日が何曜日であるかを算出する公式である。 まず求めたい日の年の千の位と百の位の連続の数字(例えば2310年ならば23)をJ、年の下2桁(例えば2310年ならば10)をK、月をm、日をq、曜日をhとする。ただし求めたい日の月が1月、2月の場合はそれぞれ前年の13月、14月とする(例えば、2007年1月1日なら2006年13月1日とする)。


hが0なら土曜日、1なら日曜日、2なら月曜日、3なら火曜日、4なら水曜日、5なら木曜日、6なら金曜日である。
とのことらしい。
はガウスの記号で、x を超えない最大の整数(小数点以下切り捨て)を表す。
この記事では、以下 [ x ] で表すことにする。