k01ken’s b10g

He110 W0r1d!

Wiresharkをインストールする

開発環境は、Windows 7 Professional(32bit)。

1.公式サイトへアクセスする
https://www.wireshark.org/

2.ダウンロードアイコンをクリック
f:id:k01ken:20180620074917p:plain

3.Windows Installer (32-bit)をクリックしてインストーラをダウンロード
f:id:k01ken:20180620075024p:plain

4.ダウンロードしたインストーラを実行

5.Nextボタンをクリック
f:id:k01ken:20180620075036p:plain

6.I Agreeボタンをクリック
f:id:k01ken:20180620075046p:plain

7.Nextボタンをクリック
f:id:k01ken:20180620075057p:plain

8.Nextボタンをクリック
f:id:k01ken:20180620075104p:plain

9.Nextボタンをクリック
f:id:k01ken:20180620075117p:plain

10.Nextボタンをクリック
f:id:k01ken:20180620075127p:plain

11.Installボタンをクリック
f:id:k01ken:20180620075137p:plain

12.インストール中に、WinPcapのインストールが始まるので、Nextボタンをクリック
f:id:k01ken:20180620075146p:plain

13.I Agreeボタンをクリック
f:id:k01ken:20180620075202p:plain

14.Installボタンをクリック
f:id:k01ken:20180620075214p:plain

15.Finishボタンをクリック
f:id:k01ken:20180620075225p:plain

16.Wiresharkのインストールが終わったら、Nextボタンをクリック
f:id:k01ken:20180620075235p:plain

17.Finishボタンをクリック
f:id:k01ken:20180620075516p:plain

Visual Studio Code + Gitをインストールする

開発環境は、Windows 7 Professional(64bit)。

1.公式サイトへアクセス
https://code.visualstudio.com/
2.Download for Windowsと書かれたボタンをクリックし、ダウンロードする
f:id:k01ken:20180617175945p:plain

3.ダウンロードしたVSCodeSetup-x64-1.24.1.exeを実行する

4.次へボタンをクリックする
f:id:k01ken:20180617180011p:plain

5.同意するにチェックを入れて、次へボタンをクリックする
f:id:k01ken:20180617180029p:plain

6.次へボタンをクリックする
f:id:k01ken:20180617180057p:plain

7.次へボタンをクリックする
f:id:k01ken:20180617180114p:plain

8.デスクトップ上にアイコンを作成するにチェックを入れて、次へボタンをクリックする
f:id:k01ken:20180617180134p:plain

9.インストールボタンをクリックする
f:id:k01ken:20180617180151p:plain

10.インストールが終了したら、完了ボタンをクリックする
f:id:k01ken:20180617180209p:plain

11.Visual Studio Codeが起動します
f:id:k01ken:20180617180415p:plain

※すでにGitをインストールしている場合は、パスを指定してください。

12.Gitのダウンロードと書かれたボタンをクリックします

13.Gitのサイトへ飛ばされ、右側にある
青っぽい色のボタンをクリック(自分の場合は、Download 2.17.1 for Windowsと書かれていた)して、ダウンロードする。
f:id:k01ken:20180617180948p:plain

14.ダウンロードしたGit-2.17.1.2-64-bit.exeをクリックして実行する。

15.Nextボタンをクリックする
f:id:k01ken:20180617181916p:plain

16.Nextボタンをクリックする
f:id:k01ken:20180617181933p:plain

17.Nextボタンをクリックする
f:id:k01ken:20180617181951p:plain

18.Nextボタンをクリックする
f:id:k01ken:20180617182016p:plain

19.Use Visual Studio Code as Git's default Editorを選択して、Nextボタンをクリックする
f:id:k01ken:20180617182034p:plain

20.。Use Git from the Windows Command Promptを選択して、Nextボタンをクリックする。Use Git from the Windows Command Promptを選択するとWindowsコマンドプロンプトで、Gitが使えるようになる。
f:id:k01ken:20180617182051p:plain

21.Nextボタンをクリックする
f:id:k01ken:20180617182107p:plain

22.Nextボタンをクリックする
f:id:k01ken:20180617182123p:plain

23.Nextボタンをクリックする
f:id:k01ken:20180617182141p:plain

24.Installボタンをクリックする
f:id:k01ken:20180617182204p:plain

25.Finishボタンをクリックする
f:id:k01ken:20180617182403p:plain

26.コマンドプロンプトを起動して、

git

と入力して、以下のように表示された、きちんとインストールされています。
f:id:k01ken:20181211004526p:plain
もし、すでにコマンドプロンプトを起動していて、gitと入力して、認識されていなければ、コマンドプロンプトを消して、もう一度起動し、gitと入力してみてください。
環境変数PATHへは自動で追加しているはずです。

27.続いて、gitを使用する前に、emailとnameを入力しておかないと、commit(登録みたいなもの)したときに以下のようなメッセージが表示されますので、入力しておきます。
f:id:k01ken:20181211005046p:plain
以下のコマンドを順番に入力してください。
emailもnameもダブルクォートの中の値は適当で構いません。

git config --global user.email "you@example.com"
git config --global user.name "Your Name"

28.とりあえず、何か適当なプログラムを書いてみて実行してみます。
rubyで書きますが、すでにrubyインタプリタはパソコン内に入っているという前提で進めます。
上部にあるファイル - 新規ファイルをクリックします。すると、Untitled-1というファイルが作成されます。
f:id:k01ken:20180617183611p:plain

29.以下のコードを入力します。

puts "Hello VS Code!"

f:id:k01ken:20180617183714p:plain
そして、test.rbという名前で、C:ドライブ直下に、vscというディレクトリを作成して、そこに入れます。

30.エディタ下部のコンソール部分で、

cd c:\vsc
ruby test.rb

と入力すると実行されます。
f:id:k01ken:20180617185913p:plain


参考リンク
Documentation for Visual Studio Code
・使い方を習うならここのFirst Stepの欄が参考になる(英語)

RailsでBootstrap4のパッケージを使ってみる

開発環境は、Windows 7 Professional(32bit) + ruby 2.3.3p222 + Rails 4.2.1。

1.Gemfileに

gem 'boostrap', '~> 4.1.1'

を追加。
2.以下のコマンドでパッケージをインストール。

bundle install

3./app/assets/stylesheets/ディレクトリ内のapplication.cssapplication.scssにリネームする。
4.application.css内に、

@import "bootstrap";

を追加する。
同時に、

 *= require_tree .
 *= require_self

は削除しておく。
5./app/assets/javascripts/application.js内に

//= require jquery3
//= require popper
//= require bootstrap-sprockets

を追加。
6.テストしてみるために、適当なビューにて、

<%= form_tag("/create", :method => "post") do %>
<%= text_field_tag(:name) %>
<%= text_field_tag(:description) %>
<%= submit_tag("投稿",:class => "btn btn-primary") %>
<% end %>

と入力する。
実行結果
f:id:k01ken:20180616234727p:plain

リンクの色やフォントなども変わっています。

参考サイト
GitHub - twbs/bootstrap-rubygem: Bootstrap 4 Ruby Gem for Rails / Sprockets and Compass.
Railsアプリで Bootstrap 4 を利用する
submit_tag - リファレンス - - Railsドキュメント
Buttons · Bootstrap

Railsでデータベースとのやりとりをするメソッドのまとめ

開発環境は、Windows 7 Professional(32bit) + ruby 2.3.3p222 + Rails 4.2.1。

■データを追加する
・postsテーブル(モデル名はpost)のname,ageカラムにデータ(nameカラムにはTaro、ageカラムには20)を入れるとする。今回は以下に4つの方法を書いておく。

post = Post.new
post.name = "Taro"
post.age = 20
post.save

post = Post.new
post.assign_attributes(name: "Taro", age: 20)
post.save

post = Post.new(name: "Taro", age: 20)
post.save

Post.create(name: "Taro", age: 20)


■データを更新する
・idが3のデータのname,ageカラムにデータが入っているとして、新たなデータ(nameカラムには、Hanako、ageカラムには30)を入れて、データを上書きします。以下に3つの方法を書いておきます。

post = Post.find(3)
post.name = "Hanako"
post.age = 30
post.save

post = Post.find(3)
post.assign_attributes(name: "Hanako", age: 30)
post.save

# update_attributesは、assign_attributesとsaveを合わせたようなもの
post = Post.find(3)
post.update_attributes(name: "Hanako", age: 30)

# 取得した複数のレコードを一気に変更する
# urlカラムがhttp://k01ken.hatenablog.com/で始まっているレコードすべてのmobile_friendlyカラムをtrueに変更する
Post.where("url LIKE 'http://k01ken.hatenablog.com/%'").update_all(mobile_friendly: true)

参考リンク
ActiveRecord の attribute 更新方法まとめ



■データを削除する

post = Post.find(1)
post.destroy


■データを取得する

post = Post.first

# allは、Rails 3.2まではすべてのレコードをモデルオブジェクトの配列にして返していた
# Rails 4からは検索条件のないリレーショナルオブジェクトを返すようになった
posts = Post.all

# idが3のデータを取得する。存在しない数字を入力すると例外が発生
post = Post.find(3)

# 任意のカラムを使ってレコードを検索する
# 以下の場合は、nameカラムがTaroのデータを取得する
# なければnilを返す
posts = Post.find_by(name: "Taro")
# カラムは複数指定することができる
posts = Post.find_by(name: "Taro", age: 20)

# where句を使ってデータを取得する
posts = Post.where(name: "Taro")
# whereメソッドを複数つなげることで複数の条件を指定できる。
posts = Post.where(name: "Taro").where(age: 30)
# 文字列で検索条件を指定することもできる。ageが30より小さいものを取得。
posts = Post.where("age < 30")
# WHEREの否定も使える。以下はnameカラムがTaro『でない』データを取得。
posts = Post.where.not(name: "Taro")
# ハッシュの値を配列にすると、複数の候補のどれかと同じなら取得。
posts = Post.where(id: [2,7,13])
# ハッシュの値を範囲オブジェクトにすると、その範囲の値があれば取得。
posts = Post.where(id: 5..10)

whereメソッドでは、条件に文字列などを入力しますが、外部から受け取る場合、文字列中にシングルクォテーションなどを挿入して、SQLインジェクションを起こそうとする人がいるため、その対策として、プレースホルダーというものを使います。SQL文に書かれた?を文字列に置き換えます。

name = "Taro"
posts = Post.where("name = ?", name)

# プレースホルダーは複数指定できます。
posts = Post.where("name = ? AND member = ?", "Taro", true)


whereメソッドなどのリレーショナルオブジェクトは、書いた時点では実行されず、Rubyと同名の配列に関するメソッドである、eachやmapやlengthを用いることで始めて実行され、モデルオブジェクトの配列が得られる。もし、すぐにモデルオブジェクトを得たければ、

posts = Post.where(name: "Taro").load

上記のように、loadメソッドを用います。


Railsのメソッドを用いたSQLのSELECT文の書き方

メソッドはメソッドチェーンでつなげることができます。SQLと違って、つなげる順番は自由です。
select(文字列) - SELECT
from(文字列) - FROM
joins(シンボル/文字列) - JOIN - テーブルの結合
includes(シンボル) - データベースによる - 関連付けの名前を指定することで関連するモデルオブジェクトをロード。
where(ハッシュ/文字列/配列) - WHERE - 検索条件の指定
group(文字列) - GROUP
having(文字列) - HAVING
limit(整数) - LIMIT - 取得するレコード数の上限
offset(整数) - OFFSET - 何行目のレコードから取得するか指定
order(文字列/シンボル/ハッシュ) - ORDER BY - ソート対象のカラム名

# カラム名をシンボルで指定
posts = Post.where(age: 30).order(:id)
# カラム名をハッシュのキーとして、降順/昇順を :desc or :ascでハッシュの値に指定
posts = Post.where(age: 30).order(id: :desc)

reorder(文字列) - ORDER BY - ORDER BY句の上書き
reverse_order - ORDER BY - ORDER BY句の降順/昇順を逆にする
lock(文字列) - データーベースによる - MySQLのロック機能をつかう
readonly - レコードを読み込み専用にする
distinct - 検索結果の重複をなくす
none - 何も検索しないリレーショナルオブジェクトを返す


■発行されたSQL文を知る

posts = Post.all
puts posts.to_sql


SQL文を直接書く

posts = post.find_by_sql("select * from posts where name = 'Taro'")

# SQL文でプレースホルダーを用いる場合、全体を配列で指定しないといけない。
posts = post.find_by_sql(["select * from posts where name = ?", "Taro"])

Railsでデータベースからデータを受け取って表示する

開発環境は、Windows 7 Professional(32bit) + ruby 2.3.3p222 + Rails 4.2.1。

※下記のすべてのコマンド入力時は作ったアプリのディレクトリをカレントディレクトリに設定しておいてください。

■データベースを作る
railsでは最初に何も指定しなければSQliteを使うことになっている。
アプリを作成した段階でdbディレクトリ内にdevlopment.sqlite3test.sqlite3が自動的に作成されている。
・データベースの設定はconfig/database.ymlに書いてある。
 ・development(開発),test(テスト),production(本番)の3つのモードに分かれている。
・アプリのルート部分をカレントディレクトリにすると、

rake db:create

既に作られているのでここは、飛ばして良い。
データベースを削除する場合は、

rake db:drop

を入力する。


■モデルを作る
モデルは下記のようなコマンドで作成することができます。

rails generate model モデル名
rails generate model モデル名 フィールド名1:データ型1...

今回は

rails generate post

と入力します。すると、app/models/ディレクトリ内にpost.rbが作成されています。


■テーブルを作る
・モデルを作成した段階で、db/migrateディレクトリ内にマイグレーションスクリプトというファイルが作成されています。このファイルを利用することで、コマンド上からテーブルを作成することができます。
カラムのデータ型として指定可能なものは以下のサイトが参考になります。
モデルの作成とRailsで指定可能なデータ型 - Ruby on Rails入門
今回は、create_tableブロック内に以下のコードを追加。改行ごとにカンマはいりません。

	t.string :name
	t.text :description

次に

rake db:migrate

と入力することでpostsテーブルが作成されています。
次に、作ったテーブルにデータを入れてみます。
dbディレクトリにseeds.rbが作成されているので、

6.times{
	Post.create(:name => '太郎', :description => 'こんにちは。投稿になります。')
}

同じデータを6個入れてみます。実行は、

rake db:seed

これでデータが入ります。


■データベースからデータを受け取る
呼び出したいコントローラ(今回はtop_controller.rb)に以下のメソッドを追加する。

	def hello
		@posts = Post.all
	end

config/routes.rbに、

	get 'hello' => 'top#hello'

app/views/topディレクトリにhello.html.erbという名前で以下のコードを追加する。

<% @posts.each do |item| %>
	名前 <%= item.name %>, 投稿 <%= item.description %><br />
<% end %>

サーバーを

rails server

で立ち上げて、localhost:3000/helloへアクセスすると成功。CakePHPと違ってモデルと同じ名前のコントローラじゃなくても問題なく読み出せる。
CakePHPの場合は、TableRegistry::getでテーブル名を取得しないといけないが、Railsはシンプルに取得できる。

実行結果
f:id:k01ken:20180607201133p:plain


■フォームからデータベースに入れる

ビュー側の作成 - app/views/top/index.html.erb

<%= form_tag("/add", :method => "post") do %>
<%= text_field_tag(:name) %>
<%= text_field_tag(:description) %>
<%= submit_tag("投稿") %>
<% end %>

コントローラ側に追加 - app/controllers/top_controllers.rb

	def index
	end

	def add
		@post = Post.new(name: params[:name], description: params[:description])
		if @post.save
			redirect_to "/hello"
		else
			redirect_to "/index"
		end
	end

config/route.rbにて、

  	root 'top#index'
	post 'add' => 'top#add'

を追加。
これで、フォームからデータを入力して、データベースに入れることができます。

Unity2Dでサンプルサイトを参考にしてゲームを1本作ってみる

効率的に上達するためには、何か1本ゲームを作ることだろうと思い、下記の記事を参考にして、ゲームを1本作ってみたいと思いました。
【Unity入門】60分で作るシューティングゲーム 第1回 - おもちゃラボ

1.Unityを起動し、右上のNEWボタンをクリックします。
f:id:k01ken:20180607073123p:plain
2. 3Dにチェックが入っているところを2Dにチェックを入れて、Create Projectボタンをクリックします。
f:id:k01ken:20180607073155p:plain
3.ページ上部のGameタグをクリックし、Free Aspectの部分をクリックし、+ボタンをクリックし、Typeの部分をAspect Ratioにして、Width & Heightの部分に、それぞれ、9と16を入れる。Aspect Ratioにしないと画像がうまく表示されないので注意。
f:id:k01ken:20180607073810p:plain
4.下記のリンクにアクセスして、ゲームに必要な素材をダウンロードする。右上の3つの丸をクリックし、直接ダウンロードをクリックすると、ダウンロードが始まる。
Dropbox - SampleShooting_Material.zip
f:id:k01ken:20180607074151p:plain
5.ダウンロードが終わったら、解凍し、SampleShootingディレクトリ内にある.DS_Store以外のファイルをすべてを、ドラッグ&ドロップで、UnityのProjectタブのAssetsに移す。
f:id:k01ken:20180607074639p:plain
6.Assetsにあるrocketをドラッグ&ドロップでSceneタブ内のウィンドウへ移す。
f:id:k01ken:20180607074912p:plain
7. ProjectタブのCreateをクリックし、C# Scriptをクリックし、名前をRocketControllerとする。RocketControllerをクリックして、次にInspectorタブをクリックし、Openボタンをクリックします。
f:id:k01ken:20180607075248p:plain
8.スクリプトを記入して、RocketControllerをHierarchyタブにあるrocketにドラッグ&ドロップして、ゲーム実行。
f:id:k01ken:20180607080220p:plain

Unity(3D/C#編)で詰まったところ

開発環境は、Windows 7 Professional(32bit) + Unity 5.6.3f1 Personal。

■特定の要素を消したい
要素を消したければ、Hierarchyタブから消したい要素を選択し、右クリックして、Deleteを選択する。


■エディタを変更する
自分の場合は、デフォルトでは、Visual Studio 2017(Community)が使われているんですが、起動すると自分の貧弱な処理能力のパソコンで動作が重くてエディタを切り替えることにしました。
1.Unity上部のEditボタンをクリックし、Preferences...をクリックします。
2.External Toolsを選択し、External Script Editorのプルダウンメニューから、Browse...を選択すると、パソコン内のエディタが選択できるので自分の場合は、TeraPadを選択しました。(C:\Program Files\TeraPad\TeraPad.exe)
3.スクリプトInspectorタブでOpen...ボタンをクリックすると、TeraPadが起動するようになります。後は、TeraPadで書いて、保存すると、自動的に、Unity側の内容も更新されるようになります。


■GameObjectの色を変える
1.ProjectタブのCreateをクリックして、Materialをクリックする。
2.ProjectタブのAssets内の作ったMaterialをクリックし、InspectorタブのAlbedoと書かれた欄の
3.白色の四角をクリックするとColorウィンドウという色の一覧表が出るので好きな色にする。
色を選択したら、Colorウィンドウの×ボタンで閉じる。New Materialタブで色が変更されたと思います。
4.ProjectタブのAssetsのマテリアルをドラッグ&ドロップでHierarchyタブの色を変更したい
GameObjectに持っていくことで、Sceneタブの特定のGameObjectの色が変更されたと思います。


■シーンを変える
1.複数シーンを作っておく
2.Unity上部のFile - Build Settingをクリック
3.Assetタブにある読み込みたいシーンすべてをウィンドウ内にドラッグ&ドロップして、そのBuild Settingウィンドウを×ボタンで消しておく。
4.後はC#スクリプト内に以下のコードを追加する。

// コード上部に
using UnityEngine.SceneManagement;

// メソッド内に入れる
SceneManager.LoadScene("読み込みたいシーン名");

5.そのスクリプトを自分が望むもの(例えば、ボタンなど)に適用させる。


■ボタンを表示させる
1.HierarchyタブのCreateボタンをクリックし、UI - Buttonをクリックする。そうすると、Hierarchyタブに、Canvas - Buttonが追加される。
2.Hierarchyタブ内の今作ったButtonの左側にある右向きの矢印をクリックし、Textを表示し、Textをクリックする。そうすると、TextのInspectorタブが表示されるので、InspectorタブのText(Script)にSTARTと入力し、Unityを実行すると、以下のように表示される。何度押しても、何も実行されない。
f:id:k01ken:20180603183041p:plain
・ボタンの位置は、Buttonをダブルクリックして、カメラをButton基準にしてからだと、動かしやすい。


■ボタンの作成+クリックイベントの追加
1.ボタンを作る - 上記に書いている。
2.ProjectタブのCreateボタンをクリックし、C# Scriptをクリックする。
3.作ったC#スクリプトをダブルクリックし、表示させ、以下のコードを入力する。

// 以下のメソッドを追加する
	public void OnClick(){
		Debug.Log("clicked");
	}

4.ProjectタブのAssets内にある先ほど作ったC#スクリプトを、HierarchyタブのButtonにドラッグ&ドロップする。
5.HierarchyタブのButtonをクリックし、ButtonInspectorタブを表示し、On Click()の欄の+ボタンをクリックする。
6.None (Oとなっている左下のところに、InspectorタブのButtonをドラッグ&ドロップする。
7.InspectorタブのNo Functionの部分をクリックし、作成したC#スクリプト名 - OnClick()を選択する。
8.実行して、成功しているならば、STARTボタンをクリックすると、Consoleタブにclickedという文字が表示されているはず。


■GameObjectを削除する
・GameObjectを削除するには、Destroyメソッドを用います。
・今回は、CubeとButtonを作って、Buttonをクリックしたら、表示されているCubeを削除するようなプログラムを作ります。■ボタンの作成+クリックイベントの追加を参考にして、作ってみてください。

	public GameObject Cube;
	void Start () {
		Cube = GameObject.Find("Cube");
	}
	
	public void OnClick(){
		Destroy(Cube);
	}

参考リンク
Destroy - Unity



■要素を動かす(自動)
1.Unity上部のAssetsボタンをクリックし、Create - C# Scriptをクリックする。
2.Assetsタブに、スクリプトが作成されているので、それをクリックし、Inspectorタブを見て、Open...ボタンをクリックする。
3.以下のコードを追加して、保存する。

private Vector3 m_pos;
void Start(){
m_pos  = transform.localPosition;
}

void Update(){
transform.localPosition = m_pos;
m_pos.y += 0.05f;
}

4.そのC#スクリプトスクリプトを適用させたいHierarchyタブの要素にドラッグ&ドロップして、後は、Unityを実行すると、その要素は、1フレームごとに上昇していく。

参考リンク
unity_move_gameobject - FreeStyleWiki
【Unity】C#でtransform.positionの値を変更する


■操作したいGameObjectを指定するにはどうすればいいか?

	GameObject obj;
	void Start(){
		obj = GameObject.Find("GameObject名");
	}

という風に取得する。なければ、nullが入るので、受け取る変数は、初期化していないとエラーになる。

参考リンク
GameObject.Find - Unity スクリプトリファレンス


GameObjectに手持ちの画像を貼りつける
1.事前にCubeとMaterialを作成しておく。
2.作ったMaterialを右クリックして、Import New Asset...をクリックし、任意の画像を選択するとAssetsに追加される。
3.Materialをクリックして、InspectorタブのShaderをStandardからLegacy Shaders - Diffuseをクリックする。
4.Selectと書かれた四角の部分にAssetsにある画像をドラッグ&ドロップする。
5.AssetsにあるMaterialをCubeにドラッグ&ドロップすると、Cubeの各面に画像が貼り付けられている。
f:id:k01ken:20180606193740p:plain
参考リンク
第4回目:オブジェクトにマテリアルやテキスチャを適用する(後編)|Tech Book Zone Manatee


■キー入力を受け取る
・Input.GetKeyだと押しっぱなしでも毎回機能する。押している状態で発生。
・Input.KeyDown - 押していない状態から押すと発生。
・Input.KeyUp - 押している状態から離すと発生。
参考リンク
UnityのInputで入力を扱う
【Unity】2D用の、キーボードで上下左右動かせるスクリプト · GitHub