タグ

ブックマーク / os0x.hatenablog.com (23)

  • 外部JavaScriptの動的ロード - os0x.blog

    JavaScriptからJavaScriptを読み込むのは、(IEに対応する場合は特に)結構面倒です。 ちょうど昨日公開されたid:amachangのはてブにアクセスチャートを出す Greasemonkeyでは、こんな実装になっていました。 // for IE if (!document.evaluate) { var script = document.createElement('script'); script.src = 'http://svn.coderepos.org/share/lang/javascript/javascript-xpath/trunk/release/javascript-xpath-0.1.11.js'; document.body.appendChild(script); var callee = arguments.callee; var inter

    外部JavaScriptの動的ロード - os0x.blog
  • MacをJavaScriptの開発環境にするメモ - os0x.blog

    以前は自宅も仕事Windowsメインな環境だったんですが、仕事の方がでMac+英語キーボードな環境になり、ついでなので自宅もそれに合わせることにしました。 環境はMac miniの最新型で一番安いの(6月くらいに購入)とMacbook Airのやっぱり一番安いの(11月に購入)です。両方合わせて15万くらい。お手頃…なのか?どうでもいいけど、mac miniは1.3kgしかなくて、Macbook Airの13インチとほぼ同じ重さだっりします。miniデスネー。 ついでにWindowsのほうは2年半前に買ったCore2duo(Windows7アップグレード済み)で、当時そこそこハイエンドだったやつです(ちょうどMac miniと同じくらいのスペックだけどこいつは一体何kgあるんだろう…)。 以下、Macの開発環境をなるべく最近の流行りを取り入れてレポートします。 ブラウザ さて、マシンのセ

    MacをJavaScriptの開発環境にするメモ - os0x.blog
  • script, styleタグ内のコードの書き方 - os0x.blog

    # 最初にちょっと余談を。Chromium-Extensions-JapanのほうにChrome6 Betaの変更点を書きました。どうぞよろしく。 さて、scriptタグ内をHTMLコメントで括ってからJavaScript書くのって意味あるの? - Togetterの件に関して、関連ネタをいくつか書いておきます。。 まず前提として、scriptタグの中に直にコードを書くというのはできる限り避けたほうが良いです。とはいえ、ちょっとしたコードをいちいち外部ファイルにしていると読み込みのコストも馬鹿にならないので、インラインで書く事もよくあります。なので、以下は主に数行程度のコードをインラインに書く場合の話です。 scriptタグの中に直にコードを書くときはscriptタグに非対応なブラウザのために<!--で始め*1 // -->で閉じるというノウハウは今でも結構使われているみたいです。 しかし

  • オレ標準JavaScript勉強会を開催しました - os0x.blog

    Twitterでこっそりと募集して、オレ標準JavaScript勉強会というイベントを開催しました。 id:edvakfさんが来日されるということで、「会いましょう→何かやりましょう→勉強会とかどうでしょう」というTwitter上の軽いノリで企画され、みんなで短いネタを披露し合う一品持ち寄りの少人数勉強会をやってみよう、ということになりました。で、そのままTwitter上で参加者を呼びかけてみたところ、半日もたたずに15名集まって、しかもそうそうたる顔ぶれに! 当日 色々と反省があったので、少し書き出しておきます。 まず、会場*1には有線LANしかないので、自前のルータで無線LANをやろうとしたんですが、設定がなかなかうまくいかず、だいぶ手間取ってしまいました。やはり、安物のLANは駄目ですね…。大人数で繋ぐと安定しないし、有線をいっぱい用意したほうが良かったです。 で、Ustreamに挑

    オレ標準JavaScript勉強会を開催しました - os0x.blog
  • JavaScript連載第8回 - os0x.blog

    これでできる! クロスブラウザJavaScript入門の第8回は実践DOMスクリプティング#1 HTMLとテキストの操作です。 今回は今までより少し掘り下げていて、最適化とかにも少し触れています。これぐらいのほうが面白みがあって良いのかなとも思う一方、「クロスブラウザって面倒」な印象を与えてしまいかねないので難しいところです。今回の反応をみて微調整したいと思います。 記事の前半はdocument.writeに関連して非同期読み込みとかの話。直接は言及してませんが、Google Analyticsのコードがどうしてああなっているのかが大体わかるようになっていると思います。関連:t32k.com 後半はテキストをハイライトしたりするコードのサンプルです。プレーンなテキスト中の特定のワードを別のワードに置き換えたり、ハイライトしたり、リンクにしたり、といったことは結構需要としてあるけど、実際にや

    JavaScript連載第8回 - os0x.blog
  • JavaScript連載第6回 - os0x.blog

    これでできる! クロスブラウザJavaScript入門の第6回はJavaScriptHTMLとDOMの基#1です。 今回は正直に言ってかなり苦戦しました。。DOM周りは書くことがありすぎてなかなかまとめきれないし、その前にHTMLについて書いておきたいこともあってと。 script要素といえば、昔はlanguage属性というのがあって…とかは今更書くことでもないかなとか。でも、language属性書いているHTMLって結構見かけるんですよね…。まあ、あっても何か問題が起こるわけではないし、language属性とかが書いてあったらそこからいわゆる「不吉な匂い」を嗅ぎ取ることができるので、ある意味では有用です。 「不吉な匂い」を醸しだすパーツを独断と偏見で挙げてみると、 language属性 (不必要な)eval document.all(最近ではクローキングされているとはいえ、条件分岐に

    JavaScript連載第6回 - os0x.blog
  • JavaScript連載第5回 - os0x.blog

    これでできる! クロスブラウザJavaScript入門も早くも第5回で、今回はJavaScriptの基礎知識#2:クロージャ編です。 結構時間をかけた甲斐があって、かなりわかりやすくなったんじゃないかと自画自賛してるんですがいかがでしょうか? 今回もあんまりクロスブラウザしてませんが、次回からはいよいよDOMに触れていくので、当面はIEの独壇場になりそうです。 ところで記事の最後のサンプルには、以下の強制IE7モードのタグが入っています。 <meta http-equiv="X-UA-Compatible" content="IE=7"> 以下のサンプルをIE8で確認していただければ違いは歴然です。 IE7モード IE8モード まあ、極端なサンプルなので、これだけでアレコレいうのは野暮ってものですが、「IE8はIE6,7より断然良い」、と手放しに褒められないというのは困ったものです。 IE

    JavaScript連載第5回 - os0x.blog
  • JavaScript連載第4回 - os0x.blog

    これでできる! クロスブラウザJavaScript入門 第4回 JavaScriptの基礎知識#1 今回は少し基に戻ったお話です。いや基といえば基だけど、わかりにくい・間違いやすいだろうなというところにスポットを当ててます。 この連載で意識しているのは、「JavaScriptは専門じゃないけどライブラリとか使って、当にこれでいいのか不安を感じつつもJavaScriptを書いてるプログラマ」です。と、改めて考えたら高階関数とかクロージャーは書いておくべきだなと。JavaScriptって(サーバーサイドの)他の言語を専門にしてる人が(言い方悪いけど)片手間で書いてることが多いので、そういう人は結構多いだろうと思っています。 プログラミングには大抵「動く」という正解があるけど、JavaScriptではクロスブラウザを考えるとその正解のハードルがすごく高くなります(いや、高くというよりハー

    JavaScript連載第4回 - os0x.blog
  • 第3回はクロスブラウザの傾向と対策 - os0x.blog

    これでできる! クロスブラウザJavaScript入門:第3回 クロスブラウザの傾向と対策|gihyo.jp … 技術評論社 と、今さらですが、連載全体としては連載:これでできる! クロスブラウザJavaScript入門|gihyo.jp … 技術評論社からどうぞ。 今回からいよいよクロスブラウザの題に入ってきました。前回の記事について、バッドノウハウを広めるのはどうよ的なツッコミがあり、はてなブックマーク - clear sky source - とてもCSSハックが面倒ですので、何か用意してくださいのedvakfさんのコメントなどに影響されたところもあって、かなり標準仕様への準拠を意識した内容になっています。正直、すごいハードルが高くなるので不安はありますが、折角なので頑張ろうと思っています。 あと正直、何が辛いかというとDOM Level 0周りのドキュメントの少なさが一番きついで

    第3回はクロスブラウザの傾向と対策 - os0x.blog
  • 複数のバージョンのGoogle Chromeを同時に動かす方法 - os0x.blog

    複数バージョンのChromeを同時に動かす方法は公式には用意されていませんが*1、割と簡単にバージョンごとのChromeを動かすことができます。 出典はGoogle Chromeを任意のフォルダにインストールする方法など: 夜明け前と2chChromeスレ*2からです。 インストールしたいバージョンのインストーラーを用意 4.0.249.30をインストールしたい場合、http://dl.google.com/chrome/install/249.30/chrome_installer.exe からダウンロードできます。 バージョン番号の後半2つをhttp://dl.google.com/chrome/install/xxx.xx/chrome_installer.exe のxxx.xxの部分に当てはめればそのバージョンがダウンロードできます。バージョン番号は後半2つだけでユニークになるよ

    複数のバージョンのGoogle Chromeを同時に動かす方法 - os0x.blog
  • CanvasでParticles(Sand) - os0x.blog

    HTML5のcanvasで作る画像フィルター」は自分ならこう書く - by edvakf in hatenaとCanvasでローレンツアトラクタ - by edvakf in hatenaに刺激されてCanvasネタを1つ。といっても以前やったOperaのCanvasでParticles(Sand/Snow) - 0xFFの焼き直しです。 canvas sand (例によって劇重注意) Chromeで見ると良い感じだと思います(ただし、Chromeは容赦なくマシンリソースを使うのでPCが不安定になるかも…)。一応、uupaa-excanvas.jsを読み込んでいますが、IEのcreateImageDataはサポートされていないので、動作しません。Operaでも動くはずなんですが、基動かないっぽいです…。リロードしてるとたまに動きます。よくわからない…。ただのキャッシュ問題でした… すご

    CanvasでParticles(Sand) - os0x.blog
  • Googleのトップページを開くと毎秒100回実行されるスクリプトを止めるユーザースクリプト - os0x.blog

    Googleのトップページを開くと毎秒100回JavaScriptが実行されるよ - 射撃しつつ前転をみて、ちょっとソース読んでみたらホントにそんな実装になっていた。んじゃ、止めちゃいますかってことで、サジェスト自体はそのまま機能させつつ、IMEでの確定前の入力には反応しないという実装に無理やり変えるスクリプトを書きました。一応動作を確認したのはFirefox3.5(Greasemokey 0.8)、Opera10、Google Chrome Dev(4.0.213.1)です。GreaseKitは実行タイミングの問題で怪しいかも。 404 Not Found – Userscripts.org ちなみに、なんでGoogleはポーリングをしているかっていうと、IMEが確定する前の入力途中のキーワードを捕まえるためのようです。そこまでする必要ないよって人も多そうですよね。そういう人向けのスクリ

    Googleのトップページを開くと毎秒100回実行されるスクリプトを止めるユーザースクリプト - os0x.blog
  • id:mindcatさんのJavaScriptエントリに少しだけコメント - os0x.blog

    FAQ形式によるJavaScript質がわかる超入門 - 風と宇宙とプログラムが凄く良く出来てて、くやしい。じゃなくて、折角なので少しだけツッコミを。いや、これだけ完成度が高いのにツッコミというのも無粋ですが。 数値を文字列に、逆に文字を数値に変換する String(x)、Number(x)を推奨されていますが、一応、IE6ではパフォーマンスに差が出る点に注意が必要だと思います。 to_string (関数呼び出しのコストのため)IE6だとこのように結構な差がでます。(といっても10万回での結果ですが。) "" + 78ms "" + 63ms String() 125ms String() 125ms確かにChromeなどString()のほうが少しだけ速いみたいなので、ケースバイケースですね。 JavaScriptで ""+x を文字列変換に使うのは気持ち悪い - 風と宇宙とプログ

    id:mindcatさんのJavaScriptエントリに少しだけコメント - os0x.blog
  • 毎秒100回JavaScriptが実行ってのがどの程度なのか - os0x.blog

    非ネットで聞いた話なども含め、ここまでやっても信じない人もいっぱいいるみたいで、そこまで疑う人のためにとりあえずパッチは出しておいたのだが、みんな「怪しいよね」って陰で言うだけで、誰も追試はしてくれなかったみたいだ。他人の書いた、しかもCPU使用率なんて割とどうでもいい系のエントリなんてわざわざ検証する人はそりゃいないだろうとは思うけど、気分が悪いのも確かだ。どうせ誰も試さないなら、パッチ自体は次のネタにとっときゃよかったなぁ…。 http://d.hatena.ne.jp/tkng/20091003/1254578195 では折角なので、検証を。Firefox前提なら、Firebugのプロファイル機能で一発なので、検証用マシン*1で以下のスクリプト実行。 // ==UserScript== // @name google stats // @namespace http://ss-o.n

    毎秒100回JavaScriptが実行ってのがどの程度なのか - os0x.blog
  • Tween3とsetTimeoutの最適化 - os0x.blog

    JSTweener ライクなアニメーション code snippets - 0xFF、Tween2.js - 0xFFの続編です。 今までは、複数のアイテムを動かす時に動かすモノの数だけタイマーが必要でした。対して、JSTweenerはタイマー一つで動くように作られていて、自作Tweenもそうしたいと思いつつ、そういう場合は素直にJSTweener使えばいいかと思っていました。 が、ちょっと極力コンパクトな実装(ブログパーツ的なものに貼り付けたりするので、サイズ的にも、名前空間的にも)が必要になったので、改めて実装してみました。 http://gist.github.com/188922 で、JSTweener Example (Motion Typo)を Tween3で再現してみたり Tween3.js (JSTweener Example (Motion Typo)) まあ、割といい感

    Tween3とsetTimeoutの最適化 - os0x.blog
  • IE6,7のためにArray.join("") による文字列連結を使うべき - os0x.blog

    理由がない限り、Array.join("") による文字列連結は使わないほうがいいみたい - latest log の件について。 IE6の+による文字列結合が遅くて、Array.joinで連結するとマシになるよって話を(私が)初めて聞いたのはShibuya.js第1回の id:amachang の発表だったと思います。 Shibuya.js Technical Talk #1 を終えて。 - IT戦記 *1 少なくとも3年以上前のバッドノウハウが未だにIE6のみならず、IE7でも有効という現実に気が遠くなりそうですね。 で、IE6,7は基的なパワー不足で、同じJavaScriptでも他のブラウザより処理が遅いことがほとんどです。遅いブラウザに合わせてチューニングをするほうが一般的なので、特に理由がなければArray.joinを使っておいたほうが無難だと思います。 Array.join

    IE6,7のためにArray.join("") による文字列連結を使うべき - os0x.blog
  • Event Driven JavaScript - os0x.blog

    document.createEventとdispatchEvent、addEventListenerを使ってイベントドリブンに書いたJavaScriptがオレブーム(ただし、IE非対応*1 )なので、軽く紹介してみたいと思います。 具体的には、AutoPatchWork (Google Chrome Dev用のextension)をイベントドリブンで実装しています。 AutoPatchWork.jsが2009/06/11 21:00時点のソース(id:nanto_viのコメントをうけて#を.に変更済み)。シンプルさを重視しているので、324行と短めです(CSSは別ファイルですが)。 window.addEventListener('scroll', check_scroll, false); window.addEventListener('AutoPatchWork.request',

    Event Driven JavaScript - os0x.blog
  • XMLHttpRequest Level 2 と wedata バックアップ - os0x.blog

    http://ss-o.net/json/ 以下に対して、.htaccessで Header append Access-Control-Allow-Origin: *という指定をして、ヘッダーにAccess-Control-Allow-Originをつけているので、(*はすべてのドメインからのリクエストを許可) http://ss-o.net/json/wedataAutoPagerize.json http://ss-o.net/json/wedataLDRize.json などのファイルについてはFirefox3.5、Safari4、Google Chrome 2、IE8*1などのブラウザではクロスドメインでXMLHttpRequestを投げることができます。 サンプルコード javascript:(function(){ var xhr=window.XDomainRequest?

    XMLHttpRequest Level 2 と wedata バックアップ - os0x.blog
  • IEでのテキストノード走査の高速化 - os0x.blog

    に釣られて。 HatenaStar.js 1380 行目 テキストノード走査 一番のボトルネックはやはりここですね。IEなので、こんな感じでベタに計測。 makeTextNodes: function(c) { if (c.textNodes || c.textNodePositions || c.documentText) return; if (Ten.Highlight.highlighted) Ten.Highlight.highlighted.hide(); c.textNodes = []; c.textNodePositions = []; var isIE = navigator.userAgent.indexOf('MSIE') != -1; var texts = []; var pos = 0; var st = new Date*1; (function(node,

    IEでのテキストノード走査の高速化 - os0x.blog
  • CSSでHTMLタグの可視化 - os0x.blog

    CSSのcontentで、insタグやdelタグの可視化ってのは少し前からやってたんだけど、 del:after{ content:"[DEL:" attr(datetime) "]"; } ins:after{ content:"[INS:" attr(datetime) "]"; } del:after, ins:after{ color:#888888; font-size:85%; } より多くのタグを可視化してみた。まあ、ネタのひとつです。UserCSSにしてみる(http://gist.github.com/101046)と面白いけど、すごく重いしすごく崩れるのでお勧めはできない。 ただ、「可視化しても可読性を損なわない、むしろ読みやすくなるHTMLを心がける」というのは良いことだと思う。 さすがにpとliあたりはクドイので、その辺りは消した。 del:before{ cont

    CSSでHTMLタグの可視化 - os0x.blog