カテゴリー : 2015年 4月

[Moment Timezone] moment.tz の使い方

Moment Timezone の moment.tz メソッドの使い方を紹介します。

moment.tz には 2 つのインターフェースが用意されていて公式ドキュメントに明記されているので、それを元に説明していきます。

There are two interfaces for using timezones with Moment.js.

moment.tz(…, String) is used to create a moment with a timezone, and moment().tz(String) is used to change the timezone on an existing moment.

直訳すると下記のような感じでしょうか。

Moment.js で timezone を使うために、

  • moment.tz(…, String) は moment instance を timezone 付きで作成する
  • moment().tz(String) は既存の moment instance の timezone を変換する

という 2 つインターフェースが用意されています。

moment.tz(…, String) の使用例

var a = moment.tz('2015-01-01 00:00:00', "America/Los_Angeles");
a.format();
// '2015-01-01T00:00:00-08:00'
 
a.utc().format();
// '2015-01-01T08:00:00+00:00'

moment().tz(String) の使用例

var b = moment.utc('2015-01-01 00:00:00').tz("America/Los_Angeles");
b.format();
// '2014-12-31T16:00:00-08:00'
 
b.utc().format();
// '2015-01-01T00:00:00+00:00'

よく理解して使わないと期待していたのと違う挙動になっているかもしれないので、よく理解して moment.tz を使うようにしましょう。

[Git] commit の粒度、良い commit message について

git を使った開発フローにおいて「commit の単位」と「良い commit message」について考える機会があったので、個人的に気をつけているポイントとそれを補足する記事をまとめてみました。

個人的に気をつけてるポイント

  • commit の粒度は細かくする
  • commit message は意味ある内容を書く

以下に、ぼく個人が気をつけているポイントが明文化されている記事のリンクを張っておきます。

commit について同じようなポイントで悩んだことがある方は参考にしてみてはいかがでしょうか。

[MongoDB] Array の length で sort するために aggregate を使う

MongoDB で Array type な field を length で sort して取得するサンプルクエリをご紹介します。

MongoDB

MongoDB Query

db.posts.aggregate(
[
  { $unwind: "$likes" },
  { $group: {
      _id: "$_id",
      size: { $sum: 1 }
    }
  },
  { $sort: { size: -1 } }
])

Results

{ "_id" : ObjectId("514e23e06aeaa880410321aa"), "size" : 590 }
{ "_id" : ObjectId("545c796972b4c28015ab4eac"), "size" : 395 }
{ "_id" : ObjectId("51440f7d4ca4c41367001dff"), "size" : 321 }
{ "_id" : ObjectId("51d6eef05204c9046100031d"), "size" : 315 }
{ "_id" : ObjectId("54ae81f1f158d13d60c50116"), "size" : 271 }
//...

参考情報

[Mac] Yosemite で brew コマンドが動かないときの解決方法

Mac OS X Yosemite で brew コマンドを実行しようとするとエラーが発生しました。

エラー内容

% brew -h
/usr/local/bin/brew: /usr/local/Library/brew.rb: /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby: bad interpreter: No such file or directory
/usr/local/bin/brew: line 21: /usr/local/Library/brew.rb: Undefined error: 0

brew コマンド復活の手順

まず、下記のように ruby の path を 1.8 から current へ変更します。

git diff
 
diff --git a/Library/brew.rb b/Library/brew.rb
index 4fa22b4..ee05650 100755
--- a/Library/brew.rb
+++ b/Library/brew.rb
@@ -1,4 +1,4 @@
-#!/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby -W0
+#!/System/Library/Frameworks/Ruby.framework/Versions/current/usr/bin/ruby -W0
 # encoding: UTF-8
 
 std_trap = trap("INT") { exit! 130 } # no backtrace thanks

次に brew の git repository へ移動して、修正内容を commit します。

cd $(brew --prefix)
git add .
git commit -m 'Change the path for ruby'
brew update

最後に git commit をしておかないと brew update したときに下記のようにエラーでアップデートできません。

% brew update
 
error: Your local changes to the following files would be overwritten by merge:
	Library/Formula/mongodb.rb
Please, commit your changes or stash them before you can merge.
error: Your local changes to the following files would be overwritten by merge:
	Library/brew.rb
Please, commit your changes or stash them before you can merge.
Aborting
Error: Failure while executing: git pull -q origin refs/heads/master:refs/remotes/origin/master

brew update で盛大に conflict したときは手元の修正は捨てて、

git reset --hard HEAD
git merge -Xtheirs origin/master

してしまえば OK です。


参考情報

管理画面は特定のブラウザだけサポートして開発コストを削減しよう

Web サービスの開発にマルチブラウザ対応は付きものですが、管理画面まで対応する必要はないと思ってます。

ユーザに提供する機能は Chrome/Firefox/Safari/IE の最新版ぐらいはサポートして、社内向けの管理機能は Chrome だけサポートするなどして開発コストを削減するのがいいんじゃないでしょうか。

”長時間労働” は最終手段にとっておく

ここ最近、自分の働き方について見直す時間をとれていませんでした。

そんな中、考えさせられる記事がいくつか話題にあがっていたので取り上げるついでに自分の意見も書いてみたいと思います。

「スタートアップにいるんだから寝る時間以外、働こうぜ!」

と思うこともあれば、

「なんでこんなに働いてるんだろう・・・?」

というような燃え尽き症候群みたいな感じになることもあります。

そんな状態だとアウトプットの量や質にブレが出てくるので良くないなあと考えるようになりました。

これからは一定の時間内に高水準の成果を継続して出していけるように、もっと仕事を効率化していきたいです。

そして、”長時間労働” は最終手段にとっておきます。

それが心の余裕に繋がりそうです。

[WordPress] Twitter Card を Twitter 公式プラグインを利用して導入する方法

WordPress に Twitter 公式プラグインを利用して Twitter Card を導入する方法をご紹介します。

Twitter card の導入手順

Twitter card を WordPress に導入する手順はとてもカンタンで作業はたったの3つだけです。

  1. Twitter WordPress Plugin をインストールする
  2. Twitter プラグインの設定ページに「Twitterのユーザー名」を設定する
    twitter-wordpress-plugin-setting
  3. Twitter Card Validator で正しく設定されているかチェックする

    twitter-card-validator-1

    twitter-card-validator-2

    twitter-card-validator-3

※ 以前は、事前に Twitter card を申請する必要がありましたが、今は申請する必要がないようです。

今は Twitter 公式プラグインのおかげでカンタンに Twitter card を設定することができるので、まだ設定してない方はこの機会にぜひ設定してみてはいかがでしょうか?


参考情報

Google Analytics のデータをそのまま鵜呑みにしてはいけない

【翻訳】Google Analyticsに基づくスタートアップの危険性 | POSTD という記事を読んで、いくつか気付きを得れたので備忘録として書き残しておきます。

スタートアップはGoogle Analyticsのようなソースからの定量的なデータにあまり頼らないようにすべきというわけではありません。より高度に、洞察には多くの形があるということを理解し、全てのレポートと性能測定をスプレッドシートに一番読み込みやすいチャネルに基づいて行いたいという衝動を抑えなくてはなりません。

ツールについて学べば学ぶほど、ツールの長所と短所が分かってくるでしょう。ツールを自分で使うのは素晴らしいことですが、恐らくより一層効果的なのはツールが自分に対して使われるときです。もし上司がGoogle Analyticsに基づいて目標を決めてくれたら、数字が”あるべき”数字ほど良く見えない理由を説明できていいと思いませんか? 私はそう思います。

記事中の「サンプリングによって大抵の消費者レポートが、非常に不正確になる」という点が本当にそうだよなと思いました。例えば、EC サイトでサンプリングされたデータだけで購入経路などを分析してると、重要な判断ミスを犯してしまいそうですよね。

Google Analytics はカンタンに導入できてとても便利ではありますが、データの取得方法がブラックボックスなのが気になるところです。より正確にデータ分析をしたい場合は、自前で Tracking する仕組みを実装するアプローチをとることをおすすめします。

Rettyオフィス移転パーティー

Rettyの移転パーティーにおじゃましてきました。

retty-1

retty-2

築地市場から届いた鮮魚で握ったお寿司がとても美味しかったです。

Retty さんにはこの寿司の美味しさの勢いで、引き続き頑張っていただきたいですね。

「さくらのクラウド」の2万円分無料クーポンを貰った

「さくらのクラウド」の2万円分無料クーポンを中の人からもらいました。

sakura-cloud

今まで無料クーポンの存在を知らなかったのですが、さくらインターネットのイベントやセミナーなどで貰えたりするみたいですね。

1522円の「CPU 1Core/Memory 1GB」のプランだと 1 年近く「さくらのクラウド」が利用できそうです。

この機会に、契約中のさくらのVPSを全て、今月中に「さくらのクラウド」へ移行したいと思います。