2012/10/29

Google App Engine では M2Crypto は使えない?

Android のアプリ内課金(In-App Billing)はサーバー認証を行うべきだというのは書かれているのですが、その方法は日本語サイトではあまり見かけません(セキュリティに関することなので、出てこないのかもしれません)。
そこで、Google App Engine(GAE) を使って、サーバー認証しようと思いました。GAEではPythonとJavaとGOが利用できるので、今回はPythonで作ろうと思いました。

PHPで作成するなら以下のサイトが参考になります。
In-app Billingでsignatureの検証をサーバサイドで行う - isherの日記
android in-app Billingのサーバ側チェック - 私事ですが……


さて、本題。

環境:Windows 7 Professional 64bit, Python2.7(64bit), App Engine SDK 1.7.2

Python でのサーバー認証の方法は以下を参考に M2Crypto を使用してみましたが、
Verifying signature on android in-app purchase message in Python on Google App Engine - Stack Overflow


File "C:\dev\gae\appName\M2Crypto\__init__.py", line 22, in
ImportError: No module named __m2crypto


と、M2Crypto のインポートエラーが出ます。調べてみると、

python - importing m2crypto to google app engine - Stack Overflow
  m2crypto contains C code and won't work on GAE(C言語を含むm2cryptoはGAE上では動かない。)
 と書かれていました。

■結論
 __m2crypto.pyd はC言語で書かれた拡張モジュール(=pyd)なので、GAEでは利用できないのだと思います。
(が、参考にしたソースは「この方法でできたよ(Here's how i did it)」って書かれてるので、できるのかな~という気はしますが。。)



■余談
Pythonの基礎については以下のサイトでPDFを無料で公開されていますので、こちらも利用しています。
みんなのPython Webアプリ編 | Lindoc

2012/09/08

リストに表示されていないフォントを表示する方法(Windows Live ムービーメーカー 2011)

Windows Live ムービーメーカー 2011で、リストに表示されていないフォントを表示する方法です。


■手順
  1. まずは、キャプションを追加します。(ビデオや写真が入っていない場合は、「タイトル」を追加します)
  2. 追加されたキャプションをダブルクリックします。
  3. 「テキストツール」->「フォーマット」リボンにある「フォント」グループから、現在選択されているフォントの下三角を クリックします。
  4. 下側にある「他のフォントを表示」をクリックし、インストールされているフォントを表示します。 (リストに表示されていないフォントは灰色、表示されているフォントは濃いく表示されています。)
  5. 表示したいフォントを右クリックし「表示」を選択することで、フォントのリストに表示されるようになります。

 以上の手順でリストに表示されていないフォントをリストに表示することができます。

---(2013/12/26追記)
Windows Live Essentials 2012が公開されています。
これをインストールするとWindows Live ムービーメーカー 2012にアップデートされます。
Windows Essentials - Windows Live Essentials をダウンロードする

2011では背景の色と被って見え辛かったテキストが、輪郭をつけれるようになったので、大変読みやすくなりましたので、オススメです。
---(追記ここまで)

2012/07/12

Windows 7上のfirefoxで youtube の動画が見れない

2012年6月のプラグインのアップデートに伴い、youtubeの動画が見れない状況になっていました。

FirefoxにあるIEのレンダリング(IE Tab 2というアドオン)に切り替えると見ることができたので、当初はAdblock Plus や NoScriptなどのアドオンにより見れなくなってしまったと思っていました。が、1カ月経ち、どうしても不便なので調べてみると Adobe Flash Player Plugin によるものと分かりました。
その手順をまとめます。

■環境(参考として)
OS:Windows 7 64bit
ブラウザ:Firefox 13.0.1


追記(2012/07/16) 

いくつか方法がありますので、お好きなものでうまくいくものを試してください。
  1. 最新版11.3.300.262(2012/07/16現在)のプラグインに更新する(私の環境ではうまくいかなかった)
  2. Flash 10.3 にダウングレードする(私の環境でうまくいったのはこれ)
  3. Flash 11.2 にダウングレードする(未検証)

窓の杜 - 【NEWS】「Firefox」でクラッシュする問題を修正した「Adobe Flash Player」最新版が公開
Flash 11.3 がクラッシュする | トラブルシューティング | Firefox ヘルプ

(追記ここまで)

■1の手順
  1. コントロールパネルを開き、Adobe Flash Player Plugin(11.3.300.257)アンインストールします(ブラウザ等は終了しておきます)。
  2. Firefoxを開き、youtube などのサイトを開くと、Adobe Flash Player Plugin 11.3.300.262(2012/07/12現在)を追加するバーが表示されるので、それでインストールを行います。
追記(2012/07/16)
プラグインを追加することなく見れました。


どうもプラグインを再インストールしたら見れるようになったと思っていましたが、勘違いでした。追加したあとには「An error occurred. Please try again later.」と表示されて見れなくなっていました。


プラグインを追加して見れたと勘違いしたのは追加しようとしているときに再生が行われたからだと思います。
プラグインを追加しないと「このコンテンツを再生するにはプラグインが必要です」と表示されることがありますが、少し待つと見れました。


この手順でうまくいけばいいのですが、私の環境ではうまくいきませんでした。

■2または3の手順
  1. Flash Player 10.3 または Flash Player 11.2プラグインをダウンロードする 
  2. コントロールパネルを開き、Adobe Flash Player Plugin(11.3.300.257)アンインストールします(ブラウザ等は終了しておきます)。
  3. ダウンロードしたプラグインのインストーラを起動してインストールを行います。
(追記ここまで)
 
以上の手順で youtube が見れるようになりました。


以前にも、 Windows XP 64bit Edition 上で似たようなことがありました。
アウトプットメモ: 最新のFlashにアップデートしたらWindows XP 64bit Editionのブラウザ上でフラッシュが見れなくなった


■参考サイト
FirefoxでYouTubeが見れない不具合 - 天球日記

2012/07/09

eclipseをよく使う人がMicrosoft Visual C# 2010 Expressのコード・フォーマットを変更するとしたら

普段、eclipseをよく使ってJavaのコードをよく書くのですが、今回Microsoft Visual C# 2010 Expressを使用するにあたり、eclipseのコード・フォーマットに近づけたいと思いました。そこで、いくつか設定を行ったのでまとめます。

なお注意点は、eclipseのコード・フォーマットの方もいくつか自分用に変更していて、今回のカスタマイズもそれに倣う形になっています。もし、あなた自身や所属する組織で決まったフォーマットがないのであれば、参考にしてみてください。
また、今回のカスタマイズはVisual C# 2010 Expressの初期設定の状態から変更しています。


■改行や行間をカスタマイズする

ツール->オプション->テキストエディター->C#->書式設定

->改行
    「中かっこの改行オプション」のチェックをすべて外す。
    「キーワードの改行オプション」のチェックをすべて外す。
    「式の改行オプション」はそのまま。
->行間
    メソッドの呼び出しのスペースを設定する
        ・「引数リストのかっこ内にスペースを挿入する」にチェックを入れる。
    その他のスペースオプションを設定する
        ・「式のかっこ内にスペースを挿入する」にチェックを入れる。    ←やめました(2012/10/20 update)
        ・「制御フローステートメントのかっこ内にスペースを挿入する」にチェックを入れる。
        ・「キャストの後にスペースを追加する」にチェックを入れる。
    折り返し
        ・「ブロックを単一行に配置する」のチェックを外す。
        ・「一行に複数のステートメントとメンバー宣言を表示する」のチェックを外す。


■起動時に最後に読み込んだところから再開できるようにする
  1.  ツール->オプションを開き、「すべての設定を表示」にチェックを入れる。
  2. ->環境->スタートアップ->スタートアップ時を「最後に読み込んだソリューション」に変更する。

■行番号を表示する
  1. ツール->オプションを開き、「すべての設定を表示」にチェックを入れる。
  2. ツール->オプション->テキストエディター->すべての言語->全般->表示の「行番号」にチェックを入れる。

以上です。
とりあえず、こんな感じで設定しました。また何かあれば追加しようと思います。

■余談
以下の本は、クラスの継承などはもちろんのこと、C# や Visual Studio の歴史をざっくり知ることができ、他言語を習得している方で C# やVisual Studio 2010 Expressが初めての方であれば参考になると思います。

2012/05/23

調べたい書籍をAmazonからワンクリックで図書館を検索できるブックマークレット

Amazon や 楽天などで本を探していたとき、もし、その本が近くの図書館に在庫があった場合に無料で借りることができるのは非常に便利だと思ったので、ブックマークレットを使ってワンクリックで調べられるようにしました。

ブックマークレットとは、
ブックマークレット (Bookmarklet) とは、ユーザーがウェブブラウザのブックマークなどから起動し、ウェブブラウザで簡単な処理を行う簡易的なプログラムのことである。
ブックマークレット - Wikipedia

上の説明でも分かりづらいかもしれません。

とりあえず、今回作成したブックマークレットは、Amazon や 楽天で書籍を見ているページのISBN-10(またはISBN-13)をもとに、カーリルという図書館検索サイトの図書館API(OpenURL)を利用し、それをjavascript を用いて開いています。

そのおかげで、Amazon のサイトを見てるときにブックマークレットをワンクリックするだけで自分が調べたい図書館の在庫を確認することができます。

■はじめに
まずはカーリルで「図書館の設定」をクリックし、「お気に入りの図書館」を登録しておきます。
複数登録できるので、県内の図書館を登録しておくとよいでしょう。理由は、県内の図書館であれば、違う図書館からも借りることができる場合があるからです。

■手順
  1. カーリル検索のリンク先を「右クリック」して「リンク先をブックマーク」を選択する
  2. ブックマークツールバーに追加する(と便利です)
  3. Amazon や楽天などで本を探す
  4. 本のページでブックマークツールバーに登録したブックマークレットをクリックする
  5. 新しいウィンドウが開いて図書館の在庫を検索する
以上、firefoxでの手順を書きましたが、IE や Google Chrome の場合も似たようなものだと思います。

よくよく調べたら、同じようなのがありました。
わずかに動作違うので(新しいウィンドウを開くか同じウィンドウで開くかの違い、など)、好きなものを利用すると良いと思います。

■参考サイト
OpenURL for カーリル | カーリル
http://calil.jp/doc/api_openurl.html
GreasemonkeyでAmazonから探せる図書館まとめ - Myrmecoleon in Paradoxical Library. はてな新館
http://d.hatena.ne.jp/myrmecoleon/20070627/1182958284

2012/05/17

Swing を使うなら、おさえておきたい3つの日本語サイト

Swing を使うなら、おさえておきたい3つのサイトを紹介します。
これらのサイトを知っていれば、Swingを扱うことが容易になるでしょう。

Javaの学習ならJavaDrive
http://www.javadrive.jp/

「Javaの学習ならJavaDrive」というトップページにふさわしく、Swingの学習を始めるときにはJavaDriveのSwingの項目を見ると良いです。
使いたい部品(コンポーネント)の一番小さいひな形を使うのでどのメソッドを使えばよいのか、どのパラメータを渡せばよいのかが非常に分かりやすいです。


Java Swing Tips - てんぷらメモ
http://terai.xrea.jp/Swing/

『最も欲しいものはサンプルである』とトップページに書いてあるように、まさにすぐに動作を確認できる実行ファイルがついてあります。jarファイルを実行し、自分の作りたいもののイメージにあっていればソースコードをダウンロードして、自分のプログラムに組み込んでいく。そういったことができます。

JavaDriveで部品の仕組みを学び、それをどうやって使っていくかを学ぶ上で非常に有用なサイトです。

さらに驚くべきことは、現在(2012/05/17)も更新が続いていることです。絶え間なくSwingの新しい使い方を知ることができるでしょう。


Java Swingメモと改造(Hishidama's Java Swing Memo)
http://www.ne.jp/asahi/hishidama/home/tech/java/swing/index.html

新しいことを学ぶ上では、どうしても分からないことが出てきます。また、Swingの仕組みなどさらに突っこんで学ばないと、自分の作りたいものが作れないということが出てきます。

そのときは、Hishidama's Java Memoのサイトを見ると良いでしょう。
トラブルの対処の仕方やSwingをより深く扱う方法が書かれています。

JavaDriveで部品を学び→てんぷらメモで組み合わせ→Hishidama's Java Memoでまとめ→JavaDriveで・・・


以上のサイトにより、皆さんがSwingをよりよく学び、使えるようになれればと思います。

2012/05/16

【Processing】eclipse上での開発でフルスクリーンを行うためのだいたい3つぐらいの方法

■まえおき
Processing(1.5.1)は自前でIDEを持っており、ソースコードの拡張子はpdeです。
中身はJavaなのですが、電子アートやビジュアルデザインを目的に作られたこともあり、簡単にコーディングできる反面、あまりJavaらしい開発(?)ができないと感じています。

そこで、私はPAppletを継承してeclipse上で開発しています。その方法はgoogleで検索すればでてきますので割愛しますが、要点を3つ挙げます。
  1. processing-1.5.1/lib/core.jarをライブラリに読み込む(その他必要がなれば追加する)
  2. PAppletを継承する
  3. 実行はJava アプレットで起動する
■本題 
さて、Processingで開発したものをフルスクリーンで表示したいとき、ProcessingのIDEでは「Sketch」メニュー>「Present」でフルスクリーンで表示することができる(*1)。また、ライブラリとして個人の人が開発したAPIが提供されている。
FullScreen API For Processing

このライブラリは
processing-1.5.1\modes\java\libraries
に配置する。
ライブラリの設定は、Javaプロジェクトを右クリック>プロパティでプロパティを開き、Java のビルド・パスを選択し、ライブラリー>外部 Jar の追加ボタンをクリックし、さきほど配置したライブラリを選択し、OKボタンを押すと追加できる。

以上のステップでfullscreenのAPIが利用できるようになるので、さっそくサンプルと同じように記述してみる。

import fullscreen.*;

FullScreen fullScreen;  @Override
  public void setup(){
    size(640, 480);
 
  frameRate(5);

 
  // Create the fullscreen object
 
  fullScreen = new FullScreen(this); ・・・(*2) 
 
  // enter fullscreen mode
 
  fullScreen.enter();
}


  @Override
  public void draw() {

    // 省略
  }


さて、Java アプレットとして起動すると、(残念なことに)以下のエラーが出る。

Exception in thread "Animation Thread" java.lang.NullPointerException
    at fullscreen.FullScreen.(FullScreen.java:93)
    at fullscreen.FullScreen.(FullScreen.java:108)
    at jp.sample.fullscreen.SampleFullScreen.setup(SampleFullScreen.java:17)
    at processing.core.PApplet.handleDraw(Unknown Source)
    at processing.core.PApplet.run(Unknown Source)
    at java.lang.Thread.run(Thread.java:662)


(*2)で FullScreenのインスタンスを作成している際、FullScreen.javainitメソッドjava.lang.NullPointerException が発生している。

public FullScreen( PApplet dad ){{
  this( dad, 0 );・・・(108行目)
}

public FullScreen( final PApplet dad, int screenNr ){
    super( dad );
    this.dad = dad;
    // 一部省略

    fsFrame = new Frame( dad.frame == null? "":dad.frame.getTitle() );
    fsFrame.setTitle( dad.frame.getTitle() ); ・・・(93行目)
    // 以下省略
}


この93行目のdad.frame.getTitle()java.lang.NullPointerException が発生している。正確には dad.frame がnull である。

この java.lang.NullPointerException が発生しないようにする対策はぱっと思いつくもので2つあると思う。
  1. dad.frame にインスタンスを与える
  2. 93行目を削除し、自分でFullScreenのAPIを再ビルド、fullscreen.jarを作成する(未検証)
 1の方法は実際にやってみてある程度の成果が挙がっている。2に関しては予想した範囲でやり方をまとめる。

■1. dad.frame にインスタンスを与える
(*2) で FullScreen のインスタンスを作成する前に、以下のプログラムを1行追加する

this.frame = new Frame( "" );// ""には文字列を入れてもよい

これで93行目で null ではない(dad は this を参照している)のでエラーが発生しなくなり、フルスクリーンすることができる。
しかし、新しいフレーム ができる・・・ようは2つのウィンドウが起動している状態になるので少しスマートではないのが惜しむところ。動作自体は特に問題はないと思う。

もしかしたら、最初に立ち上がるウィンドウを this.frame に与えればよいかもしれない。


■2. 93行目を削除し、自分でFullScreenのAPIを再ビルド、fullscreen.jarを作成する(未検証)
93行目の行っていることは、フルスクリーンのフレームのタイトルに名前をつけるだけであり、また92行目でタイトルを設定しているので余分な処理である。

FullScreen APIのソースコードは配布されているので、ソースコードをダウンロードし、93行目を削除して再ビルドを行い、fullscreen.jarを作成することで java.lang.NullPointerException は発生しないと推測している。


以上、いずれかの方法でeclipse上でProcessingの開発を行ってもフルスクリーン化することができる。
これでまとめを終わりたいところであるが、その他の方法もあるので少しだけ触れたい。


■3. その他の方法
さて、ここで(*1)を思い出してほしい。ProcessingのIDEは「Present」で fullscreen.jar を使うことなくフルスクリーンを行っている。
したがって、「Present」で行っていることと同じようなアプローチをすればフルスクリーンできることが推測できる。

processing.core.PApplet.java,  processing.mode.java.JavaEditor.java, processing.mode.java.PresentMode.java

などのソースをおっかけてみると良いと思う。
もしくは、自前でフルスクリーンを実装する。以下のサイトを参考にすると良さそう。
フルスクリーンモード  - 人工知能に関する断創録

Processingのソースを解析してみると、上のサイトと同じようなことをやっている(当たり前と言えば当たり前だが)。


■まとめ
1の方法が手軽です。