日頃の行い

個人的な日頃の行いをつらつら書いてます\\\\ ٩( 'ω' )و ////

hubot-mojiという雑なhubot pluginを作ってみた。

Slack内でEmojiで文字を表示して遊んでるシーンがあったので、それをpluginにしてみました。
どういう遊びかわからないと思うので貼っておくと、イメージはこんな感じです。

f:id:arata3da4:20160117165317p:plain

使い方

  • インストール
$npm install --save hubot-moji
  • 使い方

主な用途はSlack内で使うことで、文字で見てもよくわからないので、画像で載っけてみました。

f:id:arata3da4:20160117165455p:plain

hubot moji set blank で背景用のEmojiを設定します。
hubot moji set filled で文字用のEmojiを設定します。
Emojiがおすすめですが、特に制限はないです。
hubot moji parse hogehoge とやると設定されたEmoji等でparseの引数になってる文字が表示されます。
残念ながらアルファベットのみ対応中です。

ちなみにこうすると大草原にすることが出来ます。

hubot moji set blank :wwww: 
hubot moji set filled :wwww:
hubot moji parser aaaaa

f:id:arata3da4:20160117170216p:plain

レポジトリとか

コミットは雑だし、READMEも雑なので、せめてREADMEくらいは今度整理しようと思います。

github.com

www.npmjs.com

まとめ

  • とてもくだらないスクリプト書くのすごく楽しい\\\ ٩( 'ω' )و ////
  • 書いた後にググったら知り合いの人がすでに書いていたw

www.npmjs.com

npm linkというコマンドを知った。

nodeのなんらかのモジュールを作ろうとしていて、実際に他のライブラリから呼んで動くかどうか確認したい時ありませんか。
私は毎度package.json"hoge" : "https://github.com/foo/bar.git" みたいな書き方できるので、github上に置いてnpm installしてました。
そしたら、知人が npm link というものがあると教えてくれたのでその備忘録です。

使い方

開発中のモジュールのディレクトリに移動して、 npm link をします。
そうするとglobalなnode_modulesディレクトリにシンボリックリンクがはられます。
そして、そのパッケージを使いたいモジュールのディレクトリに移動して npm link {package name} を実行すると
そのディレクトリにnode_modulesが生成されて、シンボリックリンクがまたはられます。
実際にやってみました。

# 適当なnpm moduleを作成
$npm init
This utility will walk you through creating a package.json file.
It only covers the most common items, and tries to guess sensible defaults.

See `npm help json` for definitive documentation on these fields
and exactly what they do.

Use `npm install <pkg> --save` afterwards to install a package and
save it as a dependency in the package.json file.

Press ^C at any time to quit.
name: (hoge)
version: (1.0.0)
description:
entry point: (index.js)
test command:
git repository:
keywords:
author:
license: (ISC)
About to write to /path/to/repo/hoge/package.json:

{
  "name": "hoge",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC"
}


Is this ok? (yes)

# globalなnode_modulesにシンボリックリンクを貼る
$npm link
npm WARN EPACKAGEJSON hoge@1.0.0 No description
npm WARN EPACKAGEJSON hoge@1.0.0 No repository field.
/usr/local/var/nodebrew/node/v5.1.0/lib/node_modules/hoge -> /path/to/repo/hoge

# ↑で作ったmoduleを使うための設定
# 適当なnpm moduleをもう一つ作成
$npm init
This utility will walk you through creating a package.json file.
It only covers the most common items, and tries to guess sensible defaults.

See `npm help json` for definitive documentation on these fields
and exactly what they do.

Use `npm install <pkg> --save` afterwards to install a package and
save it as a dependency in the package.json file.

Press ^C at any time to quit.
name: (fuga)
version: (1.0.0)
description:
entry point: (index.js)
test command:
git repository:
keywords:
author:
license: (ISC)
About to write to /path/to/repo/fuga/package.json:

{
  "name": "fuga",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC"
}


Is this ok? (yes)

# このmoduleでhoge moduleを使う設定
$npm link hoge
/path/to/repo/fuga/node_modules/hoge -> /usr/local/var/nodebrew/node/v5.1.0/lib/node_modules/hoge -> /path/to/repo/hoge

# globalなnode_modulesにシンボリックリンクがはられていました。
$ll node_modules/
total 8
lrwxr-xr-x  1 arata  staff    57B  1 17 00:59 hoge -> /usr/local/var/nodebrew/node/v5.1.0/lib/node_modules/hoge

シンボリックリンクなので、当然修正した分はすぐ反映されますね。
開発中のモジュールをローカルでインテグレーションテストをしたい時に便利そうです。

参考文献

2015年振り返りと2016年どうしようかなみたいな雑記

なんとなく振り返って、来年したいこと考えようかなみたいな感じです。
とりあえず大変な一年でした。救われたのはDarkのコミュニティがあったこと。

旅行とか

  • 京都旅行
  • バスケサークル合宿@伊豆長岡
  • バスケサークル合宿@山中湖

Darkイベント

  • もくもく会 計12回
  • イベント 計4回
  • その他(合宿, たこぱ)

行ったイベント

PHP

JavaScript

Python

  • Pycon JP 2015

Scala

AWS

  • JAWS DAYS
  • Lambda Hands On
  • AWS Summit 2015

その他

  • dots. Summit 2015
  • LINE Developers day
  • Fluentd Meetup
  • Notikra Meetup
  • Remixing@AllAbout
  • 第10回若手WEB
  • JAGMO
  • Retty良い食事の日

その他

  • 引っ越し
  • CTOからの挑戦状解答編
  • Treasure 2015
  • ISUCON 2015
  • ギークフェスタ
  • アドベントカレンダー
  • 論文誌 (卒業の時に頑張った論文誌は載ることになったらしい)

https://www.jstage.jst.go.jp/article/tjsai/advpub/0/advpub_31-1_LOD-B/_pdf

感想と抱負

引きこもりだったけど結構たくさん外のイベントに行けて楽しかったです。
一緒に遊んだりしてくれて皆さんありがとう!また来年もおねがいしマッスルマッスル()
来年あたりの気持ち

  • 4コマんま動かしたい 4コマんま - HOME
  • Goについて強くなりたい
  • Scalaについて強くなりたい
  • JavaScriptのBabel周りに慣れたい
  • 本をたくさん読もう

mongooseのconnection周りでちょっとハマったからメモる

スクレイピングのストレージにMongoDBをなんとなく使っていて、その時にnodejsからmongooseを使ってデータを突っ込んでます。
その時になぜか固まってしまったので、原因を追ってみました。

Mongoose ODM v4.3.4

事象

connection生成して、MongoDBにデータ突っ込もうとしたら止まりました。
試したコマンドとコードは下記の通りです。

$npm i --save mongoose
...

$node -v
v4.1.0

$node src/main.js
mongo connection opened
# ここで止まります
  • src/main.js
var mongoose= require("mongoose");
var logger  = console;
var db      = mongoose.createConnection();

db.on('open', function() {
    logger.info("mongo connection opened")
});

db.on('close', function() {
    logger.info("mongo connection closed")
});

db.open("mongodb://localhost/test");
var schema = new mongoose.Schema({
    id: String
});
mongoose.model("Test", schema);

var Model = mongoose.model("Test"); // 結論ここが問題
var m = new Model({
    id: "hogehoge"
});
// console.logとかでどこで止まってるかを見るとここで止まります。
m.save(function(e1) {
    e1 && logger.error(e1);

    Model.count({}, function(e2, count) {
        e2 && logger.error(e2);
        logger.info(count);
        mongoose.disconnect();
    });
});

原因(?)と対策

その1

コネクションを作った場合、そのコネクションからモデルを取得しないといけないようです。
var Model = mongoose.model("Test"); ではなく var Model = db.model("Test"); にします。

  • src/main.js
var mongoose= require("mongoose");
var logger  = console;
var db      = mongoose.createConnection();

db.on('open', function() {
    logger.info("mongo connection opened")
});

db.on('close', function() {
    logger.info("mongo connection closed")
});

db.open("mongodb://localhost/test");
var schema = new mongoose.Schema({
    id: String
});
mongoose.model("Test", schema);

// var Model = mongoose.model("Test"); // 結論ここが問題
var Model = db.model("Test");
var m = new Model({
    id: "hogehoge"
});
m.save(function(e1) {
    e1 && logger.error(e1);

    Model.count({}, function(e2, count) {
        e2 && logger.error(e2);
        logger.info(count);
        mongoose.disconnect();
    });
});
  • 実行結果
$node src/main.js
mongo connection opened
9
mongo connection closed

その2

そもそもコネクションはmongooseオブジェクトが持っているようなので、それを使いましょう。
var db = mongoose.createConnection();var db = mongoose.connection; に変えます。

var mongoose= require("mongoose");
var logger  = console;
//var db      = mongoose.createConnection();
var db      = mongoose.connection;

db.on('open', function() {
    logger.info("mongo connection opened")
});

db.on('close', function() {
    logger.info("mongo connection closed")
});

db.open("mongodb://localhost/test");
var schema = new mongoose.Schema({
    id: String
});
mongoose.model("Test", schema);

var Model = mongoose.model("Test"); // 結論ここが問題
var m = new Model({
    id: "hogehoge"
});
m.save(function(e1) {
    e1 && logger.error(e1);

    Model.count({}, function(e2, count) {
        e2 && logger.error(e2);
        logger.info(count);
        mongoose.disconnect();
    });
});
  • 実行結果
$node src/main.js
mongo connection opened
10
mongo connection closed

動いたみたい。
そもそもMongoやめようかなみたいな気持ち。