海外のNode.js系スタートアップのニュースを紹介

今日は今までと雰囲気を変えて、Node.js 系スタートアップに関するニュースを紹介します。

Nodejitsu が GoDaddy にジョイン

これは昨日発表されたニュースです。 NodejitsuはHerokuのようなPaaSを提供しているスタートアップです。 Nodejitsuが公開している有名なnpmパッケージとしては forever, node-http-proxy, winston, flatiron.js がありますね。forever は node.js をデーモン化するために使ってる人も多いのではないでしょうか。node-http-proxy はプロキシとして定番ですね。 Nodejitsuが元々やっていたサービスは提供をやめるそうですが、Node.jsコミュニティへの貢献は引き続き行うと表明しています。

一方で、GoDaddyはドメイン登録、VPS、サーバホスティング、SSL証明書の発行といった、日本で言うお名前ドットコム的な存在ですね。GoDaddyは元々インフラを.Netで開発していて、インフラのサーバ台数を削減させるためにNode.jsに切り替えているんだそうです。このタイミングで、Node.jsのプロフェッショナルを多く抱えているNodejitsuを買収することで、Node.jsの開発力を高める狙いが合ったと見られます。また、GoDaddyはStrongLoopというNode.jsによるmBaaSを提供しているスタートアップを自社のAPI基盤として採用したことも昨日ニュースになりました

Joyent が Node.js Foundation を設立

こちらも昨日発表されたニュースです。 Node.jsを管理していて、Node.jsによるクラウドサービスを提供しているJoyentがIBM, Microsoft, PayPal, SAP, Linux Foundationなどと協力してNode.jsコミュニティでopen governance modelを進めるための組織の設立を発表しました

Joyentはio.jsというNode.jsのforkが出たこともあり、コミュニティからの求心力が下がっていました。 今回の発表で open governance model つまり議論をオープンにし、コミュニティの意見を尊重しますよという姿勢を見せることで、改めて求心力を取り戻そうという狙いが見えます。 ちなみに、io.js も同様に open governance model を採用しています。 今後 Joyent 側がどういう動きを取るか注目です。

NodeSourceの資金調達

Node.jsの開発ツールやトレーニング、コンサルサービスを提供するスタートアップであるNodeSourceVCから3百万ドルの資金調達を実現させました。 低コストでハイパフォーマンスなWebサーバであるNode.jsを導入してみたいという企業は多そうなので、今後もこういったサービスの需要は増えそうですね。

まとめ

Node.jsは今後も熱い!

Loopbackフレームワーク入門

Node.js Advent Calendar 2014の9日目の記事です。 ブログ記事を上げるのが遅くなってすみません。

今回は、Node.jsのWAFであるLoopBackの使い方について簡単に紹介しようと思います。使ってみた感触としては、ORMがすごく優秀で、RestAPIを自動で生成してくれたりと非常に強力なフレームワークだと感じました!では紹介していきます。

Continue reading

Amazon Kindleでハイライト一覧をWeb上で見る方法

Amazon Kindleのハイライト機能活用してますか?「これは!」と思ったフレーズや文章をメモするのに便利ですよね。 でも活用しても、振り返らないともったいないです。人間は忘れてしまう生き物なので。

そこで、私はハイライトした文章をいつでも振り返られるように、Evernoteにまとめてようと思いました! このやり方をレバレッジメモと言うそうです。

そのハイライトした文章をWeb上で確認できるサイトがこちらです。

kindle.amazon.co.jp

私は今までKindle上やアプリ上でしか見れないと思っていたのですが、こういうサイトがオフィシャルに提供されているみたいです。 PCからも確認できるので、レバレッジメモ作りが捗りそうですね!

ちなみに、Kindleでハイライトするコツは気に入ったフレーズや文章だけでなく、その前後の文脈も含めてハイライトすることですね。

これは、フレーズだけハイライトしても、数日後に振り返って見た時に「あれ?なんでこれハイライトしたんだっけ?」と忘れないようにするためです。

USの方のKindleアカウントの人はkindle.amazon.comで同様に見れるみたいです。

参考

レバレッジ・リーディング
本田 直之
東洋経済新報社
売り上げランキング: 6,478
Kindle Paperwhite(ニューモデル)
Amazon (2013-10-22)
売り上げランキング: 4

2013年度を振り返る

備忘録として、2013年度を振り返ってみたいと思う。

新しく挑戦したこととしては、iOSアプリ開発。昨年に入った頃からネイティブアプリ開発に興味を持ち始めて、個人的に Objective-C の勉強を始めた。主に参考にした本は 詳解 Objective-C 2.0 第3版iPhoneアプリ開発のコツとツボ35。仕事でも前のプロジェクトでiOSアプリ開発したいと手をあげたら、開発をやらせてもらえた。そして、今のプロジェクトではiOSチームのリーディングを担当するようになった。 ただ、まだプライベートでiOSアプリをリリースで来ていないので、今年はアプリをリリースさせたい!

他には、英語の勉強とか社内外への情報発信とかもやりたいこととして挙げていたけど、結局ほとんどできなかった。でも少しずつ改善できているのでよしとする。

技術面以外で痛感したことは、サービスを成長させることの難しさ。すごいエンジニアが何人もいるプロジェクトだからといって、生み出されたサービスが成功するとは限らない。当たり前なんだけど、実際に新規サービスを立ち上げてからサービスを運用することの難しさを実感できた1年だった。ユーザが全然使ってくれなくて、終了したサービスもある。 私はどれだけ頑張っても数字で結果を残せないなら、ビジネス上は「価値がない」と思ってる。だから、この1年は技術面だけでなく、サービスで結果が残せる1年にしたい。そのため、「リーン・スタートアップ」とか「グロースハック」という分野に興味を持ち始めている。本格的な勉強はできていないけど。。

プライベートでは、結婚という1つの大きなイベントがあった。ハネムーンでハワイにいってきた。ハネムーン以外ではあまり旅行に行けなかったので、もうちょっと仕事とプライベートのバランスを重視して過ごしたい。

そんな1年でした。

NSSetの内部実装

NSSet の内部実装

ふと気になったので調べてみたところ、以下のリンクを見つけた。

どうやら実装としてはハッシュテーブルらしい。だから、要素の挿入、削除、検索が一定時間でできる。

なんでそんなことがわかるかというと、NSSet のC言語実装である CFSet が CFHashTable というハッシュテーブルを使って書かれているから。

実は CoreFoundation のソースコードは公開されていて、その一部である CFSet のソースコードも見ることができる。

CFSet のメソッドを見ていると、NSSet のどのメソッドと対応しているか、それとなくわかる。気になる実装を軽く眺めてみるだけでも楽しいかも。もしかしたら、CoreFoundation のクラスの内部でクラッシュした時に、参考になるかも(笑)

社内LTでCoreDataをバックグラウンドで扱うTipsについて話しました

社内で行われている iOS_LT に初参加してきました。
その時に発表した内容をシェアします。

PR枠として、最近リリースしたアプリについても宣伝しています(笑)
良かったらぜひダウンロードをお願いします!→こちらから

5分という発表時間だったので、CoreData で使うクラス(NSManagedObjectContext, NSManagedObject)の説明とかは省略しています。
話せなかった内容としては、Nested Context, 永続化ですね。
ここらへんはまた別の機会に話せればと思います。

WordPressに全件表示のアーカイブを作る方法(はてブ数表示付き)

この WordPress で作ったブログにアーカイブを作ってみました。

archive

設置方法

アーカイブ表示用のPHPスクリプトを設置する方法については WordPressで過去記事一覧(アーカイブ)を作成する を御覧ください。

全く同じだと芸がないので、別方法でアーカイブを実装してみました。wp_get_archives という WordPress にアーカイブ取得専用の関数があるのですが、カスタマイズ性に乏しいためです。

今回の実装では、アーカイブに「日付+タイトル+はてブ数」を表示してみました。

実装で、query_posts()というブログエントリを取得する関数を使用しました。引数に showposts を指定することで取得するエントリ数を制御できます。私の場合、全件取得したかったので、query_posts('showposts=-1') としました。

PHP Script

Link

コマンドラインでMIMEヘッダーをエンコード&デコードする方法

背景

MIME(マイム)とはインターネットの電子メールで様々なフォーマットを扱えるようにする規格のことです。MIMEによって電子メールにPDF、画像、動画など様々なドキュメントを添付することができます。

しかし、本来電子メールはUS-ASCIIしか使用できないため、メールのヘッダー部分にマルチバイト文字をそのまま入れることはできません。そのため、現在の電子メールでは以下のような形式でエンコードして、ヘッダーに格納しています。

=?charset?encoding?encoded-text=?=

そこで、このようなフォーマットの文字列をコマンドラインでエンコード、デコードする方法について書いていきます。

こういうときに、nkf コマンドが大活躍します。

なお、MIME の説明については端折るのであしからず。

インストール

mac の場合

文字エンコーディングの変換

MIMEの前に文字エンコーディングの変換について

  • nkf -w: UTF-8 に変換
  • nkf -e: EUC-JP に変換
  • nkf -s: Shift-JIS に変換
  • nkf -j: JIS(ISO-2022-JP) に変換

MIMEエンコード


MIME エンコードは「普通の文字列」を「=?charset?encoding?encoded-text=?=」のような形式の文字列に変換する操作のことです。

UTF8文字列 → MIME エンコード

「ほげほげ」は UTF8 文字列として、UTF8のままMIMEエンコードするとします。

解説

  • nkf -M: Base64 で MIMEエンコードする
  • nkf -MB: Base64 で MIMEエンコードする
    • encoded text だけ取り出す
  • nkf -MQ: quoted-printable で MIMEエンコードする
    • encoded text だけ取り出す

UTF8文字列 → MIME エンコード(JIS)

次に、出力のエンコーディングをJISでMIMEエンコードします。 JIS(ISO-2022-JP) は 7bit で表現される文字セットを使用しており、メールのエンコーディング形式として今でもよく使われています。

JIS への変換は、上で説明した通り、nkf -j オプションを加えるだけで簡単に実現出来ます。

MIMEデコード

MIME デコードは「=?charset?encoding?encoded-text=?=」のような形式の文字列を「普通の文字列」に変換する操作のことです。

解説

nkf -m: MIME デコードする

入力が「=?charset?encoding?encoded-text=?=」の形式の場合、-m オプションなしでも自動でMIMEデコードしてくれます。便利ですね!

入力が encoded-text だけの場合、明示的に -m オプションと content-transfer-encoding の形式を指定します。

まとめ

nkf コマンドを使って、MIMEエンコード&デコードしました。 簡単ですね!

参考図書

Open Hack Day でnode.jsのPassportを使ってYahoo!JAPANと楽天のOAuth認証モジュールを作った

概要

今週の土日に開催された Open Hack Day Japan という Hackathon イベントに参加して来ました。主催は Yahoo! JAPAN です。会社の同期と二人で参加しました。

紹介(Passport)

私たちがつくったものは node.js で OAuth 認証を超簡単に実装できるモジュールです。このモジュールは Passport という OAuth 認証モジュールのラッパーのような形で提供しています。

現在、Facebook, Twitter 等の数多くのウェブサービスのラッパーが提供されており、今回新たに Yahoo!JAPAN と楽天のラッパーを作成したという位置付けです。

成果物

使い方

yconnect を例に使い方を説明したいと思います。 リポジトリの examples/login/app.js で簡単に試せます。

1.アプリケーション登録

Yahoo!デベロッパーネットワーク からアプリケーション登録します。

  • アプリケーションID
  • シークレット

を取得します。ちゃんとコールバックURIも登録します。

2. インストール

リポジトリを git clone して、config.js というファイルを編集します。 先ほど取得したアプリケーションID、シークレット、コールバックURIを書いてください。 そして、npm install で依存モジュールをインストールします。

3. 起動

あとは express を起動するだけです。

これで http://localhost:3000 にアクセスすれば試すことができます。

今後

ただひとつ問題があります。yconnect でアクセストークンを取得するときに、client ID と client secret を Authorization ヘッダに付与して Basic 認証を行なうという仕様になっています。しかしながら、この認証方法は他の OAuth2.0 の実装と比較して特殊で、node の oauth モジュールがこの認証方式に対応していません。

そのため、passport-yj では npm の postinstall の時に oauth モジュールの oauth2.js にパッチを当てるという処置を暫定的に行なっています。

もちろん、このような処置はあまりイケていないので、oauth モジュールの作者に Pull Request を送って、エレガントにこの問題を解決したいと思います(続く…かも)。

2013/02/21 1:17
Pull Request 送りました!
Client Authentication via Basic Authorization, not body by gologo13 · Pull Request #126 · ciaranj/node-oauth


まとめ

  • Yahoo!JAPANと楽天向けの Passport を使った OAuth 認証モジュールの開発
  • GitHub で OSS として公開!
  • npm モジュールとして公開!

【第25回GSGL】Windows8勉強会 JavaScript + HTML によるWindows 8 Metro スタイルアプリ開発に参加してきた

【第25回GSGL】Windows8勉強会 JavaScript + HTML によるWindows 8 Metro スタイルアプリ開発 に参加してきました。

JavaScript で開発できる Metro スタイルアプリに興味があって、参加しました。 モバイルアプリが JavaScript で開発できるという意味では、Titanium Mobileを連想させますね。

感想としては、Metro は一見今までにない UI で取っつきにくそうという印象でしたが、非常に可能性を感じさせますね。ちなみに、あの @dankogai もMetro UI を褒めてますね!早く実機で触ってみたいです!

ちなみに、会場はマイクロソフト品川オフィスでした。 オフィス綺麗!

以下、勉強会のメモ

講師: 物江 修 さん

Blend for Visual Studio

  • ドラッグ&ドロップでコントローラー追加可能
  • DOM Exploer
    • どのDOM要素が選ばれているか調べられる
    • Tools: Simulator
  • Visual Studio

Windows 8

  • システムのライフタイムを管理できる
    • ライフタイム:アプリケーションの起動から終了までの期間
    • プロセスの状態遷移: 稼働状態 ←→ サスペンド状態 → 終了状態
  • アプリケーションデータ&ユーザデータ
    • Metro App. がアクセスできるデータの範囲は限られている(アクセス制限)

Metro スタイルアプリの特徴

  • 爽快で滑らかな動き
  • スナップでスケールで美しく
  • タイルでユーザとつながる
  • コントラクト

Contract

  • ユーザとつながるOS・アプリの取り決めのこと
  • 一般的に実装されるコントラクト
  • 検索、共有、設定、リモート再生、ファイル選択ツール
  • 検索コントラクト
    • 同じ検索キーワードを使って、アプリやブラウザ検索ができる
  • 共有コントラクト
    • アプリケーションデータの共有
    • クリップボードのようなもの
  • 設定コントラクト
    • アプリの設定に
    • コンテキストに応じた一貫性の実現

Tile

  • アプリの顔
  • アプリの拡張部分として重要
    • Liveタイルがユーザを惹きつけられるのでオススメ
  • ユーザが興味を持ったコンテンツへのアクセスを用意にするために、セカンダリタイルを活用せよ
  • ピン留め

サイズ

  • 正方形 OR タイル

トースト通知

  • 注意喚起、お知らせに使える(Notification)

クラウドのローミング

  • どのデバイスでも、いつもの設定で操作可能
  • 異なるデバイスの状態や初期設定を同期
  • ユーザがデバイスをまたいで作業を継続できるように、アプリのデータを同期
    • 設定ファイルなどの、あまりサイズが大きくないファイルに適している

Windows Push Notification Service

  • push 通知してくれるサービスを無償で利用できる?

Windows.Devices.Sensors

  • デバイスのセンサーを操作するためのAPI
    • 現時点では、たかだか3つぐらいのセンサーしか装備していない

Design

  • immersive: ユーザがコンテンツに没頭することを心がける

インタラクション

  • アプリバー:アプリの下部分
  • チャーム:
  • flyout
    • 一時的、または文脈上のちょっとしたUIに

Windows Store

  • アプリの唯一の入手先
  • 売り上げの8割は開発者がもらう
    • アプリ内課金は10割開発者

Windows App Certification Kit Test Results

  • アプリの審査をしてくれる
    • セキュリティとかMetroスタイルを遵守しているか
  • スタイルを守らないと、審査に通らない

リソースの場所