タグ

ブックマーク / tech.nitoyon.com (48)

  • JavaScript フレームワークがデータバインディングを実現する4通りの手法

    最近流行りの JavaScript MV* フレームワークは、どれもデータバインディングをサポートしているが、実現方法はフレームワークによって異なる。 この記事では、各種フレームワークがどのようにモデルの変更を検知しているかを次の 4 つのパターンに分類して紹介する。 モデル クラス方式 (Ember.js、Backbone.js、Ractive.js、Knockout.js など) 力ずく方式 (AngualrJS) モデル書き換え方式 (Vue.js) Object.observe 方式 (Polymer) パターン名は私が勝手に名づけたものだけど、このへんの雰囲気が理解できれば、フレームワークごとの個性が分かるだろうし、利用イメージもわきやすいんじゃないかと思っている。 1. モデル クラス方式 「モデルとして扱えるのはフレームワークが用意したモデル クラスのインスタンスだけ」という

    JavaScript フレームワークがデータバインディングを実現する4通りの手法
  • D3.js の Data-Driven な DOM 操作がおもしろい

    D3.js は「ビジュアライズ用のライブラリー」だと紹介されがちなんだけども、意外にも D3.js にはグラフを描画する機能がない。 D3.js のトップページには次のように書いてある。 D3.js はデータからドキュメントを生成するためのライブラリーです。D3 は HTML, SVG, CSS を使ってデータに命を吹き込みます。Web 標準を重要視しているので、独占的なフレームワークに縛られません。強力なビジュアライズ用のコンポーネントと data-driven な DOM 操作手順を組み合わすことで、モダン ブラウザーの能力を最大限に活用できます。 D3.js is a JavaScript library for manipulating documents based on data. D3 helps you bring data to life using HTML, SVG

    D3.js の Data-Driven な DOM 操作がおもしろい
    moqada
    moqada 2014/02/12
  • タッチ操作に対応した画像ビューワーをJavaScriptで作るならD3.jsが便利

    スマホやタブレットで写真を表示していると、ピンチでズームしたり、ドラッグで移動したりができて便利なので、あれを Web 上で実現してみたくなった。 最近のブラウザーでは touchstart や touchmove イベントでタッチ情報を取れたり、イベントの touches でマルチタッチを扱えたりするので、実現するための基盤はそろっている。 適当なライブラリーがあるかと思って探してみたが、意外と苦労してしまった。 Hammer.js が使えない タッチを扱うためのライブラリーとしては Hammer.js がメジャーらしい。スワイプ・ピンチ・ドラッグなど、各種イベントにも対応していて、これを使えば一発解決してくれそうだ。 ところが、画像ビューワーを作るには不向きだった。困ったのは次の 2 点。 ピンチやドラッグは個別には動くが、組み合わせたときに「表示位置」と「倍率」の関係を自前で計算する

    タッチ操作に対応した画像ビューワーをJavaScriptで作るならD3.jsが便利
  • Git にパッチを送って取り込まれた話

    Git の挙動に変なところを見つけたので、パッチを作って Git のメーリングリストに投げてみたところ、何度かのレビューを経て、無事に取り込まれた。 Git に貢献したい人とか、オープンソース開発の流れに興味がある人もいるだろうから、作業の流れを書いておくことにする。 1. バグを発見する 何はともあれ、修正したいところを見つけるところから。 先日、git difftool --dir-diff が便利すぎて泣きそうです という記事を書いたが、difftool --dir-diff の挙動を調べているうちに、一時ファイル書き戻し条件が変なことに気づいた。 手元のバージョンが古いのかとも思ったが、master ブランチでも再現したので、ちょっくら深入りしてみた。git difftool は Perl スクリプトだったので、ソースコードに print を追加しつつ挙動を探っていった。しばらく調

    Git にパッチを送って取り込まれた話
    moqada
    moqada 2013/07/24
  • Node.js+CoffeeScript でソースマップを使ってデバッグを楽にする方法

    以前、jQuery 1.9 のソースマップ対応で圧縮版でもデバッグが簡単になった話 を書いたけど、Node.js でソースマップする方法を紹介する。 何がうれしいかというと、Node.js で CoffeeScript や TypeScript、JSX なんかを使ったときに、例外に含まれるスタックトレースに変換前の位置を表示できる。 やり方は簡単。source-map-support というモジュールを require() するだけ。 ためしに使ってみた GitHub に動かし方が書いてあるので、その通りにやってみる。 こんな感じの demo.coffee があったとする。 require 'source-map-support' foo = -> bar = -> throw new Error 'this is a demo' bar() foo() npm install sourc

    Node.js+CoffeeScript でソースマップを使ってデバッグを楽にする方法
  • GitHub で clone するときは SSH じゃなく HTTP を使ったほうが高速

    GitHub には clone するための URL として [HTTP]、[SSH]、[Git Read-Only] の 3 つが用意されている。 いままで、SSH に慣れているという理由だけで [SSH] を利用していたのだけど、「SSH は転送速度が遅い」という問題がある。 SSH だとこんなに遅い… さっき、[SSH] で clone してみたら 20~60 KiB/s 程度の速度しか出なかった。 $ git clone git@github.com:nitoyon/tech.nitoyon.com.git Cloning into 'tech.nitoyon.com'... remote: Counting objects: 8856, done. remote: Compressing objects: 100% (2125/2125), done. remote: Total

    GitHub で clone するときは SSH じゃなく HTTP を使ったほうが高速
  • DISQUS へのコメントのインポートが意外に面倒

    更新期間が開いてしまったが、ブログの移転計画を少しずつ進めている。 おおよその過去記事の表示は問題なくなったところであり、もう間もなく移転できるところまで来ているんだけど、コメント欄の移行で手間取っている。 新生ブログのコメント欄には DISQUS を採用することを検討している。DISQUS はコメント欄の請負サービスとしては最大手だろう。英語圏では CNN や Time、MLB.com などが、日では TechCrunch JAPAN などが採用している。 アカウント登録して、JavaScript を貼り付けるだけで高機能なコメント欄ができあがるので、気軽で便利なのである。 インポートの戦略 ただ、今回は既存のブログがあるので、「JavaScript を貼って、はい、終わり」とはいかない。 過去のコメントをインポートしたいのである。 幸い、DISQUS にはインポート機能がある。Wor

    DISQUS へのコメントのインポートが意外に面倒
  • Messages for Japan に見る Google UI デザインの変化 - てっく煮ブログ

    GoogleMapsAPIちょっと前になるが、Google が Messages for Japan - Home というサイトを公開した。世界中の人が日への応援メッセージを投稿する Web サービスだ。 Messages for Japanメッセージは全て、日語に自動翻訳されており、世界中からのメッセージに勇気付けられる。HTML5 バリバリではない一見 Flash を使ってるかのように見えるぐらいに派手な見た目なんだけど、GoogleHTML5 押しの流れの延長で、JavaScript で組んである。Flash は一切使われていない。iPhone でも閲覧できるようなので、Flash は最初から選択肢に入らない。かといって HTML5 バリバリかと思いきや、実はそれほどでもない。たとえば、トップページの hover すると大きくなるアイコン。いかにも canvas を使ってそ

  • twitter の console.log() エラーよけ - てっく煮ブログ

    javascript, twitterFirebug が導入した console.log() は最近のブラウザで標準的に実装されつつあります。しかし、万が一、リリースコードに console.log が混じり込んでしまうと、古いブラウザや開発ツールが導入されていないブラウザで JavaScript エラーになってしまってとても悲しくなります。ということで、そういう場合にエラーを出さないようにするために、お手製の偽者 console オブジェクトを実装するテクニックがあります。ちょっと検索するといろいろ見つかります。 if (!window.console){ window.console = { log: function(){} }; } 確かに小さなプロジェクトでは、こういうおまじないを書いておくと安心だろうなー…と思っていたら、twitter のソースコードに次のようなコードを発見。

  • アルゴリズムイントロダクション輪講 動的計画法の発表資料 - てっく煮ブログ

    2009年3月2日に、はてな京都オフィスで開催された アルゴリズムイントロダクション輪講 の第12回で「動的計画法」について発表しました。資料をここにおいておきます。View more presentations from nitoyon.分かりやすくしようと気合を入れてまとめたら165ページの大作になっちゃいました。無駄に長くてすいません。アルゴリズムの設計と解析手法 (アルゴリズムイントロダクション)作者: T.コルメン, R.リベスト, C.シュタイン, C.ライザーソン, Thomas H. Cormen, Clifford Stein, Ronald L. Rivest, Charles E. Leiserson, 浅野哲夫, 岩野和生, 梅尾博司, 山下雅史, 和田幸一出版社/メーカー: 近代科学社発売日: 2007/03メディア: 単行

  • jQuery の配列系のメソッドをメモ - てっく煮ブログ

    JavaScriptjQuery は機能が豊富なので、しばらく使わないと忘れてしまう。ここでは、jQuery と配列の関係に絞って目的別に逆引きできるようにしておく。配列から jQuery オブジェクトを作成$ 関数に渡せばOK $([1,2,3]) NodeList のような配列っぽいものを渡しても解釈してくれる。 $(document.getElementsByTagName("div")) // $("div") と同じ ※内部的には setArray メソッドが呼ばれてるが、外から使うことは稀。jQuery を配列のように扱う要素数を取得するlength プロパティを使えばOK。 $("div").length // document.getElementsByTagName("div").length と同じ jQuery のメソッドを使って操作する限りは、適切に length

  • jQuery を高速に使う CSS セレクタの書き方 - てっく煮ブログ

    JavaScriptjQuery は CSS セレクタで要素を選んで処理できるのが魅力的ですね。そんな jQuery ですが、CSS セレクタの書き方次第で速度が大幅に変わってきます。ここでは jQuery の内部処理を疑似コードで示しつつ、jQuery を高速に使うためのポイントを5つに絞って紹介します。何度も同じセレクタを実行しないクラスだけを指定するのは禁止#id を積極的に使う途中までの結果を再利用する子供セレクタ(>)を使うと速くなることがある※ この記事は jQuery 1.2.6 のソースコードを元に記述しています1. 何度も同じセレクタを実行しない改善前 // 例題 1 $("div.foo").addClass("bar"); $("div.foo").css("background", "#ffffff"); $("div.foo").click(function(){

  • ActionScript 3.0 用デバッグ支援ライブラリいろいろ - てっく煮ブログ

    asXRayAS2 では定評のあったツール。AS3 にも対応している。サイトhttp://code.google.com/p/osflash-xray/対応バージョンActionScript 2.0, ActionScript 3.0 (Flash CS3, Flex 2)機能インスペクタ、コンソール出力 (専用ビューワ)参考"XRay" - ActionScript3 版の Firebug みたいなデバッグツール - てっく煮ブログ Alconインスペクタとコンソールのセット。パフォーマンス情報が見れたり、オブジェクトの詳細な情報をダンプできるようだ。ビューワは AIR 製。サイトhttp://blog.hexagonstar.com/alcon/対応バージョンActionScript 2.0, ActionScript 3.0 (Flash CS3, Flex 2)機能インスペクタ、コ

  • 埋め込みフォントの情報を swfassist で取得する - てっく煮ブログ

    as先日の Shibuya.js のあとに、BeInteractive! の yossy さんが「swfassist を使ってくれる人が少なくて悲しい」みたいなことを言ってたので、埋め込みフォントのベクタ情報を swfassist を使って取得してみた。SWF のバイト情報は loaderInfo.bytes に入っている。そこで、フォントを埋め込んだ SWF を swfassist にわしてやると、フォントのベクタ情報が取れる。このベクタ情報を元に ShapeOutlineDrawer を使って描画してる。(追記) ただし、loaderInfo.bytes は Flash Player 9.0.115 以降にしか含まれていないので、それ以前のバージョンだとエラーになる。ShapeOutlineDrawer には graphics.lineStyle(1,0x000000); という行が

  • フォント情報を元に歪めて描画:ユメのカタチ - てっく煮ブログ

    as埋め込みフォントの情報を swfassist で取得するから先へ進んで、フォントのベクタ情報を加工して遊んでみよう。(追記) 手元の Firefox だと「bytes が読み取れない」と例外が出る。ブラウザや Player のバージョンによっては動かない!? bytes は Flash Player 9.0.115.0 以降にしかないので、それ以前のバージョンでは動かない…ということだ。swfassist には描画の仕方を定義する FlashGraphics クラスがある。これを拡張して、FuzzyFlashGraphics というクラスを作成してみた。与えられた座標から、ずらして描画するためのクラスだ。さっそく例。ランダムにずらしつつ、ずらす幅を時間ごとに変化させてみた。FlashGraphics オブジェクトのコールバック関数 f で歪め方を定義する。そこそこ汎用的に遊べるんじゃな

  • AS3 で埋め込みフォントを使うテクニック - てっく煮ブログ

    as埋め込みフォントを使う場合のちょっとしたTipsを3つ紹介しておく。1. 何も考えずにフォントを埋め込む方法フォントを埋め込むには、Embed メタタグを利用する。 package { import flash.display.Sprite; import flash.text.TextField; public class EmbedFontTest extends Sprite { [Embed(source='アニトM-教漢.TTF', fontName='anito')] private var font:Class; public function EmbedFontTest(){ stage.align = "TL"; stage.scaleMode = "noScale"; var textField:TextField = new TextField(); textFi

  • Flash がらみで動きが - てっく煮ブログ

    Silverlight に手を出した瞬間に、Flash 界隈で面白いものが登場するのは嫌がらせですか。Flash 10 beta昨秋から Astro のコードネームで情報公開されていた Flash Player 10 のベータ版が Adobe Labs に公開されました。akihiro kamijo: Flash Player 10 beta 公開3D Effects! Vector! ByteArrayの直接保存!関連リンク(随時更新中):BeInteractive! [FlashPlayer 10 (Astro) パブリックベータがリリース]BeInteractive! [FlashPlayer10のVectorについて分かっていることまとめ]Flash Player 10 API リスト - Spark projectFlash 10 betaのインストールと最新機能の使い方 - P

  • Google Maps をぐーるぐる - てっく煮ブログ

    as, GoogleMapsAPIさっそく Google Maps API for Flash で遊んでみた。公式のチュートリアルを見ると MXML 必須のように見えるが、Map クラス自体は Sprite を継承してるので、AS3 の範囲だけで遊べる。回転、フィルタが自由自在ですよ、ということで、ぐるぐる回してみた。ドラッグ時にはマップ全体がぼやけます。ソースコードはこちら。 package { import flash.events.Event; import flash.geom.Matrix; import flash.filters.BlurFilter; import com.google.maps.Map; import com.google.maps.MapEvent; import com.google.maps.MapType; import com.google.m

  • AIR・AS3・Flex3のクラス相関図ポスターが公開中 - てっく煮ブログ

    air, flex, asFlex Team: Update on Flex, ActionScript, AIR Posters から入手できます。公開当初は、Flex Builder 3 の購入が条件だったようですが、いつの間にか、誰でもダウンロードできるようになってますよ。97MB の巨大 PDF、計5枚の迫力です。四角1つがクラス1つになっていて、メソッド・プロパティ名が四角の中に列挙されています。つまり、でかい四角は複雑なクラスというわけ。中でも目を引くのが、Flex の UIComponent と ListBase。こいつらのせいで Flex が複雑になってるいっても過言ではない・・・。個人的には、UIComponent は Sprite を継承すべきじゃなかったと思うんですよね…。ちなみに、Flex2 時代の Flex2 と AS3 のポスターはこちらにあります。http:/

    moqada
    moqada 2008/03/13
    クラス、メソッドプロパティ名がまとめられた巨大なポスター
  • LiveCoding#5 でコーディングしてきた - てっく煮ブログ

    event, flexLiveCoding #5 でコーディングしてきました。「はてブビューワーをFlexで作る」というのをやってみました。成果物完成品→http://tech.nitoyon.com/misc/live_coding5/test.swf私のはてなブックマーク一覧が表示されます 上のリンクは件数を減らしていますが、番では3,000件以上を表示していましたヘッダ部分でソートできます選択した状態で [open] ボタンを押すと、別ページで開きます検索のところに文字列を入れるとタイトルからリアルタイムで絞込みできますやったことhttp://b.hatena.ne.jp/はてなID/config?mode=export から RSS1.0 形式でブックマーク一覧をダウンロードする冒頭の「 xmlns="http://purl.org/rss/1.0/" 」を削除する。これは Fl

    moqada
    moqada 2007/12/02
    Flexではてなブックマーク一覧を表示したりするやつのコードとか。