Node.jsのoauthモジュールでTwitterのOAuth認証をしてみた

Expressを触り始めて何か作りたくなったので、とりあえず認証だけ作ってみた。 DB使うのが面倒くさかったのでサクッとできそうなTwitterのOAuth認証で、ログイン→認証→リダイレクトして管理画面トップへ、みたいに遷移するとこまでやってみた。ExpressでTwit…

CommonJSのPromiseに沿ったシンプルなオレオレDeferred書いた

jQueryのDeferredのデザインにも使われていることから、一番メジャーになりそうなCommonJS Promises/Aの提案を実装してみました。 CommonJS Promises/Aのwikiを読む限りでは、マストな仕様は以下の3つです。 Promiseは"未完"な状態から始まり、"未完"あるい…

Node.js と MongoDB でナイーブベイズによる文書分類をやってみた

タイトルは若干釣りです>< MongoDB は使ってみたかっただけ。先月から「言語処理のための機械学習入門」を読んでいるので、ナイーブベイズ分類器を書いてみました。「言語処理のための機械学習入門」はホントに説明が分かりやすい良本だった(数式全然分か…

IE8,9で後方互換モードかどうかをチェックする

GmailってIEの後方互換モードで見ると「標準モードで見ていってね!」みたいなメッセージを出してくれて親切ですよね。 あれどういう判定の仕方なんだろうと参考にGmailのJSソース見てみたら、TridentがUserAgentに含まれているかどうかで判定しているみたい…

delicious が・・・

デザインリニューアルされてる。。。 del.icio.us これはどういう意図でこういう個人スペースのデザインにしたんだろう。 自分はdeliciousの一番いいところは、ブックマークに必要なメタ情報を上手く見せつつコンパクトに一覧性保ってるところがとても好きで…

Google Closure LibraryのDeferredクラスでJSDeferredのloop相当のことをできるようにする

Google Closure LibraryではMochikitのDeferredがサードパーティライブラリとして提供されています(waitとか削られている機能もあるようですが)。 でもMochikitのDeferredではループ処理を遅延処理化する機能は提供されていないので、できるようにしてみま…

Google Closure LibraryのユニットテストをPhantomJSから実行できるようにしてみた

結構前の話になりますが、test.jsという勉強会に参加してきました。そこでt_wada氏のQunitテストをPhantomJSで実行してるやつを見て、とても刺激を受けたので、普段仕事で使ってるGoogle Closure LibraryのユニットテストをPhantomJSで実行できるTAPを作って…

Xperia arcのカメラアプリを縦向きの画面に対応するためにしたこと

Xperia arcでカメラアプリを作っていて、端末を縦にしたときの対応をしようとしたらやたら苦労したのでメモしておく。やりたかったことは、縦にしたときにプレビューが回転して、サイズも変えること。端末を縦にするとなんかプレビューが回転せずに小さくな…

Enum Factory Pattern

Androidでカメラアプリを作っていて、画像に対するフィルタを設定値からインスタンス生成して適用したい。 そこでFactory patternでやっていたのですが、Enum factory patternというのを見つけて、こっちの方が全然シンプルだし柔軟そう!と思い書き換えてみ…

Xperia arcのカメラで撮ったデータをBitmapクラスで扱えるバイトデータに変換する

public class Image { /** * @param tempData * @param width * @param height * @return * @throws NullPointerException * @throws IllegalArgumentException */ public static int[] decodeYUV(byte[] tempData, int width, int height) throws NullPoint…

Canvasの外側を丸く塗る

/** * @param canvas */ private void setBlackEdge(Canvas canvas) { float w = canvas.getWidth(); float h = canvas.getHeight(); int[] colors = new int[] { 0x00000000, 0x00000000, 0xFF000000 }; RectF rect = new RectF(0, 0, w, h); // create a p…

Google Closure Library の goog.events.EventHandler & goog.events.EventTarget のシンプル版を作ってみた

かれこれ1年くらい Google Closure Library を仕事でガッツリ使ってます。 それまでは jQuery でよくね?と思ってたのですが、もはや Closure Library なしでブラウザの大規模UI作るなんて考えられない!というくらい馴染んでしまいました。 ソースも綺麗だ…

綺麗なクラス設計でメンテしやすいJSを書くには

シンプルなHTMLを書く。これに尽きる。 HTMLがシンプルならJSもシンプルにできる(CSSはちょっと別)。 WebアプリのクライアントサイドはHTMLがやっぱり基本なんだ。

hatena-vimから更新テスト

vim

てすとてすと

久しぶり

長らく仕事でまったくブログとか書くヒマ無かったのですが、ようやく余裕が持ててきたので再会!いつのまにかブログ管理のデザインめっちゃ変わってる!

Secret of the JavaScript Ninja 3章を読んだ

2章に続いて3章を読み合わせました。ちなみに、2章で使ったassert()がほぼ全てのコードで使われているので、サンプルコードを試したい方はライブラリ化しといた方がいいと思われます。 3章は関数について。JavaScriptは関数型言語なんだよ、関数はファースト…

Secret of the JavaScript Ninja 2章を読んだ

d:id:ojimacと定期的に読んでいくことになった。 一緒に読みたい!という人がいれば気軽にTwitter(@cheesepie)で声かけてください! 2章はデバッグの基本(ロギングとブレークポイント)とテストケースについて。ロギングはまあconsole.logをクロスブラウ…

XMLHttpRequestのステータスコードが0になるケース

XMLHttpRequestのステータスコードが0になるケース。1. プロトコルがftpやfileなどhttp以外の場合 →例えば、ローカルでhtmlファイル開いて実行したりするとステータスは"0"になる2. Webサーバーがリクエストを送る時点で落ちていた場合 w3.orgに仕様として、…

週末

土曜 知人と3人で前から行きたかったガパオ食堂に行ってきた。 裏道にあるので、6年ぶりに機種変した携帯についてる地図アプリが無かったら絶対辿り着けない。。。 最新テクノロジ万歳!春雨サラダとトムヤンクンの時点で辛さで舌がマヒしかけたんだけど、味…

あけましておめでとうございます

今年は... 仕事 とにかく作る 絶対リリース 仕事外 サービスを作る! 時間を上手くやりくり 勉強会とか外に出る 本年もよろしくお願いいたします。

Yii

php

なんつー強引な。任天堂が「Zii」「Oii」「Pii」「Qii」「Uii」「Yii」を商標登録していた2006年に既に登録してたのね。キーボード配列的に「Qii」はありえるかも。 PHPのフレームワークの方も忘れないであげてください。 Yii PHP Framework: Best for Web 2…

Google ClosureでDOMContentLoadedイベント

closure のイベント処理には DOMContentLoaded イベントをクロスブラウザで実行してくれる仕組みが用意されていません。ということでready()関数を作ってみました。 jQueryの $(document).ready(fn); をclosureで書き直しただけです、すいません。。。ざっく…

初めてのJetpackでカラーピッカー作ってみた

今週末のMozilla勉強会のテーマがJetpackということで、前々から興味があったので触ってみました(初参加!ドキドキ)。JetpackはFirefoxで簡単なアドオンを作るためのアドオンです。 jQueryを内蔵してるので面倒くさい処理が簡単に書けるし、インストーラも…

Deliciousからはてなブックマークに移行した

なぜか突然そうしようと思ったのはなぜだ。 日本語のサービスはやっぱりいいなあ。 お気に入りとかもさっそく使ってみようかなと思っていくらかポチッとしてみて思ったんだけど、Deliciousのブックマークもお気に入りに追加できれば便利だと思った。 デザイ…

JavaScriptで型判定いろいろ

型の判定をするときに「typeof」とか「instanceof」とか「==」とかしょっちゅう忘れる。 あとDOM要素もwindowだったりHTMLElementParagraphElementとかいろいろあってややこしや。この辺、jQueryのisArray()やisFunction()ではどうやってるんだろと見てみる…

JavaScriptでチーム開発

チーム開発だと、テストとか後でメンバー変わった時のメンテのしやすさとか考えると、ある程度書き方の作法を統一した方がいいので、どうしようかなーと考え中。何はともあれ、名前空間とクラスの書き方は合わせた方がいいですよね。 例えばこんな風に縛った…

JSONからDOMを生成するシンプルなjQueryプラグイン

jQuery使ってると、人によってDOM生成の仕方が結構まちまちになる。 その辺、クライアントサイドもMVC("M"がJSON、"V"がHTML、"C"がプラグイン)にすれば書き方が統一できるし、ソースも綺麗になりそう。 試しに、HTMLのclass属性を元にしてJSONデータを埋…

よく分からないSubversionのエラー

dev

Windows上のフォルダをMacからSubversionでコミットしようとしたんだけど、変なエラーが。 svn: Can't move '.svn/tmp/entries' to '.svn/entries': Operation not permitted調べたら、「some immutable flag being set on these files for whatever reason…

子プロセスでCGI(PHP)を実行して親プロセスの出力ストリームに書き込み

def execCgi() { try { val arg = Array( "/Applications/XAMPP/xamppfiles/bin/php", file.getName() ); val cgiProcess: Process = Runtime.getRuntime().exec( arg ); val input: BufferedReader = new BufferedReader( new InputStreamReader( cgiProces…

部分適用関数

Scalaスケーラブルプログラミングを読んで、ようやくなんのこっちゃか分かった。 def sum( a: Int, b: Int, c: Int ) = a + b + c val a = sum _ a( 1, 2, 3 ) // 6 「_」を付けることで、部分適用関数からScalaがクラスを生成しインスタンスを返してくれる…