アーカイブ

2009 年 7 月 のアーカイブ

イノベーションが面白い時代

2009 年 7 月 29 日 コメントはありません

ハイブリッド車みたいなかったるいことふっ飛ばして、早く安い電気自動車出してよという人には不向きかも知れませんが、地道にイノベーションを経営課題にしている向きにとっては、トレンド把握の参考になる本だと思います。

また例によって、目に付いたところを FreeMind に。

The New Age of Innovation

The New Age of Innovation

内容は、国際企業の例が殆どですし、中小企業にとって面白いサービスを始めたと挙げられている CogHead は既にSAP に買収されていてサービス停止しているような新陳代謝の激しいトレンドを物語っているかたちです。

日本の大企業も中は、中小企業の寄せ集めみたいなものですから、効率性と柔軟性のバランスを取りにくい旧態依然のものになっているところが多いでしょうから、イノベーションなんか無理だと諦めず、業務プロセス中心に競争優位になる機会を増やすことにチャレンジして欲しいものです。なにせ十羽一絡げのお客から、個別の顧客とサービスを練り上げていく時代が IT経営で可能になってきたのですから。イノベーションが面白い時代です。

Product Advertising API を使わないと

2009 年 7 月 22 日 コメントはありません

先週【重要・あと30日です】メールなんてことで、Amazon アソシエイト Web サービスが 8月15日以降使えないそうなので、先日の[gTunes] も amazon-a2s-2007-10-29-java-library を使っている関係上、署名認証の機能を含めないと動かなくなりますね。動かないと面白くないので、少し連休中に勉強しました。
ここ から Amazon の Java Sample をダウンロードしました。詳細な使い方は、付属の README に書かれていますが、コマンド・プロンプトから ant run で 署名認証して、決め打ちの ITEM_ID(ASIN) の ItemLookup から Title が表示されます。早速 NetBeans 6.7、Grails 1.1.1 でプロジェクト名:AmazonBook を作って、Grails 上でも使えるようにしてみました。( ITEM_ID は本以外にも全ての商品が対象のようだから Book でなくてもいいんだけど)

サンプルには、ソースとして SignedRequestsHelper.java と ItemLookupSample.java が提供されているので、SignedRequestsHelper はそのまま、Javaソースパッケージフォルダーにコピー。ItemLookupSample を AmazonItemLookupService.groovy としてサービスフォルダーに作成。
コードは、下記のような感じ。

/**
 * Amazon Product Advertising API を使ったサンプル
 * API Version: 2009-03-31
 *  ASIN で Book名を入手 とりあえず。
 *
 */
package com.yuruyakana

import com.amazon.advertising.api.sample.SignedRequestsHelper
import org.codehaus.groovy.grails.commons.*
import net.sf.ehcache.Element

class AmazonItemLookupService {

    boolean transactional = false
    String AWS_ACCESS_KEY_ID
    String AWS_SECRET_KEY
    String ENDPOINT
    //def titleAuthCache

    def getItemLook(ITEM_ID) {
        /* Set up the signed requests helper */
       SignedRequestsHelper helper

        try {
            helper = SignedRequestsHelper.getInstance(ENDPOINT, AWS_ACCESS_KEY_ID, AWS_SECRET_KEY)
        } catch(Exception e) {
            log.error "Problem communicating with SignedRequestsHelper: ${e.message}", e
            //e.printStackTrace();
            return;
        }

        String requestUrl = null
        String title = null

        // map形式
        println "Map form example:"
        Map params = new HashMap()
        params.put("Service", "AWSECommerceService")
        params.put("Version", "2009-03-31")
        params.put("Operation", "ItemLookup")
        params.put("ItemId", ITEM_ID)
        params.put("ResponseGroup", "Small")

        requestUrl = helper.sign(params)
        println "Signed Request is " + requestUrl

        // XML構文解析
        def uri = requestUrl.toURI().toString()
        //def xml = requestUrl.toURL().text
        println "Response URI: " + uri
        //println "Response XML: " + xml
  // URLだと日本語でEND-Tagで文字化けしてエラーになるので、URIを取得してParseすることでOK。
        def ItemLookupResponse = new XmlSlurper().parse(uri)
        //def ItemLookupResponse = new XmlSlurper().parseText(xml)

        println "ITEM Title: " + ItemLookupResponse.Items.Item.ItemAttributes.Title
        println "ITEM Author: " + ItemLookupResponse.Items.Item.ItemAttributes.Author
    }
}

変更したところは、概ね以下の3点:

  1. AWS_ACCESS_KEY_ID、AWS_SECRET_KEY、ENDPOINT を Config.groovy にbeans として
    移行。ENDPOINT は別に移動しなくても6か所ほど選択できるようなので、DOMAINで選択できるよう
    にしておいても良いですね。
  2. Controller 側で上記 Service のgetItemLook(ITEM_ID) を呼び出したこと。
  3. XML 構文解析を Java の DocumentBuilder から Groovy の XmlSlurper にしたこと。
    • toURL() メソッドは、URL 内で使用できないエスケープ文字は自動的に変換できないので
      非推奨になっています。

今回は、XMLの階層全て書いてタイトル表示しているので、スマートじゃないけど動作確認できたので まっ、いいか。

ITEM_ID で検索するのは実用的じゃないので、ITEMSearch 作って domain と View を今度作れればいいですね。

iTunes の Library をデータベースに

2009 年 7 月 8 日 コメントはありません

先週末、久しぶりに下記の本の AJAX の章を読んでいたのですが、[gTunes] という Grails App のサンプルを使う上で自分の iTunes の Music Library(xmlファイル)をサンプルアプリに読み込むためのGroovyスクリプトが、ソースコードとして提供されています。
The Definitive Guide to Grails (Expert's Voice in Web Development)

そのままじゃ動かなかったので、同じような経験された方がいるかどうか分かりませんが、少し変更したらきちんと、MySQLデータベースに artist 名が登録されました。
変更した箇所は、

def artists = handler.artists.values().findAll { it.albums?.artist } を

def artists = handler.artists.values() に。

else if(songProps && qName == ‘dict’) { を

else if(songProps && qName == ‘/dict’) { に。

Album クラスはmap で値をきちんと取れているのですが、データベース登録はエラーになるのはどうしてでしょうかね。
時間ができたらまたチャレンジしてみます。

NetBeans で Grails コマンドが使えるので便利ですよ。