Home > プログラミング

プログラミング Archive (Page 1)

はてなダイアリー過去記事全文連結スクリプト(要Firebug)

記事一覧ページで過去の記事の見出しをその場で検索できるようになりました - はてなダイアリー日記

kga_ 2008年03月28日 hatena mala

http://d.hatena.ne.jp/#{ID}/archive/plaintext で日付け、Permalink、タイトルがとれる

ページ詳細 - 記事一覧ページで過去の記事の見出しをその場で検索できるようになりました - livedoor クリップ

ネタ元。


var xhr = function(uri, callback){
    var xmlhttp = new XMLHttpRequest() || new ActiveXObject("Msxml2.XMLHTTP");
    xmlhttp.open("GET", uri, true);
    xmlhttp.onreadystatechange = function(){
        if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
            callback(xmlhttp.responseText);
        }
    };
    xmlhttp.send(null);
};
var baseuri = location.href.slice(0, -18);
var lines = (document.body.textContent || document.body.innerText).split("\n");
var w = window.open();
w.document.open();
w.document.write('<html><head><title>' + baseuri + '/</title></head><link rel="stylesheet" href="http://d.hatena.ne.jp/css/base.css" type="text/css" /><link rel="stylesheet" href="http://d.hatena.ne.jp/theme/hatena/hatena.css" type="text/css" /><style type="text/css">p.commentform{display:none;}</style><body>');
var i = 0, l = lines.length;
(function(){
    var path = lines[i].split(",")[1];
    if (path) {
        xhr(baseuri + path, function(res){
            w.document.write(res.match(/<div id="days">([\s\S]*?)<div class="calendar" id="pager-bottom">/)[1]);
        });
    }
    if (++i < l) {
        setTimeout(arguments.callee, 5000);
    } else {
        w.document.write('</body></html>');
        w.document.close();
    }
})();

使い方。

  1. Firefoxを立ち上げてFirebugを有効にする
  2. http://d.hatena.ne.jp/#{ID}/archive/plaintextを開く
  3. Firebugのコンソールから上を実行する
  4. 別ウィンドウに全過去ログが書き出される*1
  5. ページを保存してあとで見る

あまり行儀の良いスクリプトじゃないけど、過去記事をまとめて保存しとくと場合によっては役に立つかと思って作りました。

  • *1: 記事1000件当たり約1時間23分かかる

「opmlmaker」を作った

opmlmaker

改行区切りのフィードURIのリストをopmlに整形するJS。

livedoor Readerにフィードをまとめて登録するために作ったもの。

生成された文字列をファイルにUTF-8で保存して、設定画面→インポート→アップロードして使います(LDRの場合)。

LDRではグループ名を既存のフォルダ名にすると、そこに登録してくれるみたいです。

「レンタルマギカ」の社長命令をなでしこで書いた

日本語プログラム言語「なでしこ」公式ページ

あの社長命令って何か手続き型言語っぽいよね、と思ったので。

■アストラル社員とは
 ・口上
 ・射出(方向に道具を)~"{名前}「{口上}」"を言う。
 ・歌う~"{名前}「ついてる~♪」"と言う。

■ゲーティア首領とは
 ・登場~"{名前}「これは一体どういうことですの、いつき?」"と言う。
 ・召喚(魔神を)~"{名前}「来たれ{魔神の名前}!{魔神の説明}!」"と言う。
 ・歌う~"{名前}「ついてる~♪」"と言う。

■魔神とは
 ・説明

■三輪先生とは
 ・一言~"三輪先生「まずは水着審査」"と言う。


穂波とはアストラル社員
穂波の口上は「我が上にありしは月の女神!すなわち月光と宿り木の加護をもって北の呪いを阻まん!」

猫屋敷さんとはアストラル社員
#猫屋敷さんの口上がわからない

みかんちゃんとはアストラル社員
#みかんちゃんの口上がわからない

黒羽さんとはアストラル社員
#黒羽さんの口上がわからない

アディリシアさんとはゲーティア首領

エリゴールとは魔神
エリゴールの説明は「六十の軍団を治める、堅固なる騎士」


#いつき「社長命令だ!」
穂波は「右斜め45度の方向」に宿り木を射出
猫屋敷さん#のアクションがわからない
みかんちゃん#のアクションがわからない
黒羽さん#のアクションがわからない

アディリシアさんが登場
エリゴールをアディリシアさんが召喚

穂波が歌う
猫屋敷さんが歌う
みかんちゃんが歌う
黒羽さんが歌う
アディリシアさんが歌う

三輪先生が一言

レンタルマギカのことを何も知らないことを思い知らされました。

変数名に「の」を入れられないのがちょっとだけ残念。


レンタルマギカ - Wikipedia

かわいいかわいいアディの項目だけ他の3倍くらいあって噴いた。

血を流し込まれたい。

JavaScriptで文字列内変数展開

String.prototype.fill = function(hash){
    return this.replace(/\${([A-Za-z_]\w*)}/g, function($0, $1){
        return (typeof(hash[$1]) != "undefined") ? hash[$1] : $0;
    });
};
var uri = "http://www.google.co.jp/";
'<a href="${href}"><img src="${src}" alt="${alt}" title="${alt}" /></a>'.fill({
    href: "http://b.hatena.ne.jp/entry/" + uri,
    src: "http://b.hatena.ne.jp/entry/image/" + uri,
    alt: "「" + uri + "」のはてなブックマーク数"
});
// <a href="http://b.hatena.ne.jp/entry/http://www.google.co.jp/"><img src="http://b.hatena.ne.jp/entry/image/http://www.google.co.jp/" alt="「http://www.google.co.jp/」のはてなブックマーク数" title="「http://www.google.co.jp/」のはてなブックマーク数" /></a>

使ってみたら結構便利だったのでメモ。

\$#にすればRubyっぽくなります。


これとXMLHttpRequestを合わせればテンプレートシステムが作れそう、かも。

追記

激しく既出だった。

最速インターフェース研究会 :: Safariでreplace callback のエミュレーション

404 Blog Not Found:javascript - HereDocよりInterpolation

404 Blog Not Found:javascript - Interpolatorで変数展開

テンプレート関連 - 実用

「こくばん.out」を作った

こくばん.out(Wiki:こくばん.out - mayokara lab


XMLHttpRequestを使ってみたかっただけ。

まったくもって低機能で劣化コピーもいいとこです。

JavaScriptで配列の最後の要素を取得する方法とArray.reverse()について

今まで配列の最後の要素を取得するのに

var NankaNagaiHensumei = [0,1,2,3,4];
var lastValue = NankaNagaiHensumei[NankaNagaiHensumei.length-1];

とか書いていたのだけど、今

var lastValue = NankaNagaiHensumei.reverse()[0];

書けることを知った。元の配列が破壊されてしまうのでこれはダメ。

Array.reverse()なんてあったのか。

JavaScript 1.1の機能らしく、手元のIE6、Firefox2、Opera9すべてで動作した。


もっとも、コードが見やすくなる分計算量が増えてしまうので

Array.prototype.last = function(){
    return this[this.length-1];
};

とか用意したほうがいろんな面で良さそうではある。

他には

var lastValue = NankaNagaiHensumei.slice(-1)[0];

とかが考えられる……というか、reverseよりはこっちのがいくらかマシかも。

追記

よくよく調べてみたらArray.reverse()はArray.sort()と同じく破壊的な挙動を示す。

これは使えない。

降順にソートするなら比較関数でそうなるように書くから、そういう用途でも使えない。

あんまり使うことはなさそうだ。

Exciteサーチストリームをニコニコ動画風に表示するAIRアプリケーション「ExciteNico」を作った

画面イメージ

説明

ダウンロード

excitenico.air

使用上の注意

Adobe - Adobe AIR Download Center

インストールにはAdobe AIR 1.0ランタイムが必要です。

ランタイムをインストールした後、airファイルをダブルクリックでインストールできます。

アンインストールは「アプリケーションの追加と削除」とかその辺の「ExciteNico」から。

追記

1.0正式版が出てたので差し替えました。

Amazonの商品ページのURLを短くするブックマークレットについて

hecomi.com: Amazon Bookmarklet 対3種

javascript:var assoc='xxx-22';var t=document.title;var linkStr=t.substring(t.indexOf(':')+1,t.indexOf(':'));var u=document.location.href;var ai=u.indexOf('ASIN');if(ai>-1){var asin=u.substring(ai+5,ai+15);}var ai=u.indexOf('/dp/');if(ai>-1){var asin=u.substring(ai+4,ai+14);}var ai=u.indexOf('/product/');if(ai>-1){var asin=u.substring(ai+9,ai+19);}var url='http://www.amazon.co.jp/exec/obidos/ASIN/'+asin+'/'+assoc;var link='<a href="'+url+'">'+linkStr+'</a>';var x=prompt('',link);

2008-02-18 - 聴く耳を持たない(片方しか)

javascript:void(function(){var u=document.location.href;var ai=u.indexOf('ASIN');if(ai>-1){var asin=u.substring(ai+5,ai+15);}var ai=u.indexOf('/dp/');if(ai>-1){var asin=u.substring(ai+4,ai+14);}var ai=u.indexOf('/product/');if(ai>-1){var asin=u.substring(ai+9,ai+19);}clipboardData.setData('text','http://amazon.jp/dp/'+asin);})();

最短コード

TinyAmazon

javascript:void(prompt("",location.href.replace(/.*(\/[\dA-Z]{10})(\/.*|$)/,"http://amazon.jp/dp$1")));

はてなの商品紹介ページでも使えます。

追記

KoshianX 2008/02/23 00:29

var asin=document.getElementById(’ASIN’).value;

ASINこれで取れますよ。

2008-02-18 - 聴く耳を持たない(片方しか)

こっちのほうが短いな。

最短にこだわる必要もなくなったので、私の方の正規表現も誤検出がないようにちょっと修正。

「TaskLeaflet」を作った

TaskLeaflet

TaskPaperのJavaScript版みたいなもの。

プロジェクトやタグでの絞り込みは個人的に必要としていないので、今のところは実装されていません。

もしかしたら、つけるかも。

使い方

  • 行末「:」(コロン)でプロジェクト
  • 行頭「-」(ハイフン)でリスト
  • それ以外はコメント
  • リストに「(スペース)@xxx」でタグ付け
  • 「@done」で完了
  • 左側リストクリックで「@done」をつけたり消したりできる
  • データはCookieに保存
    • ブラウザ閉じても大丈夫
    • 有効期限90日

どうでもいい話

2008-02-20 - きしだのはてな - JavaScriptが、プログラムの初心者が勉強するのに適さない理由

404 Blog Not Found:私がJavaScriptを初心者用の言語として選んだわけ

入門書がない

JavaScript - MDC

読めばいいよ。

HTML/DOMの知識が必須

DOM - MDC

読めばいいよ。

ブラウザ間の互換性が不十分

prototype.js v1.5.0 の使い方

使えばいいよ。

実行環境がない

Firebug - Web Development Evolved

これのコンソールに打ち込めばいいよ。

JavaScriptの良いところ

初心者から上級者まで、あらゆる人の手によるコードがすべて公開されていること。

難読化とかはあるけど、基本的にはあらゆるスクリプトのバックグラウンドが見れる。

ブラックボックス化したcgiとかがない。

初心者向けであるとすれば、そういうところが大きいんじゃないかと思う。


あとは、何の制約もなく動くコードを提示できることとか。

サーバ借りなくてもいいし、レンタルブログでも書ける。

JavaScriptの悪いところ

使い回しが効かない。

Home > プログラミング

Feeds
Search This Blog
Counter
  • Counter

    since 2008.01.11

Page Top