ページ

2015年2月28日土曜日

GAEと戯れる 18 - スクロールするテーブル -

今回は画面関連を色々・・・


1. スクロール付きのテーブルを作る
     MFCなんかでいうListCtrlみたいなもん?

     ポイントは<table>の中に<table>を作るらしい。
     内側のtableの属性がoverflow: autoを設定してやる。

     例)
    <div id="list_area">
      <table id="tbl_outside">
        <caption>登録お店情報一覧</caption>
        <thead>
          <tr>
            <th width="3%">ID</th>
            <th width="12%">名前</th>
            <th width="15%">住所</th>
            <th width="10%">座標</th>
            <th width="10%">電話番号</th>
            <th width="10%">予約変更可能日</th>
            <th width="5%">前回ステータス</th>
            <th width="5%">前回参加人数</th>
            <th width="5%">前回総支出</th>
            <th width="25%">メモ</th>
          </tr>
        </thead>
        <tfoot>
          <tr>
            <td colspan="10">登録お店情報一覧</td>
          </tr>
        </tfoot>
        <tbody>
          <tr>
            <td colspan="10">
              <div style="height:300px; overflow:auto;">
                <table id="tbl_inside">
                  <c:forEach var="shop" items="${shops}">
                    <tr>
                      <td width="3%">${shop.key.id}</td>
                      <td width="12%">${shop.name}</td>
                      <td width="15%">${shop.address}</td>
                      <td width="10%">${shop.coordinate}</td>
                      <td width="10%">${shop.telephone}</td>
                      <td width="10%">${shop.checkDate}</td>
                      <td width="5%">${shop.lastStatus}</td>
                      <td width="5%">${shop.lastPartakeNum}</td>
                      <td width="5%">${shop.lastPayment}</td>
                      <td width="25%">${shop.memo}</td>
                    </tr>
                  </c:forEach>
                </table>              
              </div>
            </td>
          </tr>
        </tbody>
      </table>

    </div>

イメージ







参考サイト
http://javascript123.seesaa.net/article/103060039.html
関連
http://www12.plala.or.jp/costellazione/css-make/write.html
http://yume.hacca.jp/koiki/css/table/table.htm


2. 戻るボタンを作る
    よくある前のページに戻るボタンを作ってみる。マウスをかざしたら絵が変わる。

    戻る処理は
    onclick=“history.back(); return false;”

    マウスをかざしたら絵が変わるやつはjQueryを使用すると便利な事に!!
/**
 * 画像切り替え
 */
$(function(){
     $('a img').hover(function(){
        $(this).attr('src', $(this).attr('src').replace('_off', '_on'));
          }, function(){
             if (!$(this).hasClass('currentPage')) {
             $(this).attr('src', $(this).attr('src').replace('_on', '_off'));
        }
   });

});

自動で画像ファイルのon/off文字列を変更してくれる。便利〜。

例)







↓マウスをかざすと







いい感じ^^

参考サイト
http://www.tohoho-web.com/how2/link.htm
http://www.red.oit-net.jp/tatsuya/java/image3.htm
http://neet-navi.info/wordpress/431/








2015年2月23日月曜日

AndroidStudioと戯れる 5 - EclipseからAndroidStudioへPrjインポート -

Android Studioに翻弄されている感じもしますが、今回はEclipseで作成した
プロジェクトをAndroid Studioにインポート

以下使用するAndroid Studioバージョン



















早速インポートしてみる
「File」>「Import Project」


















いきなりエラーがっ!!
There are unrecoverable errors which must be corrected first.
とあります。よくよく見るとproject.propertiesに書かれている依存ライブラリが見つからないとの事。

・project.properties
target=android-19
android.library.reference.1=..\\..\\..\\..\\..\\..\\01)Project\\android\\FdxCommonLibrary
android.library.reference.2=../workspace/google-play-services_lib

パスがおかしなことになっていましたorz
パスを修正し再度インポート!!














無事インポート完了^^

ただ、文字化けがっorz
・文字化けを解消するメモ
文字ばけファイルを一度正しいエンコードで読み直す
























右下のエンコード選択で今回の場合「Windows31J」を選択し「Reload」
※ここで「Convert」を選択するとおかしな事になる
























文字ばけされずに表示されている事を確認
























次に変換したいエンコードを選択し「Convert」





















無事UTF-8で正しく変換されました^^

















2015年2月22日日曜日

GAEと戯れる 17 - Validatorsについて -

Validatorsについて

Slim3にはValidatorsクラスがあり、チェックを行いたい項目をVaidatorsクラスに
セットし、チェックを行う。

例) コントローラ内で、isPost() == trueの場合に名前入力チェックを行う
        // 入力チェック
        Validators v = new Validators(request);
        v.add(PROPERTY_NAME, v.required());
        if (!v.validate()) {
            // チェックエラー
            ※追記
            Errors err = v.getErrors();
            //errors.put("message", err.get(PROPERTY_NAME));
            わざわざerrors.putしなくても、Validatorsクラスでは内部で
            errorsを持っているのでjspでそっちを表示できる
            return;
        }


・v.addメソッドでチェック対象項目と、チェックの種類を指定できる。
・v.validateメソッドで指定された内容に従ってチェックを行う
・v.getErrorsメソッドでエラーメッセージを取得
 ※エラーメッセージはapplication_XX.propertiesに
      validator.required={0} XXXXXXXXXXX
      という形で設定されている。

エラーメッセージの{0}にはチェック対象項目が入るが、上記の例では
PROPERTY_NAME = "name";
で定義している為、{0}にはnameが入る。
{0}に入る値を変更したい場合は、application_XX.propertiesに以下の様に定義
       label.name=名前

validator.required={0}は必須です。
validator.byteType={0}はバイトでなければいけません。
validator.shortType={0}は短整数でなければいけません。
validator.integerType={0}は整数でなければいけません。
validator.longType={0}は長整数でなければいけません。
validator.floatType={0}は単精度実数でなければいけません。
validator.doubleType={0}は倍精度実数でなければいけません。
validator.numberType={0}は数値({1})ではありません。
validator.dateType={0}は日付({1})ではありません。
validator.minlength={0}の長さが最小値({1})未満です。
validator.maxlength={0}の長さが最大値({1})を超えています。
validator.range={0}は{1}と{2}の間でなければいけません。
validator.regexp={0}が不正です。

label.name=名前


JSP側)
        <div id="err">
          ${errors.message}
        </div>

※errorsは継承元クラスで定義されているオブジェクト

表示例)














ReadyNAS 102 と戯れる 3 - apache2が死亡!! -

apache2が起動しない!!


以前JenkinsをReadyNASに入れてアンインストールしたら起動しなくなっていましたorz

以下sshで接続しコマンドラインから起動
root@ReadyJUNAS:/etc/init.d# apachectl restart
apache2: Syntax error on line 268 of /etc/apache2/apache2.conf: Could not open configuration file /etc/apache2/sites-enabled/090-jenkins.conf: No such file or directory
Action 'restart' failed.
The Apache error log may have more information.

エラーの原因は
/etc/apache2/sites-enabled/090-jenkins.confが無いと言われてます。
実際に見てみると・・・

root@ReadyJUNAS:/etc/apache2/sites-enabled# ls -l
total 0
lrwxrwxrwx 1 root root 36 Feb 18 22:42 000-fv-http -> /etc/apache2/sites-available/fv-http
lrwxrwxrwx 1 root root 27 Feb  3 01:00 000-fv-https -> ../sites-available/fv-https
lrwxrwxrwx 1 root root 24 Feb 21 11:05 090-dokuwiki.conf -> /apps/dokuwiki/http.conf
lrwxrwxrwx 1 root root 23 Feb 21 11:05 090-jenkins.conf -> /apps/jenkins/http.conf
lrwxrwxrwx 1 root root 21 Feb 21 11:05 090-phpr6.conf -> /apps/phpr6/http.conf

シンボリックリンクが置かれている!!
こればドイヒーっすね。アンインストールする時はこれも消せっちゅうねん><

削除して再起動したら無事起動できました。
root@ReadyJUNAS:/etc/apache2/sites-enabled# rm 090-jenkins.conf
root@ReadyJUNAS:/etc/apache2/sites-enabled# ls -l
total 0
lrwxrwxrwx 1 root root 36 Feb 18 22:42 000-fv-http -> /etc/apache2/sites-available/fv-http
lrwxrwxrwx 1 root root 27 Feb  3 01:00 000-fv-https -> ../sites-available/fv-https
lrwxrwxrwx 1 root root 24 Feb 21 11:05 090-dokuwiki.conf -> /apps/dokuwiki/http.conf
lrwxrwxrwx 1 root root 21 Feb 21 11:05 090-phpr6.conf -> /apps/phpr6/http.conf
root@ReadyJUNAS:/etc/apache2/sites-enabled# apachectl restart
[Sun Feb 22 06:22:22 2015] [warn] Useless use of AllowOverride in line 4 of /etc/frontview/apache/apps-https.conf.
[Sun Feb 22 06:22:22 2015] [warn] Useless use of AllowOverride in line 12 of /etc/frontview/apache/fv-admin.conf.
[Sun Feb 22 06:22:22 2015] [warn] Useless use of AllowOverride in line 25 of /etc/frontview/apache/fv-admin.conf.
[Sun Feb 22 06:22:22 2015] [warn] Useless use of AllowOverride in line 4 of /etc/frontview/apache/apps-https.conf.
apache2: Could not reliably determine the server's fully qualified domain name, using 192.168.0.20 for ServerName
httpd not running, trying to start


が、今度はなぜか画像が表示されない!!


調べたら画像ファイルもごっそりアンインストールされているorz


※apache2のDocument Rootが設定されている場所は
   /etc/apache2/sites-available/fv-https内で/etc/frontview/apache/*.confがincludeされている

root@ReadyJUNAS:/etc/apache2/sites-available# cd /etc/frontview/apache/
root@ReadyJUNAS:/etc/frontview/apache# ls
Admin_Auth.conf  defaults.conf     http-share-redirect.conf  ssl.conf
apache2.pem fv-admin.conf     lan-try.conf       ssleay.cnf
apps-https.conf  genie-proxy.conf    READYDROP.conf       ssleay.cnf.in
Auth.conf http-redirect.conf  Shares.conf       WebShare.conf
root@ReadyJUNAS:/etc/frontview/apache# grep DocumentRoot *
fv-admin.conf:DocumentRoot /frontview/dashboard

ここにあるはずの/apps/logo/*.pngが無いorz
しかたないので、リソースを地道にコピー
コピー元は
root@ReadyJUNAS:/frontview/dashboard/apps/logo# ls /apps/.freeapps/
ajaxplorer    drupal mediawiki     phpsysinfo     sickbeardr6
ajaxplorer4   dvblink-tv-server  memeoc1       piwigo     smbplus
amuler6       gateone monsta        plexmediaserver     subsonic
asterisk-app  glpi moodler6      postgresql-readynas  subversion-ntgr
avplus       iredmail-app mysqlr6       prestashop     sugarcrm
baikal       istat novius        pydio     surveillance
barracuda     jenkins nzbget-app    pyload     tftpr6
bindr6       joomla openerp       pythonr6     tinyrss
btsync       koken oscommerce    qbittorrentr6     transmissionr6
bzeeetr6      lbcrss osticket      radius-app     tvmobilir6
cacti       ldap-app owncloud      recollweb     virtualhere
couchpotato2  limesurvey photos2       rsyslog-app     vpnserver
ddclientr6    linux-dash phpbb       sabnzbd     wordpress
dnsserver     lms phpmyadminr6  selfoss
dokuwiki      loganalyzerr6 phpr6       sickbeard
root@ReadyJUNAS:/frontview/dashboard/apps/logo# 

各アプリ配下にlogo.pngが置いてある。

cp /apps/.freeapps/ajaxplorer/logo.png ./ajaxplorer.png
cp /apps/.freeapps/ajaxplorer4/logo.png ./ajaxplorer4.png
cp /apps/.freeapps/amuler6/logo.png ./amuler6.png
cp /apps/.freeapps/asterisk-app/logo.png ./asterisk-app.png
cp /apps/.freeapps/avplus/logo.png ./avplus.png
cp /apps/.freeapps/baikal/logo.png ./baikal.png
cp /apps/.freeapps/barracuda/logo.png ./barracuda.png
cp /apps/.freeapps/bindr6/logo.png ./bindr6.png
cp /apps/.freeapps/btsync/logo.png ./btsync.png
cp /apps/.freeapps/bzeeetr6/logo.png ./bzeeetr6.png
cp /apps/.freeapps/cacti/logo.png ./cacti.png
cp /apps/.freeapps/couchpotato2/logo.png ./couchpotato2.png
cp /apps/.freeapps/ddclientr6/logo.png ./ddclientr6.png
cp /apps/.freeapps/dnsserver/logo.png ./dnsserver.png
cp /apps/.freeapps/dokuwiki/logo.png ./dokuwiki.png
cp /apps/.freeapps/drupal/logo.png ./drupal.png
cp /apps/.freeapps/dvblink-tv-server/logo.png ./dvblink-tv-server.png
cp /apps/.freeapps/gateone/logo.png ./gateone.png
cp /apps/.freeapps/glpi/logo.png ./glpi.png
cp /apps/.freeapps/iredmail-app/logo.png ./iredmail-app.png
cp /apps/.freeapps/istat/logo.png ./istat.png
cp /apps/.freeapps/jenkins/logo.png ./jenkins.png
cp /apps/.freeapps/joomla/logo.png ./joomla.png
cp /apps/.freeapps/koken/logo.png ./koken.png
cp /apps/.freeapps/lbcrss/logo.png ./lbcrss.png
cp /apps/.freeapps/ldap-app/logo.png ./ldap-app.png
cp /apps/.freeapps/limesurvey/logo.png ./limesurvey.png
cp /apps/.freeapps/linux-dash/logo.png ./linux-dash.png
cp /apps/.freeapps/lms/logo.png ./lms.png
cp /apps/.freeapps/loganalyzerr6/logo.png ./loganalyzerr6.png
cp /apps/.freeapps/mediawiki/logo.png ./mediawiki.png
cp /apps/.freeapps/memeoc1/logo.png ./memeoc1.png
cp /apps/.freeapps/monsta/logo.png ./monsta.png
cp /apps/.freeapps/moodler6/logo.png ./moodler6.png
cp /apps/.freeapps/mysqlr6/logo.png ./mysqlr6.png
cp /apps/.freeapps/novius/logo.png ./novius.png
cp /apps/.freeapps/nzbget-app/logo.png ./nzbget-app.png
cp /apps/.freeapps/openerp/logo.png ./openerp.png
cp /apps/.freeapps/oscommerce/logo.png ./oscommerce.png
cp /apps/.freeapps/osticket/logo.png ./osticket.png
cp /apps/.freeapps/owncloud/logo.png ./owncloud.png
cp /apps/.freeapps/photos2/logo.png ./photos2.png
cp /apps/.freeapps/phpbb/logo.png ./phpbb.png
cp /apps/.freeapps/phpmyadminr6/logo.png ./phpmyadminr6.png
cp /apps/.freeapps/phpr6/logo.png ./phpr6.png
cp /apps/.freeapps/phpsysinfo/logo.png ./phpsysinfo.png
cp /apps/.freeapps/piwigo/logo.png ./piwigo.png
cp /apps/.freeapps/plexmediaserver/logo.png ./plexmediaserver.png
cp /apps/.freeapps/postgresql-readynas/logo.png ./postgresql-readynas.png
cp /apps/.freeapps/prestashop/logo.png ./prestashop.png
cp /apps/.freeapps/pydio/logo.png ./pydio.png
cp /apps/.freeapps/pyload/logo.png ./pyload.png
cp /apps/.freeapps/pythonr6/logo.png ./pythonr6.png
cp /apps/.freeapps/qbittorrentr6/logo.png ./qbittorrentr6.png
cp /apps/.freeapps/radius-app/logo.png ./radius-app.png
cp /apps/.freeapps/recollweb/logo.png ./recollweb.png
cp /apps/.freeapps/rsyslog-app/logo.png ./rsyslog-app.png
cp /apps/.freeapps/sabnzbd/logo.png ./sabnzbd.png
cp /apps/.freeapps/selfoss/logo.png ./selfoss.png
cp /apps/.freeapps/sickbeard/logo.png ./sickbeard.png
cp /apps/.freeapps/sickbeardr6/logo.png ./sickbeardr6.png
cp /apps/.freeapps/smbplus/logo.png ./smbplus.png
cp /apps/.freeapps/subsonic/logo.png ./subsonic.png
cp /apps/.freeapps/subversion-ntgr/logo.png ./subversion-ntgr.png
cp /apps/.freeapps/sugarcrm/logo.png ./sugarcrm.png
cp /apps/.freeapps/surveillance/logo.png ./surveillance.png
cp /apps/.freeapps/tftpr6/logo.png ./tftpr6.png
cp /apps/.freeapps/tinyrss/logo.png ./tinyrss.png
cp /apps/.freeapps/transmissionr6/logo.png ./transmissionr6.png
cp /apps/.freeapps/tvmobilir6/logo.png ./tvmobilir6.png
cp /apps/.freeapps/virtualhere/logo.png ./virtualhere.png
cp /apps/.freeapps/vpnserver/logo.png ./vpnserver.png
cp /apps/.freeapps/wordpress/logo.png ./wordpress.png

めんどくせーorz
これで一応復活できました。


なんて日だ!!

2015年2月21日土曜日

ReadyNAS 102 と戯れる 2 - SSH接続 -

SSH接続してみる

1. SSH接続の有効化
    管理者ページから、「システム」> 「設定」を開きSSHを有効にする








2. ターミナルから接続
     ssh root@ReadyNASのIPアドレス
     ※パスワードは管理者ページログイン時のパスワード
Welcome to ReadyNASOS 6.2.2

Last login: Wed Feb 18 22:47:12 2015 from junasa-pc


MySQLを触る

以下操作ログ
root@ReadyJUNAS:~# mysql -u root
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 37
Server version: 5.5.41-0+wheezy1 (Debian)

Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> select user, host from mysql.user;
+------------------+------------+
| user             | host       |
+------------------+------------+
| root             | 127.0.0.1  |
| root             | ::1        |
| debian-sys-maint | localhost  |
| root             | localhost  |
| root             | readyjunas |
+------------------+------------+
5 rows in set (0.06 sec)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
+--------------------+
3 rows in set (0.01 sec)

mysql> use mysql
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> show tables;
+---------------------------+
| Tables_in_mysql           |
+---------------------------+
| columns_priv              |
| db                        |
| event                     |
| func                      |
| general_log               |
| help_category             |
| help_keyword              |
| help_relation             |
| help_topic                |
| host                      |
| ndb_binlog_index          |
| plugin                    |
| proc                      |
| procs_priv                |
| proxies_priv              |
| servers                   |
| slow_log                  |
| tables_priv               |
| time_zone                 |
| time_zone_leap_second     |
| time_zone_name            |
| time_zone_transition      |
| time_zone_transition_type |
| user                      |
+---------------------------+
24 rows in set (0.00 sec)

mysql> create database work character set utf8;
Query OK, 1 row affected (0.06 sec)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| work               |
+--------------------+
4 rows in set (0.00 sec)

mysql> grant all privileges on *.* sanji@localhost identified by 'sanji' with grant option;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'sanji@localhost identified by 'sanji' with grant option' at line 1
mysql> grant all privileges on *.* to sanji@localhost identified by 'sanji' with grant option;
Query OK, 0 rows affected (0.04 sec)

mysql> select user, host from mysql.user;
+------------------+------------+
| user             | host       |
+------------------+------------+
| root             | 127.0.0.1  |
| root             | ::1        |
| debian-sys-maint | localhost  |
| root             | localhost  |
| sanji            | localhost  |
| root             | readyjunas |
+------------------+------------+
6 rows in set (0.00 sec)

mysql> grant all privileges on *.* to sanji@"%" identified by 'sanji' with grant option;
Query OK, 0 rows affected (0.00 sec)

mysql> select user, host from mysql.user;
+------------------+------------+
| user             | host       |
+------------------+------------+
| sanji            | %          |
| root             | 127.0.0.1  |
| root             | ::1        |
| debian-sys-maint | localhost  |
| root             | localhost  |
| sanji            | localhost  |
| root             | readyjunas |
+------------------+------------+
7 rows in set (0.00 sec)

mysql> show variables like 'port';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| port          | 3306  |
+---------------+-------+
1 row in set (0.00 sec)

mysql> exit
Bye

データベース「work」とユーザ「sanji」を作成し、sanjiを外部から接続できるように設定

iptablesの設定
root@ReadyJUNAS:~# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
LeafNetsIN  all  --  anywhere             anywhere            

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Chain LeafNetsIN (1 references)
target     prot opt source               destination         
root@ReadyJUNAS:~# iptables -A INPUT -p tcp --dport 3306 -j ACCEPT
root@ReadyJUNAS:~# iptables -A INPUT -p tcp --sport 3306 -j ACCEPT
root@ReadyJUNAS:~# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
LeafNetsIN  all  --  anywhere             anywhere            
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:mysql
ACCEPT     tcp  --  anywhere             anywhere             tcp spt:mysql

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Chain LeafNetsIN (1 references)
target     prot opt source               destination   

これで外部から接続できるかと思いきや・・・できないorz
また次回がんばります。。

※追記!!
/etc/mysql/my.cnfを修正する事で接続可能になりました^^

↓以下参考
http://d.hatena.ne.jp/uriyuri/20081024/1224798772

クライアントソフトはSequel Proを使用。

















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)
























ん〜基礎は大事。