居眠りプログラマの休憩所

へっぽこSIerなプログラマが書き起こす日記です。

xamppの設定に苦しめられた件

今日の業務中にxamppでlocalhostに繋ごうとしたら、503が出て死にました。
忘れないために書いておこうと思います。

とりあえず、xampp(というかlocalhost)でよくあるエラーをまとめてきます。

ポートの占有

大抵はこれ(多分)
skype入れてる人は要注意(skypeの設定に『追加の受信接続にポート80と443を使用』とかいう需要があるのかよくわからないチェック項目があるため)
他にもポート80を使うアプリ入れてる人は注意しましょう。

試しに上記で上げたskypeの例で試してみたいと思います。
コマンドプロンプトを起動して、netstat -ano*1でポートが使われているか確認します。

f:id:hayahina82:20170314223059p:plain
↑の場合はポート80がPID14880のプロセスに使われています。
※長すぎて見えない!! という方はコマンドプロンプトのプロパティから画面バッファーの高さを長めに設定してみましょう。

次に、tasklist /svc /fi "PID eq 14880"*2でPID14880のプロセス名を突き止めます。
f:id:hayahina82:20170314224425p:plain
想定通りですが、skype.exeが使っています。
※イメージ名を見れば大抵わかると思いますがわからないものだったらググってね

この例での対処は単純でskypeの『追加の受信接続に(以下略)』のチェックを外せばよいだけです。
ほかのアプリの場合は設定でいじれるのなら、設定で回避するのが一番だと思います。
できないときは仕方がありません。タスクを終了させましょう。
ポートの占有の対処はこれで完了です。

hostsファイル

結果から言うと、これと後述するもう一つが原因でした。
C:\Windows\System32\Drivers\etc\hosts というファイルがおかしい場合です。
では、見てみます。

#	127.0.0.1       localhost

……おや?(実際に起きた事例です)
状況がつかめない方のために言うと、コメントアウトされています。

対処としてはコメントアウトを解くだけでいいです。
ないとは思いますが、削除されていた場合は上述の#を除いたコードを記述しましょう。

原因ですが、適当に調べたところWindowsUpdateでこうなることがあるらしいです。なぜだ……。

ファイアウォール

なんでお前が来るんだよっ!
体験してないため実感はわきませんが、割とあるそうです。
本当にざっくりですが紹介しておきます。

結論から言います。
アンチウイルスソフトが邪魔してます。
ファイアウォールの設定からポートを開放しましょう。

proxy

これでした。
悲しくなりました。
業務で使うPCの場合、引っかかる場合があります。
プロキシ通したらそりゃつながりませんよね……。

対処法
Win10の場合
Windowsの設定からネットワークとインターネット.プロキシの設定画面に入ります。
f:id:hayahina82:20170314233047p:plain
プロキシのアドレス云々の入力フォームの下に『ローカル(イントラネット)のアドレスにはプロキシ サーバーを使わない』というチェックボックスがあります。こちらにチェックを入れて保存するだけです。

Win7の場合

  1. IEのインターネットオプションを出す
  2. 接続タブからLANの設定
  3. ローカルアドレスにはプロキシ サーバーを使わない的なチェックボックスがあるのでチェックをつける

これで503の人は状況が変わります。



大きな項目でいうと、この程度だと思います。
ほかにも、Apache自体の設定がおかしかったりする場合があるらしいんですが、自分でいじらなければ出ることはないと思います。


以下参考
www.cherrypieweb.com
colors1314.blog68.fc2.com
blog.verygoodtown.com

*1:-a: 接続を表示, -n: IPアドレス・ポート番号を表示, -o: プロセスを表示

*2:/SVC: プロセスのサービスを表示, /fi: フィルタ

オセロ

Twitterを見ている方はご存知かもしれませんが、現在進行形でHTMLとJavaScriptでオセロを作っております。一応長くやっていく企画です(オセロだけじゃなく、フリゲ集みたいになっていきます)。詳細を詰めてないので、UIの部分がすかすかになっておりますが。

今作っているのは取っ掛かりの部分で、ただ単にオセロというゲームをするのに必要な機能を詰めている段階です。(ひっくり返す処理、勝敗判定等)
これから先、CPU対戦やオンライン対戦といった機能を拡大していく予定ではあります。(オンライン対戦は鯖事情もあるので大分先になりますが)


では、なぜオセロを作ろうかと思ったかという話に入るのですが、理由は2つあります。
1つ目は自分がオセロに限らずボードゲームが好きで、オセロは数あるボードゲームの中でも単純なロジックで動くものだからというものです。将棋とかも好きなんですけどね。持ち駒のロジックに悩んでしまう。
2つ目は簡単な話、何でもいいのでプログラムを自力で1つ完成させたかったという思いからです。ぶっちゃけた話、自分は1人で1つのプログラムを完成させたことないです。学生時代に作ったもの(卒業課題ではチェスもどきを作ってたり)はバグが多く、とても完成したとは言えないものでした。業務で作っているものはどうなのかというと、確かに完成はしているのでしょうが、部分部分を変えているだけで実装しているので、どうにも自分で作成した感覚が薄いのです。業務的に微妙に問題かもしれないですけど。まあ、そんな感じでなにか作ってみようと思って始めたのが本企画になります。

近日中に、ソースの一部を記事としてあげる予定です。よければレビューをお願いします。致命的なバグは……ないといいなぁ……。

DataTable→List<T>(C#)

DataTableからList<T>への変換法です。

いつも忘れて調べる羽目になっているので、自分用にメモっておきます。

 

一口にDataTableからListに変換するといっても方法は色々あるんですが、ぼくは大抵の場合リフレクションを使ってます。なんかパフォーマンス的には良いらしいです。詳しいパフォーマンスを知りたい方は御自分でベンチマークしてください。

実装方法を忘れた+実装するほどのやる気がない場合はforeachで回します。どう考えても怠惰&怠惰です。

 

gistc2cef2ffa184b08b189ddf6c2ae504c7

 

多分少し調べるとやり方としては全く同じ方法を使ってる方もいる、はずです。というか、参考(という名目でパクった)記事があったはずなので。

匿名メソッド式にしていない理由は特にありません。変えても全く支障はありません。

 

VB.NETでもこれだけ楽に書けるといいんですけどねぇ。

現在方法模索中です。

なんかすっきりした方法を書けるようになったら別記事で上げます。