ラベル web application の投稿を表示しています。 すべての投稿を表示
ラベル web application の投稿を表示しています。 すべての投稿を表示

2011-08-12

SimpleTimeKeeper



I created a simple time keeper that helps you timekeeping. It can be used for presentations and lightning talks. No software needs to be installed; just visit the website below :)

http://timekeeper.fluxflex.com/

諸事情で今月の #ojag Workshopの仕切りをやる事になったので、当日必要になるであろうタイムキーパーをサクッと作ってみました。よければ使ってあげてください。

2010-09-09

OAuth on Simple Twitter Bot




僕は直前になるまで、というか、実際に仕様変更されるまで気付かなかったわけですが、今月の頭からTwitterのBasic認証が使えなくなったそうですね。従って、Basic認証を用いてTwitterのAPIを使用しているBot達は、仕様変更の日を境に、屍と化してしまっているそうです。

僕が作ったtango! botなども同様に、Basic認証を利用していたので、屍と化してしまいました。ですが、tango! botにザオリクを唱えて欲しい(?)というご要望に応えまして、先週末にOAuth認証システムを実装しました。

で、せっかく実装したので、Simple Twitter Botを例にとって僕の実装例を次の場所に置いておきます。参考になるかどうかは甚だ疑問ではありますが、もし何かの参考になれたら幸いです。



*main.py(要約)
#!/usr/bin/env python
#! -*- coding: utf-8 -*-

from appengine_twitter import AppEngineTwitter
from basehandler import BaseHandler, h
import twitter
import sys, os, pickle
from oauthtwitter import *

# User Setting and Run Twitter Bot
#debug_flag = True
debug_flag = False
MAX_LEN = 140
SEARCH_TERM = u'"hogehoge" OR foobar'
CONSUMER_KEY    = "???"
CONSUMER_SECRET = "???"
KEY_FILE_API    = "api_key.dat"
KEY_FILE_TWITTER = "twitter_key.dat"
BOT_USERNAME = "YOUR_BOT_NAME"
BOT_PASSWORD = "???"

def oauth_twitter():
   access_token = pickle.load(file(KEY_FILE_API))
   return OAuthApi(CONSUMER_KEY, CONSUMER_SECRET, access_token)
                                                                      
# twitter.Api.__init__ method for override.
def twitter_api_init_gae(self,
                       username=None,
                       password=None,
                       input_encoding=None,
                       request_headers=None):
   import urllib2
   from twitter import Api
   self._cache = None

   self._urllib = urllib2
   self._cache_timeout = Api.DEFAULT_CACHE_TIMEOUT
   self._InitializeRequestHeaders(request_headers)
   self._InitializeUserAgent()
   self._InitializeDefaultParameters()
   self._input_encoding = input_encoding
   self.SetCredentials(username, password)

def run(name, pswd, search_term):
   acc_token = pickle.load(file(KEY_FILE_API))
   gae_twitter = AppEngineTwitter()   
   gae_twitter.set_oauth(CONSUMER_KEY,
                         CONSUMER_SECRET,
                         acc_token.key,
                         acc_token.secret)

   results = gae_twitter.search(search_term.encode('utf8'), {'rpp': 20})
   api = oauth_twitter() 
   escape_user_list = []
   escape_user_list.append(name)
   
   # Get most corrently tweeted tweet
   status = api.GetUserTimeline()
   
   for s in status:
      if s.text.startswith("RT"):
         recent_tweet = s.text
         break
      else:
         print "The following tweet would be posted by hand, so skipped it."
         print "Tweet: " + s.text.encode('utf8')
         print
      
   print "Recent Tweet: "+recent_tweet.encode('utf8')
   print

   # Search Most Recent Tweet
   results.reverse()
   flag_enable = 0
   for i,result in enumerate(results):
      rt = "RT [at]" + result['from_user']  + " " + result['text']
      rt_len = len(rt)
      
      if flag_enable:
         print "I am going to tweet the tweet above."
         """
         Retweet and exit
         """
         print "I have re-tweeted: "+rt.encode('utf8')
         print "Result of my re-tweeting: " + str(gae_twitter.update(rt.encode('utf8')))
         exit()
               
      if recent_tweet.replace("@", "[at]") == rt.replace("@", "[at]"):
         flag_enable = 1

   if flag_enable:
      print "There are no tweet found that I should tweet."
      exit()
   print
   print "There are no tweets recently tweeted, so tweet the oldest tweet."
   print

   for i,result in enumerate(results):  
      rt = "RT [at]" + result['from_user']  + " " + result['text']  
      rt_len = len(rt)

      print "I am going to tweet the tweet above."
      """
      Retweet and exit
      """
      print "I have tweeted: "+rt.encode('utf8')
      print "Result of my re-tweeting: " + str(gae_twitter.update(rt.encode('utf8')))
      exit()

# overriding API __init__
twitter.Api.__init__ = twitter_api_init_gae

# Start to run
run(BOT_USERNAME, BOT_PASSWORD, SEARCH_TERM)




*使い方(READMEから一部引用)
This bot runs in the following ways.

1. Search tweets using 'search_term' in Twitter.

2. Re-tweet the tweets.


HOW TO SETUP:
1. Register your OAuth client on Twitter
URL: http://twitter.com/oauth_clients
* you MUST choose 'client' for Simple Twitter Bot.

2. Run 'python register_pin.py' and
use CONSUMER_KEY and CONSUMER_SECRET you got from the registeration.

3. Change setting variables(e.g. CONSUMER_KEY, CONSUMER_SECRET) in main.py

4. Run Google App Engine dev_server and visit the following URL
URL: http://localhost:8080/cron/update
* If you finish all of your setting, set debug_flag in main.py off.

5. Done!

Enjoy developing your own twitter bot!

*他、ソースコード一式

*使ったもの
- App Engine Twitter
- python-twitter
- oauth-python-twitter
- Google App Engine

*参考にさせて頂いたサイト

2010-07-18

言葉は躍る。 tango! on Twitter



先日投稿したSimple Twitter Botの開発経験を踏まえて、2年前に開発していたweb application"tango!"を、Twitter用に移植したアプリケーション「tango! bot」を開発致しました。

タイトルにもあるように、tango! botのコンセプトは
「言葉は躍る。」です。
このコンセプトを土台に、次の2つの機能をtango! botに実装致しました。

1. 定期的にランダムな単語の群れをつぶやく

この機能は、tango!の元々のアイデアである

"思考に行き詰った時、何か考えもしないようなひらめきが欲しい時、地球の裏側からやってきたような言葉のカケラ達があなたの創造力をかき立てます。"

を、twitterで実現したものです。あなたの創造力をかき立てるため、tango! botは言葉のカケラ達を次々とつぶやいていきます。

"金鈴 青天白日 入獄 演者 病原・病源 満杯 必殺技 飯店 気孔 oboe 導く 麻布 放送衛星 買い戻し 活きる"


2. お題が出されたら、そのお題を用いた単語をつぶやく

この機能は、tango!の構想に新たに取り入れた新機能です。お題を頂いたとき、そのお題を用いた奇妙な単語たちを生成し、つぶやいた方に向かってtango! botがリプライします。

お題は、次のように出題することができます。

     "@tango_bot 言葉"

すると、数分後に、次のような言葉のカケラ達が返ってきます。

     "@username 海浜言葉 実の父言葉 綿言葉 えいさあ言葉 親犬言葉 騒ぎ言葉 和ます言葉 講演会言葉"

ただ、この機能は現在開発中の機能なので、うまく動かないことがあります。そのときは、'今日のtango_botが不機嫌だったんだなぁ'と思って、ご容赦して頂けると幸いです。

以上がtango! botの概要です。
これらの機能を用いて、皆さんの創造力が、より掻き立てられることを切に願います。

tango! bot URL: http://twitter.com/tango_bot

開発:@yasulab
企画構想:@Migihiza



追記1:
@Migihizaが彼のブログにて、tango! botの具体的な利用方法について解説しています。面白い使い方を思案しているので、是非一度訪れてみてください。


追記2:
tango! botのソースコードはGithubにて公開致しました。次のURLからアクセスするこどができます。

     http://github.com/yasulab

Gitを使っている方は、次のコマンドでcloneすることができます。

     git clone git://github.com/yasulab/tango-bot.git

なお、なるべく早くtango! botを公開したかった(というか週末中に完成させたかった)ので、リファクタリングなどは完全に後回しにしています。従って、現状のソースコードはかなり汚いです。余裕があるときに、コードを書き直すつもりです。多分。。。

2009-07-01

complete migration of tango!


今日ようやくtango!のフルLinux移植に成功しました.

移植に失敗していた原因は単純で, Apache Serverがver.6.Xでは無かったことでした. サーバ側でcomet機能を使っているので, ver.6.0以上のapacheを使わないといけないことをすっかり忘れてた! とはいえ, これでようやく, Yahoo! Japanで発表したときの状態に戻すことが出来ました.

また, 発表会からはかなり日が離れてしまったけど, 発表会の反省やそこで頂いたアドバイスを踏まえながら, tango!の問題点を明確にし, 今後の方向性を絞りました. それなりに具体的なタスクまで落とし込むことが出来たので, なんとか次の行動に繋げていけそうです.

それらのタスクと並行して, ぼちぼちbig tableの勉強も始めようと思います. これがないとGAE上のウェブアプリケーションはデータベースが使え無くなってしまうので, 結果として, tango!が永遠に陽の目を見ることが出来なくなってしまいます. それに, tango!以外の面においてもGAEに御世話になる機会はあると思うので, きっと勉強して損は無いはず.

以上, ちょっとだけ毎日のモチベーションが上昇した一日でした.

2009-06-26

tango! on Google App Engine


調子にのって連続投稿です. すみません.

色々試行錯誤した結果, 何とかold versionのGWTを1.6.4にアップデートできました. そして, GWT 1.6.Xといえば, 云わずもがな, Java on Google App Engineができるバージョンです! というわけで, ささっとGAEも最新バージョンにアップデートして, 早速サーバにデプロイしてみました. 結果はこちら↓

http://tango-old.appspot.com/
※古いバージョンではまだApache Derbyを実装していないので, かなり無理矢理データベースを構築しています. 結果として, 非常に遅いです. 動かないときは, F5などを押して更新してください. 何回かアクセスすると, キャッシュヒット率があがって正常に動作するようになります. また, リソースを非常に使うアプリケーションなので, スペックの低いPCではアクセスしないことをお薦めします. アクセスすると, きっとフリーズします.

感想としては, "Googleすげえええええええ!!!"って感じです. というのも, 下図の左上にある飛行機みたいなアイコンをポチっと押すだけで, なんとサーバにデプロイできてしまったからです!



地道にweb.xmlとかwarファイルとかFTPとか弄っていたのが馬鹿らしくなるくらい, シンプルなデプロイメントです. というか, これに慣れてしまったら, きっともう従来のデプロイとかできなくなりそうだ...

とまぁ, 今だ若干の興奮を隠せませんが, とりあえず今日はこんなところで失礼します. ではでは.

Migrating from Windows to Linux




お久しぶりです. 最近, 久々に暇が出来たのでtango!の移植作業の続きをしました.

以前, Google Developer Day 2009でGWTについて色々と学ばさせてもらった甲斐もあって, 何とかWindows XP -> Linux on 64-bit architectureの移植が完了しました. ところどころwarningは出ていますが, 致命的なエラーをゼロにすることが出来たのでまぁ良しとします.

念のため, もしかしたら同じようなことで躓いている人もいるかもしれないので, 以下に移植のKey wordsを, 覚えている限りですが, 書き出してみます.

-JVM 32-bitをインストールして, 例えば, /opt/以下に置く
--GWTが32-bitのJVMに対応していないため
--Build PathでインストールしたJVMを指定
---ダウンロード先
-GWTは複数のバージョンを用意 (e.g. gwt-linux-1.5.X, gwt-linux-1.6.X)
--どうしてもコンパイル出来なかったらバージョンを変えてみる.
--僕の場合, 1.6.4だとGWTShell周辺が動かなかったのですが, GWT1.5.3に変えたらうまくいきました.

---嘘です. さっきやってみたらプロパティが上書きされてしまって, 動かなくなりましたorz
---別々のプロジェクトおよびワークスペースでやった方が良いかもしれません.
---参考: Issue 134 GWT hosted web browser does not work in 64-bit Linux
---ダウンロード先
-Eclipseは64-bitでもOK?(うる覚え)
--確か32-bitだとGUIが恐ろしいことになって, 使いものにならなかったと記憶しています.
--参考までに, 僕のversion: Eclipse Platform Version: 3.4.2 Build id: M20090211-1700

加えて, 情報として多少古い(まだCypal Studioを使っていた頃)ですが, 以下のようなページもあります.
-tango!プロジェクトの背景&開発環境


とまぁ, こんな感じにやっていったら何とかなりました.

何とかエラーが無くなったとはいえ, 今無事に動いているtango!のversionは2008年9月時点のバージョンなので, これから少しずつversionをアップデートしていく地道な作業があったりします. 加えて, GAEではjettyのcommunication機能が使えないから, サーバにアップロードできないという潜在的な問題もまだ解決していませんが, まぁそれは後で考えればいいか(笑). とりあえずはローカルで動かせるように頑張ってみるテスト.

2009-06-09

Google Developer Day 2009



今日は横浜まで行ってきて, Google Developer Day 2009に参加してきました。サプライズとしてAndroidが搭載されている携帯を無料で貰えました。開発用なので勿論サポートは無いし, SIM差すと請求額がとんでもなくなるらしいから, 実質Wi-Fi環境でしか動かせませんが, それを考慮してもメチャクチャ使い勝手が良いです(文字入力を除いて). 例えば, カメラで取った画像は2タッチでgmailおよびpicasaに送れます. また, 動画ならば2タッチでgmailおよびyoutubeにアップロードできます.

当日, 横浜で何があったかは, ネットで検索すれば色々と分かると思うのでここでは割愛します. とりあえず, Google Web Toolkitのベストプラクティスや, Google App Engineでjavaを動かす時の仕様および注意点などを聞けただけでも個人的には大満足です. あそこまで至れる尽くせりだと, なんか少しはオープンソースに貢献しないとバチがあたりそうな気がします. 時間が空いたらちょっとやってみたい気にさせられました.

Google Web ToolkitとGoogle App Engineには御世話になるつもりでいるので, またこのような機会があったら是非また参加したいと思います.

以上, 近況報告レポートでした.


#以下、メモ
※注意: 誤字脱字・誤解誤認の可能性あり

Google Developer Day 2009 memo

[基礎講演]
Google Chromeによる利点
-Speed up
--高精度化
--HTML5: canvas, vide, geolocation, app cache/DB, web workers(マルチタスク化)

1. canvas
-javascriptはスケールでない.
-canvasは宣言するだけ(?)
-O3D
--web app(NOT flash)で高解像度の3Dが描画可能

2. video
video tag
-Ex. 動画そのものをjavascriptで回転
-HTMLだけで動く, not flash

3. geolocation
???

4. app cache/DB
connectionに不具合がえってもcache/DBで補完

5. web workers
canvasで動かすタスクをマルチスレッド化

「これら全てをweb標準にする」
-そのためのGoogle Chrome
--IE以外(firefox, safari, opera)は賛同
--IE8でどうなるかは分からない

web socket -> Unixのsocketライク(パンフレット参照)
notice -> ポップアップは別の形で(パンフレット参照)

Google Chromeプロジェクトは"chromium"で今も動いてる。
-いつでも参加可能。
HTML5を実装し, マルチplatform化した(パンフレット参照)

次は, Mobileと統合したnew techを!

[Tom moss]
androidは活発で, USAでは既にNo.2に.
-次はJapanへ進出

[NTT docomo Mr. nagata]
Androidへの期待
-今までのdocomoのサービスを反省し, Smart phoneへ

keyはdeviceとapplication.
-deviceは良い
--あとはアプリ開発
---アプリ開発が売り上げ曲線の傾きに影響すると考えている.
----「ケータイするGoogle」
----Docomo Pro series HT-03A

app, dev, costの正の循環に期待
6月末〜7月上旬に環境を提供

[Chris Pruett]
Android storyの話

download app
-directly download
--easy to get
-develop business

サプライズ企画:Android Phoneの無料配布
-androidを広げたい
-androidのキラーアプリはGoogle以外の開発者が作ると期待


[Daud Glazer]
social webの話
-open social

webの特長
-web connect
--web <---> doc
--web <---> open

Problem
-app ---> user
--app <---> user

Social Web motivates innovations.

[Mr. kasahara]
mixiの次のステップ
-communication service

Mixi platform
1. application
-inside mixi
--social application
--PCとMobileの整合

2. connect
-outside mixi

3. ビジネス支援
-広告: 1page = 0.01 yen
-課金: 手取り8割
-資金: 出資or融資

利点: marketing costが低い
-マイミクによる伝播を利用
--social networkの一つの魅力
---アイデア勝負の環境を提供

Ex. ハグ☆ミー
-ハグ友達を選択
--相手に通知(それだけ?)

OSDE with Eclipse plug-in
-OpenSocial hackathonで使われている

[Ex. Goo home]
2 or 3以上のappを統合
-Goo homeのあるgadgetのアクションが他のgadgetに伝播

[Google Wave]
Google Waveの話
product, platform: API, protocol:open source
-serverにユーザがアクセス

Google Wave Demo
1. insert sentnce
2. real-time chat
3. 3人目以降は時系列を参照可能
4. localfileからD&Dでアップロード
5. uploadしたものはスライドショー可能
6. Blogからもアクセス可能
7. twitter + wave
8. Gameもシームレスにプレイ可能
9. Gameの時系列(Ex. チェスの手順)も参照可能

Ex. API
-loggy
--real-time translation

まとめ
-wave.google.com
-code.google.com/apis/wave
-222.waveprotocol.org
-devアカウントを後日配布

[Mr. Ishihara]
他productの紹介
-Google Web Elements
--make blog pwerful
-MapsAPI ver.3
--3年ぶりのバージョンアップ
--Key less
-ルート検索
--近いうちに公開予定
-GTUG(Google Technology User Group)発足
--1,2 monthlyで活動
---詳細はGOogle Lightening Talk

Android phoneについて
-Wi-Fi環境を強く推奨(通信費用の関係上)

Key: Make Powerful Web By Yourself


----------------------
[Google App Enging]
GAE-request処理について
-分散システムに類似してる?
-Ex. 分散システムのスケーラビリティ
--Ex. データでは無く参照ポインタを伝播

まとめ
-Fan-out
-Geolocation Info
-Relationship Glaph
-membership question
-write時間を考慮する


-----------------------
[Java on GAE]
outline
-GAEとは
-On Java Support
-App Enging Datastore

使えるもの
-Java 6が動く
-servelet/lib
-Google interface

特長
-install / maintainance不要
-負荷に応じてリソースの動的割り当て
--自動scaling
-CPUやband widthに応じて課金
--入っていの規模まではFree

App Engineについて
-Load Balancingベース
-開発者はアプリにfocusして欲しい
-最低でも3つのサーバ
--高信頼性

注意点
-HTTPリクエストが30秒をこえるとExeptionを投げる
--長いbackground processの禁止
-sand-box内でのみ動作
--ユーザによるスレッド操作はダメ
---serverはok(?)
--File Systemのread禁止
---FS readは必要ないはず

servelet API 2.5
Jettyを使用
-しかしjettyの特長は使えない
--jetty-web.xml
--continuations(継続) ← tango!は動かない可能性高いorz

Software Service
-JBBCはダメ
--Relational Databaseはコンセプトと合致しない
---正規化は必ずしも必要ではない
-APIはAPIProxyを通してつかう
--AOPができる
---サービス前後のprofilingが取得できる
----debugが簡単に!

sand-boxについて
-制限
--JVM permission
---local file / socketの禁止
----互いに参照させないため
--ただし, JVM上で動くものなら全てok
---JRuby, Jython, Rhino, etc.

under constructing...
-tech theme -> async
-full text search
-mail receive
-Datastore import/export tool
-etc.

Data Storeについて
-dataの格納の仕方が違う
--big tableは動的に分割される
---一見、制限は無いように見える
--schemaが無い
---not strict
--NOT RDBMS
---RDBMSはpowerful過ぎる
----ターゲットと合致しない

storeはsimpleに
-App dev
-App message
-App environment service on GAE
-APP scaleするインフラ
--リクエスト量, データ量を重要と考えているため

Data storeの特長
-Entity
--object in Java
-Kind
--Class in Java, table in DB
---person
-key
--primary-key in DB
---person/person:44, /pet:8
-e-group
--Transaction in DB
-property
-- Column in DB
-friends
--1対多
---/person:32, /person:34

functions
-get()
-put()

soft schema
-App layerによって決定
--devが楽 based on 経験
-JDO/JPAのmete-def

移行のヒント
-databaseはRDBMSは置換できない
--designし直す
---Primary key
---transactionが必要かどうか
----結構大変かも
----何がrootか考える
-----userがrootになりやすい
------複数かどうか考える
---array, view, trigger, data移動

Ex. joinが使えない
-非正規化

まとめ
-AFDを永続化
-soft schema
-非正規化を恐れずに行う
--高速化と堅牢性のトレードオフ

参考資料
-Google developer relations japan
-google code


※次はGoogle Web Toolkit: ベストプラクティスから

追記:
----------------------------
[Google Web TOolkit: ベストプラクティス]
Introduction
-nontrival cache
-client side
-AdWardsUI

History
-Event Bus
-DI + MVC(Model, View, Controller)

3 themes
1. async
-AJAX, ID array for scaling
--Sync/Asyncを2つとも用意
-make arm torelable
-failureを1つの場所に!
--GWT.ranAsyncUI to split
-Abstract Got
-通信したらレンダリング

2. decouple
2.1 DI
easy test, wit, debug
-Connection's'
-Geust's'
--remove over connections
-Instant
--if(コンタクトIDs!=???)
-EventBus for tossing

Ex. Private onSuccess{
cb.onSuccess{
... // then, create a new contact
}
}

2.2 MVC(Model, View, Controller)
ブラウザ遅い
-model<----prefetch<--->View
--Model: Keep Simple!
--prefetch:
---class PhoneEditor
inteface G_Display{
// ハンドラを増やす(?)
}
--View
---Keep Simple, but still slow
---MochView

3. stateless
duplicate functions
-Phone.front() // safer
-Save
-Cancel

Dependency Interaction(?)
-No Global, No Service
-GIN - client
-GUice - service

Decoupling Advantages
LayOff
-tests run fast
--Store Action in Local
--After cancelling, We can test

Ex. FireEvent(GwtEvent(?))...
// 色々用意して
-editor.editPhone
-display ...
//verify
-vndate...
-assert...
-phone...
-assert...

User Should NOT notice Server restart
-Expect multiple Instances

Recap
-Get b-history
-Use EventBus
-DI + MVP FTW
-3 themes
--1. 同期/非同期を含める
---常に使う必要は無い. scaleするため.
--2. 常にdecouplingする using EventBus
--3. strive to archive statelessness

参考資料
code.google.com/webtoolkit/
-スライドあり?

----------------------
[Google & OpenSource]
Googleとopensourceの関係の話
-結構面白かったからyoutubeであとでみるのも良いかも!

Google Code
-CSの学生は理論が強い
--しかし, 実践に弱い傾向がある
---Google Summer of Code

ライセンスの話
-GoogleのライセンスはBSDが多い
-Google Chromeは最もexposureなproject
--processやgoogleのstrategyもオープンにしている

プロジェクトによってopenの度合が違う
-Ex. 広 GoogleChrome, Android 狭

----------------------
[Google Lightening Talk]
Google Technology User Groupが各5分で自分のプロジェクトを発表
-Key by matsuo-san
-JRuby on GAE
--800 files to 100 files
-OpenSocial
--hackathon is opened for even begginers
-???VM

GTUGの発足
-メンバー募集
-活動は1,2ヵ月に一回

----------------------
[Google Wave API]
Google WAVE APIの仕様の話?
-途中から興味が無くなり, 寝惚け眼で聞いてた

3 waves type
-1. oneself
-2. 2 participants
-3. more than or equal to 3
※詳細は基礎講演のメモ参照

2 part
-1. embedding
--archtecture
---include javascript

method
-LoadWave
--ID
-SetUIConfig
--style???
-AddReply
--Visit -> reply
-Follow???

-2. Robot
???
※理解できなかった

2009-05-02

run GWT 1.6.x using 64-bit eclipse on 64-bit architecture ver.2





先日の投稿の続きです。

なんとかGWTのHosted modeで動くことができたけど、どうやらbrowsing modeでは動かない。色々調べて見たところ、どうやらPC環境に依存した問題らしく、無理やり直すしか方法が無いようです。

僕の場合、browsing modeで動かない理由は"Unable to find a default external web browser"という理由だったので、以下のコードを"~/.bashrc"に挿入することで直しました。

export GWT_EXTERNAL_BROWSER=/usr/bin/firefox

しかしながら、以下のdiscussionで述べられているように、あまり良い解決策ではないようです。
http://groups.google.com/group/gwt-maven/browse_thread/thread/2abd1734bd3ae936

したがって、とりあえず直ればいいや、という人向けの解決策です。あまり推奨できないのが痛いところ。

とりあえず今日はここまで。

残っている問題:
(GWT:6794): Gtk-WARNING **: /usr/lib/gtk-2.0/2.10.0/engines/libclearlooks.so: wrong ELF class: ELFCLASS64
・・・
(GWT:6794): Gtk-WARNING **: /usr/lib/gtk-2.0/2.10.0/engines/libclearlooks.so: wrong ELF class: ELFCLASS64
The server is running at http://localhost:8080/
LoadPlugin: failed to initialize shared library /home/yohei/.mozilla/plugins/npwrapper.libflashplayer.so [/home/yohei/.mozilla/plugins/npwrapper.libflashplayer.so: wrong ELF class: ELFCLASS64]


2009-04-28

run GWT 1.6.x using 64-bit eclipse on 64-bit architecture


64-bit architectureを使っていると色々と面倒なことが多いです。が、大抵の場合はなんらかの対処法を誰かしらが実践しているので、頑張れば結構どうにかなります。今日はGoogle Web Toolkitを64-bit architectureで動かす方法について書きます。

僕が調べた限りでは、動かす方法は、大きくわけて2つあります。
1. eclipse 32-bit ver. を使って動かす。
2. eclipse 64-bit ver. に32-bit用のjreをインストールさせて動かす。

GWTのdiscussionでは、わりと1.の解決策を挙げている人が多いようですが、正直なところ、GUIがバグったり、どこでどうエラーが出ているのか明白でなかったりと、個人的にはかなり使いづらかったと感じています。それに比べて2.は上述のキャプチャにもあるように、GUIもはっきり描画されていて、エラー内容はほぼ全て64-bit命令にのみ集約されているので、この部分だけどうにかしてやればなんとか使えそうです。

というわけで、2.の解決策について書きます。参考にしたサイトは、以下のサイトです。
http://theworldofapenguin.blogspot.com/2008/05/google-web-toolkit-in-linux-64-bit.html

具体的な手順は上述のサイトを見ると分かるので、大まかな手順だけを書くと、以下のようになります。
1. jre 32-bit(self-extracting file)をダウンロードする。
http://www.java.com/en/download/manual.jsp

2. ダウンロードしたファイルを/opt/に移動させ、"sudo sh /opt/ダウンロードしたファイル名"でjreをインストール。

3. eclipse 64-bit ver.を起動し、window menu->preferences->java->installed JREsで、インストールしたjreを指定&チェック。

4. Project Explorer内のGWTプロジェクトを右クリック->properties->RUN/Debug Settings->プロジェクト名クリック->edit->JREタブをクリック->Alternate JRE->インストールしたJREを指定。

5. GWT projectを起動。

細かい部分はだいぶ端折りましたが、これで僕は動きました。

ただし、問題はまだ残ってます。問題とは、上述のキャプチャが示すように、警告が出力されていることです。この警告の内容が示すように、現在64-bit版のfirefox(iceweasel)+pluginを使っているため、GWTのデバッグ用browswerでは動作するけど、Complile/Browseしたときは動作しませんorz

tango! on GAEもやりたいし、今後ともGWTにはお世話になるつもりでいるので、いずれこの問題も解決させます。

とりあえず今日はここまで。ではでは。

追記:エラー内容

(GWT:4334): Gtk-WARNING **: /usr/lib/gtk-2.0/2.10.0/engines/libclearlooks.so: wrong ELF class: ELFCLASS64
(GWT:4334): Gtk-WARNING **: /usr/lib/gtk-2.0/2.10.0/engines/libclearlooks.so: wrong ELF class: ELFCLASS64
(GWT:4334): Gtk-WARNING **: /usr/lib/gtk-2.0/2.10.0/engines/libclearlooks.so: wrong ELF class: ELFCLASS64
(GWT:4334): Gtk-WARNING **: /usr/lib/gtk-2.0/2.10.0/engines/libclearlooks.so: wrong ELF class: ELFCLASS64
(GWT:4334): Gtk-WARNING **: /usr/lib/gtk-2.0/2.10.0/engines/libclearlooks.so: wrong ELF class: ELFCLASS64
(GWT:4334): Gtk-WARNING **: /usr/lib/gtk-2.0/2.10.0/engines/libclearlooks.so: wrong ELF class: ELFCLASS64
(GWT:4334): Gtk-WARNING **: /usr/lib/gtk-2.0/2.10.0/engines/libclearlooks.so: wrong ELF class: ELFCLASS64
(GWT:4334): Gtk-WARNING **: /usr/lib/gtk-2.0/2.10.0/engines/libclearlooks.so: wrong ELF class: ELFCLASS64
(GWT:4334): Gtk-WARNING **: /usr/lib/gtk-2.0/2.10.0/engines/libclearlooks.so: wrong ELF class: ELFCLASS64
(GWT:4334): Gtk-WARNING **: /usr/lib/gtk-2.0/2.10.0/engines/libclearlooks.so: wrong ELF class: ELFCLASS64
(GWT:4334): Gtk-WARNING **: /usr/lib/gtk-2.0/2.10.0/engines/libclearlooks.so: wrong ELF class: ELFCLASS64
(GWT:4334): Gtk-WARNING **: /usr/lib/gtk-2.0/2.10.0/engines/libclearlooks.so: wrong ELF class: ELFCLASS64
(GWT:4334): Gtk-WARNING **: /usr/lib/gtk-2.0/2.10.0/engines/libclearlooks.so: wrong ELF class: ELFCLASS64
(GWT:4334): Gtk-WARNING **: /usr/lib/gtk-2.0/2.10.0/engines/libclearlooks.so: wrong ELF class: ELFCLASS64
(GWT:4334): Gtk-WARNING **: /usr/lib/gtk-2.0/2.10.0/engines/libclearlooks.so: wrong ELF class: ELFCLASS64
(GWT:4334): Gtk-WARNING **: /usr/lib/gtk-2.0/2.10.0/engines/libclearlooks.so: wrong ELF class: ELFCLASS64
The server is running at http://localhost:8080/
LoadPlugin: failed to initialize shared library /home/yohei/.mozilla/plugins/libflashplayer.so [/home/yohei/.mozilla/plugins/libflashplayer.so: wrong ELF class: ELFCLASS64]

2009-04-16

Java on Google App Engine



Google App Engine、Java獲得 - JRubyとRails、Groovyも動作

とうとう、Google App Engineがjavaに対応したようです。

個人的には、これは非常に嬉しいニュースです。理由は、今までずっと放置していたweb application "tango!"がウェブ上にアップできるようになるかもしれないからです。

Javaが使えるサーバを見つけるため、今までに何度か国外のサーバも探してみたけれど、やっぱしそう簡単には見つかりませんでした。正確には、Javaが使えるサーバはそれなりにあるんだけど、月額費用が一般的なPHPやPythonに対応しているレンタルサーバの値段より10培近い値段だったので、コストパフォーマンスが見合っていなく、断念していました。

しかしながら、今回のGAEのjava対応によって、この問題が解決するかもしれません。未だ正式には「Google App EngineがGoogle Web Toolkitに対応した」という発表はないけど、javaが使えるのであれば、GWT on GAEもできると思っています。そして、GWT on GAEができるなら、tango!の正式なリリースも可能かもしれません。("かもしれない"と述べたのは、Communication機能とかComet機能とかを駆使して、hanging RPCを無理やり実装しているから、javaが使えるからといって必ずしも動くとは限らないと考えたから。)

ともあれ、やる価値は十二分にあると思うので、そのうちtango! projectが再開するかもしれません。というか、確実の自分の気分次第なんですが(笑)...まぁ、時間見つけて頑張ってみます。

P.S.
一応、同じような考えを持っている人は一杯いたみたいです。
というか、GWT + GAE = GAEWTになるのかw

Java day : GWT 1.6 + App Engine for Java !

Google Web Toolkit News - onGWT.com


おまけ:
"Please add java support"祭り
吹いたwwww

2009-02-22

trackback test


Bloggerにはtrackbackが標準で付いていないみたいだから, HaloScanを使ってtemplateを一新してみた. trackbackつけられるかな.

HaloScan
http://www.haloscan.com/

[追記]
実装してみたけど, やっぱし元の状態に戻しました。理由は, 全てのCommentをまとめてfeedしてくれる"all comments"という機能のXML生成でエラーが起こったり, コメントしてくれる人に対しても色々な操作要求を(英語で)してきたりするからです。これでは, ただでさえコメントしてくれる人が少ないブログのに, さらに激減しそうな気がしてなりません。

とはいえ, 現状ではトラックバックが使えないので, これからもひそひそとやっていくブログになっていきそうです。トラックバックについての今後の方針としては, 「需要があったら実装する」という形にしようと思います。もし「トラックバックがどうしてもしたい!」という方がいましたら, 僕の方まで連絡してください。そういう要望が届き次第, その時にどうにかして実装しようかと思います。需要がないのに実装しても, あんまり意味ないしね。

それではでは。

2009-02-19

デベロッパーネットワークAPI活用事例セミナー&発表会@Yahoo! Japan




http://techblog.yahoo.co.jp/cat206/api_2/
完全敗北orz
敗因は、Web Applicationの完成度が相対的に低かったということもあるけど、それ以上にTimingでの失敗が痛すぎる。Timingに関してはもっとシビアに考えていかないと。そのためにも、Demoをうまく使って、省けるところを省き、残り時間に基づいて柔軟に時間内に収めるようなプレゼンができるようにならねば。

世界レベルで活躍している人と接してみてやるべきことが増えた。とりあえず、目の前のプロジェクト研究からしっかりやっていく。

2009-02-17

tango! captures

現状をキャプチャーを使って簡易報告でも。









ほぼ完成(?)。残すはテストとプレゼン資料作りのみ。


2009-02-09

impl SQL Query and Save Function

お久です。数値計算の最終レポートも無事提出でき、tango!の方も順調に改造が進んでいます。今日はtango!の進み具合の報告とかをば。


幸運にも、開発陣が全員データベース設計を受講していたということもあって、すんなりと動的なSQL文作成プログラムができました。結果として、こんな感じで現在のApache Derbyを使った新DBでも条件検索ができるようになりました。





加えて、上述の図からわかるように単語の保存機能も追加。



クリックすると、



こんな感じで保存できるし、同様にして削除もできるようになりました。





お、退店の時間なので今日はここまで。

2009-02-03

tango! restart



久しぶりの日記です。若干の近況報告でも。

ようやく期末終わりました!唯一、数値計算のテストで特異値分解の問題を解き忘れたというミスが中々痛いけど、これから最終課題を解いて提出すればまぁ問題ないでしょう。

終わったことはさておいて、明日からは心機一転、Yahoo!発表に向けてtango!開発の再開です。諸事情により、開発陣営の旧メンバーと新メンバーがガラッと変わってしまったけど、これはこれで新鮮味があって面白い。メンバーが違うのだから、いっそ開発方針を変えて、一部のtango!機能だけを流用した新システム開発とかもいいかもな~。現メンバーは全員英語できるから、後学のためにもExt-GWTとかGWT-Extとか、Gadgetの実装とかチャレンジしてみてもいいかもな~。あと先月刊行された、海外で評判(?)の本「GWT applications」も買いたい!Starter向けではなくて、advance向けというコンテンツにワクテカ。嗚呼、妄想ワールドが全開過ぎるze。

ただ他にも、自作OSプロジェクト(こっちは単位取得可能)があるし、SoC設計春期コースもあるし、TOEFL iBTもあるわけで。。。そこらへんの優先順位ははっきりさせないまずい。本当はNTT communicationsのインターンもやりたかったけど、そこは流石に自主規制か。あ~でもインターンもしたかったな。実際、もっとプロジェクト研究進められていたら出来たはずだし、そこはもう自分のクソっぷりを恨むしかない。。。orz

とまぁ、こんなで感じで、明日からまたMiyama lifeが復活します。パソコン開いて何やら怪しい儀式をしていたらきっと僕です。ご用がある方は例の喫茶店まで。

ではでは。

2008-12-17

[tango!]New Member and New Ideas


先週の情報検索の発表を見学したら、tango!に組み込むとなかなか面白い事が出来るんじゃないかと思える作品がいたので、そのメンバーの人たちを即勧誘しました。教授から受けたアドバイスの一つに、「有限のtangoを無限のtangoにする」というものがあったのですが、彼らの作品をうまく組み込むことができればアドバイスされたことが実現できそうです。実力あるメンバーも増えたし、プロジェクトの開発環境も整えたし、作業領域も明確化したし、面白くなりそうな予感。


2008-12-15

[tango!]Embedded Database in Eclipse


片手間にやっていたから、幾分か時間がかかってしまいましたが、ようやくApache Derbyを使った、はりぼてではないデータベースできました!

上図はコンソール上でのデバック用の出力です。ちゃんと出てる(気がします)。次のステップは、用意した20数万語のデータをデータベースに入力することかな。
さて、ではこの勢いで、大分後れを取っているTOFLE iBTの課題もちゃちゃっと終わらせます。
それでは。

2008-12-10

GWT+Eclipse with Cypal Studio+Apache Derby

合計7, 8時間ほど、無駄に悩みに悩み続けて、ようやくGoogle Web ToolkitにApache Derbyを実装させることに成功しました。だいぶ手こずりました。







分かったこと:
・Client -> Apache Derbyはできない。
・Server -> Apache Derbyはできる。



現状の問題点:
・エラー時の例外処理
・日本語の入出力方法
・Remote Moduleを使うと、Web上にアップロードできない



超お世話になったサイト:
http://www.ibm.com/developerworks/opensource/library/os-ad-gwt1/
http://www.fukudat.com/wiki/ja/Apache_Derby
http://allabout.co.jp/internet/java/closeup/CU20080911A/
http://allabout.co.jp/internet/java/closeup/CU20070119A/




まだ時間あるし、はりぼての実装だけ済ませてしまおうかな。

2008-12-09

GWTプロジェクトをDeployする方法

先日示したGoogle Group上でディスカッションした内容なんですが、もしかしたら他の誰かの役に立つかもしれないと思ったので、Blog上でも公表しておきます。


----- 以下、引用 -----
以下に、GWTで制作したプロジェクトをDeploy(ウェブ上で閲覧できる状態にすること)する手順を記します。

前提条件:
・Cypal Studioプラグインを導入したEclipseで、プロジェクトを制作している。
・TomCat ver 5.5 が、\Program Files以下にインストールされている。
※Tomcatのインストール方法は下記HPを参照してください。
http://www.site-cooler.com/java/tomcat/

1. 完成したプロジェクトをEclipse上で実行(run)する。

2. 上部ツールバーの右端にあるComple/Browseを押す。

3. ウェブブラウザが立ち上がり、ページが無事に表示できているかどうかを確認する。(更新すると直るバグも時々あります。)

4. Eclipseのウィンドウに戻り、プロジェクトのフォルダ階層の、一番上にあるプロジェクト名を右クリックする。

実行例:


5. "Export" -> WAR Fileを押し、適当な場所に出力する。

6. 出力したWARファイルを、"C:\Program Files\Apache Software Foundation\Tomcat 5.5\webapps"にコピーする。

7. 数秒後に、webappsフォルダ内に、"プロジェクト名"フォルダが生成される。

8. 生成されたフォルダをデスクトップにコピーする。

9. FTPアプリケーション(例えば、FFFTP)を使い、デスクトップにコピーされたファイルをアップロードする。

10. 無事にアップロード出来ていれば、アップロードされた先のURLにアクセスすることでGWTプロジェクトが表示できている。

以上です。

2008-12-06

tango! project open


今まで情報検索の実験として進めていたtango! projectですが、オープン化しました。というのは、今後の活動は、ただYahoo!で発表するためだけに開発を進めていくので、学業の成績とはもう関係がなくなり、ほぼ趣味の領域に入ると考えたからです。このため、少なくとも形だけでも、オープンに参加者を募ることにしました。

以下が、tango! projectの情報共有スペースです。
http://groups.google.co.jp/group/tango_project

興味のある方は連絡をば。現時点では、元々いたメンバーに加え、イギリスに留学してる友達と、デザインコンテストで賞をとったことがある後輩が、ウェブデザイナーとして参画してもらえることになっています。

個人的には、もう成績とは関係なくなるし、プログラミング言語の制約もなくなる(今まではJavaのみで記述)ので、大分気が楽になります。実際に、同じくYahoo!で発表するであろう友達は、これからは全てpythonで書くとか言ってました。

うん。OS制作のプロジェクトもあるので、tango!だけに傾注するわけにはいきませんが、なんか面白くなってきました。こういった気持ちを維持できるよう、出来ることから少しずつコツコツやっていきたいです。