2012年12月1日土曜日

一人Advent Calendar1日目(JavaでYamlファイル読み込み)

何かきっかけがないとブログを更新しないんで一人Advent Calendarをやってみることにしました

普通のAdventCalendarだとテーマが決まってたりするんですけど一人でやるんでテーマも特にないです。
目標は「継続して更新する癖を付けること」

1日から頑張ったら途中で辞めるのが目に見えてるので1日目は控えめにJavaでYamlファイルを読み込みます

Yamlファイルはマークアップの形式の1つでもとはRubyで使われていたとか
XMLの変わりはJSONかYamlのどちらかになると思ってます。
YamlはJSONよりも様々な形式に対応しているのでYamlの方が少し複雑な印象

JavaでYamlを解析して読み込み時は「JYaml」というライブラリは使います
公式サイトの「Click here」からjarファイルをダウロードして読み込みをしたいプロジェクトのビルドパスに配置します

ちなみに今回読み込んでみるYamlファイルはこの2つで両方共プロジェクトのルートにおいてあります。
test.yml
- hoge
- fuga
- mofu
-
  - fufu1
  - fufu2

test2.yml
- 1
- apple
- orange

で実際に読み込むプログラムがこれ ReadYaml.java
import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.List;

import org.ho.yaml.Yaml;

public class ReadYaml {

 public static void main(String[] args) {
  try {
   List array = (ArrayList) Yaml.load(new File(
     "test.yml"));
   System.out.println(array);
   array = (ArrayList) Yaml.load(new File("test2.yml"));
   System.out.println(array);
  } catch (FileNotFoundException e) {
   e.printStackTrace();
  }
 }
}
今回のYamlファイルはリスト構造なので読み込むときもリストで読み込んでます。
でリストの中にMapやまたListが入ってるのかわからないのでObjectのリストになってます。
読み込んだらあとは表示しているだけです。

出力
[hoge, fuga, mofu, [fufu1, fufu2]]
[1, apple, orange]

1日目はただ読み込んだだけで終わりです。
明日はリスト以外の形式も読み込んでみたりと引き続きYamlと弄ることになる予定



なんかシンタックスハイライトが機能してないみたいなんで時間ある時に直しておきます

2012年11月10日土曜日

gitのインストール

去年ぐらいから流行っている印象のgitの導入手順を書いときます
 (流行っているのはgitというかgithubな気がするけどgithubについては今回はふれません)

gitで何ができるのかは「Pro Git」の日本語訳が公開されているのでそちらを参照
http://git-scm.com/book/ja


 gitの導入手順
 ① 「http://git-scm.com/downloads」
アクセスして使ってる端末に合わせてインストーラをダウンロード
(今回はwindowsでインストールします)

②インストーラを起動して画像にしたがってインストール
「Next」をクリック

利用規約に同士して「Next」をクリック


今回はデフォルトの設定で問題ないので「Next」をクリック

今回はGit Bashから利用するので一番上を選択して「Next」をクリック
WindowsのcmdからGitBashを使う場合は2番目を選択でいいはず

改行コードを設定する
今回は一番上を選択し「Next」をクリック
ここまで終わるとインストールが始まる

③インストールが終わったら「git bash」で
「git --version」コマンドでgitのインストールを確認


これでgitのインストールは終了

2012年10月16日火曜日

JavaFXを使ってデジタルフォトフレームもどきを作った時のまとめ3

最近忙しくて更新が遅くなってすみません。

書きたいことは溜まっているのでどこかでまとめて書きたいとは思っています。
XAMPPの設定とかgitの設定とかAndroidのfragmentとか

で今回はJavaFXでアニメーションを付けるとこです。
正直デジタルフォトフレーム作った時に一番めんどくさかったのはここです。

JavaFXでアニメーションをやること自体が始めてだったのでいろいろ戸惑いました、まあそれは以前ブログに書いたのでそっちを見て下さい。
結論だけここに書くと慣れちゃうとすごく楽に書けます。

       
//画像の変更タイムライン
timeline = new Timeline(
  new KeyFrame(
  new Duration(1000),
  new EventHandler() {
  @Override
  public void handle(ActionEvent event) {
    try{                
    //i番目の画像を表示
    //1回で10個ずつしか取れないので10個表示したら次の10個を検索   
    //1個の検索に対して100枚しか画像を取得できないので最初に戻す                                                            
    } catch (IOException e) {
    //ファイルの例外が発生したらそのファイルを飛ばす
      i++;
    }
  }
}));
画像の変更はImageクラスでインスタンス化したのをImageViewインスタンスにセットすればいい。
URL url = new URL(images.get(i - 1));
InputStream in = url.openStream();
Image image = new Image(in);
imageView.setImage(image);
随分遅くなってしまいましたがこれでJavaFXでデジタルフォトフレームと作った時のまとめは終わりです
あとでソースへのリンク貼っときます ソースの行数が多いとなぜかタグが最後に入って無駄な改行が入っちゃうみたいなんで原因探っときます。

2012年9月29日土曜日

JavaFXを使ってデジタルフォトフレームもどきを作った時のまとめ2

JavaでJSON形式のデータを解析する方法

JSONが何だか知らない方は「http://json.org/」を見て下さい

JavaでJSONを扱うために今回は「JSON-java」を利用します
ダウンロードは「https://github.com/douglascrockford/JSON-java」から。
説明は「http://json.org/java/」のサイトにあるようです。

今回使用したのは「JSONArray」「JSONException」「JSONObject」の3つですが、依存関係があるので「JSONString」と「JSONTokener」もダウロードして1つのフォルダにまとめてビルドパス設定を設定する必要があります。

準備はここまでです。

実際の使い方はgetで取得したいデータのキーを指定してデータを取得します。
データが配列の場合はgetJSONArray
普通のデータの場合はgetJSONObject
で大丈夫です。 ソースにするとこんな感じ
 
//json にはJSONデータの文字列が入っている
  try{
    JSONObject json = new JSONObject(json);
    JSONArray jsonArray = json.getJSONArray("items");
    for (int j = 0; j < jsonArray.length(); j++) {
      JSONObject tmp = jsonArray.getJSONObject(j);
      System.out.println(tmp.getString("link"));
    }
  }catch(JSONException e){
     e.printStackTrace();
  }
次回で取得したurlをJavaFXで表示してアニメーションを設定すれば完成です。

2012年9月23日日曜日

JavaFXを使ってデジタルフォトフレームもどきを作った時のまとめ1

使ったもの
・JavaFX2(GUI部分)
・Google Custom Search API (写真の検索)
・JSON-java (JSONの解析)

完成したのはこちら
テキストボックスに検索ワード入力してボタンを押したらCustom Searchで画像を検索してきてその結果の画像を連続で表示していきます。

流れとしては検索した結果がJSON形式で帰ってくるのでそれを解析してURLを取り出して表示しています。

Google Custom Searchの使い方
「https://developers.google.com/custom-search/v1/using_rest」にあるようにJSON形式で結果を返してもらう方法。
 
    private static final String QUERY_URL = "https://www.googleapis.com/customsearch/v1";
    private static final String KEY = "APIキー";//APIKey
    private static final String CX = "Custom SearchのID";//カスタム検索ID
    private static final String PAGE = "ページの数字";//1~101で指定して検索のスタート位置を指定
    private static final String PARA = "&alt=json&searchType=image&q=";//検索オプションの指定(jsonで結果を返す、画像検索を行う、等)
       

    //テキストフィールドに入力した値で検索
    //inputは検索文字列
    String query = QUERY_URL + KEY + CX + PAGE + i + PARA + inputText;
    //検索クエリを実行
    URL url = new URL(query);
    URLConnection connection = url.openConnection();
    BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
カスタムサーチは予め「http://www.google.com/cse/manage/all」で作成し、作成したカスタムサーチを使う。
APIキーは「https://code.google.com/apis/console/」で作成した自分のAPIキーを指定
次回はJSON解析部分について書きます

2012年9月20日木曜日

JavaFXでのアニメーション作成

Bloggerにソースコードを載せる時に利用するシンタックスハイライトを設定しようと思って 「http://goo.gl/IJEs9」を使っていたらなんと言語の欄にJavaFXを見つけたのでさっそくJavaFXのハイライトを試してみようってだけなのでテストも兼ねてます。
JavaFXでアニメーションを自分で設定する時はTimelineクラスを使うと経過秒毎に処理が書けるので簡単にアニメーションが作れます。
とりあえずソースの載せときます。
  
private Timeline timeline;
timeline = new Timeline(
  new KeyFrame(
    new Duration(100),//ミリ秒で指定
      new EventHandler() {
        @Override
        public void handle(ActionEvent event) {/*処理1*/}        
      }
  ),
  new KeyFrame(
    new Duration(200),//ミリ秒で指定
      new EventHandler() {
        @Override
        public void handle(ActionEvent event) {/*処理2*/}        
      }
  )
);
//タイムラインの無限に繰り返す
timeline.setCycleCount(Timeline.INDEFINITE);
timeline.play();//タイムライン開始
timeline.stop();//タイムラインを明示的に終了

使い方は
  
    new Duration(100)

のところでアニメーション開始からの経過秒をミリ秒で指定し、指定秒毎にアニメーションを記述していくだけ。
タイムラインを無限に繰り返す設定にしてると指定したアニメーションが終わったらまた先頭のアニメーションから 実行していってくれます。
このソースの形だとタイムライン開始から100ミリ秒で処理1が200ミリ秒で処理2をやってまた最初に戻ってタイムラインの開始から300ミリ秒の時はまた処理1を実行します。

本当はソースは17行目で終わってるんですがなんか変なタグと無駄な改行がまざっちゃってますね、どうやっても消えないのでとりあえずこのままで。

2012年9月16日日曜日

安全なWebサイトの作り方のまとめ

IPAの「安全なWebサイトの作り方」を読んだのでまとめ
http://www.ipa.go.jp/security/vuln/websecurity.html

SQLインジェクションはプリアドステートメントを使って対策
エラーメッセージをブラウザに表示しない

OSコマンドインジェクション
なるべく使わないで使う場合は引数を全てチェックする

ファイルへのアクセス
ファイル名を指定する時はファイル名だけを取るようにしないと「../../a.txt」のような文字列で想定外のディレクトリのファイルを指定されるのでパスの中からファイル名だけを取得するようにする
ファイル名のチェックを行う

セッションの管理
セッションIDは乱数等から生成して、第三者が予測不可能にする
セッションIDをURLパラメータに格納しない
HTTPSで使うCookieにはsecure属性を指定してHTTPS以外で使えなくする
セッションはログイン後に開始する

クロスサイト・スクリプティング対策
 入力された時じゃなくて出力の時にエスケープ処理をする用にして、出力するものにはすべてエスケープ処理を行う、文字コードの指定は必ず行う
スクリプトタグを動的に作らない
CSSを任意のサイトから取り込まないようにする

CSRF対策
  登録情報等のユーザ情報を変更する時は変更する時にパスワード等の秘密情報を確認する
  変更の直前にパスワードを入力させるか、直前のページで秘密情報を埋め込んで確認ページで確認する

ヘッダの取り扱い
HTTPヘッダ、メールヘッダ共に基本的にはユーザからの入力を使用する時は改行文字を取り除いてから使用する

その他
アクセス制御はしっかりとする
機密情報扱うならパスワードの入力を求める