NakajiJapan

餓鬼の超弩級日記


MacでexecJSが動作しない件

最初こんなエラーがでてなんのこっちゃとおもっていたんですが、sslがインストールされていのかと思い、macにsslをインストールしてみました。

dyld: Library not loaded: /opt/local/lib/libssl.1.0.0.dylib
  Referenced from: /usr/local/bin/node
  Reason: image not found

  (in /Library/WebServer/railsTest/app/assets/javascripts/accounts.js.coffee)

しかし、これでもうまくいかない。

brew install openssl

実行用のエンジンが必要なんじゃないかとおもって早速node.jsのインストール

brew install node

そしたら、無事えらーがなくなりました!

うまくいったで!!!

No Comments »

node.jsでもろもろ設定

インストール

wget http://nodejs.org/dist/node-v0.4.5.tar.gz
tar zxvf node-v0.4.5.tar.gz
cd node-v0.4.5
./configure
make
make install

ライブラリ関連のモジュールをインストール

curl http://npmjs.org/install.sh | sh

npm install mysql
npm install express
npm install ejs
 

テストプログラムをListen状態にしておいてGETで情報が取得できるか確認する。

node test.js

curl http://127.0.0.1:8124

参考URL

http://sakuratan.biz/archives/3101
http://expressjs.com/
http://nodejs.org/

No Comments »

input button onClick でJSを動かせない!

もっと正確に言うとheadタグで作成したオブジェクトが参照できないのである。
しかしうまくいくのもあるんだけどなんなんだろうか。

よくわからんなー。うーん。

まずは、動かしたい処理

function hoge() {}
hoge.prototype = {
  moge: function() [ console.log("test"); }
}
var hoge = new Hoge();

そして、HTMLには以下のコードを記述したとする。

  
  add
  delete

  


上記のAタグてonclick()した場合うまくいくのだが、inputタグのタイプをbuttonで指定したものに
onClick()した場合はうまく動作しなかった。

1 Comment »

jqueryでフォームを操作する

Jqueryでフォームをいじっちゃいましょう。

フォーム情報を取得したり設定したり

var obj = $('#target');  // id指定
var obj = $('.targets'); // class指定
var obj = $('input[name=target]');  // name指定

// 選択したオブジェクトにたいしてそれぞれ処理を行う
// (例) ファームを「disabled」にする
$('input[name=target]').attr('disabled', true);

// .each() を利用してみる (上と同じ)
$('input[name=target]').each(function(i){
    $(this).attr('disabled', true);
});

//-------------------------
// value属性の値を取得する
//-------------------------
var str = $('#target').attr('value');
var str = $('#target').val();

//-------------------------
// value属性に値を入力する
//-------------------------
$('#target').attr({value: str});
$('#target').val(str);

選択したオブジェクとを取得する(input[name=radio])

// get
var obj = $("input[name=target]:checked");

// @は正規表現
var obj2 = $("input[@name=target]:checked");

// ラジオボタンで選択されているオブジェクトを取得する
var objRadio = $(":radio[@name=target]:checked");

// value属性を取得する
console.log("val = " + objRadio .val() );

選択したオブジェクとを取得する(select])

var value = $('#target').children(':selected').val();
var value = $('#target').val(); // これだけで上に同じ

// 選択肢を増やす
$('#target').append($('

所感として「@」は正規表現を利用して検索してくれるのですが、うまくいかなかったのでつかってません。
なんで動かないかは現在調査チュウ。

No Comments »

[jquery]window.onloadを複数実行させたい

いいんかな。

規模が大きくなってくるとJSファイルだんだん増えてきて処理もそれなりに分割しなくちゃいけなくなる。
onloadインベントも共通の処理はあるけど、各処理(フレームワークでいうとコントローラごととか)でも
固有の処理を行いときがあります。しかも運用しやすい?用にファイルは分割して分けときたい。

jqueryちゃんは優秀ですね。



// file A (common)
$(document).ready(function(){
    alert('a');
});
// file B
$(document).ready(function(){
    alert('b');
});

Aは全体で使う共通の処理、Bは各処理で行う処理。
こうすることでほぼonloadと同じタイミングで両方とも実行してくれることになります。
ただ、CSS読み込むときにはあらかじめCSSファイルを読み込んでおくことと、画像ファイルを全部
読み込み終わるまで「.ready」は実行されないことに注意。
jqueryのドキュメント結構勉強になった。


$(document).ready(handler)
$().ready(handler) (this is not recommended)
$(handler)

■参照URL
jquery document

No Comments »

window.onloadとbody.onload

きになっちゃったのでメモ。

基本的には同じことなんかな。window.onloadとbody.onload。
なんかこれ読んでたらわからんでもないけど、動作的にはほぼ同じことなんじゃないかな。

どちらともページの読み込みが完了した後にDOMの解析をし始めることには代わりはない。
そんで以下のような処理をやってみたら、後の処理を上書きして処理されてるみたい。この場合だと
「window.onload」の処理はかき消されて「body.onload」が実行されていた。

<html>




test

</html>

ちなみにDOMを解析している途中にJS実行するならヘッダ内とボディ内に普通処理を実装すると処理は行われる。

No Comments »

[memo]オブジェクト指向+jquery

いつぞやのjavascriptでオブジェクト指向プログラミング的な記事を書きましたが、どっちかというとjqueryでの実装の方がおおいので
それ用に実装方法を書いてみる。



<body>

object

</body>
No Comments »

[limeChat]RSS情報を定期的に読み込んで新着情報のみをぶっこぬく


var targetChannel = "#project";
var fileName = "projectSvnRevision.txt";
//------------------------------------
// 実行時
//------------------------------------
var ret = 0;
function event::onLoad() {
    ret = setInterval(getRssForDev, 1000 * 60 * 10); // by 10 min
    //ret = setInterval(getRssForDev, 1000 * 6); // by 1 min( for test)
}

//------------------------------------
// 時刻チェック
//------------------------------------
function getRssForDev()
{
    var lines = load_textfile_array( fileName );
    var currentRevision = parseInt( lines[0] );
    var req = new ActiveXObject("Microsoft.XMLHTTP");
    if (req) {
        req.onreadystatechange = function() {
            if (req.readyState == 4) {
                var s = req.responseText;

                // 2回のタイトル削除
                s.match(/<title>(.*)<\/title>/);
                s = RegExp.rightContext;
                s.match(/<title>(.*)<\/title>/);
                s = RegExp.rightContext;

                for (var i=0; i<100; i++) {
                    if (!s.match(/<title>(.*)<\/title>/)) {
                        break;
                    }
                    s = RegExp.rightContext;
                    var title = RegExp.$1;

                    var ret = title.match(/(\d+):/);
                    //var revision = ret[0];
                    var revision = RegExp.$1;
                    //var revision = "";

                    s.match(/<dc:creator>(.*)<\/dc:creator>/);
                    s = RegExp.rightContext;
                    var creator = RegExp.$1;

                    s.match(/<link>(.*)<\/link>/);
                    s = RegExp.rightContext;
                    var link = RegExp.$1;

                    s.match(/<pubDate>(.*)<\/pubDate>/);
                    s = RegExp.rightContext;
                    var pubDate = RegExp.$1;

                    // RSSの最大値を保持しておく
                    if (i == 0) {
                        maxRevision = revision;
                    }

                    if (currentRevision < revision) {
                        send(targetChannel, "====================");
                        send(targetChannel, "TITLE   : " + title);
                        send(targetChannel, "CREATER : " + creator);
                        send(targetChannel, "PUBDATE : " + pubDate);
                        send(targetChannel, "LINK    : " + link);
                     }
                    else {
                        break;
                    }

                }

                write_file_string(fileName, maxRevision);
            }
        }
    }
    // ここに読み取りたいURIを記載
    var url = 'http://hogehoge.com/rss'; 

    req.open('get', url, true);
    req.send('');
}

//--------------------------------------------
// ファイル読み込み
//--------------------------------------------
function load_textfile_array( file_name  ){
  lines = new Array();
  d_file = openFile( file_name , true );
    while ( s = d_file.readLine() ) {
      lines[lines.length] = s;
    }
  d_file.close();
  return lines;
}

//--------------------------------------------
// ファイル書き込み
//--------------------------------------------
function write_file_string( file_name, string  ){
    file = openFile( file_name , false );
    file.write(string);
    file.truncate();
    file.close();
}

これでイけると思うよ。

No Comments »

limeChatで指定した時刻にメッセージを表示させる

これだと毎週のある時刻にメッセージを表示する

/*
 *
 * 指定した時間にイベントのお知らせメッセージを表示する
 * 
 */
var targetChannel = "#channel";

//------------------------------------
// 実行時
//------------------------------------
var ret = 0;
function event::onLoad() {
    ret = setInterval(checkDevMtg, 1000);
}

//------------------------------------
// 時刻チェック
//------------------------------------
function checkDevMtg(){
    var date = new Date();

    // 表示させる時刻(定期的に表示)
    var targetDay    = 2;    // 火曜日
    var targetHour   = 15
    var targetMinute = 50;
    var targetSecond = 0;

    var currentDay    = date.getDay();
    var currentHour   = date.getHours();
    var currentMinute = date.getMinutes();
    var currentSecond = date.getSeconds();

    if (targetDay    == currentDay &&
        targetHour   == currentHour &&
        targetMinute == currentMinute &&
        targetSecond == currentSecond
    ) {
        window.flashTitle();
        window.blinkTitle();
        send(targetChannel, "==============================================");
        send(targetChannel, "= ミーティングの時間ですよ!                       =");
        send(targetChannel, "==============================================");
    }
}

補足
以下のメソッドがうまくうごいてくれなかった。なんでだろう。
window.flashTitle();
window.blinkTitle();

No Comments »

limeChatで禁止用語チェック と 自分の関連するキーワードがあればバルーンと音を鳴らす。

ちゃっちープログラムだな。

音はメッセンジャーからぱっくんちょ。

var target_channel = "#bot_test";
var replyFlg = false;

function event::onChannelText(prefix, channel, text) {
    // 禁止用語
    if (text.match(/(卑猥|ピン子|ぴんこ)/)) {
        send(target_channel, "んっ!");
        showBalloon("ん!", "なんて卑猥!");
    }
    // キーワード
    else if (text.match(/(nakaji|Nakajijapan)/)) {
        showBalloon(channel, prefix.nick + " >> "  + text);
        playSound("type.wav");
    }
}
No Comments »