Home > 015)メモ > WEB+DB風の見出しを作るジェネレータ

WEB+DB風の見出しを作るジェネレータ

社内勉強会用のお題用に。。

左に単語を入力して改行で右にそれっぽい見出しができます。


ゼロからはじめるデザインパターン(25回)
サルでもわかるシェルプログラミング(5回)
HTTP/TCP/IP(5回)実践テクニック
徹底活用!ActionScript(5回)
JavaScript(10回)使いこなし術
REST(5回)徹底攻略
正規表現(5回)実践テクニック
Ruby(10回)の基礎知識
UML(5回)の基礎知識
SQL(5回)との賢いつきあい方

これだけでも80回。
週1回だとしても、2年弱は軽く持つ。
これに読書会とかかぶせていくと、うん、
ネタは尽きないんだ。

[追記]

array.mapを使ったら
オブジェクトでサポートされてないプロパティまたはメソッドです。
とIEでエラーが出てて、

map は ECMA-262 標準に対する JavaScript 拡張なので、ECMA-262 標準の他の実装では存在しない場合があります。次のコードをスクリプトの先頭に挿入すると、map がネイティブでサポートされていない ECMA-262 実装でも map を使用できるようになります。これは Firefox および SpiderMonkey で使われているアルゴリズムとまったく同じものです。

Core JavaScript 1.5 Reference:Global Objects:Array:map
を参考にして、array.prototype.mapを挿入したら動いた。。。

[追記の追記]

IEだと挙動が変だ。
単語の後ろに見出しがつく場合に改行されるなー。
firefoxだといいけど、IEが悪いせいにしたくなってきた。
けど、普通にプログラムがおかしい気がする。

↑コメントのご指摘のおかげで直りました。

また、Windowsの場合、改行文字はCRとLFの2バイトで表現されます。これは、プログラマにとっては厄介です。たとえば、Cのプログラムで、

putchar('\n'); /* \は本当はバックスラッシュ */
と書いた場合、Windowsでは「CR LF」(0x0d0a)の2バイトが出力されます。ここで、'\n'は、プログラムの中での改行文字を表していて、これのサイズは1バイトです。つまりプログラム内では1バイトを出力したはずなのに、OSによっては、現実には2バイト出力されることもありうるわけです。こういうことは他にもあるので、この改行文字だけに目くじらをたてても仕方ないといえば仕方ないのですが、とは言え、なんか気持ちが悪いのも事実です。

新・闘わないプログラマ No.431  改行する

なるほどー。なんか少し分かったような気がする。
今回の場合2バイト出力されていたのに、(CR LF)片方だけしか
マッチしないようにしていた、ということかな。


function getCaptions() {
	if (! Array.prototype.map ) Array.prototype.map = function(f){
	    var a = [];
	    for(var i = 0; i < this.length; i++){
	      a[i] = f(this[i]);
	    }
	    return a;
	};

if (document.getElementById('word').value) {
var words = document.getElementById('word').value;
var split_words = words.split(/\n?\r/);
var generate_words = split_words.map(generateCaption);
var str = generate_words.join("\n");
document.getElementById('change_word').value = str;
}


function generateCaption(w) {

this.forwards = [
'ゼロからはじめる',
'そろそろ本気で',
'[速習]',
'免許皆伝!',
'[超級]',
'知っておきたい!',
'徹底活用!',
'「虎の巻」',
'現場で役立つ!',
'再入門!',
'これでカンペキ!',
'サルでもわかる'
];

this.backwards = [
'実践テクニック',
'との賢いつきあい方',
'使いこなし術',
'の基礎知識',
'徹底攻略',
'最前線!'
];

var i = Math.floor( Math.random() * this.forwards.length );
var j = Math.floor( Math.random() * this.backwards.length );
var k = Math.floor( Math.random() * 2 );
return k === 0 ? this.forwards[i] + w : w + this.backwards[j];
}
}

Comment:2

sakurai 2008-02-21 (木) 00:45

words.split("\n"); => words.split(/\r?\n/);

でどうですか?

banyan 2008-02-21 (木) 01:08

あー直りました!
キャリッジリターンですか。。
恥ずかしながら全く意識したことなかったです。
勉強してみます。ありがとうございました!

Comment Form
Remember personal info


Home > > WEB+DB風の見出しを作るジェネレータ

Page Top