OmniAICreator/Qiita-1.07M huggingface dataset:
Guard swift3

#if , guard

##if
if "条件式" {
    ...
}

~~~Swift
// 範囲
let num = 0
if case 0...100 = num {
    print("0から100")
}

// nilチェック
if let message = response.message {
    ...
}

// nilチェック + 条件
var name: String? = "John"
if let name2 = name, name2.characters.count > 3 {
    print("3文字以上の名前")
}
~~~

##guard
guard は条件を満たしていない時に、迅速にスコープを抜けるための処理(breakやreturn、例外のthrowなど)を行う。

~~~swift
let num = 2

do {
    guard num > 5 else {
        throw CustomError.Error1
    }
} catch CustomError.Error1 {
    print(1)
} catch {
    print(2)
}
~~~

nil チェックで格納した変数は、その後の処理でも使いまわせる。

guard let data = response.data else {
   ...

}

// data が使える
print(data)


使い方についてはまた追跡していきます

---

## 関連記事

【About】(http://qiita.com/sunstripe) - サンストライプ

---

## 制作チーム：サンストライプ

[![sunstripe_logo.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80600/322f2d60-f19d-af9e-2b6f-7290ca546848.png)](http://sunstripe.main.jp/)
http://sunstripe.main.jp/

(月１WEBコンテンツをリリースして便利な世の中を作っていくぞ！！ボランティアプログラマー/デザイナー/イラストレーター/その他クリエイター声優募集中！!)

### 地域情報 THEメディア
THE メディア 地域活性化をテーマに様々なリリース情報も含め、記事をお届けしてます！！
https://the.themedia.jp/

### ゼロからはじめる演劇ワークショップ
多様化の時代に向けて他者理解を鍛える

https://workshop.themedia.jp/

### プログラミングワークショップ・ウェブ塾の開講！！！
様々なテーマでプログラミングに囚われずに取り組んでいきます。
詳しくはこちら　↓　↓　↓　↓　↓　↓　↓　↓
[プログラミングサロン 月１だけのプログラミング学習塾](https://workshop.themedia.jp/posts/7057553?fbclid=IwAR32CfRQ7RvDOhvuogoSwqxDLMOU7Jvuzljlnx-TMc27qBPX1BnWsfLcBR8
)

### 協力応援 / 支援者の集い
## チーム：サンストライプ
#### プログラミングラボ
https://twitter.com/sunstripe2011

一緒にポートフォリオを作りませんか？現場の体験やそれぞれの立場から年齢関係なく作品を作りたい方々と一緒にチームを作って、作品を作っています。現場に行きたい人には、職場紹介や職場の体験や悩み相談なども受けております。
様々な職種からプログラミングの知識を得たい、デザインの知識を得たい、データーベースの知識を得たいという人が集まっております。
週１のミーティングにそれぞれの近況と作業報告して、たまにリモート飲み会などをしております！！

興味がある方は、DMに話しかけてみてください。

## トラストヒューマン
http://trusthuman.co.jp/
私たちは何よりも信頼､人と考えてます｡

｢コンサルティング｣と｢クリエイティブ｣の両角度から｢人材戦略パートナー｣としてトータル的にサポートします！！

キャリア教育事業
広域学習支援プラットフォーム『のびのび日和』
https://slc-lab.amebaownd.com/

#スポンサー募集
KotlinのProject Templete作る時の注意点

# はじめに
タイトル通り、Kotlinでプロジェクトテンプレート作る時の注意点。
プロジェクトテンプレートってなに？って人は↓を参照
http://qiita.com/kgmyshin/items/9c803a21451e603531f0

**この記事は、上記のページを読んで最低限のプロジェクトテンプレートの作り方がわかった前提で書いてます**

# KotlinSrcのパスを追加する
結論から言えば、以下の２ファイルを修正すれば良い

```xml:globals.xml.ftl
<?xml version="1.0"?>
<globals>
     ~~省略~~
     <#include "../common/common_globals.xml.ftl" />
+    <global id="srcOutKotlin" value="app/src/main/kotlin/${slashedPackageName(packageName)}" />
</globals>
```

- globals.xml.ftlの末尾にsrcOutKotlinの設定を追加。パスはKotlinのリソースパッケージを指定する

```xml:recipe.xml.ftl
<?xml version="1.0"?>
<recipe>
-    <instantiate from="root/src/app_package/SampleClass.java.ftl"
-                   to="${escapeXmlAttribute(srcOut)}/${sampleClassName}.java" />
+    <instantiate from="root/src/app_package/SampleClass.kt.ftl"
+                   to="${escapeXmlAttribute(srcOutKotlin)}/${sampleClassName}.kt" />
</recipe>
```
- 拡張子を`java`から`kt`へ変更する
- `escapeXmlAttribute`の引数を`srcOut`から`srcOutKotlin`に変更する


もともとsrcOutの指定は`../common/common_globals.xml.ftl`で行われているが、こいつは`app/src/main/java/~~~`を指してしまう。
なので新たにKotlin用のパッケージの場所を指定してあげばOKというからくり。

なお、この修正をしなくても正常に生成はされるが、出力が常にapp/src/main/java/~~以下になってしまい、JavaとKotlinが混在するというカオスな状況が生まれる。避けていきたい
【Swift】abort() - プログラムの停止

##abort()　— プログラムの停止

Swiftの職場で、abortを使うことがあった。C言語の勉強も兼ねて調べたことがなかったので調べて見ました。

IBMさんの資料がすごく綺麗で見やすかった。
https://www.ibm.com/support/knowledgecenter/ja/ssw_ibm_i_71/rtref/abort.htm

###フォーマット

```c:c.h
#include <stdlib.h>
void abort(void);
```

###説明
abort() 関数は、プログラムを異常終了させ、ホスト環境に制御を戻します。
exit() 関数と同様、abort() 関数はプログラムを終了する前にバッファーを削除し、オープン・ファイルをクローズします。

abort() 関数を呼び出すと SIGABRT 信号が発信され、SIGABRT がシグナル・ハンドラーによってキャッチされた場合は、 abort() 関数によるプログラムの終了は起こらず、シグナル・ハンドラーは戻りません。

####注意
SYSIFCOPT(*ASYNCSIGNAL) でコンパイルされた場合、abort() 関数はシグナル・ハンドラー内で呼び出すことはできません。

###戻り値
なし

##abortの意味
そもそも「abort」の意味は、、、、、
【動詞】、【自動詞】
1〈女性が〉妊娠中絶する，堕胎する。
2【生物】〈動植物・器官などが〉発育しない，退化する。
3
 a〈計画などが〉挫折する，失敗する。
 b【陸海軍, 軍事】〈ミサイル発射などが〉(故障など...

##使用例
以下のコードでdefault: breakとすると”variable ‘type’ used before being initialized”でエラーとなり、default: abort()としたらコンパイルも通り適当な値を入ず、実行されるとクラッシュします。

~~~swift.swift
public class SwiftRegister {
    public enum SwiftType {
        case Unname
        case Number
    }

    public let name: SwiftCharacter
    public var type: SwiftType {
        var swiftType: SwiftType
        
        switch name {
        case "\"":                 swiftType = .Unname
        case "0"..."9":            swiftType = .Number

        default:
            abort()
        }
        
        return swiftType
    }
    
    public init(name: SwiftCharacter) {
        self.name = name
    }
}
~~~

### 関連ワード
・exit() — プログラムの終了
・signal() — 割り込みシグナルの処理
・＜stdlib.h＞

・ライブラリー関数

随時、変更記事、体裁を整えていきます。

---

## 関連記事

【About】(http://qiita.com/sunstripe) - サンストライプ

---

## 制作チーム：サンストライプ

[![sunstripe_logo.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80600/322f2d60-f19d-af9e-2b6f-7290ca546848.png)](http://sunstripe.main.jp/)
http://sunstripe.main.jp/

(月１WEBコンテンツをリリースして便利な世の中を作っていくぞ！！ボランティアプログラマー/デザイナー/イラストレーター/その他クリエイター声優募集中！!)

### 地域情報 THEメディア
THE メディア 地域活性化をテーマに様々なリリース情報も含め、記事をお届けしてます！！
https://the.themedia.jp/

### ゼロからはじめる演劇ワークショップ
多様化の時代に向けて他者理解を鍛える

https://workshop.themedia.jp/

### プログラミングワークショップ・ウェブ塾の開講！！！
様々なテーマでプログラミングに囚われずに取り組んでいきます。
詳しくはこちら　↓　↓　↓　↓　↓　↓　↓　↓
[プログラミングサロン 月１だけのプログラミング学習塾](https://workshop.themedia.jp/posts/7057553?fbclid=IwAR32CfRQ7RvDOhvuogoSwqxDLMOU7Jvuzljlnx-TMc27qBPX1BnWsfLcBR8
)

### 協力応援 / 支援者の集い
## チーム：サンストライプ
#### プログラミングラボ
https://twitter.com/sunstripe2011

一緒にポートフォリオを作りませんか？現場の体験やそれぞれの立場から年齢関係なく作品を作りたい方々と一緒にチームを作って、作品を作っています。現場に行きたい人には、職場紹介や職場の体験や悩み相談なども受けております。
様々な職種からプログラミングの知識を得たい、デザインの知識を得たい、データーベースの知識を得たいという人が集まっております。
週１のミーティングにそれぞれの近況と作業報告して、たまにリモート飲み会などをしております！！

興味がある方は、DMに話しかけてみてください。

## トラストヒューマン
http://trusthuman.co.jp/
私たちは何よりも信頼､人と考えてます｡

｢コンサルティング｣と｢クリエイティブ｣の両角度から｢人材戦略パートナー｣としてトータル的にサポートします！！

キャリア教育事業
広域学習支援プラットフォーム『のびのび日和』
https://slc-lab.amebaownd.com/

#スポンサー募集
iPhoneアプリ申請項目にiOS11用項目が増えてる

・Subtitle (オプション30文字)

iOS 11以降の端末を搭載しているユーザー向けに、App Storeのアプリ名の下に表示されるアプリの概要。

・Promotional Text (オプション170文字)
プロモーションテキストは、更新された投稿を要求せずに現在のアプリの機能をApp Storeの訪問者に知らせることができます。このテキストは、iOS 11以降を実行している端末をご利用のお客様のApp Storeでの説明の上に表示されます。
【Unity】親オブジェクトについたスクリプトから子オブジェクトを操作する！

#はじめに
はじめまして。
この記事はUnity5.5時のものです。
訂正箇所などありましたら、お手数ですがコメントをください。

#親オブジェクト？子オブジェクト？
Unityには「親子関係」というものがあります。



![parent.png](https://qiita-image-store.s3.amazonaws.com/0/185761/31f4f777-d3e5-39b3-3714-ed2447dd7437.png)
これ(AI)が親！



![children.png](https://qiita-image-store.s3.amazonaws.com/0/185761/59346c01-502a-afb9-221d-13f724e93113.png)
これら(Cubeとmagic_ring_05)が子供！

この親オブジェクトについたスクリプトから、複数の子オブジェクト及び特定の子オブジェクトを操作する方法を紹介します。
予想以上に簡単です！


#スクリプト

**transform.GetChild(n).gameObject.~**

これひとつで済みます！

#解説
##transform
ここでは親オブジェクトにスクリプトが付いていることを想定しています。
なのでこのtransformは**親オブジェクトのもの**となります。




もし他のゲームオブジェクトに付いているスクリプトから操作したいときは


**public Transform (他のゲームオブジェクトの名前);**


と宣言して、インスペクタから他のゲームオブジェクトを設定して

**(他のゲームオブジェクトの名前).GetChild(n).gameObject.~**

とすると良いと思います。

##GetChild(n)
nは子オブジェクトの番号です。
子オブジェクトには、上から順に0,1,2,3,…と番号が割り振られています。

![number.png](https://qiita-image-store.s3.amazonaws.com/0/185761/35deac6d-5fe0-85a2-ec5f-adb606f7f9e6.png)




例えば**Cubeだけを操作したいとき**は

**AI.GetChild(0).gameObject.~**

というように書きます。

**AIの子オブジェクト全てを操作したいとき**は

**foreach(Transform child in transform)**

とtransform(この記事の場合は親オブジェクトのこと！)の
子オブジェクトのtransformを取ってきて、

**child.gameObject.~**

とすると良いと思います。

#使用例

ここでは、AIの子オブジェクトのMeshRendererを消してみます！
AIに以下のスクリプトをくっつけると、開始直後にCubeの見た目を消してくれます。


	void Start () {
        transform.GetChild(0).gameObject.GetComponent<MeshRenderer>().enabled = false;	
	}
	
	void Update () {
		
	}

他の例として、AIの子オブジェクト全てを非Activeにするときはこんな感じで書きます。

	void Start () {
        foreach (Transform child in transform)
        {
            child.gameObject.SetActive(false);
        }
	
	}
	
	void Update () {
		
	}
sourcetree で色々出来るように設定をする

# ブランチの名前を自動挿入するgit hooksを利用する
## ソース

.git/hooks/prepare-commit-msg

```
#!/usr/bin/env ruby

#今いるブランチ名を取得
current_branch = `git branch | grep '*'`.chomp.sub('* ', '')

commit_msgs = File.readlines(ARGV[0])
open(ARGV[0], 'w') {|file|
    file.print "#{current_branch}:"
    file.puts commit_msgs
}

```

## コマンド

```
chmod +x .git/hooks/prepare-commit-msg
```
動く権限を与える



# gitの差分をzipファイルで取得する
export_diff_zip.sh
任意の場所に作成

```
#!/bin/sh
if [ "$2" = "" ]; then
    git archive --format=zip --prefix=archive/ HEAD `git diff --name-only HEAD $1` -o archive.zip
else
    git archive --format=zip --prefix=archive/ $1 `git diff --name-only $1 $2` -o archive.zip
fi
```

コマンドで権限を与える

```
chmod +x export_diff_zip.sh
```

## ソースツリー側の設定
Macの場合 メニューから「SourceTree」→「環境設定」→「カスタムアクション」タブ→「追加」ボタンをクリック

- 「メニュー表示名」: メニューに表示したい名前を設定します。今回は「指定された差分をzipで書き出す」と指定します。
- 「実行するスクリプト」: 実行するスクリプトファイルのパスを指定します。「1.バッチファイルの作成」で用意したバッチファイルを指定します。
- 「パラメータ」: 実行するスクリプトに送る引数を決めます。今回は「$SHA」のみを使用するので「$SHA」を記入します。

## 使い方
- 一つコミットを左クリックで選択する
- Ctrl( MacはCommand )キーを押しながら左クリックでもう1箇所(計2箇所)コミットを選択する
- 2箇所コミットを選択したまま右クリックをする
- 出てくるメニュー一番下の「カスタム操作」から「指定された差分をzipで書き出す」を選ぶ

引用
https://ics.media/entry/4475

## これだとたまにうまく動作しない時があるらしい。

その時は下記を利用する
http://qiita.com/lab3-34/items/e69ab8d0c51c9b64fe02
FoodMart(OLAP用サンプルデータ）をDBに取り込む

## やりたいこと
+ FoodMartデータをDB（PostgreSQL）に取り込んでいきます。

## FoodMartとは
OLAP用のサンプルデータ
(OLAP等々の話は省略)

## サンプルデータの場所
<https://github.com/OSBI/foodmart-data>

1.サンプルデータをクローン

```
git clone https://github.com/OSBI/foodmart-data.git
```

2.DBにfoodmartデータベースを作成

```
CREATE DATABASE foodmart;
```

3.CloneしたリポジトリからFoodMartLoader.shを開き、
  32行目あたりのDBユーザ名、パスワードを変更

```
export DBCredentials="-outputJdbcUser=<ユーザー名> -outputJdbcPassword=<パスワード>"	
```

4.リポジトリ内のdata/DataScript.zipを解凍します。

```
unzip data/DataScript.zip
```

5.FoodMartLoader.shをキック

```
./FoodMartLoader.sh --db postgres
```

## 終わりに
このDBとFoodMart.xmlを使ってOLAP分析ができたりするので、デモレベルでBIを導入したいときに便利になります。
MacのMAMPのMySQLServerが起動しない時

## その１

1. MAMPを終了させる
2. `/Applications/MAMP/conf`に移動
3. `vim my.cnf`して以下をコピペ  

    ```/Applications/MAMP/conf/my.cnf
    [mysqld]
    default-storage-engine = InnoDB
    innodb
    innodb_force_recovery = 1
    ```

4. MAMP起動してMySQLServer起動
5. 起動したら再度落とす
6. 上記の`my.cnf`削除
7. MysqlServer起動😇

## その２

このコマンドを叩く。

```
ps aux | grep '/Applications/MAMP/bin/mysqld_safe' | grep -v grep | cut -d ' ' -f 5 | xargs kill -9   
```
Xcode8のDebug Memory GraphでCFArrayのメモリリークの原因を探る


MAMORIO株式会社でiOSエンジニアをしている佐藤です。
今WWDC開催中のサンノゼで書いてます。
WWDCのラボでメモリリークの知見が得られたので共有します。

# 環境
* Xcode8.3.3
* Swift3.1
* iOS10.3.2


# 問題

Xcode8からDebug Memory Graphの機能が追加され、ランタイム上でのインスタンスのメモリーが表示出来るようになりました。
プロジェクトのコードでリークしていたのをポチポチ潰していたのですが、どうしてもわからない表示がありました。

![20170607_1496823193.jpg](https://qiita-image-store.s3.amazonaws.com/0/31587/13257b6c-df39-18d0-bdce-a1aa3fb3c74c.jpeg "20170607_1496823193.jpg")


CFArrayのインスタンスのメモリリークです。
Arrayがリークしていると言われてもどうすればいいかがわかりません。

Arrayの定義はFoundationだからFoundationのバグ?
いやそんなはずあるのか？
とは言え自分のコードのどこが悪いのかがわからないのでどうすればいいかがわからない。。

とモヤモヤしてたのですが、Appleのラボで聞いてきたところある設定をすればいいとのことでした

# DiagnosticsのLogging Malloc Stack

ターゲットのスキームをEdit Schemeで編集します。

Run > Diagnostics > Logging のMalloc Stackにチェックをいれて`Live Allocations Only`を選択します。
![ 2017-06-06 15.08.08.jpg](https://qiita-image-store.s3.amazonaws.com/0/31587/e6964b3b-5b95-4392-b75d-382e6f6dac9f.jpeg " 2017-06-06 15.08.08.jpg")


これで生きているインスタンを表示できるようになります。
試しにビルドしてDebug Memory Graphを起動してみると

![20170607_1496825206.jpg](https://qiita-image-store.s3.amazonaws.com/0/31587/f4e4ea3f-c996-28c5-4e0e-22a37c7b08cd.jpeg "20170607_1496825206.jpg")

出てきました。Backtraceの項目にシステムではない、自分で実装したメソッドが表示されました。
ここがおかしいからこのインスタンスがメモリリークしているのでしょう。

原因を特定できました。

# おわりに

メソッドをみると循環参照になっているようです。
原因がわかれば対応ができます。
これを発見できたことでもWWDCに参加してよかったと思います。
みなさんも参考にしてください。
【mBaaS】javascriptでファイルストアから取得したデータを画像ファイルに変換して表示する

mBaaSを利用してファイルストアに保存している画像データを取得した場合、取得したデータを画像ファイルに変換する必要があります。今回はFileReaderを利用して表示してみようと思います。

## responseTypeの設定
ファイルストアのリファレンスを確認してみたところ、downloadメソッドを使用するときは、引数にresponseTypeを指定することができます。ここでデータ形式を設定することができます。

```js
File.download ( fileName , responseType , callback ) 

指定したファイルのバイナリデータを取得します
Parameters:
・fileName String
　取得するバイナリデータのファイル名

・responseType String
　レスポンスバイナリのデータ形式 arraybuffer/blob (ブラウザ/Monaca利用時のみ必要)

・callback Function
　コールバック関数

Returns:
ファイルのバイナリデータ (付加情報は取得しません)
```

## 実装コード

今回は、データ形式をblobに設定します。

```html
<!DOCTYPE HTML>
<html>
<head>
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
    <script src="js/ncmb-2.1.3.min.js"></script>
    <script>
        var ncmb = new NCMB("YOUR_APPLICATION_KEY", "YOUR_CLIENT_KEY");
        ncmb.File.download("image.png", "blob")
            .then(function(fileData) {
                var reader = new FileReader();
                reader.onloadend = function() {
                    var img = document.getElementById("imgId");
                    img.src = reader.result;
                }
                // DataURLとして読み込む
                reader.readAsDataURL(fileData);
            })
            .catch(function(err){
              // エラー処理
              alert('error = ' + err);
            });
    </script>
</head>
<body>
    <img id="imgId">
</body>
</html>
```

これでファイルストアから取得したデータを画像ファイルに変換して表示することができました。
Pythonで投資アルゴリズムを開発してみる 1

# はじめに

Smart Tradeという、株式投資をPythonで行うための、プラットフォームの使い方をメモ。

# Smart Tradeとは

![top.png](https://qiita-image-store.s3.amazonaws.com/0/185807/e66ec1c6-9327-9ce7-155f-6d3379c1edb7.png)


>Smart Tradeはエンジニアの皆さんに最先端の株式投資システムトレード環境を基本無料でご提供します。開発したアルゴリズムはご自身のトレードに、またはSmart Tradeのマーケットプレイスで販売できる予定です。

https://beta.smarttrade.co.jp/

まだβ版で使える機能も限定されていますが、いまはすべて無料で公開されています。将来的には、App Storeみたいになるのかな?

2018/1/11追記：開発者向け正式版URL　https://quantx.io/developer

# なにができるの?

日本や中国の過去の株価データをPythonで分析することができます。売買しても良さそうなタイミングがあれば、Smart TradeのAPIを利用して注文することで、どのくらい利益が出たか、という事をシミュレートすることができます(これを「バックテスト」といいます)。

また、簡単なBIツール的な機能がありますので、単純に株価をチャートで表示したり、計算した各種テクニカル指標の値を確認できたり、実際の売買タイミングがどのようになっていたかをビジュアル的に確認することができます。

# どうやって分析するの?

分析はPythonでプログラムを書きます。WebIDEが用意されていますので、ブラウザ上でプログラムを書いて実行することで、そのまま結果を確認することができます。

各種データは、Smart Tradeのプラットフォームで用意されていますので、使いたいデータを宣言するだけで、簡単に使えるようになります。実際のデータの操作はpandasが採用されているので、pandasを使える人であれば、比較的簡単に試すことができるのではないかと思います。

# Hello System Trade!

まずは、Hello World的に、9984(ソフトバンク)の株価をチャートに表示してみます。
Python Coding画面で、下記のようなコードを書いて、実行してみます。

```python
def initialize(ctx):
    # アルゴリズムの設定
    ctx.configure(
      target="jp.stock.daily",    # 日本株の日足を対象としたアルゴリズム
      channels={
        "jp.stock": {
          "symbols": [
            "jp.stock.9984",      # ソフトバンクのデータを利用する
          ],
          "columns": [
            "close_price",        # 終値
            "close_price_adj",    # 終値(株式分割調整後)
          ]
        }
      }
    )

def handle_signals(ctx, date, current):
    '''
    current: pd.DataFrame
    '''
    pass
```

実行すると、

![summary.png](https://qiita-image-store.s3.amazonaws.com/0/185807/1d0c69fe-b7f7-6df7-8c59-21a9f40d4b0c.png)


チャートがでてきました。凹凸がありませんが、これは売買を行っていないので、資産はなにも変動していない、ということです。銘柄の詳細を見てみると、

![detail.png](https://qiita-image-store.s3.amazonaws.com/0/185807/dbbc0647-f57c-0f80-54ec-f18c2291ca4f.png)


きちんと出ていますね!

次回は移動平均を表示してみます。

# 参考情報

* [Smart Trade](https://beta.smarttrade.co.jp/)
* [Smart Trade Documentation](https://beta.smarttrade.co.jp/handbook/ja/)
* [Smart Trade Q&A](https://beta.smarttrade.co.jp/qa)
* [Smart Trade Slack channel](https://slackin.smarttrade.co.jp/)


2018/1/11追記　正式版URL：

* [Smart Trade (会社サイト)](https://smarttrade.co.jp/)
* [QuantX (サービスサイト)](https://quantx.io/)
* [QuantX Documentation](https://quantx.io/handbook/ja/)
* [QuantX サンプルプログラム]( https://quantx.io/demo/81dd0231dda83b4ac461b99fbdb6a4bf95756df4c05447552c7b3434b583c2b3)
BeautifulSoupで複数ページをスクレイピングする

急遽また複数ページにまたがるデータをデータベースに保存しないといけない要求があり突貫工事で書いたわけです。CSSセレクターは死ぬほど便利ですよね。

#実態

```scl.py
import requests, os, re, csv, bs4
import sqlite3
import lxml.html

a = 0
i = 0

url = 'https://www.〜'

while a < 55:
    a += 1
    
    res = requests.get(url)
    res.raise_for_status()
    soup = bs4.BeautifulSoup(res.text, 'lxml')


    for u in soup.select('.plan-module > .plan-link.plan-image-container'):
        urls = 'https://www.〜' + u.attrs['href']

        #print (urls)

        con = sqlite3.connect('url.db')
        c = con.cursor()
        c.execute('''CREATE TABLE IF NOT EXISTS urldata(urls unique)''')
        c.execute('INSERT INTO urldata VALUES (?)',[urls])
        con.commit()
        con.close()

    i += 1
    url = 'https://www.〜?=' + str(i)


print ('success')
```

ところがどっこい、ページ送りが動的要素でSelenium使わないと駄目なことが判明した次第です。
【mBaaS】ファイルストアから動画を取得して再生する【Android】

## はじめに
[ニフティクラウド mobile backend (mBaaS)](http://mb.cloud.nifty.com/) の「ファイルストア」機能を使っていて、テキスト以外に動画なんかも使えるのか試しました。
mBaaSと記述していますが、ファイルの取得部分以外は普通のAndroidの機能です。

### 動作確認環境
Android 5系
NCMB Android SDK v2.2.4

### 事前準備
- mBaaSはプロジェクトにSDKが入っている状態です。詳しくは[こちら](http://mb.cloud.nifty.com/doc/current/introduction/quickstart_android.html)。
- ファイルストアにMP4ファイルをアップロード済み（xxxx.mp4）

## 実装
流れとしては、Activityを開いたらmBaaSから動画を取得、
成功したらローカルでvideoviewで再生するというシンプルなもの。

```java:VideoActivity.java
public class VideoActivity extends AppCompatActivity {

    // VideoView
    private VideoView mVideoView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_video);

        mVideoView = (VideoView) findViewById(R.id.video);
        // メディアコントローラーの設定
        mVideoView.setMediaController(new MediaController(this));
        // 動画の準備ができたら再生
        mVideoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
            @Override
            public void onPrepared(MediaPlayer mp) {
                mVideoView.start();
            }
        });

        // mBaaSのファイルストアから動画を取得
        getVideo();
    }

    private void getVideo(){
        // 動画ファイル名
        final String videoName = "xxxx.mp4";

        // ファイルストアから動画を取得
        NCMBFile file = new NCMBFile(videoName);
        file.fetchInBackground(new FetchFileCallback() {
            @Override
            public void done(byte[] data, NCMBException e) {
                if (e != null) {
                    // 失敗
                    e.printStackTrace();
                } else {
                    // アプリ内のfilesに保存
                    FileOutputStream out = null;
                    try {
                        out = openFileOutput(videoName, Context.MODE_PRIVATE);
                        out.write(data);
                        out.close();
                    } catch (IOException e1) {
                        e.printStackTrace();
                    }

                    // 動画のパスを設定
                    mVideoView.setVideoPath("/data/data/" + getPackageName() + "/files/" + videoName);
                }
            }
        });
    }
}
```

```xml:activity_video.xml
<VideoView
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/video"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".VideoActivity"
    />
```

## 結論
特に問題ないです。
ただ動画となるとサイズが大きいので、取得するタイミングや取得中の表示はちゃんと考えないといけなそうです。
他に追加してできそうなこと…

- アプリ側からmBaaSに動画を保存したり公開する
- パーミッションを設定して特定のユーザーだけに限定公開する
- プッシュ通知タップ時にペイロード情報から動画を取得・視聴させる　など

普通にダウンロードするだけなら公開ファイル設定にしてURLからとってきた方が楽かもしれないですね。
ObjectをつかってViewControllerがインスタンス化された際に自動で依存性を解決する

# ObjectをつかってViewControllerがインスタンス化された際に自動で依存性を解決する

https://github.com/rambler-ios/Generamba
全然知らなかったんだけど、generambaを使っていてテンプレートに同じようなコードが含まれていたので気づいたｗ
めっちゃ便利だったので書いてみる

## セットアップ
- ObjectをドラッグアンドドロップでViewControllerに設置する

<img width="1512" alt="スクリーンショット 2017-06-07 16.40.14.png" src="https://qiita-image-store.s3.amazonaws.com/0/75313/244b83a8-88a6-e791-3e07-ee1d6d38e0da.png">

## Configurator(依存性を注入するクラス)を定義

- NSObjectを継承したConfiguratorを定義する

``` swift
import Foundation

class Configurator: NSObject {
}
```

## ConfiguratorをObjectに紐付ける

- custom classに先程定義したConfiguratorを紐付ける

<img width="261" alt="スクリーンショット 2017-06-07 16.41.13.png" src="https://qiita-image-store.s3.amazonaws.com/0/75313/16fc2e6b-0e60-6b5e-d181-113229543733.png">

## ViewControllerとConfigurator/ViewControllerを紐付け

<img width="1552" alt="スクリーンショット 2017-06-07 16.51.06.png" src="https://qiita-image-store.s3.amazonaws.com/0/75313/d4a3cbe6-f8ec-085e-7ec3-814c2ab8c825.png">

## Configuratorで依存性を解決

```swift

import Foundation

class Configurator: NSObject {
	@IBOutlet weak var viewController: ViewController!

	override func awakeFromNib() {
		super.awakeFromNib()
		configure()
	}

	func configure() {
	     // ここで依存性を注入する
             viewController.model = SmapleModel()
	}
}

```
超簡単！Unityで自分のフォルダのファイルを背景設定する方法

#簡単5ステップ
①Hierarchyビューからcreate UI→ImageでImageのGameObjectを生成

②素材をフォルダからProjectビューにドラッグ＆ドロップ

③Projectビューにある素材を選択した状態でのInspectorビュー最上部にあるTexture Typeを
「Default」から「Sprite(2D and UI)」へ変更。

④そのままの画面でInspectorビュー右下部にあるApplyをクリック。
(Applyをクリックしなくとも、どこでも良いので別の箇所をクリックするとポップアップが出てきて
そこでApplyをクリックしてもOK)

⑤Projectビューにある素材の左側に小さい矢印ができていることを確認し、
HierarchyビューにあるImageにドラッグ＆ドロップ。

大きさを整えて完成！！
SaaSForceで作ったアプリをテストサーバーで確認する

![wfc20161109007.JPG](https://qiita-image-store.s3.amazonaws.com/0/184885/8bdf65ec-76e9-1461-c0c8-709ec3b646f0.jpeg)

SaaSForceで作ったアプリを、早速確認したい。

そんなときは一度、開発環境からログアウトする必要があります。

開発環境の画面の右上のアイコンを押すと、ログアウトのボタンがでてきます。

![wfc20161109008.JPG](https://qiita-image-store.s3.amazonaws.com/0/184885/fdd6938e-44b3-00d4-966b-24b85bf6ef7b.jpeg)

｢正常にログアウトしました。」と言う画面に切り替わったら、｢ログイン画面へ｣と言う青いボタンを押します。

![wfc20161109009.JPG](https://qiita-image-store.s3.amazonaws.com/0/184885/325569c1-d47a-a11a-9202-be0c48a53dc7.jpeg)

開発環境のログインと同じ画面ですが、気にせずに開発環境用とは別の、サーバー用のIDとパスワード、そして、認証コードを入力してログインします。

![wfc20161109011.JPG](https://qiita-image-store.s3.amazonaws.com/0/184885/40420534-4fd8-24de-07c5-fe051a238839.jpeg)

｢テスト｣と言うところをクリックすると、ドロップダウンリストで今まで作ったアプリがでてきます。

このときに、別画面でアプリが開きますが、それはそのような設定なので気にしないでください。
TangoのPointCloudのシェーダーで遊ぼう（前編）

# 環境

- MacBookPro 15inch mid2015
- Lenovo Phab2 Pro
- Unity5.6.1f1
- TangoSDK Hopak


# 1. TangoでPointCloudを動かす
## 1-0. 前提条件
下記に従ってUnityの環境を準備する。

- [Getting Started with Unity for Tango](https://developers.google.com/tango/apis/unity/)
- [Setup for All Unity Tango Apps](https://developers.google.com/tango/apis/unity/unity-setup)


## 1-1. Tango Managerの設定
TangoSDKのPrefabからTango ManagerをHierarchyに置き、下記のとおり設定する。

- Enable DepthをOn
- Enable Video OverlayをOff

<img width="290" alt="スクリーンショット 2017-06-06 19.52.58.png" src="https://qiita-image-store.s3.amazonaws.com/0/28734/05fc2e6c-7706-af4a-35de-3b09e2642e3c.png">

## 1-2. Tango Cameraの設定
TangoSDKのPrefabからTango CameraをHierarchyに置き、下記のとおり設定する。

- Tango AR Screen(Script)をOff

<img width="289" alt="スクリーンショット 2017-06-06 19.53.19.png" src="https://qiita-image-store.s3.amazonaws.com/0/28734/19cbe314-0a68-f6c2-5033-3b8bd6921727.png">


## 1-3. Tango Point Cloudの設定
TangoSDKのPrefabからTango Point CloudをHierarchyに置き、下記のとおり設定する。

- Mesh RendererをOn
- Tango Point Cloud(Script)のUpdate Points MeshをOn

<img width="289" alt="スクリーンショット 2017-06-06 19.53.35.png" src="https://qiita-image-store.s3.amazonaws.com/0/28734/77ac838a-e051-496a-84e0-bd57090aa75e.png">

## 1-4. 起動
PCで動作確認後、Lenovo Phab2 ProをUSBケーブルで接続し、Build & Run実行
![Screenshot_20170606-200211.png](https://qiita-image-store.s3.amazonaws.com/0/28734/93260990-236c-d798-26ba-ea12f80f6642.png)

カメラ上にPointCloudを表示する場合は、

- Tango ManagerのEnable Video OverlayをOn、Texture and Raw Bytes選択
- Tango CameraのTango AR Screen(Script)をOn

にする。


[TangoのPointCloudのシェーダーで遊ぼう（後編）](http://qiita.com/haltyt/items/445059f6241ba713ea48)
へ続く。
VS2015で__imp_printfが見付からない

# 現象
古いVisualStudioで作ったプロジェクトをVisualStudio2015でビルドしようとすると、
`エラー    LNK2001    外部シンボル "__imp_printf" は未解決です。` や
`エラー    LNK2019    未解決の外部シンボル __imp__snprintf が関数 *** で参照されました。`
といったエラーが出てしまった。

# 原因
VisualStudio2015ではprintf()やscanf()関係がガラっと変わっているらしい。

# 対策
リンカーの入力オプションで依存ライブラリとして ``legacy_stdio_definitions.lib`` を加えるとよい。

# 参考
[Updated to VS 2015 and now get Unresolved External Errors](https://social.msdn.microsoft.com/Forums/ja-JP/5150eeec-4427-440f-ab19-aecb26113d31/updated-to-vs-2015-and-now-get-unresolved-external-errors?forum=vcgeneral)
mac ログイン時に自動的に静的ルートを追加する

# mac ログイン時に自動的に静的ルートを追加したい

1. スクリプトエディタを開きます
2. 以下のように記述します

    ```
    set theScript to "sudo route add -net 172.21.0.0/24 192.168.1.254"
    do shell script theScript
    ```
3. スクリプトエディタの「ファイル」メニューにある「書き出す」をクリック
適当な名前を付けて保存します。ファイルフォーマットはアプリケーションを選択します  
4. route コマンドの実行時にパスワードを要求されないようにsudoersを編集します
$ sudo visudo
    `user ALL=(ALL) NOPASSWD: ALL`
上記は全コマンドパスワード不要となります  
    route コマンド限定にする場合は以下のように記述します
    `user ALL=(root) NOPASSWD: /sbin/route`
5. 「システム環境設定」の「ユーザとグループ」を開き、静的ルートを追加するユーザの
「ログイン項目」を開きます 
「＋」をクリックして、先程保存したアプリケーションを選択し、「追加」をクリック  
以上です
React.jsでtableの行が2行で1セットになるcomponentを作成する

タイトル通りで、`<table>` で2行で1セットとなるような行を表示をしたい場合の1つの方法として。

**【お知らせ】**
今は `React.Fragment` があるのでこのような記述は不要になりました。（一応この記事は記念に残しておきます・・・）

## 課題
```js:ダメな例
React.createClass({
    render: function() {
        return (
            <tr><td>Item 1</td></tr>
            <tr><td>Item 2</td></tr>
        );
    }
});
```

現時点ではrenderは、単一要素でラップしてreturnする制約があるので、`<tr></tr>` を2つ返すような上記の記述は出来ない。tableでなければ、適当に `<div></div>` 等で囲めば良いのだけど、table行なのでこの方法が使えない。
それならば、2行をまとめて `<tbody></tbody>` で囲めば良いのでは？と安直に考えたものの、`validateDOMNesting` の警告が出てしまった。（HTML的にはtbodyが複数出現するのは許容されているはずなのだけど、React的にはNGっぽい）

## 解決法

まずはサンプルとして、1行ずつ表示させる一般的なtableの例。

```js:修正前
const data = [
  { id: 1, firstName: 'John', lastName: 'Doe' },
  { id: 2, firstName: 'Clark', lastName: 'Kent' }
];

class Table extends React.Component {

  render() {
    const rowComponents = this.generateRows();

    return (
      <table>
        <thead>
          <th>First Name</th>
          <th>Last Name</th>
        </thead>
        <tbody> {rowComponents} </tbody>
      </table>
    );
  }

  generateRows() {
    const data = this.props.data;

    return data.map((item) => {
      // -----👇👇👇注目ポイント
      return (
         <tr key={item.id}>
           <td>{item.firstName}</td>
         </tr>
      );
      // -----👆👆👆注目ポイント
    });
  }
}

React.render(<Table data={data}/>, document.getElementById('example'));
```

これを、2行ずつ表示させるように修正する。

```js:修正後
const data = [
  { id: 1, firstName: 'John', lastName: 'Doe' },
  { id: 2, firstName: 'Clark', lastName: 'Kent' }
];

class Table extends React.Component {

  render() {
    const rowComponents = this.generateRows();

    return (
      <table>
        <thead>
          <th>First Name</th>
          <th>Last Name</th>
        </thead>
        <tbody> {rowComponents} </tbody>
      </table>
    );
  }

  generateRows() {
    const data = this.props.data;

    return data.map((item) => {
      // -----👇👇👇注目ポイント
      return ([
        <tr key={'firstRow_' + item.id}>
          <td>{item.firstName}</td><td>{item.lastName}</td>
        </tr>,
        <tr key={'secondRow_' + item.id}>
          <td>{item.firstName}</td><td>{item.lastName}</td>
        </tr>
      ]);
      // -----👆👆👆注目ポイント
    });
  }
}

React.render(<Table data={data}/>, document.getElementById('example'));
```

変更したのは、「注目ポイント」と書いた `return()` の箇所だけ。配列で返すようにして、keyの値がユニークになるように手を加えたのみ。（1つ目 `</tr>` の後ろのカンマを忘れずに）

jsfiddle にもソースを置いたので色々試したい方はどうぞ。
http://jsfiddle.net/kiharu/m38L2tyy/
flamingoを使ってPCサイトをスマホサイトに最適化してみた 3/4

## ◆はじめに  
この記事は[『flamingoを使ってPCサイトをスマホサイトに最適化してみた 2/4』](http://qiita.com/h_arasawa/items/ce8e3f5a62dbb4b36e08)の続きになっています。
 
## ◆前回のおさらい
前回はflamingoを使って早速開発を行ってみました。
今回は画像やCSSファイル等を作成してみたり、アップロードしてみます。
 
## ◆ファイルをアップロードしてみる
ファイルをアップロードするには、『ファイルマネージャー』を使用します。
ファイルマネージャーはflamingoIDE画面の左側のバーにある雲のアイコンです。 

![ファイルマネージャー.png](https://qiita-image-store.s3.amazonaws.com/0/170776/4672be36-a6c0-3618-b165-52cc1f755216.png)

 
クリックして開くと、下のページが表示されます。
既にCSSとjsのファイルが既に表示されています。  
 
今回は写真をアップロードしたいので、imageフォルダを作成してみます。
作成方法は以下の通りです。  
1.右上の『＋新規追加』ボタンをクリックし、『フォルダ』をクリックします。 
![スクリーンショット_2016-12-20_16_16_15.png](https://qiita-image-store.s3.amazonaws.com/0/170776/5114fc6b-8a55-688e-2669-4da88bf9921a.png)

2.フォルダの名前を入力します。  
『フォルダ』をクリックするとポップアップのようなものが表示されます。  
今回はイメージフォルダを作成するので、『image』にします。  
![スクリーンショット_2016-12-20_16_23_35.png](https://qiita-image-store.s3.amazonaws.com/0/170776/b7dea704-0169-ac18-d712-3eeae23d4f58.png)

 
作成したら早速アップロードしてみます。
写真をドラッグ&ドロップでアップロードができるようになっています。
 
![スクリーンショット_2016-12-20_16_33_48.png](https://qiita-image-store.s3.amazonaws.com/0/170776/713b9d4f-1cd1-6d8d-ee52-28c1bbe0e126.png)


アップロードされた画像にオンマウスすると、画像の情報を見ることができたり、削除やダウンロードすることも可能です。
また、画像の名前も変更することができます。  
![スクリーンショット_2016-12-20_16_34_47.png](https://qiita-image-store.s3.amazonaws.com/0/170776/5885b9a2-895a-7c34-774a-d4783dcb5a7f.png)
 

画像だけでなく、CSSファイルやjsファイルも同じようにアップロードすることができますし、
アップロードしたファイルをIDE上で編集することも可能です。
 
それでは、次にCSSファイルをアップロードしてみます。
1つ目はドラッグ＆ドロップで既存のCSSファイルをアップロードする方法、
2つ目はIDE上で新規にCSSファイルを作成する方法です。

それでは、1つ目をご説明します。
まず、ファイルマネージャーを開きます。CSSフォルダは最初から作成されているので、クリックします。  
![スクリーンショット_2016-12-22_18_22_54.png](https://qiita-image-store.s3.amazonaws.com/0/170776/b154246f-9f2d-637d-8138-8bd08bb3847e.png)

クリックしたらPCサイトに使用しているCSSファイルをドラッグ＆ドロップでアップロードして完了です。
 
2つ目の新規にCSSファイルを作成したい方は、右上に表示されている『+新規作成』をクリックし、
『CSSファイル』をクリックすることで作成されます。  
 
![スクリーンショット_2016-12-22_18_17_00.png](https://qiita-image-store.s3.amazonaws.com/0/170776/3f3b1fc9-d87d-95a7-3630-936b89402fd4.png)

新規作成したら、そのファイルの名前を編集して完了です。  
 
以上、ファイルや画像のアップロード方法をご説明しました。
さらに詳しく知りたい方は[こちら](http://docs.flamingo.gomobile.jp/ja/file-manager.html?highlight=%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB)をご覧ください。
 
アップデートをしたファイルをページにリンクさせるためには、 

```
<!--{= __CONTENTS_ROOT__}-->フォルダ名/パス名
```

上記のコードを書く必要があります。
書く場所は下の画像の位置になります。  
 
![スクリーンショット 2016-12-22 11.58.33.png](https://qiita-image-store.s3.amazonaws.com/0/170776/d7dfb24b-1ee9-7c18-83a0-7a1d065e8141.png)

 
画像はsrc属性のところに、jsファイルでもsrc属性のところに、CSSファイルならhref属性のところに
上記のソースコードを書くことで、読み込むことができます。  
 
今回はここまで。
次回はリリースしてみます。
Gmailに届いた特定のメールだけiPhoneにプッシュ通知

AndroidからiPhoneに乗り換えて困ったのがGmailでの新着メールの通知です。

すぐに処理したい重要なメールは、Gmailのフィルタの設定でnotifyというラベルを自動的につけるようにしています。

AndroidのGmailアプリでは、設定＞(メールアドレス）＞ラベルの管理＞（ラベル名）と進むと、それぞれのラベルごとに、通知のオンオフ、通知音、バイブレーションのオンオフ、新着メール毎の通知のオンオフを選べます。この機能を使って、notifyラベルが付いた新着メールのみ通知するようにしていました。

一方、iPhoneのGmailアプリでは、設定＞（メールアドレス）＞ラベルの設定＞（ラベル名）と進んでも、通知に関する設定項目がありません。ラベル単位ではなく、アカウント単位でしか新着メールの通知のオンオフの選択ができないようです。

# やりたいこと

Gmailで特定のラベルがつけられた新着メールだけiPhoneにプッシュ通知させる。

# 準備

## 1. iPhoneにCodyl Connectアプリをインストール

通知を受け取りたいiPhoneにApp　StoreからCodyl Connectアプリをインストールします。

[![App Store　からダウンロード](http://linkmaker.itunes.apple.com/assets/shared/badges/ja-jp/appstore-lrg.svg)](https://itunes.apple.com/jp/app/codyl-connect/id1187549054?mt=8)

## 2. Codyl Connectにアカウント作成

Codyl Connectのアカウントを持っていない場合は、Codyl Conectアプリを起動して、「新規アカウント登録」を押して指示に従ってください。

## 3. Codyl ConnectアプリからCodyl Connectにログイン

Codyl Connectアプリで、まだ一度もログインしていない場合はログインしてください。

# 設定方法
## 1. Codyl Connectにログイン

ウェブブラウザで[Codyl Connect](https://connect.codyltech.com)にログインします。

### 2. シナリオをテンプレートから作成

シナリオタブをクリックして、「テンプレートから作成」をクリック![01.png](https://qiita-image-store.s3.amazonaws.com/0/184984/3a4536cb-b0c7-c286-b206-d9fb7556400f.png)

### 3. テンプレートを選ぶ

テンプレート一覧が表示されるので、00６３で絞り込むと、「ラベルが付けられたら通知」が見つかります。「このテンプレートを使用する」をクリックします。

![02.png](https://qiita-image-store.s3.amazonaws.com/0/184984/51d6c3f2-b2cb-782d-b86d-e806e2d1c9f1.png)

### 4. Gmailコネクターを割り当て

テンプレートの設定画面のコネクター割り当てで、Gmailの下の枠をクリックして、「新規コネクター作成」を選びます。

![03.png](https://qiita-image-store.s3.amazonaws.com/0/184984/44dd6058-ce96-eb7d-ccf3-ecc680e51886.png)

「新しいコネクターを作成」ダイアログが表示されます。アカウントに接続をクリックします。

![04.png](https://qiita-image-store.s3.amazonaws.com/0/184984/4eaf0a41-daa6-1590-b740-221551743d15.png)

ブラウザの状態によって、Googleアカウントの認証画面やアカウント選択画面が表示されます。指示に従って進むと、スコープのリクエスト画面が表示されます。「許可」をクリックします。

![05.png](https://qiita-image-store.s3.amazonaws.com/0/184984/c0f92b8b-a400-1656-9944-4d87c7e9bd47.png)


### 5. プッシュ通知コネクターを割り当て

テンプレートの設定画面のコネクター割り当てで、プッシュ通知の下の枠をクリックすると、プッシュ通知コネクターの候補一覧が表示されます。通知したいiPhoneを選択します。

![06.png](https://qiita-image-store.s3.amazonaws.com/0/184984/91ce97a9-a72c-32ce-f13f-9e60cf6f66e6.png)

### 6. シナリオを作成

ラベル名をnotifyから他のラベルに変更が必要な場合は変更します。
「シナリオを作成」をクリックします。

![07.png](https://qiita-image-store.s3.amazonaws.com/0/184984/449b48c8-44cb-dc91-5c74-19636453ce7f.png)

### 7. スケジュール設定を有効化

シナリオが完成しました。スケジュール設定を有効化すると動き始めます。

![08.png](https://qiita-image-store.s3.amazonaws.com/0/184984/d5803f28-2006-151e-fb26-964af3b7759a.png)

# 完成

新着メールにnotifyラベルが付けられると、iPhoneにプッシュ通知が届きます。


![IMG_0235.PNG](https://qiita-image-store.s3.amazonaws.com/0/184984/ce62427f-f9b5-c160-8a2e-185766edd483.png)
SaaSForceの作業に慣れる最善の方法

![wfc20161109000.JPG](https://qiita-image-store.s3.amazonaws.com/0/184885/06db43d4-364e-f200-0acc-17994c4c9c09.jpeg)

SaaSForceはシンプルで、ほとんど日本語で使える利点はありますが、やはり操作に慣れるには使うことが最善のトレーニングとなるでしょう。

また、それぞれの作業の感覚について理解するにも、何度か基礎的な反復練習がお勧めです。

そのための教材と言うわけではないのでしょうが、SaaSForceにはテンプレートテーブルと言うものが多数格納されているので、それを使ってまずは習うよりも慣れることが一連の作業を効率よく行うキーではないかと思います。


まずは、｢テーブル定義．作成｣をクリックしてください。

![wfc20161109001.JPG](https://qiita-image-store.s3.amazonaws.com/0/184885/0e1daa02-47d3-bf4a-3341-b45e493a97bb.jpeg)

全く初めての場合はこのような画像に、何度か作業している場合は、この下のところに今まで作ったアプリのテーブルが並びます。

上にある「検索条件｣と言う虫眼鏡の絵の付いている部分をクリックするとこのような画面に変わります。

![wfc20161109002.JPG](https://qiita-image-store.s3.amazonaws.com/0/184885/2c5cf6d1-8246-4c9e-e4b2-c5c160f50a82.jpeg)

初めて作成するので「新規」をクリックしてください。

余談ですが、この画面で過去に作ったアプリの検索もできますが、無料版の場合はそれほど探し回るほどの数を作ることができないのでめったに使わないと思います、この機能は。

画面が切り替わると、この記事のトップの画面になります。

![wfc20161109003.JPG](https://qiita-image-store.s3.amazonaws.com/0/184885/a511ca47-e884-7d5e-f10d-cfc2004ad2de.jpeg)

｢テンプレートテーブル利用:」のところにあるドロップダウンリストをクリックすると、多くのテンプレートが出てきます。

今回は一例として「社員マスタ」を選んでみます。

![wfc20161109004.JPG](https://qiita-image-store.s3.amazonaws.com/0/184885/ceca5f59-37db-8333-fde1-01ca2bbf8a5d.jpeg)

そして、｢定義取得｣を押すと、あっという間にテーブルが完成します。

![wfc20161109005.JPG](https://qiita-image-store.s3.amazonaws.com/0/184885/def6a11d-9ea2-dec0-096c-961a32a710cc.jpeg)

あとは｢テーブルID」に適当なアルファベットの名前（aとかでも十分)、「テーブル名称」を入力して、｢マスタ情報」と下のほうにある｢データーベース反映｣にチェックを入れて｢保存｣するだけ。

![wfc20161109006.JPG](https://qiita-image-store.s3.amazonaws.com/0/184885/2506d671-a2cc-555d-7128-d0657628ebe1.jpeg)

きちんとSaaSForceに反映されたかどうかを確認するために「OK」をクリックします。

そして、｢キャンセル｣を押してから｢検索｣をすると今作ったアプリのテーブルが表示されます。

文章にすると長いですが、実際は30秒ほどで終わる作業です。
tf.nn.moments()とはなにものか

## きっかけ

最近CNNを色々勉強して試していて，batch normalizationに手を出し始めたのですが，どうやらtf.nn.batch\_normalizationで必要な平均と分散の計算にあたってtf.nn.momentsなる関数が使われることが多いようです．

結論を言うとtf.nn.momentsとは平均と分散を返すだったのですが，(おそらく当たり前すぎて) 説明が全然見当たらなかったのでメモ．

## モーメント (積率) とは?

(素人なので間違っているかも．その場合はご指摘いただければと思います)

文脈や分野によって意味が違うようですが，確率論においては平均や分散が，つまり，

$Var(X) = E((X -\mu)^2)$

$E(X) = E((X - 0)^1)$

みたいに，「『Xから定数を引いたもの』のn乗の期待値」のかたちで表されるものがモーメントと定義されるそうです．nが1だったら1次のモーメント．2だったら2次のモーメント．

また，「(平均のように) 定数部分が0であるn次のモーメント」，つまり，「n乗した値の期待値$E(X^n)$」を，$m_n$と表したり$\mu'_n$と表したりします．これらは，「原点のまわりのn次のモーメント」と呼ばれるそうです．

さらに，「(分散のように) 定数部分が平均値であるn次のモーメント」，つまり，「平均との差のn乗の期待値$E((X - \mu)^n)$を$\mu_n$と表します．これらは，「平均のまわりのn次のモーメント」と呼ばれるそうです (参考: [分布をまとめる − 平均と分散](https://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=2&cad=rja&uact=8&ved=0ahUKEwi34_jQjKvUAhVIlJQKHQeFCVIQFggvMAE&url=http%3A%2F%2Fracco.mikeneko.jp%2FKougi%2F2011a%2FSTAT%2F2011astat04.pdf&usg=AFQjCNFkb6Vk-Nvr8AK4n0_G7adbM0IGcw&sig2=NmaI43dZurcuHhli9SiGjA))．

## tf.nn.momentsにおけるモーメント

…モーメントをわざわざ説明しといて何なんですが，[公式](https://www.tensorflow.org/api_docs/python/tf/nn/moments)曰く，

> Calculate the mean and variance of x.

とのこと．定数や次数をわざわざ自前で設定するようにはできてないようです (平均とか分散とか以外の用途でmomentsを使う必要がそもそも無いのかな?)．

なので，返す値は (1次のモーメント, 2次のモーメント) = (平均, 分散) になります．例えば，

```python3
import tensorflow as tf
import numpy as np

arr = np.array([
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
], dtype=np.float32)

x = tf.constant(arr)
```

で2次元配列xを作っておいて，momentsを計算すると，

```python3
moments = tf.nn.moments(x, [0])  # 1次 (行方向) に圧縮

with tf.Session() as sess:
    m, e = sess.run(moments)

print(m, e)

>>> [ 4.  5.  6.] [ 6.  6.  6.]
```

また，tf.nn.momentsの第二引数に[0, 1]を渡すと，

```python3
moments = tf.nn.moments(x, [0, 1])  # 全体の平均と分散を求める

with tf.Session() as sess:
    m, e = sess.run(moments)

print(m, e)
>>> 5.0 6.66667
```

となります．

tensorflowでCNNをやる場合，入力は [batch\_size, height, width, channel] の4次テンソルであるはずなので，

```python3
batch_mean, batch_var = tf.nn.moments(net, [0, 1, 2])
```

として，チャンネルごとの平均と分散を求めることになります．
Tmux 2.2をインストールする手順

> 自分で成功した方法：
Install tmux on Centos release 6.5 x86_64

# install deps
```shell-session:
yum install gcc kernel-devel make ncurses-devel
```

# DOWNLOAD SOURCES FOR LIBEVENT AND MAKE AND INSTALL
```shell-session
curl -OL https://github.com/downloads/libevent/libevent/libevent-2.0.21-stable.tar.gz
tar -xvzf libevent-2.0.21-stable.tar.gz
cd libevent-2.0.21-stable
./configure --prefix=/usr/local
make
sudo make install
```
# DOWNLOAD SOURCES FOR TMUX AND MAKE AND INSTALL
```shell-session
curl -OL https://github.com/tmux/tmux/releases/download/2.2/tmux-2.2.tar.gz
tar -xvzf tmux-2.2.tar.gz
cd tmux-2.2
LDFLAGS="-L/usr/local/lib -Wl,-rpath=/usr/local/lib" ./configure --prefix=/usr/local
make
sudo make install
```
# check tmux version
```shell-session
tmux -V
```
# begin new linux life 
```shell-session
tmux
```


# 或いは：One-key install（試してない）for the incredibly lazy people only

```shell-session
curl https://gist.githubusercontent.com/rothgar/cecfbd74597cc35a6018/raw/1f96ddcae45419788b2076d965851e072c3f201c/install-tmux | bash
```
Cognos Analytics 11.0.6でクロス集計の行と列の見出しを固定する

巨大なクロス集計が作成された時、行の見出しや列の見出しを固定したまま数値を確認したいと思うことはよくあります。

が、Cognos Analytics 11.0.6ではデフォルトの設定のままでは行列見出しの固定ができません。対象のレポートだけに適用される設定変更で見出しの固定が可能になる手順を紹介します。
#完成イメージ
![001-2.jpg](https://qiita-image-store.s3.amazonaws.com/0/146283/ccac4218-48e5-2a8c-dc0f-e527e2ca1c8d.jpeg)


#設定変更
必要な設定の変更はレポート実行モードの変更です。
① レポート編集画面で、｢ページ・ウィンドウ」を開きます
② 「レポート」のプロパティを表示します
③ 実行中および検証中 > 完全な双方向性で実行 を「いいえ」 に変更します
*④ プロパティ・ウィンドウが表示されていない場合は、「プロパティの表示」をクリックします
![002.jpg](https://qiita-image-store.s3.amazonaws.com/0/146283/53c0ea87-3abd-b34b-18ea-63a223d98e04.jpeg)


#行列見出しの固定化
レポートを実行し、表示されたクロス集計を右クリックすると、「行見出しの固定」「列見出しの固定」が表示されます。
このメニューをクリックすることで、それぞれ固定化することができます。
![003-2.jpg](https://qiita-image-store.s3.amazonaws.com/0/146283/c3a26b26-60ba-bf8c-f6be-3059820a362f.jpeg)


#注意点
レポート実行モードを変更したことにより、多少の制限も発生し、レポート実行後のソートやフィルタの追加などが出来なくなってしまいますのでご注意ください。
長押しでコピー可能なUIButton

毎回作るのが嫌なので、クラスを貼っておく。
これをコピペして、nibのボタンのクラスを`UIButton`から`UIButtonWithCopyMenu`に変更すると長押しでCopyメニューが表示されます。

```swift
import UIKit

// コピーメニューが表示されるUIButton
class UIButtonWithCopyMenu: UIButton {

    override func awakeFromNib() {
        // 長押し処理を追加
        self.addGestureRecognizer(UILongPressGestureRecognizer(target: self, action: #selector(UIButtonWithCopyMenu.showContextMenu(_:))))
    }

    // コンテンツをコピーできるようにします。
    func showContextMenu(_ sender:AnyObject?) {
        self.becomeFirstResponder()
        let contextMenu = UIMenuController.shared
        if !contextMenu.isMenuVisible {
            contextMenu.setTargetRect(self.bounds, in: self)
            contextMenu.setMenuVisible(true, animated: true)
        }
    }
    
    // コンテンツをコピーします。
    override func copy(_ sender: Any?) {
        let pasteBoard = UIPasteboard.general
        pasteBoard.string = self.titleLabel?.text
        let contextMenu = UIMenuController.shared
        contextMenu.setMenuVisible(false, animated: true)
    }
    
    override func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool {
        if action == #selector(copy(_:)) {
            return true
        }
        return false
    }
    
    override var canBecomeFirstResponder: Bool {
        get {
            return true
        }
    }
}
```
YellowfinのJSONコネクタを使ってみる


# Yellowfinとは
- データを分析・可視化するためのいわゆるBIツールです。
- 100% Webベースのアプリで、すべての操作がWebブラウザで完結します。
- Yellowfin自体にはデータを持ちません。外部のデータソースをリアルタイムに参照します。
- 各種のデータベースはもちろん、Webコネクタを使えばWeb上のあらゆるデータを利用できます。

# JSONコネクタの使い方
## プラグインの入手
まずはプラグインが手元になければ話になりません。
Yellowfin社から提供されているJSONコネクタのプラグインファイル（connector-json.yfp）を入手してください。
※日本国内ではYellowfin Japanへ連絡すれば入手可能です。

## 新規プラグインの追加
プラグインは管理メニューの「プラグイン管理」からアップロードします。

￼![プラグイン追加.png](https://qiita-image-store.s3.amazonaws.com/0/116818/a59d4431-3b13-9006-a07b-91ccc9385ed9.png "プラグイン追加.png")

## データソースの追加
### JSONデータソースのURLの指定
プラグインを追加すると、新規データソースの選択肢に「Json Data Source」が増えます。

![新規データソース.png](https://qiita-image-store.s3.amazonaws.com/0/116818/1b175a25-f811-ab7b-8aa4-8f1faf953d50.png "新規データソース.png")

今回の例ではデータソースとして[AEDオープンデータプラットフォーム](http://hatsunejournal.jp/w8/AEDOpendata/)の「市町村単位での登録件数API」を使用してみます。
操作手順は以下のように。

1. 「名前」を入力（例では「AED登録件数」とします）
2. 「Generate Token」をクリック -> 「Data Source ID」が自動補完される
3. 「Data Source」の選択肢から「REST API」を選ぶ
4. 「End Point URL」にAPIのURL https://aed.azure-mobile.net/api/aedgroup/ を入力
5. 「Validate」をクリック
6. 正常にValidateが終了したら「Open JDesigner」というボタンが表示される

![JSON設定.gif](https://qiita-image-store.s3.amazonaws.com/0/116818/9e7389bf-f40d-b678-365a-41a56b9abbf4.gif "JSON設定.gif")

### JPath Designerでカラムを編集
Jpath Designerが起動し、JSONデータが読み込まれます。

データを見ながら個別にカラムを追加していけばいいのですが、ちまちま入力するのも面倒なので、とりあえず「Add all keys」をクリックしてから不要なカラムを削除するのがいいでしょう。
カラム名や型はYellowfinレポートでの用途に合わせて適宜編集してください。

編集できたら「Download」をクリックし、表示されるポップアップでは「save to designer」を選択します。
無事保存できたら「Close」でポップアップを閉じ、JPath Designerのウィンドウ[^1]も閉じます。

[^1]: 記事ではJPath Designerに統一していますが、実際の画面ではJSON Path Builderと書かれていたり、YF Jpath Generatorだったり、バラバラですね…

![JPathDesigner.gif](https://qiita-image-store.s3.amazonaws.com/0/116818/46349e9a-4dbd-2fc4-9924-91b7cc6d94ef.gif "JPathDesigner.gif")

### JPathのインポート＆ビュー作成
「新規接続」のウィンドウに戻って「Import Jpath」をクリック。そして「ビュー作成」をクリックすれば、あとはいつもどおりです。テーブルは「JSON DATA」を選択し、適当なビューの名前を付けましょう。

これでJSONデータソースを使ったYellowfinのレポートが作れますね！

![レポート.png](https://qiita-image-store.s3.amazonaws.com/0/116818/85b25a74-471a-797c-701a-9a0a81dc6897.png "レポート.png")

# まとめ
YellowfinではノンプログラミングでJSONをデータソースに使ったデータ分析ができます。

今回の例は非常に単純な構造のデータだったため、JPath Designerでの編集はほとんど行いませんでしたが、複雑なデータの場合はもう少しゴニョゴニョする必要があります。そのあたりはまた次回以降に…


# 参考
[JSON Connector - BASIC - Lesson 1 - URL Source Selection](https://www.youtube.com/watch?v=lQVTQ-RYJ3c)
[Yellowfin 7.3+: JSON connectivity has arrived](https://www.yellowfinbi.com/blog/2017/05/yellowfin-7-3-json-connectivity-has-arrived)
pickadate.jsで年をプルダウンで変更できるようにしてもMAX11年の範囲でしか選べないので選べるようにする

以下のように現在日の３０年先まで選べるように指定しても....

```javascript
$('.datepicker').pickadate({
  max: moment().add(30,'year').toDate(), // 30年先
  selectYears: true
});
```
現在の選択年のプラマイ５年の範囲でしか選択できない...

<img width="775" alt="スクリーンショット 2017-06-07 15.48.02.png" src="https://qiita-image-store.s3.amazonaws.com/0/15637/c548f4c9-43c8-6330-eea1-b409aa4d5658.png">

pickadateのコード調べたところ、以下箇所で制限してる
https://github.com/amsul/pickadate.js/blob/0d87d916a5d56284aa4b0d7fc9e725db1ea4bf72/lib/picker.date.js#L1091-L1132

単純な方法として、以下のように修正すると指定したmax日が上限になり、プルダウンの選択肢も省略されない
https://github.com/amsul/pickadate.js/blob/0d87d916a5d56284aa4b0d7fc9e725db1ea4bf72/lib/picker.date.js#L1130

```diff
- max: highestYear,
+ max: maxYear,
```

もしくは現在選択されてる日に対し前後5年の制限を設けてるようなので、これを20年とか大きい値にしても解決できる
https://github.com/amsul/pickadate.js/blob/0d87d916a5d56284aa4b0d7fc9e725db1ea4bf72/lib/picker.date.js#L1097

```diff
- numberYears = settings.selectYears === true ? 5 : ~~( settings.selectYears / 2 )
+ numberYears = settings.selectYears === true ? 20 : ~~( settings.selectYears / 2 )
```
<img width="730" alt="スクリーンショット 2017-06-07 15.56.25.png" src="https://qiita-image-store.s3.amazonaws.com/0/15637/1ac9340b-2c47-813d-8339-372f7b42357b.png">
NetCDF > Fortran90サンプル実行 > nf90_def_var()に関連して

```txt:動作環境
Xeon E5-2620 v4 (8コア) x 2
32GB RAM
CentOS 6.8 (64bit)
openmpi-1.8.x86_64 とその-devel
mpich.x86_64 3.1-5.el6とその-devel
gcc version 4.9.2 (とgfortran): Software Collections (SCL) で有効にした状態
NCAR Command Language Version 6.3.0
Python 2.6.6 (r266:84292, Aug 18 2016, 15:13:37) 
Python 3.6.0 on virtualenv
```

WRF(Weather Research and Forecasting Model)に関して。

[WRF > CentOS 6.8 > setup with GFortran v4.9.2 > NetCDF v4.4.1.1 / NetCDF (Fortran API) v4.4.4 > netcdf.mod](http://qiita.com/7of9/items/c58db1b8ece4d915e402)にてNetCDFをインストールした状態。


NetCDF Fortran 90 APIを使った例として以下を取得。
http://www.unidata.ucar.edu/software/netcdf/examples/programs/simple_xy_wr.f90

```
$gfortran  simple_xy_wr.f90 -I/usr/local/netcdf-4.4.1.1/gcc492/include -lnetcdff
```

```
$ ./a.out 
 *** SUCCESS writing example file simple_xy.nc!
```

問題なく実行できた。

別のソフトウェアで以下のエラーが出ている。コンパイルオプションのミスかもしれない。

```
Error: There is no specific function for the generic 'nf90_def_var' at (1)
```

`-DNETCDF4_OUTPUT`がエラーの原因のようだ。

nf90_def_var()自体は利用可能であるが、NETCDF4_OUTPUTマクロ定義時のnf90_def_var()使用に関して問題があることはわかった。
Bootstrap まとめ（自分用）

##Mobile first
モバイルファースト。

```
<meta name="viewport" content="width=device-width, initial-scale=1">
```
レンダリングとタッチのズームを適切に行う

```
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
```
モバイルデバイスのズーム機能を無効にすることができる。ただ、Bootstrapはこれを推奨していない。

##Containers
.containerは固定幅。.container-fluidはビューポート幅全体。

```
<div class="container">
</div>
```

```
<div class="container-fluid">
</div>
```

##Media queries
ちょっと考える。モバイルファーストの書き方にしておきたい。
768px以下とそれ以外という別けかたのみでいいきがしてる。

```CSS:media-query.css
@media screen and (min-width:769px) {
}

@media screen and (max-width:768px) {
}
```

```
aaa
```

```
aaa
```

##Column
```
aaa
```

```
aaa
```
###Columnの順番
```
.col-md-pull-*
.col-md-push-*
```
Columnのみ。以下のようなケースは使えない。

```
.col-md-12.col-md-pull-12
.col-md-12.col-md-push-12

```

##見出し
```
aaa
```

```
aaa
```

```
aaa
```

##見出し
```
aaa
```

```
aaa
```

```
aaa
```

##見出し
```
aaa
```

```
aaa
```

```
aaa
```
SaaSForceをリセットする方法

![wfc20161109069.JPG](https://qiita-image-store.s3.amazonaws.com/0/184885/1ad99641-6922-7979-ac93-29e97040d264.jpeg)

SaaSForceは、いろいろなことが可能ですが、逆にいろいろやりすぎてうまく動かなくなることがあります。

結論から言うと、設定をいじりすぎることによる失敗に起因するようですが、他にもうまく使えなくなる原因があるかもしれません。

余談ですが、無料で使う場合は作成できるアプリ数の上限が決まっていて、それに関してはメッセージが出るから、アプリの数を減らせば新しい物を作れます。

しかし、原因を探すのも時間がかかるし、アプリで重要な物は特にないというケースなら、全てをリセットするのがお勧めです。

ここだけの話ですが、アプリを作り直しても特に時間はかからないと思います。


さて、画面の左側に並ぶ｢システム｣のなかから｢システム設定｣を選びます。

![wfc20161109070.JPG](https://qiita-image-store.s3.amazonaws.com/0/184885/474a5e5a-e8f9-6ba4-69ee-871e6ddf30d8.jpeg)

そうすると、画面の下のほうで｢システムクリア｣と言うボタンが見つかります。

そこを押すとこのような画面になります。


![wfc20161109072.JPG](https://qiita-image-store.s3.amazonaws.com/0/184885/e9e74f34-539b-9317-bbee-5368cc062eec.jpeg)

先ほどと違って、黒いボタンで白抜きの｢システムクリア｣と言うボタンが出てきます。

これをクリックして、画面の上でポップアップしてくる小さな画面で「OK」を押すだけです。

![wfc20161109073.JPG](https://qiita-image-store.s3.amazonaws.com/0/184885/d86c6176-de5a-caf6-70dc-67974fb196b2.jpeg)

これでシステムを初期化できます。

また、最初から作り直しになりますが、それでも前回よりいいアプリを作ればいいやと割り切れる方にお勧めです。
Azure Powershellユーザ向けAzure CLI 2.0コマンド対応表

#はじめに
[Azure Cloud Shell](https://docs.microsoft.com/ja-jp/azure/cloud-shell/overview)が登場して、Azureポータルから気軽にshellコマンドが叩ける用になりました。
本記事執筆時点(2017/06/07)では、まだPreviewとなっており使えるShellはBashとなっています。

こちらのBashですが標準でAzure CLI 2.0がインストール済みなのですぐにazコマンドが利用可能です(Azure CLI Interactive Modeも利用可能!)

自身もAzureポータル以外ではAzure Powershellを使って仮想マシンのデプロイ等を行っているのですが、私がよく使うAzure PowershellのコマンドとAzure CLI 2.0のコマンド対応表を作ったので公開します。

#対応表
以下の通りです。

|コマンド内容|Azure Powershell|Azure CLI 2.0|
|:---|:---|:---|
|ログイン|Add-AzureRmAccount(Login-AzureRmAccount)|az login|
|サブスクリプション一覧|Get-AzureRmSubscription|az account list -o table|
|サブスクリプション選択|Select-AzureRmSubscription -Subsctiption-Id XXXXXXXX|az account set --subscription XXXXXXXX|
|VM一覧|Get-AzureRmVM|az vm list -o table|
|VM停止|Stop-AzureRmVM -ResourceGroupName \<RGNAME\> -Name \<VMNAME\>|az vm stop --resource-group \<RGNAME\> --name \<VMNAME\>|
|リソースグループ一覧|Get-AzureRmResourceGroup|az group list -o table|
|リソースグループ作成|New-AzureRmResourceGroup -Name \<RGNAME\> -Location \<REGION\>|az group create --name \<RGNAME\> -location \<REGION\>|
|テンプレートファイルからのデプロイ|New-AzureRmResourceGroupDeployment -TemplateParameterFile \<PARAMETER.json\> -TemplateFile \<TEMPLATE.json\> -ResourceGroupName \<RGNAME\>|az group deployment create --parameters @\<PARAMETER.json\> --template-file \<TEMPLATE.json\> --resource-group \<RGNAME\>|

#おわりに
とりあえずJSONテンプレート自作派の方であれば上記コマンドでなんとかなるのでは。
適宜一覧は更新していきます。
部品を貼り付け楽々てシステム開発？SaaSForceを使い始める前の注意点

![wfc20161109063.JPG](https://qiita-image-store.s3.amazonaws.com/0/184885/5a1b02ad-c069-4c88-7acc-c26fafd76971.jpeg)

SaaSForceは、アプリを開発する環境と実際にアプリを運用するサーバーでログインのためのIDとパスワードが違います。

開発環境のIDを使ってテストサーバーにログインしようとして、30分ほど無駄にした経験から、皆さんはまず使い始める前に運用サーバーのIDの確認と、そのパスワードの設定を先に済ませておくことをお勧めします。

![wfc20161109064.JPG](https://qiita-image-store.s3.amazonaws.com/0/184885/babbdc2c-c94c-a1ce-5285-1991d91d48d9.jpeg)

開発環境に間zぅログインをしていただいたら、左側にいろいろな機能が並んでいるところの「ユーザーとグループ｣をクリックしてください。

![wfc20161109065.JPG](https://qiita-image-store.s3.amazonaws.com/0/184885/65d4aec0-e37f-f223-9c85-7fe224704a9e.jpeg)

そうするとこのような画像になるのですが、ユーザー名がはじめの段階でも既に3つ並んでいます。

さらに、｢編集｣と言うオレンジ色のアイコンをクリックすると、このような画面に切り変わります。

![wfc20161109066.JPG](https://qiita-image-store.s3.amazonaws.com/0/184885/05612a75-22ca-baa1-1047-069e44dcc364.jpeg)

そして、パスワードを設定する場合、初回でもパスワード変更をクリックします。

![wfc20161109067.JPG](https://qiita-image-store.s3.amazonaws.com/0/184885/4172332c-c26a-e6f4-7a3a-180810dfa967.jpeg)

このような画面が出て、新しくパスワードを設定できます。

古いパスワードが不要なので、たとえ忘れてしまっても全く問題がないのがやや便利です。