OmniAICreator/Qiita-1.07M huggingface dataset:
[Swift3.0] Storyboardを使わない方法

Swift超初心者なので、Swift超初心者なりにつまずいた点を記載します。
<font color="DeepPink" style="font-size:0.5em;"> I'm a biginner at using Swift,so let me share some of the difficulties that I had to go through as a biginner. </font>

ついでに英語の勉強を兼ねていますので、間違っている点がありましたらぜひご指摘ください。
<font color="DeepPink"> Also, I'm studying English currently,so please correct me if any of my grammar is wrong. </font>

Storyboardを使わずにコーディンしようとした時に、Storyboardファイルを削除するだけではダメだったのでここに記します。
<font color="DeepPink"> When I tried programming without using Storyboard,erasing the Storyboard file was not enough to solve the error.So, let's check it out. </font>

参考にさせていただいたサイト
<font color="DeepPink"> This is the website that I referred to. </font>
<i class="fa fa-external-link"></i> [XcodeのプロジェクトからStoryboardを削除して取り除く方法](http://joyplot.com/documents/2016/11/07/xcode-remove-storyboard/)

![Screen Shot 0029-01-24 at 6.36.43 PM.png](https://qiita-image-store.s3.amazonaws.com/0/98649/ddb87b43-8426-9264-5e71-994f703fcb70.png)
「Single View Application」でプロジェクトを作成します。
<font color="DeepPink">And create Project using 'Single View Application'. </font>

![Screen Shot 0029-01-24 at 6.42.08 PM.png](https://qiita-image-store.s3.amazonaws.com/0/98649/e5edbb58-6efc-0609-4cef-a3259b67143e.png)
「Main.storyboard」「LaunchScreen.storyboard」「Assets.xcassets」の3つのファイルを削除します。
<font color="DeepPink">And delete three files "Main.storyboard" "LaunchScreen.storyboard" "Assets.xcassets". </font>

![Screen Shot 0029-01-24 at 6.46.11 PM.png](https://qiita-image-store.s3.amazonaws.com/0/98649/0b4d7b16-6067-087a-0558-e2c29a8383f1.png)
「info.plist」ファイルの「Launch screen interface file base name」「Main storyboard file base name」の2つを削除します。
<font color="DeepPink">And delete two files "Launch screen interface file base name" "Main storyboard file base name" in info.plist </font>

この状態で一旦ビルド（cmd+r）します。
<font color="DeepPink"> In this case,first we build. </font>

![Screen Shot 0029-01-24 at 6.48.35 PM.png](https://qiita-image-store.s3.amazonaws.com/0/98649/30006ccc-f592-9502-fc60-55e682fb764d.png)
画像がないとエラーがでますので、エラーメッセージをクリックします。

<font color="DeepPink"> Without an image,we encounter an error,so click on the error message. </font>

ダイアログが表示されますので、「Add」をクリックしてxcodeに自動で画像を作ってもらいます。
<font color="DeepPink"> Once the dialog appears, click "add" and then a image has made by the xcode automatically. </font>

![de.png](https://qiita-image-store.s3.amazonaws.com/0/98649/5376080c-7ade-090d-9f84-a6721c2c63f3.png)
「AppDelegate.swift」に下記のコードを追記します。
<font color="DeepPink"> Insert coding below in AppDelegate.swift. </font>

```swift
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

// ここに追記

}
```

```swift
window = UIWindow(frame: UIScreen.main.bounds)
window!.backgroundColor = UIColor.white
window!.rootViewController = ViewController()
window!.makeKeyAndVisible()
```

ビルドしたらstoryboardがない状態でコーディングが開始できるはずです。
<font color="DeepPink"> The once you build,the coding begins without any Storyboard. </font>
よろしくお願いいたします。
<font color="DeepPink"> Thanks you. </font>
Chrome + ELB(ALB)で接続が遅い問題


ChromeでELBのサイトにアクセスすると、たまに1分以上応答がないことがある。

意外とレアな現象？？
stackoverflowで発見。
ELB(ALB)では２つのサブネットを設定するけど、Privateなサブネットを設定するとこのエラーが発生するらしい。

実際、２つのサブネットにigwを設定したら早くなった。

http://stackoverflow.com/questions/35523421/aws-elastic-load-balancing-seeing-extremely-long-initial-connection-time
.gitconfigをさらしてみる(随時更新)

# はじめに
いまさらながら私が普段使用している.gitconfigの内容を記載します。
以前、書いた記事「[.gitconfigファイルを直接いじってみる（設定関係メモ）](http://qiita.com/KTakata/items/470da16b9e53799dcb65)」に記載してもいいな...と思ったけど
こっちは、新しい設定が生えたら更新していく感じで

普段CUIからGITをいじっている私としては便利になるのは大歓迎
もしもお勧めのaliasなどありましたら教えていただけるとうれしいです。:nose_tone1:

# 現在の.gitconfig
```ruby:.gitconfig
[alias]
    # 基本コマンド
    bra = branch
    ci = commit
    cia = commit --amend
    cm = commit -m
    co = checkout
    cb = checkout -b  # ブランチを新規作成してチェックアウト(移動)する
    ft = fetch
    # logをgraph表示させる
    gr = log --all --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --date=relative
    rb = rebase
    rba = rebase --abort
    rbc = rebase --continue
    rs = reset
    st = status
[color]
    ui = auto
[user]
    # 環境や現場によって変えるところ
    name = KTakata
    email = hogehoge@example.com
[gui]
    # gitkなどもし使うときにencodingを設定
    encoding = utf-8
[receive]
    # 強制Pushを許可(仕事場ではtrue設定)
    denyNonFastforwards = false
[core]
    # 日本語が数値コードで表示されないようにする
    quotepath = false
    # Win環境のみ/Windows環境でコードをチェックアウトするときに行末のLFをCRLFに自動変換
    autocrlf = true
[merge]
    # mergeは基本--no-ffオプションをつける
    ff = false
[pull]
  rebase = true
```
### aliasのオプションについて

```ruby:
--all # 全ブランチを表示
--graph # グラフ形式で表示
--pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' # 色、装飾付け
--abbrev-commit # コミットを一意に特定できる範囲の省略形で出力
--date=relative # 相対時間表示(3 days ago)
```

# 参考
- [Git のさまざまなツール - リビジョンの選択](https://git-scm.com/book/ja/v1/Git-%E3%81%AE%E3%81%95%E3%81%BE%E3%81%96%E3%81%BE%E3%81%AA%E3%83%84%E3%83%BC%E3%83%AB-%E3%83%AA%E3%83%93%E3%82%B8%E3%83%A7%E3%83%B3%E3%81%AE%E9%81%B8%E6%8A%9E)
- [git merge で常に --no-ff](http://qiita.com/ponko2/items/9446b45d79cc78d7662d)
- [git logのフォーマットを指定する](http://qiita.com/harukasan/items/9149542584385e8dea75)
- [.gitconfigファイルを直接いじってみる（設定関係メモ）](http://qiita.com/KTakata/items/470da16b9e53799dcb65)
- [gitで日本語のファイルを扱うときに数字コードが表示される](http://qiita.com/KTakata/items/44d639b50f61d869a03b)
PugでSVGをインクルードする

<!---


--->

# includeを使ってSVGを埋め込み

includeを使ってSVGファイルをHTMLの内部に埋め込見ます。

```jade:example.pug
div: div: include cc.svg

```

pugコマンドでhtmlを生成します。`--pretty` は出力するHTMLを整形するオプションです。

```jade:HTMLを生成
node_modules/.bin/pug example.pug --pretty

```

このようなHTMLが出力されます。

```
<div>
  <div><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
  <circle cx="50" cy="50" r="43" fill="none" stroke="#000" stroke-width="9"/>
  <path d="M50,42c-6-9-20-9,-25,0c-2,5-2,11,0,16c5,9,19,9,25,0l-6-3c-2,5-9,5-11,0c-1-1-1-9,0-10c2-5,9-4,11,0z"/>
  <path d="M78,42c-6-9-20-9,-25,0c-2,5-2,11,0,16c5,9,19,9,25,0l-6-3c-2,5-9,5-11,0c-1-1-1-9,0-10c2-5,9-4,11,0z"/>
</svg>

  </div>
</div>

```

# サイズを指定してSVGを埋め込み

includeを使ってSVGファイルをHTMLの内部に埋め込見ます。


```jade:サイズ指定の出力
div: div(style="width: 30px"): include cc.svg

```

このようなHTMLが出力されます。

```
<div>
  <div style="width: 30px;"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
  <circle cx="50" cy="50" r="43" fill="none" stroke="#000" stroke-width="9"/>
  <path d="M50,42c-6-9-20-9,-25,0c-2,5-2,11,0,16c5,9,19,9,25,0l-6-3c-2,5-9,5-11,0c-1-1-1-9,0-10c2-5,9-4,11,0z"/>
  <path d="M78,42c-6-9-20-9,-25,0c-2,5-2,11,0,16c5,9,19,9,25,0l-6-3c-2,5-9,5-11,0c-1-1-1-9,0-10c2-5,9-4,11,0z"/>
</svg>

  </div>
</div>

```

`div` タグのスタイルが指定されています。`div` でなくてもブロック要素であれば大丈夫です。


# CSSでサイズを指定してSVGを埋め込み

埋め込んだSVGのサイズはCSSでも指定できます。

```jade:example.pug
link(href="example.css" type="text/css" rel="stylesheet")
div: div.include_svg: include cc.svg

```

```jade:example.css
.include_svg {
    width: 30px;
}

```

このようなHTMLが出力されます。

```
<link href="example.css" type="text/css" rel="stylesheet"/>
<div>
  <div class="include_svg"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100">
  <circle cx="50" cy="50" r="43" fill="none" stroke="#000" stroke-width="9"/>
  <path d="M50,42c-6-9-20-9,-25,0c-2,5-2,11,0,16c5,9,19,9,25,0l-6-3c-2,5-9,5-11,0c-1-1-1-9,0-10c2-5,9-4,11,0z"/>
  <path d="M78,42c-6-9-20-9,-25,0c-2,5-2,11,0,16c5,9,19,9,25,0l-6-3c-2,5-9,5-11,0c-1-1-1-9,0-10c2-5,9-4,11,0z"/>
</svg>

  </div>
</div>

```

CSSで指定されているのでそのサイズが使われます。


# あとがき

使用したpackage.jsonを載せておきます。

```
{
  "name": "include-svg",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "pug": "^2.0.0-beta7",
    "pug-cli": "^1.0.0-alpha6"
  }
}

```

Qiita記事には埋め込みSVGが使えないようでした。
数式

[数式のHELP](https://help.salesforce.com/articleView?id=customize_functions_i_z.htm&language=ja&type=0)
####項目のNULL判定

ISNULL(項目API名)
ISBLANK(項目API名) テキスト項目サポートをISNULLに加えた関数
`ISNULL(Datatype__c)`
*多くの型（テキスト型、参照型）がISNULLだとうまく判定できないので、ISBLANKの方が安全*

数式の数値項目で ISNULL判定がうまく動かない場合は、数式フィールドの下記の設定をチェックする。「0として処理する」だと期待したように動かない。
<img width="661" alt="Screen Shot 2018-10-09 at 18.22.58.png" src="https://qiita-image-store.s3.amazonaws.com/0/161463/d1b046e3-e9b4-a9c3-5336-dbac7ddc09b0.png">

####選択リストとの値の比較
ISPICKVAL(項目API名, '項目値')
`ISPICKVAL(DataType__c, '選択リスト')`

####選択リストのNULL判定
`ISBLANK(TEXT(項目API名))`

###チェックボックスがOFFの判定
`NOT(項目API名),`

####IF判定
IF(条件式,trueの値,falseの値)
`IF(ISNULL(Datatype__c),true,false)`  //Datatype__cはテキスト型 
`IF(IsAnswered, '回答済み','未回答')`   //IsAnsweredはcheckbox型

####項目が更新されたかどうか
`ISCHANGED(項目API名)`

####更新前の値の取得
`PRIORVALUE(項目API名)`
`ISPICKVAL(PRIORVALUE(項目API名), '項目値')`

####文字列の連結
`Year(RecordedDate__c ) & "/" & Month(RecordedDate__c)`

####相対月の算出
前年同月の比較とかを行いたい場合に利用（0:当月、-12:前年同月という感じの値となる）
`( (Year(RecordedDate__c) - Year(today())) * 12 ) + (Month(RecordedDate__c)  - Month(today()))`

####四半期の算出
```java
CASE(
    MONTH(TODAY()),

    1, 1,
    2, 1,
    3, 1,

    4, 2,
    5, 2,
    6, 2,

    7, 3,
    8, 3,
    9, 3,

    4
)
```

####日付に営業日を加算する
次の数式は、指定した date から 3 営業日後を確認する。

```
CASE( 
  MOD( date - DATE( 1900, 1, 7 ), 7 ),
  3, date + 2 + 3,
  4, date + 2 + 3,
  5, date + 2 + 3,
  6, date + 1 + 3,
  date + 3
)
```
この数式は、date 項目値の曜日を確認します。日付が水、木、金曜日の場合5日 (週末 2 日と 3 日) が加算される。

####複数の条件の判定
`AND(xxx, xxx)`
`OR(xxxx, xxxx)`

####数値の判定
`ISNUMBER(XXX__c)`

####数値、テキスト変換
`VALUE(xxx__c)  //数値に変換`
`TEXT(xxx__c)   //テキストに変換`

####新規レコードの作成の判定
`ISNEW()`

####自分が所有者かどうかの判定
$User.xx はログインユーザーによって値が変化する
`OwnerId <> $User.Id`

###商談の所有者がログインユーザーと同じ部門かを判定
(Userオブジェクトにカスタムフィールド department__c が設定されていることが前提）

```
AND($User.department__c != null, 
    $User.department__c = Owner.department__c)
```

####Validation Rules(入力チェック）の例
特定のプロファイルのユーザーに、自分が所有者ではないレコードの更新を禁止させるためのValidation。
ただし、xxx__c 項目への更新だけは許可する。

```
AND( 
 NOT(ISNEW()), 
 OwnerId <> $User.Id, 
 OR( 
  $Profile.Name='Admin User', 
  $Profile.Name='Marketing User' 
 ), 
 NOT(ISCHANGED(xxx__c)) 
)
```

####カスタム設定の参照
階層型のみサポートされる。
`{!$Setup.CustomSettingName__c.CustomFieldName__c}`

####SalesforceのベースURLを取得

```
LEFT($Api.Partner_Server_URL_XXX, FIND( '/services', $Api.Partner_Server_URL_XXX))
```
Partner_Server_URL_URL_XXX はAPIバージョン
https://xxx.cs31.my.salesforce.com/ のようなURLを取得可能
MySQLをRubyで操作する際のERROR (接続エラー)

#はじめに
RubyでMySQLに連続してinsertする際に、errorが発生する。

##error内容

```
C:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/ruby-mysql-2.9.14/lib/mysql/protocol.rb:153:in 
`initialize': Only one usage of each socket address (protocol/network address/port) is normally permitted.
 - connect(2) for "127.0.0.1" port 3306 (Errno::EADDRINUSE) from 
 - C:/Ruby22-64/lib/ruby/gems/2.2.0/gems/ruby-mysql-2.9.14/lib/mysql/protocol.rb:153:in `new' 
 - fromC:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/ruby-mysql-2.9.14/lib/mysql/protocol.rb:153:in 
 - `block in initialize'
        from C:/Ruby22-x64/lib/ruby/2.2.0/timeout.rb:73:in `timeout'
        from C:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/ruby-mysql-.9.14/lib/mysql/protocol.rb:147:ininitialize'
        from C:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/ruby-mysql-2.9.14/lib/mysql.rb:115:in `new'
        from C:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/ruby-mysql-2.9.14/lib/mysql.rb:115:in `connect'
        from C:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/ruby-mysql-2.9.14/lib/mysql.rb:50:in `new'
        from program.rb:201:in `insert'
        from program.rb:216:in `block in select_mysql'
        from C:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/ruby-mysql-2.9.14/lib/mysql.rb:675:in `call'
        from C:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/ruby-mysql-2.9.14/lib/mysql.rb:675:in `each'
        from program.rb:212:in `select_mysql'
        from program.rb:221:in `<main>'
```

#errorの発生の原因
連続してデータベースにデータをinsertすると、接続できないタイミングが発生するらしい。
要するに、MySQLの3306番ポートに接続出来なかったためにエラーが発生する。


例えば以下のようなプログラム

```insert.rb
require 'mysql'

for t in 0..10000000 do
  my = Mysql.new('127.0.0.1', 'root', 'pass', 'database_naem')
  #table_naem に　変数tの値を入れる
  res = my.query("insert into table_name values(#{t})")
  my.close
end
```

上のような記述だと、短期間で接続と切断を繰り返すので、
なんらかのタイミングで接続エラーを起こしてしまう場合がある。

##改善策
接続エラーを発生させないためには、
for文の中で、接続と切断の記述をしない。

例えば以下のようにする

```insert.rb
require 'mysql'

my = Mysql.new('127.0.0.1', 'root', 'pass', 'database_naem')

for t in 0..10000000 do
  res = my.query("insert into table_name values(#{t})")
end
my.close
```

このように、
for文の外で、接続と切断をすることで
接続エラーを回避することが出来る。
A/Dコンバータ(MCP3204)を使用してAndroidThingsでアナログ入力する

AndroidThingsでアナログ入力をするには外部のA/Dコンバータを使用する必要があります。今回はSPI接続のMCP3204(以下ADC)を使用してA/D変換したデータを取得してみました。

[MCP3204のデータシート](http://ww1.microchip.com/downloads/en/DeviceDoc/21298b.pdf)

#A/Dコンバータ(MCP3204)と接続
ADCをRaspberry PiのSPI通信に対応するピン(19, 21, 23)と接続します。今回はCS(SS)信号にBCM6を使用し、ADCは0chのみを使用しました。
https://developer.android.com/things/hardware/raspberrypi-io.html

#SPI通信の設定
SPIモードはmode0、電源は5Vを使用するのでSPIの通信速度は2MHz、MSBfirstで8bitずつ送信します。

```java
public void configureSpiDevice(SpiDevice device) throws IOException {
        device.setMode(SpiDevice.MODE0); 
        device.setFrequency(2000000);      // 2MHz
        device.setBitsPerWord(8);          // 8 BPW
        device.setBitJustification(false); // MSB first
    }
```

#AD変換されたデータを取得する

```java
    private Runnable mRunnable = new Runnable() {
        @Override
        public void run() {
            byte[] txData = new byte[]{(byte) (0x06 | CHANNEL >> 2), (byte) (CHANNEL << 6), 0x00};  // 送信データ
            byte[] rxData = new byte[3];  // 受信データ

            // GPIOが閉じている場合はRunnableを終了
            if (GPIO_BCM6 == null) {
                return;
            }

            try {
                mHandler.postDelayed(mRunnable, 50);  // 50ms待つ
                GPIO_BCM6.setValue(false);  // LOW
                mDevice.transfer(txData, rxData, rxData.length);  // SPI通信
                GPIO_BCM6.setValue(true);   // HIGH
                float ans = (rxData[1] & 0x0F) * 256 + (rxData[2] & 0xFF);  // 10進数に変換
                Log.d(TAG, String.valueOf(ans));

            } catch (IOException e) {
                Log.e(TAG, "Error on PeripheralIO API", e);
            }
        }
    };
```

BCM6をLOW→HIGHにする間データを読み込みます。
送信するデータ(制御ビットの詳細)はこちらのサイトを参考にしました。
http://www.geocities.jp/zattouka/GarageHouse/micon/circuit/A_D.htm

rxData[1]に格納されるバイナリデータは下位4bitのみ使用するため0x0FとAND演算し、最下位bitが256を示すので256を乗算します。
rxData[2]に格納される8bitのバイナリデータはすべて使用しますが、byte型が符号付きの8bitで-128~127の範囲しか表現することができないため、0xFFをAND演算して正の値を取り出します。

上記のデータを加算することでAD変換されたデータを取得することができます。
ubuntu14 apache2で簡易phpのページを動かす最短メモ

#apacheインストール
```sudo apt-get install apache2```
#phpインストール
```sudo apt-get -y install php5 php5-cgi libapache2-mod-php5 php5-common php-pear```
#ユーザーの設定
```sudo chgrp -R グループ名 www```
```sudo chmod g+w www```
```sudo chmod g+w /var/www/html```
#configファイルの設定
/etc/apache2/apache2.confを編集
Enabling conf

CGIを有効にする
```<Directory />
	Options None ExecCGI
	AllowOverride All
	Require all denied
</Directory>```

ディレクトリ内のファイル一覧表示をしないようにする。好きな場所をルートディレクトリにする。
```<Directory /var/www/html>
	Options FollowSymLinks
	AllowOverride None
	Require all granted
</Directory>```

```sudo a2enconf php5-cgi.conf```

#/etc/php5/apache2/php.iniの設定
date.timezone = "Asia/Tokyo"
を記載

#phpファイルを配置
index.php
```<?php
      print Date("Y/m/d");
?>```
を記載

#リンクを貼りたい場合
sudo ln -s [貼りたいフォルダのパス] /var/www/html/hogehoge

#apache再起動
```sudo /etc/init.d/apache2 restart```

#動作確認
http://localhost/
http://サーバーのIP/
http://サーバーのIP:サーバーのポート/

#うまくいかない場合はエラーを確認
```tail /var/log/apache2/access.log```
```tail /var/log/apache2/error.log```

#サンプル集
phpとjsで画像一覧を表示する
http://mechsys.tec.u-ryukyu.ac.jp/~oshiro/SiteList/2012/06/06/2392
phpとjsでtree構造でファイル一覧を表示する
http://smkn.xsrv.jp/blog/2009/04/directory_tree_with_php_and_jquery/

#注意

1つのフォルダ内の上限サイズが決まっている。越えるとアクセスできない。
http://ja.stackoverflow.com/questions/11794/ubuntu%E3%81%A7%E3%81%AE1%E3%83%87%E3%82%A3%E3%83%AC%E3%82%AF%E3%83%88%E3%83%AA%E3%81%82%E3%81%9F%E3%82%8A%E3%81%AE%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E6%95%B0%E4%B8%8A%E9%99%90-%E5%AE%B9%E9%87%8F%E4%B8%8A%E9%99%90%E3%81%AF%E3%81%82%E3%82%8B%E3%81%AE%E3%81%A7%E3%81%97%E3%82%87%E3%81%86%E3%81%8B

#参考
http://ctips.slackhack.net/linux/ubuntu/88/

basic認証
http://qiita.com/shell/items/5606d37a802e39479036
静的ページ
http://qiita.com/miyamotok0105/items/7975b2df20237df29198
railsで【超簡単に】javascriptに変数を渡す方法（jQuery）

# やりたいこと
ビューで使える変数(current_user.nameとか@group.idとか)を、
javascriptでも***超簡単に***使えるようにしたい。（rails）

# 実際にやること
- viewにinputで変数を埋め込む
- jsの方で取り出す

## viewに変数を埋め込む
viewの中でinputを使うと変数を埋め込むことができます。
また、hiddenオプションを使えばフロントでは見えなくなります。（ソースコードを表示すると見えます。）

具体的には以下のようにしてください。

```haml:index.html.haml
%input{name: "current_user_name", type: "hidden", value: current_user.name, class: 'current_user_name' }/
```

hamlなので、適宜htmlに変換してください。

inputでviewの中へ埋め込み、type: "hidden"で非表示にしました。
javaで使える値であるvalue: current_user.nameを設定しています。***ダブルクオーテーションなどを付けないように注意してください。***
ちなみに、実際の値をchromeの"ソースを表示"機能を使って確かめられます。
![スクリーンショット 2017-01-24 17.58.38.png](https://qiita-image-store.s3.amazonaws.com/0/145707/2833f709-90c2-ff81-4a94-66c3fc752bad.png)

さらにclassを設定してviewでの値の埋め込みは終了です。

## javascript側でどう読み込むか

jQueryを使います。
クラスを指定して、val()とすることにより中のvalueを取り出せます。

```java:messages.js
name = $('.current_user_name').val();
```

viewで設定したclassであるcurrent_user_nameを指定し、val()で取り出します。


# 他の方法もあるらしい、、、

gonというgemを使う方法もあるそうです。

調べたらgonを使った方が簡単かもしれない、、、
複数変数を使う場合はgonの方が簡単な気がします、、、

ゴンさん、、、、


##番外編；最近買った、面白いもの
[・ハンターハンター34巻（6/29）](http://amzn.to/2u6iUc4)
クロロ VS ヒソカとか、どうやっても面白くなるとしか
[・カーテン自動開閉ロボット](http://amzn.to/2u6LHwS)
カーテンレールに付ける4000円のロボット。
これを付けてから目覚ましなしで起きられる率が上がった。
[・衛藤美彩 写真集](http://amzn.to/2tcFfIz)
「綺麗なお姉さん」が好きな人、ちょっと眺めてるだけで幸せになれますよ。

### 参考サイト様

[【jQuery】input要素の値を取得する、設定する](http://d.hatena.ne.jp/T-38/20110420/1303280791)

[RailsからJavaScriptにデータを渡す](http://qiita.com/mosa_siru/items/e69eee47a183b13cfb62)

[Ruby On Rails Gemまとめ -gon-](http://qiita.com/yk-212/items/8d648b83e24a43af17ba)
Safariのreloadはおかしい件

最近テストの方より一つのバグを見つかった。Postによって作成したWebページは、Safariで、`window.location.reload(true);`　を実行したら、元どおりPostで発信することなく、代わりにGetでやった。
どうやら、救済はサイトの設計を変わるのみだな。
apache2で静的ページを動かす最短メモ

# apacheインストール(ubuntu14)

```
sudo apt-get install apache2
```


#ユーザーの設定

```sudo chgrp -R グループ名 www```
```sudo chmod g+w www```
```sudo chmod g+w /var/www/html```


# configファイルの設定

/etc/apache2/apache2.confを編集
Enabling conf


### ルートディレクトリーを公開する

/var/www/html配下にあるファイルを公開する。


```
DocumentRoot "/var/www/html"
```


### ドキュメントルート以外を公開する

/var/www/html/xxxx配下にあるファイルを公開する。
URLは/xxx1で通信。


```
Alias /xxx1 "/var/www/html/xxxx"
<Directory "/var/www/html/xxxx">
    AllowOverride None
    Require all granted
</Directory>
```



```sudo a2enconf php5-cgi.conf```

#リンクを貼りたい場合
sudo ln -s [貼りたいフォルダのパス] /var/www/html/hogehoge

#apache再起動
```sudo /etc/init.d/apache2 restart```

#動作確認
http://localhost/
http://サーバーのIP/
http://サーバーのIP:サーバーのポート/

#うまくいかない場合はエラーを確認
```tail /var/log/apache2/access.log```
```tail /var/log/apache2/error.log```

#参考
http://ctips.slackhack.net/linux/ubuntu/88/

basic認証
http://qiita.com/shell/items/5606d37a802e39479036
簡易phpページ
http://qiita.com/miyamotok0105/items/851a5e27629bfd1e3226
Azure Resource Manager quickstart の 101-vm-simple-linux のパスワードについて

# 概要

* [Azure/azure-quickstart-templates: Azure Quickstart Templates](https://github.com/Azure/azure-quickstart-templates)

`101-vm-simple-linux`

パスワードを設定できるのだが、簡単なパスワードにしたら、デプロイできなかった

# 結論

難しいパスワードにする。
または、パスワードではない、マシンを作る

# どんなエラーメッセージだったか

```
error:   The supplied password must be between 6-72 characters long and must satisfy at least 3 of password complexity requirements from the following: 
1) Contains an uppercase character
2) Contains a lowercase character
3) Contains a numeric digit
4) Contains a special character.
error:   
```
AWS CLI で CloudWatch からデータを取る

良くは実行しないけど、使う時に忘れているのでコマンドそのままで備忘録。
定期的に実行して値をログに書いとけば、後でグラフも集計もできる。

## ELB のバランシング数の取得
jqで整形して、バランシング数のみを取得

aws elb describe-instance-health 
--profile プロファイル名 
--load-balancer-name ELB名 
| jq '.InstanceStates[]|{InstanceId, State}'

## S3 の配置ファイル名一覧の取得
S3内にあるファイル名一覧を取得

aws s3 
--recursive
--profile プロファイル名 ls バケット名 

## EC2 のCPU使用率の取得
2行取得して、jqで整形して、CSV化して、最後(最新)の1行の使用率のみを取得

aws cloudwatch get-metric-statistics 
--namespace AWS/EC2 
--profile プロファイル名 
--metric-name CPUUtilization 
--start-time `date -u -d '9 minutes ago' +%Y-%m-%dT%TZ` 
--end-time `date -u +%Y-%m-%dT%TZ` 
--period 300 
--statistics Maximum 
--dimensions Name=InstanceId,Value=インスタンス名 
| jq -r '.Datapoints[] | [ .Timestamp ,.Maximum] | @csv' 
| sort | tail -1 | cut -d',' -f2 

## RDS(segment-info)のCPU使用率の取得
2行取得して、jqで整形して、CSV化して、最後(最新)の1行の使用率のみを取得

aws cloudwatch get-metric-statistics 
--namespace AWS/RDS 
--profile プロファイル名 
--metric-name CPUUtilization 
--start-time `date -u -d \'9 minutes ago\' +%Y-%m-%dT%TZ` 
--end-time `date -u +%Y-%m-%dT%TZ` 
--period 300 
--statistics Maximum 
--dimensions="Name=DBInstanceIdentifier,Value=インスタンス名"
| jq -r '.Datapoints[] | [ .Timestamp ,.Maximum] | @csv' 
| sort | tail -1 | cut -d',' -f2
Retrofit + RxJavaでAPIを呼んでいたところをRxJava2.0に対応した

重い腰をあげて対応したときのメモです。

## RxJava -> RxJava2の変更点
- インターフェースにSingleやMaybeなどが追加されました。
- 詳細はこちらの記事が詳しいです。
    - http://qiita.com/takahirom/items/f3e576e91b219c7239e7

## 対応
### 準備
- RxJava/RxAndroidのバージョンをあげて、RetrofitのAdapterはJake神が作ったものがあるのでそちらを入れます。
    - ~~https://github.com/JakeWharton/retrofit2-rxjava2-adapter~~ (これは本家が対応したみたいなので役目を終えていました。下のを参照)
    - https://github.com/square/retrofit/tree/master/retrofit-adapters/rxjava2
- RetrofitのインスタンスにセットしているRxJavaのAdapterはJakeのライブラリの`RxJava2CallAdapterFactory`で作ったものをセットします。

### インターフェースの変更
- APIのインターフェースでObservableで受けていたところを変更します。
    - GETなどレスポンスが返ってくるものは `Single`
    - POSTなどレスポンスがNoContentのものは `Completable`
    - 値が流れてくるかどうかの違いはありますが、Subscribeする側は成功したか失敗したかということだけ気にすればよいインターフェースになりました。ちなみにNoContentが返るAPIを`Single`で受けると`onSuccess`にnullは流せないという旨の例外が`onError`に流れてきます。
- `Subscription`は名前が変わって`Disposable`になったので、`CompositeSubscription`を使っていたところは`CompositeDisposable`に変えて、解放するメソッドも`unsubscribe`から`dispose`に変わります。
- Streamの種類が増えたので、StreamをつなげていたoperatorやdoXXXの種類も増えました。例えばAPIを呼んで返ってきた結果を次のAPIに渡して最終的に`Completable`を返すという場合はこんな感じになります。(コードはkotlinです)

```kotlin:SampleUsecase.kt
fun execute(postData: String): Completable
    return retrofitService.getHoge().flatMap { response -> 
        return@flatMap retrofitService.postFuga(response.id, postData) 
    }.doOnEvent { response, throwable ->
        // 成功 / 失敗にかかわらず実行される処理
    }.flatMapCompletable {
        // 成功したらレスポンスを処理してCompletableを返す
        return@flatMapCompletable Completable.complete()
    }.onErrorResumeNext {
        // 失敗したらエラーを処理してCompletableを返す
        return@onErrorResumeNext Completable.error(RegistrationFailedException())
    }
}
```

- subscribeする側はラムダを使っていればそんなに意識することはないと思いますが、onCompleteには `Action` を渡すけど、Singleには `Consumer<? super T>` を渡すというような違いもあります。

```kotlin:SamplePresenter.kt
fun onClickHogeFuga(value: String) {
    disposable?.add(sampleUsecase.execute(value)                
            .subscribeOn(Schedulers.newThread())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe({
                // 成功したときの処理
            }, {
                // 失敗したときの処理
            }))
}
```

- ちなみに弊社では拡張関数を生やしてこんな感じに書いてます。

```kotlin:SamplePresenter.kt
fun Completable.subscribeAsync(onComplete: () -> Unit, onFailure: (Throwable) -> Unit = {}, onEventFinished: () -> Unit = {}): Disposable {
    return subscribeOn(Schedulers.newThread())
            .observeOn(AndroidSchedulers.mainThread())
            .doFinally(onEventFinished)
            .subscribe(onComplete, onFailure)
}

fun onClickHogeFuga(value: String) {
    disposable?.add(sampleUsecase.execute(value).subscribeAsync({
        // 成功したときの処理
    }, {
        // 失敗したときの処理
    }))
}
```

## 所感など
- Streamの種類が増えたことで、Publishする側は何を流すか考えることが増えた分、Suscribeする側は流れてくるものに合わせることになるので考えることが減りました。個人的には2系の方が素直な実装ができる印象です。
ConoHaでDocker Machineがうまく使えなかったのでなんとかした話

# 概要(TL;DR)
docker-machine createでSSHが延々とコケ続けるときは、`docker-machine provision　マシン名`を試せ

# はじめに
[ConoHaでDocker Machineを使う](http://qiita.com/hironobu_s/items/db865ca43af8eca9d3ac)の記事を読んで、よっしゃ俺も使ったるで！と意気込んでやったものの、いろいろコケるコケる。
openstackドライバを経由して作成すると必ずSSHで死ぬので、ConoHaでインスタンスを手動で作ってdockerホストにしてからgenericドライバで接続なんていう、わりと不毛なことをやるしか方法はないのか、、、とずっと困っていたところでした。

# やり方
詳しいやり方は上記記事に書いてありますが、改めて手順をおさらいします。

コントロールパネルの[API](https://manage.conoha.jp/API/)から、以下の情報をコピーしておきます。

- ユーザー名(APIユーザーのgcnuで始まるやつ) **テナント名とは微妙に違うので注意**
- テナントID
- APIパスワード
- エンドポイントのURL(https://identity.tyo1.conoha.io/v2.0)
- リージョン名(今回は東京なのでtyo1)

以下のような環境変数の形に成形。(私はコンテナを複数使う可能性があったので[direnv](http://qiita.com/tkmiya34/items/875742eb56ebe54d8828)を使って`.envrc`に登録しました！)


```shell
export OS_USERNAME=gncu00000000
export OS_TENANT_ID=XXXXXXXXXXXXXXXXXXXXXXX
export OS_PASSWORD=Password123!
export OS_AUTH_URL=https://identity.tyo1.conoha.io/v2.0
export OS_REGION_NAME=tyo1
```

.envrcを保存したディレクトリにて、docker-machineの以下コマンドを叩きました。
[2017年1月現在のフレーバーリスト](https://gist.github.com/inductor-/7abd0bbf169b938bc9598115a280244c)

```shell
docker-machine create -d openstack --openstack-flavor-name g-2gb  --openstack-image-name vmi-ubuntu-16.04-amd64-unified   --openstack-sec-groups "default,gncs-ipv4-all" test
```

```shell
$ docker-machine create -d openstack --openstack-flavor-name g-2gb  --openstack-image-name vmi-ubuntu-16.04-amd64-unified   --openstack-sec-groups "default,gncs-ipv4-all" test
Running pre-create checks...
Creating machine...
(test) Creating machine...
Waiting for machine to be running, this may take a few minutes...
Detecting operating system of created instance...
Waiting for SSH to be available...
Detecting the provisioner...
Provisioning with ubuntu(systemd)...
Error creating machine: Error running provisioning: Something went wrong running an SSH command!
command : sudo apt-get update
err     : exit status 100
output  : E: Could not get lock /var/lib/apt/lists/lock - open (11: Resource temporarily unavailable)
E: Unable to lock directory /var/lib/apt/lists/
E: Could not get lock /var/lib/dpkg/lock - open (11: Resource temporarily unavailable)
E: Unable to lock the administration directory (/var/lib/dpkg/), is another process using it?
```

なんか出た！！！
何度やってもずっとこの状態が直らないのでいろいろ調査。

https://docs.docker.com/machine/reference/provision/

`docker-machine provision test` と実施したらうまくいった・・・・
長かった
AWSのEC2にLAMP環境とついでにphpMyAdminをインストールする手順

AWSのEC2のインスタンス立ち上げからLAMP環境構築までの手順メモです。
一回やればAMI作れるんですけど、新規案件だと毎回忘れるw

#LAMPインストール
[（AWS Linux インスタンス用ユーザーガイド より転載）](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/install-LAMP.html)

###1. インスタンスに接続します。
###2. すべてのソフトウェアパッケージが最新の状態であることを確認するため、インスタンスでソフトウェアの更新を実行します。
- この処理には数分かかりますが、最新の更新とバグ修正を確実に適用することが重要です。

```
[ec2-user ~]$ sudo yum update -y
```
> **Note**
> -y オプションを指定すると、確認メッセージを表示せずに更新をインストールできます。
> インストール前に更新を検査する場合は、このオプションを省略できます。

###3. ソフトウェアパッケージのインストール
これでインスタンスが最新状態になったので、Apache ウェブサーバー、MySQL、PHP ソフトウェアパッケージをインストールできます。yum install コマンドを使用すると、複数のソフトウェアパッケージと関連するすべての依存関係を同時にインストールできます。

```
[ec2-user ~]$ sudo yum install -y httpd24 php56 mysql55-server php56-mysqlnd
```

###4. Apache ウェブサーバーを起動します。

```
[ec2-user ~]$ sudo service httpd start
    // Starting httpd: [ OK ]
```
###5. chkconfig コマンドを使用して、システムがブートするたびに Apache ウェブサーバーが起動するように設定します。

```
[ec2-user ~]$ sudo chkconfig httpd on
```

データベースはRDSインスタンスを想定していますので、とりあえずこれでおしまいです！

#phpMyAdmin
EC2 に phpMyAdmin を yum インストールして RDS の MySQL に接続します。

```
$ sudo yum-config-manager --enable epel
$ sudo yum install -y phpMyAdmin
$ sudo sed -i -e 's/127.0.0.1/【あなたのPC のGlobal IP】/g' /etc/httpd/conf.d/phpMyAdmin.conf
$ sudo nano /etc/phpMyAdmin/config.inc.php
```

```php:config.inc.php
$cfg['Servers'][$i]['host']      = '【RDS のエンドポイント】';
$cfg['Servers'][$i]['port']      = '【RDS のポート番号】';
$cfg['Servers'][$i]['auth_type'] = 'config';
$cfg['Servers'][$i]['user']      = '【RDS のユーザー名】';
$cfg['Servers'][$i]['password']  = '【RDS のルートパスワード】';
```
- Apache を再起動

```
$ sudo service httpd restart
```

これで `http://【あなたのElastic IP】/phpMyAdmin` にブラウザでアクセスすれば完了です。

* * *
以上です！
android N の対応

# android N の対応


### Android Studio

Android Studioを最新にする

https://developer.android.com/studio/index.html?hl=ja

### Android SDK Manager

API レベル 24のSDKをインストール

### Java8にする

http://qiita.com/yanap/items/186d5bd1118f68f725d8

### apiレベルを24にする

```
compileSdkVersion 24
targetSdkVersion 24
```

### コンパイルオプションでjava8指定

```
compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
}
```

### JackOptionsを追加する

http://stackoverflow.com/questions/37004069/errorjack-is-required-to-support-java-8-language-features

```
jackOptions {
           enabled true
       }
```

https://developer.android.com/guide/platform/j8-jack.html?hl=ja
golangで画像の２値化を実施する


# 固定しきい値処理
ある一定の値より上か、下かと言った話。

# ソースコード

```go
func StaticThreshold(th uint32) icom.EffectFunc {
	return func(img image.Image, x, y int) color.RGBA64 {
		r, _, _, a := img.At(x, y).RGBA()
		val := ex.ColorWidth
		if r < th {
			val = 0
		}
		return color.RGBA64{uint16(val), uint16(val), uint16(val), uint16(a)}
	}
}
```

もはや説明は不要ですね、これくらい分かりやすいと良いです。
##　出力結果
こうやって光の当たり方がおかしいとこういう感じになるよ、ってな具合。

### 元画像
![test2.jpg](https://qiita-image-store.s3.amazonaws.com/0/51009/4732a7cc-0fae-5126-a473-be2cc511e684.jpeg "test2.jpg")
### 処理画像
![test_static_th.png](https://qiita-image-store.s3.amazonaws.com/0/51009/d6d2fcb7-096f-259a-1ab6-49853eca23eb.png "test_static_th.png")


# 可変しきい値処理
以下の手順で画素の値を決定する、と理解した。
* ある一点に対し、任意に範囲を指定し、その範囲の画素の平均をとる
* 平均に対して、前回の判定が明るい側なら任意の値を減算する
* 平均に対して、前回の判定が暗い側なら任意の値を加算する。
* その平均とある一点のどちらが明るいかで０or明るさ最大かを決める。

## ソースコード

がとにかくややこしかった、おそらく整理する術はあるけど、ほっとこう。
最新販の本にはましなソースコードがあるのだろけ？

```go
func VariableThreshold(size, width int, isBlack bool) icom.EffectFunc {
	data := VariableData{-1, 0}
	return func(img image.Image, x, y int) color.RGBA64 {
		//	y軸が変わったら初期化するだけ
		createGrayBase(&data, y, isBlack)
		point := img.Bounds().Size()
		//平均を取る画素の範囲を作成する
		y1, y2 := getVariableRange(y, point.Y, size)
		x1, x2 := getVariableRange(x, point.X, size)
		ave := getAverage(img, x1, x2, y1, y2)
		var th int
		// 前回の変化した種類によって基準値を変化させる。
		if data.grayBase == ex.ColorWidth {
			th = ave - width
		} else {
			th = ave + width
		}
		//平均値より明るいか？
		r, _, _, a := img.At(x, y).RGBA()
		v := uint16(0)
		if r >= uint32(th) {
			v = ex.ColorWidth
		}
		data.grayBase = int(v)
		return color.RGBA64{v, v, v, uint16(a)}
	}
```

* 関数名createじゃなくてinit
* getVariableRangeも含めてgetAverage
* 大きく３セクションに分けるべきだったかなと思う。
という反省が出てきた。

中の関数について解説しても良いけど、論理を知るべきだと思うのでソースコードよりも図を描いてあげたいところですね。

### getVariableRangeの中身
平均を取るための範囲を取得します。DRY？何それ？

```
func getVariableRange(pos, max, siz int) (int, int) {
	var v1, v2 int
	//	最初から現在値＋規定値の半分だけ
	if pos < siz/2 {
		//	pos-siz/2最初突破の場合	
		v1 = 0
		v2 = pos + siz/2
	} else if (max - 1 - pos) < siz/2 {
		//	pos〜最大オーバーの場合	
		v1 = pos - siz/2
		v2 = max - 1
	} else {
		//	大体ここ
		v1 = pos - siz/2
		v2 = pos + siz/2
	}
	return v1, v2
}
```
## 出力結果
はい、文字が読めますね、おめでとうございます。
やっぱ、こういうのは習った方が早そうですけど、OpenCVあるから面倒なんでやらんだろうな。
![test_vari_th.png](https://qiita-image-store.s3.amazonaws.com/0/51009/4780f1bd-a5a2-15fe-c0bf-efd169295988.png "test_vari_th.png")
Ergodox macOS sierraでファームウェアビルド時のエラーの対処


久しぶりにErgodoxのmakeをしたら以下のエラーがでたので解決のために行ったことをメモ。

	fatal error: inttypes.h: No such file or directory

OSはmacOS sierra。

1. 最新の[https://github.com/jackhumbert/qmk_firmware](https://github.com/jackhumbert/qmk_firmware)をcloneして使用する。
2. Issueが上がっていたのでその指示にしたがって解決する。https://github.com/jackhumbert/qmk_firmware/issues/802
3. `keymap.c`の`#include "ergodox_ez.h"`を`#include "ergodox.h"`に変更する。

これでmakeが成功した。

手順2は、macOS sierraにupdateすると以下の2つを再インストールする必要があるとのこと。

	brew uninstall avr-libc
	brew uninstall avr-gcc
	
	brew install avr-gcc
	brew install avr-libc
2017/5/17 改善されていました。Microsoft Cognitive Services QnA Maker 日本語FAQについて

2017/1/24 現状の状況（個人的感想）と打開策です。期間限定となるかもしれませんが、現在はベストプラクティスではないかと考えております。
※Microsoft Cognitive Services QnA Maker は　1/24現在、プレビューです。

2017/5/17 別件で確認したところ日本語強化されていました。万歳！！
![image.png](https://qiita-image-store.s3.amazonaws.com/0/123399/cf2ff0a5-af4c-ec24-2e03-be22d8dfefe3.png)


- - -
## 概要
- Microsoft(MS) Cognitive Services QnA Makerが、昨年１２月にリリースされました（1/24現在はプレビュー）
- 今まで、LUIS という機能(形態素解析)がリリースされていましたが、QnAを使う場合に、LUISを入れたほうが良いか、迷いました。
- 一旦の結論は、現時点でLUIS不要。ただし。。（下へ続きます）

## 日本語QnA現状
- 個人的に現状は結構悲劇でした。（異議あり！！の方、是非コメント、もしくはFBメッセージをお願いします。使い方に誤りがあるのかもしれません）
- 下記例で示します。

![image](https://qiita-image-store.s3.amazonaws.com/0/123399/3b0cb472-0fa1-b6d4-dca5-94a2098b2226.png)

![image](https://qiita-image-store.s3.amazonaws.com/0/123399/1a4067ae-462a-7638-1a36-b2a3cb2fff58.png)

全文一致が必要？？と思わせる結果になりました T_T

## 対応策。英語なら？
![image](https://qiita-image-store.s3.amazonaws.com/0/123399/4d86ded0-c757-76ac-a6a9-ad5c7f7dc107.png)
![image](https://qiita-image-store.s3.amazonaws.com/0/123399/fc616830-189b-cc89-4144-5d8752a32c08.png)
![image](https://qiita-image-store.s3.amazonaws.com/0/123399/5e0f3bc9-6b1f-0b20-4061-b7dd428f435e.png)

### 結論 Translator API で逃げる。

- - -
## 同義語問題

話は少し変わりますがついでに情報をひとつ。car と automobile は同義語であり、潜在意味は同一です。
さて、上手く取ってくれるのでしょうか。
![image](https://qiita-image-store.s3.amazonaws.com/0/123399/d2f69646-6958-3ac2-2630-a67ab6ee6d35.png)
![image](https://qiita-image-store.s3.amazonaws.com/0/123399/2eb04f8b-392a-cba6-62f5-c78bca42ac38.png)

T_T まあ、ここも結局 Translator API で逃げる。でしょうか。

今後の成長に期待しております！！
cakephp3 cron動かない

```
*/1 * * * * /opt/remi/php70/root/usr/bin/php -c /etc/opt/remi/php70/php.ini /var/www/html/caba-ageha.com/bin/cake.php Cron hoge
```

これで動く。
cakephp2 と違うので注意ね。
BrowserStack と Karma でクロスブラウザテスト環境を作る

- BrowserStack: 各種環境の Browser をホスティングしてくれる
- Karma: クロスブラウザのテストランナー

mocha の テストを Windows IE11 と Firefox 50 で動かしてみた。
Karmaの使い方は割愛。（というか自分がまだ詳しくない。これから調べる）

## テストコード

```js:browser-spec/hello.spec.js
describe("Hello Test", () => {
  it("test", () => {
    throw new Error("Error");
  });
});
```

期待すること

- IE11: SyntaxError
- Firefox: Error

## BrowserStackに登録

https://www.browserstack.com/ から SignUp　
https://www.browserstack.com/accounts/settings から AccessKey を取得

たぶん色々やるためには有料登録も必要な気がする。

## 環境構築

```
$ npm i -D karma karma-mocha mocha karma　karma-browserstack-launcher
```

`$ karma init` したファイルを次のように修正


```js
module.exports = function(config) {
  config.set({
    browserStack: {
      username: "<your-username>",
      accessKey: "<your-token>"
    },

    // base path that will be used to resolve all patterns (eg. files, exclude)
    basePath: "",

    // frameworks to use
    // available frameworks: https://npmjs.org/browse/keyword/karma-adapter
    frameworks: ["mocha"],

    // list of files / patterns to load in the browser
    files: [
      "browser-spec/**/*.js"
    ],

    // list of files to exclude
    exclude: [
    ],

    // preprocess matching files before serving them to the browser
    // available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor
    preprocessors: {
    },

    // test results reporter to use
    // possible values: 'dots', 'progress'
    // available reporters: https://npmjs.org/browse/keyword/karma-reporter
    reporters: ["progress"],

    // web server port
    port: 9876,

    // enable / disable colors in the output (reporters and logs)
    colors: true,

    // level of logging
    // possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG
    logLevel: config.LOG_INFO,

    // enable / disable watching file and executing tests whenever any file changes
    autoWatch: true,

    customLaunchers: {
      bs_ie11_win: {
        base: "BrowserStack",
        browser: "IE",
        browser_version: "11",
        os: "Windows",
        os_version: "7"
      },
      bs_firefox_mac: {
        base: "BrowserStack",
        browser: "firefox",
        browser_version: "50",
        os: "OS X",
        os_version: "Sierra"
      }
    },
    // start these browsers
    // available browser launchers: https://npmjs.org/browse/keyword/karma-launcher
    // browsers: ["Chrome", "Safari", "Firefox"],
    browsers: ["bs_firefox_mac", "bs_ie11_win"],

    // Continuous Integration mode
    // if true, Karma captures browsers, runs the tests and exits
    singleRun: false,

    // Concurrency level
    // how many browser should be started simultaneous
    concurrency: Infinity
  });
};
```

## 実行

```
$ node_modules/.bin/karma start karma.conf.js
```

![](https://i.gyazo.com/4232c8ca71005f099860c83aac7457c6.png)


あとはkarmaの使い方調べてテストを書く
master of fragment の読書感想文

# master of fragment

PC整理してたら見つけた

http://tatsu-zine.com/books/master-of-fragments

## 画面遷移

* 同階層の画面遷移の場合のみFragmentで画面遷移を実装した方が良い

* Activity直下のFragmentに関するトランザクションはActivityで行うのが良い

* Fragmentはコンポーネントとして再利用できるようになってるべき


## Fragmentの入れ子

```
public class MainParentFragment extends Fragment {
  public void addChildFragment() {
    MainChildFragment f = new MainChildFragment();
    getChildFragmentManager().beginTransaction().
  }
}
```

## DialogFragment

すぐに消えてもいいDialogはAlertDialogを使う
勝手に消えたら困るDialogはDialogFragmentを使う


## スプラッシュはFragmentの方が良い

## FragmetTransactionで入れ替えるFagmentはレイアウトXMLで定義してはいけない

FragmentTransaction で入れ替える Fragment はコードから生成するよう
にしてください。
#pragma regionを使った折り畳みでソースコードの見渡しをよくする

# `#pragma region`を使った折り畳みでソースコードの見渡しをよくする

メソッド定義は最初から折り畳みができるようになっているが、
簡単に折り畳みができないインナークラスやメンバ変数、定数定義がズラズラと長い場合、クラスの実装の見渡しが悪くなる。

以下のような記述をすることで簡単に折り畳みができるようになる上に、何が折り畳まれているのかが分かりやすくなる。

```cpp:Hoge.h
#pragma region Inner Class
    ref struct _RGB {
        float r;
        float g;
        float b;
        _RGB(float _r, float _g, float _b) : r(_r), g(_g), b(_b) {}
    };
#pragma endregion

#pragma region Member Fields
    array<_RGB>^ RGBs;
#pragma endregion

#pragma region Literals
    literal float RGB_LENGTH = 255;
#pragma endregion
```

上記の`#pragma region`行の行頭には`-`が表示される。`-`をクリックすることで以下のように折り畳むことができる。

```cpp:Hoge.h
+[Inner Class]

+[Member Fields]

+[Literals]
```

VsVimを使っている人は、カーソルが`#pragma region`から`#pragma endregion`の間の行にあれば、zaを入力するだけで折り畳み＆解除ができるので便利。
ReactNativeでAndroid仮想デバイスでFCMtokenが取得できないとき


FCMのtokenが取得できない場合は、avdの設定を確認する。
avdのCPUがGoogleAPIのものでないとtokenが取得できない模様。

![スクリーンショット 2017-01-24 16.32.17.png](https://qiita-image-store.s3.amazonaws.com/0/134471/a18552a1-005e-c5e1-8549-a8cf0639e4e6.png "スクリーンショット 2017-01-24 16.32.17.png")

CPI/ABIのところがGoogleAPIsのものになっているかを確認。
なっていればtokenは取得できた。
[Cloud102]#3-1 AML Studio NOTEBOOKのおまけ

本編はこちらです。

http://qiita.com/nagahisa/items/d465d074889e6a8e4864

Python勉強会なのに、あまりにPythonハンズオンが少ないので、ちょっとだけ「おまけ」です:smile:

###1.floatに注意(1)

新しいNOTEBOOK(Blank Python3)を作って、以下のコードを入れてみましょう。

![060.JPG](http://qiita-image-store.s3.amazonaws.com/0/79389/488ff726-56d0-8590-fb0a-4313f49b1cbe.jpeg)

###2.floatに注意(2)

これも入れてみましょう。

![061.JPG](http://qiita-image-store.s3.amazonaws.com/0/79389/7ba7813d-e692-9c9b-311f-87353f6417c9.jpeg)


###3.回転できる3Dプロット表示

このコードは手打ちはちょっと面倒なので、以下からコピペでもOKです。

http://ksknw.hatenablog.com/entry/2016/08/04/233103

![062.JPG](http://qiita-image-store.s3.amazonaws.com/0/79389/bea610c1-a6fe-3d7d-5165-416c223d5a43.jpeg)

### 4.プログレスバー表示

同じBLOGにあるステータスバー表示もやってみましょう

![063.JPG](http://qiita-image-store.s3.amazonaws.com/0/79389/3b56c076-5807-b192-ab96-9ee3d14dfbc1.jpeg)

うまくプログレスバーが表示されましたか？
エラーが出た人は以下を実行して、再トライしてみましょう。

![064.JPG](http://qiita-image-store.s3.amazonaws.com/0/79389/0bedeb83-b4f6-981f-4b18-2d358390beb5.jpeg)

###5. jupyter notebookの使い方（復習）

以下がわかりやすいので、復習してみましょう。

Pythonで始める機械学習入門（2）：
機械学習の現場で重宝する多機能WebエディタJupyter Notebookの基本的な使い方 (1/2)
http://www.atmarkit.co.jp/ait/articles/1701/11/news013.html

Enjoy!:sunny:
サーブレット実行時にWEB-INF配下のファイルを読み込む

#前提
java8 tomcat7 seasar2を用いて実装

#サーブレットコンテキストを用いてファイル取得
sastrutsにサーブレットを取得するUtilがあったので利用
>ServletContext context = ServletContextUtil.getServletContext();
>String path = context.getRealPath("WEB-INF/classes/xxx.txt");
>File file = new File(path);

利用シーンは少ないかもしれないが備忘録
正規表現でテキスト間にスペースがないかをチェックする


パワポとかでもらったテキストからコピペすると、意図しないスペースが入ることがあって、人力でチェックしたくないし、さらにテキストの変更のたびに確認すると死んでしまうので、正規表現で効率よくチェックする（結局人力）

## テキスト間の半角スペースを発見する
ひらがな・カタカナ・漢字間に半角スペースあったら発見する。日本語終わりの行も半角スペース表示要因なので一応チェックする。全角スペースは意識的に入れている前提。

```
[々〇〻\u3400-\u9FFF\uF900-\uFAFF\uD840-\uD87F\uDC00-\uDFFF\u3041-\u3096\u30A1-\u30FA][ \n][々〇〻\u3400-\u9FFF\uF900-\uFAFF\uD840-\uD87F\uDC00-\uDFFF\u3041-\u3096\u30A1-\u30FA]
```

## 全角スペースも発見する
```
[々〇〻\u3400-\u9FFF\uF900-\uFAFF\uD840-\uD87F\uDC00-\uDFFF\u3041-\u3096\u30A1-\u30FA][ 　\n][々〇〻\u3400-\u9FFF\uF900-\uFAFF\uD840-\uD87F\uDC00-\uDFFF\u3041-\u3096\u30A1-\u30FA]
```
phpの配列の書き方をarray(...)から[...]にeclipse上で変換する方法

実施環境

|soft|version|
|:-:|:-:|
| php | 5.6.24 |
| eclipse | Version: Neon.1 (4.6.1) |
| XAMPP | Version: 5.6.24 |

PHP5.4以降から、配列は短縮構文[]が使えるようになりましたが、途中参加のプロジェクトとかで書き方が混在してイライラしている人が多くいらっしゃるかと思います。
eclipseでソースを開いたら「うわーarray(...)だ、直したいけど、めんどい・・」って人のために、eclipseから目的のソースを素早く短縮構文に変換する方法を載せておきます。
eclipseの外部ツールを使ってやります。

## Short Array Syntax Converterをダウンロード

https://github.com/thomasbachem/php-short-array-syntax-converter
上記からダウンロードし、どこか適当な場所に置きます。
私は、下記のようにxamppのphp/lib配下に置きました。

```
C:\pleiades\xampp\php\lib\php-short-array-syntax-converter
  convert.php
  revert.php
```
## 外部ツールの構成でShort Array Syntax Converterを設定
外部ツールの構成を選択します。
![2017-01-24_15h38_01.png](https://qiita-image-store.s3.amazonaws.com/0/68254/3f92b387-44fc-557c-3dd2-437b6074b16e.png)

#### メイン

![2017-01-24_15h51_37.png](https://qiita-image-store.s3.amazonaws.com/0/68254/5e0b4592-8d05-362d-4f03-c7e0645e6ac0.png)

|項目|値|
|:-:|:-:|
| 名前 | php-short-array-syntax-converter |
| ロケーション | C:\pleiades\xampp\php\php.exe <br> (PHP実行ファイル)|
| 作業ディレクトリ | ${workspace_loc} |
| 引数 | C:\pleiades\xampp\php\lib\php-short-array-syntax-converter\convert.php -w \${workspace_loc}${selected_resource_path} |

#### リフレッシュ
![2017-01-24_15h51_42.png](https://qiita-image-store.s3.amazonaws.com/0/68254/8416960f-4d0c-d2de-052f-5faf5f413b13.png)

|項目|値|
|:-:|:-:|
|完了時にリソースをリフレッシュ|チェック|
|選択されたリソースを含むフォルダ|チェック|

#### ビルド
起動前にビルドは外しておきましょう。
#### 環境
特に設定なし
#### 共通
![2017-01-24_15h51_55.png](https://qiita-image-store.s3.amazonaws.com/0/68254/fd396f15-a54c-a754-d027-e646d116302b.png)

お気に入りメニューに表示にして、適用しましょう。

## 変換してみる
![2017-01-24_16h12_36.png](https://qiita-image-store.s3.amazonaws.com/0/68254/d86e3997-9fe1-b9c2-dcc2-5d3ab201fdfb.png)

よくあるモデルファイルですが、array(..)だらけで目を覆いたくなるソースですね。
変換したいファイルを選択して、登録した外部ツールを実行してみましょう。

## 実行結果

なんということでしょう！一瞬であの忌々しいarray()がすっきりとした[]に変わりました。
![2017-01-24_16h15_02.png](https://qiita-image-store.s3.amazonaws.com/0/68254/e1f005fc-c98a-d80f-5e48-ae407cfdeae1.png)


※フォルダ選択はうまく変換されません。convertのphpファイルを直せばいいんでしょうけど。なにはともあれ自己責任で。。
gitlab on mac

# gitlab on mac

mac serverにgitlabをインストール
２年前のメモなんで内容古め

## root

```
root
5iveL!fe
```

## gitlab 非公式　インストールマニュアル

https://github.com/WebEntity/Installation-guide-for-GitLab-on-OS-X

## 独自でやったこと

postgresqlにした
domain.comは、とりあえず、IPにした

### nginx + unicorn + rails(gitlab)

gitlabをunicornで立ち上げて、unixドメインソケットでnginxとつなぐ

http://giwacchi.hatenablog.com/entry/2013/04/22/081224

http://henteco-labs.com/labs/2014/04/14/rails-nginx/

### nginx

http://kakakakakku.hatenablog.com/entry/2013/12/12/183806

https://github.com/gitlabhq/gitlabhq/blob/master/doc/install/installation.md#7-nginx

/etcは/usr/local/etcにしました

### railsまわり

gemはvendor/bundleに入れた

### init script

/etc/mach_init.d/gitlab

/homeのところを/Usersにしました

### gitlab-shell

これが、sidekickで動いていて
リポジトリを作ったり、pushを受け取ったりする
再帰的にテキスト検索してVIMで開く

# 手早くテキストファイルを再帰的に検索する
ほとんどの人は以下のようにやっていると思う。

>find . -name "*.c" | xargs grep "hoge"

入力文字数を減らすなら

>grep -ainr --include="*.c" "hoge"

となる。

.bashrcに以下の記述を追加すれば、さらに入力文字数を減らすことができる。

```sh:.bashrc
function rgrep() {
    grep -ainr --include=$1 $2
}
```

これで、以下のように再帰的なワード検索ができる。

>rgrep "*.c" "hoge"

# テキスト検索結果一覧からVIMでそのファイルの該当行を開く

.bashrcに以下の記述を追加すれば、VIM上に検索結果一覧を表示することができる。

```sh:.bashrc
function ogrep() {
    grep -ainr --include=$1 $2 | vim -R -
}
```

ここで、以下のような検索を行うと

>ogrep "*.c" "hoge"

VIM上に検索結果一覧が表示される。

```sh:無題
sample1.c:28        result = hoge();
sample1.c:100           void hoge() {
library/sample2.c:5     printf("hoge");
```

該当行の行頭にカーソルを合わせて```gF```を入力すると該当ファイルの該当行にジャンプすることができる。[^1]

[^1]: vimgrepを使えという意見もあろうと思いますが、コンソールからVIMの該当行にジャンプできるのも気持ちいいかな、と。
nunjucksの使い方

* 試行錯誤中です

# nunjucksとは

* ヌンチャク？
* mozilla謹製テンプレートライブラリ
* pythonのjinja2互換
* テンプレートを事前コンパイルできるのでサーバーで負荷を減らせる
* includeを使える
* マクロ定義できる
* 構造を先に定義して中身をあとで定義する継承機能がある
* https://mozilla.github.io/nunjucks/
* https://www.npmjs.com/package/nunjucks

# インストール

```
npm i nunjucks
```

# JS

## JSからの呼び出し方

```
cosnt nunjucks = require('nunjucks');
// テンプレートのコンパイル
const template = nunjucks.compile('{{ hoge }}');
// テンプレートにコンテキストを設定しレンダリング結果を取得
const context = { hoge: 'hello' }
const output = template.render(context)
// 画面表示
console.log(output)
```

# Template

## 変数表示

```
{{ variable_name }}
```

## 変数設定

```
{% set username = "joe" %}
```

## コメント

```
{# Loop through all the users #}
```

## 関数呼び出し

```
{{ func_name() }}
```

## for

```
{% for value in values %}
{{ value }}
{% endfor %}
```

### 空白対策

```
{% for i in [1,2,3,4,5] -%}
  {{ i }}
{%- endfor %}
```

```
12345
```

### 空行対策

```
{%- for value in values -%}
{{ value }}
{%- endfor -%}
```

## if

```
{% if variable %}
  true
{% endif %}
```

### 空行対策

```
{%- if variable -%}
  true
{%- endif -%}
```

## 関数定義

マクロ定義で代行？
クロージャとかできないとmap関数定義できないので不便

## マクロ定義

```
{% macro field(name, value='', type='text') %}
<div class="field">
  <input type="{{ type }}" name="{{ name }}"
         value="{{ value | escape }}" />
</div>
{% endmacro %}

{% macro label(text) %}
<div>
  <label>{{ text }}</label>
</div>
{% endmacro %}
```

## ケツカンマの対処

いい対処方法が見つからないので教えてください
いまのところコンテキスト渡す前に前処理でmap処理しjoinを使える状況にすることで対処



# リファレンス

* https://mozilla.github.io/nunjucks/api.html
* https://mozilla.github.io/nunjucks/templating.html
Android Studio ショートカットコマンド

# 良く使うショートカットコマンド

⌘ + F12 : クイックアウトライン  ???

⌘ + O  : オブジェクト検索

⌘ + B : 定義箇所へ移動

⌘ + F : ファイル内文字検索

⌘ + l : 指定行に移動

⌘ + Alt + ←　: 戻る

⌘ + Alt + → : 進む

⌘ + Alt + l : コードフォーマット

⌘ + Shift + F : プロジェクト内文字検索

shift + ⌘ + @ : 左タブに移動

shift + ⌘ + [ : 右タブに移動

shift２回 : ファイル名検索

呼び出し元階層を調べる  control ＋ alt ＋ H
Sierraの人のために、GoをDocker上でクロスコンパイルさせる方法

# 概要
* Sierraでgo version=1.7未満のものをコンパイルしようとするとpanicが起こる
* 公式issue https://github.com/golang/go/issues/16352
* ならばdocker上でクロスコンパイルしようじゃないか
* テストとして https://github.com/sioncojp/test-app を使用
* ちなみに`darwin/amd64`用にクロスコンパイルしてます

# イメージ作成
## ①ファイル作成
```bash
$ go get -u github.com/sioncojp/test-app
$ mkdir /tmp/work
$ cp -R $GOPATH/src/github.com/sioncojp/test-app /tmp/work/app
$ cp -R $GOPATH/src/github.com/sioncojp/test-app/Makefile /tmp/work/Makefile
$ touch /tmp/work/Dockerfile
```

## ②Dockerfile
```Dockerfile
$ vim /tmp/work/Dockerfile
FROM golang:1.6.4
MAINTAINER Shohei Koyama sion_cojp@yahoo.co.jp

### 今回のケースはないんですが、buildする際に使う "$GOPATH/bin" をあらかじめ作っておいたほうが時間短縮になります。
### なので一度ターゲットのリポジトリをbuildしておきましょう。
RUN mkdir -p /go/src/github.com/sioncojp/test-app
COPY app /go/src/github.com/sioncojp/test-app/
COPY Makefile /root/Makefile

RUN sed -i "1iGOPATH=/go" /root/Makefile
RUN sed -i -e 's/go install/@cd $(GOPATH)\/src\/github.com\/sioncojp\/test-app \&\& GOOS=darwin GOARCH=amd64 go install/g' /root/Makefile

RUN cd /root && make install
RUN rm -rf go/bin/darwin_amd64/test-app
RUN rm -rf /go/src
```

## ③Dockerイメージを作る
```bash
### 今回はapp-build:latestという名前で作ります
$ cd /tmp/work
$ docker build -t app-build:latest .
```

# イメージができたのでクロスコンパイルする
```bash
### ビルドしたものを入れるディレクトリ作成
$ mkdir /tmp/app-build/

### $GOPATH/srcを、コンテナの/go/srcにマウントしてイメージから立ち上げる
$docker run --name hoge -d -v $GOPATH/src/:/go/src -v /tmp/app-build/:/tmp/ -it app-build:latest

### クロスコンパイル
$ docker exec hoge bash -c 'cd /root && make install && mv -f $GOPATH/bin/darwin_amd64/test-app /tmp/test-app'
# 終わったら/tmp/app-build/test-app　が出来てると思います

### コンテナ削除
$ docker rm -f hoge

### 実行してみる
$ /tmp/test-app
$ $ curl --unix-socket /tmp/app.sock http://index.html
It works!
```
特定のチェックボックスにチェックが入ったら連動して別のチェックボックスにチェックが入る（メモ）

今後あまり使う機会は無いだろうけどメモ。
id="ほげ"　のチェックボックスにチェックが入ると
id="ほげほげ"　に連動してチェックがはいる。

```
jQuery(function() {

  jQuery("#ほげ").click(function(){
    jQuery("#ほげほげ").prop("checked", jQuery(this).prop('checked') );
  });

});
```