08/06/09 20:54:37
>>500 ありがとうございます。
お礼が遅れてしまい申し訳ありません。
恐縮ですがもう少しお付き合いお願いします。
先日教えていただいた、
>>> args = '-n --help kwsk --lang=ja'.split(' ')
>>> getopt.getopt(args, 'n', ['help=', 'lang='])
をpythonで実行してみたところ、エラーが出ず、
([('-n', ''), ('--help', 'kwsk'), ('--lang', 'ja')], [])
と正常に表示されました。
正常に動いていると判断し、このプログラムを以下のように記述したpyファイルを
用意し、実際にコマンドプロンプトで起動したときにコマンドプロンプトのヘルプを
表示できるか確認したのですが、無反応でプログラムが終了してしまいます。
ファイル名:ex.py
# coding: utf-8
import getopt, sys
args = '-n --help kwsk --lang=ja'.split(' ')
getopt.getopt(args,'n',['help=','lang='])
考えられる引数を入力してみたのですが反応がなく、このプログラムを進めていただく前に、教えてもらった方法でもやってみたのですが
ヘルプの表示ができませんでした。
リファレンスのテストコードでgetoptの動きを確認してみたかったのですが、
こちらも起動しなかったため確認できませんでした。
コマンドプロンプトでこのファイルを起動し、コマンドプロンプトのファイルを起動するには、
プログラムのソースに何か加える必要があったのでしょうか?
それとも、コマンドプロンプトを使用するときに、何か特別な記述が必要だったのでしょうか?
アドバイスをよろしくお願いします。
547:デフォルトの名無しさん
08/06/09 21:30:31
「コマンドプロンプトのヘルプ」って、
C:\>cmd /?
のことだよな?普通
それに>>500とどう関係があるんだよ。
548:デフォルトの名無しさん
08/06/09 22:01:46
getopt.getoptの戻り値を使った処理を書かないと何も起こらないのは当然のような
URLリンク(www.python.jp)
549:デフォルトの名無しさん
08/06/09 23:00:33
対話型プロンプトだと戻り値と出力の区別が付かないからね
勘違いする初学者が出てきてもおかしくない
どこかのカンファレンスか何かで問題提起されてたらしいが
>>546
レス遅そうなのであなたが本当にやりたいことを確かめずに書くけど
myhelp.py:
import os, sys
os.system('help %s' % (' '.join(sys.argv[1:])))
実行例:
C:\> myhelp.py cd
現在のディレクトリを変更したり、ディレクトリ名を変更したりします。
[以下略]
550:デフォルトの名無しさん
08/06/10 01:45:45
解決しました
ほんとうにありがとうございました
551:デフォルトの名無しさん
08/06/10 01:53:33
どうみても(ry
552:デフォルトの名無しさん
08/06/10 02:19:09
mailto:cookiejar
553:デフォルトの名無しさん
08/06/10 04:14:00
あぁ俺か
時間帯でばれるもんなんだな
これから気をつける
554:デフォルトの名無しさん
08/06/11 19:05:34
はじめまして、Pythonを勉強してみようと考えているものです。
おすすめサイト、書籍などお教えください。
・やりたいこと
TDDでWebアプリ開発
・プログラミング暦
Delphi 3年(趣味のフリーソフト作成)
Java 1年(資格取得のみ、実務経験なし)
PHP 4年(Webアプリ構築)
よろしくお願いします。
555:デフォルトの名無しさん
08/06/11 19:55:44
っamazon.com
556:デフォルトの名無しさん
08/06/11 19:59:56
つgoogle.com
557:デフォルトの名無しさん
08/06/11 20:01:51
つyahoo.com
558:デフォルトの名無しさん
08/06/11 20:02:05
スレリンク(tech板:5番)
559:デフォルトの名無しさん
08/06/11 20:02:27
URLリンク(wiki.python.org)
560:デフォルトの名無しさん
08/06/11 20:04:14
URLリンク(www.python.jp)
561:デフォルトの名無しさん
08/06/12 05:09:29
グラフ処理をPythonでやりたいんだけど
いいライブラリーありませんか?
boostのBGLみたいなものを考えています。
562:デフォルトの名無しさん
08/06/12 05:13:55
graphviz
563:デフォルトの名無しさん
08/06/12 09:21:07
ちょ、それは可視化なんで。
564:デフォルトの名無しさん
08/06/12 10:15:40
>558-560
ありがとう、一通り目を通してみます。
ひきつづきTDDでWebアプリについて解説してるページやチュートリアルがあったら教えてください。
英語でも可。
565:デフォルトの名無しさん
08/06/12 12:45:52
>>561
networkx
566:デフォルトの名無しさん
08/06/12 19:09:52
>>565
すげぇ,マジTHX
567:デフォルトの名無しさん
08/06/12 19:36:29
>>564
いちいち人に聞くんじゃないよ
素人じゃあるまいし
568:デフォルトの名無しさん
08/06/14 11:16:08
>>567
くだすれなんだから初心者にやさしくしようぜ。
569:デフォルトの名無しさん
08/06/14 11:30:18
初心者になら回答者もやさしくするだろうけど
Delphi3年Java1年PHP4年でテストドリブンだぜ
>>567がイラっとくるのもわかるわ
570:デフォルトの名無しさん
08/06/14 13:59:29
これからプログラミングを勉強しようと思って調べたところ、
pythonが初心者向きだと聞きました。
C言語か、Pythonかで迷っているんですが、どちらがいいでしょうか
571:デフォルトの名無しさん
08/06/14 14:00:45
Pythonがいいです。Cはその後でも遅くありません
572:デフォルトの名無しさん
08/06/14 14:02:17
C言語でプログラミングを始める人は多いから
人や資料が多いという点でCの方がいいような
Pythonの対話モードはとっかかりはいいと思うけど
573:デフォルトの名無しさん
08/06/14 14:08:20
>>568
何か「やりたいけどわかりません。やってみたけど出来ません」みたいな質問ならわかるが、
情報欲しいだけの「ググレカス」で済む質問には冷たくてもいいんじゃないの?
574:デフォルトの名無しさん
08/06/14 14:16:03
>>571
>>572
わかりました。
まずPythonを触ってみることからはじめてみます。
やはり、プログラミング言語には自分に合う、合わないような相性はあるんでしょうか?
575:デフォルトの名無しさん
08/06/14 14:41:43
>>574
そのあたりは本当に人それぞれ
具体的な目標がなくただ漠然とプログラミングの勉強を
してみたいというのならPythonでまったく問題ない
教育用言語としても使われているぐらいだし
逆に具体的な動機があるのなら話は別
(掲示板CGIを作りたい、Windowsアプリを作りたい、etc.)
そういう動機があるのなら前もって言っておいたほうが
アドバイスする側もしやすいと思うよ
576:デフォルトの名無しさん
08/06/14 14:52:30
>>575
なるほど。
動機としては、Windowsアプリを作りたいが一番近いかもしれません。
ただ、今は漠然とそう考えてるだけで具体的にこういうのというのはないです。
Delphiという選択肢もあると聞いたんですが、こっちはPython以上に資料が少ないということらしいので・・・。
577:デフォルトの名無しさん
08/06/14 16:25:01
漠然と、ぐらいならPythonでOK
基本は他の言語でも通用するからやっといて無駄にはならないよ
578:デフォルトの名無しさん
08/06/14 16:25:02
WindowsのGUIならC#,Delphi,VBあたりの方が
とっつきやすいと思う
579:デフォルトの名無しさん
08/06/14 21:00:32
初学者のとっては言語そのものよりも周辺のライブラリや開発環境が
とっつきやすいかどうかが重要だよな。
580:デフォルトの名無しさん
08/06/15 09:22:50
ウィザードでなんでも出来てしまうと
初心者的にはすごいんだろうね
581:デフォルトの名無しさん
08/06/15 10:12:16
プログラミングってソースコードや環境を可能な限り把握する行為だと思うから
いきなりIDE使うのはあまりオススメしたくはない
582:デフォルトの名無しさん
08/06/15 10:36:25
楽なほうからやらせるほうがいいに決まってんだろ。
いきなり苦行を科してどうするんだよ。
583:デフォルトの名無しさん
08/06/15 10:41:45
これだからゆとりは...
584:デフォルトの名無しさん
08/06/15 10:44:24
近寄らないでください。老臭がします。
585:デフォルトの名無しさん
08/06/15 13:29:16
最近はExcelで仕様書書くだけで
コード吐いてプログラム完成するんですよね
586:デフォルトの名無しさん
08/06/15 16:38:14
これだからゆとりは...
587:デフォルトの名無しさん
08/06/15 17:49:14
IDE が進化して人間に敵対しはじめるとか
588:デフォルトの名無しさん
08/06/15 22:57:03
スカイネットですね、わかります
589:デフォルトの名無しさん
08/06/16 00:29:13
スカイフィッシュはどうしたんだろうね。
590:デフォルトの名無しさん
08/06/16 01:00:45
乱獲しすぎて……ごめん
591:デフォルトの名無しさん
08/06/16 15:29:19
とりあえずCでセグフォいっぱい出して、
なぜか考えるんだ。そしてメモリ管理って
なんて難しいんだろうって悩むんだ。
そうすれば最近のどんな言語であっても
ある機能がなぜ実装されているのか理解できるだろう。
592:デフォルトの名無しさん
08/06/16 16:48:22
そうかなあ・・・
593:デフォルトの名無しさん
08/06/16 22:07:31
「最初は楽しまくってプログラミングの楽しさを満喫しようよ」派
「コマンドラインで基礎からみっちりやれGUIデザイナとかIDEなんて十年早いんじゃ」派
594:デフォルトの名無しさん
08/06/16 22:42:35
python使うのに後者はないだろ・・
595:デフォルトの名無しさん
08/06/16 23:00:40
URLリンク(pyukiwiki.sourceforge.jp)
wktkしてリンク先を眺めたら
そこにはperlがありました・・・
日本人プロダクトなyukiwikiはどこにあるのでしょうか?
596:デフォルトの名無しさん
08/06/16 23:12:20
URLリンク(www.hyuki.com)
597:デフォルトの名無しさん
08/06/17 07:54:45
ここは低レベルな質問でもOKなんでしょうか?
Windows環境上で、Pythonを勉強中なのですが、エディタの選択で悩んでいます
a. emacs系のエディタに慣れ過ぎてしまったので、キー操作にemacs系のソレが用意されていること
b. eclipseに慣れてしまったので、予約語、変数名、メソッド名、ファイル内に出現した単語を補完してくれる機能があること
c. コメントを日本語で書きたいので、utf-8n でファイルを開いたり保存したりできるもの
d. 起動が重いと学習意欲が削がれるので、起動が比較的早いもの
e. 無料で使えること
こういった条件を満たせるものを探しているのですが、これがなかなか見つかりません
「emacs慣れてるならemacs使えや」と言われそうですが、Meadowの起動は遅いですし予約語補完もいま一つですし(ファイル内に出現した単語の補完は楽なんですが…)
「eclipse+PyDevはどや」と言ってもeclipseは起動が糞重くて辟易しますしそもそもPyDevって有償じゃないのでしょうか以前入れたら広告が頻繁に出てきて以下略
何かいいエディタはないでしょうか
598:デフォルトの名無しさん
08/06/17 10:51:14
Meadowを自動起動にして終了させなければいいんだ。
599:デフォルトの名無しさん
08/06/17 11:00:17
Komodoもいいかもね。
600:デフォルトの名無しさん
08/06/17 12:16:09
xyzzy
601:デフォルトの名無しさん
08/06/18 00:34:47
スクリプト組むのにeclipseって
鶏を割くのにナパーム弾を使うみたいだな
602:デフォルトの名無しさん
08/06/18 00:53:02
ナパーム弾で鶏は割けないと思います!><
603:デフォルトの名無しさん
08/06/18 00:54:21
>>597
何も考えずに付属の IDLE (Python GUI) を使う。
604:デフォルトの名無しさん
08/06/18 06:13:37
ちょっと前にIDLEをエディタとして使ってみたけど、ウインドウの分割が
できないのがキツかったな。
俺は次はPyPEを試してみる。
日本語の編集に難ありだけど、全体的には使いやすそう。
605:デフォルトの名無しさん
08/06/18 11:05:43
>>555-557
".com"のところがみそなんだろうなあ
606:デフォルトの名無しさん
08/06/18 11:24:07
>>570の便乗質問なんだけど
OSやPCの知識を深く得る意味でLinux環境でgccとpythonを勉強するのは、どうなんでしょうか?
C1本に絞ったほうがいいんですかね
勉強法のひとつとして
実装してみたい簡単なプログラムをPythonで書いて、Cでも実装してみる
こういうのってどうなんだろう
自分のイメージとしてはCはgdbとかを使いながら、ソースコードを読めるレベルになりたいですんよね
607:デフォルトの名無しさん
08/06/18 11:36:30
それならC一本でいい気もする
そういうアプローチ(OSやPCの知識を深く得る)から書かれている本として
『ふつうのLinuxプログラミング』『Unix/Linuxプログラミング 理論と実践』などが挙げられる
読んでみるといいんじゃないだろうか
まあ俺はHelloWorldしか書けないわけだが
608:デフォルトの名無しさん
08/06/18 13:31:48
>>598-600
アドバイス、㌧です
Meadowを起動したら最後、永遠に終了させない、という発想はありませんでした…
メール閲覧もWebサイト閲覧もすべてMeadow/NTEmacsでやるぜ!という人には十分アリな選択肢なのかもしれないですね…
しかしまさかPythonを勉強したいがためだけに、日常作業の全てをemacsに委ねるべく人体改造する羽目になるとは…
Komod Edit はいい感じですね。実は今現在、それで騙し騙しやってるところだったりします
emacs系のキーマップもありますし、使用中の動作も比較的軽いですし
ですが、起動がecipse並みに遅いのと、複数のファイルを共有した単語補完ができないのが厳しいところです
別ファイルのタブに移動してメソッド名をコピーして元タブに戻って貼り付け、が面倒くさい…
xyzzyは常用エディタだったりするんですが、py-mode がどうも非力な印象で…
また、新規ファイルを作成すると、SJISになってしまうあたりも、未だ自力で解決できなくてKomodoに逃げてる状態だったりします
emacs系のキーマップにこだわるから選択肢が少なくなるんですかね。XKeymacsの導入を前提にして範囲を広げたほうがいいのかな
609:デフォルトの名無しさん
08/06/18 13:35:26
>>603
IDLEはキーマップ?がWindowsのソレじゃないですか…?
Windowsアプリのキーマップでいいなら、PyScripterその他でええやんということにもなりそうな気がします
でもたしかに、「勉強用」と割り切るなら、最初から標準で入ってるIDLEを、というのは実に定番ですな…
610:デフォルトの名無しさん
08/06/18 13:38:48
>>601
非常に激しく、強く、熱く、胸を張って、声を高らかに、同意します
Lightweight Language といいながら全然Lightweightじゃねえ気がします>eclipseでLL
611:606
08/06/18 14:46:29
>>607
C一本か~
なんかやりたいくないなあ~w
612:デフォルトの名無しさん
08/06/18 14:48:50
Cの基本だけなら直ぐ終わるよ
613:デフォルトの名無しさん
08/06/18 14:52:12
そうだね、プロテインだね。
614:デフォルトの名無しさん
08/06/19 07:21:08
基本、コマンドラインからつかうツールを使っているんだけど、
たとえばオプションをGUIで指定したり実行結果のテキストを
スクロール可能な形で表示したいと思うこともある。
wxPython とか大げさ(というか使い方わかんね)だとおもうんだけど、
かといって curses みたいなのよりはちょっとGUIっぽくあってほしい。
やっぱりそういう用途だと Tkinter がベストな解?
1)コマンドラインオプションの代わりにGUIでオプション指定した
2)実行結果をスクロール可能な形で表示したい
3)できればオプションのデフォルト値とか保存したい
(これはUIとは何の関係もない話か・・・)
615:デフォルトの名無しさん
08/06/19 13:30:11
集合型ってのはデータ交換ではあまり使われないんでしょうか?
たとえば JSON や YAML にも集合型というのは定義されてません。
所詮順序つきのものがあれば十分だからということなんでしょうか?
616:デフォルトの名無しさん
08/06/19 21:15:25
んなこと言ったら、リストで十分なのにタプルがあるわけだし・・・
617:デフォルトの名無しさん
08/06/19 21:53:54
でもタプルは変更不可なわけで
618:デフォルトの名無しさん
08/06/19 23:08:29
だがそれがいい
619:デフォルトの名無しさん
08/06/20 00:00:07
>>608
renpy 付属の Scite が F5 でスクリプト実行できて便利。
なんとなく『Perlをはじめよう』いうソフトと似てる
URLリンク(homepage3.nifty.com)
1. Scite で F5(go), Shift+F5(clear),
ん、Shift+F8(parameter)とかあるな…なんですかそれ…使い方不明…orz
620:619(レス番間違えた…orz)
08/06/20 00:01:27
>>614
2. Scintilla(Sciteのエンジン)をwrapしたwxpython製のPyAlamode
を拡張する(インテリセンス補完)
URLリンク(www.ibm.com) (作者ページ)
3. 男だったら補完も折り畳みも要りません(TT)
ベースはGAEで、SymPy-live や PyAMF を追いかける茨の道…
URLリンク(live.sympy.org)
URLリンク(pyamf.appspot.com)
4. Firefox + crunchy も楽しそげ
URLリンク(code.google.com)
5. pylons + 黒魔術
URLリンク(codepad.org)
621:デフォルトの名無しさん
08/06/20 07:26:04
>>620 THX いろいろあるもんだなぁ。
622:デフォルトの名無しさん
08/06/20 07:35:54
順番に見てたら結構ウェブのインターフェイスのものが多いなぁ。
ローカルのファイルシステム上で使うCUIツール群の
フロントエンドとして使えるものなのかなぁ。
623:デフォルトの名無しさん
08/06/20 07:41:14
1) 2) の SciTe がらみのやり方がローカル用途には何となくよさそう
な気もするけど,3) 4) 5) も気になるところ.
624:デフォルトの名無しさん
08/06/20 07:42:08
って,GAEベースって書いてあるじゃん・・・不勉強すぐる俺
625:デフォルトの名無しさん
08/06/20 07:49:55
しかしさぁ,ローカルのファイルシステム上で動くアプリケーションの
フロントエンド部分だけブラウザの描画エンジンを使えれば
便利だと思うのに,なかなかうまくいかないもんだね…
626:デフォルトの名無しさん
08/06/20 08:32:29
os.systemでコマンドプロンプトに出力される内容ををpythonで表示する方法は無いですか?
ご返答をよろしくお願い致します。
627:デフォルトの名無しさん
08/06/20 09:34:38
popen3かな
628:デフォルトの名無しさん
08/06/20 09:58:31
subprocess.Popen
629:614
08/06/20 10:12:24
いろいろ教えてもらったのに結局こんな感じのものに落ち着きそうな予感。
URLリンク(inforno.net)
630:614
08/06/20 15:05:22
あの、Tkinter で親のウィジェットが破壊されたとき
子のウィジェットにはイベントで通知されるんでしょうか?
そのイベントは bind でどうやって捕捉すればいいんでしょうか?
631:デフォルトの名無しさん
08/06/20 16:26:39
>>630
親は WM_DELETE_WINDOW を捕捉すればいいね。
子は destroy() を継承するしかない希ガス。
ただし※印の親の destroy() を明示的に呼ばないと子の destroy() も呼ばれないみたい。
import Tkinter as Tk
def callback():
print "root window deleted"
root.quit()
class MyLabel(Tk.Label):
def destroy(self):
Tk.Label.destroy(self)
print "label destroyed"
root = Tk.Tk()
label = MyLabel(root, text="Test")
label.pack()
root.protocol("WM_DELETE_WINDOW", callback)
root.mainloop()
root.destroy() # ※
それにしても、子ウィジェットの破壊なんてどうでもいい気がするんだけど何ゆえ通知してほしいの?
アプリ自体の後始末は終了前にやればいいし・・・。
632:614
08/06/20 16:37:19
Tkinter.Entry への入力を別スレッドでの処理に
使ってるんだけど、ウィジェットがなくなっちゃうと
ず~っと待ちっぱなしでどうしようもなくなるなぁ、って
633:デフォルトの名無しさん
08/06/20 18:00:26
mod_pythonについて教えてください。自分なりに調べた結果
例えが悪いかもしれませんがC言語で言うと、
本体exe=mod_python
ダイナミックリンクライブラリdll=pythonスクリプト
という感じなのかなと思いました。
そこで、mod_python上で動かすpythonスクリプトにはエントリポイント的なモノ(関数)
を記述し、その中に処理させたい内容を記述すれば良いのでしょうか?
634:デフォルトの名無しさん
08/06/20 18:33:41
>>632
ああ、>>629のコードのことね。
それは子ウィジェットの破壊とは別の問題だと思うよ。
Entry を殺してもスレッドは死なないからね。
スレッドは別スレッドから殺すのではなく自ら終了するよう仕向けるのが基本です。
629のコードでいうと、例えば何も入力せずにエンターを押したら終了ということにして、
1. GUIConsole::readline() で result が空文字列だったら self.quit() してから return result する。
2. 別スレッド側で EOFError が起こるのでそれを捕まえてループを抜ける。
3. guiconsole.start() の終わりで別スレッドを join する(別スレッド終了を待つ)。
というようなことをするのが筋。
親スレッドが終了したとき子スレッドがどうなるかは環境依存だから、
面倒だけどキチンとやるのが無難です。
629のコードでは低レベルな thread モジュールを使ってるから join が無いね。
代わりに threading モジュールを使うように直すといいと思う。
635:デフォルトの名無しさん
08/06/21 08:09:58
>>633 っ URLリンク(www.python.jp)
636:デフォルトの名無しさん
08/06/21 09:27:08
>>633 はもしかして mod_python の mod_ を python のモジュールと
勘違いしているのではないか? mod_python が apache のモジュール
のことだと認識した上での質問なんだろうか。
637:デフォルトの名無しさん
08/06/21 14:24:16
>>636
そのことは、わかっていると思います。いや、分かってないのか…
apacheのモジュールとしてmod_pythonを読み込むことで、
apache上にpythonインタプリタが常駐するようになる。
ということではないのですか?
638:デフォルトの名無しさん
08/06/21 14:59:38
>>626です。ご無沙汰しておりました。
>>627さん,>>628さんありがとうございます。
popenを用いても出来るということがわかったのですが、まだ結果の出力方法が
分かりません。恐縮ですが、もう一度助けてください。
たとえばos.popen("help help")もしくはsubprocess.Popen("help help")と入力した場合に、
以下のようなコマンドプロンプトの"help"についてのヘルプがpython上で出力されれば
望ましいと考えています。
---
Windows コマンドのヘルプ情報を提供します。
HELP [comand]
comamand - このコマンドのヘルプ情報を表示します
---
前回教えていただいた、方法で試してみたのですが表示させることができません。
何が足りないのか教えて頂ければ助かります。
639:デフォルトの名無しさん
08/06/21 15:38:47
>>637
いやすまん、失礼した、そのとおりです。
640:デフォルトの名無しさん
08/06/21 16:27:15
>>639
いや、俺もあまりドキュメントちゃんと読んでなかった。あとで読み直したら
何となくだけど使い方は分かってきた。努力不足でした。すみません
641:デフォルトの名無しさん
08/06/21 17:02:59
>>> import os
>>> print os.popen("help help").read()
Windows XP コマンドのヘルプ情報を提供します。
HELP [command]
command - このコマンドのヘルプ情報を表示します。
>>>
642:デフォルトの名無しさん
08/06/21 17:34:02
何かをPythonで計算してる時に現在どのくらいメモリを使ってるか、
正確な値をバイト単位で知りたいんですが知る方法はないですか?
643:デフォルトの名無しさん
08/06/21 18:36:45
環境依存だと思います。
644:デフォルトの名無しさん
08/06/22 01:01:33
タスク一覧見れば分かる環境が多い
645:デフォルトの名無しさん
08/06/22 01:03:32
明らかにメモリ喰うだろうと思って書いたプログラムが大してメモリ使ってなくて
単純なループだけで大丈夫だと思ってた方が数百MB使っててどんどん増えてて藁
646:デフォルトの名無しさん
08/06/22 17:57:34
>>645
それで、結論は?
647:デフォルトの名無しさん
08/06/22 23:40:16
はじめてみたんですが、日本語の情報が少なくて・・・
IDLEを使って色々試しているんですが、対話モードの時って日本語が出力できないのはどうにかできるんでしょうか?
648:デフォルトの名無しさん
08/06/23 00:07:58
できますよ
649:デフォルトの名無しさん
08/06/23 00:08:37
>>647
ここ行って見たら?
URLリンク(python.rdy.jp)
650:デフォルトの名無しさん
08/06/23 01:01:18
>>649
最初から墓場にご案内ですか?(wwwwwwwwwww
651:デフォルトの名無しさん
08/06/23 02:45:17
C:\cgi-bin>python -m CGIHTTPServer
Serving HTTP on 0.0.0.0 port 8000 ...
URLリンク(localhost:8000) にアクセスしても
ソースコードが表示されるだけで実行できません。
#! c:\\Python25\\python.exe
import os
print 'Content-type: text/plain\n\n'
for key in os.environ:
print '%s: %s' % (key, os.environ[key])
どうして動かないのでしょうか?
652:デフォルトの名無しさん
08/06/23 02:51:21
C:\>python -m CGIHTTPServer
Serving HTTP on 0.0.0.0 port 8000 ...
***-PC - - [23/Jun/2008 02:46:34] "GET / HTTP/1.1" 200 -
***-PC - - [23/Jun/2008 02:46:41] code 403, message CGI script is not a plain file ('/cgi-bin/')
***-PC - - [23/Jun/2008 02:46:41] "GET /cgi-bin/ HTTP/1.1" 403 -
2. cd c:\ して python -m CGIHTTPServer する
3. ブラウザで localhost:8000/cgi-bin/env.py にアクセス
環境変数がずらっと表示されたら成功
コマンドプロンプトの起動パスを変更して立ち上げてみたところ
403 not found...とかなって何も表示されませんでした… orz
653:デフォルトの名無しさん
08/06/23 03:38:17
>>652
ログを見る限り、
URLリンク(localhost:8000)
にアクセスしたことになってるが?
654:デフォルトの名無しさん
08/06/23 08:27:50
おぉ、こんな機能があるのか。恐ろしく便利だな。
でもこれ、CGIが実行されたときのカレントディレクトリが、
pythonを起動したときのディレクトリのままだね。
カレントディレクトリを変更してから呼んで欲しいな。
655:デフォルトの名無しさん
08/06/23 11:34:10
>>653
URLリンク(localhost:8000) を直接叩いたら
うまくいきました ><
>>651でディレクトリ一覧が表示されていたのでそのノリで
そこから辿ってゆけるかなとか思ったのが敗因でした...orz
2. cd c:\ して python -m CGIHTTPServer
3. URLリンク(localhost:8000) に直接アクセスする
*拡張子は.pyでないと駄目。
*URLリンク(localhost:8000) にアクセスしても plain file ではないと言われ、403 error。
656:デフォルトの名無しさん
08/06/23 20:25:01
> *拡張子は.pyでないと駄目。
> *URLリンク(localhost:8000) にアクセスしても plain file ではないと言われ、403 error。
微笑ましいなw
657:デフォルトの名無しさん
08/06/24 04:35:18
>>650
墓場についてkwsk
658:デフォルトの名無しさん
08/06/24 09:46:10
650じゃないけど、あまり更新がないとか、あやしいリンク貼りまくられて荒らされるとかかな?
659:デフォルトの名無しさん
08/06/24 10:05:12
650じゃないけど、情報がいい加減とか、
以前サンプルコードにグローバル関数と同名の変数名が使ってあって
Python知らねえくせにまとめWikiかよお目出てえなとか、
リンク晒してるのはどう見ても関係者だろこれとか、
そんな暇があったら更新しろよハゲとかじゃないかな?
660:デフォルトの名無しさん
08/06/24 11:30:46
ぱいがめ翻訳サイトまだ?
だから廃れるんだよ
広めたいって人はいないのか
661:デフォルトの名無しさん
08/06/24 12:04:17
>>659
wikiなんだから間違いに気付いたら、みんなで編集していけば良いだけじゃないの?
662:デフォルトの名無しさん
08/06/24 13:37:42
墓場に大切なものを隠せば見つかりにくいというわけですね、分かります。
663:デフォルトの名無しさん
08/06/24 15:33:22
Python ではファイル=モジュールという単位になっていますが,
1ファイル=1クラスというコーディングスタイルは推奨
されていないのでしょうか?
a.py で class A を定義 → クラス a.A が定義される
b.py で class B を定義 → クラス b.B が定義される
名前空間まで別になってしまいます.
C++ でプログラムを組んでいてずっと1ファイル=1クラス
のスタイルでやってきたのですが・・・・
同じ名前空間に入れるすべてのクラスは同じファイルに
入れなくてはならないのでしょうか?
664:デフォルトの名無しさん
08/06/24 15:47:17
>>661
中立的な言葉で書かれていない文章をお前は編集する気になるか?
665:デフォルトの名無しさん
08/06/24 15:55:59
>>663
a.pyで from b import * とでもしておけばいい。
極端な例がmatplotlibのpylab.pyで、このファイルにはimportしか書いてない。
まぁ、細かいファイルは1つのファイルにまとめた方がいいと思うよ。
例外クラスまで1ファイル1クラスにしてるの?
666:デフォルトの名無しさん
08/06/24 15:58:54
>>663
1ファイル=1クラスは特に推奨はされていない。
Pythonコードはどのみちクラスからだけ成り立っているわけではないしな。
いくつかのモジュールをひとまとめにしたいときは、Pythonではパッケージを
使う。
パッケージの初期化ファイル__init__.pyでモジュールからエクスポートしたい
シンボルをimportしてやれば、あんたのやりたいことは実現できるはずだ。
667:デフォルトの名無しさん
08/06/24 16:30:44
若いのに中立ですか。
668:デフォルトの名無しさん
08/06/24 17:03:35
>>664
編集して普通の文章にするんだ
どうせ管理人すら放置してるんだから構わんだろ
どんどんやっちまえYO!!
669:デフォルトの名無しさん
08/06/24 17:32:26
翻訳は人任せとしても、wikiは自分の好きに書き換えればいいだろ
670:デフォルトの名無しさん
08/06/24 17:37:40
ゴミはゴミ箱に。
宝石は宝石箱に。
671:デフォルトの名無しさん
08/06/24 18:16:01
なんで翻訳の話がでてくるの?
672:デフォルトの名無しさん
08/06/24 19:53:21
__init__.py に import を書くというのは
なにかまずいことを引き起こすでしょうか?
673:デフォルトの名無しさん
08/06/24 20:01:24
>>672
全然。
674:デフォルトの名無しさん
08/06/24 20:13:10
>>672
ごく普通
675:デフォルトの名無しさん
08/06/24 21:33:48
>>672
アフガニスタンではよくあること
676:デフォルトの名無しさん
08/06/25 00:44:08
>>672
いっしょに__all__も定義すれば綺麗なPythonパッケージ
677:デフォルトの名無しさん
08/06/25 07:55:11
>>665
すっきりうんこでました
ありがとうございました
678:デフォルトの名無しさん
08/06/28 19:00:35
[1,2]の要素のそれぞれを2倍して[2,4]にする
っていうのはどうやればいいんでしょうか?
679:デフォルトの名無しさん
08/06/28 19:04:07
>>678
[i * 2 for i in [1, 2]]
もしくは
map(lambda x: x * 2, [1, 2])
680:デフォルトの名無しさん
08/06/28 19:06:20
ありがとうございます。
リスト内包表記ってそうやって使うんですね。
681:デフォルトの名無しさん
08/06/28 19:36:07
>>679
それは
> [1,2]の要素のそれぞれを2倍して[2,4]にする
ではなく、新しいリストを生成しているのでは。
x = [1,2]
for i in range(0,len(x)):
x[i] *= 2
682:デフォルトの名無しさん
08/06/29 08:48:37
>>681
> ではなく、新しいリストを生成しているのでは。
だったら
x = [1, 2]
x = [i * 2 for i in x]
ってやれば同じ
683:デフォルトの名無しさん
08/06/29 09:23:29
>>681はインプレースで配列を変更していて
>>682は配列を新しく生成してその配列を参照しているように見える
これが勘違いでなければ
両者は返す結果こそ同じだが動作は別物じゃないか
684:デフォルトの名無しさん
08/06/29 10:04:37
>>683
それで合ってる。
inplaceにしたければ、スライス代入を使えばいい。
x[:] = (i * 2 for i in x)
685:683
08/06/29 10:55:58
>>684
なるほど。ジェネレータ式も勉強になったよ
686:デフォルトの名無しさん
08/06/29 11:41:39
from timeit import Timer
print Timer('x=[1,2]; x=[i*2 for i in x]').timeit()
# py3k: 2.0419500243746063
# py25: 1.5092940583230501
print Timer('x=[1,2]; x[:]=(i*2 for i in x)').timeit()
# py3k: 5.2120230364473699
# py25: 7.4014716954249735
スライス代入のほうがコストが高いんだろうか…
ベンチの取り方が間違ってるだけなのかもしれんけど (汗
687:デフォルトの名無しさん
08/06/29 11:44:13
>>684
それだ
ありがとう
688:デフォルトの名無しさん
08/06/29 11:46:37
>>686
最終的に代入になってても途中で余分にリスト作ってない?
689:デフォルトの名無しさん
08/06/29 12:03:13
>>686
普通の代入 x = よりはスライス代入のほうが遅いけど
それ以上にジェネレータの実行速度が遅いんだと思うよ
ジェネレータで節約できるのはメモリが主だろうし
690:デフォルトの名無しさん
08/06/29 13:05:03
Python って末尾再帰の最適化はサポートされていないのでしょうか?
691:デフォルトの名無しさん
08/06/29 13:17:51
されてますん。
692:デフォルトの名無しさん
08/06/29 13:42:00
>>691 どっちなんだ~
-------------
def rec(x = 0):
if (x<1000000000):
rec(x+1)
rec()
------------
RuntimeError: maximum recursion depth exceeded
693:デフォルトの名無しさん
08/06/29 13:52:29
うん、されてないと思う。
def fib(n):
def fib_iter(a, b, m):
return a if (m == n) else fib_iter(b, a + b, m + 1)
return fib_iter(0, 1, 0)
おれの環境ではfib(1000)ぐらいでコケる。
ので、Pythonではiterative processは
素直にループやiteratorで書けということだと思った。
694:デフォルトの名無しさん
08/06/29 13:53:36
単にトレースが取れるようにするために何か制限しているだけなのかなぁ。
わからん、わからん、わからんちん。
しかし単純にループにするだけならトレースとかそもそもいらないのに。
sys.setrecursionlimit() を勝手にいじるのもどうかと思うし・・・
695:デフォルトの名無しさん
08/06/29 13:56:07
ううむ、つまり、「されてない」が結論だということっすね。
C++ + Boost Graph Library で大規模なグラフ処理してたんだけど、
Python + networkx でやってみようと思ってハマってます。
末尾再帰最適化を前提としたコードかいてたから、
移植のときにアタマをきりかえるのがなんとも・・・
696:デフォルトの名無しさん
08/06/29 13:57:05
Stackless Pythonというのを調べてみると良いかも。
ただ、Cのハードウェアスタックを使わないというだけなので、
末尾再帰をgotoに最適化してくれるかどうかは知らない。
697:デフォルトの名無しさん
08/06/29 13:57:49
URLリンク(mail.python.org)
698:デフォルトの名無しさん
08/06/29 13:58:28
>>697
さすがに2003年だからな
今でもだめなのか orz
699:デフォルトの名無しさん
08/06/29 14:05:28
sys.setrecursionlimit(10000)
でやってみたけど、7000ちょっとの再帰で今度は正真正銘の
MemoryError: stack overflow
が出た
Python赤玉。俺涙目。
700:デフォルトの名無しさん
08/06/29 15:21:59
Stackless Pythonなら、setrecursionlimit()で限界増やして、メモリの限り再帰しても大丈夫だよ。
701:デフォルトの名無しさん
08/06/29 16:23:18
メモリの限り再帰って・・・本質的な解決じゃない気がする。
そのうち末尾再帰の最適化が入ることを祈って、
とりあえずループに書き直した。
702:デフォルトの名無しさん
08/06/29 18:42:53
Pythonでは定数をどのように宣言(?)すればいいのでしょうか?
たとえば C++ において,クラス全体で使われる定数は
static const で宣言しますが,それと同じようなことは
でこれーたで可能なのでしょうか?
703:デフォルトの名無しさん
08/06/29 18:55:24
>>702
デコレータつかうと誤って更新すると例外が出るようのは作れるけど
クラスやパッケージ外からはアクセサつかって変数を更新するという
ルールにしとけば事故はおこんない。
そもそもPythonの変数は入れ物じゃなくて名前付けというか参照だから
そういう文化(というと大げさだけど)だと思うしかない。
まーCみたいに独自プリプロセッサとおすのはありかもね。
704:デフォルトの名無しさん
08/06/29 19:58:33
ここでもstackの話してるのかw
705:デフォルトの名無しさん
08/06/29 21:23:49
ゆとりちゃんは幼稚園からやりなおしてくだちゃいね
706:デフォルトの名無しさん
08/06/29 22:09:54
やりなおしても、またゆとり教育で永久ループか?
707:デフォルトの名無しさん
08/06/29 22:37:55
ゆとりはPython使うな。 以上。
708:デフォルトの名無しさん
08/06/30 00:25:22
Python3.0について質問です。
名前空間ってやつで悩んでます。
urllibモジュールについて、
import urllib.parse.urlparseとやるとimportに失敗します。
from urllib.parse import urlparseとやるとモジュールのimportに成功します。
なぜでしょうか??
なぜ下の方は成功し、上のほうは失敗するのでしょうか。
709:デフォルトの名無しさん
08/06/30 00:35:21
urlparseがモジュールじゃなくて関数だから (lib/urllib/parse.py)
710:デフォルトの名無しさん
08/06/30 00:43:14
>>708
URLリンク(www.python.jp)
単純なimport文やfromに指定できるのは「モジュール名」に限る。
パッケージがサブディレクトリを持っていて階層構造になっている場合は
モジュール名にドットが含まれることもある。
711:デフォルトの名無しさん
08/06/30 00:56:00
>>709,>>710
ありがとうございます。
疑問点について氷解しました。
712:デフォルトの名無しさん
08/07/02 09:12:25
PEPってPython Enhancement Proposals
のことだって始めて知った今日。
713:デフォルトの名無しさん
08/07/02 13:39:10
PHPってPrintHtmlPrototyping
714:デフォルトの名無しさん
08/07/03 08:36:51
Pythonで簡単なウェブサーバを作成するパッケージってありますか?
ローカルで実験してて計測結果を表示するウェブインターフェース付けたいんだけど
715:デフォルトの名無しさん
08/07/03 08:54:55
>>714
>>651
>>> python -m CGIHTTPServer
50レス程度も読めないの?馬鹿なの?死ぬの?
716:デフォルトの名無しさん
08/07/03 09:11:23
そういう人間のたまり場だということになぜ気付かないの?
717:デフォルトの名無しさん
08/07/03 12:58:39
ログを読まないより、ググらないのとリファレンスを引かない方が…
718:デフォルトの名無しさん
08/07/03 19:41:22
プログラム初心者がpythonでcgiやりたいとかならともかく、
実験してるような人なら、必要な情報を調べる技術は備えてるはずだと思うんだけどなあ
719:714
08/07/04 07:00:11
思いついた時にケータイで取り合えず聞いておくから.
後で調べる.
とにかく古い測定器で,GP-IBインターフェイスカードが
そのマシンにしかついてなくって,面倒だなぁ,と.
720:714
08/07/04 07:02:01
レスしてくれる人があったらラッキーだし,
なくてもまぁ,なんというか,メモ代わり.
自鯖のp2経由だから自分がどこに何書き込んだかログ残るし.
721:714
08/07/04 07:33:41
だから,レスは別にいらないし、回答をくれても特に感謝もしない.
こっちが要求したワケじゃないから,ね.
722:デフォルトの名無しさん
08/07/04 07:38:31
つチラシの裏
723:714
08/07/04 07:41:48
わかってると思うけど,721は別人.
…まあ,言ってることは当たってるけど.
724:デフォルトの名無しさん
08/07/04 08:46:23
あんま参考にならない意見かもしれんけど
URLリンク(coreblog.org)
URLリンク(coreblog.org) 目次
とか薦めてみるテスト
じぶんもCGIよくわからないひとなので、今週の土日使って
読んでみる予定。
725:デフォルトの名無しさん
08/07/04 11:30:17
ものすごいインストーラー嫌いなんです
Windows用のはインストーラーしか見当たらないのですが
Pythonをインストールせずに使う方法はありますか?
Portable Pythonっていうのを使えばいいんでしょうか?
726:デフォルトの名無しさん
08/07/04 11:51:14
>>725
そんなに嫌がらないで・・・
727:デフォルトの名無しさん
08/07/04 13:21:23
>>725
ソース落としてコンパイル or msiを展開する
728:デフォルトの名無しさん
08/07/04 15:49:43
1バイト以下に収まる整数のでっかい配列を扱いたいと
思ったんだけど、基本型には「短」整数型ってのはないのな orz
729:デフォルトの名無しさん
08/07/04 15:50:44
>>728
import array
730:デフォルトの名無しさん
08/07/04 16:22:22
多次元配列を扱いたいんだ・・・
できれば符号なし8ビット整数の。
NumPy ってページを見てみた。
It also adds the features introduced
by Numarray and can also be used to replace Numarray.
ってことらしいのだが、つーことは今は numpy.array を使えと?
731:デフォルトの名無しさん
08/07/04 16:29:12
A newer implementation, Numarray, is a complete rewrite of Numeric
but is also deprecated. NumPy is a merge between the two
that builds on the code base of Numeric and adds the features
of Numarray.
----
Wikipedia にはこうかかれていました。
732:デフォルトの名無しさん
08/07/04 18:47:31
ありがとうございました
733:デフォルトの名無しさん
08/07/04 19:21:43
どう見ても精子です。
本当にありがとうございました。
734:デフォルトの名無しさん
08/07/05 20:03:29
自鯖クラッシュに伴い、Python ベースのブログツールに
して気分一新しようと思ってるんですが、この世界は
大体 Zope ベースと TurboGears ベースに収束しつつあるんでしょうか?
Apache + Pythonベースの CGI というよりは、
サーバ機能も含めて全部 Python で固めたシステムに
してみたいんですが、そうなると Zope ベース一択ですか?
735:デフォルトの名無しさん
08/07/05 20:34:16
Debian に zope3 パッケージが見つかったんで入れちまった。
736:デフォルトの名無しさん
08/07/05 20:48:34
Zope3はガチで地雷。
737:デフォルトの名無しさん
08/07/05 20:50:44
言うな。個々のパーツは素晴らしいと思うんだが
738:デフォルトの名無しさん
08/07/05 21:17:12
ブログツールってのが既成のなら
何ベースというより機能で選択すればいいとおもうけど
自分で構築するならlighty+WSGIかSCGIなPythonアプリかな。
Zopeは2.6以降追っかけてないけど
当時の設計思想でコアなProductも同等以上なら
Python自体がバージョンアップしてる分そうとう楽しく書けるはず。
でも実際は>>736のとおりなんだろうな。
739:デフォルトの名無しさん
08/07/05 22:23:27
Zope3はすばらしいと思うが周りに集まってくる日本人がクソ。
740:デフォルトの名無しさん
08/07/05 22:26:12
え?地雷なの?
なんか改造したくなったときにPythonだと普段から使っているからやりやすいかと思って。
PerlとかPHPで書かれたやついじりまくって収集つかなくなった。
741:デフォルトの名無しさん
08/07/05 22:29:01
舞の海
742:デフォルトの名無しさん
08/07/05 23:27:31
>>740
>PerlとかPHPで書かれたやついじりまくって収集つかなくなった。
センスのある奴は道具に左右されずそつなくなんでもこなすもんだがね。
743:デフォルトの名無しさん
08/07/06 00:25:22
クマー
744:デフォルトの名無しさん
08/07/06 01:40:50
ちょ
PHPはセンスあっても無理な時は無理
grobal依存しまくりな著名アプリがほぼ絶滅したら認識改めてもいいが
なんかSquirrelMailっての改造作業回された時にほんと死ねクズ開発者共って思った
745:デフォルトの名無しさん
08/07/06 03:10:32
PHPにはnamespaceすらも無いの?
746:デフォルトの名無しさん
08/07/06 03:13:36
ねえよンなもん
747:デフォルトの名無しさん
08/07/06 04:53:51
PHPは言語自体行き当たりばったりなハックで作られてる印象
748:デフォルトの名無しさん
08/07/06 08:31:52
>>744
>SquirrelMailっての改造作業回された時
ドカタ乙。
749:デフォルトの名無しさん
08/07/06 08:45:48
ワラ
750:デフォルトの名無しさん
08/07/06 11:23:57
Perlは綺麗なのか?
かなりアドホックに建て増ししてるように見えるが。
751:デフォルトの名無しさん
08/07/06 11:35:17
Zope3の実装はきれいだけど、使っている日本人がババッちい。
752:デフォルトの名無しさん
08/07/06 12:02:04
zopeはメメタァなだけだろ
753:デフォルトの名無しさん
08/07/06 12:49:36
>>751
なんでZope関係の日本人は変な感じがするんだろう…
754:デフォルトの名無しさん
08/07/06 13:35:53
CMSでいえば俺が以前使ってた geeklog の人なんて
もっと気持ち悪いよ。
755:デフォルトの名無しさん
08/07/06 14:39:40
CMSスレでも評判悪いなw
756:デフォルトの名無しさん
08/07/06 16:02:22
>>745 namespaceは5.3で導入される。6.0からunicodeのネイティブサポート。
757:デフォルトの名無しさん
08/07/06 16:22:21
総じてCMS開発者は気持ち悪いのか?
758:デフォルトの名無しさん
08/07/06 16:54:27
>>755
俺もね,いろいろと改良しようとはしたんだ.
というか,実際やった.自分のブログだけは.
でもさ,モジュール化が難しい PHP だと,
上流の変更に合わせてマージできるように確認
するだけでえらい手間がかかるんだ.
そこまでしてコントリビューとするのも面倒だったからやめた.
上流での変更範囲のどこまでが自分がコミットした
パッチに影響あるか,確信が持てないし,
退行テストするほど時間に余裕もない.
つーわけで Zope 3 だとその辺考慮されてるかな?
とか淡い期待を抱いてインスコはしてみたものの,
まだインスタンス作成すらしてないや.
Zope スレも過疎ってるみたいだしさ
759:デフォルトの名無しさん
08/07/09 01:30:40
全然話は変わるけど、pythonってなんで
file = open('hoge.txt')
for line in file :
hogehoge()
って書けないのよ
760:デフォルトの名無しさん
08/07/09 01:33:24
書けるよ
761:デフォルトの名無しさん
08/07/09 03:01:11
行毎なのか文字毎なのかバイト毎なのか
はっきりしろ
762:デフォルトの名無しさん
08/07/09 03:17:19
>>759
Oh! Python勉強中なのでその話題は気になります
Perlだったらこんな感じ?
open(IN, "hoge.txt") or die "Can't open hoge.txt";
while(<IN>) {
chomp;
print $_;
}
close(IN);
Pythonなら
763:デフォルトの名無しさん
08/07/09 03:22:47
Pythonならこう?
f = open("hoge.txt", 'r')
while True:
l = f.readline()
if l == '':
break
l = l.rstrip('\n')
print l
f.close()
…もっと上手い書き方・短くなる書き方があるのでしょうか?
while True: が気になります
ここに条件判断入れて短くできないのでしょうか?
764:デフォルトの名無しさん
08/07/09 03:24:57
というか Perlの or die "~" に相当する部分がないのも気になるな…
try: ~ except: 使わなきゃダメなのかな
765:デフォルトの名無しさん
08/07/09 04:39:35
>>763
ファイルから1行ずつ読むループは
for line in file:
でいいんだよ。
759が何を駄目と言ってるのか分からない。
766:デフォルトの名無しさん
08/07/09 04:58:16
>>763
f = open('hoge.txt')
for line in f: print f, # 末端にカンマつき
f.close()
stdout.writeのほうが好みならそっちを
あと例外は補足しなければ大概はdieの代わりになるよ
767:デフォルトの名無しさん
08/07/09 05:10:36
>>765
おお…ホントだ! 試してみたら行けました
「Python ファイル読み込み」で検索すると>>763のような書き方しか出てこなかったので
for line in file: なんて書き方ができるとは知りませんでした
…どうして初心者向けの解説ページでは長々とした書き方を紹介してるんだろう
もしかして比較的最近の版じゃないと書けないやり方なんでしょうかね?
何にしても短く書けて嬉しい限りです
後は or die "~" 相当の書き方を調べてこないと…
768:デフォルトの名無しさん
08/07/09 05:10:41
ごめん間違い
for line in f: print line, で
769:デフォルトの名無しさん
08/07/09 05:15:50
>>766
膝を打ちました
print の最後にカンマをつけることで改行を出力しない
=読み込んだ行の改行を利用して改行してしまう、ということなのですね
上手いやり方があるなあ…
しかもたったの3行になってて感動しました
同じ処理でもこんなに短く書けるのか…
770:デフォルトの名無しさん
08/07/09 06:54:27
公式に良いチュートリアルがあるよ。
>>759-769の内容は網羅されてる。
URLリンク(www.python.jp)
771:デフォルトの名無しさん
08/07/09 12:19:44
sys.stdout.writelines(open("hoge.txt"))
for line in open("hoge.txt"): print line
772:デフォルトの名無しさん
08/07/09 20:51:05
>>770
「網羅されてる」ようには見えませんが…
7.2 ファイルを読み書きする
URLリンク(www.python.jp)
目についたのはこのへんですが、この内容から上記の話を知識として得るには無理がありませんか?
それとも、そちらで見ている項が違うんでしょうか?
余談ですが
こういってはなんですけど、公式のチュートリアルってなんだか判りづらくないですか…?
プログラミングそのものが初めての人向け、のように一見始まりながら
しかし噛み砕き方がかなり中途半端で、そのうえ、どこに何が載っているかが判りづらく
初心者にも、他言語習得済みの人にも
どちらにもお勧めできない解説になってるように思えます
…和訳文書があるだけマシではありますが、おそらくコレは原文からしてよくないんでしょうね
773:デフォルトの名無しさん
08/07/09 21:49:17
>>772
もっと先のイテレータのところにちょろっと書いてある。
774:デフォルトの名無しさん
08/07/09 22:29:17
余りわかりやすく書いてしまうと本が売れなくなる
775:デフォルトの名無しさん
08/07/09 22:35:07
イタリックは止めて欲しいよね
776:770
08/07/09 22:43:43
ちなみにPython2.4.2以降のチュートリアル(英語)には
ファイル読み書きの項にも載ってる
URLリンク(docs.python.org)
>>772
> 初心者にも、他言語習得済みの人にも
> どちらにもお勧めできない解説になってるように思えます
確かにチュートリアルは初心者向けではない
ただ良いと感じるかそうでないかは
あくまで読む人の経験に左右されるので一概には言えない
良くないと感じたら入門書を買うのが吉
777:デフォルトの名無しさん
08/07/09 23:03:38
pythonの入門書なんか書籍数が少ない上に中途半端なのばっかじゃん
python勉強しようって連中からしたらifとかforとかたらたら書いてあっても無意味なのにさあ
EffectiveC++とかEffectiveJava的な本が無いのがいかん
778:デフォルトの名無しさん
08/07/09 23:49:04
>>773
あっ…そこでしたか。これは失礼しました。たしかにちらりと紹介されてました
9. クラス - 9.8 イテレータ (iterator)
URLリンク(www.python.jp)
頭の中で「ファイル」「for文」のキーワードしか浮かばなくて違うところを探してました…
URLリンク(www.python.jp)
4. その他の制御フローツール - 4.2 for 文
Pyhon 2.5.2版チュートリアルでは、ファイル関係の項に事例が載ってるのが興味深いです
版が新しくなるたびに、微妙に改善?されてるのですね>原文
779:デフォルトの名無しさん
08/07/10 12:40:48
Cookbookでもみたら。
プログラミングの初心者には、
pythonで学ぶプログラミング作法がおすすめなんだがさすがに古いんだよな。
780:デフォルトの名無しさん
08/07/10 12:41:34
is 演算子はオブジェクトに関するアイデンティティテストですが,
定数に対しての式 3 is 3 が True になるのはどういう理屈によるのでしょうか.
781:デフォルトの名無しさん
08/07/10 14:01:23
定数じゃないから
>>> int(3) is 3
True
782:デフォルトの名無しさん
08/07/10 15:42:02
is ってオブジェクトとして同じってことであって,
値として同じってことじゃないと思うんですよ.
i = int(3)
j = int(3)
print i is j #これは True
print i == i #これは True
class TestClass():
def __init(self):
pass
def __eq__(self, right):
return True
p = TestClass()
q = TestClass()
print p is q #これは False
print p == q #これは True
783:デフォルトの名無しさん
08/07/10 15:46:43
Pythonの数値はimmutableだから
同じオブジェクトを使いまわしても問題ないんです
784:デフォルトの名無しさん
08/07/10 15:48:19
int,float,str等の場合はa==bがTrueでもa is bはFalseになる場合もあるので
使うべきではないね
785:デフォルトの名無しさん
08/07/10 15:50:31
変更不可能なオブジェクトの場合はそういうふるまいなのか?
って思ったんだけど…タプルでやってみる
x = (1,2)
y = (1,2)
print x is y #これは False
print x == y #これは True
786:デフォルトの名無しさん
08/07/10 15:58:30
そこらへんは実装依存
変更不可能なオブジェクトは使いまわしてもいいし使いまわさなくてもいい
787:デフォルトの名無しさん
08/07/10 16:45:27
実装依存 orz
危険だなぁ
788:デフォルトの名無しさん
08/07/10 16:52:37
そういう比較にisは使わないから危険ではないでしょ
789:デフォルトの名無しさん
08/07/10 16:55:37
>>> 100+100 is 200
True
>>> 100*100 is 10000
False
790:デフォルトの名無しさん
08/07/10 17:00:55
is をどういうときに使うのか今一つピンとこないなあ…
>>784の事例を考えると
「最初から何でもかんでもできるだけ全部 == でいいじゃねえかそのほうがシンプルだろう」
と思うのだけど…
791:デフォルトの名無しさん
08/07/10 17:06:38
値としてイコールなのと、オブジェクトが等しいことは全く別の話だが
ポインタがない言語だから分かりにくいのかね。
792:デフォルトの名無しさん
08/07/10 17:41:16
>>> x = None
>>> print x == None
True
>>> print x is None
True
None との比較には is None を使うべし、と説明してる記事をよく見かけるのですが
初心者向け記事・最初のうちは x == None だけ使ったほうがいいのかな
という気がしただけなんですけどね
793:デフォルトの名無しさん
08/07/10 17:42:31
なんで各行に改行が入るんだ… orz
794:デフォルトの名無しさん
08/07/10 17:53:38
>>791
でもちゃんと copy.deepcopy() とか用意されてるけどね
795:デフォルトの名無しさん
08/07/10 19:10:47
どのメソッド・関数でどれくらい時間がかかっているかを
測定してくれるプロファイラって Python にないですか?
PyDev から容易に使うことができればベストなんですが.
796:デフォルトの名無しさん
08/07/10 19:53:05
import profile でおkでした
797:デフォルトの名無しさん
08/07/10 20:05:52
hotshotもあるよ
798:デフォルトの名無しさん
08/07/15 22:43:38
>>762
Python2.5以降
with open('sample.txt','r') as fp:
for line in fp:
print line
799:798
08/07/15 22:47:21
ミスった。こうかな?
with open('sample.txt','r') as fp:
for line in fp:
print line
800:デフォルトの名無しさん
08/07/16 00:18:35
インデントなくても分かるコードならそのままでよくね?
2chの仕様はみんなしってるし。
スレローカルで行頭のある記号(たとえば . とか)は
空白とみなすとかなら楽なんだけど。
801:デフォルトの名無しさん
08/07/16 08:09:50
プログラマ=アプリを使いこなす、ってイメージがあるから
2chは専用ブラウザで見てるって思ってるんだけど、そうでもないのかな。
802:デフォルトの名無しさん
08/07/16 12:45:16
htmlソース見たら空白復元出来るけど何が問題?
803:デフォルトの名無しさん
08/07/16 21:46:46
>>801
自分が使ってるアプリの独自仕様が標準だと思ってる人って痛いよね
804:デフォルトの名無しさん
08/07/16 22:28:40
どこにでもいるけどな
805:デフォルトの名無しさん
08/07/16 23:27:06
いい加減スレ違い
806:デフォルトの名無しさん
08/07/17 10:22:46
これでいけそうな気が
$ python -c "import sys; print sys.stdin.read().replace(' ', ' ')" < test.py
#! /bin/env python
def main():
for i in range(10):
print i
if __name__ == '__main__':
main()
807:デフォルトの名無しさん
08/07/17 10:26:04
replace(' ', ' ') -> replace(' ', ' ')
808:デフォルトの名無しさん
08/07/17 15:47:25
C#使いだけど今日からPython始めるよ
みんなよろしく!
809:デフォルトの名無しさん
08/07/17 16:04:31
つ IronPython
いろんな意味で逃げ出せない
810:デフォルトの名無しさん
08/07/17 18:55:14
それも入れたー
とりあえず何か作ってみるわー
811:デフォルトの名無しさん
08/07/18 07:55:10
PythonはTkinterでコマンドラインアプリのラッパーづくり
WebアプリはApache+PHPでお手軽に作れる規模で十分な俺が
PythonでWebアプリ作ろうと思ったらどんなパッケージ使うべき?
ゴツいフレームワークは無しの方向で
812:デフォルトの名無しさん
08/07/18 08:04:11
普通にApacheでCGIでいいんじゃね?
813:デフォルトの名無しさん
08/07/18 13:42:30
web.pyとか?
814:デフォルトの名無しさん
08/07/18 18:41:56
そういえばdjangoの本でてるね
URLリンク(www.amazon.co.jp)
815:デフォルトの名無しさん
08/07/19 10:29:32
>>811
■[Python]web.pyで画像掲示板
URLリンク(d.hatena.ne.jp)
ローカルで動かそうとすると画像ファイルが
表示されない…でもシンプル。App engineも似た
ようなかんじで組める印象…
816:デフォルトの名無しさん
08/07/21 23:04:11
今日初めて生で柴田さんを見た。
817:デフォルトの名無しさん
08/07/21 23:46:03
受け付けの柴田さんなら毎日見てる
818:デフォルトの名無しさん
08/07/22 00:17:13
いくぜっ
819:デフォルトの名無しさん
08/07/25 01:41:29
一行めの/usr/bin/env pythonのenvって
環境変数無効にするって意味なんですか?
820:デフォルトの名無しさん
08/07/25 02:04:09
>>819
Unixでの常套句
この場合pythonのフルパスがわからなくても動作する。
PATHはとおっていないとだめだけど。
821:デフォルトの名無しさん
08/07/25 02:07:56
>>820
あー、環境変数PATHを有効にしてるってことですね。
呪文だと割り切りつつ、ずっと疑問だったのですがすっきりしました。
ありがとうございます!
822:デフォルトの名無しさん
08/07/25 02:12:24
正直、俺は呆れたよ…
823:デフォルトの名無しさん
08/07/25 02:19:25
だってwindows使いなんだもん
超初心者スレだから許してちょ!
824:デフォルトの名無しさん
08/07/25 02:37:45
Windowsだったらその行消しても問題ないよね?
825:デフォルトの名無しさん
08/07/25 02:43:01
うん
826:デフォルトの名無しさん
08/07/25 14:30:23
すると
*NIX環境下でも
Windows環境下でも
Mac環境下でも
どこでも動くPythonスクリプトを書こうと思ったら
1行目に必ず
#!/usr/bin/env python
と書いておくのが定石ということでいんでしょうか
827:デフォルトの名無しさん
08/07/25 17:07:33
>>819
pythonの実行ファイルが
/usr/bin/python
にあろうが、
/usr/local/bin/python
にあろうが動かそうとする場合に使うんでないかい?
ただし、欠点として2つ以上の引数(この場合envの後の python 以降)を認識しなかったはず
828:デフォルトの名無しさん
08/07/25 17:10:57
ちょっと質問があるのですが、
ライブラリのパスにzip付きパスがあるんですが、
これって標準ライブラリ一式を zipに固めて置いておけば動くっチューことなんでしょうか?
この編の仕組みについてドキュメントに記述があればどの辺にあるか教えてください。
ライブラリパス表示例:
python -c 'import sys; print sys.path;'
829:デフォルトの名無しさん
08/07/25 17:17:37
別の単語で検索していたら、一発で見つかったw
4.12 zipimport -- Zip アーカイブからモジュールを import する
URLリンク(www.python.jp)
お騒がせしました。
ありがとうございました。
830:デフォルトの名無しさん
08/07/25 17:22:07
py2exe の _memimporter も調べた方がいいよ
831:デフォルトの名無しさん
08/07/29 17:24:04
M.Hiroiさんのお気楽pythonプログラミング入門で、
第4回ジェネレータのところの
リスト7がどう動くのか分かりませんでした。
打ち込んで動かすと、正常に動きました。
最初空リストの意味が分かりませんでしたが、
n==len(nums)が再帰の停止条件になっていると考え、
与えられたリストが[1,2,3]なら、n=3のとき、空リストが
n=2の階層に戻って、for yの繰り返しで、与えられた順序と
同じ順列のリストを作ったら、どの階層に戻っても、
if y not in xを満たさなくなり、一番外側のn=0に戻って、
一つ目の順列をプリントすると理解したつもりが
次の順列である[1,3,2]がどうして出てくるか分からなく
なったので、たぶん上の理解も間違っているのではと
思いました。それでトレースする方法をweb上やマニュアルから
調べましたが、結局うまくいかず、お手上げ。どうすればいいでしょ。
832:デフォルトの名無しさん
08/07/29 18:30:31
どこかわからん
833:デフォルトの名無しさん
08/07/29 20:37:42
>>831
>M.Hiroiさんのお気楽pythonプログラミング入門で、
>第4回ジェネレータのところの
>リスト7がどう動くのか分かりませんでした
答えて欲しけりゃ引用して来い
834:デフォルトの名無しさん
08/07/29 20:40:13
>831じゃないけどたぶんこれだよ
URLリンク(www.geocities.jp)
835:デフォルトの名無しさん
08/07/29 21:28:36
>>831
デバッガでステップ実行
836:831
08/07/29 22:58:49
ありがとうございます。Pdb sコマンドでステップ実行できました。
今から動作を確かめます。
837:デフォルトの名無しさん
08/07/30 11:04:16
ファイルディスクリプタ(番号)からファイルオブジェクトを作るにはどうすればいいのでしょうか?
838:デフォルトの名無しさん
08/07/30 11:51:07
os.fdopen
839:831
08/07/30 13:32:19
どう動くか分かりました。yieldはreturnのようなもので、
ループの途中でも中断して値を返していく。
普通のreturnとの違いはもう一度同じルーチンが
呼ばれたら、最後のyieldのところに戻って、
ループの続きを行い、最初のyieldのところに戻ったら、
全体の繰り返しが終わるようです。
デバッガの出力が少しマギらわしかったですが。
840:デフォルトの名無しさん
08/07/30 20:10:40
念のため聞いとくけどgen_perm(nums, n)が返すのはyieldの値じゃなくて
ジェネレータオブジェクトだってわかってるよね?
841:831
08/07/31 14:07:35
分かっていません。yieldの値が返っていると思っていました。
でも、呼び出しているところでfor文で受け取っているところが
言われてみれば、普通とは違う感じですかね。不意を付かれたので、
ちょっとググりましたら、イテレータに関係していそうです。
URLリンク(atkonn.blogspot.com)
上記のページで変数に入れて、next()で呼ぶと、次々と
値が変わるというのがfor文において次が呼ばれるみたいな
イメージで理解しましたが、普通に呼んだだけでは何も
表示されないというのが分かりませんでした。よろしかったら
お教えください。
842:831
08/07/31 14:17:44
今打ち込んでみましたら、<generator object at 0x。。。。>と
言うのが出ました。なるほど。さっきのページは画面のところが
間違っていたんですね。
843:デフォルトの名無しさん
08/07/31 14:40:30
チュートリアルのイテレータ、ジェネレータは読んだ?
URLリンク(www.python.jp)
844:837
08/07/31 17:26:01
>>838 ありがとうございます。
845:デフォルトの名無しさん
08/07/31 21:31:09
Pythonにおいては ジェネレータ == イテレータ
846:831
08/07/31 22:32:34
2.4のほうを読みましたが、イテレータのところは
読んでいませんでした。
今読むと、__xxx__の形やselfが見たことはあるんですが、
分からないので、半分理解不能と思いましたが、
よく見ると、__init__がコンストラクタ、__iter__が
オブジェクトを返す部分、nextのところがnext()の
実装部分に見えます。勉強になります。
847:デフォルトの名無しさん
08/08/01 00:16:26
かたっぱしからオブジェクトにたいして
dir(obj)やhelp(obj)すると理解がすすむかも。
848:デフォルトの名無しさん
08/08/01 05:06:25
日本語はUnicode文字列で扱おうと思うんだけど、
英数だけの文字列もUnicode文字列として扱ったほうがいいかな?
849:デフォルトの名無しさん
08/08/01 09:05:46
不安ならUnicodeとして扱えばいいと思うよ
850:デフォルトの名無しさん
08/08/01 16:41:45
>>848
unicode と str を不用意に混ぜて使うと、暗黙の str ⇔ unicode 変換が起こりまくる
悪夢のようなプログラミングになると思うよ。unicode に統一するのが無難。
851:デフォルトの名無しさん
08/08/01 16:56:42
ありがとう。迷いが解消されたよ。
ああ、聞き忘れてたけど記号もだよね?","とか";"など…
852:デフォルトの名無しさん
08/08/01 20:22:59
こんにちは。
トップレベル関数以外からの(ジェネレータオブジェクト以外からの)yield相当がやりたくて、
Stackless Pythonを弄っています。
そこでちょっと困った問題があり、質問をさせていただきました。
・tasklet(Stackless pythonの軽量スレッド)で実行時エラーが起きた時に、
何も表示されずにただ落ちる(終了する?) orz
例外をトラップして、自分で例外の内容やスタックトレースなどを出すしかない?
例外をトラップすること自体はできるっぽいです。
・デバッガでtasklet内に入れない。orz
デバッガがtasklet内に
ブレークポイントをしかけても無視されました。
PyScripterで確認しました。
printデバッグしかないんでしょうか?
何かよいデバッグ手法はないでしょうか?
>>851
記号も文字列でしょw
853:852
08/08/02 03:50:30
>>852
> ・tasklet(Stackless pythonの軽量スレッド)で実行時エラーが起きた時に、
> 何も表示されずにただ落ちる(終了する?) orz
こちらは、例外を受け取って
import traceback
traceback.print_exc()
でトレースバックを出力する方法でエラー内容も出力でき、解決できました。
あとは、デバッグの方法だなあ・・・
854:デフォルトの名無しさん
08/08/02 18:19:38
これから学ぼうとしている者です。
Pythonで市販並の3Dゲームとか作れますか?
855:デフォルトの名無しさん
08/08/02 18:29:14
プロ並の3Dゲーム作成技術とかあればできるんじゃね?
856:デフォルトの名無しさん
08/08/02 19:02:48
>>854
ゲーム製作だと言語云々よりもプログラマの能力如何にかなり左右されると思われる
線形代数とか物理シミュとか群集シミュとかAIとかどこまで理解してるかという。
そういう類の知識があって、さらにプログラムの最適化について十分な理解をしている
プログラマであればできるかもね
857:デフォルトの名無しさん
08/08/03 00:29:12
>>854
Pygame + PyOpenGL とか。
URLリンク(www.pygame.org)
スレリンク(gamedev板)l50
DirectPython つーのもあるらしい。
URLリンク(directpython.sourceforge.net)
858:デフォルトの名無しさん
08/08/03 00:51:11
Python「だけ」じゃ無理じゃね?
ケース倍ケースだけどC/C++の数十倍とか計算遅かったりするよ
つまり一フレームで出来る仕事が数十分の一とかになるってこった
C/C++と併用ならまあ普通にアリだろな
859:デフォルトの名無しさん
08/08/03 05:53:17
>>854
【pygame】pythonでゲーム製作【ぱいがめ】
スレリンク(gamedev板)
860:デフォルトの名無しさん
08/08/03 06:28:01
やっぱマルチスレッドへの対応が弱いのがなぁ.
861:デフォルトの名無しさん
08/08/03 09:16:53
ぱいがめドキュメント翻訳はやくやれよ。
862:デフォルトの名無しさん
08/08/03 10:01:22
> 861
まだいってるしw いいかげんあきらめて英語読む勉強しろw
863:デフォルトの名無しさん
08/08/03 12:10:14
162あたりから3ヶ月もあったのに
864:デフォルトの名無しさん
08/08/03 12:13:16
>>862
俺はお前より英語できるから安心しろ(w
俺みたいなりたいならはやく翻訳しろよ。勉強になるぞ(www
865:デフォルトの名無しさん
08/08/03 12:42:21
>>864
よし。じゃあいっしょにがんばろうw
866:デフォルトの名無しさん
08/08/03 15:20:30
ゲームにマルチスレッドなどいらん。
昔は(ry
867:デフォルトの名無しさん
08/08/03 15:25:04
まあPython使って並列計算でマルチコアでの性能稼ぎとか考えるのはナンセンス
だとは思うがな
所詮インタプリタであって、それ以前の問題で遅いんだから
868:デフォルトの名無しさん
08/08/03 16:34:35
>>861
本家ドキュメントをよべば、
・英語の勉強になる
・つねに最新情報を得られる
・他のドキュメントも見られるように・・・
いいことずくめだ
869:デフォルトの名無しさん
08/08/03 16:38:02
>>867
そういわれてしまえばそうなんだけどさ,
やっぱ人間少しでも楽したいとか思ってしまうわけよ.
数値計算含んだライブラリを頑張ってスレッドセーフに作ったから,
それ使ったアプリは楽に書きたいなぁ,とか.
870:デフォルトの名無しさん
08/08/03 17:00:12
そのライブラリとやらはCか何かで書いてるわけか
ならPythonオブジェクトとは入り口でさっさと縁を切り、明示的にGILを開放して
pure Cの世界でゴリゴリ計算してりゃ並列性はあげられそうに思うけど
違うの?
効率のいいjob queueや何かもCで作ればいいだけじゃね?
871:デフォルトの名無しさん
08/08/03 17:13:33
URLリンク(jjinux.blogspot.com)
>>> s1 = identity_cache.setdefault(s1, s1)
>>> s2 = identity_cache.setdefault(s2, s2)
これって辞書のキーと値をidentity_cacheセットして、それぞれの値を変数s1,s2に束縛してると
思うんだけど、辞書空間の中で文字列"foo"が、同じidentificationで
共有されてるいうようなことを示しているのかな?
記事全体はカツカツな環境下でメモリをどれだけ節約できるか
みたいなこと言ってるような…よくわからんぽ
872:デフォルトの名無しさん
08/08/03 18:57:26
ところでpythonのtelnetlibに入ってるtelnetクラスのexpectってメソッドってちゃんと動く?
なんか下みたいに書くとexpectの引数で怒られるのはなんでなん?
import telnetlib
telnet = telnetlib.telnet('192.168.1.1')
telnet.expect('login:')
873:デフォルトの名無しさん
08/08/03 19:08:08
>>872
>>> help(Telnet.expect)
Help on method expect in module telnetlib:
expect(self, list, timeout=None) unbound telnetlib.Telnet method
Read until one from a list of a regular expressions matches.
正規表現の*リスト*じゃないから。
874:872
08/08/03 19:50:21
>>873
正規表現のリストでやってみたら動いたよ。教えてくれてありがとう。
でもこれ、メソッドexpectの戻り値ってマッチオブジェクトなのね。
なんか期待してたのとちょっと違うよtelnetlib
875:デフォルトの名無しさん
08/08/03 20:05:58
>>874
helpの続きを見るとmatchオブジェクト以外にも
何番目の正規表現にひっかかったかてのと
マッチするまでに受信した内容も一緒にタプルで返るみたい。
普通にありがちな仕様だと思うんだけどやっぱちがう?
876:デフォルトの名無しさん
08/08/03 22:16:16
>>868
>本家ドキュメントをよべば、
「おーい、本家ドキュメントー!」
こんな感じか?
英語より日本語やれよ。
877:872
08/08/03 22:46:46
>>875
tcl拡張したexpectだと引数にただ単に正規表現を受け取るんだけど、
pythonのexpectはちょっと冗長っつーか多機能すぎない?
ただ正規表現にマッチするまで待って、単純に文字列だけ返してくれた方がプログラムがシンプルに書けると思うんだけど
878:デフォルトの名無しさん
08/08/03 23:45:17
>>877
いや、条件分岐がありえるケースもあるでしょ
レスポンスが200ならほがほが、400ならふがふが、みたいな
N個のリストでマッチングをかけて、マッチした結果の文字列「だけ」を
返されたら、分岐のコードで「また」文字列比較をやることになる
まあ、ぶっちゃけ
{ pattern1: lambda1, pattern2: lambda2,... }
風のdictでも食わせたほうが綺麗に書けそうだが、そういうラッパーは
べつに自分で簡単に書けるでしょ?
879:デフォルトの名無しさん
08/08/04 03:27:11
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
880:デフォルトの名無しさん
08/08/04 03:27:12
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
881:デフォルトの名無しさん
08/08/04 03:27:12
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
882:デフォルトの名無しさん
08/08/04 03:27:14
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
883:デフォルトの名無しさん
08/08/04 03:27:15
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
884:デフォルトの名無しさん
08/08/04 03:27:15
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
885:デフォルトの名無しさん
08/08/04 03:28:25
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
886:デフォルトの名無しさん
08/08/04 03:28:25
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
887:デフォルトの名無しさん
08/08/04 03:28:26
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
888:デフォルトの名無しさん
08/08/04 03:28:26
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
889:デフォルトの名無しさん
08/08/04 03:28:26
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
890:デフォルトの名無しさん
08/08/04 03:29:35
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■