OmniAICreator/Qiita-1.07M huggingface dataset:
STM32L152C-DISCOVERY + STM32CubeMX + MDK-ARM Lite で、Ｌチカをやってみた (その4～FreeRTOS)


# STM32CubeMXで MiddleWareとして、FreeRTOSがついてくるので、それを使って、Lチカ。

## 手順
1. [その２](http://qiita.com/mt08/items/853959f86d1051bbe7b8)
での設定に加えて、MiddleWares -> FREERTOS -> [v]Enableにチェックして、コード生成。
2. MDK-ARM起動
3. ST-Link Debugger周りなどの設定を同様
4. コードを書く

```c:main.c
...
/* USER CODE BEGIN 0 */
#define LED_GPIO_PORT           GPIOB
#define LED_GREEN_GPIO_PIN      GPIO_PIN_7
#define LED_BLUE_GPIO_PIN       GPIO_PIN_6

// せっかくなので、Taskつくる... defaultTaskってのがあるんだけど .
osThreadId LedGreenTaskHandle;
void StartLedGreenTask(void const * argument)
{
  /* Infinite loop */
  for(;;)
  {
    HAL_GPIO_WritePin(LED_GPIO_PORT,LED_GREEN_GPIO_PIN, GPIO_PIN_SET);
    osDelay(125);
    HAL_GPIO_WritePin(LED_GPIO_PORT,LED_GREEN_GPIO_PIN, GPIO_PIN_RESET);
    osDelay(125);
  }
}

/* USER CODE END 0 */

int main(void)
{
...
...
  /* Create the thread(s) */
  /* definition and creation of defaultTask */
  osThreadDef(defaultTask, StartDefaultTask, osPriorityNormal, 0, 128);
  defaultTaskHandle = osThreadCreate(osThread(defaultTask), NULL);

  /* USER CODE BEGIN RTOS_THREADS */
  /* add threads, ... */

  // LedGreenTaskをosThreadCreateする .
  osThreadDef(LedGreenTask, StartLedGreenTask, osPriorityNormal, 0, 64);
  LedGreenTaskHandle = osThreadCreate(osThread(LedGreenTask), NULL);

  /* USER CODE END RTOS_THREADS */
...
...
``` 

あとは、 `Build(F7), Burn(Flash->Download), Debug Start(Ctrl+F5), Run(F5)`

****
`osThreadCreate()`や`osDelay()`は、cmsis_os.cでの定義。FreeRTOSをラップしてる。

`CMSIS` := The Cortex Microcontroller Software Interface Standard
http://www.keil.com/pack/doc/CMSIS/General/html/index.html 
> The *Cortex Microcontroller Software Interface Standard (CMSIS)* is a vendor-independent hardware abstraction layer for the Cortex-M processor series and defines generic tool interfaces.
ngrokをcentosで使う場合


centosの場合のメモです。2015/4/21現在、公式のドキュメントとオプションの設定方法が異なるようで、うまくいかなかったのでメモ。

macの場合はこちら
http://liginc.co.jp/web/programming/156484

#インストール

ダウンロードします。

```
$ cd /tmp
$ wget https://dl.ngrok.com/ngrok_2.0.16_linux_amd64.zip
$ unzip ngrok_2.0.16_linux_amd64.zip
```


#解凍

unzipをyumでインストールしておきます。

```
$ yum install -y unzip
$ unzip ngrok_2.0.16_linux_amd64.zip
$ cp ngrok /
```


#起動

80ポートをリレーします。

```
$ cd /
$ ./ngrok http 80
```

#authtoken
ログインして表示されるtokenを入力
https://dashboard.ngrok.com/

```
./ngrok authtoken +++/***
```

#まとめ
オプションがハイフン指定なしになったようでした。

以上です。

TODO
パスを通す
Pepperのしゃかい・けんがく 第1回報告

Pepper が色んな所を訪問する「[Pepperのしゃかい・けんがく](https://www.facebook.com/rentalpepper)」が始まってもうすぐ2ヶ月が経ちます。ここで、Pepper と共に旅をした結果得られた、弊社独自のデータを参考として公開したいと思います。アンケートなど、あくまでスタッフの意見の集約になりますことをご了承ください。

# しゃかい・けんがくの道のり

[Googleマップでみる](https://www.google.com/maps/d/u/0/edit?mid=zeB3L13ZtTxU.kuRrqEeaff9I)

![スクリーンショット 2015-04-21 13.44.42.png](https://qiita-image-store.s3.amazonaws.com/0/76308/6cd96bb5-85cd-0f44-bb1d-810938268b38.png)

* 2015年 2/22～4/16 の記録
* 訪れた場所は37箇所
* 総移動距離 579km (最短ルートで繋いだ場合。つくば←→姫路間に相当)
* Pepperと触れ合った人数 約3200人

# アンケート

正式なアンケートではなく、スタッフが Pepper と共に皆様と触れ合うなかで得た印象をグラフの形で表現しました。

![Pepperの印象](https://docs.google.com/spreadsheets/d/1y-goHz5xPR33i4xmvKmrntGvPqwFrvHI5JKzQoTW3UU/pubchart?oid=1565526774&format=image)

![Pepperを知っていますか？](https://docs.google.com/spreadsheets/d/1y-goHz5xPR33i4xmvKmrntGvPqwFrvHI5JKzQoTW3UU/pubchart?oid=1357957717&format=image)


# 運搬の方法

[詳しい写真はこちら](https://www.facebook.com/media/set/?set=a.367444746797703.1073741868.351229281752583&type=1)

* 箱からの出し入れは必ず二人で行う
* 一人は足の下（バンパーを避ける）、一人は脇の下を持ち、１、２の３で同時に持ち上げる。入れるときも出すときも同様。
* 出すときに後ろのバンパーをクッションにひっかけないよう注意する

# 通信環境による挙動の違い

## 光回線モデム＋WiFiルータ
* 一般的な環境。WiFiの電波さえしっかりしていれば最も安定している。

## WiMAX2+
* 端末間の通信がとても速い
* 茨城では電波のないところが多い
* 端末がWiMAXモデムを見つけられないことがあった

## テザリング
### Softbank
* 端末間(PCとPepper)の通信が遅い
* 電波はわりとどこでもある

### docomo
* 終日なかなかの安定感
* 端末間の通信も優れている
 
## WiMAX WiFiスポット+テザリング
* WiMAXの端末間通信スピードと、テザリングのエリアの広さのいいとこどりをしようとする試み
* うまくいった例もあるが、実績不足
* 2.4Ghzオンリー

# 床の環境状態の報告

## アスファルト
* ホイールがしっかり噛むと思いきや、全く動かなかった。

## フローリング(つるつるした面)
* 最も安定している
* フローリングでもダンス時のホイールが全く動作しないことがあった。
* この状態を再現するために、半径90cmを確保できる床を導入予定

## たたみ
* 広いところでの運用は未確認だが、大筋正しく動く。

# 感想

上記の運用を3ヶ月続けたが、ハード的な故障はほとんどない。Pepper は思った以上に丈夫であると感じた。本体価格だけ見れば非常にお得な買い物である。
gitコマンドによる、herokuのセットアップ


#手順紹介

##1.リポジトリの作成

railsアプリケーションのルート・ディレクトリで以下のコマンドを打つ。

```bash:ターミナル
$ git init
```
##2.管理対象に含めたくないファイルを.gitignoreで除外

Gitはすべてのファイルの変更履歴を管理するが、管理対象に含めたくないRailsのログファイルなどは管理対象から除外する必要がある。

ルート・ディレクトリにある.gitignoreの中身を以下のように変更

```ruby:.gitignore
# Ignore bundler config.
/.bundle

# Ignore the default SQLite database.
/db/*.sqlite3
/db/*.sqlite3-journal

# Ignore all logfiles and tempfiles.
/log/*.log
/tmp

# Ignore other unneeded files.
doc/
*.swp
*~
.project
.DS_Store
.idea
.secret

```

##3.railsをGitに追加、コミット

ルート・ディレクトリで以下のコマンドを実行

```bash:ターミナル
$git add .

```

ここで「.」はカレントディレクトリを示す。
これで、カレントディレクトリ以下の全てのファイルをステージングエリアに追加できる。`git status`コマンドを利用すれば、現在ステージングエリアに居るファイルを知ることができる。

変更を保存(commit)する場合は、`commit`コマンドを利用する。

```bash:ターミナル
$ git commit -m "Initialize repository"
```

`-m`フラグは、コミットメッセージをその場で追加する場合に使用する。

##4.githubにリモートリポジトリを作成、ローカルのリポジトリをプッシュ


ここまでで、gitを利用したローカルリポジトリの作成は終わりました。続いて、リモートリポジトリの作成と、そこへの`push`を行います。

railsのルート・ディレクトリから以下のコマンドを実行することで、リモートリポジトリを追加することができます。

```bash:ターミナル
$ git remote add origin https://github.com/<githubのusername>/first_app.git
```

続いて以下のコマンドで、railsアプリケーションのローカルリポジトリを、先ほど作ったリモートリポジトリに同期(push)します。

```bash:ターミナル
$ git push -u origin master
```
※このコマンドが上手くいかない場合は、githubのページから手動でリモートリポジトリを作成しましょう。

##5.herokuにデプロイする

railsアプリケーションのGemfileに、下記を追記します。

```ruby:Gemfile
group :production do
  gem 'pg', '0.15.1'
  gem 'rails_12factor', '0.0.2'
end
```

これは、herokuで利用するデータベース`postgre`を利用するためです。

`rails_12factor`は、herokuにおいて画像やスタイルシートなどの静的なアセットを利用するために使用します。

続いて、以下のコマンドを実行してgemfile.lockを更新し、`pg`と`rails_12factor`の情報を追記しておきます。

```bash:ターミナル
$ bundle install --without production
```

そして、それをコミットしておきます。

```bash:ターミナル
git commit -a -m "Update Gemfile.lock for Heroku"
```
続いて、下記のサイトからherokuのアカウントを登録してください。

https://dashboard.heroku.com

登録が済んだら、続いて以下のサイトから`heroku toolbelt`というアプリケーションをダウンロードし、インストールしてください。こちらは、コマンドラインからherokuを利用するために必須のアプリケーションになります。

https://toolbelt.heroku.com/

上記アプリケーションのインストールが済んだら、railsアプリのルート・ディレクトリから以下のコマンドを実行します。

```bash:ターミナル
$ heroku login
```

アドレスとパスワードを要求されるので、登録時のものを入力してください。

その次に以下のコマンドでherokuにアプリケーションを新規作成します。この時点で、暫定的なアプリケーションのURLが生成されます。

```bash:ターミナル
$ heroku create
```

herokuのアプリにローカルリポジトリからpushします。

```bash:ターミナル
$ git push heroku master

```

最後に、下記コマンドでマイグレーションファイルを実行すれば、アプリケーションを見ることができます。

```bash:ターミナル
$ heroku run rake db:migrate
```

※rake db:seedを行いたい場合は、この後`heroku run rake db:seed`コマンドを実行します。

※もしもこれで上手くいかなかったら、以下のコマンドを順番に試してください。

```bash:ターミナル
$ rake assets:precompile
$ git add .
$ git commit -m "Add precompiled assets for heroku"
$ git push heroku master
```
これでもエラーが怒る場合は、`heroku logs`コマンドでエラーを確認してください。
nodebrew を用いた Node.js環境構築

## 前置き、概要説明

Node.jsは更新頻度が高い反面、バージョン間の互換性の問題でアップデートをするとプログラムが動かなくなる場合があります。その為、複数のプロジェクトに携わっている場合はプロジェクト毎にNode.jsのバージョンを切り替える必要があります。この問題を解決してくれるのが**nodebrew**というツールです。

前置きが長くなりましたが、Rubyに置ける [rbenv](http://qiita.com/HayneRyo/items/d493a2b3cec2322f167c) と似たようなサービスです。

## nodebrewを用いたNode.jsインストール

### 1. nodebrewをインストールする

nodebrewをダウンロード、及びインストールします。

```lang:ターミナル
$ curl -L git.io/nodebrew | perl - setup
```

### 2. nodebrew向けの設定を行う

nodebrewを利用出来るようにする為にシェルの設定ファイル(~/.bashrcなど)に下記を追記します。

```lang:~/.bashrc
export NODEBREW_ROOT=/path/to/.nodebrew
```

設定を追記したら設定を反映させます。

```lang:ターミナル
source ~/.bashrc
```

### 3. Node.jsをインストールする

初めにインストール可能なNode.jsのバージョンを確認します。

```lang:ターミナル
$ nodebrew ls-remote
```

バージョンを指定してインストールを実行します。

```lang:ターミナル
$ nodebrew install-binary v0.12.2
```

最新版や安定板を明示的に使用する場合は下記のようなコマンドを実行します。

```lang:最新版インストール
$ nodebrew install-binary latest
```

```lang:安定板インストール
$ nodebrew install-binary stable
```

指定のバージョンが実際にインストールがされたかを確認します。

```lang:ターミナル
$ nodebrew list                      
v0.12.2
current: none
```

※この時点では先程インストールしたバージョン0.12.2は**まだ適用されておりません**。

### 4.Node.jsを適用する

特定のディレクトリにバージョンを指定して適用します。

```lang:ターミナル
$ nodebrew use v0.12.2                  
```

適用されたかを確認しましょう。

```lang:ターミナル
$ nodebrew list                      
v0.12.2
current: v0.12.2

$ node-v
v0.12.2
```
[新人エンジニア向け] 2015年における雑なPHP勉強法

「学校でプログラミングは多少勉強したがPHPをやるのは初めて」な人向けの入門ガイドです。

#  情報収集する

## はてぶ

はてなブックマークのPHPタグをチェックしましょう。

http://b.hatena.ne.jp/search/tag?q=php

だいたいこれで最新情報がわかります。

## Qiita

Qiitaには「タグをフォローする」という機能があります。
PHPタグをフォローしましょう。

http://qiita.com/tags/php 

## Twitter

https://twitter.com/search?q=php

などで検索して、PHP関連で有益なことをつぶやいてる人をフォローしましょう。

## PHP勉強会に行く

ひとりでは勉強できないという人は、各地で行われている勉強会に行ってみるとよいでしょう。

# 一次情報にあたる

誰かが書いたブログや伝聞よりも、一次情報を直接自分の目で見た方が早いこともよくあります。

## PHPマニュアルの調べ方

"http://php.net/" の後ろに続けて任意の単語(関数名など)を入力すると、一発で目的のページを表示してくれます。

例： http://php.net/array_filter

## PSR

PHPの標準化団体Figが策定しているPHPの標準推奨ガイドラインです。

http://www.php-fig.org/
https://github.com/php-fig/fig-standards

## PHP the right way

モダンPHPの入門ページです。

http://ja.phptherightway.com/

## 人のコードを読む

使っているフレームワークやライブラリのソースコードを読みましょう。
ただし、あまり古い場合は参考にしないほうがよいものもあります。
例えば pear (https://pear.php.net/manual/ja/
)で配布されてるライブラリの中には、設計スタイルが古いものがあります。


コードが書かれた年代に注意しましょう。

packagistには山ほどのPHPライブラリがありますので、その中からスターの多いものを見てみて、実際に使ってからコードを読むと勉強になると思います。

https://packagist.org/

## 迷ったら symfony/HttpFoundation がおすすめ
何を読んでいいかわからない場合は、SymfonyのHttpFoundationプロジェクトのResponseクラスを読んで実際に使ってみるとよいでしょう。

* https://github.com/symfony/HttpFoundation
* https://github.com/symfony/HttpFoundation/blob/master/Response.php
IPパケットの中身

#IPパケット(v4)の中身について
*個人的な授業のメモです*

##IPパケットとは
　インターネットや`Ethernet`などのIPプロトコルベースの通信環境で、一度に送信することのできない大きなデータ(`IPパケット`)を細かい単位に区切って転送する技術。

※Ethernetとはコンピュータネットワークの規格の1つで、世界中のオフィスや家庭で一般的に使用されているLANで最も使用されている技術規格


##中身
　IPパケットは大きく分けて`IPヘッダ`と`IPデータ`の２つに分けることが出来ます。`IPヘッダ`の中にIPの情報が全て格納されています。

![firstImage](http://i.imgur.com/WNO4XKZ.png?1)



##参考情報
・[Ethernet](http://e-words.jp/w/Ethernet.html)
tomcatの再起動手順メモ

tomcatの再起動手順メモ
====

Tomcatのプロセスが存在することを確認。

```
[root@server ~]# ps -ef | grep java
root       576   506  0 14:34 pts/1    00:00:00 grep java
root     32370     1  4 13:44 pts/0    00:02:06 /usr/bin/java -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.endorsed.dirs=/usr/local/tomcat/endorsed -classpath /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar -Dcatalina.base=/usr/local/tomcat -Dcatalina.home=/usr/local/tomcat -Djava.io.tmpdir=/usr/local/tomcat/temp org.apache.catalina.startup.Bootstrap start
```

Tomatを停止。

```
[root@server ~]# service tomcat stop
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
```

Tomcatのプロセスが存在しないことを確認。

```
[root@server ~]# ps -ef | grep java
root       612   506  0 14:34 pts/1    00:00:00 grep java
```

Tomcatのプロセスを起動。

```
[root@server ~]# service tomcat start
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
```

Tomcatのプロセスが存在することを確認。

```
[root@server ~]# ps -ef | grep java
root       629     1 86 14:35 pts/1    00:00:03 /usr/bin/java -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.endorsed.dirs=/usr/local/tomcat/endorsed -classpath /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar -Dcatalina.base=/usr/local/tomcat -Dcatalina.home=/usr/local/tomcat -Djava.io.tmpdir=/usr/local/tomcat/temp org.apache.catalina.startup.Bootstrap start
root       643   506  0 14:35 pts/1    00:00:00 grep java
[root@remsServer ~]#
```
AdMobのインタースティシャルについて [ios]


#解決！
私の方での問題だったようです・・・。
それを直したところ、このやり方でも動くようになりました！
教えてくださり、ありがとうございました。
こういうやり方もあるという形で記事を残しておきたいと思います。

#公式通りにやってみる

```公式サイト
- (GADInterstitial *)createAndLoadInterstitial {
    GADInterstitial *interstitial = [ [GADInterstitial alloc] init ];
    interstitial.adUnitID = @"テスト用IP";
    interstitial.delegate= self;
    [interstitial loadRequest:[GADRequest request]];
    return interstitial;
}

- (void)interstitialDidDismissScreen:(GADInterstitial *)interstitial {
    self.adMobInterstitial = [self createAndLoadInterstitial];
}

```
インタースティシャルを何度も表示する場合、公式にはこのような処理が書いています。
実際にやってみると、１回目のインタースティシャルは全く問題なく表示！
しかし、シーンを切り替え、もう１度表示してみると・・・。
<b>ロードが長く動かない！そしてアプリが落ちる！</b>私の環境だけかも・・・？

#調べてみる
ロードが長く動かないならば、ロードが完了していないのだな、と思い
公式に書いてあるインタースティシャルのライフサイクルのイベントを使って調べてみる。

```
- (void)interstitialDidDismissScreen:(GADInterstitial *)interstitial {
    self.adMobInterstitial = [self createAndLoadInterstitial];
    NSLog("再度、生成！");
}

loadRequest: が成功し、インタースティシャルを表示するための isReady が適切なタイミングで有効な場合に送信
- (void)interstitialDidReceiveAd:(GADInterstitial *)interstitial {
    Log::log("ロード完了！");
}

interstitial がユーザーに表示される直前に送信
- (void)interstitialWillPresentScreen:(GADInterstitial *)interstitial {
    Log::log("表示開始！");
}

// loadRequest: が失敗した場合に送信
- (void)interstitial:(GADInterstitial *)interstitial didFailToReceiveAdWithError:(GADRequestError *)error {
    Log::log("loadRequest 失敗");
}

```

こんな感じで分かる程度の適当さで作って、実験してみたところ・・・。

```
表示開始！ 
(広告の×マークを押し、消す)
再度、生成！
ロード完了！
```
あれ、次のインタースティシャル表示のためのロード終わってる？
じゃあ何故・・・。

#試行錯誤してみる
もう１度公式サイトを見直してみよう！という事で見直す。
探していると、ライフサイクルイベントの中で怪しいものを発見！

```
 (void)interstitialWillDismissScreen:(GADInterstitial *)interstitial
interstitial が画面から消え、アプリとルート ビュー コントローラ（スプラッシュ以外の場合）が復元される直前に送信されます。この時点で、interstitialWillPresentScreen: で一時停止していたフォアグラウンド処理を再開する必要があります。
```

おや、これは・・・？
こちらで再生成してみたらどうなるのだろう？という疑問が生じたので早速実装。

```
- (void)interstitialWillDismissScreen:(GADInterstitial *)interstitial {
	self.adMobInterstitial = [self createAndLoadInterstitial];
    NSLog("再度、生成！");
}
```

これで実行してみたところ・・・。

```
表示開始！ 
(広告の×マークを押し、消す)
再度、生成！
ロード完了！
```

先程と同じ、そしてシーンを切り替えもう、１度表示してみると。
<b>かわらない！</b>

#試行錯誤してみる２
うーん、じゃあなんだろう・・・と悩んでいても始まらないと思い、試してみる事に。
最初はnilで初期化、表示したい場所でインタースティシャルを生成、
インタースティシャルが消されたらnilにする、というサイクルで実装。

```
- (void)viewDidLoad { 
	self.adMobInterstitial = nil;
}

// loadRequest: が成功し、インタースティシャルを表示するための isReady が適切なタイミングで有効な場合に送信されます。
- (void)interstitialDidReceiveAd:(GADInterstitial *)interstitial {
    [self.adMobInterstitial presentFromRootViewController:self];
    Log::log("ロード完了！");
}

- (void)interstitialDidDismissScreen:(GADInterstitial *)interstitial {
	self.adMobInterstitial = nil;
}
```
ロードが完了したらその時にもう表示してしまうという形にしてみた。すると・・・。
<b>ロードが長くなく、すぐに動いた！</b>

#結論
公式サイトに書いてるコードでも普通に動くと思いますが、
使うときにロードをした方が安定しているという結果になりました！(当たり前ですよね・・・)
メモリを沢山使っている状態でも動いた後者のがいいかもしれませんね・・・。
同じ症状で悩んでいる方がいれば、と思います。
Sails.jsとPhantomJSを使ったスクレイピングをする準備をする

# したこと
* SailsでとりあえずPhantomJSでページをとってみた。

```
# sails new landload
# sails generate api property
# npm install phantomjs
```

```js:config/models.js
module.exports.models = {
    migrate: 'safe'
};
```

```js:controllers/PropertyController.js
var phantom = require('phantom');

function CreateUrlArray(str) {
  var array = [];

  str.match(/.*(\[(\d+)-(\d+)\]).*/);

  if (!RegExp.$1 || !RegExp.$2 || !RegExp.$3) {
    return array;
  }
  else {
    var replace = RegExp.$1;
    var start = Number(RegExp.$2);
    var end = Number(RegExp.$3);

    for (var i = 0; i <= end - start; i++) {
      array[i] = str.replace(replace, (start + i).toString());
    }
    return array;
  }
};

function updateApi(req, res) {
  phantom.create(function (ph) {
    ph.createPage(function (page) {
      page.open("http://www.rakumachi.jp/syuuekibukken/area/prefecture/dimAll/?page=1&limit=100", function (status) {
        console.log("opened rakumachi? ", status);
        page.evaluate(function () {
          return document.body.textContent;
        }, function (result) {
          res.json(200, {result: result});
          ph.exit();
        });
      });
    });
  });
};

var PropertyController = {
  update: updateApi
};

module.exports = PropertyController;
```

```js:models/Property.js
module.exports = {
  attributes: {
  }
};
```

# はまったこと
* 最新の2.0系列のPhantomJSはまだnpmからは取れないので、古い1.9系列を使うことにした。
１個のファイルをN回結合するwindowsのバッチ

1個のファイルの結合をN回繰り返すバッチファイルを作成しました。

使用方法

makebigfile.bat 入力ファイル名 出力ファイル名　繰返し回数

使用例

makebigfile.bat　と同じフォルダに　infile.txt　があり、
10回のappendを繰返し、outfile.txtに出力する場合。

$ makebigfile.bat infile.txt outfile.txt 10

------cut here begin------
@echo off
pushd %~dp0

type nul > %2
for /L %%i in (1,1,%3) do (
	copy %2 + %1 tmp.txt
	copy tmp.txt %2
)
del tmp.txt
popd
------cut here end------
Node.js の mocky を オレオレhttps で動かしてみる、その２

# オレオレhttps
[Node.js の mocky を使用し スタブREST API を作成してみる、その１](http://qiita.com/murachi1208/items/c33033981f6cc34f4310) で、https 対応できないかなと調べたらさっくりできたのでそのメモ

デジタル証明書は、オレオレ証明書を作るのでそんなわけで、オレオレhttpsつーこと

# オレオレ証明書作成方法
作り方は簡単、質問されるけどまあ適当に答えて問題ないです。あと有効期限は、10年で作成してます。
ちなみに openssl をインストールしておくこと。

```
$ openssl genrsa -out key.pem 1024
$ openssl req -new -key key.pem -out csr.pem
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:JP
State or Province Name (full name) []:Tokyo
Locality Name (eg, city) [Default City]:Kanda
Organization Name (eg, company) [Default Company Ltd]:hoge
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:
Email Address []:メールアドレス

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
```

有効期限を10年で作成する。

```
$ openssl x509 -req -in csr.pem -signkey key.pem -out cert.pem
```

# 作成した証明書を mocky にコピー
作成した cert.pem, csr.pem を ```node_modules/mocky/lib``` にコピーします。

```
$ cd ./node_modules/mocky/lib
$ cp ../../../*.pem .
```

オリジナルの mocky.js をバックアップしておきます(httpで使うときのために）。そしてちょびっと追加するのと修正します。

```
$ cd ./node_modules/mocky/lib
$ cp mocky.js mocky.js.old
$ diff mocky.js mocky.js.old
5,11d4
< var fs = require('fs');
< 
< //
< var options = { 
<     key: fs.readFileSync('key.pem'),
<     cert: fs.readFileSync('cert.pem')
< };
20c13
<               srvType = params.srvType || 'https',
---
>               srvType = params.srvType || 'http',
52c45
<       return require(srvType).createServer(options, function(req, res) {
---
>       return require(srvType).createServer(function(req, res) {
```

# mocky_sample4.js を実行してみる
[Node.js の mocky を使用し スタブREST API を作成してみる、その１](http://qiita.com/murachi1208/items/c33033981f6cc34f4310) で作成した ```mocky_sample4.js``` を起動してみます。

```
$ node mocky_sample4.js
```

特にエラーもでないですねｗ

curl で、オレオレhttps（無視するんだけどね）としてアクセスしてみます。

```
$  curl "https://127.0.0.1:4321/someurl4?a=999&b=777&kj=44Gv44GS56a/44OP44Ky" -k --verbose
```

okうまくいった。

# 参考サイト

> [Node, iOS, Android, HTML5, JavaScriptの話題。ときどきMacやLinux。](http://codedehitokoto.blogspot.jp/2012/02/nodejshttps.html)
> [オレオレ証明書をopensslで作る（詳細版）](http://d.hatena.ne.jp/ozuma/20130511/1368284304)
Knockout.jsで動的なselectのデフォルト値を設定する


ものすごくハマったので、メモ。
Knockout.jsでselectを作るのはお手軽で、デフォルト値を設定するのもvalueを使うだけでいいのですが、Ajaxで取得したJSONを使ってフォームを更新しようとしたところ、デフォルトの値が設定されなくて困りました。

## Before

まずはView

```slim
#new_foo data-bar_id="1"
  select.select.form-control(
    name="foo[bar_id]"
    data-bind="options: bars, optionsText: 'name', optionsValue: 'id', optionsCaption: '選択してください', value: default_bar_id")
```

そしてViewModel

```coffee
class window.BarViewModel
  constructor: (bar_id)->
    @bars = ko.observableArray()
    @default_bar_id = ko.obserbable(bar_id)
    
$ ->
  # selectのデフォルト値になる値を取得
  bar_id = $('#new_foo').data('id')
  
  # bindingしておく
  bar_vm = new BarViewModel(bar_id)
  ko.applyBindings(bar_vm)
  
  # selectのoption用のデータを取得
  $.getJSON '/bars.json', (data) ->
    bar_vm.bars(data)

```

これで、selectのデフォルトがbar_idの値の項目になるであろう…と思ったらなりませんでした。おそらく、すでに一度data-bindの中を評価した後なので、optionsの内容が変わってからまたvalueを評価してもおかしなことになるからでしょう。

## After

これを解決するには、if文を使って表示・非表示を設定します。

```slim
#new_foo data-bar_id="1"
  /! ko if: bars().length > 0
  select.select.form-control(
    name="foo[bar_id]"
    data-bind="options: bars, optionsText: 'name', optionsValue: 'id', optionsCaption: '選択してください', value: default_bar_id"
)
  /! /ko
```

if文で要素の表示・非表示を設定すると、非表示の際には要素自体がなくなります。そのため、trueになった際には、要素が再構成されるため、data-bindの設定が再評価されるのだと思います。

Ajaxでselectの内容を変更する際には、気をつけましょう！

## 参考URL

http://jsfiddle.net/jearles/nw4cH/36/
SwiftでUILabelにAttributedStringを設定するメモ

NSMutableAttributedStringを使ったやり方のメモ

```swift:sample.swift
let attrText = NSMutableAttributedString(string: "装飾される文字列")

// 文字色
attrText.addAttributes([NSForegroundColorAttributeName: UIColor.blueColor()], range: NSMakeRange(1, 4))

// 背景色
attrText.addAttributes([NSBackgroundColorAttributeName: GSSettings.unreadNotificationColor()], range: NSMakeRange(1, 4))

// フォント(Bold、サイズはUILabelの標準サイズ)
attrText.addAttributes([NSFontAttributeName: UIFont.boldSystemFontOfSize(UIFont.labelFontSize())], range: NSMakeRange(0, 1))

self.label.attributedText = attrText
```

ちなみに、NSLinkAttributeNameを使ってリンクっぽい装飾はできるが、タップイベントは発生しない模様。。

```swift:link.swift
attrText.addAttributes([NSLinkAttributeName: NSURL(string: "http://google.co.jp")!], range: NSMakeRange(0, 4))
```
Unity5におけるPluginの扱いについての注意点

# 問題の経緯
- 現行プロジェクトをUnity5に移行する際にiOSビルドで問題が発生した。
- ThirdPartyなプラグインやライブラリをそこそこ搭載していた。
- 原因がわかればなんてことはないけど、念のため解決方法を残しておく。

## Unity5プラグインについての自分の認識
- ファイルをAssets/Plugins以下に置いた場合、Inspector上でプラグインの設定を行えるようになった。
- Assets/Plugins/iOSやAssets/Plugins/Androidなどの定型フォルダ名以下に配置すると、自動的に該当プラグインと認識する。（昔からの仕様）

## 詳細な症状
- XCode上でArchiveには成功するが、ipaファイル作成にて **「Codesign failed」** エラーが発生。
- CodeSign関連なので、真っ先にProvisioningFileを疑い、EnterPriseビルドでも試してみたが同じエラーが発生。
- ログを見ると、何故かCRIのprovisioningprofileを参照しているような記述を発見。

## 原因
- OSXエディター上の再生に必要なCRIプラグインの *Assets/Plugins/cri_ware_unity.bundle* ファイルの *[Select platforms for plugin]* が **AnyPlatform** に設定されていた事により、プロジェクトファイルに混入していた。
- 該当ファイルの入っているunitypackageをUnity5に直接Importしたが、設定はAnyPlatformだった。

## 対処法
- 該当ファイルの *[Select platforms for plugin]* を **Editor** に設定する。（他の解決方法が正しい場合はご教授ください！）

## 教訓
- Assets/Plugins直下にある"ファイル"は自動的に **AnyPlatform** に設定されるので、なるべく直下にファイルは置かない。（特にbundleファイルなどはUnity内で見るとフォルダの形をしているので気づきにくい・・・！）
powershell3.0で文字列の検索

###grep に相当するコマンド。*.logから任意の文字(hogehoge)を検索する。
>Select-String hogehoge *.log

###grepエイリアスへの登録
>Set-Alias grep Select-String

###Powershellのバージョン確認
>$PSVersionTable


###3.0以上であれば tail -f のようなことができる
>Get-Content -Path "ファイルパス" -Wait -Tail "読み取り行数"

###tail しながら grepのようなこと
>Get-Content -Path .\20150421.log -Wait -Tail 1 | Select-String hogehoge


<br>
<br>
<br>
【俺用メモ】Linuxのコマンドラインでよく使いそうなの

# 
いろいろ覚えてると便利なんですけど、使わないコマンドって忘れちゃいますよね。
なのでメモしておきます。

余談ですけど、Qiitaでコマンドラインのシンタックスハイライトって何の言語を選ぶのがいいんですかね。文字列の色を変えてくれるcを適当に選んじゃいましたけど。

## findコマンドのメモ
###-d オプション

```
-d     A synonym for -depth, for compatibility with FreeBSD, NetBSD, MacOS X and OpenBSD.
```
階層の深さを指定できるので深掘りしすぎてfindコマンド終わらない :weary: みたいなことがなくなるので幸せになれますね。

## 指定の文字列を含むファイル検索
```c
find ./ -type f -name "*.rb" -print | xargs grep "hoge"
```
Rubyファイルでhogeという文字列を含むファイルを表示するコマンド。
``alias``でgrepまでを登録しておいて``fgr hoge``みたいな使い方してます。
これはよく使うし、これで事足りるので覚えてますが、発展形は忘れることがあります。

これをベースにした発展形が以下の通り。

### ファイル名に特定の文字列を含むファイルは除く

```c
find ./ -type f -name "*.rb" ! -name "include.rb" -print
```
コメントで教えていただいたコマンドを記載します。
``man find``を読んだところ演算子が用意されてました。
> ! expression
>  -not expression
>     This is the unary NOT operator

他にも-andや-orもあったので上手く組み合わせると、より柔軟な検索ができそうです。

```c
find ./ -type f -name "*.rb" -print | xargs grep hoge | grep -v "exclude_filename"
```

こちらは元々私が記述したもの。
``grep``の-vオプションで特定の文字列を除外します。
grepした結果に対してやってるのでファイル名と同じ行にしか適用できませんけど。
swpファイルを除きたいとか拡張子を指定しないでgrepしたあとで.phpだけ除外するとか、そんな使い方でしょうか。
たまに使いますし、-v程度なら忘れません。
 
### ファイル名だけ表示
```c
find ./ -type f -name "*.rb" -print | xargs grep -l "hoge"
```
コメントで教えていただいたコマンドを記載します。
``man grep``をしたところ-lオプションというのが用意されてました。

> -l, --files-with-matches
  Only the names of files containing selected lines are written to standard output.

マッチしたファイル名だけを表示する、ということができます。
なので下記のようにわざわざcut & uniqなんてする必要ありません！

```c
find ./ -type f -name "*.rb" -print | xargs grep "hoge" | cut -d':' -f1 | uniq
```
基本形（grepで特にオプションを指定しない場合）の実行結果は
「ファイルパス:該当行」
といった感じになります。
プログラムでインデントが深かったり、あるいはfind対象がcsvとかtsvの場合は結果がえらいことになります。
ので、``cut``コマンドでファイルパスと該当行を分割して1列目だけを表示するようにしてます。
また1ファイルで何回もその文字列が出てくる場合も往々にしてありますので``uniq``で一意にしてます。が、前述の-lオプションがあれば不要です。

## ディスクの空き容量がなさそうなとき
### 使用量確認
```c
df -h
```

### どのディレクトリが容量食ってるか確認
```c
du -hs /*
```
以降ディレクトリを掘っていって特定する運用。
上記の例だとルートディレクトリ以下に対してやってるので時間かかるし、rootとかじゃないとパーミッションで怒られるので適宜ディレクトリを変える。
*つけない場合はそのディレクトリの総計のバイト数が表示されて、どこがいくら使ってるとかは見れない。

#### `-h`オプションについて
> print sizes in human readable format (e.g., 1K 234M 2G)

人間の読みやすい形にしてくれる

#### `-s`オプションについて
> display only a total for each argument

サマリ（翻訳諦めた）

#### コメントで教えていただいたこと
@tukiyo3さんに教えていただきました。
元記事を削除したためこちらで紹介、御礼を申し上げます。

##### パーミッションで怒られるのを回避（エラーメッセージを表示していないだけで、集計はできていない）
```c
du -sh /* 2>/dev/null
```

##### ギガのものだけ抽出
```c
du -sh /* 2>/dev/null | grep G
```

##### 容量の大きい物順に表示
```c
du -sh /* 2>/dev/null | grep "G¥t" | sort -nr
```
Intellij IDEA 14 に ideavim 入れて使うときのクリップボード共有設定

**~/.ideavimrc** で、お馴染みの下記設定を書けば良いようです。

```
set clipboard=unnamed
```

効かない場合はプラグインをアップデートすると効くかと思います。
対応されたのはプラグインのバージョン 0.38 のようです。
ちなみに古いバージョンだと ideavim は ~/.vimrc を見てたみたいです。変わってくれてよかったです。

## 参考

- http://stackoverflow.com/questions/27898407/intellij-idea-with-ideavim-cannot-copy-text-from-another-source
    - ここには、この記事以下のことしか書いていません
- https://youtrack.jetbrains.com/issue/VIM-476
AWS CLIで時刻を扱うときの定型文


非常に今更な気がしますが、よく忘れるので備忘録として記します。

# 時刻指定 is 何

AWS CLIでCloudWatchなどでデータを取得する際には開始時刻・終了時刻を指定する必要があります。
awscliのhelpでは以下のような記述があります。

```
       --start-time (timestamp)
          The time stamp to use for determining the first datapoint to return.
          The value specified is inclusive; results  include  datapoints  with
          the time stamp specified.

       --end-time (timestamp)
          The  time stamp to use for determining the last datapoint to return.
          The value specified is exclusive; results will include datapoints up
          to the time stamp specified.
```

使用例も書かれています。

```
EXAMPLES
       To get the CPU utilization per EC2 instance

       The following example uses the get-metric-statistics command to get the
       CPU utilization for an EC2 instance with  the  ID  i-abcdef.  For  more
       examples  using  the  get-metric-statistics command, see Get Statistics
       for a Metric in the Amazon CloudWatch Developer Guide.

          aws cloudwatch get-metric-statistics --metric-name CPUUtilization --start-time 2014-04-08T23:18:00 --end-time 2014-04-09T23:18:00 --period 3600 --namespace AWS/EC2 --statistics Maximum --dimensions Name=InstanceId,Value=i-abcdef
```

`yyyy-mm-ddTHH:MM:SS` とあります。実際にはこの後にTZも追加できます。


# 実際に取得してみる

Linuxで以下のような date を実行すると、上記の時刻指定で必要な結果が得られます。

```
$ date -Iseconds --date '6 minutes ago'
2015-04-21T11:40:39+0900
```

この形式でAWS CLIに引き渡せば解釈してくれます。上記検証を行ったLinuxサーバではJSTを採用してますので、末尾が `+0900` となっています。
TZを調整してみると以下のように挙動が変わります。

```
$ TZ=UTC date -Iseconds --date '6 minutes ago'
2015-04-21T02:54:26+0000
```
```
$ TZ=Asia/Tokyo date -Iseconds --date '6 minutes ago'
2015-04-21T12:26:47+0900
```
```
$ TZ=US/Pacific date -Iseconds --date '6 minutes ago'
2015-04-20T20:27:49-0700
```


# 使用例

バッチ処理などで現在時刻から遡ってn分、などの指定を行う場合にご利用いただけます。


```
aws cloudwatch get-metric-statistics \
	--namespace AWS/RDS \
	--metric-name CPUUtilization \
	--start-time `date --iso-8601=seconds --date '6 minutes ago'` \
	--end-time `date --iso-8601=seconds --date '1 minutes ago'` \
	--period 300 \
	--statistics "Maximum" \
	--dimensions 'Name="DBInstanceIdentifier",Value="foobar"'
```
Listの全要素が指定の値で埋められているか調べる

javaのList型変数の全要素が、指定した値で埋められているか調べるにはどうしたらいいか？

そんなロジックを書かなければいけない状況に出くわすのが稀だけど（設計自体見なおした方がいい可能性が高い）、仕事でListの全要素が空文字列かどうか判定しなければいけない状況に出くわしたのでメモ。

`Collections#frequency(Collection<?>, Object)`(since 1.5)で一致する要素数が調べられるので、Listのサイズと比較すれば判定できる。

関連：[指定サイズ分固定値で埋めたListの生成方法](http://qiita.com/ikedat16/items/1dc6d7e09efc97cae6da)

### 空文字列で埋められているか？

```java
List<String> lst = new ArrayList<>(Collections.nCopies(3, ""));

// 判定
System.out.println(Collections.frequency(lst, "") == lst.size());
// -> true

System.out.println(String.format("値[%s] 一致数[%d/%d]",
    lst,
    Collections.frequency(lst, ""),
    lst.size()));
// -> 値[[, , ]] 一致数[3/3]
```

_以下おまけ_

### 指定の数値で埋められているか？

```java
List<Integer> lst = new ArrayList<>(Collections.nCopies(3, 5));

System.out.println(Collections.frequency(lst, 5) == lst.size());
// -> true
```

### nullで埋められているか？

```java
List<String> lst = Arrays.asList(new String[3]);

System.out.println(Collections.frequency(lst, null) == lst.size());
// -> true
```

### 指定したインスタンスで埋められているか？

```java
List<Integer> ins = new ArrayList<>(Arrays.asList(new Integer[]{1,2,3}));
List<List<Integer>> lst = new ArrayList<>(Collections.nCopies(3, ins));
ins.add(4);

System.out.println(Collections.frequency(lst, ins) == lst.size());
// -> true
```

※コードはjava 7で書いています
【Swift】Storyboardをデバイスごとに3.5インチ,4インチで使い分けるスマートな方法


##はじめに
アプリ申請時に必要そうとなるデバイスによってstoryboardを切り替える方法が意外となかったので書き留めることにしました。

##手順
###Storyboardの作成
1. NewFile>iOS>User Interface>Storyboardで、空のStoryboardを作成(ここではMain3.5.storyboardとする) ![スクリーンショット 2015-04-21 11.26.38.png](https://qiita-image-store.s3.amazonaws.com/0/59590/ea1aec54-9201-09f0-1dea-a02e36c370b3.png "スクリーンショット 2015-04-21 11.26.38.png")

2. 新しいMain3.5.storyboardを開いてView Controllerを追加
3. そのView Controllerを選択して写真のようにSize>3.5inch用に切り替える。
 ![スクリーンショット 2015-04-21 11.29.54 1.png](https://qiita-image-store.s3.amazonaws.com/0/59590/8bcbf91e-da7e-b785-2c99-be3dc7745a35.png "スクリーンショット 2015-04-21 11.29.54 1.png")

4. 続けて写真のようにIs Initial View Controllerにチェックを入れる。
![スクリーンショット_2015-04-21_11_31_41.png](https://qiita-image-store.s3.amazonaws.com/0/59590/fce30b5d-a191-1b7f-6bc8-a8703d2c37f9.png "スクリーンショット_2015-04-21_11_31_41.png")
右向き矢印が追加されると思うが、追加しないと立ち上がったときにどのView Controllerを使用すれば良いのかわからなくなりエラーを起こす("– perhaps the designated entry point is not set?")

以上でStory Board の設定は完了である。

###AppDelegateへコードの追加
```swift:AppDelegate.swift
   func grabStoryboard() -> UIStoryboard {
        var storyboard = UIStoryboard()
        var height = UIScreen.mainScreen().bounds.size.height
        
        if height == 480 {
            storyboard = UIStoryboard(name: "Main3.5", bundle: nil)
        } else {
            storyboard = UIStoryboard(name: "Main", bundle: nil)
        }
        return storyboard
    }

    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
        
        var storyboard: UIStoryboard = self.grabStoryboard()
        if let window = window { 
        window.rootViewController = storyboard.instantiateInitialViewController() as? UIViewController 
        }
        
        self.window?.makeKeyAndVisible()
       
        return true
    }

```



不備やこのほうがいいなどアドバイスがあればコメントしていただけると幸いです。まだまだ未熟者ですのでどうぞ宜しくお願い致します！！！
クラウド型アプリ検証サービス「Remote TestKit」を使ってみた

# RemoteTestKitとは
* [公式ページ](https://appkitbox.com/testkit)に書いてあるとおり、"最新機種を含む300種類以上のスマートフォン実機を使って今すぐアプリ・サイトのテストが可能"なクラウドサービスです
 * 手元にないiOS/Android端末を調達することなくこのアプリを介して操作できます

# RemoteTestKitを使ってできること
* (開発中の)アプリのインストール
 * ローカルにあるapk,ipaのインストールが可能です
* Seleniumを使った自動テスト
* Eclipseなどの開発環境との連携
* JenkinsなどのCIツールとの連携
* PCのキーボードからテキスト入力
 * ストレスがなくていいですね
* 静止画や動画のキャプチャ

# 利用方法
## 利用前の準備
* アカウント登録が必要なためメールアドレスをご用意ください
* 登録時に特に面倒な作業はありませんでした

## アプリの起動
* Windows/Mac版のクライアントアプリとWebブラウザで利用できるアプリが提供されているのでどちらでも構いません
* proxy環境では起動時に設定してくださいといわれるので適宜入力してください
* Mac版のクライアントアプリで起動した画面はこちら↓↓
 * あとは利用したい機器を選択すると端末が表示されの操作が可能になります
 * 利用を開始すると30分のカウントダウンが始まります
 * 長時間の特定の機器を独占して利用するケースをさける対策かもしれませんね

![remotetestkit.png](https://qiita-image-store.s3.amazonaws.com/0/19778/6131920d-39ad-af7a-21b9-021a4585e4f4.png)

# 料金
* 無料で利用できる端末もありますが、ほぼ有料
 * [利用できる端末一覧](https://appkitbox.com/testkit/smartphone)
* [料金プラン](https://appkitbox.com/testkit/price#location-ticket)
 * 有料でもいいからちょっと試してみたいという方はチケットプランの一番安いやつではじめるとよいですね
 * 2700円/月で30分×6回利用できるプランです。500円/回かからないくらい
* 私が今回触ったのは無料で利用できる端末だけです
 * 偶然にも使いたいものが無料の端末だったので

# メリットとデメリット
## メリット
* 手元にない端末でも手軽に使うことができる
* 開発中のアプリのインストールも楽チン
* 動きがそこまでもっさりしていない(多少遅いが)

## デメリット
* 使いたい端末が対応されていないものだったり、レンタル中であったりすることがある
* 利用が30分単位のレンタルなので使い始めたら30分離れられない
 * 5分くらい使いたいとかいう場合でも、30分の使用料をとられるのだろう(試してはいない)
* 実機が手元にあるわけではないので、バグを発見しても「バグ見つけました！」と若干言いにくい
 * これ、本当に実機で試しても同じことが起きる？のかという信頼性が... 


# ～ただの宣伝～
* [全国のSeleniumer必読](http://qiita.com/oh_rusty_nail/items/b8ba525d31ea7c522856)
* Selenium, SauceLabs, Travis, Jenkinsに関するノウハウ書いているのでよかったら参考にしてみてください
express deprecated req.param(name): Use req.params, req.body, or req.query instead

npmモジュールのアップデートをして既存アプリを再起動してしばらくログを眺めていたらタイトルのようなメッセージがチラホラ・・・
どうも

```js
app.get('/somedata/:id', function(req, res){
    // req.param('id')を使ってあれこれ
});

```
としてるところに警告が出てる模様

調べたら、req.param()はそのうち廃止するから、req.params使ってね！ということらしい
さっきのコードを

```js
app.get('/somedata/:id', function(req, res){
    // req.params.id を使ってあれこれ
});

```
に書き直すだけですむっぽい

もともと

* GETはreq.query
* POSTはreq.body

で取れるのにURLパラメータだけreq.param()というのに違和感あったのだが、これが

* URLに含まれるパラメータはreq.params

ということで統一とれた
そもそも何でreq.param()だったのかっていう感じなんだけど、PHPの$_REQUESTみたいな扱いだったのかな
そりゃこういうことになるよね
さんじゃらっと Mercurial

## Mercurial (hg) とは
ソースコード管理システムです。
ざっくり言うとGitっぽいやつです。
Githubでは（あたりまえですが）利用できず、Bitbucketでは選択できます。

## なんで hg なの？
システムの名前はMercurialですが、コマンドは`hg`です。
Mercurialは英語で水銀という意味で、Hgは水銀の元素記号なのでこのようになっているようです。おしゃれですね！！

## Gitと何が違うの？
あまりよくわかっていませんがGitよりシンプルなようです。
私のようにGitでも基本的な,clone,pull,commit,push,branch,checkoutくらいしかしない人は、それぞれの差はあまり感じられないですが、そういう人こそhgでオッケーなのかなと思いました。

## Mercurial（hg）の基本コマンド
使ったコマンドを追記していきます。

リモートのリポジトリをローカルに持ってきます
`hg clone`

ファイルをリポジトリに追加
`hg add [filename]`

ローカルのリポジトリを最新にします
`hg pull`

ファイルの変更や追加を一覧表示します
`hg stat`

ローカルの変更を表示する
`hg diff`

ローカルにコミットします
`hg commit -m "It is Comment!"`

コミットした内容をリモートにプッシュします
`hg push`

commit前のファイルの変更を取消ます
`hg revert [filename]`

commitログの表示
`hg log`
ubuntuで各種CDイメージをisoに変換

CD-ROMイメージフォーマットがiso以外の場合、Linuxでどうするのかとググったところ、
[Converts many CD-ROM image (BIN, MDF, PDI, CDI, NRG, and B5I) formats to ISO9660 - Iat | Linux Blog](http://linuxpoison.blogspot.jp/2010/09/converts-many-cd-rom-image-bin-mdf-pdi.html)を発見。

```bash:
sudo apt install iat

iat hoge.cdi hoge.iso
```

これでisoに変換できる。
CakePHPを多言語化する

#```__()```で書く#

まずは、viewとか(他のところでもページに表示されるもの)に書いてある自然言語(ここでは日本語)の文字列を```__()```で書くようにします。
```<?php echo __('確認して下さい'); ?>```という感じ。
多言語化しなければそのまま表示されるだけなので、将来多言語化する可能性があるなら、ちょっと面倒でも```__()```で書いておいたらいいと思います。
ちなみに```__d()```とか```__n()```とかもあるので、時と場合に応じて使います。([Cookbook 2.x - グローバル関数](http://book.cakephp.org/2.0/ja/core-libraries/global-constants-and-functions.html#id2))
modelの```$validate```の```message```に書くものは、そのまま(```'message' => '選択してください'```とか)で大丈夫みたい。

#POTファイルを作る#

```Console/cake i18n extract```
を実行すると、Localeディレクトリの下にdefault.pot等のPOTファイルができます。
参考：[Cookbook 2.x - I18N shell](http://book.cakephp.org/2.0/en/console-and-shells/i18n-shell.html)

#Poeditで翻訳ファイルを作る#

[Poedit](http://poedit.net/)をインストールして、上で作ったPOTファイル(default.pot)を元に翻訳ファイルを作ります。
ソーステキストに対応する翻訳を入力すればOK。

日本語で書いてあったものを英語に翻訳する場合は、```Locale/eng/LC_MESSAGES```というディレクトリを作成し、その下にdefault.poという名前で保存します。バイナリのdefault.moファイルも同時に保存されます。
poファイルはテキストなのでPoeditとか使わなくても作れますが、CakePHPが使うのはmoファイルのようなので、Poeditじゃなくても何らかの方法でコンパイル(？)する必要があります。(Poeditが簡単だと思います。)

#Config.languageの設定#

普通はブラウザの情報を元に言語が判断されてるみたいなので、デフォルトで自分が使ってる言語(ここ見てる人はたぶん日本語)になってるはず。これを英語に変えるには、

```php
Configure::write('Config.language', 'eng');
```

とすれば英語に翻訳されたものが表示されます。
引数とかで言語を指定できるactionを書いてcookieとかに入れておくといいのかな。

どうでもいいけど、i18nってinternationalizationの略で、i+18文字+nってことなのね。
arduinoでLCDを利用する方法

arduinoを使って，ＬＣＤキャラクタディスプレイモジュールに出力方法を説明します．

## モジュールについて
今回使用するモジュールは，ＨＤ４４７８０互換のSC1602BS-B(-XA-GB-K)を使います．
[秋月電子へのリンク](http://akizukidenshi.com/catalog/g/gP-00040/ "秋月電子へのリンク")
## バックライトの有効化
LCDモジュールの裏面にバックライトのアノードとカソードがあります．
出荷時のままですと，ここが接続されていないため，バックライトが点灯しません．
付属の抵抗を，カソードに配線します．
次に，アノードのJ3をショートさせます．
![2015-04-21 09.54.28.jpg](https://qiita-image-store.s3.amazonaws.com/0/50627/d1a1b6d8-cf85-cb67-a116-e5add29b1fb8.jpeg)

## 回路図
![メディアシステム演習(LCD)_bb.png](https://qiita-image-store.s3.amazonaws.com/0/50627/9a856043-d9cb-8547-276d-6702759a2223.png)
LCDの2番と5番をジャンパします．
今回は，8bitモードを使用しないので，7から10番は使用しません．
可変抵抗器を加える事で，LCDの輝度を変えることができます．

## コード
```c
#define RS_PIN 8
#define E_PIN 9
#define DB4_PIN 10
#define DB5_PIN 11
#define DB6_PIN 12
#define DB7_PIN 13
#include <LiquidCrystal.h>;

LiquidCrystal lcd(E_PIN, RS_PIN,  DB4_PIN, DB5_PIN, DB6_PIN, DB7_PIN);

void setup() {
  lcd.begin(16, 2);
  lcd.print("hello, world!");
}

void loop() {
  lcd.setCursor(0, 1);
  lcd.print(millis()/1000);
}
```
RS（制御線）ラインとE（制御線）ラインを逆にしてしまうと表示されません．

![2015-04-21 09.05.08.jpg](https://qiita-image-store.s3.amazonaws.com/0/50627/d5bf924e-c58f-4f58-3d3a-50a967f4a1b2.jpeg)
ご覧の用に表示することができます．
可変抵抗器の値は，235~246くらいがきれいに表示されますね．

#### 参考文献
[参考文献](http://electronics.stackexchange.com/questions/115819/arduino-tc1602-no-display-but-backligh "参考文献")
STM32L152C-DISCOVERY 元々入っていたFirmwareをビルドしてみる。(MDK-ARM Lite使用)

STM32L152C-DISCOVERYに元々入っていた、電流をはかって省電力すごいでしょ、というDemoプログラムを、`MDK-ARM Lite`でビルド。

## 環境
ここで使ったものです。
"STM32L152C-DISCOVERY + STM32CubeMX + MDK-ARM Lite で、Ｌチカをやってみた"
その1 http://qiita.com/mt08/items/10c3af50ece52152e2ab
その2 http://qiita.com/mt08/items/853959f86d1051bbe7b8
その3 http://qiita.com/mt08/items/ad95ea94a83c001bbb27

## 手順: AN3413-Current_consumption_touch_sensing
1. ファイル取得 [STSW-STM32072 STM32L1 Discovery firmware package (RN0079)](http://www.st.com/web/en/catalog/tools/FM147/CL1794/SC961/SS1743/LN1734/PF257908)
2. `stsw-stm32072.zip`(Ver 1.0.4) を解凍 => STM32L-Discovery_FW_Packフォルダができる
3. Projectsの中に、2つのデモコードがある。
 1. AN3413-Current_consumption_touch_sensing << こっちを試す。
 2. AN3964-Temperature_sensor
4. MDK-ARMで、プロジェクトファイルを開く。
 `AN3413-Current_consumption_touch_sensing\MDK-ARM\STM32L-Discovery.uvprojx` をダブルクリック。
5. ターゲットを選ぶ `(STM32L152RC`へ)
 *  
![Untitled.png](https://qiita-image-store.s3.amazonaws.com/0/75594/5047ec36-eeae-20e4-2a9e-29b891639291.png)
6. 設定確認 
　1. Project => `Options for Target ... (Alt+F7)で、[Debug]タブで `ST-Link Debugger`が選択
　2. ジャンパーJP1: ON (Pin2と3をショート)
7. Build: `Project => Build target(F7)`
8. Burn: `Flash => Download`
9. Start: `Debug => Start/Stop Debug Session(Ctrl+F5)`
10. Run: `Debug => Run(F5)`

## 手順: AN3964-Temperature_sensor
1.　ジャンパーJP1: OFF (Pin1と2をショート)
2.　あとは、上記と同様にビルド、実行。
docker export や commit では Volume 設定のデータが保存(バックアップ)できない。

# 準備

PostgreSQL9.3 の公式イメージでコンテナ実行。

    $ docker run -d --name db postgres:9.3

デフォルトのデータ保存先を確認すると、ファイルができている。

    $ docker exec db ls -l /var/lib/postgresql/data/
    total 100
    drwx------ 5 postgres postgres  4096 Apr 17 10:57 base
    drwx------ 2 postgres postgres  4096 Apr 17 10:57 global
    drwx------ 2 postgres postgres  4096 Apr 17 10:57 pg_clog
    -rw------- 1 postgres postgres  4506 Apr 17 10:57 pg_hba.conf
    -rw------- 1 postgres postgres  1636 Apr 17 10:57 pg_ident.conf
    drwx------ 4 postgres postgres  4096 Apr 17 10:57 pg_multixact
    drwx------ 2 postgres postgres  4096 Apr 17 10:57 pg_notify
    drwx------ 2 postgres postgres  4096 Apr 17 10:57 pg_serial
    drwx------ 2 postgres postgres  4096 Apr 17 10:57 pg_snapshots
    drwx------ 2 postgres postgres  4096 Apr 17 10:57 pg_stat
    drwx------ 2 postgres postgres  4096 Apr 17 10:59 pg_stat_tmp
    drwx------ 2 postgres postgres  4096 Apr 17 10:57 pg_subtrans
    drwx------ 2 postgres postgres  4096 Apr 17 10:57 pg_tblspc
    drwx------ 2 postgres postgres  4096 Apr 17 10:57 pg_twophase
    -rw------- 1 postgres postgres     4 Apr 17 10:57 PG_VERSION
    drwx------ 3 postgres postgres  4096 Apr 17 10:57 pg_xlog
    -rw------- 1 postgres postgres 20564 Apr 17 10:57 postgresql.conf
    -rw------- 1 postgres postgres    37 Apr 17 10:57 postmaster.opts
    -rw------- 1 postgres postgres    85 Apr 17 10:57 postmaster.pid

# docker export でデータ保存ができるか試してみる

コンテナをファイル出力する

    $ docker export db > backup.tar

ファイルからイメージをインポート

    $ cat backup.tar | docker import - restore
    3ca20306e2fea0682e3a12900f198eb0038ac7228b1c973e7b3e5ae16876d24b

イメージができてるか確認

    $ docker images
    REPOSITORY                   TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
    restore                      latest              3ca20306e2fe        2 minutes ago       208.4 MB
    postgres                     9.3                 b4749b21d4c1        2 weeks ago         212.9 MB
    debian                       wheezy              1265e16d0c28        2 weeks ago         84.98 MB

作成したイメージからコンテナを実行してデータができてるか確認すると、

    $ docker run -it --name restore_db restore /bin/bash
    root@82f874b2278f:/# ls -l /var/lib/postgresql/data/
    total 0
    
できてない。。


# docker commit でデータ保存ができるか試してみる

* docker export で作ったコンテナとイメージを削除をしておく。
* 前述の準備をしておく。

コンテナからイメージを作成する

    $ docker commit db restore

イメージができてるか確認

    $ docker images
    restore                      latest              ea4bddb3f40d        8 seconds ago       212.9 MB
    postgres                     9.3                 b4749b21d4c1        3 weeks ago         212.9 MB
    debian                       wheezy              1265e16d0c28        3 weeks ago         84.98 MB
    
作成したイメージからコンテナを実行してデータができてるか確認すると、

    $ docker run -it --name restore_db restore /bin/bash
    root@43cb817de65b:/# ls -l /var/lib/postgresql/data/
    total 0

できてない。。
WordPressのマルチサイトで404（not found）


## 備忘録

- WordPressのマルチサイトを設定。
- 作成後のサイトが404(not found)になって困った。
- いろいろ探してみると、httpd.confにて以下の設定が不適とわかった。mod_rewriteが無効になっていた。

```
    AllowOverride None
```

- 以下の設定に変更して解決。

```
    AllowOverride All
```

## 参考
http://wp.fsv.jp/guide/multisite-subdirectory/
http://keizokupw.seesaa.net/article/358388640.html
Twitter Bootstrap 逆引き

自分メモです。

## テキストを右or左or中央揃えor均等割付にしたい

`````
<p class="text-left">左揃え</p>
<p class="text-center">中央揃え</p>
<p class="text-right">左揃え</p>
<p class="text-justify">均等割</p>
`````

## テキストを改行させない

`````
<p class="text-nowrap">No wrap text.</p>
`````

## 順序無し(ul)リストを横並びにしたい

`.list-inline`クラスを使えばよい。

`````
<ul class="list-inline">
  <li>...</li>
</ul>
`````

## 順序無しリスト(ul)のスタイルを無くしたい

`.list-unstyled`クラスを使えばよい。が、子要素のみに適用される。ネストした要素にも適用させたいときはクラスを追加する必要がある。

`````
<ul class="list-unstyled">
  <li>...</li>
</ul>
`````


## 右寄せ、左寄せを指定したい

`.pull-left`,`.pull-right`クラスを使えばよい。

`````
<div class="pull-left">左寄せ</div>
<div class="pull-right">右寄せ</div>
`````

## ブロック要素を中央揃えにしたい

`.center-block`クラスを使えばよい。

`````
<div class="center-block">...</div>
`````

## clearfixしたい

`.clearfix`クラスがある。

## 要素を表示/非表示にしたい

表示は`.show`、非表示は`.hidden`を使う。非表示には`.hide`というクラスもあるが、スクリーンリーダーに影響がでるので非推奨とのこと。


`````
<div class="show">...</div>
<div class="hidden">...</div>
`````

## タグの中の文字を消して背景画像で置き換えたい

画像を背景に入れて文字は消したい、みたいなときには`.text-hide`クラスを使えばよい。

`````
<h1 class="text-hide">Custom heading</h1>
`````
STM32L152C-DISCOVERY + STM32CubeMX + MDK-ARM Lite で、Ｌチカをやってみた (その2 ～コード生成からデバッガ設定)


## STM32CubeMX 起動
### [New Project] 
1. [Board Selector]タブを選択。
2. `[v] Initalize all IP with thir default Mode` にチェックを入れる。
3. Filterにて、Type of Board: `Discovery` 、MCU Series: `STM32L1`で、下を選択、`[OK]`

| Type | Reference | MCU |
|:-----|:----------|:----|
| Discovery | 32L152CDISCOVERY | STM32L152RC |
![ボード選択.png](https://qiita-image-store.s3.amazonaws.com/0/75594/0259e268-78aa-d91e-ca91-a3f3a3550182.png)

で、こんなのが出てくる。
![STM32CubeMX_STM32L152RCTx初期画面.png](https://qiita-image-store.s3.amazonaws.com/0/75594/51116082-c08d-8f16-efb1-d2b20be494ef.png)

### HWの設定
1. RCCのHigh Speed Clock(HSE) を BYPASSへ変更。
2. IDD_CNT_EN(PC13-WKUP2)を`Reset state`へ変更。(図のPinの上で右クリックして、メニューを出す)

![RCCのHigh Speed Clock(HSE) を BYPASSへ変更.png](https://qiita-image-store.s3.amazonaws.com/0/75594/a9f8bf7e-e85e-0d22-117f-d889732bd94f.png)

![PC13-WKUP2をReset stateへ変更.png](https://qiita-image-store.s3.amazonaws.com/0/75594/0828eeeb-03a0-4a83-5ac8-acdd9d7323c0.png)

### コード生成とMDK-ARM起動
1. `Project` -> `Generate Code` で、`[Project Settings]`
2. Project Name (例:`Test01`) と Project Location (例: `C:\STM32\`)をうまいとこに指定して、
3. Toolchain / IDE : `MDK-ARM V5` にして、`[OK]`　=> コード生成される
4. `[Open Project]`選んで、MDK-ARMを起動する。

![コード生成.png](https://qiita-image-store.s3.amazonaws.com/0/75594/2ecd4fbc-6d20-614f-b107-f8763e534dc3.png)

## MDK-ARM
### Project設定
1. Project => Options for Target 'Test01 Configuration'... (Alt + F7)
 1. [Output]タブ - `[v] Create HEX File` にチェック (ST-Link utilityで扱える形式)
 2. [C/C++]タブ - Optimization: `Level 0 (-O0)`にすると、最適化がかからないので、デバッグするとき、行番号順に実行されるハズ。
 3. [Debug]タブで、 右上のほうが、`ST-Link Debugger` にして、 `[Settings]`を押して、`Cortex-M Target Driver Setup`ウィンドウを出す。
 4. [Debug Adapter] Port: JTAGから `SW`  へ変更。(JTAG Device Chainのとこが、Unknown target connected から、ARM CoreSight SW-DP)になる。
 5.  [Debug]-[Connect & Reset Options] Connect: `with Pre-reset`へ。 接続するとき、Resetかけてくれる

![Output.png](https://qiita-image-store.s3.amazonaws.com/0/75594/c574ef50-b526-f4bf-2574-77f87fcd3137.png)
![CCpp.png](https://qiita-image-store.s3.amazonaws.com/0/75594/c76a7a34-2bc6-10f4-4001-e1acb4b62fb9.png)
![Debug.png](https://qiita-image-store.s3.amazonaws.com/0/75594/334a1ad6-7ca7-6f60-2701-2b471b68867c.png)
![STLinkSetting.png](https://qiita-image-store.s3.amazonaws.com/0/75594/bf540df8-2ba7-f69b-230a-ab4afb3ddf7b.png)

## [その３へつづく](http://qiita.com/mt08/items/ad95ea94a83c001bbb27)
STM32L152C-DISCOVERY + STM32CubeMX + MDK-ARM Lite で、Ｌチカをやってみた (その3～Lチカコード実行)

## MDK-ARM - Lチカコードをかく。
1. 左のプロジェクトから、main.cを開く。(Project: Test01 -> Test01 Configuration -> Application/User)
2. 下にスクロールしていくと、`int main(void)`が現れ、 その中に `while (1)`が出てくる。
3. 下のように、コードを記述。(`/* USER CODE BEGIN 3 */` から `/* USER CODE END 3 */`の間にユーザコードを書くといいんだろう。)

```c:main.c
...
  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
  /* USER CODE END WHILE */

  /* USER CODE BEGIN 3 */
    #define LED_GPIO_PORT         GPIOB
    #define LED_GREEN_GPIO_PIN    GPIO_PIN_7
    #define LED_BLUE_GPIO_PIN     GPIO_PIN_6
    HAL_GPIO_WritePin(LED_GPIO_PORT, LED_GREEN_GPIO_PIN, GPIO_PIN_SET);
    HAL_Delay(125);
    HAL_GPIO_WritePin(LED_GPIO_PORT, LED_GREEN_GPIO_PIN, GPIO_PIN_RESET);
    HAL_Delay(125);

  }
  /* USER CODE END 3 */

}
...
```

## Build、Burn, Debug Run
1. Project -> Build target (F7)

2. Flash -> Download (Erase => Program -> Verify ってのがステータスバーに現れる)
3. Debug -> `Start/Stop Debug Session (Ctrl+F5)` # Evaluationだよ、ってDialogで、`[OK]`
4. mainの一行目で、Breakしてとまる。
5. Debug->Run(F5) で実行 => ボードの緑のLEDがちかちかする。
6. \# ショートカットキー `Run(F5), Step(F11), Step Over(F10), Step Out(Ctrl+F11), Run to Cursor Line(Ctrl+F10)`

```:build.log
Build target 'Test01 Configuration'
compiling system_stm32l1xx.c...
assembling startup_stm32l152xc.s...
compiling stm32l1xx_hal_lcd.c...
compiling stm32l1xx_hal_flash_ex.c...
compiling stm32l1xx_hal_pwr.c...
compiling stm32l1xx_hal_flash_ramfunc.c...
compiling stm32l1xx_hal_dma.c...
compiling stm32l1xx_hal.c...
compiling stm32l1xx_hal_rcc_ex.c...
compiling stm32l1xx_hal_rcc.c...
compiling stm32l1xx_hal_flash.c...
compiling stm32l1xx_hal_adc_ex.c...
compiling stm32l1xx_hal_cortex.c...
compiling stm32l1xx_hal_gpio.c...
compiling stm32l1xx_hal_adc.c...
compiling stm32l1xx_hal_pwr_ex.c...
compiling main.c...
compiling stm32l1xx_it.c...
compiling stm32l1xx_hal_msp.c...
linking...
Program Size: Code=7236 RO-data=356 RW-data=36 ZI-data=1156  
FromELF: creating hex file...
"Test01 Configuration\Test01 Configuration.axf" - 0 Error(s), 0 Warning(s).
Build Time Elapsed:  00:00:06
```
gyp で Xcode の Asset Catalog (*.xcassets) を利用する

# gyp で Xcode の Asset Catalog (*.xcassets) を利用する

## はじめに

Xcode 5 移行では Asset Catalog を使うと画像を管理しやすくなります。

[gyp](https://chromium.googlesource.com/external/gyp) でも利用できます。

## 前提条件

 1. 開発環境: Xcode 5 以降
 2. Deployment target: iOS 7 または OS X 10.9 以降
	 - Apple のドキュメントにはこう書かれているが、実際には iOS 5 でも利用可能

## 利用方法

 1. Asset Catalog を用意する
 2. *.gyp の `mac_bundle_resources` に Asset Catalog を指定する
 3. *.gyp の `xcode_settings` に設定を追加する
	 1. `App Icon` を設定する
		 - `ASSETCATALOG_COMPILER_APPICON_NAME` に Set List 名を指定する
	 2. `Launch Image` を設定する
		 - `ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME` に Set List 名を指定する

### 利用例

```example.gyp
...

'mac_bundle_resources': [
  ...
  'Images.xcassets',
  ...
],

'xcode_settings': {
  ...
  'ASSETCATALOG_COMPILER_APPICON_NAME': 'AppIcon',
  'ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME': 'LaunchImage',
  ...
},

...
```

`App Icon` と `Launch Image` どちらかだけを指定しても問題ありません。

## 参考資料

 1. [About Asset Catalogs](https://developer.apple.com/library/ios/recipes/xcode_help-image_catalog-1.0/Recipe.html)
 2. [Asset Catalog の AppIcon を使って複数ターゲットで出し分ける - jarinosuke blog](http://blog.jarinosuke.com/entry/switching_appicon_with_assetcatalog)
 3. [Xcode 5 で AssetCatalog 使うと iOS6 以下でアイコンの Gloss Effect がオフに出来ない？ - Qiita](http://qiita.com/monry/items/07dc804185a9589c592c)
 4. [Xcode5でビルドするとiOS6の端末でアイコンにグロス(光沢)が付いてしまう問題の解決策 - ふぃすたぶろぐ](http://fista.hateblo.jp/entry/2013/09/19/175626)