2013年8月13日火曜日

Socket.ioのサブディレクトリパスを変更する方法

/socket.ioではなく、他のものに変更したかった

最近受け持っている案件がhttpsの都合上ドメインが固定なので、/socket.ioだと、すぐに他のがsocket.ioを使いだすとかぶっちゃうということで、パスで切り替えたかった。
意外と情報がなかったので、忘れっぽいし備忘録としてざっとまとめておこう。

nginx1.4からはWebSocketもproxyできるようになったので、早速試してみました。

ちなみに試した環境は、

  • Node.JS 0.10.15
  • Socket.IO 0.9.10
/socket.io を/socketにする例です。

app.js

node.js側のスクリプトはこんな感じで、io.setを使うのがポイント

Loading ....

nginx.conf

nginxの設定は、serverディレクティブ内に記述。

Loading ....

index.html

かなり適当なので、開発者用ツールのコンソールを見て動作確認するくらいしか方法はないけど、これを改造して行けばいいのさ。

ちなみに、socket.ioのサイトにある例の/chat /newsのようにチャンネル?を分ける場合は、/socket/chat /socket/news となる。
もっと具体的に書くと

var socket = io.connect('http://hogehoge/socket/chat', {resource: 'socket'});
Loading ....

2013年6月23日日曜日

Ruby 2.0の%iが地味に便利な件

%iはシンボルの配列を生成する

それほど記述量変わらないので、あまりいい例ではないけれど、%i[hoge hage: fuga] で[:hoge, :hage, :huga]が生成される。%w[hoge hage fuga].map!(&:to_sym)としないでいい

何がいいかというと、テストの時、そのクラス/モジュールはhogeメソッドに応答するという、あまり重要でないけど、そのメソッドに乗っかっていた部分が一気に動かなくなるってのはあり得るので、テストで抑えておきたいことがある時に便利。例えばこんな感じ


%i[hoge hage fuga].each do | method_name |
  expect(Piyo).to respond_to(method_name)
end


楽っちゃ楽ですね。

Ember.jsのサンプルコードはこれがおすすめかも(2014年)

Ember.jsの情報の追い方

情報を追うもだけど、そもそもどんなものかをざっくり把握するためには、peepcodeのFire upなんちゃらってのがおすすめです。(有料&英語)

そして、ガイドとAPIドキュメントもそれなりにあるので読んで置く事+この記事もおすすめです。Getting Started with Ember.js(英語)

最後に、サンプルコードがToDoアプリによる各JSフレームワークの比較ばかりな昨今に、それよりももっとガチな例が見れる、balanced-dashboardがおすすめです。

その他に、Ember WatchEmberCastsも時々見てみるといいかもしれません。

JavaScriptよ、嫌いじゃないが、もっとマシな言語になってくれ...


2014/05/03 追記

だいぶ情報が古くなったのでアップデート

まず、Ember.jsの入門に一番おすすめなのはCode SchoolのWarming up with Ember。英語だけど、実際に課題をこなしながらやるので、理解の深まり方が違うはずです。オススメ!

日本語の記事では、Developers.IOのシリーズEmber.js入門がとても丁寧に解説されてます。貴重です。ありがたやー!

あとおすすめなのは、Ember Weekly、これを購読しとけばok

他におすすめの情報源とかあったら、教えていただけると嬉しいです。

2013年4月2日火曜日

Sublime Text 2でRubyのインデントを空白2つに指定する方法

  1. Rubyのファイルを開くか、右下の言語選択をRubyにする
  2. Preferences > Settings - More > Syntax Specific - User で設定ファイルを開く
  3. 以下を記述じゃ!
{
    "tab_size": 2,
    "translate_tabs_to_spaces": true
}

translate_tabs_to_spacesを指定しておかないと、tabキーを押すと\tが入力されるので注意。最近地味にSublime Text 2のだめなところが目立ちだした。そして新バージョンが出ないのは気のせいだろうか。TextMate2がSublime Text2並みにファイルの表示が速くなれば戻るかもしれない。検索や置換はまだTextMateの方が楽だ。


2014/01/13 Update

最近はEditorConfigも使うようになりました。

2013年2月24日日曜日

Ruby 2.0がリリースされました

最後のRuby会議から約1年半

本当に2月24日にリリースするとは素晴らしい。その反面、なんだか言語仕様をこれ以上大きく変えることもできなくなってきていて、そういった意味での成熟感が、逆に少し寂しいところもありますが、何よりもリリースされて嬉しいです。パッチレベルが0だとなんとなく本業で使う気にはなれないのですが、趣味範囲でまずは使って行こうと思います。


変更点のまとめ

参考になる記事も同時に発表されてるのでリンクしときます。

convert_keyは2.0に入らなかったようですね

Railsやってる人なら、ハッシュのキーにシンボルを使いまくるのですが、自前でyamlを扱うと、キーが文字列になっていて萎えます。そこでRailsのライブラリ(ActiveSupport)を使わないとなると、その場しのぎなコードは簡単に書けるけど、わりと面倒。Ruby本体側で何かいい方法ないかなーとなって、その期待に応える機能がconvert_keyのようでしたが、次のマイナーリリースに持ち越しのようです。残念

refinementsがexperimentalな理由

デブサミでまつもとさんが言っていたのですが、他の処理系の人たち(JRubyとか)から、処理速度が遅くなるとかクレームが来そうで、CRuby側は良い感じで実装できたらしいのですが、そういった背景があってexperimentalなんだそうです。綺麗に収まって欲しいですね。

rvmでRuby 2.0をインストールする方法

rvm get head && dvm install ruby-2.0.0

mruby、Rails 4,その他にもメジャーなgemがメジャーアップデートするそうなので、今年もRubyから目が離せませんね。

2013年2月16日土曜日

デブサミ2013に行ってきた

良かったところ

SQLアンチパターンと、SCRUM BOOT CAMP THE BOOKを書いた人のセッションは面白かったです。

SQLアンチパターンは、コメントやカテゴリなどのツリー構造を例に、parent_idでやったことある人?という、誰もが通る道的なものを参考に、入れ子集合はWeb+DB Pressの特集で見たことあって、実際やってみたけど(大変だったなぁあの頃...)、その他にも解法を紹介されていて、とても興味を持ちました。本を実は持っているけど、まだ目次しか読んでいなかったので、これは読むしかない。RDBMSを仕事で使ってる人はたぶん読んだ方がいいですね。

SCRUMのは、実はセッションタイトルは、ワンクリックデプロイみたいなものだったのですが、実際は、それをするためにはテストが必要だとか、CIだとか、ウォーターフォールのVの字だとか、その辺に興味ある人なら、「ああ、本で読んだり、人から聞いたりしたことあるー」というのから、実際に実践しつつ、なおかつその場その場で改善をしていってるんだろうなーと思えて、とても興味を持ちながら聞きました。最後に、アジャイルサムライのぐだぐだのセッションが続いて、そのセッションは微妙というか、時々見かける、ただしゃべる、行き当たりばったり感ですごくテンポの悪い苦い内容でしたが、個人的にはタイムリーな話題だったので、少し考えることができたのでよかったです。SCRUMの本も読んでみようかなぁ。周りを良い感じに巻き込むのが近道ですね。とにかく刺激をもらいました。



ちょっとねぇ...、だったところ

関数型プログラミング言語のパネルディスカッションみたいなのは、正直、何がしたいのかよく分からなかった。そこでいう関数の定義や、プログラミング言語ではなく、プログラミングスタイルだというのは、とても興味深く聞いていけたけど、その他は、話してる本人が感姿プログラミングのいいところを言えと言われても困りますとは言わないけど、なんとなく顔に出てるような、これも打ち合わせ不足なのか、物好きが集まるだけの場感がありすぎて、もう少し、広めたいんなら聞き手の現状を把握して、それに対して何か情報を出したらいいんじゃないかと思ったところです。要するに、もっと実例とコードが欲しかったです。時間が解決するのだろうかとも思ったけど、なんとなくあの感じだと、一部の分野でしか使われないままな気がしました。

会場は個人的に微妙でした。滝とかはいいんだけど、あえてここ選ぶ?という感じで。あと、セッション中に明かりを落としてるのに、かなり強めのフラッシュを使って何度も撮っていたカメラマンさんは、思いっきり発表の邪魔になっていることを察知してもらいたいところだった。

2013年1月22日火曜日

Sublime Text2で不可視文字を表示する方法

Preferencesに書き込む

"draw_white_space": "all"

タブか空白か見分けが付かなかったのを無視してましたけど、他の人がメンテしてるコードをいじる時に、いい加減辛くなってきたので調べたので忘備録化。

2013年1月20日日曜日

Wii U面白いですぜ!

任天堂贔屓ですが何か

最近WiiUを買いました。ソフトの発売予定がすごく寂しい感じになってますが、頑張れ任天堂!と思って買いました。あと、Nintendo Landの、ルイージのゴーストマンションとか、見た瞬間からやりたくて、買って速攻で友達とプレーしました。オバケを退治する側は、最初は想像以上にドキドキするし、意外と一方的な展開じゃないので、結構楽しめます。ハラハラドキドキしているので捕まる瞬間「うわー!」的な叫びが自然と出てしまうくらい熱中します。オバケも必死に勝とうと頑張るしで楽しいです。Wii U Gamepadを活かされてて、それが新感覚で楽しいというのもあると思いますが、今後も是非魅力的で楽しいゲームを作ってもらいたいです。任天堂のゲーム対する姿勢というのは、同じものづくりをする人間として、参考にさせていただいてます。


任天堂のゲームに対する熱い姿勢が好きだ!

ゲームは娯楽やエンターテイメントといった分野に属すると思います。つまり楽しむためのものだと思います。でも楽しいからといって、時間とお金を浪費するのはもったいないので、自制と自律も大事、と思います。

ところで、Wii Uについて調べていたら、任天堂の岩田社長がアイテム課金やDLCについて2011年第1四半期決算説明会の質疑応答で述べているのを見つけました。ものづくりをしている人なら、是非読んでみると面白いと思います。サービスと価値について考える人向けで技術者向けではないです。

ゲームをプレーするのは人であること、作るのもまた人であること、という認識が強くあることが伺えます。ゲームする人には楽しんでほしい、ゲームを作っている人の気持ちを利益のためだけに踏みにじるようなこともしない、ゲームが悪者にならないことを考えているんじゃないかと思って、本当にゲーム好きなんだなーと勝手な解釈をしています。

先日、消費者庁が、インターネット上の取引と「カード合わせ」に関する Q&Aを公表したようです。ゲームを楽しむためには、自制と自律が大事だと思います。ゲームも適度に嗜むことができるくらいの民度でありたいものです。

もっとWii Uでいろんなゲームを楽しみたいよー!!w


ソーシャルゲームに関する岩田社長の発言や姿勢は、日経にもあったので載せておきます。

こういうのを読むようになった自分を、ふと、「おっさんになったなー」と思ってしまったのでした。

2013年1月9日水曜日

NanocのRedcarpetフィルターでTableを有効にしたりとか

filterのパラメータに渡す

ドキュメントに載ってるのかもしれないけど、ソースコードを追ったら簡単にできたので、書いておきます。ちなみにRedcarpetのバージョンは2で動作確認しています。バージョン1の場合は、動きが違うのでソースを読んでみてください。


compile '*' do
  filter :redcarpet, options: {tables: true}


自動リンクとか、改行の設定もする例


compile '*' do
 filter :redcarpet, options: {tables: true}, markdown_options: {autolink: true }, render_options: {hard_wrap: true}
end


NanocとかRedcarpetってまだブログに書いていないので、そのうち書きたいなー。

Sublime Text 2でHTML CSS JavaScriptを綺麗に表示するHTML Prettify パッケージ

一行に圧縮されたCSSを展開する例

今回もPackage Control大活躍です。

  1. Command + Shift + P, pa:ins と入力しPackage Controllのインストールダイアログを開く
  2. HTMLPrettifyをインストール
  3. Command Shift + P, prettifyと入力し、HTMLPrettify: Prettifyを実行。完了

同様の手順でHTML, JavaScript, CSSが整形されるようです。