2012/06/29
ローカルPCでApacheが起動しなくなったので調べてみた

わけあって、ローカルPC上でApacheを起動しないといけなかったのですが、80ポートがバインドできず、起動できなかったので、原因を調べてみました。
たまにしかこんな作業しないので、備忘録のため、エントリーしておきます。

ポートを調べるといったら、確かnetstatコマンドだったか、というあいまいな記憶をもとにググったところ、
以下のサイトに行き当たり、参考にさせていただきました。

http://www.wa.commufa.jp/~exd/contents/internet_security/020.html

まず、コマンドプロンプトから、「netstat -ano」と入力します。
すると、PID:188のプロセスがポート80を使っていることがわかりました。



次に、タスクマネージャを起動し、プロセスタブを選択した上で、「表示」→「列の選択」→「PID (プロセス ID)」にチェックをつけます。


プロセスIDで並べ替えをし、188を探すと、Skype.exeが該当することがわかりました。
そういえば、昨日久しぶりにSkypeをインストールしたんだった。


Skypeのメニューから「ツール」→「設定」と選び、「詳細」の「接続」タブを選択すると、
「上記のポートに代わり、ポート80を使用」というチェックボックスにチェックが入っていることを発見。
このチェックをはずし、Skypeを再起動すると、ポート80が使われなくなり、無事Apacheを起動することができました。


なぜこの設定がデフォルトになっているのか・・・ よくわかりませんが、さしあたり問題はないようなので、良いこととします。


2011/07/22
chmod するときのパーミッション値を計算するツールを作成してみた

ファイルのパーミッションを変えるのに、chmod するとき、オーナーだけに実行権限を与えたいんだけど、パーミッションの値を考えるのが面倒でついchmod +x hogehoge とかやってしまいがちですよね。(僕だけ?)

で、ふと思いついてjavascriptでちょちょっと作ってみました。

http://www.easy-small-world.com/chmod.html

チェックボックスを入れていくと、000~777の8進数のパーミッション値を作ってくれます。
また、テキストボックスに直接数字を入れると、チェックボックスのほうをその値に合わせてつけたりはずしたりします。
FFFTPの属性変更するダイアログっぽいですが、それはそのダイアログを見ながら作ったからです(笑)

発表するほどのものでもないですが、せっかく作ったので後で自分で使えるように置いておくことにします。


2010/07/15
Thunderbirdのアドレス送信前確認プラグイン Confirm-Address のバグを勝手にFixしてみる。

注意:現在、このエントリーで書いた不具合は解消されています。 こちらから最新バージョンをダウンロードされることをおすすめします。


Thunderbirdのプラグインで、メールを送信する前に送信先を確認することができる、
Confirm-Addressというのがあるのですが、Thunderbird2で使っていたときは何も問題なく使えていたのが、Thunderbird3になっていくつか不具合があり、対応されるのを待っていたのですが、半年以上放置されているようなので、それならばと自分で不具合を修正してみました。

Thunderbirdのプラグインは全く作ったことがなかったのですが、xpiファイルがただのzipファイルらしいことと、動作の制御部分は全部javascriptで書かれてあるらしいということがドキュメントを読んでわかったので、ちゃちゃっと挑戦してみました。

※なお、以下の方法でご自分の環境に適用される場合は自己責任でお願いします。
 万が一Thunderbirdが壊れてしまっても責任は負えません。(ないとは思いますが)

■xpiファイルを解凍する

上に書いたように、xpiファイルはただのzipファイルなので、ダウンロードしたconfirm-address-1.2.3-tb.xpiを 適当なファイル圧縮・解凍ソフトで解凍します。 すると、以下のファイルとフォルダが現れます。

chrome
lisense
chrome.manifest
install.rdf

chromeフォルダの下にプラグインを制御するための各種UIのファイルとJavaScriptのファイルがあります。

■組織内へのメールに全部チェックを入れるチェックボックスが効かない不具合の修正

chromeフォルダの下のconfirm-address-dialog.jsの109行目を修正します。

修正前:
var isCheck = !checkAll.checked;

修正後:
var isCheck = checkAll.checked;

チェックボックスのonClickイベントを拾って、チェックされているかを取得しているようなのですが、クリックしたことによってチェック状態が反転しているため、元のコードだと、逆になってしまい、うまく動いていなかったようです。

■Ctrl + Enter でメールを送信しようとした場合に、メールが送信されない不具合を修正

chromeフォルダの下のconfirm-address-overlay.jsを修正します。 普段、Ctrl + Enterのショートカットキーでメールを送信していたので、このショートカットキーが使えないのは結構なストレスでした。

ここでは、既存のメール送信制御をオーバーライドしているようなのですが、Thunderbird2から3に変わったときにここの実装が変わってしまったようで、新しい実装が取り込めていないようなので、オーバーライド元のソースから実装をコピペしました。
confirm-address-overlay.jsのソースを全部載せます。

//overlay
//C:\Program Files\Mozilla Thunderbird\chrome\messenger\content\messenger\messengercompose\MsgComposeCommands.js
function SendMessage()
{
	//add start
	if(!ConfirmAddress.checkAddress()){
		return;
	}
	//add end
/* //ここをコメントアウト
  dump("SendMessage from XUL\n");
  GenericSendMessage(nsIMsgCompDeliverMode.Now);
*/
  //ここから下を追加
  let sendInBackground =
    Components.classes["@mozilla.org/preferences-service;1"]
              .getService(Components.interfaces.nsIPrefBranch)
              .getBoolPref("mailnews.sendInBackground");

GenericSendMessage(sendInBackground ?
nsIMsgCompDeliverMode.Background :
nsIMsgCompDeliverMode.Now);
//追加ここまで
}

//overlay
//C:\Program Files\Mozilla Thunderbird\chrome\messenger\content\messenger\messengercompose\MsgComposeCommands.js
function SendMessageWithCheck()
{
//add start
if(!ConfirmAddress.checkAddress()){
return;
}
//add end
/* //ここをコメントアウト
var warn = sPrefs.getBoolPref("mail.warn_on_send_accel_key");

if (warn) {
var checkValue = {value:false};
var buttonPressed = gPromptService.confirmEx(window,
sComposeMsgsBundle.getString('sendMessageCheckWindowTitle'),
sComposeMsgsBundle.getString('sendMessageCheckLabel'),
(gPromptService.BUTTON_TITLE_IS_STRING * gPromptService.BUTTON_POS_0) +
(gPromptService.BUTTON_TITLE_CANCEL * gPromptService.BUTTON_POS_1),
sComposeMsgsBundle.getString('sendMessageCheckSendButtonLabel'),
null, null,
sComposeMsgsBundle.getString('CheckMsg'),
checkValue);
if (buttonPressed != 0) {
return;
}
if (checkValue.value) {
sPrefs.setBoolPref("mail.warn_on_send_accel_key", false);
}
}

GenericSendMessage(gIsOffline ? nsIMsgCompDeliverMode.Later
: nsIMsgCompDeliverMode.Now);
*/
//ここから追加
var warn = getPref("mail.warn_on_send_accel_key");

if (warn) {
var checkValue = {value:false};
var bundle = document.getElementById("bundle_composeMsgs");
var buttonPressed = gPromptService.confirmEx(window,
bundle.getString('sendMessageCheckWindowTitle'),
bundle.getString('sendMessageCheckLabel'),
(gPromptService.BUTTON_TITLE_IS_STRING * gPromptService.BUTTON_POS_0) +
(gPromptService.BUTTON_TITLE_CANCEL * gPromptService.BUTTON_POS_1),
bundle.getString('sendMessageCheckSendButtonLabel'),
null, null,
bundle.getString('CheckMsg'),
checkValue);
if (buttonPressed != 0) {
return;
}
if (checkValue.value) {
var branch = Components.classes["@mozilla.org/preferences-service;1"]
.getService(Components.interfaces.nsIPrefBranch);

branch.setBoolPref("mail.warn_on_send_accel_key", false);
}
}

let sendInBackground =
Components.classes["@mozilla.org/preferences-service;1"]
.getService(Components.interfaces.nsIPrefBranch)
.getBoolPref("mailnews.sendInBackground");

GenericSendMessage(gIsOffline ? nsIMsgCompDeliverMode.Later :
(sendInBackground ?
nsIMsgCompDeliverMode.Background :
nsIMsgCompDeliverMode.Now));
//追加ここまで
}


■ついでにThunderbird3.1でも使えるようにする


最初に解凍して出てきた、install.rdfを修正します。

Confirm-Addressプラグインは3.0までの対応だったので、3.1でも使えるように互換情報を書き換えました。
互換情報を書き換えただけで、3.1に合わせてプログラムを変更したわけではないので、使えない可能性もありますが、今のところうまく動いているので良しとします。

13行目の、em:maxVersionのタグの3.0.*の部分を、3.1.*に変更します。

修正前:
<em:maxVersion>3.0.*</em:maxVersion>

修正後:
<em:maxVersion>3.1.*</em:maxVersion>


また、このプラグインのバージョンが1.2.3の改造版であることがわかるようにするため、
7行目の、em:versionのタグの1.2.3の部分を、1.2.3-altとしました。

修正前:
<em:version>1.2.3</em:version>

修正後:
<em:version>1.2.3-alt</em:version>


最後にもういちどzipファイルに圧縮する


プラグインの改造はこれで終了です。
修正したファイルをプラグインとして使用できるように、もう一度zipファイルに圧縮しなおします。
フォルダを作らずに、最初に解凍された構成のまま圧縮されるように注意してください。
圧縮ファイルをリネームして、confirm-address-1.2.3-alt-tb.xpiとでもすれば完成です。


confirm-address-1.2.3-alt-tb.xpi
配布してしまって良いものか若干迷いましたが、とりあえずファイルを置いておきます。
不適切な場合はinfo@easy-small-world.comまでご連絡ください。

不具合対応版のVersion1.2.4が本家からリリースされましたので、ファイルは削除しました。
本家からダウンロードされるようお願いします。


2010/07/08
続・サーバメンテナンスのお知らせ(完了しました)

サーバのメンテナンス、というか移設が終わったようです。
PHPのバージョンが4から強制的に5に変わるわ、.htaccessが使えなくなるわで
いろいろトラブルもありましたが、ひとまずブログもリマインダーも動くようになったようです。
先ほどまでPHPがSafeModeで動いていて、メールの送信が出来ていなかったようです。
おそらく7/7 14:00ごろ~7/8 1:00ごろのリマインダーが働いていないと思われます。
ご迷惑おかけしました。
先ほどテストしたところ、正常にメールが送れるようになっていましたので、もう大丈夫だと思います。
なにかお気づきの点がありましたら、info@easy-small-world.comまでご連絡ください。


2010/07/06
サーバーメンテナンスのお知らせ

このブログと、EasyReminderを運用しているレンタルサーバーの移設に伴い、一時EasyReminderが利用できなくなる可能性があります。
移設の完了後にこちらでいろいろ作業が発生するようで、もしかしたらちょっとの間利用できない日が続くかもしれません。
なるべく早く対応するつもりですのでご理解とご協力お願いいたします。

メンテナンス予定日時:
7/7(水) 9:00~18:00


2010/05/15
EclipseのようなIDEのように選択範囲をコメント化/解除する秀丸マクロ

なぜかちょっとだけマイブームの秀丸マクロで選択範囲を"//"でコメント化とコメント化解除するマクロを作ってみました。
探せばありそうな気がとてもしたけど、気にせず作っちゃいました。
タイトルはEclipseのようなと書きましたが、動きはZend Development Environmentに合わせました。
選択範囲の最初の行の先頭が"//"以外の場合は選択範囲全てをコメント化します。
選択範囲の最初の行の先頭が"//"の場合は、選択範囲の行の先頭の"//"を削除します。

マクロを登録し、Ctrl + / のショートカットキーを割り当てるとIDEと同じ操作でコメント化できます。

comment1.mac(1.8kb)

//EclipseなどのIDEのように、単一行もしくは複数行をコメント化・コメント解除するマクロ


//範囲選択中の場合は、選択範囲の行すべてコメント化する。
if(selecting) {
	//現在の選択範囲を退避
	#tmp_seltopx = seltopx;
	#tmp_seltopy = seltopy;
	#tmp_selendx = selendx;
	#tmp_selendy = selendy;
	
	//一旦選択範囲を解除
	escape;
	
	//選択範囲の開始行から終了行までコメントにしていく
	#i = #tmp_seltopy;
	
	//行の先頭へ移動
	moveto 0, #i;
	//先頭行がコメント("//")かどうかのフラグ
	#comment_flag = false;
	//選択範囲を再設定する際のカーソルオフセット
	#offset = 2;
	if(code == 0x2F) { //0x2Fは"/"の文字コード
		right;
		if(code == 0x2F) {
			#comment_flag = true;
			#offset = -2;
		}
	}
	while(#i <= #tmp_selendy) {
		moveto 0, #i;
		//先頭行がコメントの場合は、選択範囲のコメント行を解除していく。
		if(#comment_flag == true) {
			//先頭の文字が"/"の場合
			if(code == 0x2F) {
				//右へ1文字移動
				right;
				//次の文字も"/"の場合、BSを2回発行してコメント化を解除する。
				if(code == 0x2F) {
					right;
					backspace;
					backspace;
				}
			}
		//先頭行がコメントではない場合は、選択範囲の行すべてをコメント化していく。
		} else {
			insert "//";
		}
		#i = #i + 1;
	}
	
	//カーソルを選択範囲開始位置に移動
	moveto #tmp_seltopx + #offset, #tmp_seltopy;
	
	//選択範囲を元に戻す
	beginsel;
	moveto #tmp_selendx + #offset, #tmp_selendy;
	endsel;

//範囲選択中ではない場合
} else {
	//現在のカーソル位置を退避
	#tmp_x = x;
	#tmp_y = y;
	//行頭に移動
	golinetop2;
	//先頭の文字が"/"の場合
	if(code == 0x2F) {
		//右へ1文字移動
		right;
		//次の文字も"/"の場合、BSを2回発行してコメント化を解除する。
		if(code == 0x2F) {
			right;
			backspace;
			backspace;
		}
		#tmp_x = #tmp_x - 2;
		if(#tmp_x < 0) {
			#tmp_x = 0;
		}
	} else {
		insert "//";
		#tmp_x = #tmp_x + 2;
	}
	moveto #tmp_x, #tmp_y;
}

2010/05/09
日付と時間を挿入するショートカットキーを実現する秀丸マクロ

とってもいまさら感満載ですが・・・

エクセルで日付を入力をする際、『Ctrl + ;』、時間を入力する際は『 Ctrl + : 』のショートカットキーを多用するのですが、それを秀丸で出来ないものかとふと思って調べてみました。

①以下の一行マクロをそれぞれ適当なファイル名でマクロ用フォルダに保存します。

日付を挿入するマクロ: insertdate.mac(1kb)
insert year + "/" + month + "/" + day

時間を挿入するマクロ: inserttime.mac(1kb)
insert hour + ":" + minute

マクロ用フォルダはデフォルトでは秀丸をインストールしたフォルダですが、
その他>動作環境メニューの、「環境」の中のマクロファイル用のフォルダを変更することで
任意のフォルダにすることも可能です。

②マクロ>マクロ登録 メニューで作成したマクロを登録します。
例)
マクロ1: タイトル:日付挿入 ファイル名:insertdate.mac
マクロ2: タイトル:時間挿入 ファイル名:inserttime.mac

③ショートカットキーを割り当てる
その他>キー割り当て メニューでキー割り当ての画面を呼び出します。
そのままではCtrl + ; や Ctrl + : のショートカットキーを割り当てることができませんが、
「キー割り当て拡張」のチェックを入れると割り当てが出来るようになります。

Ctrlにチェックを入れて、キーで「 ; 」を選択(時間挿入の場合は「 : 」を選択)し、
コマンドで、プルダウンから「メニュー/マクロ」を選んで、
リストボックスで先ほど登録したマクロを指定してキーを割り当てます。

これで、エクセルと同じようにCtrl+;で日付、Ctrl+:で時間をカーソル位置に挿入できるようになります。


         

EasySmallWorldで提供中のサービス

企画室

0000003007.png
Special thanx to DVMG 727

早起き推移

早起き生活
Powered by 早起き生活

タグ