まめログ

Javaプログラマの歩み

平成30年度 秋期 システムアーキテクト試験に合格しました!

平成30年度秋期 システムアーキテクト試験に合格することができました!
f:id:mamepika:20181225030355j:plain

一応2011年の情報セキュリティスペシャリスト試験以降も毎年申し込みはしており、
実に7年ぶりの合格となりました!
※午前ゼロ試験に破れて、受験していないときもあります。

受験の感想はこちら。
mamelog.hatenablog.jp

自己採点で午前2はギリギリ通過、
午後1もITECやTACさんの解答速報とほとんど一緒だったので手応えは感じてました。
論文は未知数だったんですが、見事に経験とテーマが合致したので運が良かったですね。

勉強時間

去年も勉強してて、去年は20~40時間位。
今年のシステムアーキテクト試験に関しては30時間程度です。
ただ、午後2のテーマと自分の経験が重なったりと、
実際には50時間と2年(アーキテクトとして働いてきた期間)と言えると思います。

勉強方法

午前1は免除なので何もナシ。
午前2は過去問を5年分くらい印刷して、ひたすら解く。
分からなかった問題については、他の選択肢を含めて意味を理解していき、
過去問の時点で8割以上の正答率に持っていけば、本番で6割はいけると思います。
私は文系脳で計算問題が全くできないので、最初から捨ててますが、それでも何とかなります。
※数学では解けず、算数で解いています。
午前は基本的に記憶力勝負なので、覚えてない問題は適当に○をつけて飛ばすので、算数で地道に解いていってもも何とか時間が足りることもあります。

参考書は以下のを購入して、パラパラと見てました。
www.amazon.co.jp

論文に関しては、以下の書籍を参考にしました。
https://www.amazon.co.jp/dp/4865751343/

論文試験に関して

論文は上記の書籍を読んで、形式や流れはインプットしてましたが、
事前に書いたりといった練習はしませんでした。
今回はたまたま経験と論文のテーマが見事に合致しており、運が良かったですが、
事前に1回は書いてみたほうが良いと思います。

エンジニアに資格は必要か

これだけ受験しているので、私は必要だと思っている派です。
勿論持ってるだけで何かが変わるような資格でもないので、
技術と資格、両輪が大事だと思います。
勉強時間でも書きましたが、論文系の資格は経験も問われると思うので、
自身の経験ややり方が正しいか、という点でも試験は大事かなと思っています。

来年春はデータベーススペシャリスト試験、
秋はITストラテジスト試験を受験予定です。
合格するまではしばらくこのループ。

データベーススペシャリスト試験は3度めの正直で受かりたい所。

お祝いしてくれる方は是非↓

Amazon.co.jp

MacBook Pro 2018 13インチモデルを導入した話

社内において、Kotlin + Spring Boot + AngularでWebアプリケーション開発を行っていくこいとになり、
その開発用のマシンとしてMacBook Pro 2018 13インチモデルを導入してもらいました。
f:id:mamepika:20181219094847p:plain

3年前、Windows7,Core2Duo,Memory2GB,HDD500GBという
教科書通りのマシンをあてがわれてから
ギャーギャー文句を言い続けた結果、
アプリケーション開発にマシンスペックが重要ということが社内に浸透してきて
スペック盛り盛りのMacBook Pro導入に至りました。
※流石に当初のPCはすぐになくなり、
Windows7,Core i5,メモリ4GB,HDDのマシン
Windows7,Core i7,メモリ16GB,SATA SSDのマシンにはなっていました。(但しネットワーク制限ありでMavenリポジトリAWSに繋がらない)


なぜMac

憧れてたから、というのもありますが、
Kotlin(Java)、Docker、Angularといった技術スタックならWindowsである必要もないなということでMacに決まりました。
IntelliJ IDEA、Google ChromeVisual Studio Codeなどを使っている分にはいいのですが、
ファイルがどこにおいてあるんだとか、コピペとか、
OSのオペレーション部分でまだまだ戸惑いがありますw

持ち運びはしないので、15インチでも良かったのですが、
13インチだと本体の後ろに設置した外部ディスプレイと画面がかぶらずに使えるので、13インチにしました。

スペック

スペックはストレージ以外は最高にしておきました。
これで2〜3年は戦えるのでは。

CPU:2.5GHzデュアルコアIntel Core i7
メモリ:16GB
SSD:512GB
キーボード:日本語

導入に際し困ったこと

最近のMacBookにはケンジントンロックをかける穴がついておらず、
セキュリティワイヤーがつけられないことに困りました。
社内規定でPCには盗難防止のセキュリティワイヤーをつけないといけなく、
以前に買ったPCもセキュリティワイヤーがつけられないことを理由にお蔵入りになってしまっていました。

Googleで検索したら、以下の商品が検索されてきたので、
自分のお金でもないしということで買ってみたところ見事に使えたので、紹介しておきます。
2016・2017モデル対応と書いてますが、2018モデルでも大丈夫でした。
これのおかげで、毎日袖机にしまう必要がなくなり助かりました。

2016/2017モデル MacBook Proにワイヤーロックを取り付け

開発環境

開発用のNWは社内NWと隔離されてるため比較的自由が効き、かなりモダンな感じとなりました。

IntelliJ IDEA,Visual Studio Code
GitHub Business Cloud
Slack
Docker,AWS
Office365

Kotlinが楽しいので、ガンガンコードを書いて行きたいです。

Spring Fest 2018に参加しました #jsug

2018年10月31日に行われた、
Spring Fest2018に参加してきました。
springfest2018.springframework.jp

次のシステムはSpring Bootを使って構築しようとしているので、
Springの動向、事例収集が目的です。

結論としては、かなり聞きたい情報が聞けた、満足度100%のイベントでした。

聴講したセッションは以下の通り

KEYNOTE

Springエコシステムの今とこれから。

個人的にはKotlin推しが気になってます。
Kotlin + Spring Bootでこれから勉強していこうと思いました。

英語のセッションで同時通訳レシーバーを使っている人が多かったのですが、
音漏れが酷く、セッションに集中できない状態でしたが、
運営の多田さんが、途中でアナウンスしてくれてみんなが音量を下げてくれてからは、集中して聴くことが出来ました。
私は英語力向上のため、レシーバーなしで聴講しているので非常に助かりました。
まあ、半分くらいしか分かってませんがw

決済システムの内製化への旅 - SpringとPCFで作るクラウドネイティブなシステム開発

www.slideshare.net

Elastic{on}のときも参考にさせていただきましたが、
同業他社の事例紹介。

PCFとSpringの決済システムの構築事例は大変ためになりました。
この事例との差異は、言語がKotlinになるところと、
カード会社との独自接続網をどのようにマイクロサービス内に組み込むか、といったところでしょうか。

既存システムの残し方、
ある決済機関で遅延や障害が起きた時の、障害の伝搬など課題認識が同じで先行事例として非常に助かりました。

Spring ♥ GCP ー Spring と GCPの素敵な関係(アプリ実行環境としてのGCPを考える)

昼休み明けてこちらに。

現状のクラウドインフラはAWSを使っていますが、
実はGCPのほうが相性が良いのではと思い、聞いてみました。

GAE、GKEのデモは見飽きたものであまり、新鮮な内容はなかったかなといった印象でした。

来年には大阪リージョンも開設されるので、
そのあたりから国内事例にも期待していけるでしょう。
あわよくば私が最初の事例になりたいものです。

Amazon Cognito使って認証したい?それならSpring Security使いましょう!

speakerdeck.com

JJUGでお世話になっている、リョーちゃんのセッションへ。
Cognitoとタイトルに合ったものの、中身はSpring Securityの深い話でした。
日頃、フレームワークのソースやクラス名なんて意識しないので、いい機会でした。

資料に使われているアイコンが可愛い。
以下のURLで手に入れられるようです。
SimpleDiagrams | Desktop App for Creating Diagrams, Flowcharts and Hand-drawn Visualizations | SimpleDiagrams

次はCognitoを組み込んだ実例が聞けると期待しています。

Pivotal認定講師が解説!基礎からのOAuth 2.0とSpring Security 5.1による実装

www.slideshare.net

システム開発にあたって、必ず作る必要があるのが認証・認可。
それなのに情報は少ないですし、実装方法も複雑なので気になってました。
OAuth2でオペレーションは楽になるのですが、実装はまだまだ一筋縄ではいかないなといった印象です。

Spring BootでHello Worldのその先へ ~ウェブDBプレスのSpringBoot特集で伝えたかったこと&伝えきれなかったこと~

会場の111が分からず、スタッフの方に聞いてしまいました。
他の3つの会場は2階と3階なのですが、111は11階でした。

WEB +DB PRESSのSpring Boot特集の続編的位置づけのセッションでした。
Hello worldで終わらず、メッセージキューやデータベースのつなぎ方を見せていただき、楽しいセッションでした。

業務で使いたいWebFluxによるReactiveプログラミング

最後はこちら。
speakerdeck.com

最後のセッションなのに広い会場がだいたい埋まっていました。
凄いです。

リアクティブ、よくわからないですが、これから来そうな気配は感じました。
Intellij IDEAがフリーズしてデモが出来ない事象が発生していましたが、
うまく笑いにつなぎ、デモもきちんと行えてたのでさすがだなと…。
BABTMETAL 3人の時は一生心に残しておきます。

懇親会

美味しい料理と、ワインを堪能しました。
沢山お話もできたので、有意義でした。
もう少し、知らない人やセッションのスピーカーへ話に行く勇気を持たないと駄目ですね。

運営の皆さん、スピーカーのみなさん、ありがとうございました!

平成30年度 秋期 システムアーキテクト試験を受験しました

2018年10月21日にシステムアーキテクト試験を受験してきました。

問題はこちら。
https://www.jitec.ipa.go.jp/1_04hanni_sukiru/mondai_kaitou_2018h30.html#30aki

情報処理技術者試験
2009年10月 基本情報技術者試験合格
2010年10月 応用情報技術者試験合格
2011年06月 情報セキュリティスペシャリスト試験合格
2017年10月 情報処理安全確保支援士登録

情報セキュリティスペシャリスト試験合格後は、
高度試験を色々受けてたり、受けてなかったり(午前0試験で敗北)で合格からは遠ざかってます。
ここ2年は春はデータベーススペシャリスト試験、秋はシステムアーキテクト試験に絞って受験しています。


午前1は免除なので、会場には10時くらいに到着。
自分の受験教室を確認して、10時30分くらいまでリラックスしてから臨みました。

午前Ⅱ試験

16/25(自己採点)
過去問からの出題が少なく焦りました。
直前で結構答えを書き換えたところが間違ってて冷や汗もの。

当日、IPAから発表された解答で自己採点したところ、16/25だったので
解答の写し間違いやマークミスがなければ、たぶんクリアできているはず。

午後Ⅰ試験

問1と問3を選択。
それぞれ可もなく不可もなくといったところ。

TACの解答が発表されたので見比べてみると、
各問に概ね応えられてるかなーと甘めの自己採点。

http://www.tac-school.co.jp/kaitousokuhou/downloads/14_30F_SA%E8%A7%A3%E7%AD%94%E4%BE%8B.pdf

午後Ⅱ試験

問1を選択。
こちらはデータ分析とデータの提供がテーマだったので、
業務で行っているElasticsearchのログ可視化をアレンジして記述しました。
規定文字数はクリアしたので、あとは祈るのみ。

結果は12月に発表なので、それまでドキドキですね。
結果報告がなければ、お察しください。

全体の感想

午前2は過去問からの出題がなく、方向転換が伺えました。
アジャイルの用語だけ知ってても別に意味はないんですが、
午前でアジャイルについて問われることが増えてますね。
試験制度変わって9年ですが、ここらでもう一度変えるべきなのかもしれません。

午後はシステムアーキテクトITストラテジストの違いが曖昧になっているように思います。

Developers Summit 2018 Summerに参加しました #devsumi

f:id:mamepika:20180802020300j:plain

7月27日に行われた、Developers Summit 2018 Summerに参加しました。

テーマはデータ活用ということで、
機械学習、AI、ビッグデータなどですね。

資料は以下のページに纏められています。
codezine.jp


データ活用の事例というより
データを活用していくために
どういう組織が必要か、そのために今の組織をどう変えるかなど泥臭い内容も聞けたので満足です。

JJUG CCC 2018 Spring に運営とスピーカーとして参加しました #jjug

大分時間が経過してしまいましたが、
2018年5月26日に行われた『JJUG CCC 2018 Spring』に運営として、そしてスピーカとして参加しました。

スピーカとして

大きな舞台での登壇は2回目でした。
まあ、朝イチ且つテーマが技術寄りでもないので、あまり人は集まりませんでしたが、
聞きにくれた方はありがとうございます!

資料は以下のとおりです。

www.slideshare.net

情報処理安全確保支援士に登録して、講習も受けてきたのでレポートとして発表しました。
今の所、登録しててもなにか変わるわけでもないですが、
情報セキュリティの重要性は今後増す一方だと思いますので、
そこで情報処理安全確保支援士がニーズに対して応えられる知識・技術を持っているようにせねばと思います。

秋は、技術よりの話題で登壇してみたいなあ。

運営として

一方通行は今回も実施し概ね好評でした。
ただ、厳格にやりすぎてしまい、セッション中の通路が閑散としているときにも一方通行によって不便を強いられる事があったようです。
ここは次回改善点です。

懇親会

寿司!
LINEさんありがとう!寿司!
f:id:mamepika:20180730205248j:plain

次回のJJUG CCCについて

JJUG CCC 2018 Fallは2018年12月15日に実施されます。
12月15日はFallなのかというツッコミを各所からいただいておりますが、
Fallとは言ったが秋にやるとは言っていない。

www.java-users.jp

LogstashのJdbc_streaming filterを使ってDBから取得した項目をログに付加する

この記事は、Elastic Stack Advent Calendar 22日目の記事となります。

qiita.com

皆さん、ログ可視化してますか?

ログにIDしか出力されておらず、名前がほしいなと思ったことはありませんか?
僕は、常々名前がほしいなと思ってました。
ログ出力処理をいじって、ログに出力されるようにするのが一番なのですが、
該当のシステムは外部ベンダーが作っており、なかなか難しかったりします。

そこで色々手段を検討していたのですが、
Logstash自身に、ログの一部をキーにDB検索をし結果をログに付与する機能があるのを見つけました。
それがJdbc_streaming filterです。
www.elastic.co

inputをJDBCで出来るのは知っていたけど、filter処理もできるとは知りませんでした。

環境

以下の環境で動作確認をしています。

OS : Windows 10 Pro
Java : Oracle JDK 8u144
Logstash : 6.1.1

下準備

DBと読み込む対象のCSVファイルを準備します。

JDBC Driverのダウンロード

使っているRDBMSに即したJDBC Driverが必要になります。
今回はPostgreSQLを使用するので、PostgreSQLJDBC Driverをダウンロードしてきます。

jdbc.postgresql.org

対象のテーブル

テーブルはこんな感じにデータを入れています。
f:id:mamepika:20171222210655p:plain

読み込む対象のCSVファイル

読み込むCSVファイルは以下のような感じです。

2017/12/22 00-00-00.000,hostap1,_07obfLIAdLHyL5VjcTWs8Zu_2xsN-QQ,1,Login
2017/12/22 00-00-00.000,hostap1,_07obfLIAdLHyL5VjcTWs8Zu_2xsN-QQ,2,Login
2017/12/22 00-00-00.000,hostap1,_07obfLIAdLHyL5VjcTWs8Zu_2xsN-QQ,3,Login
2017/12/22 00-00-00.000,hostap1,_07obfLIAdLHyL5VjcTWs8Zu_2xsN-QQ,4,Login
2017/12/22 00-00-00.000,hostap1,_07obfLIAdLHyL5VjcTWs8Zu_2xsN-QQ,5,Login
2017/12/22 00-00-00.000,hostap1,_07obfLIAdLHyL5VjcTWs8Zu_2xsN-QQ,1,Logout

Logstashの準備

設定ファイルを以下のように作成します。

上記の公式ページのjdbc_connection_string には "が2つ記述されていますが、
2つ書いたままだと動かなかったので、1つにしています。

JDBCの設定自体は普段Javaを書いている人には馴染みのあるものかと思います。

input{
    file{
      path => "C:/dev/members.txt"
      start_position => "beginning"
    }
}
filter{
     csv{
       columns => ["processingDate","hostName","sessionId","memberid","function"]
       separator => ","
     }
     date{
      match => ["processingDate" , "yyyy-MM-dd_HH-mm-ss.SSS"]
     }
     jdbc_streaming{
       jdbc_driver_library => "C:/dev/postgresql-42.1.4.jar"
       jdbc_driver_class => "org.postgresql.Driver"
       jdbc_connection_string => "jdbc:postgresql://localhost:5432/postgres"
       jdbc_user => "postgres"
       jdbc_password => "password"
       statement => "select * from members WHERE memberid = :memberid"
       parameters => { "memberid" => "memberid"}
       target => "member_details"
     }
     mutate{
       remove_field => ["@version","host"]
     }
}
output{
  stdout {codec => rubydebug}
}    

このファイルは、Logstashフォルダ配下のbinフォルダに保存します。

Logstashの実行

コマンドプロンプトから実行します。
Logstashフォルダ配下のbinフォルダまで下ってから以下のコマンドで実行できます。

logstash -f <設定ファイル名>

結果の確認

以下のように、ログには書かれていなかった項目がDBから取得され、付与されていることが確認できます。
尚、結果が複数返ってくるSQLの場合は配列になって格納されるようです。
今回は*で全カラムを取得していますが、カラムを指定すれば、そのカラムだけ配列に入ります。
f:id:mamepika:20171222211519p:plain

パフォーマンス

ローカルPC上で起動したLogstashから
RDS for PostgreSQLのt2.smallインスタンスに対して実行した際に、
秒間600~1000行程度のログを捌くことが出来ていたので、パフォーマンス的にはさほど問題にならないかなと思います。


Elastic Stackは進化のスピードが速く、どんどん痒いところにまで手が届いていく感じが好きです。
来年からはX-Packの機能も触っていけるので、blogに書く機会も増やしていきたいな~。