OmniAICreator/Qiita-1.07M huggingface dataset:
OGPタグ設定したのに、画像が表示されないよ！って人の応急処置

今回はSNSのシェアなどで使用するOGPタグを設定したはいいものの画像が表示されないこともしばしばあります。
もう画像の大きさとかだと何も言えないのですが、OGPの設定タグの見直しと各デバッグツールについてお話しします。

```
<!--facebook & その他SNSの設定-->
<meta property="og:title" content="サンプルサイト">
<meta property="og:type" content="article（投稿時のタイプ）">
<meta property="og:description" content="ここには説明文が入ります。">
<meta property="og:url" content="サイトのURL">
<meta property="og:image" content="画像のパスを載せてください。（絶対パス推奨）">
<meta property="og:site_name" content="サイトの名前">

<!--twitterの設定-->
<meta name="twitter:card" content="summary(Twitterカードのタイプを入力してください)">
<meta name="twitter:site" content="サイトのURL">
<meta name="twitter:image" content="画像のパスを載せてください。（絶対パス推奨）" />
<meta name="twitter:title" content="サイトの名前">
<meta name="twitter:description" content="Twitter用の説明文が入ります。">

```

基本的はここまで載せれば、FacebookやTwitterなどでシェアすることが可能ですが
画像が表示されないことが多々あるのです。。。

そういうときのためのデバッグツールで、あなたのサイトやシェアするときのツイートや投稿を華やかにしましょう！

**Facebook OGP debug tool**
https://developers.facebook.com/tools/debug
（要ログイン）

・URLを入力してデバッグをクリックすれば何とかなります(雑
（前の英語バンバンデバッガーより簡単になってるかと思います。）


**Twitter Card Validater**
https://cards-dev.twitter.com/validator

・サイトのURLを入力し、正しくTwitterが読み込めているか確認できます。
画像が表示されない場合、画像のパスに問題あり or セキュリティの設定などで外部からの(Twitterなど)アクセスを弾いている。


LINEなどもFacebookのデバッガーで対応できるかと思います。
これで対処できなければ、

・画像パスを絶対パスにしてみる。
・サーバーや、サイトの制作時に外部からの干渉を拒否する設定を入れてないか。
（サーバーの中身・imagesフォルダの中身を見られなくなるため）


こちらを確認してもらって、あなたのサイトや誰かの素敵なサイトの拡散に役立てましょう(*´ω｀*)
（ソースで設定してないときはドンマイです。）
CFアプリ開発と管理#20 Cloud Foundry APIのエンドポイントとバージョンの特定

Cloud FoundryインスタンスのAPIエンドポイントまたはターゲットURLは、Cloud ControllerのURLです。 このトピックでは、コマンドラインからCloud Endpoint APIを使用してAPIエンドポイントを見つける方法について説明します。 クラウドオペレーターに相談して、この情報を調べることもできます。

*注意事項: この記事は、Cloud Foundry Documentaion [Identifying your Cloud Foundry API Endpoint and Version](https://docs.cloudfoundry.org/running/cf-api-endpoint.html) (last updated: July 11, 2016) からの独自の翻訳とコメントです。内容を保証するものではありません。*


コマンドラインから[cf api](http://cli.cloudfoundry.org/ja-JP/cf/api.html)コマンドを使用して、APIエンドポイントとCloud Controller API（CC API）のバージョン番号を表示します。

~~~
$ cf api
API endpoint: https://api.example.com (API version: 2.55.0)
~~~


*Bluemix CLIコマンドで、bx のサブコマンドとして利用するケースについて、以下に補足します。*

Bluemixでは、単純にbxを付与しても、次の様に失敗します。

~~~
$ bx cf api
失敗
'bx api' を使用して、ターゲットの API エンドポイントを設定または表示します。
~~~

エラーメッセージに案内されている`bx api` を実行すると`cf api`と同等の応答を得ることができます。 

~~~
$ bx api
API endpoint: https://api.ng.bluemix.net (CF API version: 2.75.0)
~~~
anyenvに移行しました

# 概要
最近はDockerというすごく便利なものに環境を閉じ込めちゃうぅぅんですが、プロジェクトによってはDockerがどこにもないプロジェクトもあるのです
そういうプロジェクトではRubyとかGoやらのバージョンを切り替えるのが面倒（`homebrew clean`した時に昔のバージョンは消え去る）なので~envを導入しました
phpenvは他の~envと競合してしまいうまく動作しなかったりするので[anyenv](https://github.com/riywo/anyenv)を導入することにしました
> This is a simple wrapper for rbenv style environment managers. You don't have to git clone or modify your shell profile for each **env anymore if you install anyenv.

うんわかりやすい！！

ついでにnodebrewを捨ててndenvに移行することにしました
（nodebrewに恨みは）ないです

# 方法
```bash
git clone https://github.com/riywo/anyenv ~/.anyenv
exec $SHELL -l
anyenv install goenv
anyenv install rbenv
anyenv install pyenv
anyenv install phpenv
anyenv install ndenv

# ここから先はお好みで入れるんだ！！
[ ! -d $(pyenv root)/plugins/pyenv-virtualenv ] && git clone https://github.com/yyuu/pyenv-virtualenv $(pyenv root)/plugins/pyenv-virtualenv
[ ! -d $(rbenv root)/plugins/rbenv-default-gems ] && git clone -q https://github.com/rbenv/rbenv-default-gems.git $(rbenv root)/plugins/rbenv-default-gems
```

`rbenv root`は`~/.anyenv/envs/rbenv`を展開した場所になります

# 設定
```zsh:.zshrc
export PATH=$HOME/.anyenv/bin:$PATH
eval "$(anyenv init - --no-rehash)"
```

たったこれだけです
`--no-rehash`付けておかないとenv系全てでrehashを実行されてshellを立ち上げるたびに２、３秒待たされる羽目になるので絶対つけるんだぞ（１敗）

# ところでフォントはお好きですか？
Cicaフォントという日本語合成フォントを最近知って、使ってみるとすごくみやすく可愛らしいのでオススメさせてください
見た目はこちらのリンクから[Cica](https://github.com/miiton/Cica)スクリーンショットを確認してね

Mac OS Xでhomebrew使っているなら下のスクリプトでダウンロードできます

```bash
brew install fontforge unar
git clone --recursive git@github.com:miiton/Cica.git
cd Cica
wget http://font.ubuntu.com/download/ubuntu-font-family-0.83.zip
unar ubuntu-font-family-0.83.zip
cp ubuntu-font-family-0.83/UbuntuMono-R.ttf ./sourceFonts
wget https://osdn.jp/downloads/users/8/8598/rounded-mgenplus-20150602.7z
unar rounded-mgenplus-20150602.7z
cp rounded-mgenplus-20150602/rounded-mgenplus-1m-regular.ttf ./sourceFonts
cp rounded-mgenplus-20150602/rounded-mgenplus-1m-bold.ttf ./sourceFonts
wget https://github.com/konpa/devicon/raw/master/fonts/devicon.ttf -O ./sourceFonts/devicon.ttf
wget https://github.com/googlei18n/noto-emoji/raw/master/fonts/NotoEmoji-Regular.ttf -O sourceFonts/NotoEmoji-Regular.ttf
mkdir tmp
mkdir Cica
./cica_generator.sh auto
cp -f Cica/Cica*.ttf ${HOME}/Library/Fonts/
fc-cache -vf
cd ..
rm -rf Cica
```
最近の私のrailsプロジェクトでの.envrc 4行ファイル

```bash:.envrc
PATH_add ./bin
PATH_add ./vendor/bundle/bin
#とりあえず
export DISABLE_SPRING=1
```

最近は全てのrailsプロジェクトの下にこれ置いてる。 springが嫌いなわけではないけど。

AWS系の秘匿値は、 `~/.aws/credentials` とかを利用することが多くなったので、.envrcに書くことは少なくなった。

前は [.envrcの中にdotenvと書くと.envファイルが読める]( http://doloopwhile.hatenablog.com/entry/2015/05/26/001545)みたいなこををしてたときもあったけど、それもやらなくなってしまった。
flag の使い方

コマンドライン引数に使える標準ライブラリの [flag](https://golang.org/pkg/flag/) をちょいと試してみた。

前に使った [viper](https://github.com/TsuyoshiUshio/cf-engine/blob/master/src/cf-engine/main.go)よりシンプルっぽい。

例によって、今日も自分のためのブログであり、ヤクの毛狩りの途中なのです。

# flag の使い方


Go はコマンドラインツールを書くには最高の言語ですが、実行時のパラメータ引数をよしなに行ってくれるライブラリが `flag` です。

```go
package main

import (
	"flag"
	"fmt"
)

func main() {
	var name = flag.String("name", "Ushio", "please specify -name flag")
	flag.Parse()
	fmt.Println("The name flag is ", *name)
}
```
ポイントはものすごく簡単で、`flag.String` とか、`flag.Int`などのメソッドで、パースしたいパラメーターを指定して、`Parse`を実行したらパースして、変数に入れてくれると言う具合です。デフォルト値や、マニュアルにも対応しています。

```
$ go run spike.go -name Yamada
The name flag is  Yamada
$ go run spike.go -name=Yamada
The name flag is  Yamada
$ go run spike.go
The name flag is  Ushio
```
ちなみに、簡易的なマニュアルにもなっています。コンパイルしていないので、表示があれですが。結構これだけで感じのいいことができそう。

```
$ go run spike.go --help
Usage of /var/folders/mj/yr9zy_sd503_g3f_mwfwr98h0000gn/T/go-build817669832/command-line-arguments/_obj/exe/spike:
  -name string
    	please specify -name flag (default "Ushio")
exit status 2
```

ちなみに、ちょっとした違う書き方としてこんな書き方もできます。

```go
var num int
flag.IntVar(&num, "num", 100, "Please specify -num flag")
flag.Parse()
fmt.Println("The num is ", num)
```

# サブコマンド

Go を使ったコマンドラインプログラムでは、よくサブコマンドが出てきますが、これも簡単にかけます。

```go
flags := flag.NewFlagSet("sub", flag.ContinueOnError)
file := flags.String("f", "", "path to file")

flags.Parse(os.Args[2:])
fmt.Println("file ", *file)
```

こちらを実行するとこんな感じ。`os.Args[2:]` でスライスの指定をしているので、第二引数以降しか、フラグはパースしていません。サブコマンドがある上での、パラメータになっています。

```
$ go run spike.go -f filename
file  
$ go run spike.go sub -f filename
file  filename
```
いい感じですね。ちなみに、私の書いたコードでこれがよくててきたのは、Cloud Foundry のプラグインを書いたコードでした。

* [rollback.go](https://github.com/sakkuru/rollback-push/blob/master/rollback.go)

まだまだ先は長いので、次いきます。
Google Cloud Translation APIの認証優先順位まとめ

# はじめに
Google Cloud Translation APIを、
Cloud Translate APIクライアントライブラリ使ったときに、
認証周りでめっちゃハマったので忘れないようにまとめておきます。

# Google Cloud Translation API
https://cloud.google.com/translate/?hl=ja

# 結論
最初に結論を書きます。
以下の順番で強いです。

* コードからAPIキーや、サービス認証用のJSONファイルを指定する
* アプリが載っているPC、サーバでgcloud auth loginする
* アプリケーションのデフォルト認証情報をアプリが載っているPC、サーバの環境変数に設定しておく

# 何が起きたのか
検証時にバリバリ動いていた翻訳APIを使用するアプリが、突然全く動かなくなった。
エラーログを見ると以下のエラーを吐いている。

```text:log
  "error": {
    "code": 403,
    "message": "Daily Limit Exceeded",
    "errors": [
      {
        "message": "Daily Limit Exceeded",
        "domain": "usageLimits",
        "reason": "dailyLimitExceeded"
      }
    ]
  }
}
```
このログの意味自体は、読んで字の如しで１日に使用できる上限超えてるってことです。

# 403：Daily Limit Exceededの発生条件
よくある質問でも紹介されていて、これ自体はよくあることのようです。
https://cloud.google.com/translate/faq?hl=ja
以下の条件を確認せよ、と書いてあります。

* API利用プロジェクトに、クレジットカード情報が登録してあること
* APIをちゃんと有効にしているか
* 本当に閾値超えてないか

残念ながら上記には該当していないと判断しドハマりすることに・・・

# 何が原因で起きていたのか
タイトルの通りで、自分が使用していると思っていた認証情報と異なっていた。

## どう違ったか
検証時は、デフォルト認証情報でアプリを動かしまくっており、
プロダクトコードもその部分は一旦そのまま移植してたので、当然デフォルト認証情報を使っていると勝手に期待してました。
※検証時はクイックスタートのやり方通りに動かして、そこで終わらせた。

何故すぐに気づかなかったかというと、アプリを作ってたときはエラーが起きなかったからです。
別の機能作るときに、翻訳これ使お～って思ってぶっ叩いたら、突然エラーになって「ふぁっ！？」ってなった次第です。

## 何が起きていた？
よ～くデバッグしていくと、認証情報の種別が、「authorized_user」とかなってた。
つまり、デフォルト認証情報が使われなくなってしまっていたということです。

そういえば、gcloudで遊ぶために自分のGoogleアカウント紐づけて確かにloginしたな～という記憶が・・・
しかもクレジットカード登録してないし。

## どうやって解決したのか
Cloud Translate APIクライアントライブラリで直接APIキーや、サービス認証用のJSONファイルを指定できるのでそうすることに。
（もうね、最初からPHPDocちゃんと見とけよボケナス！っていうレベルのちょんぼです。）

APIキーの方がインフラ的にも使いやすいので、こっちを採用しました。
コードにするとこんな感じです。
TranslateClientにkeyが無かったので付けました。

```php:example.php(on-laravel)
$translate = new TranslateClient([
    'projectId' => 'xxxxxxx',
    'key' => env('GOOGLE_API_KEY')
]);
$result = $translate->translate('I am playing Dragon Quest 11 ', [
    'source' => 'en',
    'target' => 'ja',
]);
```

# まとめ
Google Cloud Translation APIの認証順は、
* コードからAPIキーや、サービス認証用のJSONファイルを指定する
* アプリが載っているPC、サーバでgcloud auth loginする
* アプリケーションのデフォルト認証情報をアプリが載っているPC、サーバの環境変数に設定しておく

Stackoverflowに質問出したけど、誰からも回答もらえず、そりゃこんな原因だったら、誰も判らんわな～という感じしかしなかった。
（質問の仕方も悪かった）
https://stackoverflow.com/questions/45429155/used-google-cloud-translation-api-when-return-response-403-daily-limit-exceeded?stw=2

皆様が利用するときにこの症状が出たときには、認証情報が意図したものをしっかり使えているかも確認してあげてください。
Angular2(Angular4)　＞　子コンポーネントをViewChildenで取得して操作する

こんにちわ、初投稿です。
最近Angular4でアプリ開発を行なっているのですが、日本語のドキュメントが（総量も）少なくて困ることがあるので、ちょっとしたAPIの使用方法を備忘録的に書いていこうと思います。

## ViewChildrenで任意の子要素を操作する

 *ViewChild*なら子要素が一個だけど、*ViewChildren*は子要素がリストで取得できるので、所望の要素をどうやって抽出するべきか悩みました。でも、親コンポーネントが複数の子コンポーネントのインスタンスを持っていて、任意の子を操作したいことってありますよね。

##### まずViewChildrenの型は以下の通り
```
@ViewChildren ( {Compornent名} ) children: QueryList<{Component名}>
```
childrenの型はQueryListなんですね。なので、QueryListのAPIリファレンスを参照すればよかった。

## 結論
こんな感じに書くと特定の子コンポーネントのメソッドを実行できます。

```ts
// 子コンポーネント
export class ChildComponent{
  public id; // unique
  public hoge = function { ... };
}

// 親コンポーネント
export class ParentComponent{
  private activeComponentId = 1; // 任意の値
  @ViewChildren (ChildComponent) childComponents: QueryList<ChildrenComponent>;

  var hoge = () => {
    this.childComponents.find((component) => {
      return component.id === this.activeComponentId;
    }).hoge();
  }
}
```
記述テスト

# 足し算

$2 + 3 = 5  $
$3 + 15 = 18 $


# 掛け算& 割り算
$5 \times 3 = 15$
$15 \div 5 = 3$

## その他
$\lim_{a \to \infty}x_d^{a}=\frac{5}{3}$
blender入門 個人的に探すに手間取った機能まとめ


## エディタを日本語化

* 下記キャプチャを参考に、 iマークに切り替え、ファイル > ユーザー設定　

![image.png](https://qiita-image-store.s3.amazonaws.com/0/37406/d4251546-5c96-e16c-6fab-dbfb933d385c.png)

* システムタブを選択し、ローカライズにチェックを入れる
* そして、日本語を選択
* で、翻訳対象のメニューを選択（インターフェース等）

![image.png](https://qiita-image-store.s3.amazonaws.com/0/37406/585f95bd-d81a-d714-d049-dd77f25d68d5.png)





## 原点(origin/pivotピボット/anchorアンカー）の位置を変更する

* 3Dカーソルで、原点にしたい位置を指定。
* ツールメニューで、 原点を設定　> 原点を３Dカーソルへ移動 

![image.png](https://qiita-image-store.s3.amazonaws.com/0/37406/9622505d-322a-fc37-3f83-477e077e5e3b.png)
Laravelでartisan使ってPHPUnitを実行する

# 経緯

Laravel使ったAPIサーバーを立てていて、いつもPHPUnitの実行コマンド忘れてたのでartisanコマンドに登録しようと思い作ってみました。

# 前提

Laravel5.4

# 作ってみる

1. コマンドを作成する

    ```shell:shell
    $ php artisan make:command PhpUnit
    ```

    こんな感じで出来上がります。

    ```
    app/
    ├── Console
    │   ├── Commands
    │   │   └── PhpUnit.php
    ```

2. PhpUnit.phpに実行するコマンドを実装する

    ```php:app/Console/Commands/PhpUnit.php
<?php

    namespace App\Console\Commands;

    use Illuminate\Console\Command;

    class PhpUnit extends Command
    {
        /**
         * The name and signature of the console command.
         *
         * @var string
         */
        protected $signature = 'test {file_name?}';

        /**
         * The console command description.
         *
         * @var string
         */
        protected $description = 'phpunitを実行する.ファイルを指定する場合は引数にファイル名を指定する';

        /**
         * Execute the console command.
         *
         * @return mixed
         */
        public function handle()
        {
            $this->info(shell_exec("vendor/bin/phpunit " . $this->argument('file_name')));
        }
    }
    ```

    私は全実行かファイル名指定でしか実行しないのでファイル名指定だけ追加していますが、他のオプションも使われる方はその他オプション分も実装が必要です。

3. Kernel.phpに追加する

    ```php:app/Console/Kernel.php
    protected $commands = [
        Commands\PhpUnit::class
    ];
    ```

4. 実行する

    ```shell:shell
    // 全実行
    $ php artisan test
    // ファイル名指定
    $ php artisan test tests/Unit/SampleTest.php
    ```

    いつもと同様に実行結果が出力されます。
    
    ```
    $ php artisan test tests/Unit/SampleTest.php
    PHPUnit 5.7.19 by Sebastian Bergmann and contributors.

        .                                                                   1 / 1 (100%)

    Time: 2.84 seconds, Memory: 16.00MB

    OK (1 test, 2 assertions)

    Generating code coverage report in Clover XML format ... done

    Generating code coverage report in HTML format ... done
    ```

# さいごに

コマンド忘れても `php artisan list` ですぐに見れるのでよく使うコマンドは全部artisanコマンドに統合していきたいなと思いました。
【手順読まない人向け】Android Studioが初回起動できない話

#はじめに
タイトル通り、手順を読まずにAndroid Studioをインストールして初めて起動した際にちょっとハマったことです。
逆にいうと、ちゃんと手順を踏んでやってたら、こんなことに出会わなかったでしょう。
ただ、手順の長さに耐えきれずとにかく着手するのは自分だけじゃないですよね w)
そもそも適切な手順書がどこにあるのでしょうね。

ので、手順を読みたい方には下記ページへジャンプしてください。
[良さげな手順書]
http://qiita.com/k_moto/items/cefb4bca13f6a99b2ea2
※OS:  windows 10

#本題
##事象##
10年ほど前に買ったPC（vista→7→10）にAndroid Stuido2.3.3をインストールしたが、
Android Stuidoのアイコンにクリックしたら、起動画面が表示されず、と言うよりエラー画面も何も起きなかった。
[my環境]
- OS: windows 10 pro (32bit)
- RAM: 3.00GB
- Andorid Studio 2.3.3

##対策##
環境変数「**JAVA_HOME**」を設定する。ただそれだけ。PC再起動不要。
※tips: 「windowsキー＋PauseBreakキー」でシステム画面を開ける
※JAVA_HOMEって何という方ははじめに貼った手順書を参照してください。

設定後にAndroid Stuidoのアイコンをクリックすると、起動画面が表示されるぞ！

#余談#
AndroidアプリもAndroidStudioもJavaベースだから、JAVA_HOMEの環境変数なんて当たり過ぎて、
設定しない人を想定していないでしょうね。
たださあ、普通のソフトウェアって、環境変数とか前提条件をチェックしてくれますよね？
と思うと、2.3.3より古いバージョンで、起動用のbatファイルもあったみたいで、そこでチェックしていたみたいですね。
なぜ、バージョンアップしたら、そんなチェック機能を無くしたのでしょうね。
対策に辿り着くまで、システム要件に満たしてない？PC再起動必要？とか考えていましたね。

「**Android Studio 起動できない**」をキーワードでググってみると結構当たりましたが、
Android Studioのバージョンが異なるせいか事象や対策が違ったりしたので、あえて人気の高いQiitaに投稿することにしました。
RailsでBootstrapのスライドショーPartial

Rails用に[BootstrapのCarousel](http://getbootstrap.com/javascript/#carousel)のPartialを作成したのでメモ。
[RailsにBootstrapを導入する方法はこちらを参照。](https://railstutorial.jp/chapters/filling_in_the_layout?version=5.0#sec-custom_css)

<img width="1048" alt="スクリーンショット 2017-08-10 12.26.46.png" src="https://qiita-image-store.s3.amazonaws.com/0/107187/1984b51a-e89e-f469-7453-8640480ac515.png">

画像は_headerという接尾語をつけて区別する。
例 image1\_header.jpg

```html+erb:home.html.erb
<%= render 'shared/carousel', :suffix => '_header', :caption => "this is caption" %>
```

```html+erb:_carousel.html.erb
<% images = Dir.glob("app/assets/images/*#{suffix}*") %>
<% id = "carousel-images#{suffix}" %>
<div id=<%= id %> class="carousel slide" data-ride="carousel">
    <ol class="carousel-indicators">
        <% images.count.times do |index| %>
            <li data-target=<%= id %> data-slide-to=<%= index %> <%= 'class=active' if index == 0 %>></li>
        <% end %>
    </ol>
    <div class="carousel-inner" role="listbox">
        <% images.each_with_index do |image, index| %>
            <% classes = ['item'] %>
            <%= content_tag(:div, :class => (index == 0 ? classes << 'active' : classes)) do %>
                <%= image_tag(File.basename(image), :alt => 'header') %>
                <div class="carousel-caption">
                    <h3><%= caption %><h3>
                </div>
            <% end %>
        <% end %>
        <a class="left carousel-control" href=<%= "##{id}" %> role="button" data-slide="prev">
            <span class="glyphicon glyphicon-chevron-left" aria-hidden="true"></span>
            <span class="sr-only">Previous</span>
        </a>
        <a class="right carousel-control" href=<%= "##{id}" %>  role="button" data-slide="next">
            <span class="glyphicon glyphicon-chevron-right" aria-hidden="true"></span>
            <span class="sr-only">Next</span>
        </a>
    </div>
</div>
```
datatables検索結果をリセット

databtalesで検索結果をリセットしたい場合

```




            //検索データをリセットする
            $(document).on('click', '#search_reset', function() {
                table
                    .search( '' )
                    .columns().search( '' )
                    .draw();

            });





```

こんなあんばいでーす
Laravelでartisan使ってSwagger.jsonを出力する

# 経緯

Laravel使ったAPIサーバーを立てていて、ドキュメント化はSwagger使っているのですが、Swagger.jsonを吐き出すコマンドを毎回コピペしてていい加減発狂しそうだったのでartisanコマンド作ろうと思いました。

# 前提

Laravel5.4

# 作ってみる

1. コマンドを作成する

    ```shell:shell
    $ php artisan make:command SwaggerOutput
    ```

    こんな感じで出来上がります。

    ```
    app/
    ├── Console
    │   ├── Commands
    │   │   └── SwaggerOutput.php
    ```

2. SwaggerOutputに実行するコマンドを実装する

    ```php:app/Console/Commands/SwaggerOutPut.php
    <?php

    namespace App\Console\Commands;

    use Illuminate\Console\Command;

    class SwaggerOutput extends Command
    {
        /**
         * The name and signature of the console command.
         *
         * @var string
         */
        protected $signature = 'swagger:output';

        /**
         * The console command description.
         *
         * @var string
         */
        protected $description = 'vendor/bin/swagger app -o public/swagger を実行する';

        /**
         * swagger output
         *
         * @return mixed
         */
        public function handle()
        {
            $this->info(shell_exec("vendor/bin/swagger app -o public/swagger"));
        }
    }
    ```

    ※ `vendor/bin/swagger app -o public/swagger` はいつも使っているものに置き換えて下さい。

3. Kernel.phpに追加する

    ```php:app/Console/Kernel.php
    protected $commands = [
        Commands\SwaggerOutput::class
    ];
    ```

4. 実行する

    ```shell:shell
    $ php artisan swagger:output
    ```

    いつものコマンドと同様に実行結果が出力されます。
    
    ```
    Swagger-PHP 2.0.9
    -----------------
        get /api/test
       post /api/test
     delete /api/test
      patch /api/test
    ------------------------
    4 operations documented
    ------------------------
    Written to /var/www/html/public/swagger/swagger.json
    ```

# さいごに

コマンド忘れても `php artisan list` ですぐに見れるのでPHPUnitとかよく使うコマンドは全部artisanコマンドに統合していきたいなと思いました。
VL6180X(赤外線近接距離センサモジュール)をArduinoで複数個利用してみた

#できること
VL6180X(赤外線近接距離センサモジュール)をArduinoで複数個利用する

#きっかけ
自主製作でVL6180Xを複数個使う機会がありました。
VL6180Xは、I2C通信を用いるセンサーで1つだけなら比較的簡単に利用できます。しかし、複数個利用する場合にはアドレスを書き換えなければならず、そのやり方をまとめてある日本語記事が制作時点では見当たらなかったので、備忘録として残します。

#配線図
VL6180XとArduinoの配線図です。
![構成図.png](https://qiita-image-store.s3.amazonaws.com/0/159447/34263e37-9cf3-822d-7b9d-a04bf8f52d8f.png)

ArduinoとVL6180Xを以下のように対応させて繋げてください。

**VL6180X① - Arduino**
VDD - 接続先なし
VIN - 5V
SDA - SDA
SCL - SCL
GPIO0/CE - D4(デジタルピンのどれか、Leonardoの場合D2とD3は避ける)
GPIO01 - 接続先なし

**VL6180X② - Arduino**
VDD - 接続先なし
VIN - 5V
SDA - SDA
SCL - SCL
GPIO0/CE - D5(デジタルピンのどれか、Leonardoの場合D2とD3は避ける)
GPIO01 - 接続先なし

#プログラム(Arduino)
下記はVL6180Xを複数個動かすArduino側のプログラムです。

```arduino:distance.ino
#include <Wire.h>
#include <VL6180X.h>

#define XSHUT_PIN01 4
#define XSHUT_PIN02 5

VL6180X sensor01;
VL6180X sensor02;

void setup() 
{
  pinMode(XSHUT_PIN01, OUTPUT);
  pinMode(XSHUT_PIN02, OUTPUT);
  digitalWrite(XSHUT_PIN01, LOW);
  digitalWrite(XSHUT_PIN02, LOW);
  delay(50);
  
  Serial.begin(9600);
  Wire.begin();

  //1つ目のセンサーのアドレスの書き換え
  digitalWrite(XSHUT_PIN01, HIGH);
  delay(100);
  sensor01.init();
  sensor01.configureDefault();
  sensor01.setAddress(0x52);//好きなアドレスに設定

  //２つ目のセンサーのアドレスの書き換え
  digitalWrite(XSHUT_PIN02, HIGH);
  delay(100);
  sensor02.init();
  sensor02.configureDefault();
  sensor02.setAddress(0x56);//好きなアドレスに設定
  
}

void loop() 
{ 
  Serial.print("ONE = ");
  Serial.print(sensor01.readRangeSingle());
  Serial.print(", TWO = ");
  Serial.println(sensor02.readRangeSingle());
  delay(10);
}

```

#実際に制作したもの
些細な日常に魔法のような体験ができるものを制作しました。
テーブル表面の左右にVL6180X(赤外線近接距離センサモジュール)を仕込んであります。
また、コップを置いて手をかざすとかざした高さまで飲み物が下から注がれる機構になっています。
![名称未設定-2.png](https://qiita-image-store.s3.amazonaws.com/0/159447/24411ae4-85f5-4114-5d8d-a337f16e25c2.png)

制作物のコンセプトや実演動画等は下記のページに詳細があります。
http://uxted.com/spring/

#制作物の仕組み
磁気センサでコップの検知を行い、VL6180Xの近距離センサでかざした手の高さを取得しています。
手の高さに応じて、エアポンプモーターの動作時間を調整しコップに水を下から注ぎます。
![動作方法.png](https://qiita-image-store.s3.amazonaws.com/0/159447/492e83c6-ff01-5793-1832-3ce4af1bf0e8.png)

#最後に
VL6180X自体をArduinoで複数個を利用する方法は、やり方が分かれば意外に簡単に実装する事ができた。
CFアプリ開発と管理#17 アプリSSH概要


このトピックでは、Cloud FoundryデプロイメントのアプリケーションのSSH設定について紹介します。

アプリのインスタンスのトラブルシューティングが必要な場合は、SSHプロキシとデーモンを使用してアプリにSSHアクセスできます。たとえば、アプリインスタンスの1つが応答しないか、アプリからのログ出力が不一致または不完全な場合があります。 トラブルシューティングのために問題インスタンスを実行する個々のVMにSSHでアクセスできます。

*注意事項: このコンテンツは [Application SSH Overview](https://docs.cloudfoundry.org/devguide/deploy-apps/app-ssh-overview.html) (last updated: May 4, 2017) からの独自の翻訳とコメントです。内容を保証するものではありません。*


## SSHアクセス制御階層
オペレータ、スペース・マネージャー、および、スペース・デベロッパーは、以下の表に示すように、Cloud Foundry、スペース、およびアプリケーションのSSHアクセスを設定できます。

|User Role |SSHアクセス制御の範囲|　許可の設定法 |
|:--       |:--               |:--         |
|オペレータ |デプロイメント全体|SSHアクセスを許可または禁止するように展開を設定します（1回限り） 詳細は、「[Cloud FoundryのSSHアクセスの設定](https://docs.cloudfoundry.org/running/config-ssh.html)」を参照してください。|
|スペース管理者 |スペース	|cf CLI [allow-space-ssh](http://cli.cloudfoundry.org/en-US/cf/allow-space-ssh.html) and [disallow-space-ssh](http://cli.cloudfoundry.org/en-US/cf/disallow-space-ssh.html) commands|
|スペース開発者 |アプリケーション|cf CLI [enable-ssh](http://cli.cloudfoundry.org/en-US/cf/enable-ssh.html) and [disable-ssh](http://cli.cloudfoundry.org/en-US/cf/disable-ssh.html) commands|



アプリケーションは、オペレーター、スペースの管理者、およびスペースの開発者が、すべてそれぞれのレベルでSSHアクセスを許可する場合に限り、SSHアクセス可能です。 たとえば、次のイメージは配備状況を示しています。

* オペレータは、デプロイのレベルに、SSHアクセスを許可しました。
* スペースの管理者には、SSHアクセスをスペース "A"と "B"に許可して、"C"は禁止しました。
* スペースの開発者には、 アプリ "Foo"、"Bar"、"Baz"に、SSHアクセスを許可しました。

その結果、アプリ「Foo」、「Bar」、「Baz」はSSHリクエストを受け入れます。


![スクリーンショット 2017-08-10 11.08.21.png](https://qiita-image-store.s3.amazonaws.com/0/42829/6a7998c5-7999-e722-ed4e-30412b18be6c.png "スクリーンショット 2017-08-10 11.08.21.png")


## アプリケーションとスペースのためのSSHアクセス
スペース管理者とスペース開発者は、コマンドラインからSSHアクセスを設定することができます。 cf CLIには、SSHアクセス設定の値を返すコマンドも含まれています。 アプリケーションレベルとスペースレベルの両方でSSHを使用して設定するには、[Diego SSHを使用したアプリケーションへのアクセス](https://docs.cloudfoundry.org/devguide/deploy-apps/ssh-apps.html)のトピックを参照してください。


## Cloud Foundry用のSSHアクセスの構成
Cloud Foundryの導入により、Cloud FoundryレベルでのアプリケーションへのSSHアクセスが制御されます。 さらに、Cloud FoundryはSSHセッションのロードバランシングをサポートしています。 「[SSHアクセスの設定](https://docs.cloudfoundry.org/running/config-ssh.html)」では、デプロイメントにSSHアクセスを設定する方法について説明します。


## SSHアクセスの理解
SSHシステムコンポーネントにはSSHプロキシとデーモンが含まれており、システムは認証と着信SSHトラフィックのロードバランシングもサポートしています。 [Understanding SSH](https://docs.cloudfoundry.org/concepts/diego/ssh-conceptual.html)トピックでは、概念の概要を説明します。
在 Mac 透過 Homebrew 裝 PHP7 和 Composer

這一篇是安裝筆記

- macOS `10.12.5`, iTerm `3.0.15`
- 安裝後： PHP `7.1.8`, Composer `1.4.2`

## Homebrew

安裝方法可以看 [官網](https://brew.sh/) 的說明

## PHP

安裝指令：

```bash
brew install homebrew/php/php71
```

安裝成功之後，到 `~/.bash_profile` 裡面加上一行

```
export PATH="$(brew --prefix homebrew/php/php71)/bin:$PATH"
```

接著可以透過指令

```bash
php -v
```

確認安裝版本

## Composer

安裝指令：

```bash
brew install homebrew/php/composer
```

安裝完成之後，可以打

```bash
composer
```

送出，確認是否可以正常執行

## 參考

- [MacのPHP5をPHP7にbrewでアップデートする](http://qiita.com/yamatmoo/items/4ff2fe1785f771e67e08)
- [Macにhomebrewでcomposerをインストール](http://qiita.com/yamatmoo/items/b6d234f33929f07c43d4)
knockout.jpからjquery ajaxでasp.net mvcのActionメソッドへ引数を複数渡すのに困った

class ViewModel
{
    ID: number = 0;
    Display: string = null;
    TableName: string = null;
    Tensuu: number = 0;
    IsChecked: boolean = false;
}

がtypescript上にあり、

        public JsonResult SaveShoubyoumeiSelect(int ID,List<string> value)
        {
            var result = false;

            return Json(result, JsonRequestBehavior.AllowGet);
        }
が、サーバー上にある。


var postdata = ko.toJS(xxxList);
        var selectedID = $("#SELECTLIST").val();
     
        $.ajax(
            {
                type: "POST",
                url: "/ControllerName/ActionName",
                dataType: "json",
                contentType: 'application/json;utf-8',
                traditional: true,
                data: JSON.stringify({
                    ID: selectedID,
                    value: postdata
                }),
                
                timeout: 10000,
                success: function (data) { alert('OK'); },
                //error: function (error) { alert(error); },

            }
        );

postdataに ko.toJSにするのがキモ。
海外のサンプルなどでは、ko.toJSONが多いが、その場合はエラーになる。
Ruby on Rails5 アプリケーションプログラミングを読んで　まとめ (1)基本

# 環境構築
Docker上にcentOSで作成
参考記事は[これ](http://qiita.com/takaeda/items/956e2cda03d289fe4630)
（ruby_verは2.4.0に変えて実行、yum -y でnodejs sqlite,sqlite3を追加）
[github](https://github.com/agotoh/railsdev)にDockerfileはあげた

★Gemfileのcoffeerailsとuglifierはコメントアウトしないと動かなかった。

Dockerのコマンドは以下
- docekr コンテナの作成　`docker build -t gotoh/rails .`
- 起動(8080ポートで)`docker run -i -d -p 8080:3000 -v "${PWD}:/work" --name 'rails' gotoh/rails`
- コンテナの中に入る`docker exec -it rails /bin/bash`
- 起動しているコンテナの確認 `docker ps`
- 停止しているコンテナの確認 `docker ps -a`
- イメージの確認 `docker images`
- デタッチ（ログイン状態から抜ける) "control + P、Q"
- 再度アタッチ　`docker attach <CONTAINER IDまたはNAME>`
- コンテナの起動 `docker start <CONTAINER IDまたはNAME>`
- コンテナの停止 `docker stop <CONTAINER IDまたはNAME>`
- コンテナの削除 `docker rm <CONTAINER IDまたはNAME>`
- イメージの削除 `doker rmi <image ID>` 

# Ruby On Railsの基本
## アプリの作成
- railsのアプリ作成 ` rails new <appName>`
- 既に存在するアプリを読み込む `bundle install`
- pumaの起動 `rails s` or `rails server`

## コントローラーの基本
- railsコマンドでコントローラの作成 `rails generate controller <controller name>`
- rails destroyで削除 `rails destroy congroller <controller name>`
- routeの設定 config/routes.rbにルートを設定　詳細は[公式](http://guides.rubyonrails.org/routing.html)

## ビューの基本
- ビュー (erb)のみを作成するrailsコマンドはない
- コントローラー＆アクション名をrailsコマンドで指定してコントローラー＆ビューを自動生成できる。例

```bash:
# helloコントローラーのshow,indexを生成
rails generate congroller hello show index
```

共通レイアウトは /app/views/layouts/application.html.erb

## モデルの基本
- railsコマンドでモデルの作成 `rails generate model <model_name> <field_name>:<type>・・・`
- dbのmigrate `rails db:migrate`
- テストデータの流し込み `rails db:fixtures:load FIXTURES=<NAME>`

## 参考：データベースクライアント(sqlite)の起動、コマンド
●データベースクライアントの起動
> rails dbconsole

●テーブルの一覧を表
> .tables

●booksテーブルの構造を確認
> .schema books

●booksテーブルの内容を確認
> SELECT * FROM books;

●SQLiteクライアントを終了
> .quit

# Scaffolding機能によるアプリ開発

★ rails --help で使えるコマンド一覧は表示できる。

## 作成したbookモデルとdbの削除 rails destroy, rails db:drop

```bash:
rails destroy model book
rails db:drop DISABLE_DATABASE_ENVIRONMENT_CHECK=1
```

## Scaffolding機能によるアプリケーション作成 rails generate scaffold <name> <field>:type・・・
ex)

``` bash:
rails generate scaffold book isbn:string title:string price:integer publish:string published:date dl:boolean
```

- マイグレーションファイルを実行 `rails db:migrate`
- scaffolding機能により、routes.rbに自動で追加される。自動生成された
ルートを確認するのは `rails routes`
- フィクスチャのロードは `rails db:fixtures:load`
- 現在のテーブルレイアウト(schema.rb)でDBをリセット `rails db:reset DISABLE_DATABASE_ENVIRONMENT_CHECK=1

## アノテーション

```ruby:
# TODO:
# FIXME:
# OPTIMIZE:
```

でメモをコードに残す事ができる。
`rails notes` コマンドで表示できる。
Swift雑多メモ

ついにSwift、はじめてみた。ううぇー
当方の経験言語は、ActionScript3、C、C++、C#、JS。
2系と3系の谷にもがき苦しむ様をお楽しみ下さい。

# デリゲート
Swiftに限った話じゃないけど。
オブジェクト思考のためのデザインパターンのひとつ。

> 「あるクラスは、他のクラスのインスタンスに、処理を任せることができる。」というようなこと。

```swift:playground
// プロトコルを作る。
protocol Mochi {
    func sayHello() -> String
}

// 依頼人クラス
class Hoge {

    // ここで、プロトコルに従うクラスのインスタンスを用意する。
    var delegate: Mochi!
    func say() -> String {
        return delegate.sayHello()
    }
}

// 代理人クラス。クラスの後ろにプロトコルを書く。
class Piyo: Mochi {
    func sayHello() -> String {
        return "Hello, Piyopiyo"
    }
}

let hoge = Hoge()
let piyo = Piyo()
hoge.delegate = piyo    // 代理人を指定。
hoge.say()    // "Hello, Piyopiyo"
```

> Delegateを使う最大のメリットは、対象となるクラスが「何を委譲するか」をプロトコルとして定めることで、「誰に委譲するか」をまったく意識せずに設計できる点です。

[プロトコルとデリゲートのとても簡単なサンプルについて](http://qiita.com/mochizukikotaro/items/a5bc60d92aa2d6fe52ca)

# nil
~~nullのこと。~~

コメントより、
> 一般的に変数を定義した時に、値を入れる前はnullになるようになっているので、空の状態とみなせますが、どちらかと言うと、nilは「空である」という状態を表す値です。

変数にはなにかしら値がはいっている、ということか。
たしかにNullエラーとか、むなしいもんなぁ（遠い目）

# "!" と "?"
オプショナル型というものらしい。
その変数にnilが入る可能性がある場合は型の後ろに!か？をつける。

コメントより、
> `Int?` は `Optional<Int>` のシンタックスシュガーです。


[どこよりも分かりやすいSwiftの"?"と"!"](http://qiita.com/maiki055/items/b24378a3707bd35a31a8)
[SwiftのOptional型を極める](http://qiita.com/koher/items/c6f446bad54442a28bf4)
# UIColor
16進数で打ち込むときは以下のよう。

```swift:UIColor
UIColor(rgba: 0xFF00EEFF)
```

Xcode8から使えるようになったというColor Literalがかわいい。

[Swift3以降のUIColorの使い方](http://qiita.com/kentya6/items/18a458b4e32ebf324c66)

# Closure
無名関数。クロージャ。

[[Swift] Closureの書き方いろいろ](http://qiita.com/mokumoku/items/1c1f6f0a9afc5d82a2c0)

# as!
キャストには変わりないんだけど保険？がかけられるぽい。

> as:キャストが成功すると保証されるときに使用（アップキャストなど）
as!:強制ダウンキャストの際に使用
as?:ダウンキャストが成功するか分からない場合に使用(失敗すると戻り値はnil)

[Swift as!について](http://qiita.com/suisuina/items/f8639d1aee61fb0530b5)

# collectionViewからcollectionViewCellを参照

```swift
let cell = collectionView.cellForItem(at: indexPath) as! CalendarCell
```

# 関数へのアクセス
なにもつけないとinternal扱いになる

>public: 同じモジュール内だけでなく、別のモジュールからでもアクセスできる
internal: 同じモジュール内からのみアクセスできる
private: 同じソースファイル内からのみアクセスできる

[Swift 3からのアクセスコントロール](http://qiita.com/hironytic/items/6cc68ca93b428ba9194e)
ベクトル化されていない関数のベクトル化

タイトルのままです。

経緯
----

全角英数字と半角英数字が混在した文字列のベクトルがあって、全角から半角へと変換させる必要がありました。これには`Nippon`パッケージの`zen2han`関数が有名なのですが...

``` r
library(Nippon)
```

``` r
x <- c("１２３A111", "ほげＡａ")
zen2han(x)
 #> Warning in if (Encoding(s) != "UTF-8") s <- iconv(s, from = "", to =
 #> "UTF-8"): 条件が長さが 2 以上なので、最初の 1 つだけが使われます
 #> [1] "123A111ほげAa"
```

という感じで警告とともに値を返してはくれるのですが、この場合collapseしてしまいます。これをどうしたら効率的にできるかわからなかったので、r-wakalangで質問しました。

結果
----

あっという間にいくつかやり方を教えてもらいました。

### purrr::map\_chrを利用

`purrr::map_chr`を利用する方法を教えてもらいました:

``` r
library(purrr)
map_chr(x, zen2han)
 #> [1] "123A111" "ほげAa"
```

これが今話題のpurrrですね、求めていたものが出ました。purrrも早く勉強しないと。。。

### base::Vectorizeを利用

`base`に`Vectorize`関数があり、これを利用する方法を教えてもらいました:

``` r
Vectorize(zen2han)(x)
 #> １２３A111   ほげＡａ 
 #>  "123A111"   "ほげAa"
```

まさにベクトル化...!!

`base::Vectorize`について
-------------------------

気になったのでヘルプドキュメントを確認しました。

### 概要

「指定した関数の引数の挙動をベクトル化するためのラッパー関数を作るもの」とのことです:

    Vectorize(FUN, vectorize.args = arg.names, SIMPLIFY = TRUE,
              USE.NAMES = TRUE)

### 引数

-   FUN
    -   適用する関数を指定
    -   `match.fun`で探してくるとのこと
-   vectorize.args
    -   FUNで指定した関数の引数のうち、ベクトル化させる引数を文字列ベクトルで指定
    -   デフォルトではすべての引数をベクトル化
-   SIMPLIFY
    -   処理した結果をシンプルにするかどうか
    -   要するに`sapply`のsimplifyと同じ
-   USE.NAMES
    -   `...`引数が名前を持っていた場合、その名前を使うかどうか
    -   このあたりも`sapply`とかを参照

### 説明

これ、要するにvectorize.argsで指定した引数群を`mapply`に渡して処理させているとのことです。そのため、SIMPLIFYやUSE.NAMESといったのがあるんですね。納得です。

なお、この`Vectorize`で返ってくるのはベクトル化された関数です。なので上記のようになります。また以下のように一旦別のオブジェクトとして格納するといい感じになります:

``` r
z2h <- Vectorize(zen2han)
z2h(x)
 #> １２３A111   ほげＡａ 
 #>  "123A111"   "ほげAa"
```

r-wakalangで教えていただいた皆様、ありがとうございました。

Enjoy!
RxSwift `a.withLatestFrom(a)` 同じ上流元の同期的合流問題

以下は、社内で話題になった RxSwiftの「同じ上流元の同期的合流問題」の自分用メモです。
（文法とか型の形がおかしい等は、一旦忘れてください）

---

`a`, `b`をhot observable (e.g. `PublishSubject`)とする。
一般に、

```swift
let c = a.withLatestFrom(b) { ($0, $1) }
c.subscribe()
```

は、`b`が先にsubscribeされるため、`$0`部分よりも前に`$1`（内部キャッシュ）が生成される。
よって、もし `b = a` の場合でも、 `a.onNext("hello")`時に`c`も **同期的に`onNext`** を行い、`$0`、`$1`はともに最新値`"hello"`を取る。
ただしこの挙動は、 **RxSwiftの実装を見ないと分かりにくい** 欠点がある。

ちなみに **非同期** `flatMap`がある場合は、

```swift
a
  .flatMap { async($0) }
  .withLatestFrom(a)
  .subscribe()
// NOTE: f(a).withLatestFrom(a) の形だが、 fは「非同期」変換 
```

があり、`async` が通常、非同期的な合流のため、理解しやすい。
問題となるのは、 **同じ上流元が「同期的」に合流する場合** のみ。

問題を一般化すると、

```
h(f(a), g(a)).subscribe()
// h = merge, combineLatest, zip, withLatestFrom
```

において、`f`, `g`が任意の **同期変換** (mapなど) のとき、`subscribe`に流れるnext値は **`h`の実装に依存する** ことになり、理解が難しくなる。

例：

```swift
// # 理解しにくい例
merge(a.map { true }, a.map { false }) 
// true, falseのどちらが先に送られるか？
// 直感的にはtrueだが、mergeの中身がflipされている可能性もある＝内部実装を見ないといけない

// # 例外
zip(a, a.skip(1)) 
// 「最新の値」と「1つ前の値」のタプル。
// skip(1)とzipによって、キャッシュ生成＋利用が「非同期的」に行われるため、この合成は理解しやすい。
```

今回、社内で話題に上がった問題は、

```swift
// # 理解しにくい
let c1 = merge(a, b).withLatestFrom(a)

// # 理解しやすい
let c2 = merge(a, b.withLatestFrom(a))
```

というパターン。
どちらも、同じ上流`a`を合流させた形だが、前者`c1`よりも後者`c2`が理解しやすいのは、 `a.onNext` 時に 

- `c1`は、実質 `a.withLatestFrom(a)` の形と等価で、前述の通り、同期処理のタイミング判断が難しい
- `c2`の `b.withLatestFrom(a)` は、`a.onNext`時には内部キャッシュを更新するのみ。つまり、`b.onNext`（`a.onNext`に対して非同期）＋最新キャッシュのみを考慮すれば良いので、 **`a.onNext`と`b.onNext`を分解した`merge`** について考えられる

という違いがあるため。
（注意: 先に`b.onNext`が起きた場合の挙動についても注意を払う必要がある）
Swift3でバージョン文字列を比較する

# 状況
今回は、アプリのバージョン文字列の大小を比較します。バージョン文字列は`"1.2.3"`などのような、文字列を単純に数値に変換することができません。

しかし、アプリの強制アップデート等の対策をする際には、必要とされるバージョンを示す文字列と、現在インストールされているアプリのバージョンを示す文字列を比較する必要があります。

[[iOS]アプリに強制アップデート機能を導入すべき理由と、簡単に実装する方法](http://qiita.com/kazu0620/items/f2f6c711c8800d127eb2)

上記の実装だと下記の場合に正しく動作しません。今回の要件的に下記の場合に正しく動作しないのはよろしくありませんでした。

```swift
let required = "1.10.0"
let current = "1.2.0"
// required > current のはずなのに required < currentと判断されてします
```

# コード
そこで、正しく動作しそうな関数を作ってみました。

```swift
/// required > currentの場合にtrueを返す関数
func isUpdateRequired(_ requiredVersion: String) -> Bool {
    let currentVersion = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as! String

    // Intの配列に変換
    var required = requiredVersion.components(separatedBy: ".").map{ Int($0) ?? 0 }
    var current = currentVersion.components(separatedBy: ".").map{ Int($0) ?? 0 }

    // 配列の長さの統一
    let diff = required.count - current.count
    let padding = Array(repeating: 0, count: abs(diff))
    if diff > 0 {
        current.append(contentsOf: padding)
    } else if diff < 0 {
        required.append(contentsOf: padding)
    }

    // 各インデックスの値を比較
    for (r, c) in zip(required, current) {
        if r > c {
            return true
        } else if r < c {
            return false
        }
    }

    return false
}

isUpdateRequired("1.10.0") // true or false
```

それほどしっかりと動作は試せていませんが、`.`で数値が区切られているものであれば正しく動作しそうです。もう少し良い書き方があればアドバイスください。

おわり。
riotのinputタグでupdateが走らない場合がある

こちらは[Riot.js Advent Calendar 2017](https://qiita.com/advent-calendar/2017/riot)の4日目の記事になります。業務でriotを使う中でハマった細かすぎて伝わらないtipsです。

## 2秒ごとにupdateが走るはずが、更新されない
サンプル
https://codepen.io/kwst/pen/yobVpm?editors=1111

サンプルでは2秒ごとにタグのupdateを走らせていてその度に`str`を更新しています。

```js
this.update({ str: "abc" });
```

ですが、inputタグのvalueは上書かれずに入力した値がそのまま残ります。

## 仮説: riotのupdateはstateが変わらないと走らない
試しにサンプルのsetInterval内を下記のように変更して、一度別の文字列を入れてから"abc"を挿入するようにしたらちゃんとupdateが走りました。

```js
this.update({ str: "" });
this.update({ str: "abc" });
```

内部的にstateの変更がなければupdateをスキップする処理が入っている気がします。

## 対応: inputタグの入力値をstateに反映される
inputタグのinputイベントでstateをupdateしてやるようにしたら、ちゃんとupdateが走りました。

```js
this.onInput = (e) => {
  this.update({ str: e.target.value });
}
```

サンプル
https://codepen.io/kwst/pen/NdExzY?editors=1111

本当は強制的にupdateを走らせるような機能があればそれを使いたいものです。

## 追記
この現象について議論されているissueを見つけました。
https://github.com/riot/riot/issues/2112

このissueによるとこの現象は[バグではなく仕様](https://github.com/riot/riot/issues/2112#issuecomment-263265787)とのことです。
[Vue.jsでも同じような挙動](https://github.com/riot/riot/issues/2112#issuecomment-263273554)らしいです。
上記issue内では、下記の方法が紹介されています。

- [空データでupdateを走らせる](https://github.com/riot/riot/issues/2112#issuecomment-263275944)方法
- [入力イベントで再帰的にstateに値をセットする](https://github.com/riot/riot/issues/2112#issuecomment-263273025)方法

ベストワークアラウンドがあれば知りたいです。
【Android】文字を１文字ずつ表示させる CustomTextView

[Github/android-char-by-char-textview](https://github.com/rild/android-char-by-char-textview)

文字を１文字ずつ表示させる View

<img src="https://gyazo.com/69a6f323ad08faa0bf6081fce51aa0a1.gif"/>

## 元ネタ
http://www.ore-memo.com/813.html
実装はこちらのサイトで紹介されている通り.
`CharByCharTextView` というカスタムビューにまとめた.

## 使い方
`CharByCharTextView` を使う.

`android.os.Handler` を使っている.

CharByCharTextView は
- startCharByCharAnim() を呼ぶとテキストアニメーションが開始される
- setTargetText(String target) で表示する文字列を設定できる
- 表示間隔は `INTERVAL = 2` となっている値を変えることで変更できる

## 簡単な使い方
Step1 ~ Step3

### Step1
下をコピーする.

```CharByCharTextView.java
public class CharByCharTextView extends TextView {
    String defautText = "文字列を１文字ずつ出力するテスト";
    private static int TIMEOUT_MESSAGE = 1;
    private static int INTERVAL = 2;

    // Meta Data
    int i = 0;
    String putWord = "";
    String putText = "";

    public void startCharByCharAnim() {
        initMetaData();
        handler.sendEmptyMessage(TIMEOUT_MESSAGE);
    }

    public void setTargetText(String target) {
        this.defautText = target;
    }

    public CharByCharTextView(Context context) {
        super(context);
    }

    public CharByCharTextView(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
    }

    public CharByCharTextView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    private void initMetaData() {
        i = 0;
        putWord = "";
        putText = "";
    }

    // 文字列を一文字ずつ出力するハンドラ
    private Handler handler = new Handler() {
        @Override
        public void dispatchMessage(Message msg) {
            // 文字列を配列に１文字ずつセット
            char data[] = defautText.toCharArray();

            // 配列数を取得
            int arrNum = data.length;

            if (i < arrNum) {
                if (msg.what == TIMEOUT_MESSAGE) {
                    putWord = String.valueOf(data[i]);
                    putText = putText + putWord;

                    setText(putText);
                    handler.sendEmptyMessageDelayed(TIMEOUT_MESSAGE, INTERVAL * 50);
                    i++;
                } else {
                    super.dispatchMessage(msg);
                }
            }
        }
    };
}
```

### Step2
layout ファイルに追加する

<img src="https://gyazo.com/b490e6b3ec7d5202984868da2c8004ca.png" />

### Step3

```MainActivity.java
// MainActivity とかで...
// メンバ変数として...
CharByCharTextView mCustomTextView;

// onCreate とかで....
mCustomTextView = (CharByCharTextView) findViewById(R.id.customTextView);
mCustomTextView.setTargetText("表示させる文字");
mCustomTextView.startCharByCharAnim();
```
(初心者向け)Swift3.0で簡単なiPhoneアプリを作ってみる - 準備編１

MacbookでSwift3.0を使って簡単なスマホアプリを作る練習です。

#準備１．MacbookのOSを最新にします
- Xcodeを稼働させる前提としてMacbookのOSを最新にしておきます
- [macOS Sierraへのアップグレード。](https://www.apple.com/jp/macos/how-to-upgrade/)を参照し、MacbookのOSを最新にします
<img width="1054" alt="スクリーンショット 2017-08-10 9.31.34.png" src="https://qiita-image-store.s3.amazonaws.com/0/125842/de7ce318-c2d7-56ee-f2d1-b7b46902269e.png">

#準備２．Xcodeをインストールします
- AppStoreで"Xcode"を検索し、インストールします

<img width="263" alt="スクリーンショット 2017-08-10 9.30.54.png" src="https://qiita-image-store.s3.amazonaws.com/0/125842/575663fc-40d9-e4fa-2091-f8a8411b6b60.png">
機械学習の情報収集に役立つ14のメルマガ

機械学習は日進月歩の世界であり、情報収集が欠かせません。みなさんもブログやニュース記事を読む、Twitter で機械学習に関するつぶやきをしている人をフォローする、毎日 [arXiv](https://arxiv.org/list/stat.ML/recent) の論文をチェックする、といった方法で情報収集しているのではないかと思います。

情報収集の際に課題となるのが、情報が多すぎて重要な情報が埋もれてしまう点があげられます。通常、この問題の解決策として、いいね数やブックマーク数の多い記事を読む、フォローする人を絞り込む、何らかのキュレーションツールを使う、といった手段が取られます。

重要な情報を効率的にチェックしたい方におすすめできる方法の一つとして、メルマガを購読する方法があります。機械学習に関するメルマガを購読する利点として、以下の点をあげられます:

* 識者が配信する情報を選んでいるので、重要な情報を効率的にチェックできる
* ほとんどの場合、週一で配信されるので、毎日チェックする必要がない
* ニュースだけではなく、機械学習を使ったプロジェクト(特に、まだ小さいけど配信者が有望だと見込んだプロジェクト)の情報も知ることができる

(↓たいていこんな感じで配信されてます)
<img width="500" alt="スクリーンショット 2017-08-09 17.07.10.png" src="https://qiita-image-store.s3.amazonaws.com/0/77079/3517b618-c9f9-b258-3c8d-0808122df617.png">

本記事では、機械学習の情報収集に役立つ14のメルマガを紹介します。


# 機械学習の情報収集に役立つメルマガ
ここでは機械学習の情報収集に役立つ14のメルマガを紹介します。一つずつ紹介すると長くなってしまうのでしませんが、含まれる内容としては、一週間の主なニュース、解説記事、機械学習のプロジェクト、論文の4つを組み合わせていることが多いです。

たいていのメルマガでは、Web上から過去に配信した内容を見ることができるので、一度それを見てから購読するか否かを決めるのが良いと思います。以下は11の機械学習系のメルマガです:
(個人的には太文字にしているものが好きです)

* **[Weekly Machine Learning](https://www.getrevue.co/profile/icoxfog417)**
* **[Weekly Kaggle News](https://www.getrevue.co/profile/upura)**
* **[The Wild Week in AI](https://www.getrevue.co/profile/wildml)**
* **[Deep Hunt](https://deephunt.in/)**
* **[AI Weekly](http://aiweekly.co/issues)**
* **[Deep Learning Weekly](http://www.deeplearningweekly.com/)**
* **[Data Science Weekly](https://www.datascienceweekly.org/)**
* [O'reilly Artificial Intelligence Newsletter](http://www.oreilly.com/ai/newsletter.html)
* [O’Reilly Data Newsletter](http://www.oreilly.com/data/newsletter.html)
* [KDnuggets Newsletter](http://www.kdnuggets.com/news/subscribe.html)
* [Import AI](https://jack-clark.net/import-ai/)

[Weekly Machine Learning](https://www.getrevue.co/profile/icoxfog417)と[Weekly Kaggle News](https://www.getrevue.co/profile/upura)は日本語で配信されています。

以下の3つは Python のメルマガです。Python は機械学習でよく使われるので、購読しておくと役に立ちます:

* [Python Weekly](http://www.pythonweekly.com/)
* [Pycoder's Weekly](http://pycoders.com/)
* [Awesome Python](https://python.libhunt.com/)


他にも「これ良いよ！」というサイトや方法をご存知であれば、コメントで教えていただければと思います。

# おわりに
機械学習は日進月歩の世界であり、情報収集は欠かせません。本記事では効率的かつ効果的な情報収集をするためのメルマガを紹介しました。ちなみに私自身は、配信されたメールをメーラーで振り分けた後、面白そうな記事を [Pocket](https://getpocket.com/) に入れて、週末にゆっくり読んでいます。本記事が皆様のお役に立てば幸いです。

私のTwitterアカウントでも機械学習や自然言語処理に関する情報をつぶやいています。
[@Hironsan](https://twitter.com/Hironsan13)

この分野にご興味のある方のフォローをお待ちしています。
SourceTree? > .git/configファイルがおかしくなっていた例 | リポジトリがおかしいと感じた時の手順 (原因特定)

```txt:動作環境
Windows 7 Pro (32bit)
SourceTree v2.1.2.5
```


https://jira.atlassian.com/browse/SRCTREEWIN-7592
のやりとりにてRobert Sirre (CS)が見つけたことだが、`.git/config`がおかしな記述に書き換えされているとのこと。

これによりbranchのpull操作時に別のbranchがpullされるという致命的な不具合が発生するようになる。

**問題は`.git/config`がどのソフトにより、いつ書き換えられたか不明であること。**

個人的には多くの時間使用してきたSourceTreeによる可能性が高いと考えている。

SourceTreeの後にSmartGit使用して見つかった不具合でも、関連ファイルがおかしくなっていたのかもしれない。
http://qiita.com/7of9/items/05b48a82d78ca65af74f

今後、リポジトリがおかしくなったと思った場合以下の手順を踏むことで、原因の特定に結び付くかもしれない。

- .git関連ファイルを退避
- cloneしなおす
- 正常に戻った場合、.git関連ファイルを異常時と正常時で比較
Matplotlib > Link > youtube動画 > Introduction to NumPy | SciPy 2015 Tutorial | Eric Jones

Introduction to NumPy | SciPy 2015 Tutorial | Eric Jones
https://www.youtube.com/watch?v=1zmV8lZsHF4&t=2198s

25:40あたりからMatplotlibの使い方の紹介がある。

自分が使ってこなかった機能がいくつか紹介されている。

知らなかったこと。

- https://matplotlib.org/gallery.html
    - 描画例とコードが紹介されている
    - 自分の目的にあった描画を探してコードを学ぶことができる
- ion()
    - https://matplotlib.org/devdocs/api/_as_gen/matplotlib.pyplot.ion.html
    
- グラフだけ別のウィンドウに表示され、そこにはツールメニュー？がいくつかある
    - MacOS X上の環境での動作? Ubuntuでもどうか?
    - 3D表示のview?変更は便利そうだった
- scatter()の使い方
    - list objectを渡してplotする方法 (36:00あたり)
        - `x = rand(200)`
        - `y = rand(200)`
        - `size = rand(200)*30`
        - `color = rand(200)`
        - `scatter(x, y, size, color)`
        - `colorbar()`
    - 自前で二次元配列を作り、plt.imshow()に渡して描画する方法よりも使いやすいか?
        - [plt.imshow()の使用コード](http://qiita.com/7of9/items/49d073f964e5689d9b96#%E7%B5%90%E6%9E%9C%E7%A2%BA%E8%AA%8D%E3%82%B3%E3%83%BC%E3%83%89-v05)


### scatter
上記のコードをJupyterで試してみた。

```py:DataStandarization_170812.ipynb
%matplotlib inline

import numpy as np
import matplotlib.pyplot as plt

x = np.random.rand(200)
y = np.random.rand(200)
size = np.random.rand(200) * 30
color = np.random.rand(200)
plt.scatter(x, y, size, color)
plt.colorbar()

```

![qiita.png](https://qiita-image-store.s3.amazonaws.com/0/32870/55295915-7db7-dc7f-d116-85d04a463db0.png)
ローカル環境でHEROKUを使おう

まずは、herokuをインストールしよう!

```$ gem install heroku```

次に、herokuにログインしよう!

```$ heroku login```
その後、指示通りに、メールアドレス、パスワードを打ってログインしよう!

```
$ heroku create
$ git init
$ git add .
$ git commit -m 'Commit_Message'
$ git push heroku master
```

追い追い追加して記事を書いて行きます。


herokuのログをリアルタイム更新で見る

```
 $ heroku logs -t
```
rubyにおけるattr_accessorとは

# attr_accessor

クラスやモデュールにインスタンス変数を読み書きするためのアクセサメソッド。

```ruby:rei
class Book
  attr_accessor :title, :price
  
  def initialize(title, price)
    @title = title; @price = price
  end
end
 
book = Book.new("Programming Ruby", 1980)
puts book.title
book.price = 2000
puts book.price
```

上記のように記入してクラスなどに情報を付与する。

* attr_reader : インスタンス変数の読み出し専用アクセサを定義する。
* attr_writer : インスタンス変数の書き込み専用アクセサを定義する。

なぜこういった記述になるのか具体的にどういった処理がされているのかは下記の記事が参考になる

http://qiita.com/jordi/items/7baeb83788c7a8f2070d
CloudGarageの特徴と料金をAWSと比較

# CloudGarageとは？

CloudGarage: [https://cloudgarage.jp](https://cloudgarage.jp)

CloudGarageはNHNテコラス株式会社が提供する定額型パブリッククラウドです。

## 特徴

- 月単位の**定額課金**
    - プランはCPU/RAM/SSDのスペックとインスタンス上限数で決まる
    - 選んだプランに応じたスペックのインスタンスを上限数の範囲で自由に作成・削除できる
- **データ転送が無料・無制限**（10Gbps共用・各インスタンスあたり1Gbps制限）
- ロードバランサーも無料
- DNSサーバは10ドメインまで無料

基本的には「**VPSのような料金体系のクラウド**」といった具合でしょうか。請求額はプランの金額から追加されるものがないので、非常にシンプルです。

# AWSと比較

CPUやSSDのスペックが不明なので単純比較は難しいのですが、参考までにカタログスペックで簡単に見比べてみましょう。

CloudGarageの無料お試し枠の1GB/BOX3インスタンスは、CPUx1、RAM 1GB、SSD 50GBです。CPUx1、RAM 1GBは、AWSではt2.micro相当です(AWSの無料お試し枠でもある)。両者を比較してみます。

   |CloudGarage 1GB/BOX3|AWS t2.micro(northeast-1) オンデマンドインスタンス/Linux OSの場合
---|-----------|---
料金に関する詳細ページ|[CloudGarage](https://cloudgarage.jp/plan/)|[AWS EC2](https://aws.amazon.com/jp/ec2/pricing/on-demand/)
課金体系|月額固定|インスタンス稼働時間単位での課金
１インスタンスの料金（/h）[^1]|**0.66円**|$0.016<br/>(2017/08/10時点で約**1.76円**)
CPU|不明|詳細：[T2インスタンスのCPUクレジットについて](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/t2-instances.html)<br/>バースト機能があり瞬間的なパフォーマンスは高い
インスタンスストレージ|SSD 50GBが付属<br/>性能は不明|インスタンスストレージなし（EBSが必須）
永続ボリューム|なし|EBSが最低１つ必要<br/>汎用SSD50GBの場合 $6/Mo
固定IP|なし（追加予定？）|EIPが使用可能<br/>インスタンスに関連付けられている場合は無料
ネットワーク料金|無料|インは例外を除いて無料、アウトは最初の1GBは無料で以後段階的にGB辺りの請求
データ転送|10Gbps共用・各インスタンスあたり1Gbps制限|共用ネットワーク（速度の保証なし）
ロードバランサー|無料|$0.027/**実行**時間＋$0.008/GB
イメージ|イメージ10個まで無料|保存先・データ量に依存（無料枠で済む場合もままあるが一概には言えない）
CLI|API公開予定|CLI有り

なお、EC2にはリザーブドインスタンスというものがあり、1年または3年の契約をすることで料金が割引されます。期間や支払い方法にも依りますが、年間で40-60%ほど割引されます。詳細は[こちら](https://aws.amazon.com/jp/ec2/pricing/reserved-instances/)を見てください。

## 所感

ここからは個人の感想です。

### 料金体系が非常にシンプルで良い

AWSは請求額を算出するのがとにかくめんどくさいです・・・。CloudGarageの場合は月額固定で他に料金がかからないので見積もりが楽です。多くの場合1インスタンスだけってことはまずないでしょうし、最低でも3インスタンスの契約になるのはあまり気にはならない気がします。

「料金とかめんどくさいことを考えたくない個人の技術者」とかのニーズにすごく合っているのではないでしょうか。VPSっぽさがあります。

### 月単位での契約なので、常時稼働サーバは割安の可能性が高い

言うまでもないですが、AWSを含めた様々なクラウドベンダーのオンデマンドインスタンスをフル稼働するよりかなり安いです。t2.microですら1ヶ月フル稼働すると3500円くらいになります。１インスタンスで。

AWSのリザーブドインスタンスは最低でも年契約な上、途中でインスタンスタイプを変えられないクラスもあります。月単位での契約ですので途中でスケールしたくなっても対応しやすいですし、オンデマンドよりも安いので、ある程度要求スペックが安定しているような案件ではいい感じに使えるのではないでしょうか。

### 性能の詳細が分からない件

CPUやSSDがどういった性能なのか公式で言及されていません。

AWSにはストレージへの最適化インスタンスや、コンピューティングへ最適化されたインスタンスなど、様々なラインナップがあり、詳細なハードウェア要件を定めています。故に、要件に合わせて最適なインスタンスを選べます。要求がシビアな場合はCloudGarageよりもAWSの方がいいでしょう。

ただ、要求スペックとかなくてとりあえずCPUとSSDとメモリさえ最低限あれば細かいことを気にしない、というのなら関係ないです。少なくとも下手なレンタルサーバを借りてホームページ作るくらいなら1GB/BOX3の方が確実に安くて便利だと思います。

### 複合BOXが欲しい

超個人的な意見ですが、同じスペックのまとまりのBOXじゃなくて、BOX内のインスタンスごとにスペックを変えられたらいいなあと思いました。痒いところに手が届かない印象です。雑な例ですが、8GB/BOX10とかでサービス走らせてて、監視用のインスタンスを走らせたい時に、4Core/8GB/200GBとか要らんじゃないですか。かといって別途1GB/BOX3で新しくインスタンス借りるのもなあ・・・って感じです。

料金体系がシンプルな反面、柔軟性に乏しい感じです。

### とりあえず試してみては？

1GB/BOX3が無料で試せるので、privateなgit鯖とか、VPNとか、余裕があればマイクロサービスでも構築してみたい感じです。

[^1]: 1ヶ月辺り31日で計算・税抜き
Unity Material Standerd ShaderのRendering ModeをAnimationでいじろうとした結果

#結論
できなかったので，Rendering Modeごとに別ゲームオブジェクトを作成して対応．

#奮闘
##作戦1.RenderingModeをAnimationで変更
結果，できない．
##作戦2.RenderingModeをScriptで変更
[こちらの方](http://qiita.com/polikeiji/items/e56febcfdf886524352c)が紹介しているように，Scriptで変更することは可能．
しかし，Editor上ではうまくいってもビルドした後ではうまくいかない．これについては，[Unityマニュアル](https://docs.unity3d.com/jp/540/Manual/MaterialsAccessingViaScript.html)に下記の記述がある．

>プロジェクト内に一致する機能の組合せを持つマテリアルが無かった場合、視差マッピングは、たとえエディター上では機能しているように見えたとしても、最終的なビルドでは有効にならない、という事です。なぜなら、バリアントが要求されたように見えず、ビルドから省かれてしまうからです。

Standard Shaderは内部的に、沢山のさまざまなシェーダーが一つにまとめられており，その組み合わせは、アクティブ・非アクティブの切り替えによって変える事ができる．

そのため，<b>ビルド時にはシーン上で使われていないシェーダーバリアントはUnity からは、まだ使っていないように見えるため、ビルドから除外されてしまう．</b>

例えば，Scene上でRendering ModeをOpaqueにしたものをScriptでFadeに変更しようとしても，ビルド時には，Fadeのバリアントを読んでくれない．なぜなら，Scene上でFadeのRendering ModeのMaterialを使っていないためだ．

##作戦3.静的にする
Rendering Modeごとに別ゲームオブジェクトを作成し，ゲームオブジェクトのアクティブ・非アクティブの切り替えによって対応することで解決．
テキスト-url

5/16 2りんかん
http://ds-blog.livedoor.biz/archives/2035202.html

5/23 Webike ニュース
https://news.webike.net/2017/05/23/98080/

6/15　2りんかん　期間延長
http://ds-blog.livedoor.biz/archives/2038502.html

6/19 webike ニュース
https://news.webike.net/2017/06/19/102064/

7/10
http://news.bikebros.co.jp/report/news20170710-07/

7/11
https://bike.yahoo.co.jp/news/topics/20170711-00000005-bikebros/

7/17
https://www.moto-auc.com/report/news/honda

7/29
https://www.8190.jp/bikelifelab/news/bikenews/2017/170728_01/

8/3
http://forride.jp/motorcycle/honda-cb750four-nsr250r
【Mac】〜環境構築〜前提編


環境構築をするにあたって必要な2つのソフトのインストール方法。


##1. xcodeをインストールする。　　
MacでGitを利用するため、App Storeからxcodeをインストール。
App Store以外からもxcodeをインストールすることはできるが、APP Storeからインストールした方が楽。
※xcodeを起動するとgitが使えるようになります。

![xcode.png](https://qiita-image-store.s3.amazonaws.com/0/158422/6802bee1-e3b7-c79f-6ddc-cdd8a3643a81.png "xcode.png")

この画面が表示されればOKです。
##2.Homebrewをインストールする。	
``` 
$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
```
Mac OS用のパッケージ管理システムのHomebrewをインストール。

##3.以下の記事を参考に目的にあった環境構築をしてください！

[Ruby編](http://qiita.com/kanikani2929/items/7a912ff1ab6c6feb0f81 "Ruby編")