タグ

ブックマーク / taiju.hatenablog.com (19)

  • Perlでメソッドチェーンのメソッドを動的に決定する - あと味

    Perl でメソッドを呼び出す時、 $class->$method; みたいな呼び出し方できるのは知ってたけど、 $class->${ \'method' } みたいな感じで、文字列のスカラーリファレンスをデリファレンスすることでも同じことができることを知った。 これを用いることでメソッドチェーンのメソッドを動的に決定することができる。 上記のように pass とかいうメソッドを用意しておけば、不要なメソッドはスキップするということもできるので、そのチェインを実行するかどうかも動的に決定できる。 コードは結構キモい感じだけど、それなりに実用性はありそう。

    Perlでメソッドチェーンのメソッドを動的に決定する - あと味
    taka222
    taka222 2013/09/03
    ”Perlでメソッドチェーンのメソッドを動的に決定する - あと味”
  • 型とかオブジェクトとか基本的なことを理解する - あと味

    今日は、kanazawa.js v1.2です。 もうちょっとしたらしゃべることになるんですけど、大変申し訳ないことに、下書きはなんとか出来上がりつつあるものの、文章を要約して、スライドにまとめる時間はなさそうなので、この記事をプレゼン資料にしちゃうことにします。(あと味的には、今までに書いた記事と被る箇所があります。) 自己紹介 大部分省略。 JavaScriptが好きです。 ブラウザを開きながら、Firebugでその場で弄って遊んでみたりできるし、関数がとても強力なところが好きです。堅苦しくない仕様がとても肌に合ってると思ってます。 最近は、プログラミングが好きというよりも、プログラミング言語が好きなんだと気付き始めてます。 オブジェクトという言葉の定義を確認する オブジェクト (プログラミング) - Wikipedia 関連するデータを束ね、代入、演算、手続き(関数やメソッドなど)を介

    型とかオブジェクトとか基本的なことを理解する - あと味
    taka222
    taka222 2011/04/17
  • reduce関数は結構有用っていうお話 - あと味

    JavaScriptに限った話ではないのですが、reduce関数を持つプログラミング言語がいくつかあります。 JavaScriptに関しては、一応、ECMAScript5の仕様に登場するようで、将来的にはどのブラウザでも使えるようになりそうな気配はあります。 Standard ECMA-262 また、MDCではreduceのアルゴリズムが掲載されているので、これを利用すれば現時点でもどのブラウザでもreduce関数を利用することができます。 reduce関数とは? MDCに掲載されている文章を引用します。 配列の(左から右へ) 2 つの値に対して同時に関数を適用し、単一の値にします。 JavaScriptのreduceは、配列のメソッドです。左ら右へとありますが、右から左へ関数を適用するreduceRightという関数もあります。*1 どういう時に使えるか 元となる配列があって、それを累積

    reduce関数は結構有用っていうお話 - あと味
    taka222
    taka222 2011/03/31
  • JavaScriptでIteratorを書く - あと味

    最近、Wordpress絡みでPHPを書くことが多くて、かつバージョンも5.2だったりするので、高階関数とか無名関数とかが無性に使いたくなります。 ということで、JavaScriptIteratorでも書いて心の平静を保つことにします。 クロージャ版Iterator これが書けるJavaScriptは素敵だ。 使用例 var iter = iterator(document.getElementsByTagName('a')); console.log(iter.next()); console.log(iter.prev()); クラスメソッド版Iterator メソッドチェーンのこと好きです。付き合ってください。 使用例 Iterator([1,2,3]).next().get(console.log).prev().get(console.log).next().get(); ge

    JavaScriptでIteratorを書く - あと味
    taka222
    taka222 2011/01/17
  • 激しくガイシュツだけど、JavaScriptでiPad(iPhone)用にソース表示ブックマークレットを作った - あと味

    iPadでプレゼンする時に、ソースが表示できないと不便だという話だったので、散々ガイシュツだけど、iPadでソース表示するためのブックマークレットを作りました。 利用技術JavaScriptオンリーで、シンタックスハイライトは、Google Code Prettifyを使いました。 iPadiPhone)向けに書いてます。それ以外のブラウザでの動作は無視。IEでは確実に動きません。 ソース bookmark.html view_source.js 補足 Google Code Prettifyのprettify.cssとprettify.jsをダウンロードして、view_source.jsとともに自分のサーバーに置いてください。 bookmark.htmlのa要素のhref属性の中にある、script.srcの値を、自分のサーバーのview_source.jsのパスに変更して、view

    激しくガイシュツだけど、JavaScriptでiPad(iPhone)用にソース表示ブックマークレットを作った - あと味
    taka222
    taka222 2010/12/07
  • Let's jQuery - ひとりでできるもん - あと味

    先週土曜日に、WCAFのイベントでセッションを担当しました。 ターゲットはWebデザイナーとマークアップエンジニアなので、比較的簡単な内容です。 セッション内容をそのまま加筆して記事にすることにします。では、以下、その内容。 jQueryの流行 jQueryは2005年に登場後、瞬く間に広まった、JavaScriptライブラリの雄です。 ひとつ、統計情報を見つけたので紹介します。 403 - Forbidden: Access is denied. この記事の上にある折れ線グラフをご覧ください。グラフにポイントし、右端に移動すると、緑色の線上に37.71%という吹き出しが表示されます。 このグラフはTop10,000サイト中、jQueryを採用しているサイトの割合を表していて、Top10,000サイト中、40%近くがjQueryを採用しているということになります。(統計結果が信用できるかど

    Let's jQuery - ひとりでできるもん - あと味
    taka222
    taka222 2010/10/20
  • node.jsでスクレイピングしてみた - あと味

    node.jsの記事を最近チラホラ見かけるので、入門してみました。 node.jsはサーバー書いてこそって感じなんだろうと思いますが、ネットワークプログラミングの経験がないので、まずは他の言語で簡単にできることをnode.jsで書いてみようという趣旨です。 node.jsのインストールとか node.jsのパッケージマネージャである、npmを使いたかったので、GitHubのnpmのページの方法でインストールしました。 MacPortsにnode.jsはあったんですけど、npmはないし、Homebrewにはnode.jsもnpmもあったんですけど、インストールしたらnpmがうまく動かなかったので、なんだか面倒な方法でインストールすることになった気がしてます。 作ったツール コマンドラインで以下のように打ち込むと、任意のディレクトリにYahoo!画像検索APIで取得できる画像を保存するサンプル

    taka222
    taka222 2010/10/17
  • JSerが比較コードを書きながらPerlのデータ構造を学ぶ - あと味

    厳密に言うと間違ってるかもしれないことを感覚的に書いているので、あまり間に受けない方がいいかもしれません。 JavaScriptは、自分が触ったことがある言語の中では、最も仕様を理解している言語になると思います。 そろそろ真面目にサーバーサイドの言語も学んでいきたいと思っているところです。 初めて触れた言語であるPerlをサンプルコードを書きながら比較して理解していこという趣旨のもと、メモがてら完全なるひとりごとをエントリーとして起こしました。 以下、延々とサンプルコードと感想コメントです。 数字や文字列 Perl my $hoge = 1; print $hoge; JavaScript var hoge = 1; print hoge; JavaScriptで言うvarはPerlでいうmy。Perlは他にもlocalとかourとかあるけど、JavaScriptにはそれに相当するものはな

    taka222
    taka222 2010/09/14
  • applyとcallの使い方を丁寧に説明してみる - あと味

    JavaScriptに、applyとcallというメソッドが用意されていますが、自分なりにapplyとcallの丁寧に説明をしてみようと思ってこのエントリーを書くなどをしてみます。 applyとcallは非常に似たメソッドなので、まずはcallから説明します。 callメソッドとは? callメソッドは以下のように呼び出します。 methodA.call(thisArg, [, arg1 [, arg2, ...]]); methodAには任意の関数(メソッド)を指定します。 callの引数は第一引数にmethodAのthisとしたいオブジェクトを指定して、第二引数以降はmethodAに渡したい引数があれば、カンマ区切りでそれぞれ指定します。 callメソッドは、すべての関数が共通して持っているメソッドです。すべての関数はFunctionクラスのオブジェクトで、callはFunction.

    applyとcallの使い方を丁寧に説明してみる - あと味
    taka222
    taka222 2010/05/17
  • JavaScriptでLispのような再帰的なリストを作るlist関数を作ってみた - あと味

    Lispの勉強をする際に、まだLisp慣れを全然してないので、JavaScriptで書くとどうだろう?ということを考えることが多々あります。 その勉強方法の良し悪しは置いといて、JavaScriptでLispのサンプルプログラムを書いてみようと思った場合、一番ネックなのが、JavaScriptとLispでは、リストの考え方がそもそも違うことかなと思いました。 Lispで(1 2 3)というリストを作る時には、以下のようなコードで作ります。*1 (cons 1 (cons 2 (cons 3 '()))) consは第一引数と第二引数から成るセルを作る関数です。 単純に(cons 1 2)というコードをJavaScriptの配列リテラル表記で表すと[1,2]となるでしょうか。 そうすると、先程作りたかった(1 2 3)というリストを作るための上記のコードをJavaScriptの配列リテラル表

    JavaScriptでLispのような再帰的なリストを作るlist関数を作ってみた - あと味
    taka222
    taka222 2010/03/25
  • Pythonのrange関数をJavaScriptで再帰を使って実装してみた - あと味

    Pythonにrange関数という数列を作る関数があるんですが、JavaScriptにもrange関数みたいなのがあると便利かもしれないと思って実装してみました。 関数型言語慣れするために再帰で書いたので、あまり長い数列は作れません。 Pythonのfor文 Pythonでは1から10までの数字をプリントする処理はこんな感じで書きます。 for i in range(1,11): print i range関数実装後のJavaScriptのコード JavaScriptでもこうやって書くと同じような結果になります。*1 range(1,11).forEach(function(i) { console.log(i); }); range関数のコード function range(start, end, step) { return ( (start === undefined) ? new

    Pythonのrange関数をJavaScriptで再帰を使って実装してみた - あと味
    taka222
    taka222 2010/03/24
  • メソッドチェーンの作り方 - あと味

    メソッドチェーンはわかりやすくて便利です。jQueryなどではメソッドチェーンが効果的に使えるように設計されているので、jQueryでメソッドチェーン使用している人も多いと思います。 このメソッドチェーンですが、作り方を解説するページがあまりない気がするので、JavaScriptを例にメソッドチェーンの作り方を紹介してみようと思います。 メソッドチェーンの原理 メソッドチェーンとは、名前のとおり、メソッドを実行して、その結果に対してさらにメソッドを実行する感じで、メソッドを繋げながら何らかの処理をしていく仕組みです。 例 hoge().fuga().piyo(); メソッドで返す値がメソッドを持っていることがメソッドチェーンを実行できる条件になります。 JavaScriptには最初からメソッドチェーンが実行できるメソッドがある JavaScriptには最初からメソッドチェーンが実行できるメ

    メソッドチェーンの作り方 - あと味
    taka222
    taka222 2010/03/08
  • createElementメソッドが微妙なので汎用的な関数にする - あと味

    JavaScriptでDOMを生成するとき、document.createElementというメソッドを使いますが、属性の設定とかstyleの設定をしようとすると、縦にひたすら代入文を書き続ける感じになってあんまり好きじゃありません。 各種JSライブラリを導入すれば解決できる話ですが、車輪の再発明でシンプルな関数を作って対応することにします。 createElement関数のサンプル function createElement(elem, attrObj, styleObj) { var element = document.createElement(elem); if (attrObj) { for (var attr in attrObj) { element[attr] = attrObj[attr]; } } if (styleObj) { for (var prop in s

    createElementメソッドが微妙なので汎用的な関数にする - あと味
    taka222
    taka222 2010/02/27
  • JavaScriptのfor文の中で、カウンタ変数を利用する関数をジェネレートするいくつかの方法 - あと味

    for文の中で、カウンタ変数を利用する関数を作るとき、はじめは必ずハマるであろうことが予想できます。 私も実際にハマったことが多々あります。 エントリーでは、for文の中で、カウンタ変数を利用する関数をジェネレートするいくつかの方法を提示したいと思います。 問題のあるコード 以下のコードがfor文の中で、カウンタ変数を利用する関数をジェネレートするコードです。for文を1から5まで繰り返し、配列の中にカウンタ変数を出力する関数を格納していきます。関数が格納された配列をさらにfor文で走査し、1から5まで出力することを意図しています。 素直にコーディングすると、まずうまくいきません。 var func_list = []; for (var i = 1; i < 6; i++) { func_list.push(function() { return console.log(i); });

    JavaScriptのfor文の中で、カウンタ変数を利用する関数をジェネレートするいくつかの方法 - あと味
  • JavaScriptの再帰の回数制限を超える実験をしてみる - あと味

    JavaScriptで再帰をすると、ブラウザによって再帰できる回数が違います。 ブラウザごとに何回再帰できるかを検証する記事がいくつかありました。 各ブラウザのJSランタイムがどこまで再帰できるか試してみた、という。 - muddy brown thang javascriptの再帰処理の限界 - 電脳戦士ハラキリ -SE道とは死ぬ事と見つけたり- JS の再帰 (追試) - 冬通りに消え行く制服ガールは✖夢物語にリアルを求めない。 - subtech Firefoxだと3,000回あたりが再帰回数の限界のようですね。 実験の概要 ということで、単純な等差数列の和を求めるコードを実行して、再帰回数の限界について実験してみました。*1 実験1 Firefoxで3,000回実行できるかどうか確認してみます。 var arithmetic_progression = function(n) {

    JavaScriptの再帰の回数制限を超える実験をしてみる - あと味
  • JSONとJSONPの違い - あと味

    解説は他にもたくさんありますが、私自身も使いはじめの頃、違いがよくわからなかったので。 JSONとは? 汎用的なデータ記述方法です。こんな感じで書きます。 { 'blog' : 'あと味', 'author' : 'jdg' } まさにJavaScriptのオブジェクトですね。*1 JSONPとは? JSONを以下のように変えたもの。 callback({ 'blog' : 'あと味', 'author' : 'jdg' }); 関数呼び出しっぽいですね。まぁ、関数呼び出しなんですけど。 どゆこと?となるポイント 見た目が関数っぽくなる意外に変更点はないように見えますが、クロスドメインでJSONを読み込む時は、なぜかJSONではなく、JSONPが使われます。(WebAPI等) また、アクセスしたらJSON形式のデータを返す単純なCGIを自分で作りたいと思った場合でも、JSONを返しても、J

    JSONとJSONPの違い - あと味
  • JavaScriptのnewって本当にいらない子? - あと味

    先日、「JavaScriptのオブジェクトについて考察してみた - あと味」を書いてから、chikuraさんからコメントいただいたり、id:dankogaiさんから「404 Blog Not Found:javascript - にはクラスはない」という記事で言及いただいたり、JavaScript: The Good Partsを読み返したりした結果、newについて調べたいという衝動にかられましたので、その調べた結果を書いてみたいと思います。 newを調べようと思ったキッカケを整理 まずは、そのキッカケから整理します。 chikuraさんのコメントより 押さえるべきポイントは、new演算子の際に何が行われるか?だと思うので、こちらのページもぜひ読んでみてください。 JavaScript の new 演算子の意味: Days on the Moon http://nanto.asablo.j

    JavaScriptのnewって本当にいらない子? - あと味
  • JavaScriptのオブジェクトについて考察してみた - あと味

    JavaScriptを勉強しているとオブジェクトとはなんぞや?ということがわからなくなってきます。選択肢が増えれば増えるほど。 JavaScriptには、同じように見えて、実は同じではないデータがあります。それらのオブジェクトについて、区別して説明が付けられるように、自分なりに考察してみました。勉強中のアウトプットなので、ここで書いた内容は事実とは大きく外れているものかもしれません。とにかく不明瞭な部分を自分なりに理由づけしたかっただけです。 サンプルコードを試される場合は、FirefoxのFireBugにあるコンソールに貼りつけて実行するか、Safariの開発ツールにあるコンソールに貼りつけて実行してください。それがわからない方は console.log の部分を alert に置き換えて確認してください。 話がややこしくなるので、今回はプロパティしか扱っていません。 名称の定義について

    JavaScriptのオブジェクトについて考察してみた - あと味
  • アマグラマーが初めてのAjaxのプログラムを作成するまでの道のり全容 - あと味

    ここ数日、会社の勉強会でjQueryをすることになって、そのデモとしてAjaxを使ったプログラムを作っていました。まともにAjaxさわったのは初めて。ノウハウが必要そうです。 jQueryの勉強会の内容は、後日整理してアップしますので、お楽しみに。 で、プログラムを作るまでの道のりを備忘録もかねて投稿しようと思います。ぶっちゃけソースレベルは低いです。まだまだ改善すべき点は山ほどありますが、作ったプログラムはたぶん修正しないので、不完全ながら公開します。 作ったプログラム scriptタグを埋め込めば、会社の制作事例を再生するブログパーツのようなもの <script id="js" type="text/javascript" src="http://higashizm.sakura.ne.jp/parts/js/loading.js"></script> これをHTMLのbody内に埋め

    アマグラマーが初めてのAjaxのプログラムを作成するまでの道のり全容 - あと味
  • 1