zoomzoomzoom

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

Spring徹底入門13.2 つまづき

RESTful Webサービスを作成する。

・RESTful Webサービスが起動しない。

MessageクラスとMessagesControllerクラスをcom.examle配下に作成し、DemoApplicationクラスを実行。が、localhostに何も変化なし。HelloWorldのまま。。。これでいいのか?次ページ13.2.2の図を見ると、まだブラウザ上の表示がHelloWorldのままなのでひとまずこれでよしとする。

 

・HelloControllerがhtmlを自動生成しない

教科書ではHelloControllerなるクラスを新規に作成して、コードを書き、DemoApplicationで呼び出すことでhtmlが自動生成される~と説明しているが、そのようなhtmlが作成された形跡もなく、またlocalhostの表示もなんら変更がない。ずっとDemoApplicationしか動作しておらず、その他のクラスが関連して呼び出されていない様子。

 

ここら辺でSpringについてWebでお勉強を再開。(教科書は、成功すること前提に書かれているから、落ちこぼれたときに置いてきぼりになりますよね。)

春だから!Javaでの開発にSpring Bootを使おう!

記事によると→Spring BootではXMLは書かず、Javaのコードにアノテーションを書くだけで、全て自動的に行われます。 

(やっぱ自動生成!いや、"html"は自動生成ではないぞ・・・)

記事によると→作成されたプロジェクトを右クリックして、「Run As」から「Maven install」を選びます。これで、必要なものがインストールされ、ビルドされます。

(ん?これは気になるぞ。。。Mavenインストールはしてなかったけど効果ありそう)

 

 

Mavenプロジェクトで Spring MVC の Hello World を作成する方法: ある SE のつぶやき

他で一つプロジェクトを作って学習し、それからDemoに戻ったほうが解決策を思いつくかもしれないと考えた。上記のサイトで修行することに。

Dependencesの設定のところで、検索窓に入力しても何の音沙汰もない。stackoverflowというところで解決策を発見。

"window→preferences→mavenとすすみ、download~となっているところ全てにチェック。その後Applyを押してOKを押して、STS再起動。"

再起動すると、mavenのindexの更新がかかる。再度入力。何も起こらない。

再度Google先生で検索。するとまたもstackoverflowに該当記事が。

You also need to rebuild your maven repository index in 'maven repository view'.

maven repo viewを探すのが面倒だったので、作成したmaven プロジェクトを削除して新たに作成しなおすことにした。無事indexが動き始める。

(追記:STS画面右上の小さな検索窓にmavenと入れるとmaven repoらしきものがあるのでそれを選択。すると、local,global,project,customのprojectが現れるので、globalを開き、centralの上で右クリックして、full-index-enabledにチェック。updateが始まるので完了するまで待ち、その後再びcentral上で右クリックをしてrebuild indexを選択。)

 

JDK1.8を使用するようにpom.xmlに以下を追記。

==================================

<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>

</project>←これが最後のタグになるようにコピペ!

 

プロジェクト上で右クリックして、Maven > Update Project(alt+f5)で更新完了。

===================================

コントローラーとビューの作成の手前まで進めた。 

 

これまでの操作でDemoがなぜ動かなかったか、理由を2つほど思いつく。

1dependencesのダウンロードをしていなかった?

2以下の依存関係を追記します、となっていたが、dependencesタブに書き込むだけでpom.xmlには何も記述しなかった。これが不具合の原因か?

 

 

 

達人プログラマー 気づき

新装版達人プログラマーを購入。

新装版 達人プログラマー 職人から名匠への道 | Andrew Hunt, David Thomas, 村上雅章 |本 | 通販 | Amazon

 

目次をざっと読んで、1周目の読み方は

・「具体的なコード手法」(以降"1")

・「プロジェクトの進め方」(以降"2")

・「プログラマーの生き方」(以降"3")

に関連する情報のみを素早く拾い読む、としました。

2周目はそれらの情報が書いてあったページをじっくり読もうと考えました。

3周目は全てに目を通そうと考えました。

 

実践(1周目)で得た気づき:

1章

3 いい加減な言い訳よりも対策を用意する

1 割れた窓を放置しない 

1 常に大きな視点でものを見る

3 知識ポートフォリオに投資する(分散投資かつハイリスクローリスク)

2章

1 Dont Repeat Yourself -一度作成したらそれを簡単に再利用可能にする

1 直行性(片方を変更しても他方に影響を与えない)の高いコーディングをする

「恥ずかしがりなコード」「グローバルデータへの非アクセス」「類似性のリファクタリング

2 可逆性を担保しながら進める

2 曳光弾(機能間の連絡がとれた最低限のフレームワークを素早く作成してフィードバックをもらうこと)←→プロトタイプ(曳光弾とは違い使い捨て)

2 動的なもののプロトタイプにはポストイット

2 正確に見積もる(問題把握、問題再定義、問題分解、解決策具体化、検証)

 

3章

3 一つのエディタを熟知する

3 常にソースコード管理を使用する

3 自分自身も含めて信用しない

 

4章

特になし。

 

5章
1 モジュール間の結合度合いを最小に
1 どのようにではなく何をに重点を置いて考える
1 特殊な物事はコンパイル済みコードの外側に置く ex.Beans
1 モデルとビューを分離させる(評価されるものと評価するものを分ける

 

6章
1 早めにこまめにリファクタリングする
1 テスト設計を行う

 

 

to be continued...

 

 

 

 

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周読む。

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