タグ

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

  • gitでpushしたコミットが消える現象の対処法、もしくはgit reflogの紹介 - id:anatooのブログ

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

  • 「HTML5でiOSアプリAndroidアプリを作ろう! 〜HTML5ハイブリッドアプリ開発入門〜」話しました - id:anatooのブログ

    話しました。勉強会に参加した皆さんお疲れ様でした。

    「HTML5でiOSアプリAndroidアプリを作ろう! 〜HTML5ハイブリッドアプリ開発入門〜」話しました - id:anatooのブログ
  • Mac用の作業支援キャプチャツール、Maptureがいい感じになった - id:anatooのブログ

    自分でほそぼそと開発しつつ、自分で毎日使っているMac用のキャプチャツール、Maptureを最近アップデートして色々いい感じにこなれてきたのでブログで紹介します。 Maptureというのは元々はWindows用のRaptureというソフトウェアのMac版を目指して開発したものです。自分がWindowsからMacに移行してから似たようなソフトウェアが無かったので自分で開発しました。 機能特徴 Maptureは、作業を支援するためのキャプチャツールです。画面上のスクリーンショットを取って最前列に表示することが出来るというシンプルなソフトウェアです。 Maptureの目的は、資料やメモを画面上で見ながら作業する人への支援をすることです。Mac上で作業するときにPDFの資料やメモを見ながら作業するときに、画面の一部をMaptureで切り取って付箋のように貼り付けておくことができます。常に前面に出て

    Mac用の作業支援キャプチャツール、Maptureがいい感じになった - id:anatooのブログ
  • Android4.4のWebViewではGoogle Chromeのウェブインスペクタが使えるようになった - id:anatooのブログ

    Android4.4(Kitkat)がリリースされてWebView周りが変わった。 AndroidのWebViewは今までWebkitのコンポーネントを直接使っていたが、4.4からではGoogle ChromeのベースとなっているChromiumのコンポーネントを使うようになった。それのおかげで、今までウェブインスペクタを使いたい場合はWeinreを選択する必要があったが、4.4からはGoogle Chromeのインスペクタを直接使えるようになった。 この記事ではAndroid4.4のWebViewに対してChromeウェブインスペクタを使うやり方を手短に紹介する。 Android4.4以前のインスペクタ事情 4.4以前では、Chromeのウェブインスペクタを使うにはADBというChrome拡張を入れた上で、Androidの以前からのデフォルトのブラウザやWebViewとは違うChrome

    Android4.4のWebViewではGoogle Chromeのウェブインスペクタが使えるようになった - id:anatooのブログ
  • 自分が職を失った経緯 - id:anatooのブログ

    この記事は、How I Fired Myself.という記事の試訳です。 2010年の7月、私は22歳で、カリフォルニアのあるソーシャルゲームのスタートアップで働いていた。卒業したてで、私にとって初めての物の職だった。給料をもらってアパートに住んだ。そのころ私は初めて大人になったような気分でいた。 その会社の主力製品であるRPGのコードを書く二人のエンジニアのうちの一人が私だった。大学では哲学を専攻していた。これはどういうことかと言えば、問題に対してどうやって考えればいいかを知っていた一方で、ベストプラクティスや実用的なデザインパターンに関する知識は最低限しか持っていなかった。私は信じられないほどの熱意でもって自分が持っているごく普通のLAMPの知識を駆使した。 私の悩みの種であるゲームデザイナーはしばしばWorld of Warcraftからインスピレーションを得ていた。WoWは、Bl

    自分が職を失った経緯 - id:anatooのブログ
  • HTML5によるハイブリッドアプリ開発に関する雑記 - id:anatooのブログ

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

    HTML5によるハイブリッドアプリ開発に関する雑記 - id:anatooのブログ
  • WatchReloadとMacFusionで、ウェブ開発でのリロードを完全に自動化する - id:anatooのブログ

    ウェブ開発者の誰もが必ずやらなければならないことのひとつは、自分が書いたコードの動作を確認するためにブラウザのリロードボタンを押すことだ。 以前書いたこの記事では、watchmedoとapplescriptでウェブ開発者のブラウザのリロードを自動化する方法を紹介した。この方法ではローカルのファイルの保存と同時にapplescriptでブラウザをリロードしている。このやり方だと、ローカルのファイルの更新しか補足できず、開発サーバがローカルとは別の場合には使えない。 この記事では、MacFusionと拙作のWatchReloadを組み合わせることでローカルでもリモートサーバのファイルでも保存と同時に自動的にブラウザをリロードする方法を紹介する。 MacFusionの導入 MacFusionというツールは、sshでログインできるサーバのファイルをローカルにマウントしてくれる。例えファイルがリモー

    WatchReloadとMacFusionで、ウェブ開発でのリロードを完全に自動化する - id:anatooのブログ
  • はてな×DeNA合同勉強会に行ってきた - id:anatooのブログ

    なぜかお呼ばれしたのではてな×DeNA合同勉強会に行ってきた。 肝心の内容は、下記の記事にごっそりまとめられているので見るといいと思います。 はてな x DeNA合同企画 Mobage 運用技術勉強会に行ってきた - 不可逆な毎日 はてな x DeNA合同企画 Mobage 運用技術勉強会に行ってきた - taiyoh's memorandum はてな×DeNA 「Mobage 運用技術」勉強会 - あおきのTechメモ 個人的に面白かったのは、「付き合いのあるサーバ業者から得た情報を元に推測したG社のサーバ数にくらべると、Mobageが使っているサーバ数は約半分」ということを最初に言っていたことだった。 技術的なところでへーと思ったのは、アプリケーションレベルで何が起きているのかを知るために、数秒ごとにFastCGIプロセスをアタッチしてCのスタックトレースとPerlのスタックトレースを

    はてな×DeNA合同勉強会に行ってきた - id:anatooのブログ
  • MacOSX用の作業効率化キャプチャツールMaptureの紹介 - id:anatooのブログ

    年末からMaptureという作業効率化のためのキャプチャツールの開発を進めてきて、最近やっと普通に利用できるクオリティになってきました。この記事では、作業効率化のためのキャプチャツール、Maptureを紹介します。 Maptureとは Maptureは、画面の一部をキャプチャして付箋化するMacOSX用のアプリケーションです。 通常のキャプチャツールと違って、画像をキャプチャして共有するためのアプリと言うよりも、画面をキャプチャして最前列に表示することによって、エンジニアやプログラマなどのPCを使って一日中作業する方の作業を効率化するために作成しました。 導入 Maptureのウェブサイトよりアプリケーションをダウンロードできます。ダウンロードした後、Applicationフォルダに解凍して下さい。 Maptureを起動すると、右上のメニューバーにおにぎり型のアイコンが現れるようになります

    MacOSX用の作業効率化キャプチャツールMaptureの紹介 - id:anatooのブログ
  • 適当なスクリプトをデーモン化するのに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からインストールしま

  • PHP5.4のインタラクティブシェル: 細かな改善 (PHP5.4 Advent Calendar2011 一日目) - id:anatooのブログ

    PHPに限らず、プログラミング言語のちょっとした挙動や関数の動作を確認したいときがよくあります。そういう時、何か小さなコードをエディタで書いてコマンドラインで実行するのも良いですが、インタラクティブシェルを使うとより便利です。また、PHP5.4.0RC2の時点でインタラクティブシェルに関する細かな改善もあります。 この記事では、PHP5.4でのインタラクティブシェルを紹介します。 導入 PHPでインタラクティブシェルを利用する場合、configure時にオプションを指定する必要があります。PHP5.4RC2をダウンロードし、configure時に--with-readlineオプションにreadlineがインストールされているディレクトリを指定してビルドするとインタラクティブシェルが利用できるようになります。 $ cd path/to/php-5.4.0RC2 $ ./configure

    PHP5.4のインタラクティブシェル: 細かな改善 (PHP5.4 Advent Calendar2011 一日目) - id:anatooのブログ
  • PHP5.4のtraitを使ったシングルトンパターン実装によるtrait入門 - id:anatooのブログ

    PHP5.4 alpha1がリリースされた。このリリースでは、PHPのオブジェクト指向言語の新たな機能としてtraitと呼ばれる機能が追加された。PHP5.4におけるtraitとは、型に影響を与えずにクラスに適用できるメソッドとプロパティの集合である。 早速PHP5.4 alpha1をインストールし、traitを使ってシングルトンパターンを実装した。このコードでは、クラスの継承関係に影響を与えずにシングルトンパターンをモジュール化している。 <?php trait Singleton { protected function __construct() { } static function getInstance() { static $obj = null; return $obj ?: $obj = new static; } function __clone() { throw n

    PHP5.4のtraitを使ったシングルトンパターン実装によるtrait入門 - id:anatooのブログ
  • 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のブログ
  • PHPとJavaScriptでHTTPストリーミングする話(Transfer-Encoding: chunked編) - id:anatooのブログ

    HTTPレスポンスをajaxでストリーミング的に受け取りたいとき、要するにHTTPストリーミングをしたい時には、Transfer-Encoding: chunkedなレスポンスを生成してやるとよい。こうするとAjaxではHTTPレスポンス全体を受け取るのを待たずに、レスポンスの中身にアクセスすることが出来るようになる。従って、一つのHTTPコネクションでサーバ側から任意のデータを好きなタイミングでプッシュすることが出来る。 コード 一秒ごとに生成されるJSONをストリーム的に受け取るデモのコードが以下。 <?php // push.php function output_chunk($chunk) { echo sprintf("%x\r\n", strlen($chunk)); echo $chunk . "\r\n"; } header("Content-type: applicati

    PHPとJavaScriptでHTTPストリーミングする話(Transfer-Encoding: chunked編) - id:anatooのブログ
  • 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のブログ
  • openpearでImage_GifColorConverterというgif画像の色変換するライブラリを公開しています - id:anatooのブログ

    Image_GifColorConverter \ Package \ Openpear 概要 このライブラリはgif画像の色を素早く変換することだけに特化したものです。 gif画像は内部にカラーテーブルを持っています。このライブラリはそのカラーテーブルを書き換えることでgif画像の色を変換しています。 拡張ライブラリに依存しておらず、ピュアPHPで記述されています。 カラーテーブルを書き換えるだけなので軽いと思います。 使い方 小さなライブラリなので使い方は簡単です。 色変換の指定は24bitの整数の連想配列で表現します。 <?php $converter = new Image_GifColorConverter; // 変換した画像をファイルに書き出す $converter->put('0.gif', '0_converted.gif', array(0x000000 => 0xff

  • テンプレートエンジンを素のPHPからTwigに乗り換えた理由 - id:anatooのブログ

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

    テンプレートエンジンを素のPHPからTwigに乗り換えた理由 - id:anatooのブログ
  • ScalaのOptionクラスをPHPに移植した - id:anatooのブログ

    <?php interface Option { /** * Someであったらfalse、Noneだったらtrueを返す * @return bool */ function isEmpty(); /** * Someであったらtrue、Noneだったらfalseを返す * @return bool */ function isDefined(); /** * Someであったら値を返す。Noneであった場合nullを返す * @param ? * @return ? */ function get($default_val = null); /** * Someである場合に内部の値にコールバックが適用され、その結果がfalseならばNoneが返り、そうでなければSomeが返る * @param callable $callback 一つの引数を取って真偽値を返さなければならない * @

    ScalaのOptionクラスをPHPに移植した - id:anatooのブログ
  • PHPでコンストラクタからメソッドチェーンする方法 - id:anatooのブログ

    PHPでは他の言語のようにコンストラクタからメソッドチェーンできない。例えば"new Hoge->doSomething();"というようなことができない(やってみるとパーサエラーになる)。 オブジェクトを生成して何かひとつメソッドを呼び出して終わり、という例の時に <?php $obj = new Hoge; $obj->doSomething(); とやるのは変数に何か名前をつけるコストやタイプ数などの観点から見てめんどうくさい。 そこで以下のような関数を定義する。 <?php function ref($obj) { return $obj; } この関数はみたとおり渡された値をそのまま返す関数だが、これを使うことで以下のようにメソッドチェーンできるようになる。 <?php ref(new Hoge)->doSomething(); というバッドノウハウっぽい話。

    PHPでコンストラクタからメソッドチェーンする方法 - id:anatooのブログ
  • 1