「ProxyCommandによるsshの多段接続について」をコマンドライン引数でやる
ProxyCommandによるsshの多段接続について -- ぺけみさお
ググりが足りない気もするけど、どこのブログも.ssh/configで設定するやり方ばかりだったので、コマンドライン引数でやる方法を試してみた。
ホストの役割とユーザ
_.host | _.役割 | ユーザ |
host01 | クライアント | user |
host02 | 踏み台サーバ | hoge |
host03 | ターゲットサーバ | moge |
実行結果
[user@host01 ~]$ ssh -i .ssh/id_rsa_host03 -o "ProxyCommand=ssh hoge@host02 nc %h %p" -l moge host03
Last login: Thu Aug 11 19:10:39 2016 from host02
[moge@host03 ~]$
というわけで、host01からhost03に直接つながったように見えます。
この後exitすると、、
[moge@host03 ~]$ exit
logout
Connection to host03 closed.
[user@host01 ~]$ Killed by signal 1.[user@host01 ~]$
なぞの"Killed by signal 1."が表示されますね。なぜでしょう。。
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アプリケーションなら、ログインユーザを返すところでしょうね。
SHURE カナル型イヤホン SE112m+購入
【国内正規品】SHURE カナル型 高遮音性イヤホン リモコン・マイク付 SE112m+ グレー SE112M+-GR-A
- 出版社/メーカー: SHURE
- 発売日: 2014/10/23
- メディア: エレクトロニクス
- この商品を含むブログを見る
前使ってたイヤホンが断線か何かで片方聞こえなくなってしまったので、新たに購入。
つなぎで使ってたEarPodsのリモコンが便利で、
ていう条件でAmazonを探し、一番売れ筋のものを選んでみました。
装着感
大中小のイヤーチップが付属していますが、自分にはデフォルトで装着されている中のものが最もフィットしました。
音質
若干高音が強くシャリシャリしてる感じがしますが、エイジングということもあるそうなので、しばらく様子見かなと。
(7/14 追記)
数日使っていましたが、耳が慣れたのか、エイジング出来たのか、どっちなのか分かりませんが、気にならなくなりました。
その他
EarPodsや前に使っていたSonyのものに比べてケーブルが太いので、ちょっと取り回しが不便です。慣れのような気もしますが、マイナスポイントです。
WAONポイントとWAON POINTの違い
WAONポイントがあるのに、WAON POINTというものを作ったようです。
読み方同じだし、さすがに分かりづらくないか?
WAON POINTの公式サイト情報
サービスの詳細は、
WAON POINTサービスはじまる!|WAONからのお知らせ|電子マネー WAON [ワオン] 公式サイト
WAONポイントとWAON POINTの違いは、
WAON POINT活用ガイド|WAON POINTサービスはじまる!|WAONからのお知らせ|電子マネー WAON [ワオン] 公式サイト
を見るとよさそうです。
第210回TOEIC公開テスト【2016年05月29日(日)】の結果
Listening365点、Reading365点で、Total730点でした。
新形式の対策を何にもしなかった割には、特にスコアも落ちなかったので、
マグレかなんかでしょう。
>次回は半年後に730点くらい目標ですかね。
また、たまたま目標達成しました。
なんだろうこのちょうど感。
まあ、期間は半年以上経ってますが。
>特に、目下仕事で必要なReadingのスコアを伸ばしたいところ。
これも達成してますね。
仕事で英文メールが飛び交ってたりします。
自分はCcで流れてくるだけなので、会話には参加していないのですが、
読んでないと、「えっ?!なんで読んでないの??」
っていうリアクションされるので、困り者です。
まあ、ネイティブじゃない人たちのやりとりなんで、
文短いですし、あまり読解にも困らないレベルですが。
>ここより上のスコアは、シャドーイングなどの発音アウトプットを伴わないと厳しそうです。
>レアジョブとかやってみたいけど、なんとなく試せないでいる。。
英会話スクールに行っているので、発音アウトプット多少増えたかも知れません。
まあ、3週間に1度しか行ってないから、足しになっているのかどうか。
しかも、Listeningの点数は前回より落ちてるし。
とりあえず5の倍数で受けることにしたので、次回は215回に受けます。
次回は、750点くらい目標ですかね。
(だんだん目標のきざみが細かくなってきた。)
データベーススペシャリスト試験合格しました。
感想
2003年のテクニカルエンジニア(DB)合格者のリピーターとして、
試験対策なしで臨んでみたわけですが、ギリギリ合格してました。
ツイッターにも書いたんですが、これだけNoSQL色々あるご時世で、
リレーショナルデータベースしか出題されない試験で、
データベーススペシャリストっていうのは違和感あるなあと思います。
リレーショナルデータベーススペシャリストなら、しっくり来ますけどね。
使ったテキスト
なし
受験会場
厚木中央高等学校でした。
駅から歩いて行ったんですが、ちょっと遠かったですね。
高度全制覇への道
ITストラテジスト試験 | ST | 秋 | 2016年受験予定 | |
システムアーキテクト試験 | SA | 秋 | 合格 | 2014年合格 |
プロジェクトマネージャ試験 | PM | 春 | 合格 | 2014年合格 |
ネットワークスペシャリスト試験 | NW | 秋 | 合格 | 2004年合格 |
データベーススペシャリスト試験 | DB | 春 | 合格 | 2003年、2016年合格 |
エンベデッドシステムスペシャリスト試験 | ES | 春 | やる気なし | |
情報セキュリティスペシャリスト試験 | SC | 春秋 | 合格 | 2015年春合格 |
ITサービスマネージャ試験 | SM | 秋 | ITストラテジスト試験受かったらやるかも | |
システム監査技術者試験 | AU | 春 | 2017年受験予定 |
ITストラテジスト試験の勉強始めました。
というわけで、今月の始め辺りから着手しました。
一応、戦略的ITコンサルティング事業というのをやってる会社に勤めているので、
いわゆる、御社のビジネスは弊社のITを使うとこんなに
- 売上があがる
- コストが削減できる
- 今後の成長が見込める
- etc
とか言えないといけないわけです。
ITストラテジスト試験は、IPAによると
「〜 経営とITを結びつける戦略家 〜」
ってことらしいので、まさにそういう知識を身につける試験区分なのかなと理解してます。
IPA 独立行政法人 情報処理推進機構:制度の概要:ITストラテジスト試験
コンサルを名乗るなら、持ってれば少しは箔が付くのではと思います。
早速午後1対策からやっているんですが、
自分の作った回答と解答例を見比べると、
あー一歩考えが浅かったなと思うことがしばしば。
最近の仕事の詰めの甘さがそのまま出てる気がします。
とはいえ時間も限られている中、いかにそこにたどり着くか
というのは、試験も仕事も同じ。
良い思考の訓練になりそうな気がします。