プログラマとSEのあいだ

2016-07-23

[]Spring Dataを使って、自動的監査証跡を保存する

業務アプリケーションを作っていると、監査証跡ということで、作成者作成日時、更新者、更新日時を保存するということがあると思いますSpring Dataのアノテーションを使うと、自動でセットしてくれるので、アプリケーションで決まりきったコードを書かなくて済むということみたいです。


Task.javaモデルクラス

package sample.model;

import org.springframework.data.annotation.CreatedBy;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedBy;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;

import javax.persistence.*;
import java.util.Date;

@Entity
@EntityListeners(value = AuditingEntityListener.class)
public class Task {

    @Id
    @GeneratedValue
    private Long id;

    private String taskName;

    @CreatedBy
    private String createdBy;

    @Temporal(TemporalType.TIMESTAMP)
    @CreatedDate
    private Date createdDate;

    @LastModifiedBy
    private String modifiedBy;

    @Temporal(TemporalType.TIMESTAMP)
    @LastModifiedDate
    private Date modifiedDate;

    public Task() {
    }

    @Override
    public String toString() {
        return "Task{" +
                "id=" + getId() +
                ", taskName='" + getTaskName() + '\'' +
                ", createdBy='" + getCreatedBy() + '\'' +
                ", createdDate=" + getCreatedDate() +
                ", modifiedBy='" + getModifiedBy() + '\'' +
                ", modifiedDate=" + getModifiedDate() +
                '}';
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getTaskName() {
        return taskName;
    }

    public void setTaskName(String taskName) {
        this.taskName = taskName;
    }

    public String getCreatedBy() {
        return createdBy;
    }

    public void setCreatedBy(String createdBy) {
        this.createdBy = createdBy;
    }

    public Date getCreatedDate() {
        return createdDate;
    }

    public void setCreatedDate(Date createdDate) {
        this.createdDate = createdDate;
    }

    public String getModifiedBy() {
        return modifiedBy;
    }

    public void setModifiedBy(String modifiedBy) {
        this.modifiedBy = modifiedBy;
    }

    public Date getModifiedDate() {
        return modifiedDate;
    }

    public void setModifiedDate(Date modifiedDate) {
        this.modifiedDate = modifiedDate;
    }
}

StartupRunner.java(呼び側)

package sample;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import sample.jpa.TaskRepository;
import sample.model.Task;

public class StartupRunner implements CommandLineRunner {
    protected final Log logger = LogFactory.getLog(getClass());

    @Autowired
    private TaskRepository taskRepository;

    @Override
    public void run(String... args) throws Exception {
        // Generate a new record.
        Task task = new Task();
        task.setTaskName("task1");
        Task savedTask = taskRepository.save(task);
        System.out.println(savedTask);

        Thread.sleep(1000);

        // Update the record after 1sec.
        savedTask.setTaskName("task2");
        Task savedTask2 = taskRepository.save(savedTask);
        System.out.println(savedTask2);
    }
}

AuditingConfig(監査証跡の設定クラス

package sample.jpa;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.domain.AuditorAware;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;

@EnableJpaAuditing
@Configuration
public class AuditingConfig {
    @Bean
    public AuditorAware<String> createAuditorProvider() {
        return new SecurityAuditor();
    }

    @Bean
    public AuditingEntityListener createAuditingListener() {
        return new AuditingEntityListener();
    }

    public static class SecurityAuditor implements AuditorAware<String> {
        @Override
        public String getCurrentAuditor() {
            return "taka2";
        }
    }
}

実行結果(抜粋

Task{id=1, taskName='task1', createdBy='taka2', createdDate=Sat Jul 23 23:38:44 JST 2016, modifiedBy='taka2', modifiedDate=Sat Jul 23 23:38:44 JST 2016}
Task{id=1, taskName='task2', createdBy='taka2', createdDate=Sat Jul 23 23:38:44 JST 2016, modifiedBy='taka2', modifiedDate=Sat Jul 23 23:38:45 JST 2016}

呼び側ではtaskNameしかセットしていませんが、createdBy/createdDate/modifiedBy/modifiedDateの各フィールドがセットされていますね。サンプルなので、ユーザは固定の文字列返してますが、webアプリケーションなら、ログインユーザを返すところでしょうね。

フルソース

https://github.com/taka2/spring-data-jpa-sample

2016-07-11

[]SHURE カナル型イヤホン SE112m+購入

前使ってたイヤホンが断線か何かで片方聞こえなくなってしまったので、新たに購入。

つなぎで使ってたEarPodsのリモコンが便利で、

ていう条件でAmazonを探し、一番売れ筋のものを選んでみました。

装着感

大中小のイヤーチップ付属していますが、自分にはデフォルトで装着されている中のものが最もフィットしました。

音質

若干高音が強くシャリシャリしてる感じがしますが、エイジングということもあるそうなので、しばらく様子見かなと。

(7/14 追記)

数日使っていましたが、耳が慣れたのか、エイジング出来たのか、どっちなのか分かりませんが、気にならなくなりました。

値段

Amazonで\6,820でした。イヤホンにしてはやや高いといえるでしょう。コスパが良いのか悪いのかは、これからの判断になるかなと。

その他

EarPodsや前に使っていたSonyのものに比べてケーブルが太いので、ちょっと取り回しが不便です。慣れのような気もしますが、マイナスポイントです。

2016-07-02

[]WAONポイントWAON POINTの違い

WAONポイントがあるのに、WAON POINTというものを作ったようです。

読み方同じだし、さすがに分かりづらくないか?


WAON POINT公式サイト情報

サービスの詳細は、

WAON POINTサービスはじまる!|WAONからのお知らせ|電子マネー WAON [ワオン] 公式サイト

WAONポイントWAON POINTの違いは、

WAON POINT活用ガイド|WAON POINTサービスはじまる!|WAONからのお知らせ|電子マネー WAON [ワオン] 公式サイト

を見るとよさそうです。


私の理解

というわけで、ポイント付与電子マネーへの交換を図に整理してみました。

f:id:taka_2:20160702113501p:image:w650


違いは下記でしょう。

f:id:taka_2:20160702113502p:image:w650


というわけで、WAON POINTは、WAONポイントに比べて、かなりメリットが多いようです。

将来的には、WAONポイントなくして、WAON POINTに移行するかも知れませんね。

2016-06-20

[]第210回TOEIC公開テスト2016年05月29日(日)】の結果

f:id:taka_2:20160620212827p:image:w480

Listening365点、Reading365点で、Total730点でした。

形式対策を何にもしなかった割には、特にスコアも落ちなかったので、

マグレかなんかでしょう。


>次回は半年後に730点くらい目標ですかね。

また、たまたま目標達成しました。

なんだろうこのちょうど感。

まあ、期間は半年以上経ってますが。


特に、目下仕事必要なReadingのスコアを伸ばしたいところ。

これも達成してますね。

仕事英文メールが飛び交ってたりします

自分Ccで流れてくるだけなので、会話には参加していないのですが、

読んでないと、「えっ?!なんで読んでないの??」

っていうリアクションされるので、困り者です。


まあ、ネイティブじゃない人たちのやりとりなんで、

文短いですし、あまり読解にも困らないレベルですが。


>ここより上のスコアは、シャドーイングなどの発音アウトプットを伴わないと厳しそうです。

レアジョブとかやってみたいけど、なんとなく試せないでいる。。

英会話スクールに行っているので、発音アウトプット多少増えたかも知れません。

まあ、3週間に1度しか行ってないから、足しになっているのかどうか。

しかも、Listeningの点数は前回より落ちてるし。


とりあえず5の倍数で受けることにしたので、次回は215回に受けます

次回は、750点くらい目標ですかね。

(だんだん目標のきざみが細かくなってきた。)

2016-06-17

[]ITストラテジスト試験勉強始めました。

というわけで、今月の始め辺りから着手しました。


一応、戦略的ITコンサルティング事業というのをやってる会社に勤めているので、

いわゆる、御社ビジネスは弊社のITを使うとこんなに

  • 売上があがる
  • コストが削減できる
  • 今後の成長が見込める
  • etc

とか言えないといけないわけです。


ITストラテジスト試験は、IPAによると

「〜 経営ITを結びつける戦略家 〜」

ってことらしいので、まさにそういう知識を身につける試験区分なのかなと理解してます

IPA 独立行政法人 情報処理推進機構:制度の概要:ITストラテジスト試験

コンサルを名乗るなら、持ってれば少しは箔が付くのではと思います


早速午後1対策からやっているんですが、

自分の作った回答と解答例を見比べると、

あー一歩考えが浅かったなと思うことがしばしば。

最近仕事の詰めの甘さがそのまま出てる気がします。


はい時間も限られている中、いかにそこにたどり着くか

というのは、試験仕事も同じ。

良い思考の訓練になりそうな気がします。

使ってるテキスト

情報処理教科書 ITストラテジスト 2016年版

情報処理教科書 ITストラテジスト 2016年版

いつものシリーズですね。

[]データベーススペシャリスト試験合格しました。

f:id:taka_2:20160617223058p:image

感想

2003年テクニカルエンジニア(DB)合格者のリピーターとして、

試験対策なしで臨んでみたわけですが、ギリギリ合格してました。


ツイッターにも書いたんですが、これだけNoSQL色々あるご時世で、

リレーショナルデータベースしか出題されない試験で、

データベーススペシャリストっていうのは違和感あるなあと思います

リレーショナルデータベーススペシャリストなら、しっくり来ますけどね。

使ったテキスト

なし

受験会場

厚木中央高等学校でした。

から歩いて行ったんですが、ちょっと遠かったですね。

今後

2016年秋: ITストラテジスト試験

2017年春: システム監査技術者試験


論文試験が続くので、またがんばっていきたいところです。

高度全制覇への道

ITストラテジスト試験ST 2016年受験予定
システムアーキテクト試験SA合格2014年合格
プロジェクトマネージャ試験PM合格2014年合格
ネットワークスペシャリスト試験NW合格2004年合格
データベーススペシャリスト試験DB合格2003年2016年合格
エンベデッドシステムスペシャリスト試験ES やる気なし
情報セキュリティスペシャリスト試験SC春秋合格2015年合格
ITサービスマネージャ試験SM ITストラテジスト試験受かったらやるかも
システム監査技術者試験AU 2017年受験予定