ひよこソン宿題


わかるところはもちろん飛ばして構いません。
必ずしも、懇切丁寧に書いていませんので、わからないところがあれば、整理しておいてもらえれば大丈夫です。そのための時間も用意しています。

## ０章　アイディアを考える

アイディアソンに備え、何をつくるか考えておいてください。
ざっくりでいいし、実現可能性なんて気にしなくていいです。
ちなみに、私が[はじめてのハッカソン](http://hackathon-firststep.doorkeeper.jp/)に参加した時は、「自分は怒りっぽいから自分がイライラしたときのログをとって見直したい」くらいのアイディアで行って、チームでそのネタをたくさん膨らませてプログラミングしました。

## １章　XAMPP

XAMPPは、次のOSS群をセットでインストールできる優れものです。
お手軽にサーバー環境が構築できるので、ひよこソンでは重宝します。
ちなみに、もともと、Xの部分がL(Linux)のLAMPPというのがあって、WindowsやMacにも対応して、XAMPPになったようです。

- Apache（Webサーバー）
- MySQL（DB）
- PHP（Webでよく使われる言語）
- Perl, Python（Webでよく使われる言語）

### インストール

1.次のURLからインストーラをダウンロードして、すべてデフォルトで実行。

http://www.apachefriends.org/jp/xampp-windows.html

2.Xampp Control Panel を起動し、Module ApacheのActionｓ Startをクリックし、次のとおり表示されることを確認。

Status change detected: running

### 設定

#### （windows限定）環境変数の編集
コントロールパネル=>システム=>システムの詳細設定=>環境変数(ボタン) =>システムの環境変数=>Path=>編集(ボタン)をクリック、以下を追加。

```dos
;C:\xampp\php
```

#### php.iniの編集

デバッグの詳細情報を確認できるように設定を変更します。
xamppインストールフォルダ配下の`php\php.ini`をエディターで開いて編集する。以下の行のコメントアウトを外します。
その後、OSを再起動し、XAMPPのControl PanelからApacheを起動します。

```ini:windowsの場合の例
[XDebug]
zend_extension = "C:\xampp\php\ext\php_xdebug.dll"
xdebug.profiler_append = 0
xdebug.profiler_enable = 1
xdebug.profiler_enable_trigger = 0
xdebug.profiler_output_dir = "C:\xampp\tmp"
xdebug.profiler_output_name = "cachegrind.out.%t-%s"
xdebug.remote_enable = 0
xdebug.remote_handler = "dbgp"
xdebug.remote_host = "127.0.0.1"
xdebug.trace_output_dir = "C:\xampp\tmp"

; CakePHP3のインストールに必要
extension=php_intl.dll

; 以下のようにタイムゾーンをTokyoに修正
date.timezone = "Asia/Tokyo"
```

## （オプション）テキストエディタ

XAMPPとは関係ないですが、以降の作業でコードを色々書くので、私がよく使っているテキストエディタをご紹介します。

http://itagakishintaro.blogspot.jp/2014/02/sublime-textjavascript.html

# ２章　GitHub

## gitインストール

### windows

msysgitからのインストール方法を簡単に説明します。

1.次のURLからインストール

http://msysgit.github.io/
※インストールオプションはデフォルトでもいいですし、意味を検索して調べて好みのとおりにしてもいいです。

2.コマンドプロンプトで、次のコマンドを入力して動作確認。

```dos
git --version
```

### mac

brewを使ったインストール方法を簡単に説明します。

1.ターミナルを起動し、次のコマンドを入力。

```bash
brew install git
```

2.コマンドプロンプトで、次のコマンドを入力して動作確認。

```bash
git --version
```

## GitHubアカウント作成

https://github.com/

## GitHubのSSH設定

基本は次のサイトのとおりです。

https://help.github.com/articles/generating-ssh-keys/#platform-all

以下、簡単に説明します。

### 鍵の作成

#### windows

Git Bashを起動し、次のコマンドを入力。

```dos
ssh-keygen -t rsa
```

#### mac

ターミナルを起動し、次のコマンドを入力。

```bash
cd ~/.ssh
ssh-keygen -t rsa
```

passphraseを聞かれますが、色々と面倒なので、私は空にしてしまっています（ダメかな）。
どこに鍵ができたか表示されます。

- id_rsa: 秘密鍵
- id_rsa.pub: 公開鍵

### GitHubに鍵を設定

1.GitHubにログインし、画面右上の歯車[Settings]をクリック。

![itagakishintaro.png](https://qiita-image-store.s3.amazonaws.com/0/50720/b1cb1f24-183a-3b41-889b-1b46d7307649.png "itagakishintaro.png")

2.画面左の[SSH Keys]をクリック。

3.[Add SSH key]ボタンをクリック。

4.作成した公開鍵（id_rsa.pub）をテキストエディタで開く。

4.[Title]には適当な名前を入力し、[Key]に作成した公開鍵のテキストをコピーして貼り付ける。

5.[Add key]ボタンをクリック。

## リポジトリ作成とpush

### バージョン管理するフォルダを用意する

適当なフォルダとファイルを用意します。
以下、hiyokothon/index.htmlとして説明します。

### リポジトリ作成

1.画面右上の[Create new]から、適当な名前でリポジトリを作成する。

![GitHub.png](https://qiita-image-store.s3.amazonaws.com/0/50720/d46db4a0-85bc-0fb0-033a-e36e0a36d570.png "GitHub.png")

2.作成後の画面を確認。

![itagakishintaro hiyokothon.png](https://qiita-image-store.s3.amazonaws.com/0/50720/009cbad8-6e17-051f-62b8-499c691cf008.png "itagakishintaro hiyokothon.png")

3.先ほどの画面を参考に、次のコマンドを入力（windowsはGit Bashから）。

画面はREADME.mdを作ってpushする流れだが、すでにあるhiyokothonフォルダを登録する流れに変えているので注意。

```bash
cd hiyokothon
git init
git add index.html
git commit -m "first commit"
git remote add origin https://github.com/***/***.git
git push -u origin master
```

## コラボレーター設定

ひよこソンでは、共同作業をします。
Pull Requestというのもありますが、手っ取り早く、コラボレーター（共同編集者）にして作業するのが簡単です。
コラボレーター設定は、次の手順で設定できます。
やり方だけ覚えておきましょう。

1. リポジトリの画面の右下のスパナマーク[Settings]
2. 画面左メニューの[Collaborators]

## Gitの基本コマンド

以下のサイトがわかりやすいので、そこをみるとよいです。

http://www.backlog.jp/git-guide/

以下を覚えていれば、とりあえず、ひよこソンはできます。
**やったことない人は、読んで分かった気になるだけでなく、必ず実際に実行してみましょう。**
windowsは全てGit Bashから実行します。

### 概要

全体の流れは次のとおりです。

1. GitHubからソースをローカル環境にダウンロードする（clone）
2. GitHub上の変更をローカル環境に取り出す（pull）
3. ローカル環境で、ソースコードを変更し、コミットする（add, commit）
4. GitHubに反映する（push）

### clone

手順「リポジトリ作成とpush」で自分で作ったリポジトリの場合は、cloneしなくても、ローカル環境にソースがあるので不要です。
誰かが作ったリポジトリにコラボレーター設定してもらった場合に実施します。
（コラボレーターでない場合ももちろんcloneできますが。）

1.cloneしたいリポジトリにアクセスし、画面右の[HTTPS clone URL]をコピー。

2.以下のコマンドを入力

```bash
git clone コピーしたURL
```

### pull

作業を開始する前に、誰かが変更しているかもしれないので、まずそれを反映します。
他の人の作業と競合が発生しないように、細かい単位でpullからpushをするのがいいと思います。

```bash
git pull origin master

```

このoriginというのはGitHubのリポジトリです。
masterというのはメインのブランチです。
ひよこソンではブランチは使わないでOKなので説明しませんが、勉強しておいて損はないです。

### add

何か作業をしたら、コミットの対象を選択する必要があります。
バージョン管理しているフォルダ（hiyokothon）に移動し、次のコマンドを入力します。

```bash
git add .
```

これは、全部をコミット対象にしています。
個別にしたいときは個別指定ももちろんできます。

### commit

コミット対象にしたらコミットします。
コミットメッセージは、内容がわかるようにちゃんと書きましょう。

```bash
git commit -m "コミットメッセージ"
```

この時点で、ローカルPCのリポジトリに記録されました。
何かあったときに、戻したり、変更差分をみたりできます。
ただし、GitHubにはまだ登録されていません。

### push

ローカルPCでコミットしたら、GitHubにも登録します。

```bash
git push origin master
```

GitHubにアクセスし、変更が反映されているか確認しましょう。

### 競合

競合が発生した場合は内容を確認し、競合を解消します。
競合が発生しているファイルは以下のマーキングがされているので、適切に修正し、コミットしなおします。

```bash
<<<<<<< HEAD
（自分の変更）
=======
（他の人の変更）
>>>>>>> （他の人の変更のコミットID）
```

### reset

色々いじったけど、１つ前のコミット状態に戻したいときは次のコマンド。

```bash
git reset --hard HEAD^
```

`HEAD^`の部分にコミットIDを指定すれば、そこまで戻れます。
コミット番号は`git log`で確認できます。

## （オプション）GitのGUIクライアント

コマンド操作が嫌いな人は、SourceTreeなんかをダウンロードして使うといいかもしれません。 

# ３章　bootstrap

bootstrapはレスポンシブデザイン（スマホとか小さな画面のときにCSSを切り替えてちゃんとみれるやつ）に対応したCSSライブラリです。
スマホでもみれて、キレイなデザインの画面を簡単に作れるので時間が少ないひよこソンでは重宝します。

## ダウンロード

http://getbootstrap.com/getting-started/#download
のBootstrap

### テンプレート

以下のURLの[Basic template]をベースにhtmlファイルを作成し、ダウンロードして回答したフォルダの直下に配置して、色々いじってみましょう。

http://getbootstrap.com/getting-started/#download

## レスポンシブデザイン

次のページでレスポンシブデザインを反映するための仕様を確認しましょう。

http://getbootstrap.com/css/

ポイントは、次のとおりです。

- containerで全体を囲む
- rowで行を指定する
- 列は12分割されたグリッド構成になっている
- col-md-?で何グリッド幅かを指定する

ブラウザの幅を狭くした時にデザインがちゃんと切り替わることを確認しましょう。

```html
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Bootstrap 101 Template</title>

    <!-- Bootstrap -->
    <link href="css/bootstrap.min.css" rel="stylesheet">

    <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
    <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
    <!--[if lt IE 9]>
      <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
      <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
    <![endif]-->
  </head>
  <body>
    <h1>Hello, world!</h1>

<div class="container">
<div class="row">
  <div class="col-md-1">.col-md-1</div>
  <div class="col-md-1">.col-md-1</div>
  <div class="col-md-1">.col-md-1</div>
  <div class="col-md-1">.col-md-1</div>
  <div class="col-md-1">.col-md-1</div>
  <div class="col-md-1">.col-md-1</div>
  <div class="col-md-1">.col-md-1</div>
  <div class="col-md-1">.col-md-1</div>
  <div class="col-md-1">.col-md-1</div>
  <div class="col-md-1">.col-md-1</div>
  <div class="col-md-1">.col-md-1</div>
  <div class="col-md-1">.col-md-1</div>
</div>
<div class="row">
  <div class="col-md-8">.col-md-8</div>
  <div class="col-md-4">.col-md-4</div>
</div>
<div class="row">
  <div class="col-md-4">.col-md-4</div>
  <div class="col-md-4">.col-md-4</div>
  <div class="col-md-4">.col-md-4</div>
</div>
<div class="row">
  <div class="col-md-6">.col-md-6</div>
  <div class="col-md-6">.col-md-6</div>
</div>
</div>

    <!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
    <!-- Include all compiled plugins (below), or include individual files as needed -->
    <script src="js/bootstrap.min.js"></script>
  </body>
</html>
```

## ラベル、ボタンなどなど

以下のURLでCSSやComponentsのページを参照して、ラベルとかボタンとかを適当につけたhtmlをつくってみましょう。
bootstrapの仕様にあわせて、class属性をつければ、デザインが反映されます。

http://getbootstrap.com/

JavaScriptのページもみて、ぜひいじってみましょう。
 
# ４章　jQuery

## 基本

以下のURLのソースを画面右下の[Download ZIP]でおとすか、cloneしましょう。
READMEの「jQuery01_ボタンと連動してテキストを変える」をやってみましょう（他はやらなくていいです）。

https://github.com/NobuyaIshikawa/jQuery-intro-work

## CSSの変更

以下のURLを参考に、CSSを変えて、デザインを変更する処理をしてみましょう。

http://semooh.jp/jquery/api/css/css/name%2C+value/

## Web API

以下のURLを参考に、Web API呼び出しをやってみましょう。
ページの一番下にjQueryを用いたサンプルコードがあります。

http://www.itdashboard.go.jp/DataFeeds/webapi#300

## その他

以下のURLを参考に、JQueryで色々試してみましょう。

http://semooh.jp/jquery/

## jQuery UI

以下のURLを参考に問題を解いてみましょう。

http://jqueryui.com/draggable/
http://jqueryui.com/droppable/
http://jqueryui.com/resizable/

問題

```html
<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>jQuery-UIでドラッグドロップ</title>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.11.0/jquery-ui.min.js"></script>

<style>
div{
	width: 150px;
	height: 150px;
	margin: 10px;
	color:#fff;
	text-align: center;
}

#div1 {
	background:blue;
}

#div2{
	width: 640px;
	height: 480px;
	background:green;
}

#div3{
	width: 250px;
	height: 250px;
	background:gray;
}

</style>

<script>
$(function() {
	$( "#div1" ).draggable();
	// Q1.上記コードを拡張して、ドラッグ開始時に背景色を赤に、ドラッグ終了時に青にする処理を加える

	$( "#div3" ).droppable({
		accept : "#div1"
	});
	// Q2.上記コードを拡張して、"#div1"が"#div3"内にドロップされたら背景色を黒に、"#div1"を外に出したら灰色にする処理を加える
	// Q3.さらに拡張を加え、"#div3"を"#div2"内でドラッグ可能にする
	// Q4.おそらく重なり順の定義をしたくなると思うので、CSSに記述する（CSS3おさらい）。
	// Q5.時間が余った場合はリファレンスサイトを参照しながら思い思いに拡張してみてください。
});
</script>
</head>
<body>
	<div id="div1" style="position: relative;">
		ドラッグ
	</div>
	<div id="div2">
		<div id="div3">
			ドロップ場所
		</div>
	</div>


</body></html>
```

# ５章　（できるところまででいい）コードを書いてみよう

以下のURLのソースを画面右下の[Download ZIP]でおとすか、cloneしましょう。
READMEに従って、ポーカーの役判定プログラムをつくってみましょう。
わからないところは、質問できるように整理しおきましょう。

https://github.com/ototadana/poker-core
 
参考：javascriptでforEachとか
[JavaScriptでforEach, filter, map, reduceとか - Qiita](https://qiita.com/itagakishintaro/items/29e301f3125760b81302)