プログラム

gulpを利用してmochaで書かれたテストを実行する

定例の2周り遅れエントリ。Castoや、STORYBOARDSではtask runnerにGruntを利用していたのですが、glupも触ってみようということで使ってみました。 最近はnode.jsでちょっとしたツールを書いていたりすることが多く、そのテストにmochaを使って書いていたり…

node.jsでヒアドキュメント

Node.jsでプログラムを書いている時、JavaScriptでヒアドキュメント書きたいとき*1が稀にあって、そんなときはnpmパッケージのhereを使うと実現できたりします。 $ npm install here --save した後に、 var here = require('here').here; var testDoc = here…

sails+MongoDBでJSONベースのAPIを作成してみる

先日からAPIサーバをsailsとMongoDBを使って作ってみようとあれこれしてみたのでその際のメモです。 sailsの特徴に 最初からsocket.io(websocket)が利用できる JSONベースのAPIが簡単に作れる があるのですが、ここでは後者のJSONベースのAPIを作ってみるこ…

sailsでsocket.ioを無効にする方法

最近sailsを使ってAPIサーバを書いて見る試みをしていたりするのですが、sailsでは sails new コマンドでプロジェクトを作成するとデフォルトでsocket.ioが有効になるので、これを無効にする方法を調べたのでメモ。 結論としては .sailsrc というファイルを…

TOKYOAMEDAYO - 東京が雨予報ならYo

YoのAPIキーを取ってみたので試しに何か作ってみようということで、 東京地方に雨の予報が出ていたらYoしてくれるアカウントを作ってみました。 TOKYOAMEDAYO というアカウントに利用中の端末からYoしてもらえれば以降、毎朝7時30分に東京地方に雨の予報が出…

Yo APIを利用するためにAPI Keyを取得する

2周り遅れぐらいでYo APIを利用してみたので、API Keyを取得する際に行った作業のメモ。 Yoをインストールする tokenの取得にはYoのアカウントが必要なので、iPhoneにYoをインストール。 ここで取得したアカウント名を利用してAPI経由でYoはできないので、そ…

Coffee scriptでstep.jsを使う (Hubotで3秒毎に発言させる)

Hubotに3秒おきに発言させるため setTimeout 使う時、あれこれ試してみて以下の様に書いてみた。step.jsを利用してコールバックのネストが深くならなくて多少見やすいかなと思ったのですが、もっと良い書き方があったら是非知りたい。 cronJob = require('cr…

lxc-cpu-usageというツールを作った

VPSの上で複数のLXCを作ってRubyやnode.jsのアプリケーションサーバを動かしたり、DBサーバを動かしたりしているのですが、 稀に「このコンテナでどのくらいCPUが利用されているのだろう?」*1と調べることがあって、その時には 該当のLXCのinitプロセスを見…

Hubotを定期的に動かして発言させる

Hubotでcronでスクリプトを定期的に実行させる様に定期的に動かして例えばサービスのパラメータ等を通知させるのはどうするとよいのか調べたのでその際のメモ。 node-cronというnpmパッケージがあるので、これを利用するとcronと同じ書式でスケジューリング…

npm_lazyを使ってみた - A lazy local cache for npm

CastoやSTORYBOARDSでnode.js周りのアプリケーションのデプロイをする際にnpm installされる際、稀にnpm自体が重くなっていたりすることもあるので、ローカルにnpmのキャッシュサーバ的なものを立てられないかと調べていたらお手軽にできるものを見つけたの…

minaで過去にデプロイしたreleaseディレクトリを整理する

2回調べたので記録。 mina でデプロイを行った場合、以下の様にデプロイ先のホストでは管理されます。 lrwxrwxrwx current -> releases/86/ -rw-rw-r-- last_version drwxrwxr-x releases/ drwxrwxr-x scm/ drwxrwxr-x shared/ drwxrwxr-x tmp/ で、この rel…

ライブコーディングアプリ「Casto」ができるまで ep.2

もう既に@hika69 がまとめエントリを書いていてくれるのですが、別の視点でまとめてみようかなと思いまして書いてみます。ということで、ep.2。 "Casto"(キャスト)は一言でまとめると「リアルタイムで更新できるGist」といった形のWebアプリケーションです。…

Rendrで作られたnode.jsアプリをminaでデプロイする

Rendrで新しくアプリを作ろうとしていて、rendr-cliで プロジェクトの雛形を作ったので、では実際にデプロイどうしようと考えた時にminaを使ってやってみたので その際のメモ。 手順としては、 rendrアプリをデーモン化して稼働させるためにforeverで動く様…

MacOSにパッケージから入れたnode.jsをnodebrewに移行した

node.jsは公式サイトでMac用のインストーラパッケージが配布されていて非常にインストールが楽なのだけど、これをやめてnode.jsのバージョンマネージャ*1であるnodebrewを導入したのでその際のメモ。 パッケージでインストールされたnode.jsを削除する 各所…

JavaScriptのハッシュをマージする

var _hashMerge = function(target) { var sources = [].slice.call(arguments, 1); sources.forEach(function (source) { for (var prop in source) { target[prop] = source[prop]; } }); return target; }; を定義しておけば、 var origin1 = {a: "foo"};…

JavaScriptのハッシュのキーへ任意の変数名を指定する場合

JavaScriptのハッシュのキーへ任意の変数名を設定したいつもりで、以下の様に書くと意図した挙動にならない。 例えば下の場合、 var key = "foo"; var data = {key: "hoge"}; // data // Object {key: "hoge"} dataというハッシュに foo というキーを設定し…

Mocha & should.js で例外が生じるケースのテストを書く

Mocha とshould.jsでテストを書いていて例外が起こるテストを書いていて、少し詰まったのでメモ。 例えばhogeというメソッドに空文字列を渡すと例外が生じるというケースのテストを書きたいときに、 foo.hoge('').should.throw(); という書き方をすると、こ…

node.jsのプロジェクトのパッケージ管理用のファイル

2度調べたので記録。 node.jsではパッケージ管理にnpmがあって、更に package.json というjsonファイルがあるとそこに定義してあるパッケージ依存関係に基いてパッケージのインストールがされる*1 のですが、これそもそもどうやって作るの?と思って調べたの…

Minaでデプロイした際にIRCへ通知する

minaでデプロイした際にIRCへ通知を行う様にしたのでその際の対応のメモ。ゴールとしては、IRCの任意のチャンネルにデプロイ開始時等にメッセージを流したいと思います。 そういえばIRCで流す文字に色を付けたい 上の様に貼った画像の様な形でIRC上に色つき…

Chefで ~/.ssh/authorized_keys を配置する

Chefでコンフィグレーションをさせることを先日から取り組んでいて、その中でサーバに接続する予定のユーザの公開鍵を予め配置しておきたいと思っていたところ以外とあっさりとできたのでそのメモ。 状況的にはチームで共有しているユーザがあって、 対象の…

デプロイツールminaを使ってみた

いま複数あるPadrinoのアプリケーションのデプロイでmina を使ってみようと試した際のメモ。 仕事ではCapistrano(+ Webistrano)を利用していますが、RubyのプロジェクトなのとソースコードもGit管理されているので試してみました。 準備 プロジェクトのGemfi…

REMPに任意のプレイリストを取り込むガジェット

REMP にプレイリストを取り込むガジェットを作ってみたりしている昼下がり。デザインは追って調整...。 下のボタンを押すとREMPにPerfumeのYoutubeに上がっている公式動画がプレイリストとして取り込まれます。*1 *1:REMPにログインしている必要ありますが..…

ArduinoでHTTPリクエストをホスティングサーバに投げる方法

突然ですがArduinoの話題。 Arduinoにイーサシールドを接続してDHCPでIPを取得し、ホスト名で示したレンタルサーバへアクセスする際の接続例。 単純にPCからtelnetしてあげるのと同じですが、接続先が共有レンタルサーバ等の場合はHTTPのリクエストヘッダにH…

開発環境で.envに定義された環境変数を取得(Padrinoの場合)

SqaleやHerokuといったPaaSサービスを利用していると環境変数を.envというファイルに定義しておくと、アプリケーション側でそのファイルの内容を環境変数として解釈してくれますが、rack-envというGemを利用すると開発環境でも.envで記載した内容を環境変数…

ccchartでグラフを描画する

ccchartというグラフ描画ライブラリがとても使いやすくて便利だったのでメモ。もし実際に利用する場合は、サンプルやドキュメントが充実しているのでそちらを参照した方が良いと思います。 最近、REMPで運営者用の管理画面を作っていることは以前書きました…

ActiveRecordで結果を単純な配列を得る(特定のカラムの)

特定のカラムを指定して検索した結果は素直にすると、 Visitlog.select([:normalize_count]).where(:group_id => 3, :visitor => '123') => [#<Visitlog normalize_count: 0.0833333>, #<Visitlog normalize_count: 0.0833333>,...] となるのだけど、これを [0.08333, 0.0833, ...] といった具合の配列で得たい場合、ActiveRecordにpluck</visitlog></visitlog>…

Ruby gem 'parallel' で並列処理

ふたまわり位遅れてますが、gemライブラリのparallelを使うと並列処理が簡単に書けて便利。 例として、とあるグループ別に記録されている訪問ログに対して各訪問者別の処理をする場合、以下の様な具合でかける。 require 'parallel' processor_count = Paral…

"Redis To Go"でRedisを使う

RedisをSqaleで動かしている自作サービスから利用したいと思ったのですが、今、手元にすぐ利用できるサーバが無いので"Redis To Go"というRedisのホスティングサービスを利用してみました。 無償のプラン(Nanoプラン)であれば、 5MbyteまでのDBが作成可能 ホ…

Rubyで多重ループを抜ける方法

breakではなくて、catch〜throwするのが流儀なんですね。 catch :loop do foo.each do |onefoo| bar.each do |onebar| # いろいろ処理 throw :loop if count > 5 end end end なんちゃってで書いてるからこういうところで引っかかる...。 参照 スコープ、制…

Mongoidで更新日時の範囲で絞込み

2回調べたので記録しておく。 Status.where(:updated_at => 25.minute.ago..15.minute.ago) どう見てもそのまんまだろうという話なのだが、情けないかな頭にパッと出てこない。 普段から常にARとかMongoid使っていないと駄目なんだろうなぁ...。