2011年9月6日火曜日

Google App Engine はじめようかな? - インストール

Google App Engine の 開発環境ページを見ると

Google App Engine 用の Python アプリケーションの開発とアップロードには、App Engine Python ソフトウェア開発キット(SDK)を使用します。

Python SDK には、App Engine 環境をシミュレートするための Web サーバー アプリケーションが用意されており、ローカルのデータストアや Google アカウントを利用できます。また App Engine API を使用することで、URL をフェッチしたり、メールをコンピュータから直接送信したりできます。Python SDK は、Python 2.5 がインストールされているすべてのコンピュータで動作します。Windows、Mac OS X、Linux 用に異なるバージョンが提供されています。

必要に応じて、Python の Web サイトから Python 2.5 をダウンロードしてインストールしてください。Mac OS X 10.5 Leopard には、Python 2.5 があらかじめインストールされています。

開発環境 - Google App Engine - Google Code

とのことなので、Python の Web サイトから Python 2.5 をダウンロードしようとしけれど Python 2.7 の .msi(Windows 用) ファイルしか置いていないようなので、だめもとで python-2.7.2.msi をダウンロードして……

…… Python のインストールはすんなりと完了。次は、Google App Engine SDK for Python(GoogleAppEngine-1.5.3.msi) をダウンロードして……

……インストールも完了。

[Run Launcher] とあるので、とりあえず起動してみると……

Warning: Prerequisites for App Engine development are missing!

A valid python binary must be available. In addition,
the App Engine SDK must be installed. Here are the current
values we found:

 python = None
 App Engine SDK root = C:\Program Files\Google\google_appengine

Please install the missing pieces and restart the launcher.
If these are installed but the Launcher failed to find them,
you can configure their location by editing Launcher preferences.

The Launcher preferences can be modified by selecting Edit > Preferences.

python が None だから path がわからなかったみたい。[Edit] > [Preferences] で設定を更新できるということらしい。

[OK] をクリックすると Warning 画面が閉じて [Google App Engine Launcher] が表示されたので [Edit] < [Preferences] で [Path Path:] に "C:\Python27\python.exe" を設定したら、一度閉じる。

もう一度 [Run Launcher] をクリックしてみたら Warning 画面が表示されないのでこれでいいみたい。

次は Hello, World!

Google App Engine はじめようかな?

ウェブアプリケーションが無料で作成できるということらしいので、有料のレンタルサーバ解約できるかな?と思って、はじめてみようと、とりあえず紹介のページをよんでみる。

Java と Python のどちらかを選べるみたいだけど、手軽さからするとスクリプト言語だし Python がよさそうかな?

全くしらない言語だから、まずは Python を覚えるところから。

ざっと「1. やる気を高めよう」~「8. エラーと例外」まで読んで、やる気が下がってきたからひとまず読書はここまでにして残りはあとで。

全く根拠はないけれど、なんとなく BASIC ににているかな?
なんだか懐かしい感じで親しみやすいきがする。

次は、Google App Engine の開発環境を導入してみてみる。

2011年8月15日月曜日

バッチファイルに潜む罠(4) - 改行を含む文字列の Echo その2

サーカムフレックス「^」で改行をエスケープした複数行の文字列の一行目を消そうとして More +1 したら、一行も出力されない。。。

Command Prompt
C:\>type newline.cmd
@Echo Off
Set STR=^

Some string including^

newline.
Setlocal ENABLEDELAYEDEXPANSION
Echo.!STR! | More +1
Endlocal

C:\>newline.cmd


C:\>

ファイルへリダイレクトして確認したら、サーカムフレックス「^」でエスケープした改行は CRLF ではなくて LF。。。

Set 変数 | (command) を使うと……

Command Prompt
C:\>type newline.cmd
@Echo Off
Set STR=^

Some string including^

newline.
Set STR | More +1

C:\>newline.cmd
Some string including
newline.


C:\>

……成功するから、ほかのコマンドにリダイレクトするときは、バッチファイルでも遅延評価を使わないで
Set 変数名 | (command)
がいいみたい。

バッチファイルに潜む罠(3) - 改行を含む文字列の Echo

改行を含んだ文字列を Echo するには、改行をサーカムフレックスで「^」でエスケープすればよくて、

Command Prompt
C:\>echo. Some string including^
More?
More? newline.
 Some string including
newline.

C:\>

Set コマンドもうまくいく。

Command Prompt
C:\>Set STR=Some string including^
More?
More? newline.

C:\>Set STR
STR=Some string including
newline.

C:\>

でも、Set した変数を Echo すると……

Command Prompt
C:\>Echo.%STR%
Some string including

C:\>

1行目しか表示されない。遅延評価じゃないから 1行目しか表示されないのは分かるけど、2行目の newline. がエラーにならないので、デバッグしにくい。

対処

バッチファイルなら遅延評価(!変数!)が使えるけれど……

Command Prompt
C:\>type newline.cmd
@Echo Off
Set STR=Some string including^

newline.
Setlocal ENABLEDELAYEDEXPANSION
Echo.!STR!
Endlocal

C:\>newline.cmd
Some string including
newline.

C:\>

……コマンドプロンプトでは Setlocal が使えない。

とりあえず 1行目に余分な改行を追加して、使うとき More +1 で 1行目を削除でしのぐ。

Command Prompt
C:\>Set STR=^
More?
More? Some string including^
More?
More? newline.

C:\>Set STR | More +1
Some string including
newline.


C:\>

続き

2011年8月14日日曜日

バッチファイルに潜む罠(2) - Call :(label) の出力を他のコマンドにリダイレクトすると失敗する。

ファイルへのリダイレクトは問題ないけど……

Command Prompt
C:\>dir /b *.txt
aaa.txt
bbb.txt
ccc.txt

C:\>type call2file.cmd
@Echo Off

Call :ECHO_ARGS %*> args.log
Exit /B 0

:ECHO_ARGS
For %%i In (%*) Do Echo.%%~i
Exit /B 0

C:\>call2file.cmd *.txt

C:\>type args.log
aaa.txt
bbb.txt
ccc.txt

C:\>

コマンドへリダイレクトすると……

Command Prompt
C:\>type call2cmd.cmd
@Echo Off

Call :ECHO_ARGS %*| More
Exit /B 0

:ECHO_ARGS
For %%i In (%*) Do Echo.%%~i
Exit /B 0

C:\>call2cmd.cmd
バッチ スクリプト外でバッチ ラベルを呼び出すことはできません。


C:\>

失敗。。。

対処

考え中……

バッチファイルに潜む罠(1) - シェルはファイル名展開してくれない。

Command Prompt
C:\>dir /b *.txt
aaa.txt
bbb.txt
ccc.txt

C:\>type expansion.cmd
@Echo.%*

C:\>expansion.cmd *.txt
*.txt

C:\>

対処

For 文のファイル名展開機能を使う

Command Prompt
C:\>type expansion.cmd
@For %%i In (%*) Do @Echo.%%i

C:\>expansion.cmd *.txt
aaa.txt
bbb.txt
ccc.txt

C:\>

2011年8月12日金曜日

バッチファイルで which コマンド

which.cmd
@Echo Off
If "%1"=="" (
  Echo.Usage: %~nx0 COMMAND
  Echo.Write the full path of COMMAND^(s^) to standard output.
  Exit /b 0
)

For %%i In (%PATHEXT%) Do Call :EXIST_THEN_ECHO %1%%i && Exit /b 0
Echo.%~nx0: no %1 in (%PATH%)
Exit /b 1

:EXIST_THEN_ECHO
If Not Exist "%~1\" If Exist "%~1" Echo..\%~1& Exit /b 0
If Not "%~$PATH:1"=="" Echo.%~$PATH:1& Exit /b 0
Exit /b 1

IE8 や Firefox3 などの data スキーマに対応しているブラウザなら

参照

  • help call

修正履歴

  • カレントフォルダを先に確認 (2011.08.15)
    :EXIST_THEN_ECHO
    If Not "%~$PATH:1"=="" Echo.%~$PATH:1& Exit /b 0
    If Not Exist "%~1\" If Exist "%~1" Echo..\%~1& Exit /b 0

    :EXIST_THEN_ECHO
    If Not Exist "%~1\" If Exist "%~1" Echo..\%~1& Exit /b 0
    If Not "%~$PATH:1"=="" Echo.%~$PATH:1& Exit /b 0