アーカイブ

2010 年 8 月 のアーカイブ

アップル vs グーグル

2010 年 8 月 27 日 tdtsh Comments off

読みました。

薄くてすぐ読めるので、新幹線の移動の時とかにでも。

アップルvs.グーグル (ソフトバンク新書)
アップルvs.グーグル (ソフトバンク新書) 小川 浩,林 信行

おすすめ平均5つ星のうち4.0
5つ星のうち4.0時代に求められているものが目指すもの
5つ星のうち4.0この二社の組み合わせ
5つ星のうち4.0世界を震撼させる企業の考え方・在り方
5つ星のうち5.0MSの入る余地がない

Amazonで詳しく見る by AZlink

内容を要約すると、GoogleとAmazonはすごいね。イノベーターだね。昔は持ちつ持たれつで仲良しだったけど今は事業がかぶりだして険悪だね。だけどそれってお国に怒られたタイミングと符号してるしよく考えたら両者は必要としあってるよね、それに引き換えおれっち日本企業はダメだな~。という内容です。

別段目新しい事は書いてないのでITリテラシーが高く情報収集能力がある人は読まなくて良いです。でもそうでないビジネスパーソンには是非読んで欲しい。そういう本です。

カテゴリー: 書評 タグ:

WEBサービスを立ち上げる天の時、地の利、人の輪

2010 年 8 月 26 日 tdtsh Comments off

ほらね。今は、新しいサービスを作るには、絶好のチャンスなんですよ。わたしもトライするし、いろんな人にトライしてもらいたいなぁと思います。

こんなこと書いて、お前になんの得があるんだと思われる方、あるいは、どうしてそんなに必死なんだと思われる方もいるかと思いますが、理由は簡単。私が新たなサービスを立ち上げて仮に成功したとしても、その効果はたかがしれています(自分の周りだけ)。

行動力なある人がどんどん、次の成長分野に挑戦して成功するとで、日本も成長路線に戻れるかもしれません。ほっとくと日本は衰退するからね。

グローバルな社会なんだから、日本が貧乏になろうが、金のあるところから取ればいいだろうと思う方もいると思いますが、日本人である以上そこまでドライには考えられないのが、実際のところ。

だからこそ、次の成長分野に一緒に挑戦しようよということです。

新しいサービスを作るのになぜ今が絶好のチャンスなのか – ひがやすを blog

(´;ω;`)ブワワッ
感涙。

トライしましょう。
Google App Engine と slim3 に感謝しつつ。
そして恩返しの為にもブレイクしたいものです。

さて、ひがやすをさんも言われる様に、WEBサービスを立ち上げるにあたって、クラウド、HTML5、スマートフォンと、天の時は今な訳です。

slim3やGAEやHTML5が書ける方は勿論、コードを書く意欲と能力があるなら、兎に角行動する事が可能です。

ただ、打率を上げる為には、UIとかのデザインとか企画とかコンテンツとか、自分にないものを補える仲間がいた方がいいと言う意味では、人の和が一番重要です。

それはさておいて、地の利について。

資金があるとか、人脈があるとか、一芸に秀でているとか、一部の優秀な人は除き、そうでない普通の人(私の様に)は、会社をやめて起業してWEBサービスを始めるというのはリスクが大きいです。

参入障壁が少ないとしても、新規WEBサービスなんてものは10個やって1個あたれば儲けモノ位に考えたほうがいいです。

覚悟を決めて打席に立つ事をしないとヒットは打てませんが、何度でも打席に立てるように自分のポジションをもっていくなどの工夫が重要です。

なので週末起業でも良いと思うんです。

それも難しいなら、今いる会社で稟議起案してみてはどうでしょう。

それも無理なら・・・転職もアリです。

WEBサービスを立ち上げたい、と思っていても、人材がなかなか見つからない中小企業も沢山有るはずです。

以前も書きましたが、エンジニアは中小のエンドユーザ企業にいた方が、資金、経営、プロモーション、法務などの色々なリソースを活用できて、得意分野に集中できるってモンです。

ただ、所詮雇われ、意思決定のスピードとかはスポイルされます。

勿論、勝算のあるビジネスモデルとサービスのアイディアの有る方は、起業してチャレンジして頂きたい。そして無力な僕を雇ってください。

カテゴリー: management, web, クラウド タグ:

生産年齢人口の増減が景気と連動している – デフレの正体

2010 年 8 月 26 日 tdtsh Comments off

大変面白く一気に読みました。

デフレの正体 経済は「人口の波」で動く (角川oneテーマ21)
デフレの正体  経済は「人口の波」で動く (角川oneテーマ21) 藻谷 浩介

おすすめ平均5つ星のうち4.0
5つ星のうち5.0これまで読んだ社会・経済評論の中で、最も面白い
5つ星のうち5.020?40年前に胚胎された問題の顕在化ということ
5つ星のうち4.0まさにデフレの正体、不況の正体がわかる本
5つ星のうち4.0愛知県東海市大田川駅前の話は興味深い
5つ星のうち4.0良書、具体的政策提言も欲しかった

Amazonで詳しく見る by AZlink

おもいっきり要約すると、過去の景気の波とかデフレとかバブルとか色んな経済学で説明されている現象はじつは日本人のうち働き盛りの人とかの数の動きと一致してるんやで、お国の実データをじっくり見たら気づく筈やで、という内容です。

失業率だけを見ていては本質を見誤る、なぜ失業者数に着目しないのか、というあたりは目からウロコでした。出生率の話もしかり。

子育てがひと段落したら専業主婦の家内にもパートに出てもらおうとか、がんばってもう一人位子供作っちゃおうかなとか考えさせられます。

特にこれからのビジネスを考える上で、シニアやシルバーを抜きにしては考えられなくなってくるでしょうね。私はたまたまICT的な事を生業としているので、如何にしてデジタルデバイドを解消するか、そんな事を改めて考える時の参考になります。

この本は著者の講演をベースに書き下ろしてあるので、口語調で読み物としても読みやすくお勧めです。

私が面白く読める本ってだいたい知らない事を教えてくれる系が多いんですが、それ以外にも傾向があって、○○だからヤバイとか、こんなに危ないんです、とか言うジャンルのんが多いです。

実際には自分は楽観主義だと思っているんですけど、リスクに敏感に反応しやや悲観的であるという意味で、私も日本人なんだなぁと再認識しました。

カテゴリー: 書評 タグ:

java の AntiSamyでサニタイズ、任意のHTMLタグを許可しscriptタグとかを無効化

2010 年 8 月 24 日 tdtsh Comments off

一般公開するWEBサービスを作る場合、慣れてないと手がかかるのがセキュリティへの配慮です。

Google App Engineとか使っている時点でSQLインジェクションとかディレクトリ・トラバーサルとかOSコマンド・インジェクションとか関係ありませんが、セッションハイジャックとかアプリケーションの作りに依存する部分は他のフレームワークと同じです。

気をつけたいのがXSS(クロスサイト・スクリプティング)です。

HTMLタグ不許可な場合は簡単なんですが、昨今のWEBサービスではブログをはじめフォームにHTMLタグを入力できる様なサービスが増えてきたので大変です。

良い子のウェブプログラマはIPAのガイドライン、安全なウェブサイトの作り方 (PDFファイル、2.09MB) を参考にします。

同ガイドラインでは根本解決策を「入力されたHTMLテキストから構文解析木を作成し、スクリプトを含まない必要な要素のみを抽出する」としています。
そんなもん自力で書いてられません。

そこで、OWASP(Open Web Application Security Project)謹製のAntiSamyを使いたいと思います。

 

 


ダウンロード

Google Codeから antisamy-bin.1.4.1.jar をダウンロードします。

設定はポリシーファイルで行います。テンプレが用意されていますのでダウンロードします。
ここを参考に、antisamy-ebay.xml をダウンロードしました。

 

 


インストール

基本的にjarファイルをクラスパスに置くだけ、の筈ですが、私の環境ではそれだけでは動きませんでした。(slim3 1.0.5、Eclipse 3.5、google app engine for java 1.3.6)
いろんなクラスが見つからないと怒られます。

先ほどのGoogle CodeでAll downloadsをSearch すると、antisamy-required-libs-1.2.zip が出てきます。こいつをダウンロードして解党し、依存性があるであろうjar達をクラスパスに置いたら動きました。

 

 


使い方

またもやここを参考にしてください。

一応書いときます。

import org.owasp.validator.html.AntiSamy;
import org.owasp.validator.html.CleanResults;
import org.owasp.validator.html.Policy;
import org.owasp.validator.html.PolicyException;
import org.owasp.validator.html.ScanException;
...
	public static final String PATH_ANTISAMY_POLICY = "WEB-INF/antisamy-ebay-1.4.1.xml";
...
	public static String doSamy(String str)
		throws PolicyException, ScanException
	{
		Policy policy = Policy.getInstance(PATH_ANTISAMY_POLICY);
		AntiSamy as = new AntiSamy();
		CleanResults cr = as.scan(str, policy);
		return cr.getCleanHTML();
	}
...

 

 


Youtubeを動かしたい

Youtubeのタグが弾かれる事に気がつきました。

一番なんでもアリのポリシーファイル(antisamy-anythinggoes-1.4.1.xml)に変えてもダメです。

色々ググっているウチに、先人の知恵を発見。
AntiSamy Policy to allow YouTube Videos

無事Youtubeも動くようになりました。

FireFoxのプラグインXSS MEでテストしてみましたが、機嫌よくサニタイズしている様に見えます。

満足です。

 

 


カテゴリー: Google App Engine, java, slim3 タグ:

slim3、Google App Engine for Java 1.3.6 で Blobstore APIをためす

2010 年 8 月 19 日 tdtsh コメント 2 件

slim3、Google App Engine for Java 1.3.6 で Blobstore API

Google App Engine/Java (以下 GAE/J) のBlobstore APIについて調べています。

環境はSlim3 (1.0.5) + Velocity + app engine sdkは1.3.6です。

 


Blobstore概要

まずはドキュメントを見てみます。

  • 最大2GBのデータオブジェクトを扱える
  • アプリケーションから直接Blobを作成、保存する事は出来ない
  • ここでいうBlobはBlobstoreはDatastoreのblobプロパティとは関係ない
  • Blobの削除は出来る
  • Blobの更新は出来ない
  • Blobの作成は基本的にユーザがブラウザからBlobstoreにPOST(アップロード)する
  • ImageServiceの#getServingUrl(BlogKey)でURLを取得できる(ブラウザで見られる)
  • アプリケーションからBlobの取得は制限されているが方法はある
  • Blob保存と同時にDatastoreにBlobInfoエンティティが保存されるらしい
  • 管理コンソールのDatastore ViewerではBlobInfoエンティティは見えない。
    (Blob Viewerで見えるのが多分ソレ)

要するにBlobstoreは、文字中心のDatastoreとは別に、ビデオとか画像などの大容量ファイルをストアするためのものです。

BlobstoreはGAEと連携可能な画像サーバが使える様なイメージで考えてよいと思います。

Picasaのインフラを使っている様で、個人的には予想どおりで嬉しいです。
GAEからGoogleアカウントのPicasaデータを出し入れ出来る様になる日が来ると予想&期待して待っています。

 


アップロード

基本的にformでPOSTするだけです。
ただ、actionに指定するURLを、BlobstoreServiceの#getBlobUploadUrl(戻りURL)で生成する必要があります。
サンプルコードは擬似的にVTLで書いたものです。
実際にはactionのURLはこのページのController側で生成しておくとかします。

#set($returnUrl="/path/to/return/url")
<form action="$BlobstoreService.getBlobUploadUrl($returnUrl)" method="post" enctype="multipart/form-data">
	<input type="file" name="myImage">
	<input type="submit" value="Submit">
</form>

 


戻りURLのコントローラ

アップロードしたままでは、後でアプリケーションからBlobstoreのBlobを探せません。
Blobのキーを取得し、Datastoreとかに保存しておく必要があると思います。

なので先述のアップロードの際に指定する戻りURLに該当するコントローラを作成します。
先述の例にあわせると path.to.return.UrlController.javaって事になります。

こんな感じでしょうか。

public Navigation run() throws Exception {
	...
	HttpServletRequest request = RequestLocator.get()
	// ControllerクラスのFieldにrequestがセットされているので上の行は不要です。
	// ひがやすをさんご指摘有難う御座いました。

	BlobstoreService service = BlobstoreServiceFactory.getBlobstoreService();
	Map blobs = service.getUploadedBlobs(request);
	BlobKey blobKey = blobs.get("myImage");
	String keyString = blobKey.getKeyString();
	....
	keyStringをなんかのEntityにセットしDatastoreに保存

 


BlobInfoの取得

Blobのキーさえ後で判れば、いつでもアプリケーションで BlobInfo を取得できます。

管理コンソールのBlob Viewerでも参照できます。
BlobInfoはBlobKey、FileName、Content Type、Size、CreationDate等を保持しています。

BlobInfoFactory factory = new BlobInfoFactory();
BlobInfo blobInfo = factory.loadBlobInfo(blobKey);

 


Billingの設定

ここまではローカルでテストできますが、画像閲覧とかは本番環境にデプロイしないと出来ませんでした。

で、本番でBlobstore APIを使うには、課金を有効にする必要があるようです。
そういえばやっていませんでした。

わたしは以前Picasaの有料ユーザになった事もあり既にGoogle Checkoutのアカウントがありましたので簡単でしたが、初めての場合は多分クレジットカード番号の入力とかが必要です。

課金を有効にしたからといって、Quotaを超えなければ課金されない(はず)です。
しらないウチにアクセスが集中したりして課金されるのは嫌なので、Stored Data以外は$0の方向でリソースを割り当てました。

ただBilling Settingは1週間変更できないので、すぐに沢山のデータを登録する予定があるとか、既に公開しているサービスの場合とかは、Unit Costは考えて入れた方がいいかもしれません。

 


コントローラで画像閲覧(画像のURL取得)

SDK 1.3.6から、画像URLが簡単に取得出来る様になったようです。
こんな感じです。

public Navigation run() throws Exception {
	...
	ImagesService imagesService = ImagesServiceFactory.getImagesService();
	String url = imagesService.getServingUrl(blobKey);
	return redirect(url);
}

私の環境ではURLはこんなんでした。

http://lh4.ggpht.com/XXXXXXXXXXXX

URLをブラウザで見てみると、faviconが思いっきりPicasaのソレでした。

詳しくは、Images Java API のドキュメントか、ImageServiceのJavaDocを見てください。

今日はコレくらいにします。

 


参考サイト、Blobstoreの先人の知恵

Google App Engine Blog: Multi-tenancy Support, High Performance Image Serving, Increased Datastor…

今は昔のkonjak翻訳 φ(・ω・? )…: The Blobstore Java API

Song of Cloud: AppEngine1.3.0 Blobstore API入門

App Engine 1.3.0 とBlobstore – hidemonの日記

cochica – slideshare

Images APIの制約について – Google-App-Engine-Japan | Google グループ

Song of Cloud: Blobstoreのデータをアプリケーションで利用する

カテゴリー: Google App Engine, slim3 タグ: