zoomzoomzoom

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

本の選び方と読み方

学習をする上で避けては通れない本という存在について、私の実践していることを記載しました。

1.いい本を買う方法

2.本の速読法

 

1.いい本を買う方法

・いい本とは:自分が欲しい内容が書いてある本のこと。
・まず著者を見る
→著者のバックグラウンドは本の内容にリンクしているか。釣りに関する本を選ぼうとしてコンサルタントが書いた本を選んでいないか?そんなに極端ではなくとも、たとえば2年釣りをしている人と、10年釣りをしている人では内容の深みに違いが出てくる。だいたい本の背表紙に著者の経歴があるので目を通すこと。
 
・次に目次を見る
→目次の内容がとっちらかっていないか?やたらと項目数が多くないか?目次は本の内容がいかに整理されているか判断するための指標になる。目次が「単なる本の内容の抜粋」になっている本は駄本。
 
・最後に内容、飛躍の有無
→やっと内容のチェック。
→内容チェックポイント1:読みたい内容かどうか。たとえば釣りのことを知りたいのに、選ぼうとしている本の中で、釣りの内容は他の項目の説明をするための例え話にしか使われていない、という場合はその本は棚に戻したほうがよい。
→内容チェックポイント2:著者の説明の飛躍についていけるかどうか。たとえば経済に関する書籍で「北朝鮮からのミサイルが日本近海に落下した翌日の為替相場は円安ドル高基調となるが、」という一文があったとする。この、有事→円安ドル高 という論理の流れには、有事→(ちょっとかじったことある人ならわかる前提知識)→円安ドル高のようになっており、人によっては論理の飛躍ともとれる文が存在していることがある。もし現時点で著者の論理展開についていけないことが多そうなら、もっと平易な説明をしてくれる本を数冊読んでからその本を選んだ方がいい。
為替相場の話は一例です。実際の相場変動の結果には一切責任を負いません。
 

2.本の速読法

・心構え
→役立つ内容なんてせいぜい20%くらいだ、と考えること。自分の日常に変化をもたらす内容が、一冊の本の情報量の20%もあれば大儲け、くらいの感覚で読む。
 
・綺麗に読まない
→書き込みしないで綺麗に読もうとする人がいるが、誰かにあげようとしているのか?それとも読んだ後に売ろうと考えているのか?自分の頭に入れるためにメモ書きをしたりドッグイヤーを付けておく方があなたへのメリットは大きい。
 
・カバーと帯は外す
→ペラペラなって邪魔だし気が散る。少しでも気が散るものは取り除く。本は内容が命。装丁は無駄。
 
・同じ種類の書籍を3冊見る
→最近は3冊も見なくても、1冊+関連webサイトふらふら、でもオッケー。よく出てくる単語と言い回しが重要なので、それらに注意して読めばよいとわかる。見る、と書いたのは、立ち読みでもできるから。別に買わなくてもよい。
 
・目的を決めてその箇所だけ読む
→読むというより、ゆっくりめくる動作になるはず。目的を忘れないで読むと言い換えても良い。途中で目的を忘れると、読み終わった後に「で、何を読んだんだっけ?」となる。
 
・人に教えるつもりで読む
→もちろん本を読む目的に沿った内容だけで良い。読んだ内容を人に説明するつもりで読むと「あ、ここの論理ちゃんと追えてないな」と気づける。その論理を補完するところだけ追加して読めば良い。
 
※注意点
内容を頭に入れることはこの方法でいくらか効率化できますが、重要なことは実践に移せるかです。つまり本を読み終わった後が一番大事です。
 
参考になった!や、この方がもっと効率的に本を読める!等あればコメントください。

LPIC攻略法

LPIC101,102,201,202,303を4ヶ月で取得した経験をもとに、効率的な対策法をまとめました。
 
LPICとは?
 
LPICの受験動機
→そもそもシェル芸が好きで体系的に知識を身につけたかった。
Linuxのプロフェッショナル?かっこいい!
→セキュリティのプロフェッショナルになりたいけど、何勉強すればいいかわからない。広く使われているLinuxがどのような生態系なのか学ぶことは無駄にはならないはず!
→→勉強している途中からは、この資格取ってもいきなり何かできるようになるということはないということを悟る。が、最低限の知識を身につけることは出来ると継続を決意。
→対外的にある程度のLinuxを使えるとアピールできる。
 
レベル別対策法・・・この勉強法は次の4つのレベルに適している。
・101(合格時得点:740)、102(710)、201(750)、202(650)
Ping-Tというサイトで勉強あるのみ。(101用コンテンツは無料なのでお試しあれ)
Ping-Tは、ウェブ問という選択肢問題の対策、コマ問という直接入力タイプ問題の対策、の2つに分かれている。このうち、ウェブ問をひたすら繰り返す。最初は何を問われているかすらわからないと思うが、解説をよく読むだけで合格するために必要な知識が身につく。
ウェブ問を4周やること。4周のやり方は下記。
 
1周目:問題すら読まない。解答だけを読む。具体的操作方法は、正答を選択(右下ボタン→解説表示→読む→次へ   の繰り返し。終わったら解答履歴クリアして初期状態に戻す。
2周目:単元別に最初から解いてみる。だいたい解けないけど。解説を読んで、あーそうだったわと思い出す。全項目終わったら解答履歴クリアして初期状態に戻す。
3周目:単元別に最初から解いてみる。まだ解けないかもしれない。でも解けない問題はストックされるのでひたすらやる。全部銀にできたら終わり。
4周目:全部金にできたら終わり。
 
基本はこれで受かる。なお、202だけはPing-Tの解説内容を別途ノートにまとめた。知識量が多く、Ping-Tだけでは知識がとっちらかってテストの際に思い出せない。1周目終わり頃に悟った。
 
202のノートの作り方
単元別にまとめる。
マインドマッピングを使った。画像で覚えることができ、すごく頭に残るようになった。
要望があればアップします。
 
303(合格時得点:660)
関連書籍のみ。Ping-Tは303に対応していないため。

Amazon CAPTCHA

この本1冊で十分合格することができます。アマゾンのレビューなどではかなり辛口の評価もあり、私自身も不安でしたが、大丈夫です。この本だけでいけます。
 
解説を読む際、知識のインプットの際に下記事項に気をつけること。
・大文字小文字
・password passwords passwdなどの微妙な違い
・間違えた場合には「次は問題文のどこに注目したら答えを導けるか」を考えること。
 
 
FAQ
Ping-Tだけで合格できますか?
→出来る。「それは人による」とか言いません。出来ます。試験範囲の知識量はPing-Tのみで足りる。ウェブ問題も本番とかなり類似している。
 
実機で練習した?
→全くしていない。Ping-Tのみで合格できる。実機の練習は必要ない。合格した後、実機で確認する方が効率がいいと考えている。実機で勉強しようとすると「あー環境構築面倒だな」等と考えて結局勉強しない等精神面のデメリットが大きいのではないでしょうか。合格した後に知識の確認で実機練習しても遅くないですよ。
 
各レベルどれくらいで取得した?
101(4/28-5/6)
102(5/8-5/29)
201(6/20-7/1)
202(7/8-8/5)
303(8/7-8/26)
多分これくらいの期間勉強していたと思います。202試験がとにかく大変だった記憶です。
 
必要経費は?
101〜202試験費用が各16,200円
303受験費用が32,400円
ping-t6ヶ月プレミアム費用が5000円
303書籍代が3,000円
全部で10万円強でしょうか。※20170907編集
 
コマ問はやらなくていいの?
→4周終わった後時間があればやってもよい。やる場合、実際にコマンドを打つのは学習時間がもったいないので、次のようにする。つまり、考える、答えを表示、あってるかあってないか確認、次へ。
 

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++開発環境を整える。

後日記述