[WordPress]wp-flickr-pressのバージョン1.6.1をリリース
WordPressの投稿画面からFlickrの画像を気軽に挿入するためのプラグイン「wp-flickr-press」のバージョン1.6.1をリリースしました。
プラグインの詳細についてはこちらより参照下さい。
1.6.0からの変更点
- PHPセッションを使用しないように修正
2011-10-15 16:59:35
·
深田 達也(Tatsuya Fukata) ·
No Comments
Tags: Release, wp-flickr-press · Posted in: システム開発
初めてのYAPC::Asia 2011に行ってきた
初めてYAPC::Asiaに参加してきました。場所は東工大 大岡山キャンパスでした。
ブログを書くまでがYAPC。ってことで初めてのYAPCについて書いてみたいと思います。
今回、聴いたセッションは下記です。
- 12:00 – 12:20: Webアプリケーション高速化 [ja] [intermediate][app] mala
- 12:20 – 12:30: SmartPhone development guide with Node/CoffeeScript and HTML5 technologies, for Perl programmers [ja] [any][app]
Naoya Ito - 14:40 – 15:20: Perlで構築された中規模サイトのDC引っ越し記録 [ja] [any][infra] FUJIWARA Shunichiro
- 15:20 – 15:40: Mobage オープンプラットフォームの事件簿 [ja] [any][app] Toru Yamaguchi
- 16:00 – 16:40: Mobageソーシャルゲームにおける大規模サーバ運用 with Perl [ja] [intermediate][infra] りーお@DeNA
個別のセッションの感想については、他のブログなどで細かく述べられるでしょうし、ビデオについても後ほどアップロードされるかもしれませんからそちらを参照してもらうとして、ココでは初めてYAPCに参加した個人的な感想を書いておきたいと思います。
2011-10-15 00:23:26
·
深田 達也(Tatsuya Fukata) ·
No Comments
Tags: YAPC, YAPC::Asia · Posted in: カンファレンス
node.jsのrequestモジュールからPOSTでデータが送信できない時の注意点
node.jsのhttpclientとして使いやすいrequestモジュールですが、少しハマったのでメモしておきます。
何をやりたいかというと、単純にPOSTでどっかにデータを送りたいわけです。
受け口は今回はペライチのPHPプログラムです。
最初、こんな感じのコードを書いていました。
var request = require('request'); request.post({ uri: 'http://localhost/dump.php', body: 'hoge=foo&aaa=bbb' });
ただし、PHP側の$_POST変数には一向に入る気配がありません。
それを下記のように送信ヘッダのcontent-typeを明示的に指定してあげれば正常に受け取ることが出来ました。
var request = require('request'); request.post({ uri: 'http://localhost/dump.php', body: 'hoge=foo&aaa=bbb', headers: { 'content-type': 'application/x-www-form-urlencoded' } });
とりあえず、簡単にメモ。
追記:2011.11.13 12:38
PHPのソースを直接見たところ、POSTの場合、下記の二つのcontent-typeの場合のみ変数に格納しているようでした。
- application/x-www-form-urlencoded
- multipart/form-data
2011-10-13 04:58:46
·
深田 達也(Tatsuya Fukata) ·
No Comments
Tags: request · Posted in: NodeJS, PG
NodeJSをサブディレクトリで動かす為のApacheの設定
そろそろnginxに移行しようかなとも思っているのですが、現状、Apache上で動かしていたため、ApacheでのNodeJSのプロキシ設定です。
Apacheの設定は、最初に設定してそれっきりで次に設定する時に覚えていないので、メモとして残しておきます。
別にNodeJSに限った話ではなく、他の似たようなモノにも適用できるかもしれません。
ProxyPass, ProxyPassReverseのみだと、NodeJS内のドキュメントルート以下のリンクなどがそのまま表示されてしまい、正常に動作しないので、SetOutputFilterとProxyHTMLURLMapを設定し、ドキュメントルート以下のリンクに指定したサブディレクトリを追加するように設定します。
<VirtualHost *:80> ... その他設定 ... ProxyPass /hoge http://localhost:3000 ProxyPassReverse /hoge http://localhost:3000 <Location /hoge> SetOutputFilter proxy-html ProxyHTMLURLMap / /hoge/ </Location> ... その他設定 ... </VirtualHost>
2011-10-11 02:10:33
·
深田 達也(Tatsuya Fukata) ·
No Comments
Tags: mod_proxy · Posted in: NodeJS
DBIx::Classで、複数テーブルをまたいでjoinする
DBIx::Classを使用しており、ARの機能を使って、あるテーブルから複数テーブルをまたいでjoinする方法です。
テーブル構成
下記のようなテーブル構成だったとします。
- apps: アプリ情報
- users: アプリを保持するユーザ情報
- agencies: ユーザを管理する代理店情報
データ間の紐付き
こんな感じで紐づいています。
- apps.user_id -> users.id
- users.agency_id -> agencies.id
ARの設定
各モデルには上記のデータの紐付きを下記のように設定しています。
apps
__PACKAGE__->belongs_to( user => 'Users', { 'foreign.id' => 'self.user_id' } );
users
__PACKAGE__->belongs_to( agency => 'Agencies', { 'foreign.id' => 'self.agency_id' } );
やりたいこと
agencies.idでappsの一覧を取得したい。
具体的なコードはこんな感じになりました。
my $rs = $apps_model->search( # conditions { 'me.agency_id' => [検索条件の入力値] }, # attributes { join => { user => [qw/agency/] } } );
2011-10-06 12:07:07
·
深田 達也(Tatsuya Fukata) ·
No Comments
Tags: Catalyst, DBIx · Posted in: Perl, PG
Compojureで静的ファイルを配信
前回、DB接続、テンプレート利用まで書いたんですが、静的ファイルを配信する仕組みがまだなかったので、調べてみると下記が簡単でした。
Clojureの入門がてら、Herokuに自分のプロフィールサイトを作ってみる そのいち – 蟲!虫!蟲! – #!/usr/bin/bugrammer
静的ファイルの配置場所
project.cljに「web-content」という項目を追加し、静的コンテンツのディレクトリがどこかを指定します。今回の場合は、プロジェクトディレクトリ直下のpublicディレクトリに配置するものとします。
(defproject compojureexample "1.0.0-SNAPSHOT" :description "Compojure Example" :dependencies [[org.clojure/clojure "1.2.0"] [org.clojure/clojure-contrib "1.2.0"] [compojure "0.6.5"] [ring/ring-jetty-adapter "0.3.9"]] ;; 静的コンテンツの配置ディレクトリ :web-content "public")
ルーティング
次に、静的ファイルを配信するためにルーティングの設定を行います。
今回は、public直下に配置したファイルを、URLとしては、static以下がpublic直下を参照する感じで、「http://localhost:8080/static/***」のようにアクセスさせたいと思います。
src/compojureexample/core.clj
(ns compojureexample.core (:use compojure.core compojure.response ring.adapter.jetty) (:require [compojure.route :as route])) ;; ============================================= ;; Routes ;; ============================================= (defroutes app (GET "/" _ "Hello World") ;; http://localhost:8080/***としてアクセスさせたい場合は、「/」だけでよい。 (route/files "/static/")) ;; ============================================= ;; Run Server ;; ============================================= (defn -main [] (let [port (Integer/parseInt (get (System/getenv) "PORT" "8080"))] (run-jetty app {:port port})))
以上となります。
2011-10-05 00:08:09
·
深田 達也(Tatsuya Fukata) ·
No Comments
Tags: Compojure · Posted in: Clojure, PG
[WordPress]wp-flickr-pressのバージョン1.6.0をリリース
WordPressの投稿画面からFlickrの画像を気軽に挿入するためのプラグイン「wp-flickr-press」のバージョン1.6.0をリリースしました。
プラグインの詳細についてはこちらより参照下さい。
1.5.1からの変更点
- Link URLのデフォルト値設定が可能
- Medium 640の使用が可能
2011-10-04 17:12:28
·
深田 達也(Tatsuya Fukata) ·
No Comments
Tags: Release, wp-flickr-press · Posted in: システム開発
[WordPress]wp-flickr-pressのバージョン1.5.1をリリース
WordPressの投稿画面からFlickrの画像を気軽に挿入するためのプラグイン「wp-flickr-press」のバージョン1.5.1をリリースしました。
プラグインの詳細についてはこちらより参照下さい。
1.5.0からの変更点
- 未定義変数エラー修正
2011-10-03 23:11:39
·
深田 達也(Tatsuya Fukata) ·
No Comments
Tags: Release, wp-flickr-press · Posted in: システム開発
[WordPress]wp-flickr-pressのバージョン1.5.0をリリース
WordPressの投稿画面からFlickrの画像を気軽に挿入するためのプラグイン「wp-flickr-press」のバージョン1.5.0をリリースしました。
プラグインの詳細についてはこちらより参照下さい。
1.4.0からの変更点
- FileURLのデフォルト値を設定出来るように修正
2011-10-03 22:11:30
·
深田 達也(Tatsuya Fukata) ·
No Comments
Tags: Release, wp-flickr-press · Posted in: システム開発
go-mongoでの基本操作
一部の機能を実装するのにgolangを利用することになり、DBはMongoDBだったので、以下のライブラリを使うことにしました。
もう一つ、gomongo(名前が紛らわしい)というのもあるそうですが、こっちは現リリース版のgolangだとコンパイルが通らなかったので、とりあえず、上記のものを利用しました。
githubのREADMEに情報が少なかったので、メモとして基本的な操作方法について記載しておきます。
基本操作
接続、コレクションの選択、切断
// 接続 conn, err := mongo.Dial("localhost:27017") // コレクションの選択 c := mongo.Collection{conn, "hoge.foocollections", mongo.DefaultLastErrorCmd} // 切断 conn.Close()
SELECT
// 単数 // 値をマップに格納 var foo_map mongo.M err := c.Find(nil).One(&foo_map) log.Println(foo_map["_id"]) // 値を構造体に格納 type Foo struct { Id mongo.ObjectId `bson:"_id"` Name string `bson:"name"` } var foo Foo err := c.Find(nil).One(&foo) log.Println(foo.Id) // 複数 cursor, err := c.Find(nil).Limit(10).Cursor() for cursor.HasNext() { var f Foo err = cursor.Next(&f) log.Println(f) }
INSERT
id := mongo.NewObjectId() err = c.Insert(&Foo{Id: id, Name: "Tatsuya Fukata"})
UPDATE
// 引数: 検索条件, 更新情報 err = c.Update(mongo.M{"name": "Tatsuya Fukata"}, mongo.M{"name": "深田達也"})
DELETE
err = c.Remove(mongo.M{"name": "深田達也"})
BSONとGolangの変換表
go-mongoではBSONからgolang内の型変換は下記のようになっています。
// BSON -> Go // Integer32 -> signed and unsigned integers, floats, bool // Integer64 -> signed and unsigned integers, floats, bool // Array -> []interface{}, other slice types // Binary -> []byte // Boolean -> bool // Datetime -> mongo.Datetime, int64 // Document -> map[string]interface{}, struct types // Double -> signed and unsigned integers, floats, bool // MinValue, MaxValue -> mongo.MinMax // ObjectID -> mongo.ObjectId // Symbol -> mongo.Symbol, string // Timestamp -> mongo.Timestamp, int64 // string -> string
後でmasterブランチのテストコードを見てみると上記の方法ではなく、Queryに対してUpdateやRemoveメソッドが使えるようになっていたので、今後はメソッドチェインで検索条件を構築した後に、操作が行えるようにもなるみたいです。
これは、goinstallでインストールされるバージョンにはまだ含まれていません。
2011-10-02 04:55:32
·
深田 達也(Tatsuya Fukata) ·
No Comments
Tags: go-mongo, MongoDB · Posted in: Golang, PG