今やりたいこと

WWW上にページを作って、そこにドメインでアクセスできて、24hで起動してて、それはHTML5Pythonなんかで遊べて、W3Cの最新技術やMozilla関係、Google なんたらアプスみたいなのとも遊べてて、Wikiみたいな機能も持ってて、とりあえず自由に自分のしたいこと書ける

そういう遊べるものが欲しいが、24hで起動しようと思ったら自鯖はまだ用意できてないし、自分が遊べるようなレンタルサーバーってあるんだろうか。まぁ、遊び方すらわかっていない状態なんだが。

とりあえず1から自由にやりたいので、自分のサーバーでやれたらなぁって思ってるんだけど、それだとドメイン周りで苦労するんじゃないかと予想。ルーター使って、家族と回線回線共用してるけどなんとかなるのか?

とりあえず独自ドメインを持つとして、それを自鯖でやると自分の回線に割り当てるわけだろう?そうするとルーター周りでどういう処理をすればいいのか、いまいちわからんのう。

遊び・開発はローカルでやって。ぶんまわさないような適度な外界との関わりはしおらしく借りた回線でやるってのが一般的な回答なんだろうか。

                                                                                                                      • -

後、Launchyで好きなこと自由にやれるようにPythonとかコンピューティングを上手くやっていきたいなぁって思った。

そうしてシミュレーション関係とか統計関係に入っていってみたい。

Learning to program - The Basics - Error Handling

A Brief History of Error Handling

VBScript周りはまぁ、わかったようなわからんようなで、VBScriptのソースの0でDevideしようとするとおそらくNullが返される?のかと思うんだけど、そうなってない感じ。その辺だけはまぁいいかなぁと。もしかしてアルファベットとか入れるとそのまま停止してしまうから、停止しないだけエラーハンドリングになってるということなのか?わからないけど、次に進もう。あぁ、おそらくそういうことだろうな。0でDevideするとNullをResultに入れて、Nullをそのまま表示しているわけじゃなくてそれだと使用するユーザに何が起こったかわからないから、"ERROR: Could not perform operation"と表示して伝えているわけか。
その他の詳しい挙動(エラーハンドリングの分岐あたり)はいまいち理解してないけど進もうVBScript特有のものだろうし、もし問題があったら戻ってきても理解できそうだ。VBScript固有のエラーハンドリングの分岐って思ってりゃなんとか大丈夫だと思うがはてどうだろう。

Error Handling in Python
Try/Catch
OK,着実に読んでいけば英語といえど問題ない。急がば回れ、早く成果を出したければ、早くコンピューティングの道を究めたければ極めたいほど、今のこの道を着実に頭を奴隷のごとく使い自由を得るのだ。
要はTry文のブロックの中でいつもどおりプログラムを動かして、そのTry文のいつもどおり動かしているプログラムの中でエラーが起きたらError Handling, Except Handlingすなわちおそらく例外処理に入る。それがexceptのブロックで、対応するエラーごとにそのブロックが実行・処理されるようだ。おそらく対応するエラーというのがどうなったらどういうエラーが出るというのはオフィシャルのドキュメントあたりに触れてあるのだろうが、Alan.Gauld氏はそこまで言及していないようだ。
except: というように、何も特定のエラータイプが示されていない場合は、tryブロック内で起こったあらゆるエラーをキャッチして、そのブロック内のことを実行させるようだ。

Note that an except statement with no specific error type will catch all error types not already handled. In general this is a bad idea, with the exception of the top level of your program where you may want to avoid presenting Python's fairly technical error messages to your users, you can use a general except statement to catch any uncaught errors and display a friendly "shutting down" type message.

最後のelseブロックについてはこのように記述がある。tryブロックが成功ならelseブロックが実行される。

If no errors are found in the try block then the final else block is executed although, in practice, this feature is rarely used.

Try/Finally
なかなか複雑なような気がするが、Try/exceptでエラーをキャッチする場合は、どのようなエラーをキャッチしたいかを知ってないといけないというか、まぁそんな感じで、というか、どのようなエラーをキャッチしたいか、どの部分でエラーをキャッチしたいか考えて使うって感じかなぁ。Try/Finallyの方はエラーが起こっても最終的にはFinallyにつなげるようにしたい場合に考えて設置する(ファイル開いた場合、プログラム終了時に常にファイルを閉じた状態にしたいとか)って感じか。

Generating Errors
これいまいちわからんけど、最初のソースの方は、モジュールでErrorのときにどうするか、またはErrorのときにモジュールに移動して云々するかのどっちかだと思うんだけど、どっちだろう。ちょっといまいちわからん。まぁ、実践例みたいなの出てくりゃわかるんだろうが。
二番目のソースのは大体わかった気がする、

Another use of the raise keyword is to propagate an error to a higher level in the program from within an except block. For example we may want to take some local action, log the error in a file say, but then allow the higher level program to decide what ultimate action to take. It looks like this:

とあるように、

except ZeroDivisionError:
logfile = open("errorlog.txt","w")
logfile.write("datum was 42\n")
logfile.close()
raise

でエラーログ記述したら、そこで終わりにしなくて、一つ上の階層のプログラムにそのエラーが起きた状態をどうするのか渡す、つまりそのまま動かすってことなんだろう。
だからエラーログを記述して、riseの後に、

except ZeroDivisionError:
print "You can't divide by zero, try another value"

が実行されている感じだ。

まぁ、こんな感じの理解でいいだろう。errorlog.txtをcatでみても、ちゃんとログられてるし。そういう感じで動いているんだと思う。

User Defined Exceptions

>>> raise SystemExit

なにこれかっこいい。Object Oriented Programmingについては専門の章があるようなのでそちらに期待する。というか、Pythonって確実にObject Oriented Programmingな言語なのねと最近気づきつつある。気づくの遅いか?でもWikipediaとかでさらっと流してたけど、そういうことなのかと事の重大さを理解しつつあるというか。オブジェクト指向言語ってなんか難解な感じを受けるけど大丈夫かなぁ。w今頃言うなwまぁ、Pythonは初心者向け言語とそこかしこで言われてるようだから大丈夫だと思うが、はやくきちんとしたPythonistaになりたいぜ。コード書いていくようになれば慣れてくるんだろうけどなぁ。早く慣れたいです。

JavaScript
Catching errors
なぜかこのソースコードFirefoxで実行できない。何故だ。まぁいい。どういう仕組みかはわかるから。あ、実行できた出来たwを最後に書いてないからだったwうん、実行結果も予想通り、問題ない。ていうか、Firefoxで見ているJavascriptにエラーがある場合ってどういう風にバグ取りすればいいんだろう。Firebugとかいう専用のアドオンがあることは知ってるけどそこまでじゃないばあいどこ見りゃいいんだ。

Raising errors
特に問題ないように思える。

さぁ、終わったぞ、終わったぞ終わったぞ!

* A simple game such as OXO or Hangman
* A basic database, maybe based on our address book, for storing details of your video, DVD or CD collection.
* A diary utility that will let you store important events or dates and, if you feel really keen, that automatically pops up a reminder.

どれも難しそうだなぁ。

Remember to keep checking the documentation, there will probably be quite a few tools that will make the job easier if you look for them. Also don't forget the power of the Python >>> prompt. Try things out there until you understand how they work then transfer that knowledge into your program - it's how the professionals do it! Most of all, have fun!

おっすおっす。なんかプログラミングはじまったなって感じでおもしろい。やっと俺The Basicsのコース終わったのかぁ。すげー。基礎終了ほっほい!基礎終了ほっほい!基礎終了ほっほい!※これはプログラムでリピートしてません手打ちです。

See you in the Advanced section :-)

Flask

とりあえずFlaskというやつが新しく出てきたみたいなんで試してみる。

あ、僕は右も左もわからないさっきPythonをはじめたばかりの初心者なんでこのページを見に来た人はオフィシャルにいきましょう。Warning!僕は今自分が何をやっているのかすらわかっていません。

Flask v0.1 documentationを読んでみる。

Foreword読みました。が、まずわかってません。とりあえず小規模でいいならFlask使えば?みたいな感じなので触れてみることに。ただ僕はその小規模で何をやるのかすらわかってないですが。むしろ何が出来るの?みたいな。でも入れちゃえみたいな。

Installation
とりあえず環境を構築するのにvirtualenvとかいうやつが今はやりらしくて、それを使ってその上にFlask入れてねみたいな感じなのでそうしてみる。

ただ、もちろんこんなことをしたのは初めてなので、ちゃんとインストールできるのか不安である。また、ルーターを通して接続しているのでちゃんとWeb Developmentなるものが出来るのかとても不安である。別に常時起動じゃなくてもいいんだけど。ローカルにはさすがにつなげるだろ。どんな環境でも。と思って進めてみる。何もかもが手探りである。何故進めようと思った俺。それはただ今これが一番面白そうだから、それだけに過ぎない。まぁ、そんなものでいいのさ。きっと。

$ su
$ easy_install virtualenv

easy_installじゃなくてpip使ってみればよかったなぁ。
いや、debianだし、おそらくこれもあるのかsudo apt-get install python-virtualenv
一応、スナップショットはとってるので、後から色々試してみようかな。

$ mkdir myproject
$ cd myproject
$ virtualenv env
New python executable in env/bin/python
Installing setuptools............done.

myprojectどこに作ればいいのかわからないけど、とりあえずhomeディレクトリ直下に作成んで移動して、普通にこれも通っちゃって気持ち悪いです。

source env/bin/activate

これやったらシェルプロンプトが気持ち悪い(env)付のに変わりました。

easy_install Flask

env環境にて、Flask導入のためJinja2とWerkzeugも落としているようです。Flaskインストール完了されたっぽいです。もう書いてあることそのままです。はい。さすが4月の10日だかに発表されてるだけはあるわ。最新ね。

Quickstart お、やっとはじめられます。
ちなみに(env)ってなってるenv環境(env環境と呼んでいいのかすら不明)だからかわかりませんが、.bashrcに記述したはずのaliasとか吹き飛んでる予感です。emacsemacs -nwが起動する気持ち悪いalias動作が出来なくなってました。

A Minimal Application
とりあえず今Emacsにてhello.py手打ち中。

python hello.py
* Running on http://localhost:5000/

もうほんとそのまま。Icewiesel(笑)で起動。Hello World!おう、こんにちは。
やっぱりWindows環境では起動しないようだ、VirtualBox限定のようだ。ルーター挟んでネットに接続してるからどうとか思ってたけど、localhostがなんちゃー知らんが、localhostさんには関係ないらしい、むしろwinから見れたらいいのに、そう出来ないあたり期待してたより見えてる範囲少なそうだな。つうか、VirtualBoxDebianさんからしか見えないのかむしろ。これは。まぁ、いいや、進もう。個人的にはHello World!見れたら早くも満足なんだけど。
後はど素人がどこまで進めるかな。

と思っていたら早くもコードの解説ですよ。勘弁してくだちぃ。どう見てもそれなりにPython学んだ人の為のドキュメントというかツールでした、本当にありがとうございました。

だが、断る。というか進んでみる。初めてこういう本格的なのにまじめに触れてるだけあって割りと楽しいような気がする。

1. first we imported the Flask class. An instance of this class will be our WSGI application.
2. next we create an instance of it. We pass it the name of the module / package. This is needed so that Flask knows where it should look for templates, static files and so on.
3. Then we use the route() decorator to tell Flask what URL should trigger our function.
4. The function then has a name which is also used to generate URLs to that particular function, and returns the message we want to display in the user’s browser.
5. Finally we use the run() function to run the local server with our application. The if __name__ == '__main__': makes sure the server only runs if the script is executed directly from the Python interpreter and not used as imported module.

とりあえずこれは、マジで何を言ってるのかわからねえが……、状態。

To stop the server, hit control-C.

ここだけ理解できるな。うん、ていうかこれサーバーなのか。ふーん状態。マジでうぜえな俺なんでFlaskとかいう新しいのをこの段階ではじめようとしているのだろうw

今気づいたけど、このドキュメント割と短い気がするな、何から何まで手助けってわけじゃなくてFlaskの動き方を説明するだけのきっちりしたドキュメントか。じゃあなおさらなんで俺勉強してんだw

Debug Mode

app.debug = True
app.run()

上のこれはもはやどこに書けばいいのかわからない状態。なので華麗にスルー。

app.run(debug=True)

こっちはさっき書いたソースの一番最後の括弧の中にdebug=Trueでそれっぽいモードで起動した。
んで、その後に一回Terminal閉じたんだけど、その後env環境にどうやって入るん?と思ったけど、さっき作ったmyprojectのディレクトリからsource env/bin/activateでenv環境に入れた。なるほどねぇ。

さっきから気になってるんだけどユーザの画面でmitsuhikoってあるけど、そのみつひこさんどうもTwitterとかで見る限り外人なのよね、どうしてだ。

debugモードには入ってないけど、まぁ、いつか勝手にバグ作って入ることになるだろうからスルーアウト。

次へ参る。

Routing
と思ってここでさっき作った、hello.pyを編集しようと思ったらsuで色々してたからmyprojectとかhello.pyとか全部root権限で作って一般ユーザには書き込み権限がないようになってしまってたwちょw

後学のためにこの辺の権限周りのところをきっちり学んでおくかのう。
というわけでFlaskはこの辺で終了wはやかったw

権限周り

chmod
ls -l

~/myproject$ ls -l
total 12
drwxr-xr-x 5 root root 4096 2010-04-17 17:05 env

  • rw-r--r-- 1 root root 160 2010-04-17 17:38 hello.py

drwxr-xr-x 3 root root 4096 2010-04-17 17:57 myproject

お、なんかnot in the sudoers fileで検索したらごろごろ関連情報が出てきたぞ。デフォルトだとroot以外sudo使えんのかwそらぁ、一般ユーザが使えないわけだわw

よし、この辺休みに学ぶとして、面白くなってきたかもしれない!コンピューティングとテクノロジーおもすれーになるまで到達したいぜ!

おし、I'm back!

ここを参考に、
http://kenno.wordpress.com/2009/01/27/howto-add-user-to-sudoers-list-in-debianubuntu/

su
visudo

して、自分の普段使っている一般ユーザ名、とALL=(ALL) ALLを書き加えてみた。

http://linux.kororo.jp/cont/intro/sudo.php
んでここを参考に、sudo tail /var/log/messages。できたー。というわけでsudoersファイルの設定変更できましたとさ。

これでもう一度Flask入れてみる。