月別: 2013年6月

Maybeと多分が恋に落ちたら、産まれてくる子はきっとMaven(3)

android用の神経衰弱ゲームを公開しました(・∀・)
The Match-up(Memory) game for android was released!

Google Play:
Mole's Match-up.

Introduction page:
Mole’s Match-upをリリースした∩( ・ω・)∩


【前回までのあらすじ】
家臣が居ない蠣崎季広は城を空にしたまま、小野寺景道、小田氏治、百地三太夫等の
取り込みに成功。二年目に誕生した姫武将や松前慶広とともに国力を増強し、安東、
南部、伊達を併呑、蘆名、長尾の領土を削り、東北の雄へと成長した。

北陸道を進軍し近畿東海で台頭する第六天魔王とぶつかるか、
その前に北条氏その他を下して関東統一すべきか悩む俺氏は
Maven buildする方法を模索し始めた……


プロジェクトのコンテキストメニューからmaven buildを選択してみる。
mavenbuild01
 

ダイアログ表示されたが、よく分からないのでそのまま実行する。
mavenbuild02 

以下のようなエラーが発生…(´・ω・`) ゴール?モクテキ?

[ERROR] No goals have been specified for this build. You must specify a valid lifecycle phase or a goal in the format : or :[:]:.

 
もう一度ダイアログを表示させてゴール欄の選択ボタンを押してみる。

なんも選択肢でない(´・ω・`) ホワイ?
mavenbuild03

よくわからないのでpom.xmlなどを眺めてみる。
pomxml

<plugin>の中の<execution>の中に<goal>タグがあった。
幾つかプラグインがあるのでどのゴールを指定すればいいか迷う。

一応<id>がjar-with-dependenciesというのがそれっぽいので、
ゴールに”single”を指定して実行してみる。

違うらしい(ノ∀`) うーむ…

[ERROR] Unknown lifecycle phase “single”. You must specify a valid lifecycle phase or a goal in the format : or :[:]:.

よくよくエラーメッセージを見ると”lifecycle phase“とある…

試しに同じプラグイン内の<phase>にあった”package”を入力して実行した。

こいつ…動くぞ( ;・´ω・`)ゴクリッ
なんか今まで違う動きが…

ちなみにエラーメッセージをちゃんと読んだら書いてあった(ノ∀`)
Available lifecycle phases are: validate, (中略), package


さてなんかうまく行ったくさいが、それがあるかわからない(・ω・`≡´・ω・) ホェアー?

ぐぐる。Targetフォルダに出力されるということだったので
今回の例で言うとワークスペースじゃなくてgitフォルダの下か。

あったで(・∀・)
buildresult

jumblr-0.0.7-SNAPSHOT-jar-with-dependencies.jarの方をプロジェクトへ追加して
以下のようなコードを実行した。データ取得出来たっぽい(・∀・)
お試しだったので各情報は直書きしたが。

public String tumblrPostTest(String[] args){
	String returnData  ="tumblrPostTest" + dnl;
	JumblrClient client = new JumblrClient([cosumerKey],[consumerSecret]);
		
	client.setToken([token],[tokenSecret]);
 		
	User user = client.user();
	returnData  +=user.getName() +snl;

	List<Blog> blogs = client.userFollowing();
	for (Blog blog : blogs) {
		returnData  +=blog.getTitle()+snl;
	}
		
	return returnData;

}

Mavenが忌避すべき恐ろしい未知のモノから既知のモノへと
変わったので、ついでにもう少しMavenについて勉強した。
と言っても以下のチュートリアルを途中までやっただけだけど(ノ∀`)

Maven

mvn siteは何故かエラーが出た。


ということで凄く遠回りしたけれども、jumblrが使えるように
なったので久しぶりに使い方ページを作ろうと思い立つ(`・ω・´)

まあ完成はいつになるかわからないけどねヽ( ・∀・)ノ

Maybeと多分が恋に落ちたら、産まれてくる子はきっとMaven(2)

android用の神経衰弱ゲームを公開しました(・∀・)
The Match-up(Memory) game for android was released!

Google Play:
Mole's Match-up.

Introduction page:
Mole’s Match-upをリリースした∩( ・ω・)∩


【前回までのあらすじ】
弓矢やフックショットで気絶させた後にゾーラになって攻撃をしなければ
ならないのに手際が悪くて逆に復活したグヨーグに飲み込まれてダメージを
食らいまくって死んでしまい戦意を喪失した俺氏はTumblr APIのラッパー
ライブラリの使い方を調べる為に昔作ったbaseWindowクラスを復活させたが……


というところでようやくOAuth認証絡みのコーディングに入った。
入ったはいいけれども、なんかうまくいかない(´・ω・`)

はてなハイクの時のコードを眺めつつ色々と試す。
まずscopeは要らないというかないようだ。

色々ぐぐってる途中で「callbackURLは”http://localhost”を
使ってるぜ、HAHAhaha…」みたいな英文を読んだ気がするので
それに倣った。

なんやかんややってるうちにAuthenticationURLを取り出せた(`・ω・´)
ブラウザでそのURLへ行くと認可ページ。よっしゃ。

そして認可するとhttp://localhostに飛ぶけど、うちの環境では
何も動かしていないのでnot foundになる…当たり前か…うーむ(´・ω・`)

( ゚Д゚)ハッ
callbackURLに”oob”を指定されたらPINが表示されるようになるんじゃね(・∀・)?

やってみた。

返ってきたのは無慈悲なエラーメッセージ……_| ̄|○
‘Out-of-band (“oob”) callbacks are not supported by this implementation.’

だからxAuthオンリーとかなんだな(´・ω・`)


さてと、どうしたものかと考える。
Servlet用ではあるがOAuth認証のプロセスは一緒の筈であるFoto-Haikingで使用した
はてな認証のコードを眺める。

( ゚Д゚)ピコーン!
ユーザーに”oauth_verifier”をコピペしてもらえばいいだけじゃん(・∀・)
つまり、PINの代わりに”oauth_verifier”を受け取ってアクセストークンを
取得するというなんとも美しくない方法である。
“oauth_token”はAuthenticationURLにくっついてるのを使う。

実際の運用的にこれはどうなのかはさておき、この方法でアクセストークンを
取得出来るか試してみる。

キタ━━ヽ( ゚∀゚)ノヽ(゚∀゚ )ノ━━ !!!!! って当たり前か(ノ∀`)

まあ色々な問題とか考えなければならないことは沢山あるけれども、今の目標は
jumblrを使ってTumblr APIを利用することなので、取り敢えずこの件は措いておく。

以下のコードは修正したbaseWindow.javaとFunction.javaでしか動かないので
意味はないけれど、こんな感じのコードで行けた。

getOAuthRequestTokenのコードはscribe-javaをインポートしたプロジェクト。

private static String snl = System.getProperty("line.separator");
private static String dnl = snl + snl ;
private TumblrApi tumblrapi= new TumblrApi();
public String getOAuthRequestToken(String[] args){
	String returnData  ="getOAuthRequestToken:" + dnl;

	OAuthService service = new ServiceBuilder().provider(tumblrapi)
			.apiKey([consumerkey]).apiSecret([consumersecret])
			.callback("http://localhost/").build();
		
	Token reqToken = service.getRequestToken();
		
	while(reqToken.getToken().indexOf("+") >=0 ){
		reqToken = service.getRequestToken();
	}
		
 	returnData += "AuthenticationURL: " +snl+service.getAuthorizationUrl(reqToken) +snl 
 			+"reqToken"+snl+reqToken ;
		
	return returnData;
}

getAccessTokenのコードはjumblrをインポートしたプロジェクト。
統合していないので不明だけど、jumblrはscribe-javaを内部で
使用してるので、統合する場合はscribe-javaは不要?

public String getAccessToken(String[] args) {
	Verifier v = new Verifier(args[0]);
	OAuthService service = new ServiceBuilder().provider(tumblrapi)
			.apiKey([consumerkey]).apiSecret([consumersecret])
			.callback("http://localhost/").build();

	//arg[1]はoauth_token arg[2] req_Secret
	Token tempToken =new  Token(args[1], args[2]);
	Token accessToken = service.getAccessToken(tempToken, v);
		
	return accessToken.toString();
}


アクセストークンがようやく手に入ったのでこれでjumblrが使える(・∀・)
意気揚々とjumblrClientを生成し、アクセストークンをセットしuser()メソッドを実行(`・ω・´)

エラーが2つ……_| ̄|○

java.lang.NoClassDefFoundError: com/google/gson/JsonSyntaxExceptionはともかく
InvocationTargetExceptionってなんだべ(´・ω・`)?

ぐぐる。

J2SEに含まれるクラスのひとつ。パッケージも含めたクラス名はjava.lang.reflect.InvocationTargetException。
例外の一種。
Methodクラスのinvoke()メソッドが投げる例外。 (中略)

InvocationTargetException例外にとって本当の例外は「Caused by」な例外となるため、getCause()メソッドで本当の例外を取得することができる。
InvocationTargetException

んー(´・ω・`) つまりはjava.lang.NoClassDefFoundErrorの方が原因か?
これはまあクラスが見つからなかったんだろうけど、俺のコードで
このcom.google.gsonパッケージなんて使ってたっけ?

gsonってjsonを使うクラスだっけか。
Method.invoke()で発生するということはFunction.javaの方で
発生しているはずだけどもjsonなんて使ってないし…

ということは使ってるのはjumblrだなぁとGithubでソースを見ると
確かにgsonを使っている……つまりそれはエクスポートしたjumblrが
依存ライブラリを含んでいない……

即ちあの作成方法は間違いということか…_| ̄|○
改めてjarファイルのサイズを見てみたらどう見ても
依存ライブラリが入っているようなサイズではなかった …(ヽ’ω`)


ここでふと疑問が浮かぶ。同じ方法で作ったscribeライブラリは
なんで問題なく動いたんだろうかと。
依存ライブラリを持ってなかったんだろうかと。

eclipse内にgitからインポートしたプロジェクトを覗いてみると
依存ライブラリは2つあった。junitとcommon-codecが。
junitはテストだから通常実行で呼び出すことは無いと思うが、
encode絡みでcommon-codecは呼び出している筈…なのに何故
エラーが起きてないのか…?

頭の中で青いジャージを着た男のギター演奏に合わせて
赤いジャージを着た男が手を交差させて踊ってる…(´・ω・`)

実はこの辺の記憶が曖昧なのだけれども、ローカルに依存ライブラリである
common-codecを持っていたのでeclipseがそれを検知したか、scribe-java
プラグインを追加した時になんかあったか……ローカルのファイルがパスに
指定されていたような気もするけど、今試したらm2フォルダのローカルリポジトリを
参照しているのでうーん…(´・ω・`)

全ての問題が解決した後で色々とぐぐってて以下のエントリを読む。
【Java】ClassNotFoundException と NoClassDefFoundError の違い
ErrorとExceptionの違いに気づいてなかったことに気づいた(ノ∀`)

何はともあれ、Mavenの方でbuildしないといけないという結論に達した。


と、だらだら書いていたら長くなりすぎたので続く(´・ω・`)

Maybeと多分が恋に落ちたら、産まれてくる子はきっとMaven(1)

android用の神経衰弱ゲームを公開しました(・∀・)
The Match-up(Memory) game for android was released!

Google Play:
Mole's Match-up.

Introduction page:
Mole’s Match-upをリリースした∩( ・ω・)∩


長い割には内容がない感じではあるが俺氏にとっては
問題発生から解決への大事な記録である( ・`ω・´) ワスレッポイカラネ
 


翻訳に飽きたというかOpenGLの所までは訳してるから、
ちょっとムジュラでも進めようとした俺氏、グヨーグに
ボコボコにされてへこむ_| ̄|○

折角、グレートベイの神殿までは攻略を観ずに進んだのに、
どうしても赤水流の元栓を開ける為に高台に登る方法が
考えつかずに、そこだけ攻略を見るという屈辱の後に続く
更なる恥辱に塗れた俺氏、そっとゲーム機の電源を落とす (ヽ’ω`)
 


前振りとは全く関係なく、そろそろ真面目にAndroidプラグラミング
でもしようかと思うも余り良い題材がないのに気づき悩む。

昔VBで作ったSLGもどきやMIDPで途中まで作ってたアクションゲームを
移植するのでも良かったが、それを作ってもAndroid的にはSurfaceViewと
タッチイベントくらいしかいじくらないで残りはゲームロジックを
いじることになりそうなのでやめた。次くらいに作ろう(`・ω・´)
 


あーでもないこーでもないと考えても特に思いつかず。
しょうがないからSNSとかパイプラインサービス系に投稿するサンプルでも
作るかと思い立ち、JavaのラッパーライブラリがあるWebサービスを探す。

T4Jを使うならばそれはきっと簡単であるのだけれども、アカウントは
削除して1年弱、再び作る気もないのでパス。

Facebookとかもラッパーライブラリがあるかもしれないが登録をするのが
面倒なのでやっぱりパス。

はてなハイクはないけど、Foto-Haikingの時にAPIをちょろっと触ったので
多少簡単な気がするけども、APIを直触りするくらいなら自分でライブラリを
作ってみたくなってしまうのでこれまたパス。加えて言うと新アカウントの
consumerkeyでFoto-Haikingをデプロイし直して元アカウントを削除するという
ミッションを思い出してしまうのでやっぱりパス。consumerkey書き換え用の
サーブレットを作っておくべきだった…_| ̄|○

Google+はこないだアカウントを削除したし、そもそもAPI書き込みが出来ない筈
だったのでいずれにせよパス。javascriptかなんかで力業で書き込むような
コードを見かけたけど、よくわからなかったし(ノ∀`)
 


Tumblrもアカウントを削除してしまったが、別アカウント作成済みで
ちょろちょろ観たりしてるし、確かラッパーライブラリがあった筈なので
“Tumblr java library”などのワードでぐぐる。

幾つかヒットしたうち、jumblrを使ってみることにした。
一応公式で紹介されているし( ・`ω・´) ケンイニヨワイオレシ
 


ライブラリなのにビルドされたものがない。
(※後で全てが解決した後によく見たらあった_| ̄|○)

仕方ないから取り敢えずgithubからimportしてみたが何が何やらよくわからない (ヽ’ω`)
Mavenを利用してるみたいだったので昔Maven使用に挑戦して敗れた記憶を辿って
Mavenプロジェクトへの変換を試みる。
ConvertToMavenP

変換できた(`・ω・´)
が、やっぱりこの後がよく分からない。
単純にエクスポートしたものを作成するプロジェクトのビルドパスに追加して
コーディングを始めたがエラー表示が消えたので取り敢えず先に進む。
(※この勘違いでまた後で悩むことになる__○_)
 


Tumblr APIはNone、API key、OAuthの3種類の認証レベルを持っているけれども、
男ならやはり最初からOAuthじゃいと思ってjumblrのコードやサンプルを見たが
OAuth認証に関する部分がないような…サンプルでもいきなりOAuthトークンを
セットしてるくさい……これは…どういうことだってばよ…( ;・´ω・`)ゴクリッ

そういえば他のライブラリもxAuthオンリーとか書いてあるやつがあったな…

まあ悩んでいてもしょうがないので、どうにか自力でOAuth認証に挑戦してみるかと
思ったが何をどうしたらいいかがわからない(・∀・)

何年か前のDevQuizでちょこっと触ったけど、もう覚えてないし……

( ゚Д゚)ハッ
よくよく考えてみたらFoto-HaikingでOAuthライブラリのscribeを使っとるやんけ、ワレ(・∀・)
 


githubの最新版にはapiにtumblr用があったので、前に落として来たscribe-1.3.0.jarを
ビルドパスに追加して利用しようとしたが、エラー。
1.3.0にはクラスが含まれていないモヨン(´・ω・`)

まあはてなの時のようにDefaultApi10aの各メソッドのURLを書換えればいいのだけれども
なんか悔しいのでこれまたGitHubからインポートする。Mavenプロジェクトに変換する。
そしてまた何をやればいいのかわからなくなる(・∀・)

取り敢えずエクスポートして作成するプロジェクトのビルドパスに追加してコーディング開始。
(※そしてまたこの事で更に後で悩むことになる___)
 


さて実際のコーディングを開始しようとしてまたも俺氏途方に暮れる (ヽ’ω`)
二ヶ月くらいまではプログラミングしていたと言ってもそれはServletやHTML5+JS、
よくよく考えてみるとデスクトップ・アプリケーションを作るのは数年ぶり…?

swingをフルスクラッチで触るのは嫌…というか思い出すのに時間かかる……
JavaFXもちょこっとしか触ったことがないし……

( ゚Д゚)ハッ
そういえばT4J解説ページを作っていた時に苦労して作ったAPIテスト用のなんかが
確かあるやんけ、オレ(・∀・) baseWindowクラスヤ
 


古いデータを引っ張り出してきてeclipseにインポートして中身を見る。

難しすぎる…_| ̄|○
プロプログラマーなら全然平気な内容だとは思うのだけれども、
このド素人にはリフレクションを使ったコードは良く分からない(´・ω・`)

なんで昔の俺はこんなコードを書けたんだろうかとちょっと不思議な感じがする。
俺がもし人類ならきっとこれはオーパーツだなぁ…などと思いながら
中身を頑張って眺め続ける……段々と内容を思い出してくる(・∀・)

そうだ、今回みたいな時、つまりは他のWeb APIのラッパーライブラリでも
使えるようにわざわざリフレクションで分離出来るようにしたんだった(ノ∀`)
まあでもその時は面倒だったからか大枠的には分離できるようにしておいて
実際にはTwitter.classをFunctionクラスに渡すようにしていたようだ。
この辺の部分を削ったらエラーがなくなった。
 


 
余りにも長いので一旦ここで切るけれども、本当に内容がないよう(・∀・)

scribe-java

android用の神経衰弱ゲームを公開しました(・∀・)
The Match-up(Memory) game for android was released!

Google Play:
Mole's Match-up.

Introduction page:
Mole’s Match-upをリリースした∩( ・ω・)∩


https://github.com/fernandezpablo85/scribe-java

OAuthライブラリ scribe の覚書

  1. sclibeをgitからimport
  2.  

  3. importしたプロジェクトを右クリックしてコンテキストメニューから[構成]-[Mavenプロジェクトへ変換]を選択。(ここ入れ忘れた(ノ∀`))
  4.  

  5. JREシステムライブラリをJavaSE-1.6
    (ぐぐって見つけたページには英語でJDK1.5を入れればどうたらこうたらと書いてあったようなのでわざわざオラクルのアーカイブから落としてきたが、1.5にすると”DatatypeConverterを解決できません”とか”インポートされた javax.xml.bind は見つかりません”というエラーになったので結局1.6にした。)
  6.  

  7. “maven-enforcer-plugin (goal “enforce”) is ignored by m2e.”は警告なので無視した。m2eclipse + maven-enforcer-plugin で出るうざい警告を消すというエントリがあったので消せるみたいだけど試していない。
  8.  

  9. findbugかなんかでエラーが出てた。
    “Plugin execution not covered by lifecycle configuration: org.codehaus.mojo:”
    http://wiki.eclipse.org/M2E_plugin_execution_not_covered
    m2eclipseからm2eへ 
    を見たがよくわからない(ノ∀`) クィックフィックスでmarketから何かをインストールしようとしたが何も表示されず、ライフサイクルとかいうのにチェックを入れてヒットしたものを入れてみたがエラーは消えず。最終的に二番目のin Eclipse preference(実験用)のignoreを選んだらエラーが消えた…ような…

  10. エクスポートからJarファイルを選択。エクスポートしたJarファイルを使用するプロジェクトのビルドパスに追加した。(Maven Buildでゴールがcompileでやるのが正解?それともphaseをpackageにしてidかなんかがjar-with-dependenciesだかの項目をpom.xmlに追加して実行?うちの環境ではMaven依存を見たらたまたま依存ライブラリがあったからそれを読み込んでうまくエクスポート出来ただけかもしれない。依存ライブラリが存在せずに上記のことをやるとエラーが出るかもしれない。)

これが本当にあってるかどうかは不明(ノ∀`)

(※)2013/07/11追記
Maven buildでpackageで正解の模様

インポートするプロジェクトのURLをscribe-javaの物にして以下の順で進めて
03 GitHubからのインポート
04 Maven プロジェクトへ変換

ここで出るエラーはignoreするようにして
scribe_error01

あとは残りをこなせば良い……と思うけど、保証しない(・∀・)
05 Maven プロジェクトのビルド
06 ビルドパスへのライブラリの追加