ビジネスをデザインするブログ:ITmediaオルタナティブ・ブログ (RSS)

ビジネスをデザインするブログ

事業開発ほどクリエイティブな行為は他に無いと思いこんでいる人間の日常

数年ぶりにAmazonのAPIにアクセスしてみたら、まったく仕様が変わっていてビックリ(というか、当然ですね)。

というわけで、おさらい。

C#で、Amazon Product Advertising API を使ってみました。

最新環境(2011-0801)では、

  • リクエストに署名がいる(これはもっと前からみたいですね。。。)
  • AssociateTagが必須になった
  • ItemPageが10ページまでに制限

という感じ。

また、リクエストはRESTとSOAPどちらにも対応しているみたいですが、SOAPの方は今更感があるので、RESTを利用することにします。

署名は、ここからダウンロードできるサンプルから、SignedRequestHelper.csを抜き取ってきて利用するだけ。

SilverlightやWindows Phone環境では、使えるClassに制限があったりするようですが、その解決法も先人さまが解決されているようでした。

大変参考になりました。というか、ほぼパクリ。

事前にAmazonさんに開発者登録して、Access Key IDとSecret Keyさらに、AssociateTagを取得しておく必要があります。

で、ソースですが、WindowsフォームにTextBoxとButtonを1つ配置し、Buttonのクリックイベントに下記コードを書きました。TextBoxはマルチラインにして広げておきます。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

using AmazonProductAdvtApi;
using System.Net;
using System.Xml.Linq;
using System.Web;

namespace AmazonTest
{
    public partial class Form1 : Form
    {

        private const string MY_AWS_ACCESS_KEY_ID = "ほげほげ";
        private const string MY_AWS_SECRET_KEY = "ふーふー";

        private const string DESTINATION = "ecs.amazonaws.jp";

        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            var helper = new SignedRequestHelper(MY_AWS_ACCESS_KEY_ID, MY_AWS_SECRET_KEY, DESTINATION);
            var param = new Dictionary<string, String>();
            
            param["Service"] = "AWSECommerceService";
            param["Version"] = "2011-08-01";
            param["Operation"] = "ItemSearch";
            param["Keywords"] = "Linq";
            param["SearchIndex"] = "Books";
            param["ResponseGroup"] = "Small";

            param["ItemPage"] = "1";

            param["AssociateTag"] = "げほげほ";

            var requestUrl = helper.Sign(param);
            var request = new WebClient();
            
request.Encoding = Encoding.GetEncoding("UTF-8");

            request.DownloadStringCompleted += (_s, _e) =>
                {
                    if (_e.Error != null)
                    {
                        MessageBox.Show(_e.Error.ToString());
                    }

                    var xml = XElement.Parse(_e.Result);

                    XNamespace ns = "http://webservices.amazon.com/AWSECommerceService/2011-08-01";

                    textBox1.Text = "";
                    textBox1.Text += "件数 = " + xml.Element(ns + "Items").Element(ns + "TotalResults").Value.ToString() + "\r\n";
                    textBox1.Text += "ページ数 = " + xml.Element(ns + "Items").Element(ns + "TotalPages").Value.ToString() + "\r\n";
                   
                    var result = from item in xml.Descendants(ns + "Item")
                                 select item;

                    foreach (var i in result)
                    {
                        textBox1.Text += i.Element(ns + "ASIN").Value.ToString() + " : ";
                        textBox1.Text += i.Element(ns + "ItemAttributes").Element(ns + "Title").Value.ToString() + "\r\n";
                    }
                };

            request.DownloadStringAsync(new Uri(requestUrl));
            
        }
    }
}

こんな感じ。

特に、難しいことは何もないのですが、SignedRequestHelper.csをコンパイルするのに、System.WebのDLLを参照する必要がありますが、Client Profileの.NET Frameworkにはないので、ターゲットのFrameworkを普通の.NET Frameworkにすつ必要があります。

あと、XMLは基本UTF-8のはずなのですが、なぜかWebClientで取得したXML(の日本語)が文字化けし、Parseがこけるので明示的に文字コードを指定(緑字部分)しました。

tama

どういうわけか、最近まで、(Windows上の)VMWareにMac OS がインストールできることを知りませんでした。

私の場合、「どうしてもMacじゃないとダメ!」という状況は、XCodeを使うときだけなので、もし、VM上でMac OSが動いてくれるなら、こんなにいいことはありません。

というわけで、早速手元にあったSnow Leopardをインストールしてみました。

Mac

先人がいろいろと記事を書いてくれてるので、難なく?インストールできました。

参考にさせていただいたサイト

http://taiseiko.blog.so-net.ne.jp/2011-05-14

ちなみに、iMac (Core i5) +Bootcamp上にインストールしてます。。。

インストールの途中でEBIOS errorというのが出ましたが、強制的にdarwin_snow.isoをマウントしたら、ブートしました。

tama

10月に入って、私が少なからず影響を受けた人が何人か亡くなった。

まず、

スティーブ・ジョブズ氏。

影響を受けたというのもおこがましいですが、単純に、Macintoshが無ければ私がIT業界にいることはなかったと思います。氏の教えで、私が実践できることは、

Stay foolish

くらいですが、胸にとめ、あがきながら生きていきたいと思います。

そして、

デニス・リッチー氏。

ブライアン・カーニハン氏と共にC言語の父とされる人。ケン・トンプソン氏と共にUNIXの父とされる人。C言語が無くても、UNIXが無くても、私がIT業界にいることはなかったと思います。

プログラミング言語に興味を持ち始めた頃、知り合いに、いわゆる「カーニハン本(Dリッチー氏共著)」を勧められ読んでみたのが、氏の名前を知る最初の機会でした。その本を読んだとき「何を書いてるのかわからない・・・」と内心思いつつ、背伸びをして読んでいたのをほろ苦い思い出として覚えています。

また、初めてUNIXの世界観に触れた時の衝撃、初めてrootアカウントをまかされたときの喜びは今でも忘れません。

最後に、

柳ジョージ氏。

特に音楽的に影響を受けた訳ではないのですが、

ギターを持って歌い。ソロは自分で弾く。

という、一見当たり前のことを普通にやる人として尊敬していました。若い頃、カッコつけるだけのためにギターを持っているボーカルを見つけては、「柳ジョージを見習え」と思っていたものです。

3氏を含め、亡くなられた全ての方のご冥福をお祈りいたします。

tama

プログラマの人なら、新しい言語やプラットフォームと出会ったとき、とりあえず書いてみるプログラムがあると思うのですが、私の場合はLife Gameがそれです。

というわけでHTML5(Javascript + Canvas)で書いてみました。

Lifegame

こんな感じ。(実行してみる

で、なぜかIE9で動かない。。。

ちょっと調べてみたところ、IE9では、頭に、

<!DOCTYPE html>

をつけないとHTML5系の機能がうまく動かないようです。いつもVisualStudioにお世話になっていたので、気が付きませんでした。。。

いちおうソース貼り付けておきます。

<!DOCTYPE html>
<html>
    <head>
        <title>Gmae of Life</title>
        <script type="text/javascript">

            //一辺のセルの数(正方形を想定)
            var n = 50;
            //セルの幅(px)
            var w = 10;

            //配列の宣言
            var out = new Array(n); //出力用(描画用)
            var inp = new Array(n); //入力用(計算用)

            //配列の定義と初期化
            for(x=0;x<n;x++){
                out[x] = new Array(n);
                inp[x] = new Array(n);
                for(y=0;y<n;y++){
                    out[x][y] = Math.floor(Math.random()*2); //乱数で0か1を代入
                    inp[x][y] = 0;
                }
            }

            //ロード時にタイマーをスタート
            window.onload = function(){
                //lifegame関数を500ミリ毎に実行
                setInterval(lifegame,500);
            }

            //本体
            function lifegame(){

                //前の状態を入力用配列にコピー               
                copy();
                //ルールを適用       
                calc();
                //描画
                draw();

            }

            //前回の状態を入力値として利用
            function copy(){
                for(x=0;x<n;x++){
                    for(y=0;y<n;y++){
                        inp[x][y] = out[x][y];
                    }
                }
            }

            //ルールを適用
            function calc(){

                //近傍をとれるよう配列をオフセット
                for(x=1;x<n-1;x++){
                    for(y=1;y<n-1;y++){

                        //セルの状態を取得(0か1)
                        var state = inp[x][y];

                        //近傍の状態カウント用
                        var cnt = 0;

                        //近傍の状態を取得
                        for(i=0;i<3;i++){
                            for(j=0;j<3;j++){
                                //近傍で生きているセルの数を数える(左上にオフセットして走査)
                                if(inp[(x-1)+j][(y-1)+i] == 1){
                                    cnt++;
                                }
                            }
                        }

                        //自分が空(死)状態で...
                        if(state == 0){
                            if(cnt == 3){ //周りに3つ生きてたら
                                state = 1; //生まれる
                            }
                        }
                        //自分が生きていて...
                        else{
                            if((cnt-1) == 2 || (cnt-1 == 3)){ //周りが2つか3つ生きていれば...
                                state = 1; //現状維持
                            }
                            else{
                                state = 0; //それ以外は死ぬ
                            }
                        }

                        //状態を描画用の配列に代入
                        out[x][y] = state;

                    }
                }

            }

            function draw(){

                //要素の取得とコンテキストの取得
                var canvas = document.getElementById("cvs");
                var ctx = canvas.getContext("2d");

                //一度描画をクリア
                ctx.clearRect(0,0,canvas.width,canvas.height);

                //配列の状態を見ながら...
                for(x=0;x<n;x++){
                    for(y=0;y<n;y++){
                        //生きているセルがあれば...
                        if(out[x][y] == 1){
                            //四角形を描画s
                            ctx.fillRect(x*w,y*w,w-1,w-1);
                        }
                    }
                }

            }

        </script>
    </head>
    <body>
        <canvas id="cvs" width="500" height="500">not supported.</canvas>
    </body>
</html>

tama

幸か不幸か、ここのところJavaScriptを書く機会が増えてきています。

私は普段、開発環境としてはVisualStudioを使うことが多いのですが、潜在意識の中に、

VisualStudioはJavaScriptエディタとしてはどうよ

という気持ちがありました。

なので、他の環境も調査することにしました。

調査対象としては、

  • VisualStudio
  • Coda
  • Aptana

の3つ(他にもいろいろいじってはみましたが)。

私としては、WinとMac両方で使いたいので、Aptanaも候補。

で、結論から言えば、

意外にもVisualStudioが一番よかった

ということになりました。正確に言えば、VisaulStudio2011 developer previewが一番よかった。となります。

理由は、

私が多用するCanvas(を制御するJavaScript)のコード補完がもっとも優れていたから

です。

極めて個人依存な理由ではありますが、道具というものはそもそもそいういうものだと思うのでお許しを。

簡単に試した中でVS2011(VS2010はだめ)が唯一、getContext()やbeginPath()など、コンテキストの取得、制御に対応した(コード補完が効く)唯一の環境でした。

01

VS2011さんでは、getContext等も補完されます。

02

Codaさん。有償なので期待したのですが、今のところ駄目のようです。

03

Aptanaさん。クールでかっこいいのですが、補完はだめのようです。ちなみに、昨日からダウンロード(Update)可能となった3.0.5でも駄目でした。

もしかすると、CodaやAptanaでも設定次第で、できるのかもしれませんが、私の調査内容では上記のような結果でした。

ただ、この辺の機能は主要機能なので、VS2011が正式リリースされるころにはCodaもAptanaも対応しているとは思います。

いずれにせVS2011もExpressが存在し、無料で利用できるので、Canvasフリークな人は利用されてみてはいかがでしょうか。

ものすごく限定的かもしれませんが、VisualStudioが意外にもいけてたという話でした。

tama

最近では、分野を問わず萌え系の表紙を採用する書籍が増えてきました。

実は、表紙が萌え系だったという理由で、何度か本の購入を躊躇した経験があります。今日も、数学系の本を買いにいった際、内容は気に入ったものの、表紙が萌え系だったため、購入を躊躇するという状況に陥りました。

躊躇する理由は、

レジのお姉さんに渡すとき恥ずかしいから

だと思います。

であれば、Amazonで頼めばいいのですが、

それはそれで負けた気がする

のです。

というのは、そもそも、

なぜ、自分は萌え系の表紙を恥ずかしく思うのか?

について考察したとき、どのような理由であれ、

自分は世間体を気にしているつまらない人間という結論に至る

からです。

仮に「自分は萌え系が嫌い」だとすれば、レジのお姉さんに

「萌え系が嫌いなのに、好きな人間だと思われたらどうしよう」

ということを気にしているつまらない人間ということになりますし、

仮に「萌え系が好き」だとすれば、

「萌え系が好きにもかかわらず、自分は萌え系が好きな人間と思われたくない」

というさらにつまらない人間だということになります。

私は常に、

世間体など気にしない

をモットーとしているので、どのような理由にせよ、萌え系表紙本の購入を躊躇すること事態あってはならないことなのです。

そんなことを思いながら、本棚の前でモジモジしていると、

「馬鹿じゃないの?じゃあ、買ってきてあげるよ」

と、同行していた嫁がさらっとレジを通してくれました。

ま、いずれにせよ、私が小さな人間であることは間違いないようです。

tama

ソフトウエアアップデートマニアの私もすっかりEVOのアップデートの事を忘れていたのですが、加藤さんのブログ記事を見て、アップデートを思い出し、早速実行してみました。

アップデートは非常に簡単。Wi-Fi経由で10分もかからずダウンロードでき、インストール作業もサクッと終わりました。拍子抜け。

掲示板などの事前情報では、

「全体的にはやくなった」
「WiMaxの認識率?が上がった」

など、比較的好感触な感じ。。。

まあ、私にとって2.3.Xの最大の魅力はNFCへの対応なのですが、ハードが対応してないと意味がありません。。。

それはさておき、実際の感想ですが、

「早くなったと言われたら早くなったかな」

という感じ。まあ、いい感じです。アプリが動かなくなったというのも無いです(とはいえ、gmail, Twitter, Facebookくらいしか使ってませんが)。

で、私が一番改善して欲しかた機能?というのは、テザリング時の、

WiMax - 3G あるいは 3G - 1G 等のスムーズな切り替え@横須賀線

だったのですが、、、、

なんかWiMaxの感度が良くなっていてそもそもあまり切り替わらない

という印象です。

ブラウザはともかくメッセンジャー系はぶちぶち切れて使い物にならなかったのですが、まあまあ使えます。

但し、横須賀線のネットユーザ泣かせエリアの「新川崎 - 西大井」、「大船 - 鎌倉」あたりでは3Gに切り替わりましたが、以前よりスムーズになった印象があります。

以前は、ネットワークが切り替わったあとしばらく繋がらないという感じだったのですが、そのようなストレスは感じません。

ハンドオーバーまわりのソフトが改善されたのでしょうか。

というわけで満足満足。

tama

少々はまったので後の人のためにメモ。

SQL Serverの次期バージョン、コードネームDenali。現在CTP3ですが、VisualStudioのServer Explorerから従来の方法(Data Connections)でサーバを追加し、操作しようとすると、

01

と怒られます。まあ、なんともさびしい話です。

Juneauをインストールしたり、VS2011からならOKかなと思いましたが、ダメっぽいです。

が、

「SQL Server」として追加すると普通に操作できるようです。

02

簡単ではありますが、以上です。

tama

ニュートリノが光速より早く移動したという話。

夢がある話でいいですね。

まあ、10億分の1秒とかの世界なので、誤差とかもあるかもしれませんが、一方で、CERNで何人もの科学者がかかわって行った実験のようなので、当然そのあたりは考慮されてるのかなとも思います。

相対性理論と矛盾する

というようなことも言われているようですが、私は必ずしも矛盾はしないのでは?とも思っています。もちろん、相対性理論では、光速以上に加速することはできないとされていますが、それは同じ物理法則が働く環境下が前提なので、ニュートリノが別の宇宙や次元を経由した場合、このようなこともあるのでは?と素人考えながら思ったりもします。

もしかすると、実験が行われたスイス、イタリアあたりには、別の物理法則が成り立つ空間が存在しているのかもしれません。

いずれにせよ今後が楽しみです。

tama

いつもはお題に反応する心の余裕がないのですが、3連休ですし、働くことを考える良い機会なので。。。

なぜ働くのか?

少なくとも私にとっては、

食べるため。

その一言につきます。もちろん、その時々でモチベーションの源泉は違うのですが、最大公約数を取るなら、やはり、

食べるため。

でしょう。さらに言えば、「食べるために働きたい」という潜在意識もあるのかもしれません。

というのは、食べる事以外の目的で働ける状況というのは、ある意味余裕がある状況だと思うのですが、もうそういう時代もそろそろ終わりな気がするんですよね。

なので、「食べる」ということ意外に働く意味を見いだしてしまうと、なんかバブルな感じがするし、何より、それが無くなったときに文字通り働く意味を失ったり、「落ちぶれた」感を味合わないといけない気がして、そういう事への防衛反応としても、

働く理由は食べるため。

ということにしておきたいと思うのです。

tama


プロフィール

玉木 栄三郎

玉木 栄三郎

ビジネスデザイナー
(現在は、Microsoft Regional Directorなどとして活動)

詳しいプロフィール

最近のコメント
最近のトラックバック
カレンダー
2012年1月
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        
カテゴリー
エンタープライズ・ピックアップ

news094.gif あなたが常に持ち歩く防災グッズは?
ビジネス・ブログメディア「ITmedia オルタナティブ・ブログ」では、ITにまつわる時事情報などを日々、約260人のブロガーが発信している。その中から今回は「震災対策」「クラウド」「炎上」などを紹介しよう。(2/11)

news094.gif 富士通元社長の山本卓眞氏が残した次代へのメッセージ
富士通の社長、会長を務めた山本卓眞氏が亡くなった。哀悼の意を込めて、日本のIT産業界の大御所が残した次代へのメッセージを紹介しておきたい。(2/6)

news094.gif 東北をコットンの生産地としてブランディングしたい──リー・ジャパン・細川取締役
塩害に強い綿の生産で東北に新たな産業を作りたい。オーガニックコットンの採用など、環境負荷を下げるジーンズ生産に取り組んできたリー・ジャパンの新たなチャレンジとは──。(1/30)

news094.gif 東北から始まるイノベーション
企業のICTを活用と若手IT技術者による東北発のイノベーションが、中長期的な震災復興の鍵となる。(1/27)

news094.gif 貧困国の雇用を創出する印刷屋、丸吉日新堂印刷の挑戦
全国から約2万7000件の名刺制作を受注をする札幌の小さな印刷会社の成功の秘密は、地道な社会貢献にあった。(1/16)

オルタナティブ・ブログは、専門スタッフにより、企画・構成されています。入力頂いた内容は、アイティメディアの他、オルタナティブ・ブログ、及び本記事執筆会社に提供されます。

Special

- PR -

サイトマップ | 利用規約 | プライバシーポリシー | 広告案内 | お問い合わせ