最近のリリース
人気エントリー

[WordPress]wp-flickr-pressのバージョン1.6.1をリリース

WordPressの投稿画面からFlickrの画像を気軽に挿入するためのプラグイン「wp-flickr-press」のバージョン1.6.1をリリースしました。
プラグインの詳細についてはこちらより参照下さい。

1.6.0からの変更点

  • PHPセッションを使用しないように修正

Read the rest of this post »

2011-10-15 16:59:35 · 深田 達也(Tatsuya Fukata) · No Comments
Tags: ,  · Posted in: システム開発

初めてのYAPC::Asia 2011に行ってきた

初めてYAPC::Asiaに参加してきました。場所は東工大 大岡山キャンパスでした。

ブログを書くまでがYAPC。ってことで初めてのYAPCについて書いてみたいと思います。

今回、聴いたセッションは下記です。

個別のセッションの感想については、他のブログなどで細かく述べられるでしょうし、ビデオについても後ほどアップロードされるかもしれませんからそちらを参照してもらうとして、ココでは初めてYAPCに参加した個人的な感想を書いておきたいと思います。

Read the rest of this post »

2011-10-15 00:23:26 · 深田 達也(Tatsuya Fukata) · No Comments
Tags: ,  · 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:  · 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:  · 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: ,  · 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:  · 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の使用が可能

Read the rest of this post »

2011-10-04 17:12:28 · 深田 達也(Tatsuya Fukata) · No Comments
Tags: ,  · Posted in: システム開発

[WordPress]wp-flickr-pressのバージョン1.5.1をリリース

WordPressの投稿画面からFlickrの画像を気軽に挿入するためのプラグイン「wp-flickr-press」のバージョン1.5.1をリリースしました。
プラグインの詳細についてはこちらより参照下さい。

1.5.0からの変更点

  • 未定義変数エラー修正

Read the rest of this post »

2011-10-03 23:11:39 · 深田 達也(Tatsuya Fukata) · No Comments
Tags: ,  · Posted in: システム開発

[WordPress]wp-flickr-pressのバージョン1.5.0をリリース

WordPressの投稿画面からFlickrの画像を気軽に挿入するためのプラグイン「wp-flickr-press」のバージョン1.5.0をリリースしました。
プラグインの詳細についてはこちらより参照下さい。

1.4.0からの変更点

  • FileURLのデフォルト値を設定出来るように修正

Read the rest of this post »

2011-10-03 22:11:30 · 深田 達也(Tatsuya Fukata) · No Comments
Tags: ,  · Posted in: システム開発

go-mongoでの基本操作

一部の機能を実装するのにgolangを利用することになり、DBはMongoDBだったので、以下のライブラリを使うことにしました。

garyburd/go-mongo – GitHub

もう一つ、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: ,  · Posted in: Golang, PG