ページ

2015年2月21日土曜日

ReadyNAS 102 と戯れる 1 - IPアドレス固定化 -

IPアドレス固定


1. 管理者ページを開き、ネットワークタブを選択




2. 設定アイコンをクリックし「設定」を選択


3. IPv4の設定を「固定」にし、IPアドレス、サブネットマスク、ルーターを入力する




4. DNSを設定する
    +をクリックし、DNSサーバーのIPアドレスを入力し設定


※DNSを設定し忘れるとアプリがダウンロードできない等、
障害があるので忘れずに設定


5. 適用をクリックし完了
    適用されない場合は、本体再起動。



2015年2月15日日曜日

広島旅行

人生初?の宮島へ1泊2日で旅行




本土からフェリーで20分くらいで宮島に到着しました。
早速、厳島神社へ。潮が満ちていた為鳥居の近くへは行けませんでした。




鹿が普通にうろちょろしているのでビックリしました。
餌を与えるとやつらは本気出します ( ;´Д`)




揚げもみじとっても美味しゅうございました。

2日目は広島市内を散策。有名なお好み焼き屋さんで昼食。







お好み焼きまじウマでした。


また宮島行きたいな〜^^。

Javaのリフレクションまとめ1

現在Slim3をやってる中で出くわしたリフレクションの数々

ちなみに、reflectionのreflectは反映する、影響する等の意味

1. 継承ループ
Objectクラス以外の継承されたサブクラスから継承元までをループさせるやつ

for (Class<?> c = getClass(); c != Object.class; c = c.getSuperClass();) {
      ・・・ループ処理・・・
}
※getSuperClass()
   Objectクラス、インターフェース、プリミティブ型、voidの場合はnullを返却


2. パラメータ化された基底クラス
例)
  public abstract class SuperClass<T> {
  }

  public class SubClass extends SuperClass<String> {
  }
  上記のクラスでString型を取得したい場合

for (Class<?> c = getClass(); c != Object.class; c = c.getSuperClass();) {
      if (c.getSuperClass == SuperClass.class) {  ※SuperClassを直接継承しているクラスか?
          Type type = c.getGenericSuperClass();
          if (type instanceof ParameterizedType) { ※型パラメータを持つか?
             ※型引数の配列を取得しClassオブジェクトへキャスト
             Type[] arrayType = ((ParameterizedType)type).getActualTypeArguments();
              Class<?> class = Class.class.cast(arrayType[0]);
          }
      }
}

ややこしや〜><
↓参考サイト
http://sourceforge.jp/projects/figer/scm/svn/blobs/27/figer-s2-tiger/trunk/src/main/java/org/seasar/extension/jdbc/service/S2AbstractService.java

http://www.seasar.org/source/browse/s2container/trunk/s2-tiger/src/main/java/org/seasar/framework/util/tiger/GenericUtil.java?view=markup

http://tech.cm55.com/wiki/java/GenericsInfo


↓Class<T>クラスに関して解説しているサイト
http://waman.hatenablog.com/entry/20101007/1286440563

2015年2月14日土曜日

GAEと戯れる 16 - Polymorphic Model -

Slim3のPolymorphic Modelについて

Polymorphic Modelについてお勉強。
簡単に言えば・・・

A extends B
C extends B

のモデルがあった場合、BでqueryするとA, Cがヒットされ
AでqueryするとAだけがヒットされるという便利そうな仕組み。
プロパティが親子で重複するとエラーになる。

試しに作ってみた

・基底クラス
/**
 * 基底モデルクラス
 *
 * @author slowhand
 */
@Model
public abstract class BaseModel implements Serializable {

    /** デフォルトシリアルID */
    private static final long serialVersionUID = 1L;
   
    @Attribute(primaryKey = true)
    private Key key;

    @Attribute(version = true)
    private Long version;

    ・・・以下略・・・
}

・継承したクラス

@Model(schemaVersion = 1)
public class MemberListModel extends BaseModel {

    private static final long serialVersionUID = 1L;

    /** メンバー名 */    private String name;
   
    /** メールアドレス */
    private String mailAdr;

    ・・・以下略・・・
}

こうするとmetaクラスがBaseModelとMemberListModel用の2つ作成される。





それぞれのMetaクラスのコンストラクタで階層を作成している。
・BaseModelMeta





・MemberListModelMeta




参考URL
http://d.hatena.ne.jp/bufferings/20100121/1264093364

簡単な登録・参照ページを作成してみる。
・member_list.jsp
<%@page pageEncoding="UTF-8" isELIgnored="false" session="false"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
<%@taglib prefix="f" uri="http://www.slim3.org/functions"%>

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>メンバーリスト</title>
</head>
<body>
<p>新規登録</p>
<form method="post" action="/settings/memberList">
<table>
<tr><td>名前</td><td><input type="text" ${f:text("name")}></td></tr>
<tr><td>メールアドレス</td><td><input type="text" ${f:text("mail")}></td></tr>
<tr><td></td><td><input type="submit"></td></tr>
</table>
</form>
<hr>
<table border="1">
<c:forEach var="member" items="${members}">
<tr>
<td>${member.key}</td>
<td>${member.name}</td>
<td>${member.mailAdr}</td>
</tr>
</c:forEach>
</table>
</body>
</html>

・MemberListController
public class MemberListController extends BaseController {

    private static final String RETURN_PATH = "member_list.jsp";
   
    private static final String PROPERTY_NAME = "name";
    private static final String PROPERTY_MAILADR = "mail";
   
    private static final String PROPERTY_MEMBERS = "members";
   
    @Override
    public Navigation run() throws Exception {
        if (isPost()) {
            register();
        }
       
        // メンバー一覧の取得
        List<MemberListModel> memberList = Datastore.query(MemberListModel.class).asList();
        request.setAttribute(PROPERTY_MEMBERS, memberList);
        return forward(RETURN_PATH);
    }
   
    /**
     * メンバー新規登録
     */
    private void register() {
        String name = asString(PROPERTY_NAME);
        String mailAdr = asString(PROPERTY_MAILADR);
       
        MemberListModel memberListModel = new MemberListModel();
        memberListModel.setKey(Datastore.allocateId(MemberListModelMeta.get()));
        memberListModel.setName(name);
        memberListModel.setMailAdr(mailAdr);
        // データストアに新規登録
        Datastore.put(memberListModel);
    }
}

・実行結果























・データストアの中身









Entityは基底クラスのBaseModelしか作成されておらず、
フィールドのslim3.classHierarchyListにサブクラスが設定されている。
query時にはこの項目をwhereに追加し検索する。

※idフィールドを作成し、auto incrementにしようとしたが、
   entityのKeyにIDで採番が可能。
   Entity#setKey(Datastore.allocateId(EntityMeta.get()));
参考URL
http://www.casleyconsulting.co.jp/blog-engineer/gae/【入門編】slim3で始める!gaejでwebアプリケーション開-4/

2015年2月7日土曜日

iTunesライブラリをNASに移動

このままではiTunesに入れている楽曲データが肥大化し続けてしまう><
ので折角NASを購入した事だしNASにiTunesライブラリを移動してみる。

現在NAS上のMusicフォルダが割り当てられている事を確認










iTunesを起動し、「環境設定」>「詳細」を選択





















「iTunes Mediaフォルダの場所」をNASのフォルダに変更




















「ライブラリ」>「ライブラリの整理」を選択



















ライブラリの結合を行い今までのiTunes Mediaフォルダの中身をNASへコピー
※iTunes Mediaの中身は残る














2015年2月6日金曜日

HTML5と戯れる 3 - 基礎 -

次の外勤先がWebアプリケーション(Struts)なので、とりあえず全て一から勉強(--;)

ドットインストールを見ながら基本的なHTMLのテンプレートを作成。

index.html

<!DOCTYPE html>
<html lang="ja">
  <head>
    <meta charset="utf-8">
    <title>Title</title>
    <style>
      p { color: red; }
    </style>
  </head>
  <body>
    <!-- comment -->
    <p>Hello, World!</p>
    <h1>h1</h1>
    <h2>h2</h2>
    <h3>h3</h3>
    <h4>h4</h4>
    <h5>h5</h5>
    <h6>h6</h6>
    <hr>
    <p><strong>strong</strong></p>
    <hr>
    <!-- Unordered List -->
    <ul>
    <li>Apple</li>
    <li>Banana</li>
    <li>Pie</li>
    </ul>
    <!-- Ordered List -->
    <ol>
    <li>Apple</li>
    <li>Banana</li>
    <li>Pie</li>
    </ol>
    <hr>
    <!--
      tr: table row
      th: table header
      td: table data
    -->
    <table>
    <thead>
    <tr>
    <th>id</th>
    <th>name</th>
    <th>age</th>
    </tr>
    </thead>
    <tbody>
    <tr>
    <td>1</td>
    <td>AAA</td>
    <td>25</td>
    </tr>
    <tr>
    <td>2</td>
    <td>BBB</td>
    <td>30</td>
    </tr>
    </tbody>
    </table>
  </body>
</html>

実行結果(safari)
























ん〜基礎は大事。

2015年2月2日月曜日

ReadyNas 102 購入!!

色々ストレスが溜まっていたせいか?思わずポチってしまいました。。。
ReadyNas 102 とWDのHDD 2Tを2台。計4万くらい ><;

・開封前




・開封後










































・HDD










































そして実際に動作させてみてハマりましたorz

ずっとディスクが認識されてなかったんですが、当たり前でちゃんとHDDが
刺さってなかった。。ディスクベイの前方をがっちりロックした状態ではめていたら
前方の上部の出っ張りがつっかえていたみたいで、ロックしないまま奥まで
差し込んだら勝手にロックされるみたいですorz

実際やってみないとわからないすな〜(T T)