達人プログラマー 気づき
新装版達人プログラマーを購入。
新装版 達人プログラマー 職人から名匠への道 | 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のソースは、下記で読める。
・(気づき)starterの便利さ
starterはライブラリの依存関係とバージョン管理をまとめてやってくれる。starterとautoConfigurationと組み合わせて大きな意味での「初期設定」がスキップできてしまう。すごい時短になる。
starterのソースコードは下記。
・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
(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)
- レジストリエディタを開く(ファイル名を指定して実行(ウィンドウズキー+R)⇒regeditと入力⇒OK
- ファイルにエクスポートする(メニューからファイル⇒エクスポート、エクスポート範囲にすべてを選択して保存)
レジストリを編集する
- 左側のツリーからコンピュータ > HKEY_CLASSES_ROOT > * > shellを開く
- 「shell」の上で右クリックし、「新規」⇒「キー」を選択
-
新しいキー#1が追加されるので、これを右クリックし、「名前の変更」で「Vimで開く」に変更する
-
「Vimで開く」の上で右クリックし、「新規」⇒「キー」を選択
-
新しいキー#1が追加されるので、これを右クリックし、「名前の変更」で「command」に変更する
-
「command」を選択し、右欄に表示されている「(既定)」を右クリック⇒修正(M)を選択
-
「値のデータ」欄に以下の形式で入力し、OK
ディレクトリを英語表記に
なんでもいいのでフォルダを開いて、ツール→フォルダーオプションから
表示タブの設定で、
●「ファイルとフォルダーの表示」の「隠しファイル、隠しフォルダー、および隠しドライブを表示する」
にチェックと、
□「保護されたオペレーティングシステムファイルを表示しない(推奨)」
のチェックを外す。
デスクトップに出てきたdesktop.iniのLocalizedResourceNameの項目の先頭に ; を入れる。
その後再起動をかける(←重要)
タッチパネルの無効化
winボタン押して「設定」と入力→システム→タブレットモード→その画面内で無効設定。
Bashを使えるようにする。
こちらを参照。
https://rcmdnk.com/blog/2016/06/05/computer-windows-ubuntu-bash/
win+矢印でソートするときに、タスクが自動で表示されないようにする。
設定 -> システム -> マルチタスク -> ウィンドウをスナップしたときに横に配置できるものを表示する -> オフ
サイトからインストーラダウンロード。
(チェックのつけ方の参考:http://digitalbox.jp/cygwin-on-windows10/)
java開発環境を整える。
後日記述
c++開発環境を整える。
後日記述
アルゴリズムとデータ構造 forプロコン
プログラミングコンテスト攻略のためのアルゴリズムとデータ構造という本を購入
勉強の動機:
C++の能力・データ構造知識・基礎アルゴリズムを身につけたい。
本の概要:
1オンラインジャッジ活用方法
2アルゴリズムとは
3初等的整列(初等的ソート)
4データ構造概説
5探索
6再帰・分割統治
7高等的整列
8木
9二分探索木
10ヒープ
11動的計画法
12グラフ
13重み付きグラフ
14高度なデータ構造
15高度なグラフアルゴリズム
16計算幾何学
17動的計画法
18整数論
19ヒューリスティック探索
勉強方法:
各アルゴリズムでどのような操作が実現できるか覚える(デメリットも併せて)
必須の数学の知識はその都度勉強する
コーディングしまくる
とりあえず11まで進める。
CTF本 概要まとめ 勉強方針
本の内容
1 バイナリ解析
2 PWN
3 ネットワーク
4 Web問題
各項目の概要 と 勉強事項:
1バイナリ解析 (Binary Reversing ReverseEngineering)
・コマンドとツールを覚える
コマンド:file,readelf,strings,grep,unzip,tar,gunzip,xz,strace,ltrace
ツール:デバッガ、プロセスメモリエディタ、逆アセンブラ、逆コンパイラ、バイナリ解析基盤、バイナリエディタ、仮想化ソフトウェア
・環境構築(32/64bit linux とwindows環境)
・表層解析 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の勉強事項
保留(何もしない
・SQL基礎4構文
・インジェクション可否判定方法5種
・動作環境の判定
・SQLインジェクション初歩
5の勉強事項
SQL基礎
インジェクション初歩の再現できるようにする。
上記を念頭にまず本を5周読む。
読んだ後に実践して再現できるようにする。
CTF 勉強方法 方針 目標
CTFを楽しみたい。理由:セキュリティに詳しくなりたいから。
ということで、CTFで戦うための技術を身に着けるためにどうやって勉強していくかを考えるための記事。
期間:1年
目標:CTFの全分野でwriteupを見て何をやっているかを理解し、再現することができる。
目標達成のための方法(ざっくり):
①本で勉強する
②師匠を作る
③サイトで勉強する
①について
・セキュリティコンテストチャレンジブック(以降:CTF本)
・ハッキング(以降:Hな本)
この2冊の内容を頭に叩き込んで実践。
②について
オンラインで探す。できればチームに入れてもらう。(社会人かつ初心者だけど入れてもらえるところないかな)
@nikoniko_entreでTwitterをやっているので、もし入れていただける方いればお声掛けいただけないかなー(他力本願寺
③について
こういったサイトの記事を参考にして、勉強していく。
目標達成のための方法(具体的・直近):
①CTF本の内容を頭に入れる。
→何のためにどうやって何をやるのか、を頭に入れるために本を10回読む
→→具体的に手を動かして再現できるようにする。
②コーディングの力を付ける。
→プログラミングコンテスト攻略のためのアルゴリズムとデータ構造、という本で、
「こういうことがしたいな」と思った時にそれをコードで書き表せる力を培う。
C/C++/Python/Java/アセンブラ の基礎的な力を付ける。
③師匠を探す
上記①と②を並行しながら。2月中旬までに見つけたいなあ。