Windows7 でApache が起動できない場合 PID=4 System …

ほとんどの原因が、既に80番ポートを使用している場合だと思います。で、犯人のほとんどは Skype であるはず。ところが、原因がわからず困ってしまった場合...

apache_start.bat を実行するとこんなエラーが出ます。

make_sock: could not bind to address 0.0.0.0:80

コマンドプロンプトで

netstat -oan

とすると、80番ポートを使用しているPIDが分かります。
タスクマネージャーを起動し、該当のプログラムを確認し犯人を特定、停止する。(PIDが表示されていない場合は、表示メニューからPIDを追加)

これが常套手段ですが、今回の場合、PID=4 System 説明:NT Kernel&System ・・・さすがにこれは止められそうにありません。

Google先生にお伺いを立てると、原因の候補は次の通り。

  • Web Deployment Agent Service
  • SQL Server Reporting Service
  • Windows Remote Management
  • BranchCache

使用していないことを確認し、該当サービスを停止。80番ポートが使えるようになりました。

正規表現の文字列否定 例外付きの置換

.net framework 上での文字列置換です。

やりたいこと

| はマッチして欲しいけど、[|] はマッチして欲しくない。

答え

(?<!\[)\|(?!\])

文字列否定は結構厄介と、Google先生もおっしゃっていました。行錯誤の結果たどり着いた答え。.net framework では、ゼロ幅の否定的先読みアサーション、ゼロ幅の否定的後読みアサーション が使えます。このキーワードで検索してみてください。

参考

(?<!  ) 直前にこのパターンが現れないことを確認する
(?!   ) 直後にこのパターンが現れないことを確認する

SQLServer float の怪

SQLServer 2005, 2008 で確認。なんということでしょう!!  🙁

select cast(cast(55 as float) / cast(100 as float) * cast(100 as float) as int)
--> 55
select cast(cast(56 as float) / cast(100 as float) * cast(100 as float) as int)
--> 56
select cast(cast(57 as float) / cast(100 as float) * cast(100 as float) as int)
--> 56 なぬっ!?
select cast(cast(58 as float) / cast(100 as float) * cast(100 as float) as int)
--> 57 なぬっ!? 
select cast(cast(59 as float) / cast(100 as float) * cast(100 as float) as int)
--> 59
select cast(cast(60 as float) / cast(100 as float) * cast(100 as float) as int)
--> 60

最後にcast as int で丸めなければ期待通りの結果です。

結論!丸める可能性がある場合はfloatを使わない。