JavaScript

今、日本でお気に入りされているYoutube動画

を一覧できるスクリプトを書いてみました。 jYoulike ダウンロード Twitterの検索APIを用いて、Youtubeのお気に入りボタンと連携して投稿されたツイートを検索し、サムネイル化します。サムネイルをクリックするとインラインで動画が開きます。常に最新の、…

継続渡しによる停止・再開可能な反復処理

ここ最近の Scheme プログラミングで得た感覚を踏まえ、各種 JavaScript ライブラリでお馴染みの $ 関数 (ID による要素検索) を、ごく簡易にですが、関数スタイルで実装してみました。まずは実装を見ていただく前に、このような例を考えてみてください。 $(…

無限数列、無限級数、円周率

SICP ネタです。SICP 3章のストリームの節に、ライプニッツ級数というものが紹介されています。 pi/4 = 1 - 1/3 + 1/5 - 1/7 + ...という式です。項毎に符号が入れ替わる奇数の逆数の無限列、その総和が、パイの4分の1に収束する、というものです。一見理…

ランダムな関数実行

Mochikit を使って、複数の関数をランダムに呼ぶ関数、というのを作ってみました。 function randcall(/*f1, f2, f3...*/) { var f = partial(compose(next, irand), arguments); return function() { return f().apply(this, arguments); }; }短い中に Moch…

気まぐれな配列 push

データを配列に追加する時に、わざと「漏れ」を生じさせる、ということを考えてみました。 function push_or_not(ary, v) { (Math.random() <= 0.5) && ary.push(v); }およそ半分の確率で漏れます。さらに漏れ具合をランダムにしてみましょう: function push…

配列の AND、非同期な AND 検索

配列の積集合・和集合 ちょっと用があって、複数の配列の共通要素を取り出す関数を作ってみました。Mochikit を使っています。 function intersection() { var len = arguments.length; var tmp = {}; return filter( function(x) { tmp[x] || (tmp[x] = 0);…

アップデート: LDR フィード絞込みスクリプト

(id:reinyannyan:20061013:p1 のスクリプトのアップデートです。概要・使用方法についてはそちらをご参照ください。)コロン・コマンド ":reload" を新たに追加しました。これまでは、フィード一覧を全部読み込んでから絞り込みを行う必要があったんですが、…

引数固定、関数合成

id:reinyannyan:20070110:p1 の Scheme 風関数群を用いて、"cut" と "compose" という、関数操作のための便利な関数を実装します。また、その応用例として、関数的な DOM 操作の手法についても見ていきたいと思います。 引数固定 Scheme の拡張仕様として "c…

Scheme 的多値の実装

擬似的なものですが、Scheme の多値の受け渡しの仕組みを実装してみました。このようなものです: call_with_values( function(){ values(1, 2, 3) }, function(a, b, c){ // a == 1, b == 2, c == 3 } );call_with_values の第一引数は多値を返す関数で、第…

Array#inject を Scheme 的に -> map 関数の実装

id:reinyannyan:20061127:p1 で取り上げた SICP の accumulate 関数は、まだ Lisp の肝であるリストが紹介されていない段階のものでした。2章に入り、リストを用いた、より汎用的な実装が示されていますので、前回のアップデートも兼ねて見ておきたいと思い…

Range#inject を Scheme 的に -> 積分への応用

SICP を読んでいます (まだ 1 章の高階関数のところです)。練習問題で Smalltalk や Ruby (や prototype.js) の inject メソッドと同等のものが出てきましたので、ピックアップしてみたいと思います。以下の様な、a から b までの範囲の数列の総和・総乗など…

アクセサ関数

同じオブジェクトの同じ要素に何度もアクセスするような場合に便利かなと思って、作ってみました。 function accessor(object, key, initial) { if (arguments.length == 3) object[key] = initial; return function() { return (object[key] = arguments.le…

JavaScript でプロファイリング (シンプル版)

Game of Life のアルゴリズムの問題点を探ろうと思い、以前作ったプロファイラにかけて調べることにしました。が、このプロファイラは prototype.js (を自分用に改変したもの) を対象にした内容だったため、ライブラリを使わずに書いた Game of Life では使…

Conway's Game of Life

via CodeGolfGame of Life という有名なゲームがあることは辛うじて知っていたんですが、実装については全く分からずにいました。個人的にこの手のクイズは大の苦手で、まともに解いたことが無いという悔しさと、「生命」というテーマが面白そうだったことも…

LDR のクロール頻度が低い?件について

以前から指摘されていることだと思うんですが、LDR ではフィードの更新が反映されるのが結構遅い場合がありますよね?例えば、久しぶりに更新があったと思ったら一週間も前の記事だったり、といったことが割とよくある気がするんです。そこで、「更新日時の…

livedoor Reader でフィード一覧を絞り込み表示 [更新:20061115]

[20070223] 再アップデート版をファイルとして公開しました。id:reinyannyan:20070223:p1 をご覧下さい。 id:reinyannyan:20061006:p1 で実験的に作ったフィード一覧絞込みスクリプトを改善しました。フォルダ単位でのフィルタリングの他に、任意の JavaScri…

主語を入れ替えるか目的語を入れ替えるか

ちょっとしたスクリプトで、"+foo" という文字列を "OKs" という配列に、"-bar" という文字列を "NGs" という配列に入れる、という必要が生じました。 var OKs = [], NGs = []; "+foo -bar +baz ...".replace(/([-+])(\S+)/g, function(_, pm, value) { if (…

Mochikit で非同期な処理を逐次実行

hail2u.net - JSONPに同期リクエスト snippets from shinichitomita’s journal - 非同期処理をシーケンシャルに扱うためにを読んで、以前 prototype.js ベースでメソッドを逐次実行する仕組みを作ったのを思い出しました (id:reinyannyan:20060223:p1, id:re…

:subsub (更新チェックされないフィードを検出) コマンドの修正

id:reinyannyan:20060530:p2 で、登録したもののフィード一覧に出てこないフィードを検出するコマンド (:subsub) を作りました。 最近の LDR のアップデートにより、このコマンドで表示されたフィードを開くことが出来なくなったため、修正したいと思います…

livedoor clip の JSONP API からタグ・クラウドを生成するデモ

id:secondlife さんの AsyncJSONP (参照: MochiKit で JSONP の利用) を使って、MochiKit の勉強がてら作ってみました。livedoor clip の JSONP API を利用してタグ・クラウドを生成する、というものです。最近どんなキーワードの話題が注目されているかが分…

Re: LDR、フィード描画完了フック

id:brazil さんのエントリーを受けて。 complete_printfeedが、ありそでない。 この一文を見た時、「なるほど」と思いました。と言いますのは、livedoor Reader で特定のサイトや記事の本文を非表示にするの中で、描画完了のフックが無いことに気付いていな…

LDR で記事データを動的に加工する -> 全文取得への応用

これまで、イベント・フックを使ってフィード表示を制御する方法について何度か考えてきました: livedoor Reader で記事のリンク先を書き換える livedoor Reader で特定のサイトや記事の本文を非表示にする 今回も同様の主旨なんですが、テンプレート・クラ…

livedoor Reader で既読記事を非表示にする

livedoor Reader で特定のサイトや記事の本文を非表示にする に関して、はてブコメントにて表題のアイデアを提案していただきました。ちょうど、サイトの既読判定をスクリプトで行う手法が考案されて (g:subtech:id:secondlife:20060812:1155379084 id:brazi…

for ループ以外での in の利用

MochiKit で if (uri in allScripts) {みたいなテストの仕方を見て、最初意味が分かりませんでした。そこで、まさかと思いながらも試しに alert("close" in window);としてみると、true が表示されました。う〜ん、便利ですね。てっきり in はオブジェクトの…

LDR でコンテンツ・フィルタ (Part 2)

id:reinyannyan:20060714:p1 で、記事本文やタグ等を調べて不要な記事を削除する方法を考えました。今回はさらに、もしフィードが不要な記事しか含んでいなかった場合、それをフィード一覧から自動的に削除する方法を考えてみました。(不要な記事だけを含む…

livedoor Reader で特定のサイトや記事の本文を非表示にする

折り畳みの自動化 フィードに全文掲載云々という問題が言われたりしますが、それとは逆に、全文掲載してくれているんだけれど、もの凄く長文かつ大量の更新が行われるような (しかも読みにくかったりする) フィードもあるのではないかと思います。そんなフィ…

escapeHTML の実装 3 パターン (ベンチマーク付き)

ウェブを扱うライブラリやプログラムで必ずと言って良いほど見かけるものに、escapeHTML という関数があります。"&" 等、特別な意味を持つ文字を、表示等のために実体参照 (&amp;) に変換するお決まりの関数なんですが、実装には色々とバリエーションがある…

livedoor Reader での記事サムネイルの表示をサーバーに優しく (+α)

最速インターフェース研究会 :: livedoor ReaderにSimpleAPIのサムネイルを加えるGreasemonkeyスクリプト に関して、何十もある記事のサムネイルを一気に取得しようとする (可能性がある) のはちょっとマズいのではと思い、改善策を考えてみました。キューを…

MochiKit を利用したツールチップ・アプリケーション

MochiKit Google Group 経由で面白いものを発見したのでご紹介。National Weather Service, Fairbanks Forecast Office, AK地図上でマウスを動かすと各地の気象情報がツールチップで表示されます。反応がもの凄く早いので調べてみると、全ての情報はページ自…

JavaScript でプロファイリング

追記 [20061103]: ライブラリ非依存なバージョンも書いてみました。id:reinyannyan:20061103:p1 でご覧下さい。 最近自分で書いた JS プログラムが驚くほど重かったので、どこに原因があるか調べたいと思いました。その方法として、怪しいと思う箇所に (ある…