Sooey

2011-07-07 17:21:58 +0900

7月7日に、MTL(Media Technology Labs)さんの素敵な会場をお借りしてHeroku-ja Meetup #1を開催しました。

Heroku-ja Meetup #1 | Flickr - Photo Sharing!

会場提供&Ustream配信などでサポートしていただいたMTLの@kawanetさんと@hiroohiさん、アバウトな時間配分だったにも関わらず絶妙なペース配分でトークしてくださったスピーカーのみなさん(@mitsuhiroさん、@pwimさん、@mat_akiさん、@june29さん、@komagataさん、@yebiharaさん)、そして参加していただいたみなさん、どうもありがとうございました。フィーリングで計画・運営したわりに実り多いイベントになり、とても面白かったです。参加者は総勢55名でした。

今回のトークは以下のような内容でした(スライドは順次公開されると思いますが、とりあえずURLのわかるものだけリンクしておきます)。

みなさんのトークを聞いて「みんな結構Herokuを使い込んでいるなー」と改めて思いました。Herokuを使うような人たちは何か問題が起こっても自己解決できちゃうスキルの人が多く、生活の知恵があんまり表に出てこなくてもったいないので今回のように気軽に情報交換できる場を増やしていきたいですね。

後半はビアバッシュとかBeerTalkというノリで、参加者同士あちこちで色々交流する時間でした。

こういうイベントでは勉強会+懇親会という流れが多いと思うのですが、そうするとどうしても「発表する人」と「聞きに来るお客さん」に意識が分かれてしまい、懇親会はコアな人だけの集まり…となってしまいがちな印象があります(or 勇気を出して参加したけど隅っこでカナッペをつまむ的な)。もちろんそれがハマるコミュニティもあるとは思うのですが、個人的にHeroku&Herokuユーザーには参加者同士での情報交換とかコミュニケーションをメインに集まって欲しかったのと、Heroku好きにはそれがしっくり来る雰囲気もあるんじゃないかなと感じていたので今回のようなシームレスにご歓談に移行する流れにしたのでした。

このやり方にもいい面悪い面があると思いますし、どの会場でもできるわけではないのですが(今回MTLさんにお願いした理由の1つがそれ)、みなさん話が弾まれていたようでホッとしました。ただ、まだHerokuユーザーでない方や普段あまりコミュニティに参加したことのない方へのフォローがもう少し出来ればよかったかな、という点で課題は残りました。

今回、私がHerokuのユーザーMeetupをやりたいなーと思った理由は、平たく言うと「2時間とか3時間ずっとHerokuの話をしたい・聞きたい」というそれだけです。Rubyにもクラウドにも活発な素晴らしいコミュニティはたくさんありますが、

  • Rubyの集まりだとHerokuユーザーじゃない人もいる
  • PaaSの集まりだとGAEユーザーやAzureユーザーもいる
  • クラウドの集まりだとプログラマーじゃない人もいる

というように、ずっと「Heroku、Heroku」とだけ言ってるわけにはいきません。それが、この日は「Dyno」や「Worker」だけでフツーに話が盛り上がるという実に素晴らしいヘンな空間だったわけで、いろいろヤバかったですね。

最後に、セールスフォース・ドットコムの@mitsuhiroさんからは、なかなか知ることができないHerokuの社内やワークスタイルなどを紹介していただき、またHerokuのノベルティもゲットして来られるなど、イベントを盛り上げるためにご尽力いただいてとても助かりました!ありがとうございました。

Herokuの買収発表以降、セールスフォースさんは本国でも日本でも「セールスフォースの文化とHerokuの文化のすり合わせ」にとても気を配っているんだなあとは薄々感じていましたが、今回@mitsuhiroさんとお話させていただいて感じたのは「Heroku社やHerokuユーザーコミュニティに配慮したほうがよいことがある」ということを理屈じゃなくて肌感覚でわかっている方だなあということでした。ユーザーコミュニティに絶妙な距離感で接することができる方がいるというのは、Heroku社にとってもコミュニティにとってもすごく幸運なことじゃないでしょうか。

後半褒め殺しみたいになってしまいましたが、この1日でHerokuがより好きになったというお話でした。

※日本語でHerokuの情報交換したい!という方はHeroku-ja - Google グループにもぜひご参加ください。

2011-07-05 15:02:27 +0900

ラグジュアリーなWebサービスの可能性。

TAG Heuer、€4700(約55万円)からの高級Androidスマートフォン『LINK』を発表 - ガジェット通信という記事を見て思いましたが、「選ばれたエグゼクティブ達に贈るラグジュアリーなWebサービス」というアプローチはどうでしょう。

『洗練された操作性に優美なフィードバックを備えたワンランク上のTodoアプリが月額15万円』とかやったらひょっとして売れるかもしれない。

2011-07-04 02:00:28 +0900

HerokuのCedarスタックでSendgridを使うための設定について。

Herokuに新しく登場したCedarスタックでメールを送信するため、Sendgridアドオンを有効にしてWorkerのジョブからActionMailerを利用してメールを送信しようとしたところ、以下のようなエラーログが記録されました。

2011-07-01T11:34:29+00:00 app[worker.1]: Sent mail to foo@example.com (3065ms)
2011-07-01T11:34:29+00:00 app[worker.1]: [Worker(host:0ad8724e-50ca-b229-486b-542b1b07ba54 pid:1)] Class#usage_report_mail failed with Errno::ECONNREFUSED: Connection refused - connect(2) - 0 failed attempts
2011-07-01T11:34:29+00:00 app[worker.1]: [Worker(host:0ad8724e-50ca-b229-486b-542b1b07ba54 pid:1)] 1 jobs processed at 0.2842 j/s, 1 failed ...

Heroku | Dev Center | Sendgridを読んでみると、

If you’re not using Rails and ActionMailer, or you are using the Cedar stack, you will need to setup your email framework manually; check out examples below.

とあり、Cedarスタックでは明示的にActionMailerの設定を行うことが必要なようです。

というわけで、config/environments/production.rbに以下の設定を追加してアプリケーションをheroku restartしたところ、問題なくメールの送信が行われるようになりました。

TestApp::Application.configure do
  # ...

  ActionMailer::Base.smtp_settings = {
    :address        => "smtp.sendgrid.net",
    :port           => "25",
    :authentication => :plain,
    :user_name      => ENV['SENDGRID_USERNAME'],
    :password       => ENV['SENDGRID_PASSWORD'],
    :domain         => ENV['SENDGRID_DOMAIN']
  }

end

2011-06-25 17:45:41 +0900

NoirというClojure用のシンプルなWebアプリケーションフレームワークを見つけたので、インストール手順のメモ。

(ns my-app
  (:use noir.core)
  (:require [noir.server :as server]))

(defpage "/welcome" []
    "Welcome to Noir!")

(server/start 8080 {})

↑Noirでは、こんな感じでアプリケーションが書ける。

Leiningenのインストール

まず、Clojure用ビルドツールとして定番のleiningenを導入します。ビルドツールといいつつ、依存するライブラリのインストールやClojureアプリケーションの起動など色々やってくれるみたい。

leiningenはleinというシェルスクリプトとjarファイルのセットで構成されており、leinスクリプトをダウンロードして実行すると自身でjarファイルのダウンロード&インストールを行うようになっています。

$ curl -L -O https://github.com/technomancy/leiningen/raw/stable/bin/lein
$ chmod +x lein
$ ./lein
Downloading Leiningen now...
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 8003k  100 8003k    0     0  1563k      0  0:00:05  0:00:05 --:--:-- 2380k
Leiningen is a build tool for Clojure.

Several tasks are available:
classpath   Print the classpath of the current project.
clean       Remove compiled class files from project.
compile     Compile Clojure source into .class files.
deploy      Build and deploy jar to remote repository.
deps        Download all dependencies and put them in :library-path.
help        Display a list of tasks or help for a given task.
install     Install the current project or download the project specified.
interactive Enter interactive task shell.
jar         Package up all the project's files into a jar file.
javac       Compile Java source files.
new         Create a new project skeleton.
plugin      Manage user-level plugins.
pom         Write a pom.xml file to disk for Maven interop.
repl        Start a repl session either with the current project or standalone.
run         Run a -main function with optional command-line arguments.
test        Run the project's tests.
test!       Run a project's tests after cleaning and fetching dependencies.
uberjar     Package up the project files and deps into a jar file.
upgrade     Upgrade Leiningen to the latest stable release.
version     Print version for Leiningen and the current JVM.

Run lein help $TASK for details.
Also available: readme, tutorial, copying, sample, and news.

インストールが完了したら、leinコマンドはどこかパスの通ったところに置いておけばよさそうです。

Noirのインストール

leiningenでNoirプロジェクトの作成を行うためのlein-noirプラグインというものがあるので、これをインストールします。

$ lein plugin install lein-noir 1.0.0
Downloading: org/clojure/clojure/1.2.1/clojure-1.2.1.pom from central
Downloading: org/clojure/clojure/1.2.1/clojure-1.2.1.jar from central
Copying 1 file to /var/folders/U1/U1N91KLEHEyHpA-qb8SHhU+++TI/-Tmp-/lein-816281b5-5ee9-4f7d-ad84-6c24edd7ddaf/lib
Including lein-noir-1.0.0.jar
Including clojure-1.2.1.jar
Created lein-noir-1.0.0.jar

leiningenによってNoirが依存するClojureのjarファイルもダウンロードされました。

プロジェクトの作成

leinコマンドでNoirプロジェクトが作成できるようになりました。

$ lein noir new helloworld
Creating noir project:  helloworld
Creating new dirs at:  /Users/juno/helloworld
Adding files...
Project created!

作成されたプロジェクトディレクトリの内容はこんな感じになります。

$ tree helloworld
helloworld
├── README.md
├── project.clj
├── resources
│   └── public
│       ├── css
│       │   └── reset.css
│       ├── img
│       └── js
├── src
│   └── helloworld
│       ├── models
│       ├── server.clj
│       └── views
│           ├── common.clj
│           └── welcome.clj
└── test
    └── helloworld

11 directories, 6 files

とりあえずそのまま実行してみます。

$ cd helloworld
$ lein run

leiningenがproject.cljの内容を読んで必要なライブラリのダウンロードとインストールを行います。インストールがひと通り完了すると、以下のようにポート8080でサーバーが起動します。

Starting server...
2011-06-26 02:33:23.165:INFO::Logging to STDERR via org.mortbay.log.StdErrLog
2011-06-26 02:33:23.174:INFO::jetty-6.1.26
2011-06-26 02:33:23.241:INFO::Started SocketConnector@0.0.0.0:8080
Server started on port [8080].
You can view the site at http://localhost:8080

ブラウザでhttp://localhost:8080/にアクセスすると、Noirの簡単なチュートリアルページが表示されます。

2011-05-22 04:50:45 +0900

Mac上のエディタ(Aquaemacs、BBEdit、Coda、Emacs、MacVim、TextMate、XCode)でインテリジェントにファイルが開けるPeepOpenというシェアウェアがとても便利で、もう1年くらい使っているんだけどあんまり日本では知られていないみたい。

どんなものなのかは、サイトにあるプレビュームービー(.mov)を見るのが手っ取り早いです。

$12とちょっとお高めだけど、Snow Leopard + Cocoa Emacsでまったく問題なく使えるし定期的にアップデートもされているので、非常におすすめです。