プログラム

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で確認す…

Padrino事始め

いままでREMPでは、フレームワークにSinatraを使ってAPI等々の実装を行なってきたのですが、機能を足すたびに記述が長くなってしまい、またview等を追加する場合にもスケルトン生成を主導手動で行わければならないといった点があるので、やはり少し大きめの…

bit.lyで短縮されたURLのクリック数をRuby(Nokogiri)でスクレイピングする

bit.lyで短縮されたURLのクリック状況は短縮されたURLの末尾に'+'をつけると知ることができるので、そこからクリック数をスクレイピングしてみようという話。*1 # bitlycun.rb require 'nokogiri' require 'open-uri' url = "https://bit.ly/#{ARGV[0]}+" pa…

REMP Ver.2.5 リリースしました(してました)

REMP Ver.2.5をリリースしました。REMPを利用しているユーザのオンライン状態を確認できるようになり、デスクトップへの通知に対応しました。また操作パフォーマンスも大幅に向上しています。 URL2012-03-25 23:06:27 via web と、twitterではお知らせしたの…

unicornを使ってみた(2) - REMPにおけるメモリ利用量の変化

では、実際に現在のREMPの場合において、どの程度メモリ使用量が変化したのかを確認してみました。 Apacheをフロントのリバースプロキシとして、背後にRack用のWebサーバ(Thin or unicorn)を動かすという挙動はかわらないので、Thinとunicornの両方のサーバ…

unicornを使ってみた(1) - 導入

REMPで今までApacheのリバースプロキシを通してthinサーバでAPIを稼働させていたのですが、稼働時間が長くなるとメモリの利用割合が増える状況が続いていたため、どうしようかと悩んでいたところ会社でmizzyさん(@gosukenator)からunicornだとメモリ利用量が…

thinサーバをプロセス別に再起動させる方法

自分用メモ。 サーバ上で起動させているThinサーバを再起動させたい場合、 $ thin -C thin.yaml restart と行うと、yamlでthinのプロセスが常駐する様に設定していた場合、一度全部のプロセスを閉じた後、設定数分のプロセスの起動が行われるため、接続が不…

mongo DBのバックアップファイルから特定のドキュメントをリストアする

REMP開発中に誤爆して本番環境上の開発者のプレイリストがうっかり意図しない内容に更新してしまうというケースが生じたため、デイリーでとっているmongo DBのバックアップから復旧させてみました。*1 行いたいのは、特定のユーザのプレイリストのみの復旧な…

PUSHERでWebhookを行ってみる

PUSHERでWebHookができるという記事がブログで紹介されてますよ!と会社で教えてもらったので、試してみました。 先日試してみたwebsocket版の通知とは異なってWebHookなのでユーザが設定する任意のURLに対してPUSHリクエストがあったことをHTTPのPOSTで通知…

PUSHERを使ってWebsocket経由のPush通知を行ってみる

Websocket周りを使ってみたいと思っていろいろ試行錯誤をしていたのですが、PUSHERというAPIサービスを利用すると思いの外容易にWebsocketを既存のWebサービスに使えそうなので使ってみました。 (激しい一週遅れ感がありますが…。)例えば既存のWebアプリに…

Rubyでmemcachedを使う

REMPのAPI周りでキャッシュを使いたくなったので、memcachedを使おうと思ったのだけどRubyで使う場合のクライアントを知らなかったので簡単にまとめ。 Ruby用のmemcacheクライアントはいくつかある様なのだけど、dalliというクライアントが一般的な様なので…

REMP(レンプ)開発に参加してますよ

そういえば、REMP(レンプ)というYoutube動画を連続再生できるWebアプリの開発に参加してますー*1。 Mashup Award 7 にも応募したりしましたよ。 動作環境はgoogle chromeがインストールされているPCでfacebookアカウントがあれば利用することができます。 RE…

Solrの検索クエリーとMySQLの検索クエリーの対応

Solrで検索クエリーを作るときにどうしてもSQLクエリが先に出てしまうので対応をメモ。 クエリーパラメータでいうとqですね。 検索式 MySQL*1 Solr 一致検索 WHERE title="foo" title:foo 全件 (where無し) *:* AND WHERE title="foo" AND price=200 title:f…

SinatraアプリをApache2のmod_proxy_balancerを通してThinで動かす(2) -mod_proxy_balancerの設定

続けて、Apache2の設定。ここでは、既にmod_proxyが入っているものとします。 フロントのApache2から複数起動しているThinのサーバに振るためにmod_proxy_balancerを入れます。 Ubuntuであれば、 $ sudo a2enmod proxy_balancer で、mod_proxy_balancerが有…

SinatraアプリをApache2のmod_proxy_balancerを通してThinで動かす(1) - Thinの設定

今、WebアプリケーションのAPIサーバをRubyのフレームワークのSinatraでつくっていて、これを本格的に動かすときにWebサーバをどうしよう。ということになって、Thinが良いらしいという情報を得たので導入してみた。 現状、動いているApacheサーバがあるので…

RubyでHTTPSリクエスト発行する

Rubyでプログラム書いていてWeb系のAPIにHTTPSでアクセスする必要があったので調べた。 RubyでPOSTメソッドを発行するには以下の様に標準添付されているライブラリのnet/httpを利用すればよい。 #接続先ホスト名 hostname = "www.foo.bar" #接続先パス reqpa…

Rubyでnilの判定

Rubyでnil (空オブジェクト) の判定は nil? で行える。*1 if修飾子で書くと綺麗に書ける。やはりRubyで書くと読みやすいな。 def foo do res = db.find("id" => 1) return 'error' if res.nil? # resが空オブジェクトの場合は 'error' を返却 #ゴニョゴニョ…

全文検索エンジンgroongaを使ってみる(1) - インストール

休暇中に何らかの全文検索エンジンを入れて触ってみようと決めていたのでGroongaを入れてみた。 特徴 Groongaの特徴は以下の様なところがある。 操作は複数のプロトコルが利用可能 独自プロトコル or HTTP or memcached binaryプロトコル HTTPの場合, GETリ…

homebrew導入

Macにhomebrew入れた。 homebrewはMacPortsと同じくパッケージ管理ツールでRubyで記述されている。 たまたま試したいと思っていたプログラムの配布パッケージにhomebrewが用意されていたので使ってみた。 インストール方法 コマンドラインから以下を実行すれ…

PHPでクローラを書く

PHPでクローラを書くときのライブラリないかな?と探したところ、sourceforgeで見つけたので使ってみた。結構、出来が良くて少し触ってみた感じ便利そうな雰囲気。 PHPCrawl PHPCrawl is a webcrawler/webspider-library written in PHP. It supports filter…

jquery.ui.datepicker.mobile.js を使った際の日付選択イベント抽出

行いたかったのは、jquery.ui.datepicker.mobileで作られたカレンダーの日付をタップ(クリック)された際のそのイベントを検出すること。 jQueryのlive(type, fn)を利用すればよいということがやっとわかった。 bind関数との違いはbind(type,fn)を利用した場…