プログラム

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使っていないと駄目なんだろうなぁ...。

ImpasというAPIサービスを作った

個人でささやかにWebサービスを運営されている方向けにImpasというAPIサービスを作りました。 http://impas-hideack.sqale.jp/ このサービスは「twitter上でのツイート数、facebook上でのいいね数、はてなブックマークでのブックマーク数で簡単にランキング…

PadrinoアプリでNewrelic

New relic New relicはパフォーマンス監視サービスでRackアプリケーションの場合、用意されたnewrelic_rpmというGemをインストールするのみでNew relicが用意するダッシュボードでページが表示されるまでのパフォーマンスの詳細な内訳(Ruby自体の処理時間、D…

curlコマンドでAPIサーバにJSONでPOSTリクエストする方法

APIサーバへcurlコマンドでPOSTリクエストし、そのリクエストBODYに任意のJSON文字列を指定したい場合の方法を2回調べたのでメモしておく。 curl -X POST -d '{"url":"http://remp.jp"}' http://hoge.jp/api/registration いい加減覚えよう…。

ストーリーボードのバックエンド等々のお話

ストーリーボードをSqale(http://sqale.jp )へ運用を移管したのは以前簡単にここにも書きましたが、一度どういった技術を使っているのかまとめがてら整理してみます。 実装 現在、実装周りでは、 アプリケーションフレームワーク: Padrino データベース: Mon…

Padrinoでpryを使う

Padrinoでpadrino console使うと標準ではirbが立ち上がりますが、これをPryに切り替えたい場合、Gemfileに以下の内容を追加するだけですぐに使えました。 #Gemfileに以下の2行を追加 gem "pry" gem "pry-padrino" 試してみる。 $ padrino console => Loading…

Mongoidでsumする話

SQL的に select sum(file_size) from Pictures where user_id=10; といって書く様な処理をmongoidでさせるのどうすればいいのかと調べたのでメモ。 愚直に、 size = Picture.where(user_id: 10).sum(:file_size) でよいのですね。そのまんま。

Padrinoでormをmongoidに指定した場合のGemfileにmongoが無い...?

Padrino (Padrino v. 0.10.6) でORMをmongoidに指定した場合 $ padrino g project projectname -t rspec -e erb -d mongoid $ padrino start /usr/local/Cellar/ruby/1.9.3-p125/lib/ruby/gems/1.9.1/gems/bundler-1.2.0.pre/lib/bundler/runtime.rb:68:in `…

Padrinoで追加したRakeタスクをProduction環境として実行する

padrinoで作っていたrakeタスクを... $ padrino rake tasknameといった具合に実行しようとするとdevelopで実行されていてrakeタスクの中で呼んでいたmongoidがdevelopを向いていて本番用のデータベースを向いて実行されない。 よくよく考えると環境変数設定…

Padrinoで任意のrakeタスクを追加する

Padrinoでは、rakeタスクを実行したい場合、特にRakefileを配置しなくてもrakeコマンドを付与することで実行することができる。 $ padrino rake (実行したいrakeタスク) rakeタスク自体は、Padrinoの場合、 ~/lib/tasks ~/tasks ~/test ~/spec に配置されれ…

RubyGemsでインストールしたライブラリのソースコード位置を確認する方法

2回調べたのでメモとして記録。 RubyGemsでインストールしたライブラリ等の中身を確認したくなったときに、その場所を確認するには % gem which sinatra /usr/local/Cellar/ruby/1.9.3-p125/lib/ruby/gems/1.9.1/gems/sinatra-1.3.2/lib/sinatra.rbで確認す…