タグ

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

  • タスクランナーgulp.js最速入門 - id:anatooのブログ

    相変わらず仕事ではデザインやりつつJavaScript書いている。 タスクランナーとしてGrunt.jsを使っていたけれども、使ううちに段々不満がでてきた。遅かったり、記述が冗長になりがちでつらかったので最近になってgulpに乗り換えた。 gulpは良い。タスクは自動的に並列に実行され、かつストリームで処理されるので速いし、タスクの記述もストリームベースの書き方のおかげでGrunt.jsに比べるとだいぶ短くなる。 ただ、そこらにあるgulpをちょっと試しただけの日語の記事やドキュメントをみてても実際のプロジェクトで使えるレベルまでの知識を得られず学習に一日かかった。 この記事では、gulpをまともに使えるようになるまでに必要な知識を書く。 導入とHelloWorld まずは導入。npmからgulpをインストールする。 $ npm install gulp -g $ gulp -v [gu

    タスクランナーgulp.js最速入門 - id:anatooのブログ
    hiro_y
    hiro_y 2014/04/21
  • HTML5によるハイブリッドアプリ開発に関する雑記 - id:anatooのブログ

    HTML5でiPhoneAndroid向けのハイブリッドアプリを作るのが最近の流行りみたいです。ハイブリッドアプリとは、外面は普通のアプリとしてAppStoreやGoogle play marketでインストールできるものの、その中身や一部がHTML5で記述されているアプリです。 最近の有名な例だと、CookpadやLinkedIn、はてなスペース、少し前にネイティブに移行してしまいましたがfacebookのモバイルアプリもHTML5を使って記述されていました。GREE界隈で言われているらしいガワネイティブっていう言葉もハイブリッドアプリを指します。ちょっとググってみると、2016年には企業向けのアプリの50%がハイブリッドアプリになるという予測もあります。 ハイブリッドアプリの何がいいかというと、Objective-CとかJavaとかがわからなくてもウェブ系技術者であればAndroid

    HTML5によるハイブリッドアプリ開発に関する雑記 - id:anatooのブログ
    hiro_y
    hiro_y 2013/02/10
  • gitでpushしたコミットが消える現象の対処法、もしくはgit reflogの紹介 - id:anatooのブログ

    gitを使っていて、「pushしたはずのコミットがいつのまか消えた!」という話をよく聞く。はじめて遭遇すると、「あれ?コミットしたはずのコードが消えてる!今日の作業が台無しに!」と思って焦ってしまう。この記事ではそれの原因とgit reflogを使った対処法を紹介する。 なぜ起きるのか? gitにはブランチがあり、ブランチごとにコミットを記録できる。gitのリポジトリの作業領域は現在のブランチのものだ。例えばgit branchで確認すると現在のブランチを確認できる。 git branch * masterなんらかのブランチで作業するのが普通だが、現在の作業ブランチがno branchの状態になってしまうことがある。これは、コミットのハッシュIDを直接checkoutしたり、リモートのブランチを直接checkoutした時に起こる。そのときには以下のような警告が起きる。 $ git chec

    hiro_y
    hiro_y 2012/12/09
  • 適当なスクリプトをデーモン化するのにSupervisorが便利 - id:anatooのブログ

    適当なスクリプトをデーモン化しようと思った時の典型的な要件が以下であるが、この記事でも紹介したpython製のプロセス管理ツールであるSupervisorを使うことによって解決できる。 プロセスの生死の監視する プロセスが死んだら勝手に再起動する 標準出力やエラー出力のログを取る 場合によっては複数プロセスを起動したい プロセスのステータスを簡単に確認したい この記事では、プロセス管理ツールSupervisorの導入を簡単に紹介する。 インストール easy_installからインストールできる。そもそもeasy_installが入ってない場合は以下みたいにインストール。 $ curl -O http://peak.telecommunity.com/dist/ez_setup.py $ python ez_setup.pySupervisorをeasy_installからインストールしま

    hiro_y
    hiro_y 2012/03/18
    Supervisorの使い方
  • SMTPサーバを入れたくないけどメールは送りたい時に重宝するMSMTP - id:anatooのブログ

    postfixやqmailなどは入れたくないけど、sendmail相当のものを使ってメールを送りたい時に便利なMSMTPを試してみた。 この記事では、実際の導入からgmailのアカウントを利用してMSMTPでメールを送る方法を書く。 インストール MacOSXだとhomebrewからインストールできる。debianやubuntuだとaptitudeからインストールできる。 $ brew install msmtp$ aptitude install msmtp次に以下のような設定ファイルを~/.msmtprcに置く。 account default host smtp.gmail.com port 587 user hoge@gmail.com password hogehoge from hoge@gmail.com tls on tls_starttls on tls_certchec

    SMTPサーバを入れたくないけどメールは送りたい時に重宝するMSMTP - id:anatooのブログ
    hiro_y
    hiro_y 2012/03/07
    MSMTPちょっと便利かもしれない
  • github社製ボットフレームワーク、hubotをIRCボットとして導入した話

    修正: 2/10 node-cronを使ったコードの例が間違っていたので修正。 github社製のボットフレームワーク、hubotをIRCボットとして導入する話。 インストール hubotはnode.jsとcoffescriptで書かれたgithub社製のボットフレームワーク。IRCに限らず、campfireやtwitterなどいくつかのアダプタに対応しているが、ここではIRCで利用するための導入手順を記す。 あらかじめnode.jsとnpmをインストールしておいて、hubotをインストールする。 $ git clone git://github.com/github/hubot.git $ cd hubot $ npm installhubotは、ボットが扱うデータを永続化するためにredisというKVSを利用する。redisが入っていない時はエラーになるので動かす前にインストールする。

    github社製ボットフレームワーク、hubotをIRCボットとして導入した話
    hiro_y
    hiro_y 2012/02/06
    IRCとかTwitterに対応してるbotフレームワーク
  • PHP5.4の新機能の一つ: アップロード進捗の取得 - id:anatooのブログ

    PHP5.4 Advent Calendarの13日目です。@co3kさんの記事に引き続き、PHP5.4の新しい機能を紹介します。 PHP5.4で見逃せない新機能の1つとして、今までPHP単体では出来なかったファイルのアップロードの進捗情報が取得できるようになりました。今までアップロードの進捗情報は、APCやFlashなどを利用しなければ取得できないものでした。この記事では実際に動くサンプルコードと共にこの機能を紹介します。 導入 以下のようなファイルアップロードのためのフォームを用意します。この時パラメータにsession.upload_progress.nameディレクティブのエントリを追加します。これはアップロードの進捗情報を取得するという宣言で、これが無いと進捗は保存されないので注意です。この例では、"example"という値をつけています。 <?php session_start

    PHP5.4の新機能の一つ: アップロード進捗の取得 - id:anatooのブログ
    hiro_y
    hiro_y 2011/12/14
  • Node.jsがどうして注目されているのか、もしくはどうして他のサーバサイドJavaScriptはスルーされているのか - id:anatooのブログ

    サーバサイドJavaScriptにはNode.js以前にもいくつかの実装がある。ちょっと前に注目されかけたものだと、現在はAppcelerater社に買収されたAptana社が出していたJaxerなどがあるが、きちんと調べるとRingoJsやnarwhalやv8cgiなど選択肢の一つとして数えられるサーバサイドJavaScript実装がいくつかある。ただ、これらはNode.jsのように注目を浴びているわけではない。 Node.jsとこれらの既存のサーバサイドJavaScriptの違いは、他のサーバサイドJSの動作モデルが既存のサーバサイドのものと変わらないのに対して、Node.jsの場合はそうではないから。具体的には、HTTPコネクションのハンドリング戦略が違っていて、既存の動作モデルが1コネクションに対して1プロセス/スレッド消費するのに対して、Node.jsの場合は非同期I/Oを用いて

    Node.jsがどうして注目されているのか、もしくはどうして他のサーバサイドJavaScriptはスルーされているのか - id:anatooのブログ
    hiro_y
    hiro_y 2011/06/18
    「HTTPコネクションのハンドリング戦略が違っていて、既存の動作モデルが1コネクションに対して1プロセス/スレッド消費するのに対して、Node.jsの場合は非同期I/Oを用いて一つのプロセスでいくつものHTTPコネクションを扱う
  • PHPで失敗するかもしれない処理の返り値を配列で表現すると都合がいいという話 - id:anatooのブログ

    値を返すのに失敗するかもしれない処理を扱う場面というのは多い。 例えばあるファイルの中身を取得する処理について考えると、ファイルが存在する場合はその中身を取得して返すことができるが、そうでない場合は中身を取得するのに当然失敗する。 PHPに予め用意されているfile_get_contentsはまさにそれだが、この関数は処理に失敗するとfalseを返す。 ここでは別にもう一つ似た関数を作ってみる。 <?php function my_file_get_contents($path) { $buf = file_get_contents($path); return $buf === false ? array() : array($buf); } このmy_file_get_contents関数は、ファイルの中身を成功した場合は結果を持った配列を返し、そうでなければ空の配列を返す。 これから

    PHPで失敗するかもしれない処理の返り値を配列で表現すると都合がいいという話 - id:anatooのブログ
    hiro_y
    hiro_y 2010/02/03
    空配列に特別な意味を持たせない場合、エラー時の戻り値を空配列にすることでforeachとかで簡単に扱える。曖昧な真偽判定にも。
  • テンプレートエンジンを素のPHPからTwigに乗り換えた理由 - id:anatooのブログ

    そもそもPHP自体がテンプレートみたいなものなのにさらにテンプレートエンジンとか使う理由って何ですか? http://d.hatena.ne.jp/xmalloc/20091225/1261709421 nimpadでは、以前はテンプレートエンジンとして素のPHPを使っていましたが、最近Twigというテンプレートエンジンに切り替えました。 理由は幾つかあるのですがその中から主なものを挙げてみました。 テンプレートの継承ができる テンプレートを継承できるのは便利です。レイアウトなどは同じだけど細かいところは違う、というようなテンプレートを書くのが格段に楽になります。 素のPHPでレイアウトなどを共有する場合、includeする部品ひとつひとつを他のファイルに切り出してやる必要があるんですが、継承に比べるとこれは面倒です。 素のPHPからTwigに乗り換えた一番大きな理由はこれです。 変数を勝

    テンプレートエンジンを素のPHPからTwigに乗り換えた理由 - id:anatooのブログ
    hiro_y
    hiro_y 2010/01/24
    PHPでテンプレートエンジンとしてTwigを使う理由。
  • PHPで現在のスコープやオブジェクト内部の状態を対話的に確認する - id:anatooのブログ

    PHPプログラミングの際にコードをデバッグするのに最も手軽なのは、var_dumpやロガーで変数の中身を見る方法だと思う。例えば何やらおかしな動きをするメソッドがあった時に、その中のコードにvar_dumpを差し込んでコマンドラインで実行する。そして来とるべき値から外れている変数や値を見つけることで、バグの原因を見つけるのに有用な情報を得ることができる。 このやり方は簡単だが問題がある。おかしな動きをするメソッドの中に、var_dump($a);というコードを挿入して、コマンドラインで実行して、$aという変数の中身を確認する。が、特に何もおかしなところがない。コードを書き換えて次は$bという変数の中身を見るが問題はない。次にコードを書き換えて$cという変数の中身を…という風に、おかしな値がなかなか見つからない時に var_dump等のコードを挿入する コマンドラインで実行する 表示された

    PHPで現在のスコープやオブジェクト内部の状態を対話的に確認する - id:anatooのブログ
    hiro_y
    hiro_y 2009/08/03
    PHPで対話的デバッグ。
  • JavaScriptでクラス定義する時、クロージャを使う場合とprototypeを使う場合の違い - id:anatooのブログ

    クロージャを使ってクラス定義する例が以下。 function FooClass(a) { this.getA = function() { return a; } this.square = function() { return a * a; } } prototypeを使ってクラス定義する例が以下。 function BarClass(a) { this.a = a } BarClass.prototype = { "getA" : function() { return this.a; }, "square" : function() { return this.a * this.a; } } クロージャを使っている場合は、オブジェクトが生成されるたびに違った関数オブジェクトがメソッドとして登録されるが、prototypeを使っている場合は、オブジェクトが生成された時にメソッドとして

    JavaScriptでクラス定義する時、クロージャを使う場合とprototypeを使う場合の違い - id:anatooのブログ
    hiro_y
    hiro_y 2009/06/20
    JavaScriptでクラスを使う場合に、クロージャで定義するかprototypeで定義するか。
  • jQueryでPUT, DELETEリクエストを送るメソッドを定義する - id:anatooのブログ

    extend使って$.ajaxメソッドのラッパーを定義してやってるのが以下。 $.extend({ "put" : function (url, data, success, error) { error = error || function() {}; return $.ajax({ "url" : url, "data" : data, "success" : success, "type" : "PUT", "cache" : false, "error" : error, "dataType" : "json" }); }, "del" : function (url, data, success, error) { error = error || function() {}; return $.ajax({ "url" : url, "data" : data, "succe

    jQueryでPUT, DELETEリクエストを送るメソッドを定義する - id:anatooのブログ
    hiro_y
    hiro_y 2009/05/27
    jQueryの$.ajaxを拡張してPUT/DELETEに対応させる。
  • limeでなるべく気軽にユニットテストを書く - id:anatooのブログ

    limeというのはSymfonyフレームワークで使われてるユニットテストライブラリで、このライブラリはインストールも簡単で、実際にテストを書くのも楽なのでよく使う。 この記事ではlimeというライブラリを簡単に説明しつつ、クラスファイルにテストを埋め込むことで、より気軽にテストを書く方法を紹介する。 limeのインストール http://svn.symfony-project.com/tools/lime/tags/RELEASE_1_0_6/lib/lime.phpからファイルを適当な場所に保存する。limeは一つのファイルで完結しているのでインストールはこれで終わり。 実際にテスト書いてみる 通常の書き方が以下。 <?php include_once 'lime.php'; $t = new lime_test; $t->is('hoge', 'hoge', '比較のテスト'); $t

    limeでなるべく気軽にユニットテストを書く - id:anatooのブログ
    hiro_y
    hiro_y 2009/05/05
    limeを簡単に扱う。debug_backtrace関数の戻り値を使ってテストを本体コードに記述。
  • PHPでlazy map - id:anatooのブログ

    いまいち使いどころが見つからないけどPHPでlazy map書いてみた。 通常のmap(PHPだとarray_map)は、与えられたリストのすべてに関数を適用したリストを返すが、lazy mapでは実際にイテレータから値を取り出す時に初めて関数を適用する。 <?php class LazyMap implements Iterator { protected $iterator, $callback; function __construct($seq, $callback) { if (is_array($seq)) $this->iterator = new ArrayIterator($seq); elseif ($seq instanceof Iterator) $this->iterator = $seq; elseif ($seq instanceof IteratorAggr

    PHPでlazy map - id:anatooのブログ
    hiro_y
    hiro_y 2009/05/02
    値を取り出すときに関数を適用するLazyMapの実装。
  • PHPのlist表現を使おう - id:anatooのブログ

    PHPにはlist表現というものがあるが、積極的に使われているのをあんまり見ない。 これはおそらくlistの以外な便利さが詳細まで知られていないからかと思う。 そこでこの記事ではPHPのlistの使い方を細かく説明していくことにする。 基的な使い方 list表現は代入式の左辺で使われ、右辺の配列の要素を一連の変数に代入する事が出来る。 そのlistのごく基的な使い方の例が以下。 <?php list($first, $second) = array(1, 2); 変数$firstに右辺の配列の0番目の要素が代入され、変数$secondに右辺の配列の1番目の要素が代入される。 listの外見は関数の呼び出しとほとんど変わらないので奇妙に見えるかもしれない。 上のコードは、以下とほぼ同じ意味を持つ。 <?php $arr = array(1,2); $first = $arr[0]; $s

    PHPのlist表現を使おう - id:anatooのブログ
    hiro_y
    hiro_y 2009/04/06
    PHPのlistを便利に使う。
  • PHPのコールバックを使いやすくする - id:anatooのブログ

    PHPのコールバックは少し使い辛いので、それを和らげるようなスニペットを実験的に書いた。 コードはこんな感じ。 <?php class Curry { protected $callback, $bind; protected function __construct($callback, Array $bind) { if(!is_callable($callback)) throw new InvalidArgumentException; list($this->callback, $this->bind) = func_get_args(); } static function make($callback, $bind) { return array(new self($callback, $bind), 'invoke'); } function invoke() { $arg

    PHPのコールバックを使いやすくする - id:anatooのブログ
    hiro_y
    hiro_y 2009/04/03
    PHPのコールバックを使いやすく。元々が使いづらすぎるんだよな。Reflection使うとだいぶマシだけど。
  • 最小のDIコンテナを使って疎結合にする例 - id:anatooのブログ

    前回のエントリの続き。 この記事では前回のエントリで書いたDIコンテナを使ってクラス間を疎結合にする例を書く。 クラス間を疎結合にすると言っても、クラスの内部で他のクラスに依存しているのではDIコンテナをどう使おうと疎結合にはならない。 以下のコードがそう。Loggerクラス内部にLogWriterクラスへの依存を抱えている。 <?php // ごくごく単純なロガー class Logger { protected $writer; function __construct() { // LogWriterクラスがハードコーディングされている! $this->writer = new LogWriter; } function debug($msg) { $this->writer->write('[debug]' . date('c') . ' '. $msg . PHP_EOL); }

    最小のDIコンテナを使って疎結合にする例 - id:anatooのブログ
    hiro_y
    hiro_y 2008/12/24
    PHPでDI。オブジェクトの生成/設定がコンテナ側でなされるということ。
  • 最小のDIコンテナ in PHP - id:anatooのブログ

    DIコンテナがなにやら大仰なものとして勘違いされているような気がしたので、機能を極限まで削ぎ落とした最小のDIコンテナを書いた。 これにはAOPは当然ないし、設定ファイルなどもない。 <?php // DIContainer.php class DIContainer { protected $componentFactory; function __construct(ComponentFactory $c) { $this->componentFactory = $c; $c->accept($this); } function get($name) { $name = strtolower($name); if (!isset($this->objects[$name])) { $this->objects[$name] = $this->componentFactory->get(

    最小のDIコンテナ in PHP - id:anatooのブログ
    hiro_y
    hiro_y 2008/12/15
    DIコンテナのおいしい部分はこの先。
  • PHPでのシングルトンパターン - id:anatooのブログ

    まあ自分の場合はこう書くかなあ <?php class Klass { private function __construct() { } static function getInstance() { static $obj = null; return $obj ? $obj : $obj = new self; // 5.3以降なら return $obj ?: $obj = new self; } } Klass::getInstance(); ネタ元: http://blog.asial.co.jp/483

    PHPでのシングルトンパターン - id:anatooのブログ
    hiro_y
    hiro_y 2008/12/04
    シングルトン。なるほど「return $obj ? $obj : $obj = new self;」