zoomzoomzoom

解決方法の共有に主眼を置くブログ・他雑談

Spring徹底入門13章13.1 つまづき

Spring徹底入門を購入した。

Spring徹底入門 Spring FrameworkによるJavaアプリケーション開発 | 株式会社NTTデータ |本 | 通販 | Amazon

 

framework完全初心者なので、著者の方たちがおすすめするように、13章14章からはじめ、作りながら「こんな感じで動くのか」と理解していくこととする。

 

13章のツマヅキ(+気づき):

・DemoApplicationのpackageの宣言に関して

私の環境では、サブパッケージがきちんと作成されておらず、エディタ上に丁寧に小さな×マークがついていた。

対策→comパッケージの下に、com.exampleパッケージを新たに作成し、DemoApplication.javaを移動。

 

・HelloWorldを表示されない

webブラウザでlocalhost:8080にアクセスすると、Whitelabel error logメッセが表示され、helloworldがでない。どうやら8080ポートがすでに使用されている模様。

対策→9000番ポートを使用するようにする。具体的には、resourcesのapplication.propertiesにserver.port=9000と記述し保存。

 

追記(20170122)

・テストの実行ができない。

テストケースのサンプルはあるが、これが実行できない。

開発初心者の私は、テストなど未経験。どのようにやればよいのか作法もわからない。

テストのためのサンプルコードを見て、「mainメソッドないやん。テストするコードになにか追記して呼び出すタイプの何かか?」と考えた。

 Javaのテストってどうやるのかな、と考え、ネット上でお勉強。

 

以下私の頭の中。

変更が原因でソフトが動かなくなったら大変だから、こまめにテストする必要。しかし人力println出力や人力デバッグは大変。Testを機械に任せる方法の登場。回帰テスト。テスト対象はメソッド。@Testをつけるのが決まり。実行はテストとして実行(ctrl+shift+x,t)

 

実行方法も知らなかったので大変勉強になりました。

さて、じゃあ実行してみよう。ctrl+shift+x,t

type TestRestTemplate cannot convert to type RestTemplate

というエラー。教科書の通りやったのに。。。教科書のページ下部の注釈に"RestTemplateの使い方は"とあったのでそちらを勉強。

 

以下私の頭の中。

RestTemplateというのを使えば、

・リクエストURIの組み立て*

・HTTPリクエスト送受信

・レスポンスボディをJavaオブジェクトへ変換

という3つの項目ができる。

RestTemplateのアーキテクチャにはTestRestTemplateなんてないなあ。どうなっているんだ?もう少し読み進めてみよう。

RestTemplateはざっくり、以下の流れか。

アプリからオブジェクトもらう→JSONに変換→リクエスト送信→REST APIから受信→オブジェクトに戻す→アプリに戻す

 

そのまま読み進める。

依存ライブラリ?

 

ここでDemoApplicationTestsに戻ってソースを見直すと、ソースの誤りを発見。

RestTemplate restTemplate = new TestRestTemplate();となっていたところを、new RestTemplate();に変更。教科書の通りにやったらエラーなんですか。。。

その他セミコロンとコロンを間違えていたところとかを修正して、テスト実行したところ、動きました。

 

・(気づき)autoConfigurationに精通する必要性。

Springでは手間な初期設定を自動でやっておいてくれるautoConfigurationなるアノテーションが存在する。自動で動くということは、変更を加えたい場合には、どこで何を設定しているのかを知らないといけないということである。

各autoConfigurationのソースは、下記で読める。

github.com

 

・(気づき)starterの便利さ

starterはライブラリの依存関係とバージョン管理をまとめてやってくれる。starterとautoConfigurationと組み合わせて大きな意味での「初期設定」がスキップできてしまう。すごい時短になる。

starterのソースコードは下記。

github.com

 

 ・mavenのコマンド実行

mavenのコマンドってどこに打ち込むんだ?

そもそもmaven初めてだぞ・・・ということで下記サイトでお勉強。

Mavenってなにする人なの?

コマンドはコンソールに直打ちするものらしい。sts上では打てないのか?

mvn --versionで確認すると、そもそもmvn自体がインストールされていない模様。上記サイトはインストールから基本操作までを教えてくれた。

http://maven.apache.org/ maven公式から最新版のbin-zipをダウンロード。私の場合は3.3.9だった。ダウンロードしたものをC:ドライブ直下で「ここに解凍」をして、環境変数Pathに解凍したファイルのbinのディレクトリPathをコピペして、下記コマンドで確認。

mvn --version 

成功。mavenのversion確認ができた。

mvnの使用方法はプロジェクトのルートディレクトリまで移動し実行するとのこと。

実行するもsts上のtargetディレクトリには変化なし・・・

どうすればいいのかわかる方教えてください(切望)

 

 

判明したTodo:

14章を終えてから以下のことをする

出会った〇〇autoConfigurationのソースを読む

出会った〇〇starterのソースを読む。

 

STS(spring tool suite) 3.7.3 インストール つまづき 

STSを設定する際に躓いたポイントをメモ。

大きく2点。

 

STSのPathが長すぎる問題:

ダウンロードしてきたstsの設定ファイルのzip。ファイル展開するときにpathが長すぎるとのこと。私がダウンロードしたのは、

spring-tool-suite-3.7.3.RELEASE-e4.5.2-win32-x86_64

だった。

リネームして sts3.7.3 にして解凍した。

 

jvm.dll読み込めない問題:

sts.exeを起動しようとすると、jvm.dllっていうのが読み込めませんという意味のウィンドウが出てきて終了してしまう。

問題時のJava環境としては、

32bitのJDK,JRE1.8.0_111をインストール済み。

環境変数もそれらを使用するように設定していた。

 

解決のために行ったことは、

64bitのJDK,JRE 1.8.0_121をインストール。

環境変数はいじらない。

sts.iniというファイルに下記を記述。

-vm ${jdk1.8.0_121のディレクトリパス}\bin\javaw.exe

 

無事起動。

win10 私的初期設定

win10を新たに手に入れたので設定メモ。

偉大な先人の方々のブログを参考に、これはと思ったのを設定した。

バックアップのために、いかにメモる。

(ほかに何かいい設定あったら教えてください)

 

既定のブラウザをEdgeからChromeに。

ついでにpdfファイル開くときもChromeに任せる設定にしてしまった。

Tech TIPS:Windows 10のデフォルトのWebブラウザをMicrosoft Edgeから別のブラウザに変更する - @IT

 

winにvimをインストール

http://blog.be-open.net/windows/windows-vim/

「香り屋」さんのvimをダウソ

環境変数設定

UTF-8設定(Kaoriya版Vimのフォルダ内にある /switches/catalog/utf-8.vim を /switches/enabled へコピー)

 

右クリックメニューに「vimで開く」をつくる

レジストリいじるのでバックアップ

http://moriya-it.blogspot.jp/2014/08/vim.html

  1. レジストリエディタを開く(ファイル名を指定して実行(ウィンドウズキー+R)⇒regeditと入力⇒OK
  2. ファイルにエクスポートする(メニューからファイル⇒エクスポート、エクスポート範囲にすべてを選択して保存)

レジストリを編集する

  1. 左側のツリーからコンピュータ > HKEY_CLASSES_ROOT > * > shellを開く
  2. 「shell」の上で右クリックし、「新規」⇒「キー」を選択
  3. 新しいキー#1が追加されるので、これを右クリックし、「名前の変更」で「Vimで開く」に変更する
  4. Vimで開く」の上で右クリックし、「新規」⇒「キー」を選択
  5. 新しいキー#1が追加されるので、これを右クリックし、「名前の変更」で「command」に変更する
  6. 「command」を選択し、右欄に表示されている「(既定)」を右クリック⇒修正(M)を選択
  7. 「値のデータ」欄に以下の形式で入力し、OK

ディレクトリを英語表記に

なんでもいいのでフォルダを開いて、ツール→フォルダーオプションから

表示タブの設定で、
●「ファイルとフォルダーの表示」の「隠しファイル、隠しフォルダー、および隠しドライブを表示する」
にチェックと、
□「保護されたオペレーティングシステムファイルを表示しない(推奨)」
のチェックを外す。

デスクトップに出てきたdesktop.iniのLocalizedResourceNameの項目の先頭に ; を入れる。

その後再起動をかける(←重要)

 

タッチパネルの無効化

winボタン押して「設定」と入力→システム→タブレットモード→その画面内で無効設定。

 

Bashを使えるようにする。

こちらを参照。

https://rcmdnk.com/blog/2016/06/05/computer-windows-ubuntu-bash/

 

win+矢印でソートするときに、タスクが自動で表示されないようにする。

設定 -> システム -> マルチタスク -> ウィンドウをスナップしたときに横に配置できるものを表示する -> オフ

 

cygwinのインストール

サイトからインストーラダウンロード。

(チェックのつけ方の参考:http://digitalbox.jp/cygwin-on-windows10/)

 

 

java開発環境を整える。

後日記述

 

c++開発環境を整える。

後日記述

 

アルゴリズムとデータ構造 forプロコン

プログラミングコンテスト攻略のためのアルゴリズムとデータ構造という本を購入

 

勉強の動機:

C++の能力・データ構造知識・基礎アルゴリズムを身につけたい。

 

本の概要:

1オンラインジャッジ活用方法

アルゴリズムとは

3初等的整列(初等的ソート)

4データ構造概説

5探索

再帰・分割統治

7高等的整列

8木

9二分探索木

10ヒープ

11動的計画法

12グラフ

13重み付きグラフ

14高度なデータ構造

15高度なグラフアルゴリズム

16計算幾何学

17動的計画法

18整数論

19ヒューリスティック探索

 

勉強方法:

アルゴリズムでどのような操作が実現できるか覚える(デメリットも併せて)

必須の数学の知識はその都度勉強する

コーディングしまくる

とりあえず11まで進める。

CTF本 概要まとめ 勉強方針

本の内容

1  バイナリ解析

2  PWN

3  ネットワーク

4  Web問題

5  SQLインジェクション

 

各項目の概要 と 勉強事項:

バイナリ解析 (Binary Reversing ReverseEngineering)
・コマンドとツールを覚える

コマンド:file,readelf,strings,grep,unzip,tar,gunzip,xz,strace,ltrace

ツール:デバッガ、プロセスメモリエディタ、逆アセンブラ、逆コンパイラバイナリ解析基盤、バイナリエディタ、仮想化ソフトウェア

・環境構築(32/64bit linuxwindows環境)

・表層解析  file strings grep

・動的解析  strace,ltrace デバッガ

・静的解析  アセンブラ,逆アセンブラ

 

1の勉強事項:

ツールの名前と役割を覚える。

3つの解析を再現できるようにする。

 

 

2  PWN

脆弱性看破ツール

・セキュリティ機構理解

(・文字列脆弱性

・exploit基礎(StackBaseOverFlow,FormatPrintAttack)

・exploit基礎+(ASLRの回避方法)

 

2の勉強事項:

ツールの名前と役割を覚える。

セキュリティ機構覚える。

exploitを再現できるようになる。

 

3  ネットワーク

・パケットの種類

・ファイルの分割方法

wiresharkの使い方

Python(のライブラリScapy)を使ったパケット解析

・3種類のパケット送受信方法

 

3の勉強事項:

ファイルの分割方法覚える

wiresharkの使い方を再現できるようにする。

pythonやり直す

パケット解析再現

 

 

4  Web問題

・問題に対する姿勢

・主な突破口

・突破した後何するか

 

4の勉強事項

保留(何もしない

 

 

5  SQLインジェクション

SQL基礎4構文

・インジェクション可否判定方法5種

・動作環境の判定

SQLインジェクション初歩

 

5の勉強事項

SQL基礎

インジェクション初歩の再現できるようにする。

 

 

上記を念頭にまず本を5周読む。

読んだ後に実践して再現できるようにする。

 

CTF 勉強方法 方針 目標

CTFを楽しみたい。理由:セキュリティに詳しくなりたいから。

 

ということで、CTFで戦うための技術を身に着けるためにどうやって勉強していくかを考えるための記事。

 

期間:1年

目標:CTFの全分野でwriteupを見て何をやっているかを理解し、再現することができる。

 

目標達成のための方法(ざっくり):

①本で勉強する

②師匠を作る

③サイトで勉強する

 

①について

・セキュリティコンテストチャレンジブック(以降:CTF本)

・ハッキング(以降:Hな本)

この2冊の内容を頭に叩き込んで実践。

 

②について

オンラインで探す。できればチームに入れてもらう。(社会人かつ初心者だけど入れてもらえるところないかな)

@nikoniko_entreTwitterをやっているので、もし入れていただける方いればお声掛けいただけないかなー(他力本願寺

 

③について

hority-ctf.blogspot.jp

 

こういったサイトの記事を参考にして、勉強していく。

 

 

目標達成のための方法(具体的・直近):

①CTF本の内容を頭に入れる。

→何のためにどうやって何をやるのか、を頭に入れるために本を10回読む

→→具体的に手を動かして再現できるようにする。

 

②コーディングの力を付ける。

プログラミングコンテスト攻略のためのアルゴリズムとデータ構造、という本で、

「こういうことがしたいな」と思った時にそれをコードで書き表せる力を培う。

C/C++/Python/Java/アセンブラ の基礎的な力を付ける。

 

③師匠を探す

上記①と②を並行しながら。2月中旬までに見つけたいなあ。

 

 

 

端末操作 ubuntu ショートカット

便利ショートカット見つけたから書く。

なお

Cはcontrolキー

SはShiftキー

AはAltキー

+ は同時押し

と読み替えてください。

 

C+A+t 新しい端末起動

C+S+t (端末内で)新しいタブ起動

A+1だのA+2だの タブの切り替え

C+d 現在のタブ削除

 

その他:

C+A長押し→(離してから)→左右矢印キー  タスクを自由に選べるよモード