はてなキーワード: barとは
Pythonの方が弄れる対象が多いのに、なんでウェブ系だとPHPの方が流行ってんだろ
端末からのテキスト処理も楽だし、数値計算周りのライブラリも充実しているのに
PHPが優遇されているのって歴史的な経緯以外に何か他の理由でもあるのか?
けどまぁ、情弱な文系SEが大半を占めているバカだらけの日本じゃ別にPHPで困ることもないか
数値計算や端末からのテキスト処理なんてWeb系じゃ大して使わないからなあ…
Pythonに関しては、ZopeさえコケていなければWebサーバ用LLとして大成功していたはずなのに、
Railsなんかが登場したおかげで、すっかり影が薄くなってしまいますた....
ってか、railsにインスパイアされたフレームワークって今じゃ幾らでもあるよね
djangoとかCakePHPとか。rubyってRoRを使いたいユーザを除くと、
pythonやPHPの方がユーザー数は圧倒的に多いと思うんだけど
本家のrailsって、他を遥かに越えるほど良いものなんだっけ?
44
Zopeが登場した当時、「RDB+PHPはもう古い、これからはOODB+ZopeがWebの中軸になる!」と
少なくとも自分はZopeからPythonという言語を知ったし、その時点でRubyは知らなかった
そして、その後のORM(RDB)+Railsの出現と華々しい革新性への注目は、誰もが知っているだろう
今でもZopeの開発は継続されてはいるが、結果的に当初の期待が大きく裏切られたという事実は動かしがたい
djangoとCakePHPについては実際に触っていないので憶測になるが、おそらく技術水準ではRailsと同等だろう
しかしRailsはRailsでコミュニティの活動が活発だし、その進化は異常に早い
Railsに何か致命的なトラブルが発生して開発が停滞する、あるいはdjangoやCakePHPから
何かのイノベーションが提示されでもされない限り、後発のdjangoやCakePHPがRailsに追いつくのは無理
Railsは決して技術的に完璧なWebフレームワークではないんだけどね....(たとえばSeaSideのような.... )
だからこそ「もしもZopeが....だったなら」という「たら・れば」感はPythonコミュニティの潜在認識になっている
C a k e P H P は う ん こ
CakePHP使ってんの?
可哀そうにw
でもやっぱりいつもの使い慣れたLL(Python/Ruby)で
Webサービスを書きたいってのがある
求人数は
Ruby on Rails>>>>>>>>Django
http://www.indeed.com/jobtrends?q=django%2Cruby+on+rails&l=
どういうことなの?
求人数が多いのはそのためだと思うよ
なんかのミスかと思ったがアメリカでもRuby on Railsは人気があるのかなあ・・・
Pythonのほうが使いやすいと思うのだがフレームワークはRailsが優位なんだろうか
Djangoは周辺ライブラリが微妙だし本体も鈍くさい感じがする。
でも、FlaskはSinatraより好きだから、Pythonが嫌いってわけではない。むしろ好き。
ただ、いざ作り始めるとやっぱりRailsが楽だなあってなって、Railsを使い続けている。
同感だ
同じように思っている人が他にもいて安心した
PHPはフレームワークが乱立しすぎているから、RailsをPHPで実装してみようというやつが出てきた。
それに比べてPythonは、Zopeというデファクトスタンダードが既に存在していたけど、
ただ、どうやってもRailsもどきがRailsを超えることはできないのは間違いない。
パクリはオリジナルを超えられない(キリッ って定型句だけど、
これってキリッって言いたいだけだと思う。
D言語って超えたって?
B言語って超えたって?
PHPで同じ事をできないわけではないだろうけど、Ruby on Railsほど簡潔にはできない
まあくだらねえWEBサービス作って喜んでる情弱は早く死ねって事だよ
そういう理由じゃなくてRailsのほうが単純に情報もプラグインも多いからでしょ
linuxじゃデフォのツールなんだし、ツールとの連携を考えたらpython一択じゃん
わざわざ不合理で不完全な言語を使うなんて
もしも
>linuxじゃデフォのツールなんだし、ツールとの連携を考えたらpython一択じゃん
真実であるのなら、今頃はdjangoの情報とプラグインが溢れかえっているはず
yumや、gdbとgnomeの拡張がpythonであるからといって、それをwebアプリでも使いたいと思う人は少ないというだけのこと。
ソースからインストールする必要があったとしても、web開発ではrubyを使いたいという人が多いというだけのこと。
というか、世界中のPythonプログラマが Remeber Zope!! を合い言葉に
打倒RailsたるWebフレームワークを開発しているはずだけど、
Railsも登場してから、かなりの年月が経過しているんだけどなぁ....
その間にもRailsはRails 3が登場して、REST/AJAXの強化等の進化が継続しているよ
Ruby では
ary.map {|x| x**2}
map(lambda x: x**2, ary)
となり、lambda の本体が1つの式では表現しきれなくなると
.....
と書き換える必要があります。
f = lambda x:(x and f(x-1)*x)or 1
RubyにはPythonのように「lambda本体は式でなければならない」という限定がありませんから、
f = lambda{|x|if x == 0 then 1 else x*f.call(x-1) end}
または
f = lambda{|x|x == 0 ? 1 : x*f.call(x-1)}
と書けます。lambda内でreturnが使えますから、書きたければ
f = lambda{|x|if x == 0 then return 1 else return x*f.call(x-1) end}
でもOKです。
348
これはPythonをdisっているように見せかけてRubyをdisっているのか? と一瞬思ってしまったw
だってRubyのほうが長くない?CLのfuncallみたいなcall()がちょっとうざいし…
そしてどっちもlambda式の中で束縛変数の名前で再帰可能、と
print [x*2+100 for x in [1,2,3,4,5] if x > 2 and x < 5]
暗号のように見える。
puts [1,2,3,4,5].select{|i| i > 2 and i < 5}.map{|i| i*2+100}
思考の流れと、コードの流れが一致しているので書きやすい。
map(lambda x: x*2+100, filter(lambda x: x > 2 and x < 5, [1,2,3,4,5]))
pythonて可読性が高いのをうたってる割にはそこいまいちだよね
Rubyの場合には、左から右へと無名関数がデータフローあるいは
関数型プログラミングに不慣れな初心者でも、参照透明性のあるコードが自然に書ける
プログラマにとって優しい or プログラミングの楽しさを教えてくれるのがRuby
それと比較すると、Pythonのコードは、関数型プログラミングというものが
いかに高度で難解なものであるかという事をもったいぶってプログラマに押し付ける
もしもPythonしか知らないプログラマであれば、関数型 = 難解 という印象を持つだろう
階乗計算くらいだと単純すぎて、ナゼ重要なのかが分かりづらいと思うのでコードで示す
result_list = source_list.map { |elem|
x = foo(elem.x) # ここが局所宣言を書く部分
x + y # 最後に評価された式の値が、無名関数のリターン値になる
}
Rubyでは、map等に与える無名関数の中で局所的な環境(クロージャ)が作られるから、
x = foo(...) のような代入文がいくつでも(= 複雑な処理でも)書ける
このポイントは、実用的なプログラムを関数型風で書こうとした時に、威力を発揮する
余計分かりづらくなった
高卒ドカタなんだろうなぁと可哀想になる
集合の表記に似せてることが分かるから
355
>map/filterはfor/ifと同じだと言っているだけだから、難解という印象は持たない。
関数型プログラミングに慣れた、あるいは得意な人であれば、そういった印象なんだろね
Rubyの魅力はこれから関数型プログラミングを学ぼうとする初心者、 あるいはそんな初心者へ教える立場から見た、優しさ or 分かりやすさなんだ
[1,4,3,2].sort.reverse.map{|x| x.to_s}.join('-')
Pythonだと読みにくい。
'-'.join(map(str, reversed(sorted([1,4,3,2]))))
Pythonでは思考の流れと一致しないばかりか、「カッコだらけ」のコードになると.....
カッコだらけのコードを分かりやすくする基本的な方法は静的単一代入じゃないか
Rubyのやり方は基本ではなく玄人のやり方だろ
Pythonでは組み込みの型でメソッドチェインはやって欲しくないな
似たようなコレクションtuple,deque,array,queue等にも同じメソッドが必要になってくるし。
372
外部のライブラリでも列挙可能なものは、たいていEnumerableモジュールをimportしてますね
Rubyユーザーは列挙可能なものはmapやselectできて当然だろって思ってる気がします
Pythonは「何かを便利に書くためのしわ寄せ」をはっきり寄せてくる
得意と不得意を言語レベルではっきり主張するのでメリケン好みと言えなくもない
Rubyは全方位になんとなく八方美人なので、全体的になんとなく書きやすくてなんとなくキモくて遅い
「書きにくいってことはその処理に向いてないってことだから諦めろ」を地で行く
無名関数が文を使うほど複雑なら名前を付けるのが Python 流と想像。
これを読みづらいと感じるのは、左から右に流れる
もしかしてアラビア語ネイティブな人からすると逆に読みやすいのか?
31歳で癌になって、とりあえず治して、それから早8年。この分だと普通に60歳くらいまでは生けそうな感じだ。
癌が治って退院したときは、40歳の自分もなかなか想像できなくて、オレは生涯独身で行こうと思ったものだが、意外と人間、簡単には死なないようだよ。まあでも自分の選択に後悔はしていない。もし運良く結婚できたとして、嫁さんは分かってて結婚するわけだから自己責任だが、もし自分の子供が癌になってしまったらと思うと、ちょっとね。ましてやオレより先に死にでもしたら耐えきれませんよオジサンは。
そんなわけで今、オレの隣に奥さんはいないし、オレの膝の上に子供はいないわけだが、オレは充分に幸せなのだ。2chのまとめサイトは相変わらず面白いし、たまに東京に行って女子高生BARやメイドキャバクラで酒を飲むのは最高だ。そうそう、35歳でギターを始めた。奥田民生が弾きたいんだよ。
とりあえず、カウンターで「もう5時か。」とつぶやけば、
よってたかった"YOU! IPPON-MANZOKU MAN!?"とおだてられるので、
「マッマッMANZOX!イッポンMANZOX!」と言えばいいんだな。
よく分かった。
男で酒飲める人なら誰でも憧れる一人BAR。
過去には
http://burusoku-vip.com/archives/1354659.html
みたいなつらい思いをした人もいて、
BARは初心者にはオススメできないところだーなんて思ってたが
なんとなく一人BARの過ごし方がわかってきたので
つらつらと書いてみる。
・とにかくカウンターに着く。
・ウイスキー2杯目。ここで1杯目に飲んだウイスキーと比べてもっと辛い、もっと甘いとかリクエストする。
ぴったりの1杯を選んでくれるはずだ。
・話したげな目線をバーテンさんにおくる。多分話しかけてくれる。
自分の家の近くのBARを選ぶと「住」の話がしやすいのでいいんじゃないかな。
・テレビあるバーにも行ってみたけど、ここはテレビが話題を作り続けてくれるので
話題が途切れるということがなく、デビューという意味では過ごしやすい。
・常連さんっぽい人が登場。話に耳を傾けるだけでも時間がすぎる。
・お店を出る前に、「このへんで行きつけのBARを作りたくて、いろいろ回ってる」と伝えると
オーナーさんは意外と親切に教えてくれる。
こんな感じかね。
結局2日間で3件回ってみたが、
お店の内装はもちろん、バーテンさんの考え、行動がお店ごとにあるので
色々バー巡りしてみるのはほんとうに面白そうだ。
また行こうと思う。
まだまだ英語話せないのですが、勉強をしていると僅かながら日々上達はしてまして、当然ながらそれは毎日毎日英語の勉強をやり続けているからです。通勤往復、帰宅後、休日ともともと出不精というのもありますが、土日もほとんど自宅にいて英語の勉強をしています。それでも学生時代にさぼっていたツケは大きく、まだまだ中学生レベルを脱することができません。
これから英語を勉強しようと思っている人に言いたいことは「思ってるよりもきついよ」ということです。いや、きついよ。デジマデジマ(おっさんが若者ぶって言う言葉)。英語の基礎知識のない人間がいきなり英語にとりかかっても、上達スピードがとんでもなく遅いと感じます。好きこそものの上手なれ、とよく言いますが、こちとら英語が好きでもなんでもないうえに英語を避けて生きてきたおっさんです。学生時代に英語が好きで留学した人とは比べるまでもないです。
そんな英語嫌い人間が英語の勉強を続けるのは至難の業です。漠然と「英語できないと今後きついよなあ」と思っている人たちが一念発起してまずやってみることは、「一日5分で~」とかいう枕言葉の教科書かスピードラーニングとかいう無駄なものを1週間程度やってみて上達が感じられず諦めることの繰り返しでしょう。なんでもそうですがモチベーションを保つ最良の方法は上達を実感して気持ちよくなることです。ところが、英語に関してはそれを実感するのに時間がかかりすぎます。我々おっさんは余計に。
一つ言えるのは、英語ができる人や英語を勉強したこともない人から言われる言葉にいちいち傷付く必要はないということです。英語を1年程度勉強したあなたは何度もこう言われると思います。
あなたは英語が好きで勉強した人とは違うし、あなたは英語を勉強していない人でもないのです。違う人間の考え方を気にして落ち込んでも仕方ないということをボクは最近学びました。外人がいるBARに行って生きた英語とやらを体感しに行く必要なんてないし、Sex And The Cityを字幕なしで見る必要もありません。それからエキサイト翻訳を使っている人間の言うことも無視していいです。英語嫌いには英語嫌いなりの勉強方法があります。変なプレッシャーを感じてモチベーションを失くすくらいならやらないほうがマシです。勉強は継続することが大事ですし、継続することで吸収力も上がっていきます。ですので、なによりも自分が継続できる勉強法を探しましょう。誰かのやり方を真似する必要はありません。英語が嫌いな人用の勉強法だってネットを探せば山ほどあるので自分に合った方法を探し、毎日続けることを最優先にすべきだとボクは思います。
「6.11新宿・原発やめろデモ」において発生した、20歳学生に対する集団リンチ
「6.11新宿・原発やめろデモ(http://611shinjuku.tumblr.com/)」において、20歳の学生に対する、集団リンチ事件。
「ヘイトスピーチに反対する会」有志
柏崎正憲 栗原学 常野雄次郎(@toled) ほくしゅ(@hokusyu82) 山口素明 ほか2人
http://1-byte.jp/2011/03/20/20_tips_you_need_to_learn_to_become_a_better_php_programmer/
良いPHPerだって?そんなものは丸めてゴミ箱にでも捨ててしまった方が資源の再利用になる分いくらかマシだ。
つまり俺たちがしなくちゃならないことは「より良いPHPerにならないため」に何ができるかってことなのさ。
それじゃ、始めよう。
?>なんて使っちゃいけない。そう俺たちはBAD PHPer。
無駄なホワイトスペースの出力に悩まされるくらいなら対称性なんて丸めてゴミ箱にでも捨てた方がまだマシだ。非対称性こそが賛美。
require_once("config.php");
未だにこんなことやってるやつがいるのかいベイベー。絶対にダメだ。この一行を見たら俺は悶絶する。
ダメだ、早く何とかしないと。
大抵このconfig.phpの中身はこうなっている。見て絶望だ。
$hoge_path = ''; if (!LOCAL) { define('FOO_FLAG', 1); if (HONBAN) { define('HOGE_FLAG', 1); } else if (TEST) { define('HOGE_FLAG', 2); } } else { $hoge_path = '/local'; define('FOO_FLAG', 2); define('HOGE_FLAG', 3); } define('HOGE_URL', $hoge_path.'/hoge/');
こういうのが延々と続くわけだ。もういやだ。もう見たくない。
本番環境とテスト環境でどういう値の違いがあるのか、ローカル環境だとどうなるのか、まったく把握できる気がしない。
なまじPHPな設定ファイルのせいで、処理をついつい書いてしまう。そしてどんどん複雑になってしまう。
やはり設定データは基本的にYAML等のデータしか定義できない形式のもので用意すべきだ。そして環境ごとに設定ファイルを分けるべきである。
そうすることで何にどういう違いがあるのかすぐにわかるし、diffすれば一度にすべて把握することができる。
# 本番環境設定ファイル foo_flag: 1 hoge_flag: 1 hoge_url: '/hoge/'
# テスト環境設定ファイル foo_flag: 1 hoge_flag: 2 hoge_url: '/hoge/'
# ローカル環境設定ファイル foo_flag: 2 hoge_flag: 3 hoge_url: '/local/hoge/'
// ここで後の処理のためにhogeメソッドを呼び出しておく $q->foo(); // $a['foo']はここに来る時点で真のはず // 2010-03-10 判定がおかしいので修正 // 2010-06-21 やっぱり値が入ってる方が正しい if ( !isset($hoge[0]) ) { }
コメントは保守されない。そう、それは真実。こんなコメントを発見したら即効削除しよう。コメントは基本信じるな。
俺たちにちょっとしたヒントと大きな損害を与えてくれる、それがコメントの役割なのだ。
わかる。いいたい事はとてもわかる。俺たちはしばしばインデントにスペースを使うはずだ。一方でIDEのしっかりした言語ではタブも使うことがある。しかし悪いことに、両者を混同しているプログラマも一定数いるのだ。
タブを画面上で認識しにくいエディタが世の中には存在する(何とは言わないが)
そして画面上で認識しにくいことを理由にタブを気にしないプログラマがいる。
この二つの条件が重なると、タブとスペースの交じり合ったインデントが完成する。もうぐちゃぐちゃだ。これは永遠に続く戦いだ。
私たちが勝利を掴むためにできることなどせいぜい、常にスペースしか使わない。タブを見つけたらその都度スペースに変換する。そういった地道な活動が明日へとつながるのだ。
われわれがプログラムをするとき、何に一番時間がかかってるか。実は変数の命名なのである。ここで拘り過ぎて時間をかけ過ぎては何も進まない。
御託はイイからさっさと書け、だ。しかしとはいっても変数名は重要。日頃からどういうときにどんな名前を使うかを決めておくといい。
そして変数名に型はまったく必要ない。型宣言のないPHPにおいて、型の変数名をつけること自体ナンセンスだ。
$iNumber = 'aaa';
になんの意味もない。コメントを信じるなでも言ったが、これはプログラマを混乱させるだけの害悪なものだ。
変数を使う前に初期化するのは、警告を出さないという意味でも良い癖だ。しかし具体的にどこでやるかが問題だ。
$foo = null; $foo = $q->foo();
こんな初期化に意味はない。よくあるのはやはり、if文で値を振り分けるケースだろう
$foo = null; if ( $hoge ) { $foo = 1; } else if ( $bar ) { $foo = 2; }
このときの初期化はとても有効だ。もしnullの初期化を忘れたまま$fooを使うと警告が出るが、ちゃんと初期化してるので出ない。基本中の基本だ。
function getStatus() { $bReturn = false; if ($i == 2) $bReturn = true; return $bReturn; }(中略)
もし、何かしらの理由で、あなたの書いたif文が間違っていたら?
この書き方をしていれば、間違った値に対して、常にfalseが返る。
私たちが、PHPでsensitiveなデータを取り扱うなら、正しいデータが入力されるまでは、動かないコードを書くべきだ。
trueとfalseの条件がいまいち明確ではないが、本当に動かないコードを書けというのであれば以下のようにすべきだ
function getStatus() { $bReturn = false; if ($i == 2) $bReturn = true; else if ($i == 1) $bReturn = false; else throw new Exception("bad status! $i"); return $bReturn; }
中途半端にfalseを返して生存させる必要性はまったくない。今すぐ死ね!
連想配列のキーを指定する場合だけ定数と間違わないようにクオートで囲まなければならない。そして逆に定数を使いたい場合はクオートで囲ってはいけない。
更に後世のプログラマが処理を見たときに、定数が使いたかったのか、文字列が使いたかったのかを明確にしたい場合はconstantを使うと良い。
// 定数のFOOを使うよということが明確になる print $a[constant('FOO')];
もし、文字列を変数の値と一緒に出力するとき、PHPではコンマの代わりにprintfを使うことが使える。
printf( “Hello, my name is %s“, $sName);
以下の代わりに上記のコードを使う。
echo “Hello, my name is “, $sName;
出力すべき変数が増えれば増えるほど、有効になっていく。とにかく迷ったならば、printfを使え、だ。
三項演算子はとても有効だ。しかし優先順位に難があるせいで、三項演算子をネストしようとすると以下のようなコードになってしまう
$n = (($i == 1) ? 2 : (($i == 2) ? 3 :$i));
括弧だらけで読みにくいったらありゃしない。三項演算子を使うなら一回まで。約束守れないやつは丸めてゴミ箱にでも捨てちまえ。
if ( $flag ) { }
仕様をちゃんと把握しているなら真偽値のチェックなどこれで十分。
もし事前にbool型だというのが確定してるのなら「$flag === true」を使えばいい。
インクリメント、デクリメント演算子は前に付くか後ろに付くかで意味が変わるので慣れるまでは非常にややこしい。
わけがわからなくなるくらいなら初めから使わないほうが良い。見極められないなら使うな。それがPHPerなのだ。
文句なしだ。これは文句がない。
他にも色々あるので覚えておこう
$a %= 1; $a &= 1; $a |= 1; $a ^= 1; $a <<= 1; $a >>= 1;
てっとり早く画面に表示する際にpreはよく使うが、デザインの関係上画面の文字が見えないときがある。
なのでdivを使って以下のようにしとくと便利だろう。
function p($var) {
echo "<div align='left' style='background-color:white;color:black;'><pre>";
print_r($var);
echo "</pre></div>";
}
君らが通常作るアプリケーションなんぞに、定数なんぞ必要ない。いいか、もう一度言う、お前ら程度のもんが、定数使おう何ぞ、おこがましいわ!
大丈夫。なんでもかんでも定数にする必要はない。結局設定ファイルに定数をずらずら作りまくってわけがわからなくなってるパターンが多い。
貴様みたいなもんに、定数は制御できん。いいか設定ファイルはYAML等のデータで持つようにし、その連想配列のデータ構造を一つ持ってるだけで定数の変わりになる。
このメリットに比べれば、定数だと書き換えられなくて良いという利点などこの歯のカスほどのものだ。そんなものは丸めてゴミ箱へ捨ててしまうといい。
認識を改めろ。俺たちはより良いPHPerにならないために努力している。
class Request { private $parameters; private $method; function __construct () { $this->method = $_SERVER['REQUEST_METHOD']; if ( strtoupper($this->method) === 'POST' ) { $this->parameters = $_POST; } else { $this->parameters = $_GET; } } function param ($key) { return isset($this->parameters[$key]) ? $this->parameters[$key] : null; } }
これだけでもいい。たったこれだけでもとても便利だ。ここから拡張してGETやPOSTを明示的に取るメソッドとかも作ってみるといい。自分の手を動かすのだ!
例が良くない。こんなのは引数が20個ある関数から、setを20回呼ぶオブジェクトに変わっただけではないか。
そもそもこの20個の引数とはなんなのか。何かのデータ構造なんであれば連想配列にして引数一つとして渡すべきだし、それぞれまったく異なる用途の変数なのであればWindowsプログラミングじゃあるまいし、20個も引数取る時点で設計が間違えている。
何がいいたいか。別に関数でもオブジェクトでもどっちでもいいということだ。
そんなことで悩んでる暇があったら設計を見直せ。
スキあらば自分自身を返せ。スキあらばオブジェクトを返せ。配列はArrayObjectのARRAY_AS_PROPSで返せ。
ひたすらメソッドチェイン。来る日も来る日もメソッドチェイン。とにかくメソッドチェインを使い続けろ。そこに未来はある。
どんなコードも繰り返すな。もし、少しでも同じコードを書いていたなら、それは関数に置き換えてしまえ。
・・・と、いうのはやめなさい。
一見同じように見えた処理でも前後の流れでまったく違うものということが往々にしてある。
まとめ方にも問題があるケースもある。何でもかんでも関数化すると、関数が膨大に増えていく。君は見たことがあるだろうか。common.phpやfunction.phpの恐ろしさを。
確かに細かく関数化はされているが、適切に関数化していないのである。結合度が非常に高い。なんでもかんでも盲目的にまとめれば良いという話ではないのだ!
あまりに極度に意識しすぎると、プログラムそのものができなくなる。そういう状態に陥る。
気を抜いて。そう気を抜いて。所詮あなたのコードなんてすぐに消えてなくなるよ。きっともっと偉い人が作り直すよ。だからまずは思うが侭にやるといい。
結合度を減らすというのは非常に難しい。何度も何度も失敗し続けて、ようやくここは分けた方が良かったんだなと気付く。次に活かそうと心に決める。そしてまた同じ過ちを繰り返していくわけだ。
まずは実装することだ。これが一番の早道だ。まずはがっつり結合した関数をあえて作るといい。何も考えずに作ろう。
そしてその後に、一部分使いまわしたいとおもうことがあるはずだ。その時に関数に切り出そう。それを繰り返すといい。そのうち初めから分けた方が良いと気付く。
何事も経験が必要である!経験を積まないプログラマは丸めてゴミ箱に捨ててしまえ。
さて、先の例で言うならば、私ならadd_result_outputという関数を作ってしまうだろう。だって、addとresultを連続して呼ぶのはめんどくさいんだもん。一連の流れをいつも使うのなら、その流れをやってくれる関数を作ればいいじゃないか。
function add_result_output ($iVar, $iVar2) { $r = add($iVar, $iVar2); echo result($r); }
もっと言えばクラス化してしまってもいいかもしれない。どんな感じになるかは君の手を動かして確認しよう!
このTipsはとてもわかりにくく、ニッチ過ぎる部分も多いかもしれない。
あくまでも「より良いPHPerにならないための20Tips」なのだ。
君はこの記事を鵜呑みにしてはならない。PHPをPHPと見抜けないPHPerはPHPを使うのは難しい。
もし、あなたがPHPプログラマなら、公式のPHPドキュメントはあなたのケツの穴を拭くための紙になるだろう。
私は、それぞれのセクションを眺めて、各関数でどんなことが出来るかなんぞ、歯クソのゴミ程に役に立たないとおもっている。動けばいい。はは。
あなたは、PHPで用意された既製関数で多くのことが実現できることに、(俺の仕事を減らすなと)驚くはずだ。
この記事があなたの役に立たない事を。
ふざけんな!
この記事に書かれている内容は、丸めてゴミ箱に捨てた方が良いレベルです。
覚書。
Internet Explorer8(64bit版ではない)にてGyaO!、Yahoo!ニュース、DMM等の動画サイトを閲覧するとブラウザがクラッシュする。
Internet Explorer は動作を停止しました
強制終了されるページはMicrosoft Silverlightプラグインを使用したもの。
障害が発生しているアプリケーション名: iexplore.exe、バージョン: 8.0.7600.16700、タイム スタンプ: 0x4cd23213
障害が発生しているモジュール名: getflash.dll、バージョン: 1.0.0.1、タイム スタンプ: 0x4506208e
例外コード: 0xc0000005
障害オフセット: 0x00008c40
障害が発生しているアプリケーションの開始時刻: 0x01cbbb667d383d68
障害が発生しているアプリケーション パス: C:\Program Files (x86)\Internet Explorer\iexplore.exe
FlashGet1.73をインストールしていたのだが、こいつとSilverlightの相性がわるいのか。
俺は悩んでいた。会社と家の往復に。何の刺激もなかった。
カッコいいこと言ってるが、その往復では出会いが単純にないからつまらない。会社の人間と恋愛なんかしても後が面倒だし、リスクがデカイ。
だから恋人探すなら外で探すと決めていた。しかし、なーんも行動しなかったら何も起こるわけない。当然だ。綺麗なお姉さんが俺に一目惚れして「好きです!付き合ってください!」なんてことは宝くじが当たるよりも低いと思う。それに最近ようやく気づいた。
でも外で探すってどうやったら・・。なんて考えていた。出会い系?なんかそれじゃ積極的に探してない気がした。
婚活パーティー?うーん、それも金払ってわざわざ出会いを探す!?なんか違うなー。
だからクラブとかBarに行って、女の子に声をかけよう!と思いついた。なんかハードル高い感じだけど、いきなりナンパよりは低いからやってやろう!と決意した。
しかし、お店に一人で行くことに違和感というか単純に「一人で行っても大丈夫なのかな?」と思っていた。ネットであれこれ調べて、知識武装をしまくった。2chで一人でBarに行く人みたいな内容があったので、「あ、そーゆー人間もいるのね」と安心してちょっと自信が湧いた。
いざ決行当日!仕事帰り。やっぱり当然怖い。わざわざ仕事帰りでスーツの格好で行くことには、理由があった。仕事帰りでちょっと立ち寄ったんですよー。的な雰囲気を醸し出したかったからだ。
そしてネットで調べたBarの前に来た。足がすくむ。若干震えていた。当然自分が知らない場所だから踏み込むのに相当の勇気がいった。しかし店の前をウロウロしてるだけじゃ始まらないので俺はBarに行ってみた。
当然俺は一見さん。Barのマスター的には「ん?一人?見ねぇ顔だな・・・」みたいな顔をしている。当然か・・。しかしそこで負けてはいけないと“Barに慣れてる”感を無理やり演出してみた。
「お勧めあります」
「・・いえ、お客様の好みが分かりかねますので・・」
くそっ、失敗か!?なんて色々考えつつとりあえずコロナとか頼んで黙ってじっとしていた。そんな俺にマスターがちょいちょい話しかけてくれた。なんで、一人なの?とかどこでウチの店しったの?とかまぁ、そんな質問。出会い求めてBarに来ました。とは言えなかったが。
出会い云々はいいとして、行動できた俺が若干誇らしかった。これで出会いがありゃ完璧なんだけどと思っていたその時・・
店のドアが開いて女が数人入ってきた!しかも若い!!おおっ!!スゲェ!!なんて心では思いつつクールを決めていた俺。「絶対話しかけてやる!」
最初は、何から話しかければ・・・と悩んでいたがマスター経由で色々話していたらあら不思議。なんかフツーに話せるようになった。マスターに心のなかで感謝した。そして番号ゲットまで出来た。
そして改めて、今思い返してみて、外へ出るってことは素晴らしい。家と会社の往復だけじゃ経験できない事が沢山ある。
そして、環境は作られるものじゃない、自分が作るんだなと勉強できた。大学入って、社会人になってというレールは、ある種自分で決めているようだけど、皆がそうするから自分もそうするというものに近い気がする。俺はそれを自分で環境を作ったとは思えない。流れに任せていたらここにたどり着いた的なね。
だから会社で女性がいなくて、「あー、この会社出会いがねぇわ。だから恋人もできねぇ!」なんて言っていた昔の自分に情け無さを感じた。自分で無理やりにでも環境を作って出会いを求める!そういう選択肢もあるんだなと。
そう考えればナンパ師ってのは、一瞬にして出会いがある環境を創りだす天才なんだなと。そこには当然失敗もあるだろうけど、ビビって動かない俺なんかよりは遥かに先を行ってる。50歩、いや100歩先を歩いてるだろうね。
まぁ、とりとめがないけどそんなこと思ったよ。
さてどこから消すか
http://blog.starplace.org/snapper-simple-snapping-safari-extension
http://blog.feedly.com/2010/06/10/feedly-for-safari-5/
http://danielbergey.com/software/safari_extensions.php
ページ内検索
http://danielbergey.com/software/safari_extensions.php
http://code.google.com/p/safari-googl-shortener/
iPhone&macで有名なtwitterクライアント
http://ozipto.com/?page_id=167
http://lifefrombelow.com/gmail-checker/
( ゚∀゚)
http://d.hatena.ne.jp/kotas/20100608/nicontroller
例を挙げたらきりがないけど
多いのは普段自分がいる社会(学校とかイベントとか会社とか)の人とネット上で話すこと。単にすれ違っていただけの関係から、話をする間柄になり、やがて付き合うことになったパターンが多い。俺は文系で大教室で授業を受けていると300人以上いたんだが、そうすると映画館の隣の客を付き合えるか?みたいなもので、顔は知っているけど話はしたことがないやつがたくさんいた。
はじめまして私は日本の大久保に住む大学院生の韓国人の男です。
バンクーバーオリンピックの女子のフィギィアスケートで韓日間に歴史に残る戦いがあったために両国間のネット住民の間で喧嘩がおこりました。
私は韓国人としてヨナの戦いを誇りに思います。
10代のアジア人の可弱い女性がヨーロッパや北米の選手を抑えて金メダルと銀メダルの偉業は感動しました。
私は大久保のスポーツ専門のBARのタムヤンで同じ韓国人留学生20人とヨナを応援していました。
金メダルの瞬間は皆大喜びでした。
それと同じくマオの戦いも皆たたえました。
私や日本に在住した留学生と同じように本国在住の韓国人も同じようにマオをたたえています。
マオがいたからヨナが強くなれたのです。
日本のBBSでは韓国人はマオが嫌いと書かれていますが大きな間違いです。
しかしマオよりもヨナが好きなのです。
ヨナが好きだから一番になって欲しいだけなのです。
それは日本人のみなさん誤解をしていないでほしいのです。
当たり前のことです。
しかしヨナを批判している日本人がいるのは残念です。
韓国人はマオをたたえているのに日本人はヨナを嫌うのはなぜというのでしょうか。
日本の掲示板をサーバーテロした韓国人は犯罪者であると韓国では批判しています。
しかし彼らがサーバーテロする理由は日本人がヨナを嫌ったからです。
彼らは犯罪者といいいますが、同じく彼らはヨナを守る強い男性なのです。
彼らは逮捕されるべきで、しかし同じくヨナを嫌った日本人も逮捕されるべきです。
そうすれば韓日の友情はまた深まります。
政治や経済やスポーツなどたくさんのところで韓国に勝ちたがりますが韓国も負けたくないのです。
私は日本が好きなのでここにこう書こうと決めました。
gcc-4.5 から link time optimization (lto) と呼ばれる最適化が可能になった。
従来の分割コンパイルでは、コンパイル単位(ファイル)での最適化しかできなかった。例えば、別ファイルの関数をインライン展開することはできないし、引数に渡されたポインタの escape analysis も諦めざるを得なかった。
lto はコンパイルする時に、中間表現(GIMPLEのバイトコード表現)をオブジェクトファイルに残しておき、リンクするときに、すべての中間表現を使って最適化しなおす。要は、ソースコードを全部とっておいて、最後に全部をコンパイルしなおすのと、同じようなものだ。
最大の欠点は、最後にコンパイルしなおすところだ。
このコンパイルは一回のコンパイルであり、単一プロセスで実装されているのでマルチCPUを生かせない。(いっぽう、分割コンパイルなら依存関係が緩いので並列化しやすい。)また、プログラム全体は巨大であり、最適化するのに時間がかかる。
使いかたは簡単だ。-fltoを付ければいい。
gcc-4.5 -c -O2 -flto foo.c
元ネタ http://phpspot.org/blog/archives/2009/12/phpjavascriptph_1.html
面白そうだと思ったので僕もやってみた。モジュールはPerl5.8系の標準モジュールのみ利用可という制限。
全部はキツイので関数処理関係の関数(http://php.benscom.com/manual/ja/ref.funchand.php)だけ実装してみた。
use strict; use warnings; =head2 call_user_func $ret = call_user_func($function,@param); $ret = call_user_func([$class,$method],@param); example1 sub plus { $_[0] + $_[1] } print call_user_func('plus',10,20); # 30 example2 package Foo; sub plus { $_[1] + $_[2] } package main; print call_user_func(['Foo','plus'],10,20); # 30 =cut sub call_user_func { my $proto = shift; if ( ref $proto eq 'ARRAY' ) { return $$proto[0]->${\$$proto[1]}(@_); } else { require Pod::Functions; if ( $Pod::Functions::Flavor{$proto} ) { return eval qq{$proto(\@_)}; } else { no strict 'refs'; return $proto->(@_); } } } =head2 call_user_func_array $ret = call_user_func_array($function,\@param); $ret = call_user_func_array([$class,$method],\@param); example sub plus { $_[0] + $_[1] } print call_user_func_array('plus',[10,20]); # 30 =cut sub call_user_func_array { return call_user_func(shift,@{+shift}); } =head2 create_function $code = create_function($args_str,$code_str); example $code = create_function('$c,$d=1','print $c+$d'); $code->(10); # 11 =cut sub create_function { my $args = shift; my $code = shift; my $default = 0; my @args = split /,/,$args; my $code_str = 'sub {'; for my $arg (@args) { if ( $arg =~ /^\s*(\$[a-zA-Z][\w]*)\s*(?:=\s*(.+))?\s*$/ ) { my $val = $1; my $def = $2; if ( defined $def ) { $default = 1; $code_str .= qq{my $val = \@_ ? shift : $def;\n}; } else { die 'parse error' if $default; $code_str .= qq{my $val = shift;\n}; } } } $code_str .= $code . '}'; my $sub = eval $code_str; die $@ if $@; return $sub; } =head2 forward_static_call $ret = forward_static_call($function,@param); $ret = forward_static_call([$class,$method],@param); =cut sub forward_static_call { call_user_func(@_); } =head2 forward_static_call_array $ret = forward_static_call_array($function,\@param); $ret = forward_static_call_array([$class,$method],\@param); =cut sub forward_static_call_array { call_user_func_array(@_); } =head2 func_get_arg $arg = func_get_arg($no) example sub foo { print func_get_arg(1) } foo(100,200); # 200 =cut sub func_get_arg { my $n = shift; package DB; @DB::args = (); () = caller(1); return defined $DB::args[$n] ? $DB::args[$n] : undef; } =head2 func_get_args @args = func_get_args() example sub foo { print join ':', func_get_args() } foo(11,22,33); # 11:22:33 =cut sub func_get_args { my $n = shift; package DB; @DB::args = (); () = caller(1); return @DB::args; } =head2 func_num_args $arg_count = func_num_args() example sub foo { print func_num_args() } foo(11,22,33); # 3 =cut sub func_num_args { my $n = shift; package DB; @DB::args = (); () = caller(1); return scalar @DB::args; } =head2 function_exists $bool = function_exists($func) example sub foo {} print function_exists('foo'); # 1 print function_exists('bar'); # 0 print function_exists('rand'); # 1 =cut sub function_exists { my $func = shift; return 1 if exists &$func; require Pod::Functions; return $Pod::Functions::Flavor{$func} ? 1 : 0; } =head2 get_defined_functions $funcs = get_defined_functions() =cut sub get_defined_functions { require Pod::Functions; return { internal => [ keys %Pod::Functions::Flavor ], user => [ grep { exists &$_ } keys %:: ], }; } =head2 register_shutdown_function register_shutdown_function($func,@param); register_shutdown_function([$class,$method],@param); =cut { my $REGISTER_SHUTDOWN_FUNCTION = []; sub register_shutdown_function { my $proto = shift; push @$REGISTER_SHUTDOWN_FUNCTION, [ do { if ( ref $proto eq 'ARRAY' ) { $$proto[0]->can($$proto[1]); } else { require Pod::Functions; if ( $Pod::Functions::Flavor{$proto} ) { sub { eval qq{$proto(\@_)} }; } else { no strict 'refs'; \&$proto; } } }, [@_] ] } END { $_->[0]->(@{$_->[1]}) for @$REGISTER_SHUTDOWN_FUNCTION; } }
思ったよりも難しかった。標準関数一覧を取る手段がなかったので標準モジュールを利用して標準関数の一覧を取得した。
あと文字列から標準関数を呼び出すスマートな手段が思いつかなかったのでeval便りに。
create_functionはかなりゴリ押し。myを勝手に付けたりデフォルト引数にも対応してたり細かい芸が光る(自分で言うな)
forward_static_callはぶっちゃけPerl的にcall_user_funcと殆ど処理が変わらないのでそのまま利用。
func_get_arg系は結構クリティカルだなー。@DB::argsをリアルに使ったの初めてだよ。
register_shutdown_functionはちょっとねー。ENDブロックを利用してるわけなんだけど当然mod_perlとかではうまく動かない。あとシグナルとか使った方が良いのかもしれない。
ヒマがあったら他の関数とかも実装してみたいかも。
450 :名無しの心子知らず:2009/11/05(木) 18:15:06 ID:IkeOreMy
»275
すっごい遅いレスで申し訳ないが、マジかよと思って調べたら
東京の六本木が麻薬危険地帯に指定されてるんだな、ぶっ飛んだ。
この危険地帯指定って、いわゆる暴動やら戦争やらでやばい国に旅行者が行かないようする為のものなんだよね。
Americans told to avoid Tokyo bar district after spate of robberies
http://www.guardian.co.uk/world/2009/mar/18/us-embassy-tokyo-warning
(Guardian: 18 March 2009)
そしてこう続く
“米大使館に先立って、英国とオーストラリアの大使館が同様の警告を出していた。”
「薬物で意識不明にさせ高額請求」、外国人ねらい六本木で急増 米大使館警告(AFP通信)
http://www.afpbb.com/article/disaster-accidents-crime/crime/2583516/3929658
http://www.google.co.jp/search?hl=ja&q=US+Embassy+warns+Roppongi
http://en.wikipedia.org/wiki/Roppongi#Nightlife_in_Roppongi
C=28歳男性。Aと同い年で友達。いいヤツ。Bの先輩。
D=22歳男性。和ませキャラだが、若干笑われキャラも入っている。
E=22歳女性。
AとB:Cを介して知り合い、店で隣席になれば話しをするようになり、2回ほど2人で晩ご飯を食べに行ったことがあるという関係
ある時、DくんがEちゃんに告白してフラれた。
EちゃんはそれまでDくんに思わせぶりな態度をとっていたため、この顛末を知っている関係者は「あーあ…(可哀想…)」「相手が悪かったね」「全力でDくんをはげまそう」という反応だった。
ところが、その直後くらいから、BARの店内でちょくちょくEちゃんがBくんにしなだれかかったり、ソファー席で膝枕したり、いちゃつくようになる。しかもDくんがいてもおかまいなし。
この件を知っている一部の人はEちゃんに対して好意的な見方をしなくなったし、Eちゃんは他のコミュニティでもいわゆるサークルクラッシャー的な行動をしてて「あの子には気をつけた方がいいよ」と言われているというような噂が流れた。
しかし私が驚いたのは、Bくんが、DくんとEちゃんの間の顛末を知りつつ、Eちゃんがいちゃいちゃしてくるのを受け入れていたということ。
そこである日、Bくんと帰り道が一緒になった時に「2人はつきあってるの?」と聞いた。
そしてBくんが「友達だよー」と言うので、「せめてDくんがいるところでは控えたほうがいいんじゃない?」とつい言ってしまった(これがお節介)。
これに対してBくんは「うーん、でもEちゃんも寂しいんだよねー、きっと。僕もわかるからさー」と言った。
勝手な話だが、このひとことはBくんへの私の評価を暴落させるに十分だった。
その後、私はBくんと距離をとり、疎遠になった。
それから約1年経ったこの間、人づてに「BはA(=私)にフラれてからチャラくなった」とCさんが言ってたのを聞いた。
そういえば、Cさんは上の顛末を全然知らないからなー。
Bくんとはつきあってもいないし、Bくんに好きだ、とか、つきあって欲しい、とか、それらしきことは一度も言われたことがなかった。
しかし、よりによって私に振られたからチャラくなったとは…。
かなり心外。
その前からチャラかったじゃん!というのもあるし、もう今となっては弁解することもできない。
弁解するためには、上の事情を全部言わなければならない。
それにしても心外だ!!!
↓
<style type="text/css">dt{float:left;clear:left;width:10em;}</style>
<meta content="charset=Shift_JIS"/>
<script type="text/javascript"></p> <p>window.onload = init;</p> <p>var url = [</p> <p> "<a href="http://www.senkyo.metro.tokyo.jp/h19sangiin/san_kekka/h19san_hkai.html">http://www.senkyo.metro.tokyo.jp/h19sangiin/san_kekka/h19san_hkai.html</a>",</p> <p> "<a href="http://www.senkyo.metro.tokyo.jp/h17shugiin/sokuhou/7kaijyo_s.htm">http://www.senkyo.metro.tokyo.jp/h17shugiin/sokuhou/7kaijyo_s.htm</a>",</p> <p> "<a href="http://www.senkyo.metro.tokyo.jp/h17togisen/sokuhou/2kaijyo_s.htm">http://www.senkyo.metro.tokyo.jp/h17togisen/sokuhou/2kaijyo_s.htm</a>",</p> <p> "<a href="http://www.senkyo.metro.tokyo.jp/data/h16san_hkai.html">http://www.senkyo.metro.tokyo.jp/data/h16san_hkai.html</a>",</p> <p> "<a href="http://www.senkyo.metro.tokyo.jp/data/h15shu_hkai.html">http://www.senkyo.metro.tokyo.jp/data/h15shu_hkai.html</a>",</p> <p> "<a href="http://www.senkyo.metro.tokyo.jp/data/data01_01_03.html">http://www.senkyo.metro.tokyo.jp/data/data01_01_03.html</a>",</p> <p> "<a href="http://www.senkyo.metro.tokyo.jp/data/data01_02_05.html">http://www.senkyo.metro.tokyo.jp/data/data01_02_05.html</a>",</p> <p> "<a href="http://www.senkyo.metro.tokyo.jp/data/data03_04.html">http://www.senkyo.metro.tokyo.jp/data/data03_04.html</a>",</p> <p> "<a href="http://www.senkyo.metro.tokyo.jp/data/data01_05_05.html">http://www.senkyo.metro.tokyo.jp/data/data01_05_05.html</a>"</p> <p>];</p> <p>var base = "<a href="http://www.senkyo.metro.tokyo.jp/data/tokuhyo_23ku/">http://www.senkyo.metro.tokyo.jp/data/tokuhyo_23ku/</a>";</p> <p>var file = ["chiyoda","chuou","minato","shinjyuku","bunkyo",</p> <p> "taitho","sumida","koutho","sinagawa","meguro",</p> <p> "ohta","setagaya","shibuya","nakaono","suginami",</p> <p> "toshima","kita","arakawa","itabashi","nerima",</p> <p> "adachi","katushika","edogawa"];</p> <p>for(var i=0; i<23; i++){</p> <p> url.push(base + file[i] + "\.html");</p> <p>}</p> <p>var id = [</p> <p> "2007 参院比", "2005 衆院比", "2005 都議会", "2004 参院比", "2003 衆院比",</p> <p> "2001 参院比", "2001 都議会", "2000 衆院比", "1998 参院比", "1997 都議会"</p> <p>];</p> <p>var ku = [</p> <p> "千代田","中央","港","新宿","文京",</p> <p> "台東","墨田","江東","品川","目黒",</p> <p> "大田","世田谷","渋谷","中野","杉並",</p> <p> "豊島","北","荒川","板橋","練馬",</p> <p> "足立","葛飾","江戸川"</p> <p>];</p> <p>var regexku = new RegExp("(" + ku.join("|") + ")区");</p> <p>var iframe = [];</p> <p>var data = {};</p> <p>var parse = [ function(){</p> <p> var d = iframe[0].contentWindow.document;</p> <p> var td = d.getElementsByTagName("td");</p> <p> for(var i=0, l=td.length; i<l; i++){</p> <p> if(regexku.test(td[i].firstChild.nodeValue)){</p> <p> for(var j=0, e=td[i]; j<10; j++){</p> <p> e = e.nextSibling;</p> <p> }</p> <p> data[RegExp.$1 + "0"] = e.firstChild.firstChild.nodeValue.replace(/\.\d+/,"");</p> <p> }</p> <p> }</p> <p> show();</p> <p>}, function(){</p> <p> var d = iframe[1].contentWindow.document;</p> <p> var nobr = d.getElementsByTagName("nobr");</p> <p> for(var i=0, l=nobr.length; i<l; i++){</p> <p> if(regexku.test(nobr[i].firstChild.nodeValue)){</p> <p> for(var j=0, e=nobr[i].parentNode; j<4; j++){</p> <p> e = e.nextSibling;</p> <p> }</p> <p> data[RegExp.$1 + "1"] = e.firstChild.nodeValue;</p> <p> }</p> <p> }</p> <p> show();</p> <p>}, function(){</p> <p> var d = iframe[2].contentWindow.document;</p> <p> var nobr = d.getElementsByTagName("nobr");</p> <p> for(var i=0, l=nobr.length; i<l; i++){</p> <p> if(regexku.test(nobr[i].firstChild.nodeValue) && nobr[i].parentNode.tagName == "SPAN"){</p> <p> for(var j=0, e=nobr[i]; j<6; j++){</p> <p> e = e.parentNode;</p> <p> }</p> <p> var e2 = e.nextSibling.nextSibling.firstChild.childNodes[2].firstChild;</p> <p> var k = 0;</p> <p> data[RegExp.$1 + "2"] = 0;</p> <p> while(e2){</p> <p> if(e2.firstChild.firstChild.nodeValue.indexOf("公明党") != -1){</p> <p> data[RegExp.$1 + "2"] += parseInt(e2.parentNode.nextSibling.childNodes[k+2].firstChild.nodeValue.replace(",",""), 10);</p> <p> }</p> <p> e2 = e2.nextSibling;</p> <p> k++;</p> <p> }</p> <p> data[RegExp.$1 + "2"] = int2str(data[RegExp.$1 + "2"]);</p> <p> }</p> <p> }</p> <p> show();</p> <p>}, function(){</p> <p> var d = iframe[3].contentWindow.document;</p> <p> var td = d.getElementsByTagName("td");</p> <p> for(var i=0, l=td.length; i<l; i++){</p> <p> if(regexku.test(td[i].firstChild.nodeValue)){</p> <p> for(var j=0, e=td[i]; j<19; j++){</p> <p> e = e.nextSibling;</p> <p> }</p> <p> data[RegExp.$1 + "3"] = e.firstChild.firstChild.nodeValue.replace(/\.\d+/,"");</p> <p> }</p> <p> }</p> <p> show();</p> <p>}, function(){</p> <p> var d = iframe[4].contentWindow.document;</p> <p> var td = d.getElementsByTagName("td");</p> <p> var regexku2 = /(大田|世田谷|練馬|足立|江戸川)/;</p> <p> for(var i=0, l=td.length; i<l; i++){</p> <p> if(regexku.test(td[i].firstChild.nodeValue)){</p> <p> data[RegExp.$1 + "4"] = td[i].nextSibling.nextSibling.firstChild.nodeValue.replace(/\.\d+/,"");</p> <p> continue;</p> <p> }</p> <p> if(regexku2.test(td[i].firstChild.nodeValue)){</p> <p> data[RegExp.$1 + "4"] = (data[RegExp.$1 + "4"] || 0) </p> <p> + parseInt(td[i].nextSibling.nextSibling.firstChild.nodeValue.replace(",","").replace(/\.\d+/,""));</p> <p> }</p> <p> }</p> <p> for(var j=0; j<5; j++){</p> <p> data[ku[[10,11,19,20,22][j]]+"4"] = int2str(data[ku[[10,11,19,20,22][j]]+"4"]);</p> <p> }</p> <p> show();</p> <p>}, function(){</p> <p> var d = iframe[5].contentWindow.document;</p> <p> var td = d.getElementsByTagName("td");</p> <p> for(var i=0, l=td.length; i<l; i++){</p> <p> if(regexku.test(td[i].firstChild.firstChild.nodeValue)){</p> <p> for(var j=0, e=td[i]; j<10; j++){</p> <p> e = e.nextSibling;</p> <p> }</p> <p> data[RegExp.$1 + "5"] = e.firstChild.firstChild.nodeValue.replace(/\.\d+/,"");</p> <p> }</p> <p> }</p> <p> show();</p> <p>}, function(){</p> <p> var d = iframe[6].contentWindow.document;</p> <p> var td = d.getElementsByTagName("td");</p> <p> for(var i=0, l=td.length; i<l; i++){</p> <p> if(regexku.test(td[i].firstChild.firstChild.nodeValue)){</p> <p> for(var j=0, e=td[i]; j<7; j++){</p> <p> e = e.nextSibling;</p> <p> }</p> <p> data[RegExp.$1 + "6"] = e.firstChild.firstChild.nodeValue.replace(/\.\d+/,"").replace("-","0");</p> <p> }</p> <p> }</p> <p> show();</p> <p>}, function(){</p> <p> var d = iframe[7].contentWindow.document;</p> <p> var td = d.getElementsByTagName("td");</p> <p> for(var i=0, l=td.length; i<l; i++){</p> <p> if(regexku.test(td[i].firstChild.firstChild.nodeValue)){</p> <p> for(var j=0, e=td[i]; j<9; j++){</p> <p> e = e.nextSibling;</p> <p> }</p> <p> data[RegExp.$1 + "7"] = e.firstChild.firstChild.nodeValue;</p> <p> }</p> <p> }</p> <p> show();</p> <p>}, function(){</p> <p> var d = iframe[8].contentWindow.document;</p> <p> var td = d.getElementsByTagName("td");</p> <p> for(var i=0, l=td.length; i<l; i++){</p> <p> if(regexku.test(td[i].firstChild.firstChild.nodeValue)){</p> <p> data[RegExp.$1 + "8"] = int2str(td[i].nextSibling.firstChild.firstChild.firstChild.nodeValue);</p> <p> }</p> <p> }</p> <p> show();</p> <p>}, function(n){ return function(){</p> <p> var d = iframe[n+9].contentWindow.document;</p> <p> var td = d.getElementsByTagName("td");</p> <p> data[ku[n]+"9"] = 0;</p> <p> for(var i=0, l=td.length; i<l; i++){</p> <p> if((((td[i].firstChild || 0).firstChild || 0).nodeValue || "").indexOf("公明") == 0){</p> <p> data[ku[n]+"9"] += parseInt(td[i].parentNode.lastChild.firstChild.firstChild.nodeValue.replace(",",""));</p> <p> }</p> <p> }</p> <p> data[ku[n]+"9"] = int2str(data[ku[n]+"9"]);</p> <p> show();</p> <p>}}];</p> <p>function init(){</p> <p> for(var i=0; i<23; i++){</p> <p> var dl = document.createElement("dl");</p> <p> dl.appendChild(document.createTextNode("\n【" + ku[i] + "区における公明票】\n"));</p> <p> for(var j=0; j<10; j++){</p> <p> var dt = document.createElement("dt");</p> <p> var dd = document.createElement("dd");</p> <p> dt.innerText = id[j];</p> <p> dl.appendChild(dt);</p> <p> dl.appendChild(dd);</p> <p> }</p> <p> document.body.firstChild.appendChild(dl);</p> <p> }</p> <p> for(var i=0; i<32; i++){</p> <p> var e = document.createElement("iframe");</p> <p> iframe[i] = e;</p> <p> e.style.display = "none";</p> <p> if(i<9) var f = parse[i];</p> <p> else var f = parse[9](i-9);</p> <p> e.attachEvent("onload", f);</p> <p> e.src = url[i];</p> <p> document.body.appendChild(e);</p> <p> }</p> <p>}</p> <p>function show(){</p> <p> for(var i=0; i<23; i++){</p> <p> var dl = document.body.firstChild.childNodes[i];</p> <p> for(var j=0; j<10; j++){</p> <p> var dt = dl.childNodes[j*2+1];</p> <p> dt.innerText = id[j] + " " + (data[ku[i]+j] || "");</p> <p> dt.nextSibling.innerText = bar(data[ku[i]+j], j);</p> <p> }</p> <p> }</p> <p>}</p> <p>function int2str(num){</p> <p> return new String(num).split("").reverse().join("").replace(/(\d{3})/g,"$1,").split("").reverse().join("");</p> <p>}</p> <p>function bar(str, flag){</p> <p> str = str || "";</p> <p> if(str == "" || str.length < 5) return "";</p> <p> var num = parseInt(str.match(/\d+/)) + 1;</p> <p> var arrow = (flag == 2 || flag == 6 || flag == 9) ? " ←" : "";</p> <p> var _bar = new Array(num).join("|") + arrow;</p> <p> return _bar;</p> <p>}</p> <p></script>
Science and Pseudo-Science (Stanford Encyclopedia of Philosophy)
http://plato.stanford.edu/entries/pseudo-science/
Meditating on consciousness : Article : Nature
http://www.nature.com/nature/journal/v456/n7219/abs/456170a.html
Dalai Lama gets go-ahead for meditation lecture : Nature
http://www.nature.com/nature/journal/v436/n7054/abs/4361071b.html
Science and religion in harmony : Nature
http://www.nature.com/nature/journal/v436/n7053/abs/436889a.html
Buddhism is no bar to an open mind. Is science? : Nature
http://www.nature.com/nature/journal/v436/n7053/abs/436912a.html
Religion and ScienceBuddhism on the brain : Article : Nature
http://www.nature.com/nature/journal/v432/n7018/abs/432670a.html