2012年9月30日日曜日

lastfm-javaでProxyの設定方法

Last.fmのクライアント作りで困ったことが一つありました。

Proxyの設定によってネットワークにつながらないという事態に。

Last.fmへの接続はlastfm-javaのライブラリを使っていたので、Proxyの設定がなんだかめんどくさそうだった。

なので、ライブラリのソースを少し弄らせてもらいました。

http://code.google.com/p/lastfm-java/downloads/list?can=1&q=

ここからソースコードを引っ張ってきて、Caller.javaを開きProxyクラスの変数とsetterをstaticにして、コンパイル。

これで、ライブラリを入れ替えるとProxyの設定が簡単にできるようになりました。

staticだから一括設定にもなるしすごく便利!

Proxyはjava.netのProxyでした。
http://docs.oracle.com/javase/jp/6/api/java/net/class-use/Proxy.html

JavaでMP3を再生


一時停止や音量調節などまだまだ実装していないが、とりあえず再生と停止だけできる。

今回はJLayerを利用させてもらった。
http://www.javazoom.net/javalayer/sources.html

プログラムを作るうえで参考にさせてもらったサイト様は
http://labs.unoh.net/2007/11/javamp3.html

修正しました
http://akis-i.blogspot.jp/2013/02/javamp320130226.html

import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.IOException;

import javazoom.jl.decoder.JavaLayerException;
import javazoom.jl.player.Player;

public class AKIMPer extends Thread {
 // variable
 private Player player;
 private BufferedInputStream stream;
 private Boolean is_run;

 // constructor
 public AKIMPer() {
  setStopper();
 }
 public AKIMPer(String file) {
  setStopper();
  setFile(file);
 }

 // methods
 public void start() {
  is_run = true;
  super.start();
 }

 public void stopMusic() {
  try {
   if (player != null) {
    player.close();
   }
   if (stream != null) {
    stream.close();
   }
  } catch (IOException e) {
   System.out.println("IOException");
  } finally {
   setStopper();
  }
 }
 public void run() {
  if (stream == null || player == null || !is_run) {
   stopMusic();
  } else
   try {
    player.play();
   } catch (JavaLayerException e) {
    System.out.println("JavaLayerException");
   } finally {
    System.out.println("End");
   }
 }
 // setter & getter
 public void setFile(String file) {
  try {
   stream = new BufferedInputStream((new FileInputStream(file)));
   player = new Player(stream);
  } catch (IOException e) {
   // System.out.println("BUFFER ERR");
   System.out.println("IOException");
  } catch (JavaLayerException e) {
   // System.out.println("PLAYER ERR");
   System.out.println("JavaLayerException");
  }
 }

 public void setStopper() {
  player = null;
  stream = null;
  is_run = false;
 }

 public boolean getIs_run(){
  return is_run;
 }
}
使い方
コンストラクタにmp3のpathを入れる
start()で音楽を再生するこの時、音楽は別のメソッドで動いているので
例えば、画像のスライドショーとかも作れる。
stopMusic()で音楽再生を止める。

参考ソース
import java.util.Scanner;
public class Test {

 public static void main(String[] args) {
  AKIMPer akimper= new AKIMPer("mp3/test.mp3");
  Scanner in = new Scanner(System.in);
  int temp = 0;
  akimper.start();
  while(akimper.getIs_run()){
   System.out.print("(closing -> 1 ) >_");
   temp = in.nextInt();
   if(temp==1)
    akimper.stopMusic();
  }
 }

}

問題点:
ループさせたりするなどの2回目の再生行為でエラーが起きる。
対策方法はもう一度インスタンスを作るなどである。

2012年9月29日土曜日

Android App 開発メモ - 001 (開発環境)

とりあえず、雑記

Android SDK
Android SDK Managerを起動して、Android 4.0 API14をインストール
今回は4.1や4.0.3はとりあえず見送ることにする。

次にeclipseを起動してHelp->Install New Softwareで
https://dl-ssl.google.com/android/eclipse/を入力して、Developer Toolを全部入れておこう。

とりあえず、インストールがおわるまで待機。

2012年9月23日日曜日

マルチスレッドのメモ

これからプログラミングをやっていく上で、マルチスレッドを学んでいかないとまずいと思いメモをしるす。

http://ash.jp/java/sync.htm
を参考に今は見ています。(ing)

Thread.sleep((int))は終了までの時間なのかえ?
深く考えずにとりあえず今はソースを見るだけにしています。。。

よくわかんないけど、Thread を継承しとけばいいのかね?。。。。

新しい勉強は楽しくなるまでが長い!

あ、Thread.sleep((int))の int はミリ秒なのかオッケー!

読み進めると何となくつかめた賀茂

ただ、スレッドの終了にnullをなぜ入れるのかね....


とりあえず、現在の理解は

同期オブジェクトの生成

子スレッドのインスタンスを生成

子スレッドの起動

親スレッドの処理

親スレッドは子スレッドが終わるのを待つ{waitSync()をコメントアウトして比べるとわかりやすいかも}

子スレッドが終わった

親スレッドの残りがあるならその処理をやる

なんか理解できたかも。
CUIはサンプルみたから理解したし、とりあえずGUIでつくるか!

Twitterでアカウントを乗っ取られている人が

Twitterでアカウントを乗っ取られている人が結構いるんだなーと思っていたら

hey someone is making up shocking posts that are about you http://~

と言うダイレクトメッセージが・・・・

ついに友人にも被害が!

とりあえず、パスワードの変更をしたみたいですが、Twitterの設定にあるアプリ連携は見直して無かったみたいです。

アプリ連携の設定を見直さないともしかしたら、アカウントが不正利用されてしまうので危険です。

詳しくは(http://www.jweb-seo.com/blog/wordpress/2012/03/29/3224)

今回はフィッシングみたいだったので、このような事が起きないようにするためには、
どのようなサイトを作ればいいか考えてました。

・IDとパスワードを入力させる画面では事前にユーザが設定した言葉を表示させる

これさえあれば、被害にあわずに済む場合も多いのではないでしょうか?

2012年9月8日土曜日

単語帳の統一規格 企画#0001

これから英単語帳のようなアプリが色々でてくると思うので、統一規格を作った方がいいと思った。
また、インターネットで普及するために簡易的で誰でもその規格に沿って単語帳を作れるようにする。
以上よりタグで囲めばいいと思いましたので企画しました。

例:
<word>
 <spell>単語</spell>
 <pronunciation>発音記号</pronunciation>
 <syllable>音節</syllable>
 <mean>意味</mean>
 <phrase>熟語</phrase>
 <example>例文</example>
</word>
解説:
単語データを<word></word>で囲むこれは絶対ないといけない
単語のスペルを<spell></spell>で囲むこれも絶対
発音記号を<pronunciation></pronunciation>で囲むこれはなくてもいい
音節を<syllable></syllable>で囲むこれはなくてもいい
単語の意味を<mean></mean>で囲むこれも絶対
単語を使った熟語を<phrase><phrase>で囲むこれはなくてもいい
例文を<example></example>で囲むこれはなくてもいい

<word></word>内のデータは<spell></spell>以外は何個タグを使っても構わないとする。
また、していしたタグ以外は使わないとする。
※<example color=#909090.みたいな指定したモノが含まれる時にはもちろん利用する。

最後に
pronunciationは長いので
prに略そうかなと思うなので最終的に
<spell>→<sp>
<pronunciation>→<pr>
<syllable>→<sy>
<mean>→<me>
<phrase>→<ph>
<example>→<ex>
<word>はそのままにしようかなと思う。
とういうか決定。

またこの規格の利点はHTMLに書き込んで単語帳を配布できるので手軽なこと。
みんなで使っていればデータの相互利用が簡易化される。