カテゴリー : 2015年 2月

決めきれないという負債

意思決定がスムーズにできないと、工数としての時間やスピード面で圧倒的に不利になる。

意思決定をするのは「誰か?」、「権限が曖昧」というのが問題としてあげられる。

それにより、決めきれないという負債が溜まっていく。

これはスタートアップにとって致命的である。

[Atom] デフォルトで入っているパッケージ一覧

Atom エディタに最初から入っているパッケージ一覧は apm list コマンドで確認できます。

Atom.io

続きを読む

[Mongoose] 特定の field が変更されたかは isDirectModified, isModified, modifiedPaths で確認できる

Mongoose では document の特定の field に変更があったかどうかを isDirectModified や isModified, modifiedPaths などの method で確認できます。

Ruby on Rails の ActiveRecord でいうところの changed? や 属性名_changed? と似たような機能が Mongoose でも提供されています。

では、1つずつ紹介していきましょう。

Document#isDirectModified(path)

isDirectModified メソッドは引数に指定した field 自身が変更されていれば true をそうでなければ false を返します。

doc.set('documents.0.title', 'changed');
 
// 'documents.0.title' 自体が変更されているので true を返す
doc.isDirectModified('documents.0.title') // true
 
// 'documents' の下の階層で変更されているが 'documents' 自体は変更されていないので false を返す
doc.isDirectModified('documents') // false

Document#isModified([path])

isModified メソッドは引数に指定した field に関係がある箇所が変更されていれば true をそうでなければ false を返します。

doc.set('documents.0.title', 'changed');
 
// 変更された field とそれを含む上の階層は true を返す
doc.isModified()                    // true
doc.isModified('documents')         // true
doc.isModified('documents.0.title') // true
 
// 変更されてない field を指定すると false を返す
doc.isModified('something')         // false
 
// 'documents' の下の階層で変更されているが 'documents' 自体は変更されていないので false を返す
doc.isDirectModified('documents')   // false

Document#modifiedPaths()

modifiedPaths メソッドは変更があった field 名を Array で返します。

doc.set('name', 'test name');
doc.set('documents.0.title', 'changed');
 
doc.modifiedPaths()
[ 'name',
  'documents.0.title' ]

これらの機能をうまく使ってロジックをすっきり書けるといいですね。

スクリーンショットの撮り方を解説している take-a-screenshot.org がカスタマーサポートに便利!

スクリーンショットの撮り方をデバイスごとに丁寧に解説している take-a-screenshot.org がカスタマーサポートに便利そうなのでご紹介します。

take-a-screenshot-org

対応デバイス一覧

  • Mac
  • Windows
  • iOS
  • Android
  • KDE
  • GNOME
  • Websites

スクリーンショットの撮り方すら分からないユーザのカスタマーサポート対応をスムーズにこなすために、とても重宝しているサービスです。

「チームメンバーとの信頼関係を築く:定期個人面談の薦め」を読んで 1on1 実践してみたらとてもよかった!

チームメンバーとの信頼関係を築く:定期個人面談の薦め – クックパッド開発者ブログを読んでみて、1on1 を実践してみたらよかったという事実を忘れないように書き残しておきます。

面談という名の雑談を30分ぐらいしました。意図的に30分ぐらいの時間を確保しないと、日々の業務に忙殺されてよくないなと面談を終えて改めて感じました。普段、話さないような話題もできたので、無理やり会話する場を作ってみて正解でした。

これからも、隔週ぐらいで 1on1 の面談を継続していきたいです。あとはチーム内のエンジニアだけの MTG の時間もとってなかったので、こちらは週1回ぐらいのペースで行うと捗りそうな気がしております。

[MongoDB] Failed global initialization: BadValue Invalid or no user locale set. Please ensure LANG and/or LC_* environment variables are set correctly.

mongo shell に入ろうとするとエラーが発生しました。

$ mongo myDb
Failed global initialization: BadValue Invalid or no user locale set. Please ensure LANG and/or LC_* environment variables are set correctly.

MongoDB

続きを読む

東京Node学園 15時限目 メモ #tng15

東京Node学園 15時限目に参加したので個人的なメモ

「io.jsについて」 by @yosuke_furukawa

io.js – JavaScript I/O

io.js-v1.0.0のリリースによせて – ぼちぼち日記

「extensible web」 by @Jxck_

Extensible web from Jxck 🙂

The Extensible Web Manifesto

Extensible Web の夜明けと開発者が得た可能性の話 – Block Rockin’ Codes

「ws の permessage deflateを実装した話とそれによりsocket.ioがどう変わるか」 by @nkzawa

draft-ietf-hybi-permessage-compression-19 – Compression Extensions for WebSocket

「CodeOnMobile」 by @dai_shi

dai-shi/codeonmobile

「今できる通信高速化にトライしてみた」 by @shibu_jp

東京Node学園 今できる通信高速化にトライしてみた from Yoshiki Shibukawa

DeNA さん、会場提供ありがとうございました!

懇親会まで含めて、めっちゃ楽しかったです!!

[Gmail] Delivery Status Notification (Delay)

Gmail の転送設定で Delivery Status Notification (Delay) という件名の通知メールがきました。

メールの本文は下記のとおりです。

This is an automatically generated Delivery Status Notification

THIS IS A WARNING MESSAGE ONLY.

YOU DO NOT NEED TO RESEND YOUR MESSAGE.

Delivery to the following recipient has been delayed:

bakorer@gmail.com

Message will be retried for 2 more day(s)

Technical details of temporary failure:
Google tried to deliver your message, but it was rejected by the server for the recipient domain gmail.com by gmail-smtp-in.l.google.com. [74.125.205.27].

The error that the other server returned was:
452-4.2.2 The email account that you tried to reach is over quota. Please direct
452-4.2.2 the recipient to
452 4.2.2 http://support.google.com/mail/bin/answer.py?answer=6558 xp1si7533737lbb.14 – gsmtp

—– Original message —–

(以下、略)

よく読んでみると、

Delivery to the following recipient has been delayed:

bakorer@gmail.com

Message will be retried for 2 more day(s)

とのことなので bakorer@gmail.com 宛に2日以上メールが転送されていないという通知メールでした。

さらに The error that the other server returned was: の項目を詳しく確認してみると、

保存容量の上限を確認する – Gmail ヘルプ

のURLがありました。中身を読んでみると転送先の Gmail の保存容量が上限に達しているのが原因だったようでした。

Gmail や Google Drive から不要なファイルを削除すれば、正常にメールが転送されるようになるはずです。

[Atom] apm (Atom Package Manager) でパッケージを管理する

Atom エディタにインストールするパッケージを管理するなら atom/apm (Atom Package Manager) の star コマンドを使うのが便利です。

Atom.io

以下、ざっと使い方をご紹介します。

続きを読む

[Node.js] console.log や console.error などの出力の先頭に時刻を付ける log-timestamp

Node.js で console.log や console.error などの出力の先頭に時刻を付ける log-timestamp というモジュールをご紹介します。

動作例

> console.log('Before log-timestamp');
Before log-timestamp
 
> require('log-timestamp');
 
> console.log('After log-timestamp');
[2015-02-03T13:45:13.198Z] After log-timestamp
 
> console.error('Error')
[2015-02-03T14:15:18.093Z] Error

log-timestamp を使うことでエラーの発生時刻 error.log に出力できるので、エラーやバグなどの調査に役立てることができそうです。


参考情報

bahamas10/node-log-timestamp

bahamas10/node-log-prefix