Archive for the ‘Google’ Category

PHP on Google App Engine

appengine-java-php

1. Quercusライブラリダウンロード
http://quercus.caucho.com/ から Quercus 3.1.6をダウンロードする(Quercus 4.0.1は文字化けが発生するので、今回は3.1.6を使うようにする)
jar xf quercus-3.1.6.war
(quercus.jar, resin-util.jar, script-10.jar)

2. Jettyライブラリダウンロード
http://dist.codehaus.org/jetty/jetty-6.1.17/ から jetty-6.1.17.zip をダウンロード
(jetty-6.1.17.jar, jetty-util-6.1.17.jar)

3. ライブラリをlibフォルダに入れる
1と2で取得したjarファイルを war/WEB-INF/lib に入れる

4. 設定ファイル修正
4-1 appengine-web.xml

<static-files>
  <exclude path="/**.php" />
</static-files>
<resource-files>
  <include path="/**.php" />
</resource-files>

 
4-2 web.xml

<servlet>
  <servlet-name>Quercus Servlet</servlet-name>
  <servlet-class>com.caucho.quercus.servlet.QuercusServlet</servlet-class>
  <init-param>
    <param-name>script-encoding</param-name>
    <param-value>UTF-8</param-value>
  </init-param>
  <init-param>
    <param-name>ini-file</param-name>
    <param-value>WEB-INF/php.ini</param-value>
    </init-param>
</servlet>
<servlet-mapping>
  <servlet-name>Quercus Servlet</servlet-name>
  <url-pattern>*.php</url-pattern>
</servlet-mapping>

 
4-3 php.ini ファイル作成
war/WEB-INF の下に php.ini ファイルを新規作成

unicode.semantics=on
unicode.http_input_encoding=UTF-8
unicode.output_encoding=UTF-8
unicode.runtime_encoding=UTF-8

 
5. info.php
warの下にinfo.phpを作成

<?php
phpinfo();
?>

 
6. アクセスしてみる。

http://localhost:8080/info.php

GDD phoneにSIMカード挿してみる

RIMG1093先日Google Developer Dayに参加して、Google のサプライズでGDD phoneをもらいました。デザインのほうは今まで出したAndroid phone中で一番だと思います。OSはコードネーム“cupcake”のAndroid最新版1.5だったので従来の物理キーボードからソフトキーボードに変わってます。SIMフリー版なのでSIMカードなくても起動できます。Googleからは「積極的にAndroidの開発に参加してほしい」とのことですね。今回参加者全員に配るためにGoogleはすごく苦労したようです。おそらくDocomoさんとの交際かと思います。夏に発売するHT-03Aと同じモデルかな?とにかくありがとう!Google!

あくまでも開発用で、他社のSIMカードを挿して使った場合「パケ死」になる可能性があるのでお勧めしませんとGoogleから何回も言われました。でも、試してみたいですね。iPhone 3GのSIMカード取り出すのが面倒だったので、普通のSoftbank携帯のSIMカードを挿してみました。起動したらちゃんと認識されたようです、画面に「SoftBank」と表示されてました、電話もSMSも普通にできました。ネットはどうだい?と思ってブラウザを起動したら、やっぱり「ネットワークに接続していません」と表示されました。

以下ようにAPN(Access Point Name)の設定を行います。
「設定」→「ワイヤレス設定」→「モバイルネットワーク」→「アクセスポイント名」→「menuボタン」→「新しいAPN」の順にAPN設定画面に辿ります。

  • 名前:Softbank Test
  • APN:smile.world
  • ユーザー名:dna1trop
  • パスワード:so2t3k3m2a
menuボタンで保存して、再びブラウザを開くと、お~接続できました。3Gマークも表示されで
RIMG1094
以上でテスト完了。上の情報はSoftBankからの情報ではないので「パケ死」になる可能性があります。設定したい方は自己責任でお願いします。
名前:Softbank Test
APN:smile.world
ユーザー名:dna1trop
パスワード:so2t3k3m2a

Android SDK 1.5を試してみる

android-logoAndroid SDKってどうゆうもんかと知りたくて試してみました。

1.SDKをダウンロード
http://developer.android.com/sdk/ からWindows用 android-sdk-windows-1.5_r2.zip ダウンロード

2.インストール
インストールと言ってもzipファイルを解凍するだけです。(適当な場所に)
自分の場合は「F:\ide\android-sdk」に入れてます。

3.emulatorを起動してみる
「F:\ide\android-sdk\tools」 に「emulator.exe」がありますが、コマンドプロンプトからそのまま > emulator.exe 起動すると以下のエラーが発生します。

emulator: ERROR: You did not provide the name of an Android Virtual Device
with the ‘-avd <name>’ option. Read -help-avd for more information.

If you *really* want to *NOT* run an AVD, consider using ‘-data <file>’
to specify a data partition image file (I hope you know what you’re doing).

Android Virtual Deviceを指定してくださいとのことですね、バーチャルデバイスを作成。

F:\ide\android-sdk\tools>android.bat create avd -n test -t 2
Android 1.5 is a basic Android platform.
Do you wish to create a custom hardware profile [no]
Created AVD ‘test’ based on Android 1.5

F:\ide\android-sdk\tools>

-n testはtestという名前のバーチャルデバイス
-t 2はAndroid 1.5 をtargetにして起動
ちなみに作成したAVDを削除するには 「android.bat delete avd -n test」、AVD一覧を表示するには「android.bat list avds」

emulator起動

F:\ide\android-sdk\tools>emulator.exe -avd test

AndroidEmulator

4.EclipseのプラグインADT(Android Development Tools)をインストール
Eclipseは3.2か3.3が必要です。Eclipseを起動して、「ヘルプ」→「ソフトウェア更新」→「サイト追加」で以下のURLを指定してインストールします。

https://dl-ssl.google.com/android/eclipse/

「ウィンドウ」→「設定」→「Android」 で SDKロケーションを設定します。

5.プロジェクト作成
「新規」→「プロジェクト」→「Android プロジェクト」の順にプロジェクトを作成する。
以下は自分が作成したプロジェクトですので、ご参考まで
プロジェクト名:footmark
ビルド・ターゲット:Android 1.5
アプリケーション名:footmark
パッケージ名:com.wordpress.footmark
Create Activity:footmark
Min SDK Version:3

footmark.javaが生成されるので、修正してみます。

package com.wordpress.footmark;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup.LayoutParams;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.TextView;

public class footmark extends Activity implements OnClickListener{

 int i=0;
 TextView tv;
 /** Called when the activity is first created. */
 @Override
 public void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 //setContentView(R.layout.main);

 LinearLayout linearLayout = new LinearLayout(this);
 linearLayout.setOrientation(LinearLayout.HORIZONTAL);//VERTICAL
 setContentView(linearLayout);

 tv = new TextView(this);
 tv.setText("Hello Android x ("+i+")");
 tv.setGravity(1);
 linearLayout.addView(tv,
 new LinearLayout.LayoutParams(
 LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));

 Button button1 = new Button(this);
 button1.setText("Click Me!");
 button1.setOnClickListener(this);
 linearLayout.addView(button1,
 new LinearLayout.LayoutParams(
 LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
 }

 public void onClick(View v) {
 i++;
 tv.setText("Hello Android x ("+i+")");
 }
}

画面イメージ

AndroidApp

3時間でここまで…

明日、GDD phoneに転送してみよう

Google App Engine for Java

001最近iPhoneアプリの開発に夢中になって、なかなか時間が取れなかったのですが、今日やっと時間がすこしあったので、前からやってみたかった app engine for java を試すことにしました。Pythonの時はSDKをダウンロードして、秀丸なり好きなエディターでコードを書いてましたが、今回はEclipseのプラグインという素晴らしい選択肢がありました。もちろんJava版のSDKも用意してますけど。

推奨されてるJavaバージョンは6ですが、5でも大丈夫みたいです。Javaはすでにイスントールしてあるので、Eclipseのプラグインを入れることにしました。使ってたEclipse3.3.1にプラグインを入れようとしましたが、「org.eclipse.wst.xml.core」が必須ですと怒られて、本体のUpdateを行いましたが、今度はEclipseの起動すらできませんでした。ショック!しょうがないんでEclipse3.4でチャレンジすることにしました。

まずは、こちらからEclipse3.4.2をダウンロード(http://www.eclipse.org/downloads/packages/

英語が得意ではないんで日本語化(http://mergedoc.sourceforge.jp/index.html#/pleiades.html

次はGoogle Plugin for Eclipseを入れる。(http://dl.google.com/eclipse/plugin/3.4)

完了すると、メニューに三つのアイコンが出てきます。(可愛い~)左からプロジェクト作成、コンパイル、デプロイです。新規でプロジェクトを作成するとテンプレートでAjaxを使ったサンプルコードが自動生成されます。試しにappspotにデプロイしたのがこちら(http://term.appspot.com/)。これだけだと寂しいんでGuestBookも入れようとしましたが、失敗しました。ローカルでは問題なく動きますが、appspotにデプロイするとServer Errorが発生します。
「java.lang.ClassCastException: com.google.appengine.api.users.UserServiceFailureException cannot be cast to javax.servlet.ServletException」
どうもこれが原因らしい。(http://groups.google.com/group/google-appengine-java/browse_thread/thread/3263e14c37391830

やってみて、Pythonの時と比べると少しは楽かと思いました、少なくとも言語がJavaなんで言語そのものの勉強は要らないですね。さ~何を作ってみようかな?時間があるときですけど。時間は自分が作るものだと言われてますが、なかなか難しいですね・・・

Google Map に騙された!

Googleの大ファンである私にとってGoogleの一連サービスは無くてはならない存在になってます。Gmailは言うまでも毎日使って、会社のメール、携帯メール、その他ドメインのメールを全てGmailに統括して管理してます。最近はドキュメントまでGoogleDocsを使うようになりました。その他 GoogleCalendarGoogleBookmarks などなど…. 同然、Googleを信用してるから使うわけですが、今日Google mapのことでちょっと裏切られた気がしました。

今日、昔同僚との飲み会があって、先日メールで送ってきた飲み会の住所に行ってみたが、どうしても店が見当たらなくて、結局は同僚が迎えに来ました。「東京の真ん中にある店も見つからないんで馬鹿じゃないの?」と言われるかも知らないが、実はGoogle mapに騙されたのが原因でした。先日送ってきた住所をGmapで検索してリンクをiPhoneに送りました。送った住所が「東京都中央区日本橋3-6-2 」。なぜか「東京都中央区日本橋本町3-6-2」になってしまうんです。

30分ほど生を飲む時間を無駄にしたのがちょっともったいないな~。
一応Googleには連絡してありますが、早く修正してくれるといいですね。

Lively体験

Googleの3Dソーシャルサービス「Lively」を体験してみました。あの「SecondLife」と違って専用のソフトは必要ありません、IE、Firefoxのプラグインをインストールするだけでブラウザで起動できます。Googleらしいですね。

まずは、www.lively.com からセットアップファイルをダウンロードしてインストールします。完了するとデスクトップにショートカットアイコンが出来上がるのでクリックすると、www.lively.com に飛びます。ログインするためにはGoogleアカウントが必要です。Facebookアカウントでもログインできるみたいです。My Rooms から Create a new room。空のroomが出来上がるので、後は自由にObjectを配置できたり、Avatarをかっこう良く作ったりできます。便利だと思ったのは、Webにある写真を取り込む機能とYoutubeのビデオを取り込む機能でした。

残念なことに、wordpressにiframeが使えないので、roomへのリンクは作成できませんでした…

http://www.lively.com/dr?rid=-8660374474388054342

今のところ、チャットで直接日本語、中国語、韓国語は打てないですが、コピー&ペストでなんとかできます。

今後はSLのようにユーザがObjectを作れるようなAPIを提供するのを楽しみにしてます。言語は何を使ってるかな??

AppEngineでFlickr APIを使ってみよう

前回はPHPとFlickrAPIを使って自分の写真を表示するようなことをやってみましたが、今回は最近人気上昇中のGoogleAppEngine(GAE)を使ってFlickrタグ検索をやってみたいと思います。GAEの説明はここでは省略します。が参考になるページを紹介します。
Google Code – Google App Engine
さっそくHello Worldから作ってみた
Google App Engine を使ってみよう

Flickr APIページを見るとPythonのライブラリもありましたが、決して使う気になりませんでした。一つ一つ調べながら遊びたいからです。以下がタグ検索して画面に表示するコードになります。キーワードになるものとしては、google.appengine.api.urlfetch と xml.dom.minidom です。

main.py

#!/usr/bin/env python
#
import cgi,os
import wsgiref.handlers

from google.appengine.ext import webapp
from google.appengine.ext.webapp import template
from google.appengine.api import urlfetch
from xml.dom import minidom

class MainPage(webapp.RequestHandler):
  def get(self):
    api_url    = "http://api.flickr.com/services/rest/?"
    api_key    = "5f5ffa7c9fcf9f65bc0aae95ad71****"
    api_method = "flickr.photos.search"
    tag = self.request.get("tag")
    if tag == "":
      tag = "Flower"
    url = api_url+"api_key="+api_key+"&method="+api_method+"&tags="+tag
    result = urlfetch.fetch(url)
    dom = minidom.parseString(result.content)
    photos = dom.getElementsByTagName("photo")
    galleries=[]
    for photo in photos:
      farm   = photo.getAttribute("farm")
      server = photo.getAttribute("server")
      id     = photo.getAttribute("id")
      secret = photo.getAttribute("secret")
      img = "http://farm"+farm+".static.flickr.com/"+server+"/"+\
             id+"_"+secret+"_s.jpg"
      galleries.append(img)
    values = { 'galleries': galleries, 'tag':tag, }
    path = os.path.join(os.path.dirname(__file__), "main.html")
    self.response.out.write(template.render(path, values))
application = webapp.WSGIApplication([
  ('/', MainPage)
], debug=True)

def main():
  wsgiref.handlers.CGIHandler().run(application)

if __name__ == '__main__':
  main()


main.html

<form action="" method="get">
Tag:<input type="text" name="tag" value="{{ tag }}">
<input type="submit" value="Search">
</form>
</div>
<div id="galllery">
	{% for galllery in galleries %}
	<img src="{{ galllery }}" class="gallery-img">
	{% endfor %}
</div>


ちょっと工夫をするとこのようなページが作れます。

http://kings.appspot.com/gallery/

Google Developer Day 2008 Japan


昨日、横浜で行われたGoogle Developer Day 2008に行って来ました。先輩から誘われたのですが、行ってみて本当によかったと思いました。

朝8時に起きて名刺と入場券の準備。横須賀線で横浜へ、みなとみらいに着いたのが9時40分。先輩と待ち合わせしてパシフィコ横浜へ。入り口のところにあるでっかいGoogleロゴを見た瞬間、「しまった!カメラ持ってくるのを忘れた!」。こんなイベント参加するのが初めだったもんで…(来年は忘れない)

入場してメインホールに着いたら既に大勢の人が席に座ってました。意外と多くの人がノートPCを持ってました。空いてる席を見つけて間もなく開始されました。村上憲郎氏の挨拶から始まりました。今年のテーマは3つの「C」。

  1. Cloud
    クラウドをよりアクセスしやすく
  2. Connectivity
    コネクティビティをユビキタスに
  3. Client
    クライアントをよりパワフルに

Cloudには「Google App Engine」、Connectivityには「Android」、Clientには「Gears」と順に説明がありました。「Android」は今回はじめて聞きました。デモを見ると「iPhone」と似たようなUIを開発できるらしいです。Google Maps API for Flashデモでトラブルも発生しましたが、まあ~理解できる話ですよね。午後のセッションデモではちゃんと動いたようです。12時から各セッションが始まりました。人気のある「Google App Engine」のセッションはアメリカのエンジニアが講演しました。サンプルを作成してる途中で何回もコンパイルエラーが発生して笑いも取れました。自分の話だと「自分もまだ完璧ではないということですね」(ハハハ)。最後のセッションは「Googleソフトウェア エンジニアの日常」を聞きました。Googleほとんどのプロジェクトはボトムアップ的に始まったものだと言いました。何かというととりあえずアイディアがひらめいたら、20%プロジェクトとして開始する、認められたらメインプロジェクトとして発展させるということです。主に使ってる言語はC++、Java、Python、Javascript。ちょっとびっくりしたのは、ソースの共有でした。要するに秘密プロジェクトなどはないと、Googleの一員であればGoogleのすべてが見れるということですね。うらやましい~

充実は1日でした。来年も参加したいな。

Google App Engine を使ってみよう

一か月ほど前Googleから発表された新しいサービス「App Engine」ですが、今日やっと試すことになりました。他社(Amazon)のサービスと比べ、Google Bigtableにアクセスできて、GoogleFileSystemデータストレージサービスから構成されてるのが魅力だと思います。

1.まずは、Pythonの環境を作成。
http://www.python.org/download/ から Pythos2.5のインストール。
インストール完了後パスの設定を行います。
バージョン確認

C:\>python -V
Python 2.5.2

C:\>

2.SDKインストール。
http://code.google.com/appengine/downloads.html から自分のプラットフォームに合わせてSDKをダウンロードして、インストール。今回はWindowsで試したので、GoogleAppEngine_1.0.2.msi をダウンロードしてインストールしました。

3.デモを実行してみる。
AppEngineのインストールが完了すると C:\Program Files\Google\google_appengine が出来上がるので、コマンドプロンプトからそこに移動します。

C:\>cd C:\Program Files\Google\google_appengine
C:\Program Files\Google\google_appengine>dev_appserver.py demos\guestbook

http://localhost:8080 にアクセスしてみる。ゲストブックが表示されてることを確認

4.Hello Worldを作成してみる。
google_appengineの下に新たに helloworld フォルダを作成、その下に app.yaml と main.py ファイル作成。

app.yaml
application: helloworld
version: 1
runtime: python
api_version: 1

handlers:
- url: .*
script: main.py

main.py
#!/usr/bin/env python
print “Hello World”

作成完了後もう一度http://localhost:8080にアクセスしてみる。「Hello Wolrd」ができた!

ローカルで作成したアプリケーションを公開するためにはアカウントが必要ですが、まだ貰えませんでした。待つ……

iGoogle gadget 「Activity Tracker」

iGoogle ガジェットの数はどんどん増えて来ていますが、全部が全部すばらしいものでもないです。たとえば「株価」のようなごみみたいなものもあります。不安定なものは出すな!というぐらいです。しかも広告まで出していて...そんなものは捨てちまえ、使うなら「JPN Stock Market」を使え!安定感10倍。 今日紹介しようとするガジェットは「Activity Tracker」。

ToDo、Memo、スケジュール管理などたくさんありますが、どれもタイムと関連してないです。ステータス遷移は、「作業」⇒「開始」⇒「終了」、これでおわり。これだと割り込みは発生した場合ややこしくなります。Activity Trackerだときちんと管理してくれます。Task作成、IN/OUTで作業開始、中断管理、作業時間管理、作業ログ管理、グラフィック分析。

at.png

実にすばらしい!