Languageの最近のブログ記事

なにげにC言語はあまりまじめにまなんでなかったので、今更ながらK&Rを読み始めました。


でも訳が微妙すぎてなにをいってるのかよくわからないところが多いwww


今年の大きな目標の一つとしてC言語をある程度書けるようにするというのを掲げたいと思います。

key: |
  this is example
  this is example

ってやるみたい。

ちなみに今一番知りたいのは、YAMLファイルで上の方で定義した値を下の方で使いたい場合どうするか。教えてエロい人!

foo: 1
bar: 2
baz: ***←ここでfooとかbarの値を使いたい。例えば 123 を表現したいとか。「$foo _ $bar _ 3」とかできないのかなと
先日リリースした Extractor の Bookmarklet(コメントをチェック(浮き出る版))のデザインや仕様を変えました。主な変更点としては、「マウスでドラッグできる機能」が付いたのとデザインをがらっと変えました。

その際にma.laさんの最速インターフェース研究会で紹介されていたJavaScriptでの遅延ロードのテクニックを拝借させて頂きましたので、覚え書きのつもりで今回どのようにしてそれを使ったのかについて書いておきます。


まず、先に紹介した Extractor の Bookmarklet がなにをやっているかというと、現在見ているページに script タグのエレメントを生成して、他のドメインのJavaScriptのソースを読み込んでいます。Bookmarklet を分解すると下記になっています。具体的には createElement で script タグを生成して、各プロパティ(language、type、charset、src、id)を設定しています。 (ちなみに Extractor で使っている JavaScript の文字コードは UTF-8 なのですが、読み込む際に表示していたページがShift_JIS や euc-jp であっても、これを行なう際に charset を指定してやれば、どうやらブラウザがうまいこと表示してくれるようです!これは知らなかった。)

※説明しやすいようにURLなどは適宜変更しています。
javascript:
prefFile='';
// 現在表示中のページのURLを取得
u=encodeURIComponent(location.href); 
// scriptタグのエレメントを生成
void(z=document.body.appendChild(document.createElement('script')));
// language、type、charsetなどを設定
void(z.language='javascript');
void(z.type='text/javascript');
void(z.charset='utf-8');
// srcで外部のJavaScriptを指定する
void(z.src='http://extractor.47objects.com/hover.js?url='+u);
// scriptタグのidを設定
void(z.id='extractor');
ここまではなんとか思い付いたのですが、この読み込んだ hover.js という JavaScript 内で prototype.js を読み込もうとして、また script タグのエレメントを createElement で生成してやったのですが、うまく読み込んでくれませんでした。

なんでだろうと調べてみたら、どうやら prototype.js は hover.js のスクリプトを読み込んでから読み込みが開始されるために、prototype.js 内のクラスや関数を使用するためには、prototype.js の読み込みを待ってから hover.js を実行させる必要がありました。

そこで最速インターフェース研究会の登場です。最速インターフェース研究会の「[Ajax] JSAN構想とリモートデータの取得とUserJavaScript」の記事にあるwaitという関数を使うことにより、prototype.js で定義されている関数を読み込み済かどうかを確認後に hover.js を実行するようにしました。

具体的なやりかたとしては、下記のように行いました。

// 最速にある wait 関数
function wait(a,func){
	var check = 0;
	try{
		eval("check = " + a);
	}catch(e){
	}
	if(check){
		func()
	}else{
		var f = function(){wait(a,func)};
		setTimeout(f,100);
	}
}

// まずは、prototype.jsの読み込みの準備
var s document.appendChild(d.createElement("script"));
s.type = "text/javascript";
s.src = "http://example.com/js/prototype.js";

// prototype.jsで使いたい関数が読み込まれてから、その関数を使っての処理
wait('Class.create', function() {
	// 実行したい処理
	alert("Class.create loaded!");
	var newclass = new Class.create();
});
このようにすることにより、遅延ロードを行なうことが可能になるようです。このテクニックを使えば、色々な JavaScript のライブラリをリモートに置いたりして使うことが可能になるので便利ですよね。これを作っていてはじめて実感しました…。
JavaScript Archive Network - JavaScript Archive Network

"CPAN".replace(/CP/, "JS")


JSANという、Perlで言うところのCPANがローンチしたらしいです。これからCPANみたいにいろんなモジュールが上げられるんでしょうか。
それにしても、このサイトのトップにある"CPAN".replace(/CP/, "JS")というロゴ(?)は自分はとても好きなセンスです。

今は、見たところJSAN-0.001とTest.Simple-0.010が上げられているように見えるけど、両方とも404になります。これからが楽しみです。自分もなんか上げられるようになりたし。

ちなみに、http://www.jsan.org/は日本動物看護学会…。

雅 - Pure Javascript MVC Frameword

雅 - Pure Javascript MVC Frameword

JavaScriptでMVCって発想はなかなか思い付かないな…。ちょと興味があるのでメモ。

今日JavaScriptでハマりました。自分はPerlが一番書けるので、他の言語を書くときにもPerlの文法を無意識のうちに使っていたりします。今日はJavaScriptをせっせと書いていたところ下記のようなミスをしました。

    new Ajax.Request('/modify?id=' + this.id, {
      parameters: Form.serialize(form),
      onLoading: function(request){
        div.innerHTML = 'now changing...';
      },
      onComplete: function(request){
        var res  = request.responseXML;
        var id = res.getElementsByTagName('id')[0].firstChild.data;
        var content = res.getElementsByTagName('content')[0].firstChild.data;
        div.innerHTML = content;
      },
    } );
どこがミスだかわかりますか?
Nifty Corners

Rounded Corners with CSS are a hot topic in web design: I think that there are hundreds of articles on them. This page is intended to present the solution I came up, that doesn't requires images, extra markup nor CSS. Let's start.

HTMLでコーナーを作るのにCSSだけで作ったり、JavaScriptとCSSだけで作ったり。画像を使わないでやってます。すごいね。これ便利かも。
ちなみに、↑のやつもCSSだけでやってみました。
最近よくgooglegmailとかgoogle maps、それにflickrで使われる技術。
javascriptで内部的にリクエストを送ってごにょごにょやるやつのソースが
下記のサイトに置いてあります。
このソースをロードしてやれば簡単に内部的リクエストが送れるようです。
(ちなみにこれはCreative Commons License.です。)

http://www.scss.com.au/family/andrew/webdesign/xmlhttprequest/




上の例は、Load Codeボタンを押すとhttp://clouder.jp/yoshiki/mt/archives/demo.jsをGETしてきて、それをdemoとidの付けた部分に表示させるという単純なものです。
これをわずか数行でできるのがイケてる。しかも、IEとFirefoxをサポート。Operaもサポートしてるっぽい。

これでなんか面白いこと出来そうだね。

検索

広告

OpenID対応しています OpenIDについて
Powered by Movable Type 4.22-ja