プログラム
Node.js でloopbackを使ってAPIを書くことをここ最近ずっとしていて、winstonでアプリケーションのログを取る様にする際にした際、ついでに一定レベル以上のログ(エラーログ)の場合は内容をSlackにも通知できないかなと調べると由ななwinstonのプラグイン…
mochaで書いたテストのカバレッジ(網羅率)を取るにはどうしたらよいのかと思っていたところ、blanketというのを見つけたので試してみました。 早速、blanketとmochaでテストを走らせた際にカバレッジを表示させられる様にするためのレポーターを追加します。…
Google docsネタ第2弾 エントリ。 仕事でGoogle docsにメモられたURLにつけられたfacebookのいいね数をとりたいなと思ったので、以下の様なスクリプトをgoogle docsで作成して解決。 スプレッドシートの「ツール>スクリプトエディタ」で空のプロジェクトを…
loopbackでAPIのテストを書く際にloopback-testingを利用してAPIのテストを書いてみたのでその際のメモ。 まずは必要なnpmパッケージをloopbackアプリケーションに導入します。loopbackアプリのルートで以下のnpmコマンドを実行。 loopback-testingwww.npmjs…
の様なモデルのリレーションを定義し、APIも自動的に作成され /rempusers/:id/libraries といった形でアクセスできる様に なったのですが、ログインして得られるアクセストークンを付与しても現状だと401応答が帰って来ます。 $ http http://localhost:5000/…
loopbackでモデルを作成するときslcコマンドで作成できるのだけど、 モデル間のリレーションを同様にscafoldするやり方のメモです。 ここでは1対多となるモデルのリレーションの定義をslcコマンドで行ってみます。 例としてRempUserというユーザが複数のプレ…
loopbackで作成したAPIには、ユーザのロールに応じてアクセスコントロールを指定することができます。 Controlling data access - LoopBack - Documentation 例えば、 adminユーザのみアクセス可 このロールのユーザのみアクセス可 認証済のユーザであればア…
loopbackでアプリケーションを作成した直後はデータストレージにmemoryが設定されているため、そのままだとアプリケーションが再起動するたびにmodelの内容が初期化されてしまうため、保管できる様にMongoDB*1を利用できる様にします。 作成したアプリケーシ…
Rubyで開発している時に開発環境で複数のプロセスをまとめて起動させたいときにforemanを 利用することが多いですがNode.jsの実装でNode Foremanがあります。 foremanwww.npmjs.com npmコマンドでNode Foremanをインストールします。 $ npm install -g forem…
StrongLoopが開発したloopbackは、Node.jsで作られたフレームワーク(所謂mBaaSのオープンソース実装)で以下の様な特徴があります。 RESTなAPIをモデルと対応させて素早く作れる (モデルを作るとCRUDするAPIが出来上がる) モデルはコネクタを介して様々なDBで…
Runscopeとは Runscopeは2013年にローンチしされたAPI監視サービスです。 Runscopewww.runscope.com メリットとしては、"本番環境で提供しているAPIのステータス監視及び応答内容監視ができる" があります。 単純な死活監視ではなく、APIが返答するJSONやXML…
evacでは、アグリゲータとしての挙動をJSONファイルで定義する様にしていて、その内容の解釈にnconfを利用しているのだけど、YAMLもフォーマットとしてサポートさせたいので試してみたのでその際のメモ。 nconf自体はパーサーを外部に指定できる仕組みがある…
Google analyticsのレポートの値を取得する方法をあれこれ調べていたのでひと通りまとめてみました。 npmのパッケージとしては、sfarthin/ga-analytics · GitHubというのがあるので、これを利用するとあっさりレポートの値は取れるのですが、Google analytic…
検索エンジン自作入門 ~手を動かしながら見渡す検索の舞台裏を読んでみたところから続く検索してみるシリーズ。 前回作成した検索の処理をもって転置インデックスを作成するところから、それを利用した検索までの一連の流れができたので次は実際にいくらか大…
検索エンジン自作入門 ~手を動かしながら見渡す検索の舞台裏を読んでみたところから続く検索してみるシリーズ。 前回のエントリで転置インデックスをredisに作ってみるところまではできたので、次は実際にこれを利用して検索を行ってみます。 前回はbi-gram…
検索エンジン自作入門 ~手を動かしながら見渡す検索の舞台裏を読んでみたところから続く検索してみるシリーズ。 過去に転置インデックスを利用して検索してみるといったエントリを書いてJavaScriptのハッシュで構成された転置インデックスを利用して検索を試…
Command reference – Redis というredisのコマンドがまとめられたページがあるのだけど、各コマンドの詳細が書かれているページにEXAMPLESという項目があって、コマンド例がまとめられているのだけど、この欄実際に自分で試しにコマンドを入力できることに今…
肝心なところ知らないこと多い...。 console.time と console.timeEnd で挟んだ部分の時間を計測できる。引数にはラベル名を指定できてそのラベルで対応した範囲の時間が計測される。 // Indexing console.time("indexing"); var stream = byline(fs.createR…
素朴に便利だったのでメモエントリ。 byline $ npm install byline --save npmからインストールして以下の様な形で使える。 var byline = require('byline'); var fs = require('fs'); var stream = byline(fs.createReadStream('/tmp/foo.txt', { encoding:…
redisの型の認識が何気だったので改めて整理してみた。自分の頭の整理用に図も描いたりしたのでせっかくなので掲載。 文字列型 一番シンプルな形。 127.0.0.1:6379> SET key1 value1 OK 127.0.0.1:6379> SET key2 value2 OK 127.0.0.1:6379> GET key1 "value…
n-gram及び、転置インデックス を作ってみたので実際に検索してみます。 ngram や indexing は上の記事で書いた関数がそのまま入ります。 var _ = require('underscore'); // (snip) var search = function(query, n) { var grams = ngram(query, n), firstP…
先日ngramに分割する処理を書いたので次は転置インデックスを作ってみます。 今回は完全に単語の位置まで記録するものとし、 {'晴天': { '0': [ 3 ] }} といった具合で2-gramで分割された単語とそれに対応する文書とその位置が管理されるものとします。上の…
素朴に書いてみようと思って書きましたよ。のメモ。 var ngram = function(words, n) { var i; var grams = []; for(i=0; i<=words.length-n; i++) { grams.push(words.substr(i, n).toLowerCase()); } return grams; } var text = "Hi. 本日は晴天なり。"; …
Rubyで2の補数の話題ぐらいから6年ぶり*1のビット演算の話題。 ロジックゲートをシミュレーションするg8というライブラリがあったので少し触ってみました。 bucaran/g8 サンプル見ればそのままなのですが、一応手元でも試してみました。 なぜか「ぬ」という…
evacというシンプルなアグリゲーターを作りました。個人用途で作っていたのですが、そこそこ形になったのでnpmで公開しています。 よくあるアグリゲータの実装と同様に入力、加工、出力をJSONファイルで定義することでアグリゲーションすることができます。 …
Pushbullet というサービスのAPIを使ってPushbulletがインストールされた端末(iPhone, Android, PCブラウザ) に向けてPush通知する術をあれこれ調べた際のメモです。 そもそもPushbulletは先に書いた様なPushbulletのクライアントアプリがインストールされた…
npmにあるcronというモジュールを使うとサーバーでよく扱うcronと同様にスケジュールを指定して定期的な処理を書くことができる。 var CronJob = require('cron').CronJob; var job = new CronJob({ cronTime: "*/5 * * * * *", onTick: function() { consol…
icalというnpmパッケージがあるので、これを利用すると素朴にiCal形式のデータを読み取ってオブジェクトとして扱うことができます。 var parser = require('ical'); var url = "http://〜/plan.ics"; parser.fromURL(url, {}, function(err, data) { for(var…
node.jsでログを取るときにwinstonを使ってみたのでそのメモ。 まずはnpmコマンドでインストール。 $ npm install winston --save で、詳しくはGithub上のREADMEを参照するとかなり詳しくかかれているので、それを参照しながら実際にログを取ってみます。 や…
素朴 = ORMなどを利用せずに素朴なクエリを1行程度発行したい場合にどうしたんだっけ。と少し調べたのでメモエントリ。 npmのmysqlを利用する。 $ npm install mysql --save あとは、接続→クエリ発行→切断の順で書いていく。 var db = require('mysql'); var…