JSの森を歩いてみる

参考にしたもの
http://qiita.com/koki_cheese/items/c559da338a3d307c9d88
https://www.amazon.co.jp/JS-Node-js%E3%81%AB%E3%82%88%E3%82%8BWeb%E3%82%AF%E3%83%AD%E3%83%BC%E3%83%A9%E3%83%BC-%E3%83%8D%E3%83%83%E3%83%88%E3%82%A8%E3%83%BC%E3%82%B8%E3%82%A7%E3%83%B3%E3%83%88%E9%96%8B%E7%99%BA%E3%83%86%E3%82%AF%E3%83%8B%E3%83%83%E3%82%AF-%E3%82%AF%E3%82%B8%E3%83%A9%E9%A3%9B%E8%A1%8C%E6%9C%BA/dp/4883379930/ref=sr_1_1?ie=UTF8&qid=1490742886&sr=8-1&keywords=web%E3%82%AF%E3%83%AD%E3%83%BC%E3%83%A9%E3%80%80nodejs

nodejs
http://qiita.com/ozawan/items/86ca7551d59005128892
http://qiita.com/megane42/items/2ab6ffd866c3f2fda066

npm
http://sadakoa.hateblo.jp/entry/2016/06/03/084623

bower
https://liginc.co.jp/web/programming/other-programming/134044

grunt 

yo

Yeoman
http://qiita.com/sys1yagi/items/4d8c2994580c274fd3fa
http://yosuke-furukawa.hatenablog.com/entry/2013/07/04/085814

CoffeeScript

#nodejs

汎用となったJSの言語・実行環境


##nvm
nodejsのバージョン管理プログラム
https://github.com/creationix/nvm

取ってくる

```
git clone https://github.com/creationix/nvm.git ~/.nvm
source ~/.nvm/nvm.sh
```

最新版をフェッチ

```
cd ~/.nvm
git fetch
```

バージョンを確認

```
nvm --version
```

bashにパスを書く（どこに書くかはお好みで）

```
vi ~/.bashrc
...
if [[ -s ~/.nvm/nvm.sh ]];
 then source ~/.nvm/nvm.sh
fi
```

リモートにあるバージョンを確認

```
nvm ls-remote
```

最新の安定版をインストール

```
nvm install stable
```

nodeのバージョンを確認

```
node -v
```

##npm
nodejsのパッケージマネジャ

インストール
(Fedora 25)

```
sudo yum install npm -y
```

プロジェクトの初期設定をする

```
npm init
```

パッケージをインストール

```
#普通にインストール
npm install <package-name>

#package.jsonのdependenciesに記述
npm install --save <package-name>

#package.jsonのdevDependenciesに記述
npm install --save-dev <package-name>
```
オプションのち外はこんな感じ

|directive|description|
|---|---|
|dependencies|実行時に必要となるパッケージ|
|devDependencies|ビルド時だけに必要となるパッケージ|

package.jsonに基づいて依存関係のあるパッケージをインストールする

```
npm install
```


##bower
フロントサイドで使用するツールのパッケージマネジャ
https://bower.io/

インストール

```
npm install bower -g
```

バージョンの表示

```
bower -v
```

プロジェクトの初期化

```
bower init
```

パッケージのインストール

```
bower install <package-name> --save
```

ライブラリを検索

```
bower search ライブラリ名
```

キーワードから該当するものを検索

```
bower lookup ライブラリ名
```

bower.jsonに記載されているライブラリを確認

```
bower list
```

##yo

雛形作成ツール

##grunt

タスクランナー


##Yeoman

Google社が作成した総合開発ツール群
曰く、
>昔々、yeomanはYoとBowerとGruntをラップした一つのツールであり、全部をyeomanというコマンドで実行していました。yeoman 1.0からこの依存状態を解消し、それぞれを別々のツールに分離したため、このような構成になっています。これにより、yoの汎用性が高まるのと同時にgrunt、bower、yo、それぞれの役割が明確になりました。


#MEAN
できない
参考
http://www.atmarkit.co.jp/ait/articles/1412/01/news041_3.html

|頭文字|構成要素|
|---|---|
|M|MongoDB|
|E|express|
|A|AngularJS|
|N|Node.js|

Angular cliのインストール

```
npm install -g angular-cli
```

gruntのインストール

```
npm install -g grunt-cli
```

mean-cliのインストール

```
npm install -g mean-cli
```

MEANスタックのひな型ディレクトリを作成
ディレクトリに移動
必要なモジュールをインストール

```
mean init sampleProject
cd sampleProject
npm install
```






##MongoDB
https://www.mongodb.com/
https://utage.headwaters.co.jp/blog/?p=5065





##express

##AngularJS

##Node.js


#Heroku
nodejsをデプロイできるPaaS
https://devcenter.heroku.com/categories/reference


##インストール

```
# <OS>は次のどれかで置換する：“linux”, “darwin”, “windows”, “freebsd”, “openbsd”
# <ARCH>は次のどれかで置換する：“amd64”, “386” or “arm”
wget https://cli-assets.heroku.com/branches/stable/heroku-<OS>-<ARCH>.tar.gz
#これはあれば不要
mkdir -p /usr/local/lib /usr/local/bin
tar -xvzf heroku-OS-ARCH.tar.gz -C /usr/local/lib
ln -s /usr/local/lib/heroku/bin/heroku /usr/local/bin/heroku
# /usr/local/binにパスが通っていれば使える
```

バージョン確認

```
heroku version
```

ログイン

````
heroku login
```

##デプロイの流れ

```
cd <app-path>
git init
git add .
git commit -m "comment"

##herokuのリモートレポジトリを作成（アプリが作られる）
heroku create

##リモートリポジトリの一覧を表示
git remote -v

##herokuへプッシュ（デプロイ）
git push heroku master
```

#MySQLと接続
参考
http://qiita.com/PianoScoreJP/items/7ed172cd0e7846641e13
http://dev.classmethod.jp/server-side/node-js-server-side/node-js-mysql-get-data-from-table-record/


接続

```
//モジュールの呼び出し
var mysql      = require('mysql');

//設定
var connection = mysql.createConnection({
  host     : 'hostname',
  user     : 'DB-user-name',
  password : 'password'
});

//コネクションでエラー処理
connection.connect(function(err) {
  if (err) {
    console.error('error connecting: ' + err.stack);
    return;
  }
  console.log('connected as id ' + connection.threadId);
});
```

herokuでmysqlを使用するには環境変数を参照し、インスタンスプールを使用する必要あり

```
var mysql	= require('mysql'			);
module.exports = mysql.createPool(process.env.DATABASE_URL);
```



#AngularJS

JSのフレームワーク

How to create a model
var myApp = angular.module('myModule', []);

How to create a controller in angular
var ngController = function($scope) {}

what is a module
a controller for different parts of your application. i.e. controllers, services, directives, filters, etc

what is a controller
a JavaScript function. the joy of the controller is to build a model lfor the view to display.

What is services?
A service in AngularJS is simply an object that provide some sort of services that can be reused with in an Angular application.

why do we need services?
Services encapsulate reusable logic that does not belong anywhere else (i.e. directives, filters, views, models, controllers)

what are the benefits of using services?
Resusability
Dpendency Injection
Testability


ng-model
使用可能タグ
input, select, texarea

#ハイブリッドアプリ

##ionic

###Androidで実機run

こんなエラーがでたら

```
Error: Failed to find 'ANDROID_HOME' environment variable. Try setting setting it manually.
Failed to find 'android' command in your 'PATH'. Try update your 'PATH' to include path to valid SDK directory.
```

環境変数を設定する

```
export ANDROID_HOME=<Android SDKのパス>
```
さらにこんなエラーがでたら

```
Error: /home/kenta/work/cutePuppyPics/platforms/android/gradlew: Command failed with exit code 1 Error output:
FAILURE: Build failed with an exception.

* What went wrong:
A problem occurred configuring root project 'android'.
> You have not accepted the license agreements of the following SDK components:
  [Android SDK Platform 25].
  Before building your project, you need to accept the license agreements and complete the installation of the missing components using the Android Studio SDK Manager.
  Alternatively, to learn how to transfer the license agreements from one workstation to another, go to http://d.android.com/r/studio-ui/export-licenses.html

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.
```

https://teratail.com/questions/73333

他にも
https://teratail.com/questions/73333



##Promise
what is promise

通常

```
A(function(a) {
  B(a, function(b) {
     C(b, function(c) {
        done(c);
     }
  }
});
```

Promise

```
A().then(B).then(C).then(done);
```


##CoffeeScript
いろいろ簡単にできるJSのラッパー言語

インストール

```
npm install -g coffee-script
```

実行

```
coffee sample.coffee
```

#データ形式

|名前|description|
|---|---|
|JSON|{"key":"value",...}|
|JSON5|JSONの改良版。コメント記入可。キーはダブルクォーテーション不要。データの末尾にカンマ可。|
|CSON|CoffeeScriptのJSON|
|XML/RSM|タグを使用|
|YAML|インデントを使用|
|INI|name=value|
|CSV/TSV|言わずもがな|


#形態素解析
##ChaSen（茶筌）
##KyTea
##kuromoji - Java
##Igo - Java
##meCab（和布蕪）

###インストール(Fedora25)
http://taku910.github.io/mecab/#install-unix

```
su
cd /usr/src
curl -L -o mecab-0.996.tar.gz "<ファイルの場所>"
tar xvf mecab-0.996.tar.gz
tar xvf mecab-0.996.tar.gz 
cd mecab-0.996
./configure --enable-utf8-only && sudo make && sudo make install
cd ..
rm mecab-0.996.tar.gz 
```

辞書のインストール

```
tar zxfv mecab-ipadic-2.7.0-XXXX.tar.gz
cd mecab-ipadic-2.7.0-XXXX
##rootには/usr/local/binにパスが通っていないので設定
export PATH="$PATH":/usr/local/bin
./configure --with-charset=utf8 && make && make install
```

#スクレイピング

##cheerio-httpcli
ファイルをダウンロードしてJQueryっぽく扱える

##PhantomJS

##CasperJS

#Webデータソース
##Twitter
##Facebook
##はてなブックマーう
##Amazon
##Flicker
##Youtube
##Yahoo!Finance
##Wikipedia

#データの視覚化ライブラリ
http://www.jsgraphs.com/

##Goolgle Charts
##D3.js
https://d3js.org/