2014年12月22日月曜日

JavaとPHRでHMAC256→Base64の結果を合わせる

■Java
  
public static String getHmac256Base64() throws Exception {

        String signatureKey = "1ABCDEF3HIJKL2MNOP5RS"; // 暗号化キー
        String target = "targetString";            // 対象文字列

        // 秘密鍵の作成
        SecretKey secretKey = new SecretKeySpec(signatureKey.getBytes("UTF-8"),"HmacSHA256");

        // hmac256
        Mac mac = Mac.getInstance("HmacSHA256");
        mac.init(secretKey);
        mac.update(target.getBytes("UTF-8"));
        byte[] encData = mac.doFinal();

        // PHPの形式に合わせる
        StringBuffer stringBuffer = new StringBuffer();
        for (byte b : encData) {
            stringBuffer.append(String.format("%02x", b));
        }
        String hmac256String = stringBuffer.toString();

        // base64エンコード
        byte[] encBase64 = Base64.encodeBase64(hmac256String.getBytes("UTF-8"));

        return new String(encBase64);
    }

■PHP
<?php
echo base64_encode( hash_hmac('sha256', 'targetString', '1ABCDEF3HIJKL2MNOP5RS',false ));
?>





2014年9月8日月曜日

iPhoneアプリ開発(XCode5) 〜 画面遷移(UIModalTransitionStyleFlipHorizontal)

1.遷移イベントとなるボタンを配置します









2.追加したボタンのイベントをxibに対応するviewController.hにアクションを追加します

3.viewController.mに遷移処理を追加します





 ①遷移先のビューを宣言します。
 ②宣言したビューの遷移モードを指定します。
  bmFilipsViewController.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
 ③宣言したビューに遷移します。


2014年7月10日木曜日

【Java】 コンストラクタのprivate宣言

クラス Hogeが次のように定義されている場合

Class Hoge {
  
    String str1;
    String strOption;

    private Hoge(){                        // private宣言★
        // 初期化
        str1 = "初期化します。";
    }

    public Hoge(String str){
       
        this();  

        // オプションの初期化
        strOption = str;
    }

}

コンストラクタHoge(引数なし)がprivate宣言されているため、Hogeクラス外部から
    Hoge hoge1 = new Hoge();
のようにインスタンス作成を行うことができなくなる。
このことを利用して、インスタンス作成時に引数を強制的に渡すようにすることができる。
    Hoge hoge2 = new Hoge("引数");

【Java】 コンストラクタ内で別のコンストラクタを呼び出す

クラス Hogeが次のように定義されている場合

Class Hoge {
  
    String str1;
    String strOption;

    public Hoge(){
        // 初期化
        str1 = "初期化します。";
    }

    public Hoge(String str){
       
        this(); // 引数なしコンストラクタを呼び出す ★ 

        // オプションの初期化
        strOption = str;
    }

}

引数なしのコンストラクタは this(); 呼び出すことができる。
なので、引数なしのコンストラクタで最低限の初期化処理を行い、その他の引数ありの
コンストラクタでは、オプションの設定 などを行うこともできる。

【Eclipse4.3】Tomcatプロジェクトのワークスペースを、他のマシンにコピーしたときの設定

Tomcatプロジェクトをまるっとコピーして、別PCのEclipseで開いたところコンパイルエラーに。。。

はて?と思いエラーが起きている場所を確認すると、どうやらJSPやサーブレット特有の

コードがエラーになっている。

Eclipseで対象のプロジェクトを選択 → 「右クリック」 → 「プロパティ」

出てきたプロパティ画面の左メニューから「Tomcat」を選択し、右側に表示された

Tomcatメニューの「全般」タブの「Tomcatプロジェクト」にチェックが付いていない!

ここにチェックをつけたところ、Tomcatプロジェクトと認識されました。



2014年4月29日火曜日

eclipseの内部ブラウザでJavaScriptの修正が反映されない時のチェックポイント

久しぶりに、eclipseを使用して開発を行ったのですが、JavaScriptの修正が反映されない。

クリーン・ビルドをしても変化なし。何故。。。

と、少々悩みましたが原因は

eclipseの内部ブラウザとして、指定しているブラウザ(IEなど)に

キャッシュがたまっているため、元のブラウザの方で

キャッシュをクリアする必要がありました!

ん〜初歩的すぎる(^^;

2014年4月23日水曜日

Tomcat6でweb.xmlが自動で削除される?

Tomcatの設定を行っている際に、不思議な事象に遭遇。

web.xmlが自然に消えることがありました。

そうか、web.xmlは使用していると消耗して消失するんだ。
ん〜データも劣化するんだなぁ、どのくらいアクセスすると劣化して消失するんだろう。
ちょっと試してみようか。。。
って、そんな訳ないです!w

そもそも劣化ってなに?
って感じですが、原因は別にありました。(当然ですねw)

どうやら、Tomcatルート/conf/Catalina/localhost 配下にある
各コンテキストごとの設定ファイルを削除すると
 ・コンテキスト名.xml
連鎖的に、コンテキスト名/WEB-INF 配下にある
 ・web.xml 
が削除されるみたいです。

逆に、web.xmlを削除しても、コンテキスト名.xml は削除されませんでした。
もし、コンテキスト名.xmlを削除する場合は、事前にweb.xmlのバックアップを
作成していた方が安全ですね。


2014年4月15日火曜日

【EC2】CentOSのTomcatに接続(8080ポート)

<環境>
CentOS6.4(64bit)
Tomcat6

CentOSのTomcatに接続したところ、ネコさんのページではなく
エラーページが表示されました。

EC2インスタンスのセキュリティグループには、8080ポートを開けるように
設定はしているのに何故?
もしかして、Tomcatの設定か何かが足りなかったかな?
と、手順を確認しても不足はなさそう。
ググってみると、OSのファイアウォールで制限されていることがあるとの
記載を発見。
早速、接続端末のファイアウォールを一時的に無効にし、いざ接続!
できません!!笑
と、ここで間違いに気がつきました。
接続端末のファイアウォールではなく、もしかしてCentOSのファイアウォールの設定が
必要ではないのか?

sudo iptables -L

にて設定を確認したところ、8080ポートが開いていません。。。

# ファイアウォールの8080ポートを開放
iptables -A INPUT -p tcp --dport 8080 -j ACCEPT

#設定を保存
/etc/rc.d/init.d/iptables save

#ファイアウォール起動
/etc/rc.d/init.d/iptables start

と、して再び8080ポートにアクセスしたところ、ネコさんの画面が表示されました。

今回の反省点としては
EC2のセキュリティグループのポート開放と、OSのファイアウォールのポート開放は
別々の設定になっているということです。
ポート開放だけ意識すれば、2つのファイアウォールの各ポートを開放する
必要があるということですね。
ん〜勉強になりました。

2014年4月13日日曜日

【JDeveloper】Oracle11gとのDB接続

JDeveloper10にてOracle11gとの接続ができない事象が発生。

正しくは接続ナビゲータのテストは成功しているのですが
アプリケーション実行時に接続が失敗。
何回か試しましたが、それでも接続が失敗。。。

Oracle Enterprise Managerで接続先のユーザを確認したところ
ユーザのステータスがLocked(Timed)になっていました。

ということは、接続ナビゲータで指定したユーザにはアクセスしているけど
パスワードが不正でロックがかかった?
でも、接続ナビゲータでは接続テストが成功しているので
パスワードは正しいものを入れているハズ・・・。
と、なんだかんだで2時間ほどロス。

原因としては、Oracle11gからデフォルトで有効になっている
パスワード文字の大小文字区別のせいで接続ができなくなっていました。

ALTER SYSTEM SET SEC_CASE_SENSITIVE_LOGON = FALSE

を実行し、文字の大小区別を行わないようにしたところ、アプリケーション実行時にも
DB接続を行えるようになりました!

ただ、気になるのは接続ナビゲータの接続テストと、アプリケーション実行時の
DB接続でパスワードとして渡している文字列に相違があることです。
ん〜アプリケーション実行時には自動的に大文字もしくは小文字などに変換されている
のだろうか。。。
ん〜ちょいと検証が必要ですね。


2014年3月30日日曜日

Amazon WorkSpacesを使用してみて

つい先日(3月27日)より、一般公開されたAmazon WorkSpacesを使用してみました。
オレゴンリージョンを使用しましたが、ネットワークの遅延はあまり感じられず
お、これはいいのでは!!と思いましたが、思わぬ落とし穴が・・・
というより、自分が不勉強だったわけですが。

<落とし穴?>
 1 OSの言語設定が英語(変更可能)
    利用開始時の言語が英語なので、日本語環境にするには
   言語の設定を行う必要があります。

 2 キーボードのキー配置を日本用に変更できない
    自分にとっては、この問題が大きいです。
    デバイスドライバの変更を行いましたが効果がありませんでした。
    ローマ字入力を行うことはできるのですが、キー配置が変わらないため
    ある記号を入力しようとしても、別の記号が入力されたりします。。。
    ※どなたかキー配置を日本語に変える方法をご存知でしたら
     教えていただきたいです。

東京リージョンでサービスが開始されれば、解決されると思うので今後に期待です。

なお、登録・言語の設定は、下記のサイトを参考に行いました。
Amazon WorkSpacesがPublic Previewになった!のでやってみた!

Windows Server 2008 R2 Service Pack 1 複数言語ユーザー インターフェイス言語パック


2014年2月16日日曜日

Oracle11gのダンプをOracle10g で取り込む方法

Oracle11g で作成したダンプを、Oracle10gでインポートしたところエラーに。
・・・やっぱりね。

ただ、どうしても諦められない。。。
なぜなら、取り込めないと環境構築が完了しない = 帰れない から(;;)
と、少々調べてみたところ、どうやらOracle10.2 のバージョンであれば
ダンプをインポートできるもよう。

 Oracle11g のデータをエクスポート
1.ディレクトリオブジェクトを作成(エクスポート出力先を設定)
 sqlplusでコマンドを実行します。
 CREATE DIRECTORY ディレクトリオブジェクト名 as パス
 例)CREATE DIRECTORY ExpDmpPath as 'D:¥hoge'

2.データをエクスポートします。
 注)sqlplusで実行するとエラーになります。コマンドプロンプトで実行してください。
 expdp ユーザ名/パスワード@識別子 
    directory=ディレクトリオブジェクト名 
    dumpfile=出力ファイル名.dmp  
    version=10.2 
    schemas=エクスポート対象スキーマ
 ※全てのスキーマをエクスポート対象にする場合は、schemasは不要です。

○ Oracle10g にデータをインポート
3.ディレクトリオブジェクトを作成(インポートファイル読込み元を設定)
 ※エクスポートの1の手順と同様です。

4.データをインポートします。
 注)sqlplusで実行するとエラーになります。コマンドプロンプトで実行してください。
 impdp ユーザ名/パスワード@識別子 
    dumpfile=ディレクトリオブジェクト名:ダンプファイル名.DMP 
    REMAP_SCHEMA=エクスポートのスキーマ名:インポート先のスキーマ名
 ※エクスポートで全てのスキーマを対象にした場合は、REMAP_SCHEMAは不要です。

上記の手順1 〜 4 を行うことで、エラーが発生することなくデータをインポートすることができました!

LPIC レベル1に合格しました!

Linuxはほとんど使ったことがないため、基本知識の習得がてら
LPIC レベル1を受験しました。

仕事の合間をぬって、勉強したので取得まで3ヶ月かかってしまいました(^^;
学生だと、大体1ヶ月で取得できるのではないのでしょうか。
117−101:2週間、117−102:2週間 という感じで。

さて、今回は下記の参考書・問題集を使用しました。
参考書:Linux教科書 LPICレベル1 第5版
問題集:徹底攻略 LPI問題集 Level1 [Version 3.5]対応

参考書を2週して、問題集は9.5割程度解けるようにしてから
試験にのぞみ、合格することができました。
※正答率は、どちらも75%程度でした。

Linuxの事前知識がほとんどない僕としては、2つの受験科目のうち
117ー101の方が覚えることが多く、難しかったです。
117ー102は、DBやNW分野の出題もあるため、事前知識がある分
楽に取得することができました。

今後、仮想サーバを構築するので今回覚えた知識は役立てられそうです。
なお、合格書は2週間ほどで届きました。