Debuginfo

思考とアウトプット

Perl

RedisでNotification(通知)を実装する

弊社サービスTraBerryのWebアプリケーションで通知を実装しました。その実装方法の話です。 Notificationで使ったRedis keyは2つ。Arrayで全体の通知の管理。Hashで中身の格納です。 list:notification:user_id:<user_id> hash:notification:user_id:<user_id> 上記hashのキー</user_id></user_id>…

YAPC::Asia 2014で発表しました!

スピーカー募集締め切りの30分前に投稿したら、運良く採用されたので話してきました! 内容はスタートアップにジョインしてから半年で私が思ったこととか。 緊張しましたが、終わった後の高揚感はたまりませんね。 I gave a presentation in the developer's…

Redis.pmのシリアライズにはJSON::XSを使う

自分で書いた去年のRedisエントリが参考になっています(笑。ググって出てきたという。。 Perl でRedisを操作してみた ~ シリアライズは自前で? ~で書いたようにRedisモジュールのシリアライズは自分で行うのですが、 何で直列化しようと迷ったところ、JSON:…

Mojolicious文字化けまとめ

よくハマるのでメモ。 言葉の定義から Encode::decode_utf8 : バイト文字列からPerl内部文字列の変換のこと Encode::encode_utf8 : Perl内部文字列からバイト文字列の変換のこと Teng等で deflate : DBに挿入時のファンクション inflate : DBから取ってくる…

Instagramの写真をFacebook Open Graph APIでアップロードするとfbcdn.net urls are not allowedと言われて投稿できないときの解決方法

Facebook Open Graph APIでリンク付きの投稿をInstagramの写真ですると、下記のようにエラーを吐きました。 (#1500) fbcdn.net urls are not allowed. おそらくFacebookがInstagram購入後にInstagramの写真をFacebook cdnにのせるようになって、これがFacebo…

Mojoliciousの文字化けをTengのinflateでデコードする

MojoliciousのJSON出力で文字化けのyusukebeさんのコメントにもあるようにMojoliciousは内部的にutf8フラグを落としているようです。 毎回decode_utf8をするのは面倒なのでTengのスキーマ宣言クラスでinflateしてしまいましょう。 package MyApp::DB::Schema…

Instagram APIでPaginationを実現する

Instagram APIでユーザフィードはデフォルトで20しか返ってきません。Countパラメータで変更可能ですが、自分が確認したところ、30ぐらいが上限のようです。なのでユーザが見ているときに、"もっと見る"のようなボタンを容易して次を見させるのがよさそう…

Perlでタイムゾーンや国名を緯度経度から取得する方法

Instagram APIが緯度経度しか返さなくて、エポックタイムじゃ現地時間がわからない。。 ということで、タイムゾーン(他の情報も)を取得してみようと思います。 調べたら、Geonames.orgという団体がフリーで提供しているようです。 これを使います。 1. ユ…

HashをJSON::XSでシリアライズして、Crypt::CBCで暗号化して、GZIPで圧縮して、それをBSONバイナリとしてMongoDBに保存するPerlコード。またその逆も。

MongoHQの通信はセキュアでありません。なのでhttpsのAPIを使って保存するか、もしくはアプリケーション側で暗号化して保存する方法があると思います。今回は後者でコードを書いてみました。 package Util; use Moo; use JSON::XS; use Crypt::CBC; use IO::…

PerlからMongoHQを操作する

http://www.mongohq.com/でサインアップします。 "Start with an Elastic Deployment"でちゃんとSandboxを選びましょう。 512Mまではフリーです:) 下記のようにデフォルで有料プラン。。 まず、MongoHQの管理パネルでユーザを作ります。直感的にわかると思い…

System wideなPerl5.18をインストールしてcpanm+cpanfileでモジュールを入れるAnsible playbook

先日書いたCeontOS6.5でSystem WideなPerl5.18.2をplenvを使ってインストールする方法 のAnsible Playbookを書いてみました。 main.yml which has 2 shell scripts Install System Perl on /opt/perl5 with plenv Install Perl modules using cpanm with cpa…

CeontOS6.5でSystem WideなPerl5.18.2をplenvを使ってインストールする方法

CentOS6.5ではシステムPerl1のバージョンは5.10.1です。古いので新しいのにアップグレードしたいのですが、yumではパッケージがないので楽にインストールできないようです。ググってみるとシステムPerlはそのままにしておいた方がいいという記述もありました…

DigitalOceanをハンドルするPerl script: doman.pl (DigitalOcean MANipulator)を書いた

DigitalOceanモジュールを使っただけですが、doman.plという Perlスクリプトを書きました。自分が必要なものだけ実装したので全てをカバーしてませんが、cpanのドキュメントを読めばすぐできるでしょう。 使い方は, helpを見れば分かると思いますが、環境変…

Mojolicious + AngularJS + Yeoman = Mojangman?

MojolicousをAPI dedicatedなバックエンド、AngularJSをフロントにするWebappの構築を考えています。 Yeomanでdist以下をどのようにデプロイするかが述べられていますが、git subtreeを使った方法だと複雑になりそうです。 色々調べてみると、Jeffrey氏がRai…

Travis CI + Carton for Perl Projects

Travis CIを触ってみました(遅) 言わずと知れたOpen Source用のContinuous Integrationサービスです。 基本的にhttp://about.travis-ci.org/docs/user/getting-started/を追えば良いのですが、ステップとして、 Githubアカウントを用いてSign In レポジト…

Intern-Bookmark-2013のcpanfileを眺めると勉強になった

あまりにも秀逸なので一つ一つ読み解いていこうと思いました。 https://github.com/hatena/Hatena-Textbook/blob/master/mvc-web-application-with-plack.md さてさてモジュールを使っているか見てみます。 requires 'Class::Accessor::Lite'; requires 'Cla…

RedisのKeyのnaming convention(命名規則)

基本自由に決められますが、何かしら方針が欲しいですよね。 調べてみるとオフィシャルのページに書いてありました。 Try to stick with a schema. For instance "object-type:id:field" can be a nice idea, like in "user:1000:password". I like to use d…

統計学入門 (基礎統計学)とStatistics::Rを始める

ちょっとやりたいことがあるので統計を勉強します。 まず、書籍の購入。Gunosyチームでも読まれている統計学入門 (基礎統計学) 統計学入門 (基礎統計学)作者: 東京大学教養学部統計学教室出版社/メーカー: 東京大学出版会発売日: 1991/07/09メディア: 単行本…

Mojoliciousのrender(json => '..')で日本語文字化けを直す

内部でしっかり日本語を見れたので送信時の問題かなと検討をつけて、 response hearderを見たら、charsetがなかったので下記のようにtypeにcharset=utf-8を追加。

$HOME/notesというITエンジニアなら誰でもホームディレクリ以下にある自分用のnote/docとかを共有するサービスを作ってみた

$HOME/notes このサービスを作った出発地点は, "最近、グーグルで調べるのがしんどくなってきたなぁ。知りたい情報は数行なのにたどり着くまでえらく時間がかかるなぁ、もっと的を得たものってないのかな。そもそも$HOME/notesってディレクトリに自分用のノ…

HITSアルゴリズムで@yapcasiaをランキングしてみる (+ 小ネタ::Perlスカウター)

以前のエントリーでyapcasiaのグラフを可視化してみました。はてぶもそこそこついたので調子にのって、第2弾をブログしてみます。温かい目でみてください^^;; グラフがあれば意外と色々な事ができます。HITSアルゴリズムというアルゴリズムがあります。これ…

Mojolicious::Plugin::Web::Authのgithub認証に失敗するときの解決方法

以前のエントリでMojolicious::Plugin::Web::Authを用いたGithub認証を書いたのですが、いざVPSでgit clone、carton installしてサーバを立ち上げてもTwitterはうまくいくのにGithubではうまくいかないという現象に会いました。色々、githubのApplicationを…

cpanmで特定のモジュールを最新バージョンにアップグレードする方法

cpanm MODULEで問題ないようです! $ cpanm Carton Cartonのバージョンをあげたかったのですが、 Googleで調べてもよくわからなかったので、私はこんな感じで行いました。 $ cpanm cpan-outdated $ cpan-outdated | grep -i carton | cpanm

Mojoliciousで”Content-Type application/json”の受け取り方

backbone.jsではsave()時に”Content-Type application/json”でデータをPOSTします。この場合は、Mojoliciousの$self->paramで受け取れないので、 Crontoller内で my $data = $self->req->json; して、受け取る。 参考 https://groups.google.com/forum/?hl=j…

Mojolicious::Plugin::Web::Authでgithubのログインを実現する

最近は他のサービスを使ったログインが主流ですよね。開発者向けのサービスQiitaでもTwitter/Githubをログインに使用してますね。 Mojoliciousで使うために今回、Amon2プラングイン由来?のMojolicious::Plugin::Web::Authを使ってみました。セッションを使…

AnyEvent::Twitter::StreamでuserstreamのURLを抜き出す

今週はグラフの続きを書きたかったですが、twitter APIのwindow制限が醜くてグラフが出来上がりませんでした-_-;; backbone.jsの勉強もしてるのですが、本読みは週末ではなく通勤時間にやりたいですね。 (電車の中でHuluを見てたのは秘密。4400 is nice btw…

@yapcasia をフォローしてる人のソーシャルグラフを可視化してみた 

ネットワークって面白いですよね。バラバシの新ネットワーク思考を読んでから、自然科学的好奇心をいつもくすぐる存在です。 で、今週末にGraph::D3というd3.js用のjsonを吐く単純なモジュールをMillaを使ってcpanにアップしたので、Net::Twitterを使ってyap…

RedisのNamespaceを考えるときはselectでDBを切り替える[Perl][Redis]

複数のクライアントが1つのRedisサーバインスタンスに接続してデータを扱いたいと思うのは普通だと思います。(特にリソースの少ないVPS環境では)。 そこで、Namespaceについて調べていたところ、redis-namespaceというRubyのライブラリは見つかりました。…

Millaで呼吸をするようにgithubでperl モジュールを開発しcpanにアップする

Module::Setupを使ってモジュール書くぞ、と思ってた矢先に CPAN モジュールの開発についての最近の風潮という@tokuhirom氏のブログのエントリを読みました^^;; minillaでもよかったのですが、全体像がわからなかったので今回は@miyagawaさんの秀逸なscreenc…

Kindleおすすめ本というサービスを作った

Kindleおすすめ本 - Kindleのおすすめ書籍を紹介 このサイトではTwitter上で本をおすすめしている発言を元にKindle書籍をランキングしています。Kindleで読む本をお探しの方はご活用ください 昨年Kindle Paperwhiteを買ったのですが、読みたい本がAmazonのKi…