IT戦記

プログラミング、起業などについて書いているプログラマーのブログです😚

JavaScript

JavaScript 内で無圧縮 ZIP を作って Data URI を生成するライブラリを作りました

ちょっと思うところあって JavaScript 内で、複数のファイル情報を作って Zip で固めて、 Data URI を生成するライブラリを作ってみました。 ソースは以下の zip.js です。 http://svn.coderepos.org/share/lang/javascript/Zip/ 使うには 以下の base64.js …

はてなブックマーク JavaScript 高速化計画 補足

はじめに id:jkondo さんがブクマしてくれてるのでちょっとだけ補足 以下のつづき http://d.hatena.ne.jp/amachang/20081126/1227700830 追加修正 id:Yuichiro さんのハック 2008-11-27 - つれずれなるままに… 注意:ただ、これ appendChild 時のコストが増…

はてなブックマークのコンテンツの JavaScript を高速化する

はじめに 「新はてなブックマーク」になったということで、とっても便利になったのですが、ブックマーク一覧ページ*1が若干 JavaScript に時間が掛かっているみたいです。 というわけで 調査してみたいと思います。調査して、改善できそうなところは後で纏め…

はてなブックマークのスタッフロールをカッコよくするブックマークレット

Firefox 3.0 以上で、以下のページへ行って http://b.hatena.ne.jp/help/staff 以下のブックマークレットを実行してみてください! javascript:(function() { if (window.started) return; window.started = true; var elm = Ten.DOM.getElementsByTagAndCla…

はてなブックマークのスタッフロールをスターウォーズっぽくするブックマークレット

Firefox 3.0 以上か WebKit Nightly 以上で、以下のページへ行って http://b.hatena.ne.jp/help/staff 以下のブックマークレットを実行してみてください! javascript:(function(d,s){s=d.body.appendChild(d.createElement("script"));s.src="http://amacha…

被はてブランキングと、そのブックマークレット

お知らせ はてな側の負荷が高そうなので、公開を中止いたします。 はてなの皆様、大変ご迷惑おかけいたしました。

新はてなブックマークのエントリーをお気に入りユーザの数順に並び替える JavaScript

結構便利です。 javascript:Ten.DOM.getElementsByTagAndClassName('ul','hotentry').forEach(function(e){Ten.Selector.getElementsBySelector('> li',e).sort(function(a,b){return Ten.DOM.getElementsByTagAndClassName('img','profile-image',b).length…

Firefox メモ

alert の位置を知る dom/src/base/nsGlobalWindow.cpp 4035 行目 nsGlobalWindow::Alert JavaScript を書く alert(0); var img = document.createElement('img'); img.onload = function() { alert(1) }; alert(2); img.src = 'http://www.hatena.ne.jp/imag…

新はてブ follower ページで全 favorite する方法

ブックマークレット javascript:Array.prototype.forEach.call(document.getElementsByClassName('add-favorite'), function(e) { var ev=document.createEvent('MouseEvent'); ev.initMouseEvent('click', true, true,window,0,0,0,0,0,false,false,false,f…

ミツエーリンクスの中の人と話した

昨日 EXT JS の勉強会でお話させていただいたときに名刺交換した人がミツエーリンクスの人でした。 なんか、 「ミツエーリンクスは本当に実在したんだ!」 ってくらい接点がなかったのですが、 やっぱ、想像通りの「Yet Another Web 制作者」って感じで良か…

JavaScript はどのように実行されるか

JavaScript はどのように実行されるか Safari*1 の実装を例に JavaScript はどのようにして実行されているかを書く。自分用のメモ。日本語の出来は気にしない 1. ブラウザを起動して以下のようなページを開いたとする <html> <head> <script> var a = 1; var b = 2; alert(a + b)</script></head></html>…

サーバー起動用に JavaScript が 1 秒以上実行されなくて alert しないブラウザを作る

はじめに サムネイルサーバーのようなサービスを作るときには、ウェブサーバー上にブラウザを乗せる必要があります。 問題 ただ、そういった用途でブラウザを使う場合。 JavaScript が無限ループに落ち入らないように配慮する必要があります。 ほとんどの場…

10月29日に Ext JS/Ext GWT 勉強会で話します

最近 Ext JS の日本支社が出来たということで「いいっすねーにやにやいいっすねー」という感じで挨拶したら、「勉強会ではなしてよー」ってな感じになって、話すことになりました。 詳細は以下 https://rs.goga.co.jp/member/ext/ 内容 最近の JavaScript や…

様々なソーシャルブックマークを時系列に並べて表示できるサービスを公開!

きっかけ ここの部分 [6:33] えがちゃん: 口だけで何もサービスあたってねーじゃねーか [6:33] えがちゃん: 金かえせー!とかですか?>はまちちゃんさん [6:33] えがちゃん: って、なんでやねーん!(笑) egachat(2008/10/07) part2 - ついったーとHamachi…

JavaScript と SVG で swf ファイルを再生する JSplash が凄すぎる件について

Spark勉強会 JSplashの資料を公開+α - 最速チュパカブラ研究会 なんじゃああこりゃああああ。まじすげー! ゼリー吹いた サンプルも SVG に対応しているブラウザ(Firefox, Safari, Opera 9.6)なら再生できるのでクリックしてみてください。 (追記)swf …

Safari4 と IE8 で実装された DOM Storage とは何か

はじめに 皆様 JavaScript のスピード競争が激化し、 ECMAScript 3.1 の仕様の策定が進むなど、激動の JavaScript 時代をいかがお過ごしでしょうか。 さて今日は、今、ちまたで大ブレイクの兆しを見せている DOM Storage という仕様を紹介したいと思います。…

Firefox の nightly で LDR が動かない

原因 Firefox nightly がまだバグってて alert(window.Function == Function); // false; alert(window.Function == function(){}.constructor); // false; alert(Function == function(){}.constructor); // true; てな感じになる 対処 ページの先頭で wind…

優れたテストの重要性

JavaScript の進化 ここ 1, 2 年で JavaScript という言語は何倍も高速化されました。 それは何故でしょうか。 その要因を少し考えてみました。 SunSpider の出現 その一番の要因は、 JavaScript のパフォーマンステスト SunSpider ではないでしょうか。 Sun…

Google Chrome で Greasemokey。「Greasemetal」登場。

id:kazuhooku さんが Google Chrome の Greasemonkey を作ったみたいです>< 速い速すぎるよママン>< という訳で この前作った Pathtraq API を使って、はてブにアクセスチャートを出す Greasemonkey を作りました! - IT戦記 の User JavaScript を試し…

10 なら 10、 11 なら 20 になる関数を作りたい

以下のエントリで質問を頂いたので http://d.hatena.ne.jp/amachang/20080827/1219815788 以下のコード x + a - (x % a || a) やりたいこと a で x を丸めること こんな感じ function round(a) { return function(x) { return x + a - (x % a || a); } } var…

V8 を使った CodeRepos のプロジェクト

すごいなー。速いなー。参考にします>< twitter-v8 fcgi-v8

Google Chrome の JavaScript エンジン V8 を試す

(基本だらだら進行で、過程を追記していきます) Google Chrome が出ました Google Chrome で JavaScript エンジンが刷新されたということで、その JavaScript エンジン V8 についていろいろ調べてみようと思います。 Issues - v8 - V8 JavaScript Engine -…

IE8 の DOM オブジェクトが呼び出し可能な件

なんだこれ if (document('hoge') === '[object HTMLDocument]') alert('Oops!'); if (document.body('hoge') === '[object HTMLBodyElement]') alert('Oops!'); if (document.getElementById('target')('hoge') === '[object HTMLDivElement]') alert('Oops…

はてブのホッテントリを Pathtraq の人気順に並び替える Bookmarklet を作ってみた

Pathtra 新しい API がリリースされたみたいなので log4ZIGOROu : Pathtraq API のページカウンタで複数のURLが指定出来るようになりました さっそく何か作ってみた http://b.hatena.ne.jp/hotentry で以下のブックマークレットを実行してください javascrip…

動的ローディング雑感

以下のエントリを読んで if(typeof external_script_onload=='function')external_script_onload("loaded"); こんな1行を追加します。もちろん、external_script_onloadって名前は任意です。読み込む側はexternal_script_onloadにcallback関数を定義してあげ…

【速報】IE8 Beta 2 で DOM オブジェクトに対して Getter / Setter を追加できるように!

さっき IE8 Beta 2 が出ましたね! ということで、インストールをしてみました! で IE8 Beta 2 の DOM オブジェクトに以下の Getter Setter 用の関数群を発見! __defineGetter__ __defineSetter__ __lookupGetter__ __lookupSetter__ ちゃんと動いている見…

アクセスチャートを作ろう! Pathtraq ページチャート API と Google Chart API の合わせ技!

昨日 はてブにアクセスチャートというエントリを書いて、 Pathtraq のページチャート API と Google Chart API の組み合わせが結構便利だったので、そのノウハウを書いておきたいと思います。(後の自分のためにも) こんな感じのチャートが簡単に書けちゃい…

Pathtraq API を使って、はてブにアクセスチャートを出す Greasemonkey を作りました!

はてブのエントリーページに 以下のようなアクセスチャートを出す Greasemonkey を作りました! このアクセスチャートは、どのくらいの人がそのページに訪れたかという情報を表しています。 「このページはいつ頃から注目を集めだしたか」などの情報が一目で…

再帰下降パーサで左再帰が何故ダメなのかが分かった

やっと分かった parse("1+1+1", i); function parse(expr, i) { var left = parse(expr, i); if (expr[i++] !== '+') return 1; if (expr[i++] !== '1') throw Error; return [left, 1] } そりゃ無限ループになるわなあ。 手書きパーサなら演算子順位法を使…

wassr で全 follow するブックマークレット

手順 1. ここに行って(同じドメイン下で実行するため) 2. 以下のブックマークレットを実行する javascript:var xhr=new XMLHttpRequest;xhr.open('POST','http://api.wassr.jp/statuses/followers.json',false);xhr.send();var i=0,ids=eval('('+xhr.respo…