タグ

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

  • Git にパッチを送って取り込まれた話

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

    Git にパッチを送って取り込まれた話
  • 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 を使ったほうが高速
    agw
    agw 2013/01/12
    追記にあるCompression、Ciphers設定も大変有益
  • prototype.js 1.4.0 の Enumerable.min のバグ - てっく煮ブログ

  • 最小完全ハッシュ関数の作り方 を JavaScript で - てっく煮ブログ

    JavaScriptActionScript/Flex ネタが続いているので、たまには JavaScript ネタを。はてブ経由で知った 最小完全ハッシュ関数の作り方 が面白そうだったのだけど、「最小完全ハッシュ関数」が何か分からないまま読み進めたら、やっぱり話が分からなくなってしまった。分からないまま JavaScript に移植。 /* 順列型の最小完全ハッシュ関数 */ function ChangeNumber(arr) { var work = arr.concat(); var hash = 0; // 階乗値テーブル作成 var FACTOR = [1]; for(var i=0; i { FACTOR.unshift(FACTOR[0] * (i+1)); } for(var i=0; i { hash += work[i] * FACTOR[i]; for (j=i+1;

  • Kanasan.JS(prototype.js 読書会)に参加した - てっく煮ブログ

    JavaScript, event関西で JavaScript 勉強会を、ということで企画された Kanasan.JS に参加してきました。細かなレポートは各所に上がってるので、今更まとめる必要はなさそうです。技術的なアレコレに関しては、以下の3つのエントリがよくできてます。Greenbear Diary - Kanasan.JS (別名:prototype.jsのソースにツッコミを入れるオフ) に参加してきましたちょっとKanasan.JSまでいってきました - はこべにっき#Kanasan.JS レポート: Days on the Moonその他のレポートは、主催者のエントリ「Kanasan.JS無事終了しました (Kanasansoft Web Lab.)」のトラックバックから辿れるので、そちらを参考に。K-conbinatorPrototype.K 関数についてだけ補足しておこう。

    agw
    agw 2012/03/03
    IコンビネータとKコンビネータ。
  • jQuery で JSONP 2通り - てっく煮ブログ

    JavaScriptjQuery を使って JSONP でリクエストする方法を2通り紹介するよ。その1: $("")createElement を $() を使って実装。 $("") .attr('type', 'text/javascript') .attr('src', "http://www.example.com/jsonp.cgi?param1=value1&callback=myCallback") .appendTo($("head")); function myCallback(json){ // ロード完了時にここが呼ばれる } http://www.example.com/jsonp.cgi?param1=value1&callback=myCallback にリクエストがいく。callback のところは、サービスによって指定の仕方が違うかもね。その2: $.ajax

  • JavaScript の関数定義は真っ先に処理される - てっく煮ブログ

    JavaScriptJavaScript のイベントハンドラについて段階を追って説明した素晴らしい資料、「JavaScript のイベントハンドラ - daily dayflower」に次のような記述があった。JavaScript で関数を定義するのには,下記の3通りの手法があります。「function 文」による「関数定義」 「function 演算子」による「関数式」 Function() コンストラクタFunction() コンストラクタについては今回は触れていません。XXX() は「関数定義」,YYY は「関数式」になります。「関数定義」の場合,前述のように関数定義(実装)が前方参照可能になるという大きな違いがあります。 JavaScript のイベントハンドラ - daily dayflower言い換えると、 window.onload = hoge; function hoge

  • JavaScriptで正規表現を使わずにグローバルな文字列置換 - てっく煮ブログ

    JavaScript文字列置換のお話。通常、replace は1回しか置換してくれない。 >>> "aaaa".replace("a", "A") "Aaaa" 何度も置換させるには、正規表現を使うのが手っ取り早い。 >>> "aaaa".replace(/a/g, "A") "AAAA" 置換前の文字列を文字列で受け取ったときには、正規表現オブジェクトを作ればよい。RegExp コンストラクタの第二引数がフラグ。 function myReplaceGlobal(str, before, after){ var reg = new RegExp(before, "g"); return str.replace(reg, after); } myReplaceGlobal("aaaa", "a", "A"); // AAAA ただ、. が任意の文字にマッチしてしまったりと、弊害もある。 m

  • 論理演算子(&& と ||)を応用する - てっく煮ブログ

    javascript, asjQuery のソースコードを見ていて面白いのがあった。 function add(a, b){ addImpl(b && a, b || a); } function addImpl(a, b){ // ... } 理解するためには、論理演算子を詳しく理解する必要がある。論理演算子詳細JavaScript(というか ECMAScript)の論理演算子は、評価結果が true/false で返される訳ではなく、結果が確定した時点で評価した値が返される。まずは、|| を試してみよう。 alert(2 || 0); // 2 alert(2 || 3); // 2 alert({} || null) // [object Object] alert(0 || 3); // 3 alert(0 || 0); // 0 alert(0 || undefined); //

  • jQuery の bind, unbind の裏側 - てっく煮ブログ

    javascriptjQuery のソースを呼んでいて、イベント登録のところが複雑だったので備忘録として記しておく。バージョンは 1.2.1。そもそもの目的DOM 標準の removeEventListener は、element と type(click, submit, blur など) と listener の3つを指定する必要がある。 element.removeEventListener(click, listener, false); jQuery ではイベント解除に unbind という便利な関数が用意されている。element, type, listener を指定して解除する(通常の removeEventListener と同じ)element, type を指定して全てのイベントハンドラを解除するelement から全てのイベントを解除する例えば、 $("#foo")

  • 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

    agw
    agw 2012/03/03
    jQuery.makeArray、また.filter、.endを使ったトラバース方法の紹介。
  • jQuery.extend マニアックス - てっく煮ブログ

    JavaScriptjQuery の extend メソッドは便利なんだが複雑で忘れてしまいがちなのでメモしておく。jQuery.extend の呼び出しパターンは次の4通り。$.extend([deep,] target, obj1, [obj2, [obj3, ...)$.extend([deep,] obj)$.fn.extend([deep,] obj)$(...).extend([deep,] obj)全てのパターンで第一引数に [deep,] がある。これはオプションの引数で true を指定するとディープコピーしてくれる。以下では分かりやすくするために deep オプションは省略した一覧を掲載する。$.extend(target, obj1, [obj2, ...)$.extend(obj)$.fn.extend(obj)$(...).extend(obj)だいぶシンプルにな

    agw
    agw 2012/03/03
    コメントにてカスタムイベントを議論。
  • 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(){

  • 一様分布の和は一様に分布しない話 (2) - てっく煮ブログ

    一様分布の和の分布の計算方法は 独立なふたつの一様分布からできる分布 に載っているので改めてここで紹介するまでもなさそうなんだけど、このページは面積で考えていて、ちょっと騙された気分になる。なので、理解を深めるために別の方向から考えてみることにした。分布関数と確率密度関数[0, 1] の一応分布の分布関数は次のように書ける。 1) ¥end{array}¥right¥." class="tex" src="http://d.hatena.ne.jp/cgi-bin/mimetex.cgi?\Large~F(x)~=~\left\{~\begin{array}{ll}~0~&~(x~~1)~\end{array}\right\." />確率密度関数はこれを微分して、 1)¥end{array}¥right¥." class="tex" src="http://d.hatena.ne.jp/c

  • 具体例で説明するデザインパターン - てっく煮ブログ

    JavaScriptデザインパターンってなんだかたいそうなものに考えられがちだけど、実は、そこかしこのライブラリや仕様に取り込まれていることが多い。「デザインパターン分からん」とか「で、どうやって使うのよ」と悶々としている人には、「どういうところで使わているのか」を知っておけばイメージも沸きやすいし、意外にたいしたことないんだな、ということが分かるんじゃないだろうか。そこで、JavaScript やその周辺の技術で、デザインパターンがどのように使われているかを紹介してみることにする。ここでは、GoFの順番に沿って、以下の11個のパターンを取り上げる。生成に関するパターン Factory MethodAbstract FactoryBuilderPrototypeSingleton構造に関するパターン AdapterComposite振る舞いに関するパターン Chain Of Respon

  • はてなダイアリーに Flash を埋め込むガジェット - てっく煮ブログ

    はてなダイアリーで JavaScript eval に続く、はてなダイアリー向け汎用ブログパーツ第2弾。今回は Flash を埋め込めるようにしてみました。サンプルこんな感じで。サイズも変えられる。使い方こちらからどうぞ。SWF の URL を入力して、サイズ変更して、背景色変更して、「コードを取得」ボタンで貼り付け用のHTMLを取得します。どうぞご利用ください。ソースコードソースは http://nitoyon.googlepages.com/embed_flash.xml。内部で swfobject.js を使っているので、何も考えずに同じ MIT ライセンスで公開。IE6 ではスクロールバー分の余白が表示されてしまったので、document.body.scroll = "no" で特別に対処してます。雑感他のドメインの Flash を埋め込めるので便利。だけど、「無断リンク禁止」な

  • 経路探索アルゴリズムの「ダイクストラ法」と「A*」をビジュアライズしてみた - てっく煮ブログ

    as詳解 ActionScript 3.0アニメーション ―衝突判定・AI・3DからピクセルシェーダまでFlash上級テクニック を読んでいて、経路探索のアルゴリズムで A* が取り上げられていました。A* については、いろいろ検索して調べたりもしたのですが、やっぱりに書いてあると理解しやすいですね。せっかくなので自分流に実装してビジュアライズしてみました。ダイクストラ法まずは A* の特別なケースでもあるダイクストラ法から見ていきます。クリックすると探索のシミュレーションが開始します。スタート地点(S)からゴール(G)への探索が始まります。色がついたところが「最短経路が決定した場所」です。スタート地点から少しずつ探索が完了していきます。半分ぐらい完了しました。まだまだ進みます。最後まで終わりました。最短経路を黒色矢印で表示しています。ダイクストラ法は、スタート地点から近いノード(=マス

  • TopCoder 参加中 - てっく煮ブログ

    1ヶ月ぐらい前から TopCoder の SRM(Single Round Match)に参加してる。TopCoder は世界中から参加者が集まるネット対戦型のプログラミングコンテスト。詳しくは以下のページを参照。TopCoderで世界と渡り合う日IBMの異才――夷藤勇人 - ITmedia エンタープライズ雑記/TopCoderに挑戦 - nodchip's web siteTopCoder部 - ハチロク世代始めてから1ヶ月だけど、プログラミング能力が向上している実感がある。アルゴリズムの所要時間を予測したり、普通に解いたら爆発的な時間がかかる問題を工夫して数秒で終わるようにしたり、C++(STL)の知らなかった関数を知ったり…。激しく勉強になる。慣れるにつれて、順調にレーティングも上がっていってるところ。6回目にして yellow coder になれた。上位10%も目前。当面は y

  • 全自動ブックマーク棚卸しが想像以上に有意義な件 - てっく煮ブログ

    みんな、自分が過去にブックマークした記事って気になるよね。はてなブックマークを使ってると、勢いでブックマークしてしまうけど、なかなか振り返る機会はないもの…。少し前に「ブックマーク棚卸しがイイヨ」という記事があったんだけどブックマークの棚卸し(?)をしてます。今年一年かけてブックマークしたものを順番に見て行ってます。見るといっても、全部の記事を開いて見るわけではなく、流し読みで、「ああ、これはもう一回読んでおきたい」と思ったものを開いてはインプットしているという感じです。 はてなブックマーク棚卸し - naoyaのはてなダイアリー1年分の棚卸しとなると楽しくないし…。わたしもみんなと同じ、その一員でした。でも、もう平気。「全自動ブックマーク棚卸し」があれば!全自動ブックマーク棚卸し があればもう大丈夫。全自動で 1年前のブックマークを RSS 配信 してくれちゃいます。試しにやってみましょ

  • フォント同士を交配させて新しいフォントを作る「genoTyp」が面白い - てっく煮ブログ

    「この発想はなかった!」と驚いた。genoTyp はフォント同士を交配させて新しいフォントを生み出す実験サイトだ。早速、試しにやってみた。1. 第一世代の親を決めるgenoTyp を開いて左上の [Breed] タブをクリックすると「交配ページ」が表示される。[add original font] ボタンをクリックして、祖先となるフォントを2つ追加してみた。交配させるために2つのフォントをドラッグしてくっつけた。くっついた状態になれば交配の準備は完了だ。2. 交配させてみる中央の [cross] ボタンを押すと第一世代が誕生する。4人の子供が誕生した。父親似だったり、母親似だったり、子供によって雰囲気が異なっている。3. 第一世代でも交配別の [original font] を追加させて、第一世代の中から気に入ったものと交配させてみた。3人の子供が第二世代に誕生した。4. さらに交配!今度