カテゴリー : 2015年 2月

決めきれないという負債

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

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

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

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

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

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

version 0.182.0 にはビルトインパッケージが 84 個もあるみたいです。

% atom -v
0.182.0
 
% apm list
Built-in Atom packages (84)
├── archive-view@0.50.0
├── atom-dark-syntax@0.26.0
├── atom-dark-ui@0.47.0
├── atom-light-syntax@0.26.0
├── atom-light-ui@0.41.0
├── autocomplete@0.44.0
├── autoflow@0.22.0
├── autosave@0.20.0
├── background-tips@0.23.0
├── base16-tomorrow-dark-theme@0.25.0
├── base16-tomorrow-light-theme@0.8.0
├── bookmarks@0.35.0
├── bracket-matcher@0.71.0
├── command-palette@0.34.0
├── deprecation-cop@0.37.0
├── dev-live-reload@0.41.0
├── encoding-selector@0.18.0
├── exception-reporting@0.24.0
├── find-and-replace@0.157.0
├── fuzzy-finder@0.67.0
├── git-diff@0.52.0
├── go-to-line@0.30.0
├── grammar-selector@0.45.0
├── image-view@0.49.0
├── incompatible-packages@0.22.0
├── keybinding-resolver@0.29.0
├── language-c@0.40.0
├── language-clojure@0.12.0
├── language-coffee-script@0.39.0
├── language-csharp@0.5.0
├── language-css@0.28.0
├── language-gfm@0.64.0
├── language-git@0.10.0
├── language-go@0.21.0
├── language-html@0.29.0
├── language-hyperlink@0.12.2
├── language-java@0.14.0
├── language-javascript@0.57.0
├── language-json@0.12.0
├── language-less@0.24.0
├── language-make@0.13.0
├── language-mustache@0.11.0
├── language-objective-c@0.15.0
├── language-perl@0.10.0
├── language-php@0.20.0
├── language-property-list@0.8.0
├── language-python@0.32.0
├── language-ruby@0.48.0
├── language-ruby-on-rails@0.19.0
├── language-sass@0.34.0
├── language-shellscript@0.12.0
├── language-source@0.9.0
├── language-sql@0.14.0
├── language-text@0.6.0
├── language-todo@0.16.0
├── language-toml@0.15.0
├── language-xml@0.28.0
├── language-yaml@0.22.0
├── link@0.30.0
├── markdown-preview@0.137.0
├── metrics@0.45.0
├── notifications@0.28.0
├── one-dark-syntax@0.3.0
├── one-dark-ui@0.5.0
├── one-light-syntax@0.4.0
├── one-light-ui@0.4.0
├── open-on-github@0.32.0
├── package-generator@0.38.0
├── release-notes@0.51.0
├── settings-view@0.183.0
├── snippets@0.75.0
├── solarized-dark-syntax@0.32.0
├── solarized-light-syntax@0.19.0
├── spell-check@0.54.0
├── status-bar@0.60.0
├── styleguide@0.44.0
├── symbols-view@0.83.0
├── tabs@0.67.0
├── timecop@0.30.0
├── tree-view@0.160.0
├── update-package-dependencies@0.8.0
├── welcome@0.24.0
├── whitespace@0.29.0
└── wrap-guide@0.31.0

少し前のバージョンでは Built-in Atom packages に含まれていなくてあとから追加されたパッケージもいくつかあります。

なので、デフォルトで搭載されているパッケージを apm stars でお気に入り管理しているものから削除するなど、定期的にメンテナンスしてあげると良さそうです。

ちなみに、Built-in Atom packages に含まれているパッケージを apm install すると警告メッセージが出るようになってました。

apm install archive-view
 
The archive-view package is bundled with Atom and should not be explicitly installed.
You can run `apm uninstall archive-view` to uninstall it and then the version bundled
with Atom will be used.
 
Installing archive-view to /Users/bakorer/.atom/packages ✓

特にデフォルトとは違うバージョンを利用したいという理由がなければ迷わず uninstall しましょう。

% apm uninstall archive-view

以上です。

[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 コマンドを使うのが便利です。

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

API トークンの設定

初回に apm コマンドを使うときだけ、ブラウザで https://atom.io/account のページが開くので、記載されている API token をターミナルに入力して設定する必要があります。

% apm stars
Welcome to Atom!
 
Before you can publish packages, you'll need an API token.
 
Visit your account page on Atom.io https://atom.io/account,
copy the token and paste it below when prompted.
 
Press [Enter] to open your account page on Atom.io. 
Token> _x9Ra8h3koIPN9efvjYHUcx
Saving token to Keychain ✓
Packages starred by you (0)
└── (empty)
 
Use `apm stars --install` to install them all or visit http://atom.io/packages to read more about them.

パッケージにスターを付ける

下記のように apm star でパッケージにスターを付けることができます。

% apm star atom-beautifier 
⭐  Starring atom-beautifier ✓
 
% apm star atom-jshint
⭐  Starring atom-jshint ✓

スターを付けたパッケージを一覧表示する

apm stars もしくは apm starred コマンドで apm star したパッケージのリストを出力させることができます。

% apm stars
Packages starred by you (2)
├── ⭐  atom-beautifier Beautifier for Atom (5133 downloads, 8 stars)
└── ⭐  atom-jshint Validates your JS against JSHint as you type. The original and most used. (15429 downloads, 35 stars)
 
Use `apm stars --install` to install them all or visit http://atom.io/packages to read more about them.

スターを付けたパッケージをまとめてインストール

apm stars –install コマンドで apm stars で一覧表示されたパッケージをまとめてインストールすることができます。

apm stars --install
Installing atom-beautifier to /Users/bakorer/.atom/packages ✓
Installing atom-jshint to /Users/bakorer/.atom/packages ✓

以上です。


参考情報

Atom の apm stars で興味のあるパッケージを管理する – Qiita

Atomの apm star が地味に便利 – Qiita

[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