MySQLのレプリケーションが正常化チェック

MySQLのスレーブ側で、show slave status \G とやって、下記の箇所がYesであればスレーブのレプリケーションが正常に行われているか確認できます。

Slave_IO_Running: Yes
Slave_SQL_Running: Yes


下記のような、コマンドラインから実行してYes以外であるか確認するシェルスクリプトをcronでまわせば、問題なければcronメールが飛んでこなくて、問題があれば出力された情報がcronメールで飛んできます。(例えばSlave_IO_Running: Noとか)
パスワードと書いてあるところは、mysqlのrootパスワードを記入する必要があります。

#!/bin/sh

/usr/local/mysql/bin/mysql -u root -pパスワード -e "show slave status \G" | grep Running | grep -v Yes


cronをrootユーザで実行している場合は、rootのhomeディレクトリに.forwardというファイルを作って、そこに転送したいメールアドレスを書けばcronメールが飛んできます。

atnd.orgの当日の出欠登録が出来るサービス

便利に使わせてもらっているイベント参加登録サイトATNDに、当日の出欠と2次会の出欠を登録できるサービスを作りました。

「ATND::CHECK」
http://atnd.eizoku.com/



デモ画面
Demo用のイベントIDを用意したので、下記のURLからデモ画面に行き、色々操作してみてください。
http://atnd.eizoku.com/atnd/view/1207


操作説明
トップページにて、出欠登録したいイベントのイベントIDを入れると、下記画面のイベント詳細画面と参加ユーザ一覧が出るので、該当ユーザの出席ボタンなどを押せば、記録されていきます。出席や欠席の表示を消したい場合は、クリアボタンを押してください。
参加者数や、出欠の合計は画面の一番下に表示されます。ただ、現在はリアルタイムに出欠数が表示されず、再計算のリンクを押すようになっています。



機能のご要望、不具合などありましたら、下記メールあどれすか、ここのコメントまでご連絡下さい

GuestOSのSSHポートフォワード経由で、ホストOSにVMコンソールログインする時の注意点

VMware Server1.0系の話です。OSは全てLinuxです。

ホストOS上にVM1とVM2が動いていたとして、ホストOSはグローバルIPを持たずに、ゲストOSのみがグローバルIPを持っている構成の場合の話。

この環境だと、とりあえずGuestOSのSSHポートフォワードを使って、GuestOS経由でVMwareコンソールアクセスするんですが、この時、VM1のsshポートフォワードを使ってVMコンソールアクセスした場合、コンソール上にVM1の画面を出した瞬間にゲストOSが固まります。VM2のコンソール画面を出すのは問題ないです。

ということで、SSHポートフォワードでアクセスする場合は下記の点を守ると安全です。

  • SSHポートフォワードしたVMは、VMコンソールから画面に絶対アクセスしないこと
  • consoleアクセスした際、もしくはログアウトする際、通常はタブを全て閉じておく(タブ欄の一番右の×印を押して)
    • VMにアクセスしたい時だけ、左のInventoryの欄から該当VMをクリックしてVMコンソールにアクセスする
    • その際、ログアウトするまえにタブを消しておく
  • Consoleのクライアント側の設定で、viewのStatusBarはチェックをはずして非表示にしておく

divやspanタグの中の全ての情報を削除する方法

フォーム中にjavascriptprototype.js)で色々と値や項目を動的に追加していった場合、その場で追加した値を消したいときなどに利用するため、動的に追加したものはspan id="hoge0001"のようなユニークなIDを振っておいて、消したくなったら下記のような関数にidの値をわたす。

function deletelink( deleteid ){
	var dom_obj_parent = $(deleteid).parentNode;
	dom_obj_parent.removeChild( $(deleteid) );
}


追加する場合は、下記のようにする。この例は、address1で選択されたvalueの値をspan idに入れて、selectのtextを追加表示名にしています。

<input type="button" name="hoge" value="追加" id="add_address" onclick="add_address_list();">

function add_address_list() {
  var add_mix = 'hoge' + $("address1").value;
  var add1_val_text = $("address1").options[$("address1").selectedIndex].text;
  $("hoge_list").innerHTML += '<span id="' + add_mix + '"><a style="color:blue" onclick="deletelink(\'' + add_mix + '\');">' + add1_val_text + '</a></span>';
}

こうすると、id="hoge_list"の中にどんどん選択したaddress1が追加されていく。aタグになっているので、それをクリックすると、deletelink関数が呼ばれて引数に入れたspan idをspanタグごとまるごと削除する

JavascriptでselectタグのOptionの値と表示名を取得

javascript( prototype.js )でselectタグのvalueはすぐに取得できたんだけど、表示名の方の取得ではまったのでメモ

valueの方は

var add1_val = $("address1").value;

これでOK


表示名の方は、options配列の中に入っているので、その中から選択されているもののtextの値を取得する必要がある。

var add1_val_text = $("address1").options[$("address1").selectedIndex].text;

$("address1").selectedIndexで現在selectタグで選択されているものを指定している

IEだとJavascriptでselectタグの中身を変更できない

Prototype.js使ってajaxでSelectタグのプルダウン連動をやってたらはまった。
あるSelectボックスの値を変えると、連動して他のSelectボックスの値をAjaxでサーバから取得し、optionタグの内容を全て入れ替えるというもの。例えば、都道府県を変更したら、連動してその県の市町村がプルダウンに入るようなもの。

Firefoxだと問題ないんだけど、IEだとSelectタグのオプションタグごと全てAjax経由で取得して入れ替えようとしたら、だめだった。IEのSelectタグはReadonly属性らしい。


とりあえず、spanタグでSelectタグごと囲んで書き換えるという荒業で対応。Ajaxで取得するのはSelectタグ、optionタグの全て。divタグで囲むと不用意に改行が入ってレイアウトが崩れるので、spanタグで対応。
とりあえず、view側は下記のようにした。smartyタグが入ってます。

<select name="address1" id="address1">
  <option></option>
  {{html_options options=$select_address1 selected=$request.address1}}
</select>

<span id="address2">
  <select name="address2" id="address2val">
    <option></option>
    {{html_options options=$select_address2 selected=$request.address2}}
  </select>
</span>

<script type="text/javascript">
//<![CDATA[

new Form.Element.EventObserver('address1', function(element, value) {new Ajax.Updater('address2','/hoge/ajaxselect/address2', {asynchronous:true, evalScripts:true, parameters:Form.Element.serialize('address1'), requestHeaders:['X-Update', 'address2']})})

//]]>
</script>


それで、Ajaxで'/hoge/ajaxselect/address2'にアクセスすると下記の市町村を含むselectタグを返す

<select name="address2" id="address2val">
<option></option>
{{html_options options=$select_address2}}
</select>