OmniAICreator/Qiita-1.07M huggingface dataset:
VagrantコマンドでEncoding::InvalidByteSequenceError

※2016年11月に、別のブログで書いた記事を移行したものです。

---

vagrant up, vagrant halt, vagrant sshなどで、たびたび **C:/HashiCorp/Vagrant/embedded/gems/gems/vagrant-1.8.6/lib/vagrant/util/io.rb:32:in `encode': incomplete "\x98" on Windows-31J (Encoding::InvalidByteSequenceError)** が起きました。

C:/HashiCorp/Vagrant/embedded/gems/gems/vagrant-1.8.6/lib/vagrant/util/ にある、io.rb の32行目を

    data << io.readpartial(READ_CHUNK_SIZE).encode("UTF-8", Encoding.default_external)

以下のように変更

    data << io.readpartial(READ_CHUNK_SIZE).encode("Windows-31J", Encoding.default_external)

これで直ります。
Windows + Rubyでuse of REX.w is meaninglessが起きる

※2016年11月に、別のブログで書いた記事を移行したものです。

---

Windows10で、RubyInstallerを使ってRubyをインストールすると、
Rubyコマンド実行時に　**[0x7FFA6AFB70E3] ANOMALY: use of REX.w is meaningless (default operand size is 64)**　が起きた。

ウイルスバスターの監視対象から、C:\Ruby23-x64を外す。

詳しくは、下記参照。
[Dockerエラー "ANOMALY: use of REX\.w is meaningless \(default operand size is 64\)" \- Qiita](http://qiita.com/mokuo/items/84e0f77435da9f521fb4)
MDNの『Getting started with HTML』の概要

# このページについて
[MDN(Mozilla Developer Network)](https://developer.mozilla.org/en-US/)の技術情報ページを和訳し、要点をまとめたものです。

* 英文のページを読んで理解すること
* 基礎をおさらいすること

を目的にした自己学習のページです。

厳密な和訳ではなく、全文を網羅したものでもありませんが、
掲載内容について間違いがありましたら、ご指摘いただけると幸いです。

気づいたことや感想は、「memo:」としてコメントしています。

# 対象ページ
MDN &gt; Learn web development &gt; HTML &gt; Introduction to HTML &gt; [Getting started with HTML](https://developer.mozilla.org/en-US/docs/Learn/HTML/Introduction_to_HTML/Getting_started) 

以下、概要。
 
# HTML事始め
## 要素（element）
* 要素（element）は、開始タグ（opening tag）と終了タグ（closing tag）で囲まれた中身（content）からなる

```html:element
<tag>conent</tag>
```
* img要素のように、開始タグのみで、中身を持たない要素（empty element）も存在する

```html:empty_element
<tag attr="value">
```

* 要素は、ネスト（入れ子に）できる
* 要素は、ブロック要素（block element）とインライン要素（inline element）に2分される

| | ブロック要素 | インライン要素 |
|:----------------|:----------------|:----------------|
| 主な役割 | ページの構造を担う | 文書内のパーツ |
| 主な要素 | 段落、リスト、ナビゲーションメニュー、フッター | リンク、強調要素 |
| 要素間の配置 | 前後で改行される | 前後で改行されない（同じ行になる） |
| ブロック要素の中に | 入る | 入る |
| インライン要素の中に | 入らない | 入る |

## 属性（attribute）
要素は、属性（attribute）を持つことができる

```html:element_with_attribute
<tag attr="attr_value">content</tag>
```

* 属性は、開始タグの要素名の後ろに配置する
* 要素名と属性、属性間は、半角スペースで区切る
* 属性は、属性名と属性値を=（イコール）でつなげる
* 属性値は、ダブルクォーテーションで囲う
    * シングルクォーテーションでも良い
    * ただし、クォーテーションが混在してはならない
* input要素のdisabled属性のように、属性値を省略できる論理属性（boolean attribute）も存在する

> memo:
　省略できるのは、属性名ではなく属性値。
　disabled="disabled"がdisabledになるのは、=以降が省略されている。

## 文書構造

### doctype
* 文書の種類を定義する
* 以前はHTMLとしての妥当性のため、複雑なルールを定義する必要があった
 
```html
<!DOCTYPE html>
```

### html要素 
* HTMLページのルートになる要素

```html
<html></html>
```

#### head要素
* 検索結果に表示させたいkeywordやdescription、CSSファイルへのリンク、文字コードなどを設定する
* ページ上には表示されない

```html
<head></head>
```

##### 文字コード
* 特に理由がなければ、最も多くの言語に対応したutf-8を指定する

```
<meta charset="utf-8">
```

##### title要素
* ページのタイトル
* ブラウザのタブや、ブックマーク時に表示される

```html
<title></title>
```

#### body要素
* コンテンツ
* ページ上に表示される

```html
<body></body>
```

## その他
### スペースの扱い
HTML上の連続したスペースは、1つのスペースとして扱われる

### 特殊文字（special character）
特殊文字（special character）は、文字実体参照（character reference equivalent）に置き換える

| 意味 | 特殊文字 | 文字実体参照 |    
| :--- | :---: | :---: | 
| 大なり記号 | &gt; | \&gt; |
| 小なり記号 | &lt; | \&lt; | 
| ダブルクォーテーション | &quot; | \&quot; |
| シングルクォーテーション | &apos; | \&apos; |
| アンパサンド | &amp; | \&amp; |

### コメント（commnet）
コメントは、`<!--`と`-->`とで囲う

```html:comment
<!-- content -->
```
Dockerエラー "ANOMALY: use of REX.w is meaningless (default operand size is 64)"

※2016年11月に、別のブログで書いた記事を移行したものです。

---

Windows10にDocker Toolboxをインストールし、実行した際に、**Looks like something went wrong in step ´Checking status on default´**が発生し、起動できなかった。
ウイルスバスターの設定をして解決できたので、投稿します。

## 事象
「Docker Quickstart Terminal」起動時に、**Looks like something went wrong in step ´Checking status on default´**
と表示されて、起動に失敗した。

    [0x7FFE4A1A70E3] ANOMALY: use of REX.w is meaningless (default operand size is 64)
    [0x7FFE4A1A70E3] ANOMALY: use of REX.w is meaningless (default operand size is 64)
    [0x7FFE4A1A70E3] ANOMALY: use of REX.w is meaningless (default operand size is 64)
    [0x7FFE4A1A70E3] ANOMALY: use of REX.w is meaningless (default operand size is 64)
    [0x7FFE4A1A70E3] ANOMALY: use of REX.w is meaningless (default operand size is 64)
    [0x7FFE4A1A70E3] ANOMALY: use of REX.w is meaningless (default operand size is 64)
    [0x7FFE4A1A70E3] ANOMALY: use of REX.w is meaningless (default operand size is 64)
    [0x7FFE4A1A70E3] ANOMALY: use of REX.w is meaningless (default operand size is 64)
    [0x7FFE4A1A70E3] ANOMALY: use of REX.w is meaningless (default operand size is 64)
    [0x7FFE4A1A70E3] ANOMALY: use of REX.w is meaningless (default operand size is 64)
    [0x7FFE4A1A70E3] ANOMALY: use of REX.w is meaningless (default operand size is 64)
    [0x7FFE4A1A70E3] ANOMALY: use of REX.w is meaningless (default operand size is 64)
    [0x7FFE4A1A70E3] ANOMALY: use of REX.w is meaningless (default operand size is 64)
    [0x7FFE4A1A70E3] ANOMALY: use of REX.w is meaningless (default operand size is 64)
    [0x7FFE4A1A70E3] ANOMALY: use of REX.w is meaningless (default operand size is 64)
    Starting "default"...
    Machine "default" is already running.
    Looks like something went wrong in step ´Checking status on default´... Press any key to continue...

## 原因 : ウイルスバスター[ANOMALY: use of REX.w is meaningless (default operand size is 64) - 新・日々録 by TRASH BOX@Eel](http://d.hatena.ne.jp/eel3/20160909/1473422844)によると、
ウイルスバスタークラウドが関係しているらしい。
試しにウイルスバスターを終了させてみると、Docker Toolboxは正常に起動した。
しかし、毎回ウイルスバスターを停止させるのもどうなのか・・・。

## 解決策 : 監視対象から除外する
Docker Toolboxディレクトリと、Gitディレクトリ（Docker Toolboxが使っているっぽいbash.exeがある）をウイルスバスターの監視対象から除外する。
デスクトップの右下から、ウイルスバスターのメイン画面を表示する。

[![ウイルスバスター_デスクトップ](http://mokuo.yokohama/wp-content/uploads/2016/11/ウイルスバスター_デスクトップ.png)](http://mokuo.yokohama/wp-content/uploads/2016/11/ウイルスバスター_デスクトップ.png)

設定ボタンをクリック

[![ウイルスバスター設定](http://mokuo.yokohama/wp-content/uploads/2016/11/ウイルスバスター設定.png)](http://mokuo.yokohama/wp-content/uploads/2016/11/ウイルスバスター設定.png)

例外設定 > 追加 から、ディレクトリを追加。

[![ウイルスバスター例外追加](http://mokuo.yokohama/wp-content/uploads/2016/11/ウイルスバスター例外追加.png)](http://mokuo.yokohama/wp-content/uploads/2016/11/ウイルスバスター例外追加.png)

「適用」をクリックし、OKする。

再び「Docker Quickstart Terminal」を起動すると、
正常に起動した。

**参考**
[特定のファイルをウイルス検索から除外するには | サポート Q&A：トレンドマイクロ](https://esupport.trendmicro.com/support/vb/solution/ja-jp/1104413.aspx)
Windows + gemコマンドでGem::RemoteFetcher::FetchError

※2016年11月に、別のブログで書いた記事を移行したものです。

---

Windows10に、RubyInstallerでRubyを入れた。
以下のエラーが起きて、gemをアップデートできない。

    ERROR:  While executing gem ... (Gem::RemoteFetcher::FetchError)
        SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed (https://api.rubygems.org/specs.4.8.gz)
        
[SSL Certificate Update - RubyGems Guides](http://guides.rubygems.org/ssl-certificate-update/)を見て解決した。
Windows10 + AtomでRails開発

※2016年11月に、別のブログで書いた記事を移行したものです。

---

Railsアプリケーションを開発する時のエディタが定まらない。Atomを使ってみることにしたので、
インストールしたパッケージをまとめておきます。

## パッケージのインストール方法
Ctrl + Shift + T でタブを開き、検索してインストールできる。

## 日本語化

* japanese-menu

## 静的コード解析(Linter)
自分は、Javaから入ったこともあり、実行前に構文チェックしてくれるのは嬉しいです。
今回は、Ruby/erb//SCSS/CoffeeScriptのLinter（構文チェックしてくれるツール）を入れます。

* linter-rudocop
* linter-erb
* linter-scss-lint
* linter-coffeelint

## Ruby自動整形
RUbyCopの機能を利用して、コードを自動修正してくれる。

* rudocop-auto-correct
詳しくは、[Ruby初心者に絶対オススメのAtomパッケージ『rubocop-auto-correct』。 - 日々、とんは語る。](http://d.hatena.ne.jp/tomoya/20151114/1447534411)参照。

## LinterをWindowsにインストールする
このままだと、エラーが出る。

![Atom.png](https://qiita-image-store.s3.amazonaws.com/0/102964/21631a02-7959-c7a5-e1c7-4f8e5768fa69.png)

別途、gemでLinterをそれぞれ入れる必要があるらしい。
Rubyコマンドプロンプトを開く。(Macの人は、ターミナル)
Rubyをインストールしていない人は、[RubyInstaller for Windows](http://rubyinstaller.org/)でインストール。[Rubyをインストール／アップデートするには？（Windows編） - Build Insider](http://www.buildinsider.net/language/rubytips/0004)
Macの場合、標準でrubyコマンド（gemコマンドも）が利用できるので、とりあえずそれを使う。

### gemをアップデート
gemは、Rubyのパッケージ管理システム

    $ gem update --system

エラーが出る場合は、[Windows + gemコマンドでGem::RemoteFetcher::FetchError | イチとゼロ - mokuoの技術ブログ](http://mokuo.yokohama/windows-gem-fetcherror/)参照。

### gemで各Linterをインストール
インストール済みのgemを確認

    $ gem list

gemでインストールできるパッケージを検索
[RubyGems.org | your community gem host](https://rubygems.org/)
もしくは

    gem search xxx

インストールしていく

    $ gem install rubocop
    $ gem install lint
    $ gem install rails-erb-lint
    $ gem install scss_lint
    $ gem install coffeelint

Atomを開き直せば、動くはず。

### rudocop-auto-correctの設定
[Ruby初心者に絶対オススメのAtomパッケージ『rubocop-auto-correct』。 - 日々、とんは語る。](http://d.hatena.ne.jp/tomoya/20151114/1447534411)参照。

**参考**
[AtomでRailsを爆速開発する環境を作ってみた - Qiita](http://qiita.com/tacumai/items/e84e586b5bde2979a066)
[凄腕エンジニアが選んだAtom・Vim・Emacsの超便利プラグインと設定34選 - paiza開発日誌](http://paiza.hatenablog.com/entry/2016/05/23/%E5%87%84%E8%85%95%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E3%81%8C%E9%81%B8%E3%82%93%E3%81%A0Atom%E3%83%BBVim%E3%83%BBEmacs%E3%81%AE%E8%B6%85%E4%BE%BF%E5%88%A9%E3%83%97%E3%83%A9%E3%82%B0%E3%82%A4)
[Atomに静的コード解析を導入する手順 - Qiita](http://qiita.com/kami_zh/items/fb6fc6206f297251d076)
Twitter感情分析で株価予測の論文を検証したら約70%の精度で上下予測できた

どうも、オリィ研究所 (http://orylab.com/) のryo_gridこと神林です。
今回はTwitter感情分析で株価予測の論文「Twitter mood predicts the stock market」を検証してみました。

**追記: コメント欄にテクニカルによる予測とアンサンブルして約70%の精度で予測できたことについて記述しています。**
**追記２: コメント欄に始値で予測した場合について記述しています**

# 検証対象
"Twitter mood predicts the stock market"
https://arxiv.org/pdf/1010.3003.pdf

上記論文を日本語で解説した記事は以下。

[第三回論文速報会] Twitterの感情分析から株価の予報は可能か？
http://networkpaper.blogspot.jp/2012/04/twitter.html

対象の論文は、Google Scholarで見ると2000本以上の論文にリファーされている、この手の研究の中では評価の高い(≒先駆的な)論文です。

論文の結論のうち、すごく雑に、今回着目する点を書くと「Twitterを感情分析した結果「穏やかさ」とダウ平均株価に相関（統計用語の相関ではないです）があり、前者の情報により後者のUPorDOWNが87.6%の精度で予測できた」というものです。
これは驚くべき結果で、懐疑的な見方をしている人もいるようですが、とにかく自分で確かめてみました。

# やったこと
1. 2009年のTwitterデータセットを感情分析しcalmness(穏やかさ)を求める   
 - https://archive.org/details/twitter_cikm_2010 
 - やり方はおおむね論文のやり方と同じ。ただし、論文で利用しているProfile
of Mood States(POMS)という、感情分析の質問項目は手に入らなかったので、独自の方法でcalmnessを表現する単語を収集
2. Xgboostを用いて、calmnessからダウ平均株価のUPorDOWNを予測する
 - データ&予測プログラム: https://gist.github.com/ryogrid/e5274ac31a5b9ac02e8a9fe33b8ac921
 - データは日時,calmness,デイリーのダウ平均株価終値
 - 前半半年で学習し、後半半年で予測
 - 3日分のcalmnessと、3日分の株価の差分(Price[n]-Price[n-1])を入力

calmnessをプロットした結果
![calmness.jpg](https://qiita-image-store.s3.amazonaws.com/0/12325/a9bf3abd-0a52-b080-ad1a-079ee417233d.jpeg)

2009年のダウ平均株価
![dji.jpg](https://qiita-image-store.s3.amazonaws.com/0/12325/06ffa027-e64f-8a11-2d94-9332bc3e3d3c.jpeg)


# 結果
59.5%の精度でUPorDOWNが予測できた。
株価の差分の情報を入力しなくても予測精度に変化が無く、また直近の株価推移の情報だけでは予測精度出なかったため、論文が示した通りTwitterでのcalmnessとダウ平均株価に相関があると思われる。
ただし、論文が示したのは2008年のデータにおいてであり、今回検証したのは2009年のデータなので、現在も同じ相関があるかは定かではない（当時よりユーザ数が増えているし、ユーザー層も変化していると思われる）ので、データを収集し追試したい。


また、予測に用いたデータは https://gist.github.com/ryogrid/e5274ac31a5b9ac02e8a9fe33b8ac921 にあるので、上記の結果が本当に正しいか、Rなどが得意な方がいたら、検定など行って相関があるか調べていただけると大変ありがたいです (私はRはあまり得意でないので...)。

以上です。

# 類似研究（？）
トランプ氏のツイートを機械学習し、為替の予測をしてみた。〜GCP ML系使い倒し〜
http://qiita.com/hayatoy/items/708aa3fced2d37bc026c
CentOS7での公開鍵認証方式でのアクセス

#経緯
会社で、新しく製品を立ち上げるためクラウド上のサーバにMySQLをインストールすることになりました。
その前に、一般ユーザを作成しないとー！という事で作業しまーす。
作業する中で、アウトプットしといた方が知識の定着になるのでQiitaに残して行こうと思います。
こういう癖づけが大切なんですよね・・。

#前提条件
・アクセスの全体像
　ローカル環境→サーバへの公開鍵認証アクセス
・接続するユーザは、サーバ側で作成されていること

#作業概要
１.　作業場所を作成（サーバ側）　
２.　公開鍵・秘密鍵の作成（サーバ側）
３.　秘密鍵の移動（サーバ側）
４.　ローカル環境からサーバへの接続設定（ローカル）
５.　接続テスト

#作業内容
##１.　作業場所を作成（サーバ側）　
ホームディレクトリで作業ディレクトリを作成する。
※この時、注意する点は、ローカル側からアクセスするユーザで作業をすること。

```bash
$ mkdir .ssh
```

##２．公開鍵・秘密鍵の作成
```bash
$ cd .ssh
$ ssh-keygen -t rsa
```
上記コマンドを実行すると、以下の２つの選択を求められる。
###2-１．公開鍵と秘密鍵の名前を設定する。
　　Enter file in which to save the key (/Users/xxx/.ssh/id_rsa)と
　　聞かれるので、公開鍵と秘密鍵の名前を決めたいのなら入力する。
　　今回は、user01で入力。
###2-2．パスフレーズの設定
　　Enter passphrase (empty for no passphrase):
　　上記が聞かれるのでパスフレーズ入力せずにEnterすると、
　　パスワードなしで認証ができるようになる。

###2-3．公開鍵認証を設定ファイルに入れておく
```bash
$ cat user01.pub > authorized_keys
```
※上記は、authorized_keysがない場合です。存在する場合は、　>> にする必要あり。

```bash
$　chmod 0600 authorized_keys
````
権限を上記にする。公開鍵にアクセスする権限が適切でないと、アクセスさせてくれない。

##３．秘密鍵を~~の移動（サーバ側）~~ローカルへダウンロード
２でuser01というファイルが作成されているので、接続する側の環境（ローカル環境、sshする側）に設置する。
設置する場所：/Users/hiro/.ssh
※scpコマンドでもOKです。今回はFTPツールで取得しました。

##４．ローカル環境からサーバへの接続設定（ローカル）
```bash
$ vi .bash_rc
　　　alias user01='ssh -2 -i ~/.ssh/user01 user01@XXXX.XXXX.XXXX.XXXX
$ source .bash_rc
```
上記の内容をローカル環境の.bash_rcファイルに記載する

##5.接続テスト
```bash
$ user01
```
でログインできれば成功です！

以上です。あまりはまらずできてよかった・・・。
[WordPress]自分のサイトからコメントが来る！？

※2016年11月に、別のブログで書いた記事を移行したものです。

---

WordPressで、コメント承認待ちがちょくちょく来るようになった。
しかも、自分自身のサイトから。何だこれ！？
「WordPress コメント 自分自身」とかで頑張ってググッてたら分かりました。

[![コメント  7  ‹ イチとゼロ   mokuoの技術ブログ — WordPress](http://mokuo.yokohama/wp-content/uploads/2016/11/コメント-7-‹-イチとゼロ-mokuoの技術ブログ-—-WordPress-978x1024.png)](http://mokuo.yokohama/wp-content/uploads/2016/11/コメント-7-‹-イチとゼロ-mokuoの技術ブログ-—-WordPress.png)

[WordPress 内部リンクを貼るとコメントが!?～セルフピンバック停止の方法 | WordPress×賢威で稼ぐトレンド講座](http://yudnaliatah.com/wordpress-self-pingback-2431)に、分かりやすく解説されていました。

どうやら「セルフピンバック」というものみたいです。

functions.phpに以下を追加すれば、解決できます。

    function no_self_ping( &$links ) {
            $home = get_option( 'home' );
            foreach ( $links as $l => $link )
                    if ( 0 === strpos( $link, $home ) )
                            unset($links[$l]);
    }

    add_action( 'pre_ping', 'no_self_ping' );
[![テーマの編集 ‹ イチとゼロ   mokuoの技術ブログ — WordPress](http://mokuo.yokohama/wp-content/uploads/2016/11/テーマの編集-‹-イチとゼロ-mokuoの技術ブログ-—-WordPress-1024x479.png)](http://mokuo.yokohama/wp-content/uploads/2016/11/テーマの編集-‹-イチとゼロ-mokuoの技術ブログ-—-WordPress.png)

私の場合は、テーマをアップロードしてもカスタマイズ箇所が消えないように、子テーマを作り、子テーマを編集しています。
子テーマに関しては、ここでは割愛させていただきます。

**参考**
[Wordpressでセルフピンバックを無効にする4つの方法 – OBOLOG](http://jimeishi.net/wordpress-self_pinback)
[Topic: Feature removal request: self-pingbacks « WordPress.org Forums](https://wordpress.org/support/topic/feature-removal-request-self-pingbacks/)
Swiftでネストした構造体の初期化エラー

# 概要
下記のようにネストした構造体の配列を初期化しようとした時に何故かコンパイルエラーが出たのでメモ。
（Apple Swift version 3.0.2 (swiftlang-800.0.63 clang-800.0.42.1)）

# ネストした構造体配列の初期化エラー
構造体StructAの中に構造体StructBを定義し、入れ子にする。

```swift:ネストした構造体
struct StructA {
    let a: Int

    struct StructB {
        let b: Int
    }

}
```

上記のStructBの配列を初期化しようとしたときに、
以下の記述だと何故かシンタックスシュガーが機能せず、コンパイルエラーが出る。

``` swift:StructBの配列を初期化
// NGパターン
let list1 = [StructA.StructB]()
// error: cannot call value of non-function type '[StructA.StructB.Type]'
```

# 回避方法

以下記述方法であればコンパイルエラーはでない。

```swift:回避方法
// OKパターン
let list2 = Array<StructA.StructB>()

let list3: [StructA.StructB] = []

typealias StructBinA = StructA.StructB
let list4 = [StructBinA]()
```

# 参考
stackoverflowを見るとどうやらswiftのバグらしい。
 - [stackoverflow / Array of Nested Type: Why Does the Compiler Complain?](http://stackoverflow.com/questions/36773355/array-of-nested-type-why-does-the-compiler-complain)
 - [stackoverflow / Why can't I instantiate an empty array of a nested class?](http://stackoverflow.com/questions/25682113/why-cant-i-instantiate-an-empty-array-of-a-nested-class)
iOSアプリで外部マップアプリ（標準・google map）を起動する


iOSアプリ作成時に外部マップアプリ（標準マップアプリ・google mapアプリ）を起動する方法のメモ


下記の修正で起動可能とできる


####１）info.plistの修正
iOS9以降では、info.plistにArray型のLSApplicationQueriesSchemesを追加して、起動スキーム名をString型で登録する必要があります

![info.plist..png](https://qiita-image-store.s3.amazonaws.com/0/79227/165f5021-7f62-e54e-4e54-8018581caf4f.png "info.plist..png")
（こんな感じで登録、写真はgoogle mapのスキームを登録した例）

####２）コード修正

```swift:swift
    if UIApplication.sharedApplication().canOpenURL(NSURL(string:"comgooglemaps://")!) {

        let urlStr:String = "comgooglemaps://?daddr=\(latitude),\(longitude)&directionsmode=walking&zoom=14"

        UIApplication.sharedApplication().openURL(NSURL(string:urlStr)!)
        
    } else {
        
        let daddr = NSString(format: "%f,%f", latitude, longitude)
        
        let urlString = "http://maps.apple.com/?daddr=\(daddr)&dirflg=w"
        
        let encodedUrl = urlString.stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet.URLQueryAllowedCharacterSet())!
        
        let url = NSURL(string: encodedUrl)!
        
        UIApplication.sharedApplication().openURL(url)
    }
```

まず、google mapアプリが開けるか（インストールされているか）を確認

```swift
UIApplication.sharedApplication().canOpenURL(NSURL(string:"comgooglemaps://")!)
```

google mapアプリが開ける場合（インストールされている場合）は、google mapアプリを開く
（オプション詳細はここを参照：[Google ios-sdk](https://developers.google.com/maps/documentation/ios-sdk/urlscheme?hl=ja "Google ios-sdk")）

```swift
        let urlStr:String = "comgooglemaps://?daddr=\(latitude),\(longitude)&directionsmode=walking&zoom=14"

        UIApplication.sharedApplication().openURL(NSURL(string:urlStr)!)
```


google mapアプリが開けない場合（インストールされていない場合）は標準のマップアプリを開く
（オプション詳細はここを参照：[Apple Reference](https://developer.apple.com/library/content/featuredarticles/iPhoneURLScheme_Reference/MapLinks/MapLinks.html "Apple Reference")）

```swift
            let daddr = NSString(format: "%f,%f", lat, lon)
            
            let urlString = "http://maps.apple.com/?daddr=\(daddr)&dirflg=w"
            
            let encodedUrl = urlString.stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet.URLQueryAllowedCharacterSet())!
            
            let url = NSURL(string: encodedUrl)!
            
            UIApplication.sharedApplication().openURL(url)
```
GLPKによる勤務シフト表の作成1(3)

###目次
[GLPKによる勤務シフト表の作成1(1)(基礎編)](https://qiita.com/ki073/items/a8b26883e931e4bf6584)　[(2)](https://qiita.com/ki073/items/1a7b92e2e764ee8a4355)　(3) ←ここ　[(4)](https://qiita.com/ki073/items/28abdfc5733997538dc8)
[GLPKによる勤務シフト表の作成2](https://qiita.com/ki073/items/d45cd648e0625c488ee6) (2日連続して勤務する場合の勤務シフト)

## デバッグ
モデル記述の中に
`display 変数名;`
を挿入することで変数の値が表示されます。
varだけではなくsetやparamで指定した名称も可能です。

## さらなる改良版
スタッフが従事する時間帯や休みを確保するために、制約条件を追加してきましたが、varを宣言する時に変数の取り得る範囲を制限してしまって、従事する時は>=1に、休む時は<=0にすると、実現できます。

`var assignShiftSchedule{(d,t) in BusinessHour, s in Staff} binary;`
を
`var assignShiftSchedule{(d,t) in BusinessHour, s in Staff} binary, >= if (d,t,s) in FixOnDuty then 1 else 0, <= if (d,t,s) in FixOffDuty then 0 else 1;`
に変更して範囲指定、
不要になった
`s.t. fix1{(d,t,s) in FixOnDuty}: assignShiftSchedule[d,t,s]=1;`
`s.t. fix2{(d,t,s) in FixOffDuty}: assignShiftSchedule[d,t,s]=0;`
を取り除きます。

全体としては次のようになります。

```GLPK:shift3.model
# version 0.13
# シフト表作成
param firstDate; # 期間の最初の日付
param endDate;   # 最後の日付
set Date := firstDate..endDate; # 期間内の日付
set TimeSlot := {"朝", "夕", "夜"}; # シフト時間枠
set Staff; # スタッフ名
param maxWorkingDays{Staff}; # 各スタッフの最大勤務日数
set BusinessHour dimen 2; # 営業時間帯
set FixOnDuty dimen 3;    # 勤務時間帯
set FixOffDuty dimen 3;   # 非番時間帯
# 日付,シフト時間枠,スタッフの配列を確保、出勤の割り当てで1が入る
var assignShiftSchedule{(d,t) in BusinessHour, s in Staff} binary, >= if (d,t,s) in FixOnDuty then 1 else 0, <= if (d,t,s) in FixOffDuty then 0 else 1;

# シフト時間枠に必ず1人従事
s.t. keepStaffInTimeSlot{(d,t) in BusinessHour}: sum{s in Staff}assignShiftSchedule[d,t,s]==1;
# 出勤は1日1回以下
s.t. avoidShiftPatten1{s in Staff, d in Date}: sum{(d,t) in BusinessHour}
    assignShiftSchedule[d,t,s]<=1;
# 各スタッフの最大勤務日数で制限
s.t. restrictMaxWorkDays{s in Staff}: sum{(d,t) in BusinessHour}
    assignShiftSchedule[d,t,s]<=maxWorkingDays[s];
# 連続勤務は3日以下
s.t. keepOffDay{s in Staff, d in firstDate..endDate-3}: sum{t in TimeSlot, d4 in d..d+3 : (d4,t) in BusinessHour}
    assignShiftSchedule[d4,t,s]<=3;
# 翌日の勤務時間帯を制限
s.t. avoidShiftPatten2{s in Staff, d in firstDate..endDate-1}: sum{(d1, t) in {(d, "夕"), (d, "夜"), (d+1, "朝")} :(d1,t) in BusinessHour}
    assignShiftSchedule[d1,t,s]<=1;
s.t. avoidShiftPatten3{s in Staff, d in firstDate..endDate-1}: sum{(d1, t) in {(d, "夜"), (d+1, "朝"), (d+1, "夕")} :(d1,t) in BusinessHour}assignShiftSchedule[d1,t,s]<=1;

solve;
# 出力
for{d in Date}{
    printf "%2d ", d;
    for{t in TimeSlot : (d,t) in BusinessHour}{
        printf{s in Staff : assignShiftSchedule[d,t,s]==1}" %s", s;
    }
    printf "\n";
}

data;
# 期間の最初の日付と最後の日付
param firstDate:=1; 
param endDate  :=13;
# スタッフ名と最大勤務日数
param : Staff : maxWorkingDays :=
"A"  9
"B"  9
"C"  9
"D"  9
;
# 営業時間帯
set BusinessHour :=
(1, *) "朝" "夕" "夜"
(2, *) "朝" "夕" "夜"
(3, *) "朝" "夕" "夜"
(4, *) "朝" "夕" "夜"
(5, *) "朝" "夕" "夜"
(6, *) "朝" "夕"
# 7日は休業
(8, *) "朝" "夕" "夜"
(9, *) "朝" "夕" "夜"
(10, *) "朝" "夕" "夜"
(11, *) "朝" "夕" "夜"
(12, *) "朝" "夕" "夜"
(13, *) "朝" "夕"
;
# スタッフが従事する時間帯を指定
set FixOnDuty :=
(1, "朝", "A")
(1, "夕", "B")
(1, "夜", "C")
;
# スタッフが出勤できない時間帯を指定
set FixOffDuty :=
(2, *, "A") "朝" "夕" "夜"
(3, *, "B") "朝" "夕" "夜"
;
```

[GLPKによる勤務シフト表の作成1(4)](http://qiita.com/ki073/items/28abdfc5733997538dc8)->
「IT業界」と「建築業界」の違い

<br/>
**※一応、設計についての話です。**
<br/>

「IT業界」と「建築業界」は、よく並べられて例えられる。
けど、そこまで根付いてないような感じがするので、自分なりに分析。


##■家に入るためのドアには「鍵」がついている
- 鍵式なのか、カード式なのか、入力式なのか、指紋認証なのか...
- これは、ITでいうところの**認証**に当たる。
    - ID/PASS、端末認証、SSO...

##■家には「間取り」という概念が存在する
- キッチンやリビングや寝室。それぞれの機能を果たしてる。
- これは、ITでいうところの**サブシステム**に当たる。
    - ログイン、ユーザ登録、住所検索.....

##■家には「寿命(耐用年数)」がある
- 建築基準法によって色々あるとは思うけど、大体100年くらい持つはず。メンテナンス方法も定義されてるはず。
- これは、ITでいうところの**運用期間**に当たる。
    - 何年耐えられる設計にするのか、もし何か障害が発生した時にどう対処するのか...

##■家を建てるには「道具と技術」が必要
- 釘や金槌、トラクターやクレーン車...
- これは、ITでいうところの**IDEや言語**に当たる。
    - EclipseでJava開発したり、PyCharmでPython開発したり...

##■「決定的に違う事」
- 建築で失敗したら人が死ぬ。
- システムで失敗しても人は死なない。
    - ただ、**損害賠償が発生**するので、会社経営が傾き、社員の首を切らなければならない状況が発生しうる。

##■問題点
- IT業界にはこの考えを持っている人が少ない。
    - そもそも別の業界なので考えなくていいのかもしれない。けど、本質としては同じはず。
- 結果として、以下のような事が生じる。
    - 認証方法が曖昧
    - サブシステム間の連携が取れてない
    - 保守性や拡張性、耐障害性や将来性を見こした設計になっていない
    - 責任意識が低く、責任の押し付け合いが発生

<br/>
****
<br/>

建築で考えたら簡単な事なのに、
何でIT業界だと上記のような問題が発生するのか.....

ちゃんと設計しろよ。

謎です。
DockerでMEGADOCKのサンプルを動かす

## MEGADOCK

<img src="https://qiita-image-store.s3.amazonaws.com/0/151065/ed5032e5-2583-d41a-d8ea-a8f9d3531696.png" width="500px">

* タンパク質ドッキングによるタンパク質間相互作用予測ソフトウェア
* FFTによるグリッドベースの高速なドッキング計算
* OpenMP/MPI/GPUによる高速化

----

## SIGBIO49

<img src="https://qiita-image-store.s3.amazonaws.com/0/151065/635ced3f-ed26-55e2-49f9-ac8187f7d4ef.png" width="500px">

* Docker + MEGADOCK + MPI/GPU + クラウド環境 + 性能評価
  - SIGBIO49@JAIST(2017/03/23)
  - SpeakerDeck: https://speakerdeck.com/metavariable/evaluation-of-container-virtualized-megadock-system-in-distributed-computing-environment

----
## 物理1ノード上の性能比較

<img src="https://qiita-image-store.s3.amazonaws.com/0/151065/c55600a2-7487-3050-28d0-1eec1cfdaefd.png" width="500px">

* CPU(MPI)版の実行はDocker版が若干遅く
* GPU版は、ほぼ差はない

----
## クラウド環境上でMPI並列実行

<img src="https://qiita-image-store.s3.amazonaws.com/0/151065/50acef7a-9232-f02a-160f-e931ba02f4fe.png" width="500px">

* 16 threads / 4 MPI process / 1 Container / 1 VM
* DockerSwarmでコンテナ間ネットワークを構築

----
## クラウド上のMPI並列実行の結果

<img src="https://qiita-image-store.s3.amazonaws.com/0/151065/9860db1c-3b99-cd51-ec23-b2f322fca050.png" width="600px">

* VM版とDocker on VM版でスケーラビリティはほぼ同じくらい

----

# DockerでMEGADOCKのサンプルを動かす

----
## 1. （前提条件）Docker Engineを導入

公式Docker Docsに従って導入する
https://docs.docker.com/engine/installation/

* 今回は詳細は省略
* 要：管理者権限
  - 現時点でDockerの実行は管理者権限が必須
  - Docker互換のOSSツールなどはある
- ホストOSのカーネルバージョンが古いと入れられない場合がある

----

## 2. とりあえずMEGADOCKサンプルを動かす

MEGADOCKをビルド済みのコンテナイメージをDockerHubからダウンロードしてサンプルを実行をする
(https://github.com/metaVariable/Megadock-Docker)

```docker run -it meta1127/megadock-docker  \
  mpirun -n 4 megadock-dp -tb SAMPLE.table
```

* 内部処理
    1. コマンド実行
    2. ローカル環境に指定されたコンテナイメージがなければ、DockerHubからダウンロード
    3. ダウンロードしたコンテナイメージから、コンテナのプロセスを生成
    4. プロセス内でサンプルを実行

* 今回は余計なものがない、シングルノード上のサンプル実行用のイメージ
* 研究報告ではSSH鍵登録なども行ったコンテナイメージで複数ノードのMPI並列実行

----

## デモ

![demo.png](https://qiita-image-store.s3.amazonaws.com/0/151065/3b35e35e-dedf-458d-e35a-aa1a805d81db.png)

----

## 3. 研究の再現性

GitHub <---> DockerHub の連携

* GitHubのリポジトリを更新するとDockerHubのコンテナイメージを自動的に更新できる
* コードの更新と同時にコンテナイメージの作成とテストコードの実行なども可能
* 担当者がいなくなったあともコードと実行環境を保持できる

----

## 4. Dockerは便利

* 拾ってきたアプリを触ってみるとき
    - 適当なOSイメージに、適当にライブラリを入れて、ビルドできるか試せる
        - 失敗したらコンテナを破棄すればよい
    - 誰かが作成したコンテナのイメージを使うと、ビルドせずに試せる（GitHubやDockerHubに多くある）

* 別のマシンと環境を共有したいとき
    - 構築済みの環境を他の人にそのまま手渡せる
    - 環境の構築をコード化して画一的に管理できる（Dockerfile）
Array#permutation で覆面算を解く

# 動機

覆面算（ふくめんざん）と呼ばれる一種の算数パズルがある。

下図はその一例。

<pre>
    A B
+)  B C
--------
  A D D
</pre>

二桁＋二桁の足し算の筆算の形をしていて，数字が文字という覆面で覆い隠されている。この式が成り立つような A〜D を，以下のルールのもとに求めよ，という問題だ。

- すべての文字は 0 から 9 までの数字のどれかを表す。
- 同じ文字は同じ数字を表す。
- 異なる文字は異なる数字を表す。
- 数の表記で先頭に 0 が来ることはない（今の場合，A, B はゼロではない）

上に掲げた覆面算は，しらみつぶしに調べなくても理詰めで一意の解にたどり着くので，ぜひ考えてみてほしい。

この記事では，計算機にあらゆる数の組み合わせをしらみつぶしに調べさせて解を求めることにする。

# 方針

こんなふうにしたい。

0 から 9 までの 10 個の数から四つを取り出し，A〜D にあてる。これを，あらゆるパターンについてやる。

A や B が 0 の場合を排除する。

以上で，先に掲げた四つのルールは満たされる。

あとは筆算の式が成り立つときに A〜D の組み合わせを表示するだけ。

# 作譜

Ruby の [`Array#permutation`](https://docs.ruby-lang.org/ja/2.6.0/method/Array/i/permutation.html) を使えばアホみたいに簡単だ。

このメソッドは，要するに〈配列から n 個の要素を取り出して並べた配列〉を網羅的に作ってイテレート（繰り返しブロック実行）してくれるもの。

こうなる：

```rb
[*0..9].permutation 4 do |a, b, c, d|
  next if a.zero? || b.zero?
  if (10 * a + b) + (10 * b + c) == (100 * a + 10 * d + d)
    puts "A=#{a}, B=#{b}, C=#{c}, D=#{d}"
  end
end
```

条件式の `( )` は分かりやすさのためにつけただけで，無くてもいい。

# 感想

当初 `Array#permutation` の存在を忘れていて，自分で実装した。まあ数行で書けるけど，動作が正しいことを確信するのに少し時間がかかった。それに，書き捨てプログラムとはいえ，どういうメソッド名にしてよいか悩んだ。

もしや，と思って公式リファレンスマニュアルで Array クラスを調べたら，あった。

Ruby の組み込みクラスには，こういう「あってもよくね？」的なメソッドがてんこ盛りに詰め込まれている。

感想：Ruby ばんざい
AndroidStudio2.3後のbuilt gradleでjava.lang.UnsupportedClassVersionError: com/android/build/gradle/AppPlugin : Unsupported major.minor version 52.0と怒られる場合

###JDKのバージョンを最新にすると直る
1.8.0以上をダウンロード
http://www.oracle.com/technetwork/java/javase/downloads/index-jsp-138363.html

以上。
HerokuでRedisを使う


`heroku-redis`というアドオンが無料で使える。

インストール（`{app_name}`はHeroku上のアプリ名）

```
$ heroku plugins:install heroku-redis --app {app_name}
```

REDIS_URLは自動的に設定される。

```
$ heroku config --app {app_name} | grep REDIS
REDIS_URL:                    redis://h:pe1xxxxxxxxxxxxx@ec2-54-225-230-xx.compute-1.amazonaws.com:22309
```

Redisインスタンスの情報を確認

```
$ heroku redis:info -app {app_name}
=== redis-opaque-57036 (REDIS_URL)
Plan:               Hobby Dev
Status:             available
Created:            2017-01-09 08:37 UTC
Version:            3.2.4
Timeout:            300
Maxmemory:          noeviction
Maintenance:        not required
Maintenance window: Fridays 19:00 to 23:00 UTC
Persistence:        None
```

上の例の`redis-opaque-57036`というのが下に出てくる`{redis_name}`になる。[こちら](http://www.bokukoko.info/entry/2015/09/05/Heroku_Redis_%E3%81%AF%E5%88%9D%E6%9C%9F%E8%A8%AD%E5%AE%9A%E3%81%A7%E5%88%A9%E7%94%A8%E3%81%97%E3%81%A6%E3%81%AF%E3%81%AA%E3%82%89%E3%81%AA%E3%81%84)を参考にして、タイムアウトとメモリ不足時の処理を設定する。

```
$ heroku redis:timeout {redis_name} --seconds 60 --app {app_name}
$ heroku redis:maxmemory {redis_name} --policy volatile-lru --app {app_name}
```

Redis CLIで接続

```
$ heroku redis:cli --app {app_name} --confirm {app_name}
```
nasa space apps challenge その9

#概要
nasa space apps challenge に行けないので、勝手にハッカソンしてみる。
jsonをnode-redで永続化してみた。

#写真
![jj.JPG](https://qiita-image-store.s3.amazonaws.com/0/18104/3fc552ef-02e8-6280-6c20-b76dae12c115.jpeg)

#global0

```
context.global.data = msg.payload.json;  
msg.res.header('Access-Control-Allow-Origin', '*');
msg.res.send("{}");
return msg;
```

#global1

```
msg.res.header('Access-Control-Allow-Origin', '*');
var data = context.global.data;
msg.res.send(JSON.stringify(data));
return msg;
```

#サンプルコード

```
function get() {
    var now = new Date();
    $.ajax({
        type: 'GET',
        url: 'http://ohijs0.paas.jp-e1.cloudn-service.com/getdb?' + now,
        success: function(res) {
            document.getElementById("src").value = res;
        },
        error: function(res) {
            alert('err1');
        }
    });
}
function put() {
    var src = document.getElementById("src").value;
    var json = JSON.parse(src);
    json.push({
        "name": "test1",
        "body": "desu1"
    });
    var str = JSON.stringify(json);
    $.ajax({
        type: 'POST',
        url: 'http://ohijs0.paas.jp-e1.cloudn-service.com/putdb',
        dataType: 'json',
        data: {
		    json
	    },
        success: function(data) {
            alert("ok");            
        },
        error: function(res) {
            alert("err0");
        }
    });
}
```
GLPKによる勤務シフト表の作成1(2)

###目次
[GLPKによる勤務シフト表の作成1(1)　(基礎編)](https://qiita.com/ki073/items/a8b26883e931e4bf6584)　(2)←ここ　[(3)](https://qiita.com/ki073/items/119edcc7fab2491892d2)　[(4)](https://qiita.com/ki073/items/28abdfc5733997538dc8)
[GLPKによる勤務シフト表の作成2](https://qiita.com/ki073/items/d45cd648e0625c488ee6) (2日連続して勤務する場合の勤務シフト)
## データセクションでの指定
モデルとデータを別のファイルにすることができますが、data;行で分けることで1つのファイルに記入できます。
モデル部分とデータセクションによってデータの書き方が全く違いますので気をつけてください。

前回から
 営業時間帯の指定
 スタッフの従事時間帯、休みの指定
ができるようになっています。

データの後に;が付いていますので忘れないように。

データセクションの書き方はGLPKに同梱されているgmpl.pdfの「5 Model data」に詳しく書かれていますので参考に。
営業時間帯を指定できるようになりましたので、エラーを回避するために
`: (d,t) in BusinessHour`
が追加されている部分があります。

## 改良版

```GLPK:shift2.model
# version 0.11
# シフト表作成
param firstDate; # 期間の最初の日付
param endDate;   # 最後の日付
set Date := firstDate..endDate; # 期間内の日付
set TimeSlot := {"朝", "夕", "夜"}; # シフト時間枠
set Staff; # スタッフ名
param maxWorkingDays{Staff}; # 各スタッフの最大勤務日数
set BusinessHour dimen 2; # 営業時間帯
set FixOnDuty dimen 3;    # 勤務時間帯
set FixOffDuty dimen 3;   # 非番時間帯
# 日付,シフト時間枠,スタッフの配列を確保、出勤の割り当ては1が入る
var assignShiftSchedule{BusinessHour, Staff} binary;

# シフト時間枠に必ず1人従事
s.t. keepStaffInTimeSlot{(d,t) in BusinessHour}: sum{s in Staff}assignShiftSchedule[d,t,s]==1;
# 出勤は1日1回以下
s.t. avoidShiftPatten1{s in Staff, d in Date}: sum{(d,t) in BusinessHour}
    assignShiftSchedule[d,t,s]<=1;
# 各スタッフの最大勤務日数で制限
s.t. restrictMaxWorkDays{s in Staff}: sum{(d,t) in BusinessHour}
    assignShiftSchedule[d,t,s]<=maxWorkingDays[s];
# 連続勤務は3日以下
s.t. keepOffDay{s in Staff, d in firstDate..endDate-3}: sum{t in TimeSlot, d4 in d..d+3 : (d4,t) in BusinessHour}
    assignShiftSchedule[d4,t,s]<=3;
# 翌日の勤務時間帯を制限
s.t. avoidShiftPatten2{s in Staff, d in firstDate..endDate-1}: sum{(d1, t) in {(d, "夕"), (d, "夜"), (d+1, "朝")} :(d1,t) in BusinessHour}
    assignShiftSchedule[d1,t,s]<=1;
s.t. avoidShiftPatten3{s in Staff, d in firstDate..endDate-1}: sum{(d1, t) in {(d, "夜"), (d+1, "朝"), (d+1, "夕")} :(d1,t) in BusinessHour}assignShiftSchedule[d1,t,s]<=1;
# スタッフが従事する時間帯を指定
s.t. fix1{(d,t,s) in FixOnDuty}: assignShiftSchedule[d,t,s]=1;
# スタッフが出勤できない時間帯を指定
s.t. fix2{(d,t,s) in FixOffDuty}: assignShiftSchedule[d,t,s]=0;

solve;
# 出力
for{d in Date}{
    printf "%2d ", d;
    for{t in TimeSlot : (d,t) in BusinessHour}{
        printf{s in Staff : assignShiftSchedule[d,t,s]==1}" %s", s;
    }
    printf "\n";
}

data;
# 期間の最初の日付と最後の日付
param firstDate:=1; 
param endDate  :=13;
# スタッフ名と最大勤務日数
param : Staff : maxWorkingDays :=
"A"  9
"B"  9
"C"  9
"D"  9
;
# 営業時間帯
set BusinessHour :=
(1, *) "朝" "夕" "夜"
(2, *) "朝" "夕" "夜"
(3, *) "朝" "夕" "夜"
(4, *) "朝" "夕" "夜"
(5, *) "朝" "夕" "夜"
(6, *) "朝" "夕"
# 7日は休業
(8, *) "朝" "夕" "夜"
(9, *) "朝" "夕" "夜"
(10, *) "朝" "夕" "夜"
(11, *) "朝" "夕" "夜"
(12, *) "朝" "夕" "夜"
(13, *) "朝" "夕"
;
# スタッフが従事する時間帯を指定
set FixOnDuty :=
(1, "朝", "A")
(1, "夕", "B")
(1, "夜", "C")
;
# スタッフが出勤できない時間帯を指定
set FixOffDuty :=
(2, *, "A") "朝" "夕" "夜"
(3, *, "B") "朝" "夕" "夜"
;
```

[GLPKによる勤務シフト表の作成1(3)](http://qiita.com/ki073/items/119edcc7fab2491892d2)->
Unity + NGUI で任意の形に表示領域を制限する

# はじめに

* NGUI の UIPanel の Clipping 機能を使うと、子要素の表示領域を制限することができる。
* 表示領域は幅と高さを設定して四角く指定するか、テクスチャを渡してアルファ値で透過非透過を指定できる。
* 今回はテクスチャを動的に生成して UIPanel に渡して Clipping することで任意の形に表示領域を制限してみる。

# 環境

* Unity 5.5.2f
+ NGUI 3.11.2

# コード

```c#
using UnityEngine;

public class Cliptest : MonoBehaviour
{
	public UIPanel panel;
	public int width = 300;
	public int height = 300;

	void Start ()
	{
		ClipTexture ();
	}

	public void ClipTexture ()
	{
		// テクスチャの作成
		var t = new Texture2D (width, height, TextureFormat.ARGB32, false);

		// テクスチャの設定
		t.filterMode = FilterMode.Point;
		t.wrapMode = TextureWrapMode.Clamp;

		// 隠す部分の色
		var mask = new Color (0, 0, 0, 0);
		// 表示する部分の色
		var transparent = new Color (1, 1, 1, 1);

		for (int y = 0; y < height; y++)
		{
			for (int x = 0; x < width; x++)
			{
				if (y == 0 || x == 0 || y == height - 1 || x == width - 1)
				{
					// テクスチャの端が透過だと端の座標を含んでいる要素が全て表示されてしまう
					// 端を非透過にすることでテクスチャの範囲できれいに隠すことができる
					t.SetPixel (x, y, mask);
				}
				else if ((x < width / 2 && y < height / 2) || (x >= width / 2 && y >= height / 2))
				{
					t.SetPixel (x, y, mask);
				}
				else
				{
					t.SetPixel (x, y, transparent);
				}
			}
		}

		// テクスチャへの変更の適用
		t.Apply ();

		// テクスチャでクリッピング
		panel.clipTexture = t;
		panel.clipping = UIDrawCall.Clipping.TextureMask;
	}
}
```

# 実行結果

### Clipping 前

<img width="113" alt="スクリーンショット 2017-03-25 9.31.26.png" src="https://qiita-image-store.s3.amazonaws.com/0/17778/5e1421b4-09af-f6a2-645b-0c0012a00b37.png">

### Clipping 後

<img width="82" alt="スクリーンショット 2017-03-25 9.31.40.png" src="https://qiita-image-store.s3.amazonaws.com/0/17778/95e64f2e-5cef-33de-1cd7-41381b6c326b.png">

### Clipping 後の Inspector

<img width="363" alt="スクリーンショット 2017-03-25 9.32.04.png" src="https://qiita-image-store.s3.amazonaws.com/0/17778/35e12b73-86cb-3666-a2ad-94b8dccce973.png">
【Unity】画像のクロスフェードをシェーダで行う

Unity C# で静止画をクロスフェードします。

・環境
Unity 5.5.0f3

シェーダ

```Shader:CrossFade.shader
Shader "Custom/CrossFade" {

	Properties{
		_Color("Main Color", Color) = (1,1,1,1)
		_Blend("Blend", Range(0, 1)) = 0
		_Texture1("Texture 1", 2D) = ""
		_Texture2("Texture 2", 2D) = ""

	}

	SubShader{
		Pass{
			SetTexture[_Texture1]
			SetTexture[_Texture2]{
				ConstantColor(1,1,1,[_Blend])
				Combine texture Lerp(constant) previous
			}
		}
	}

}
```


サンプルプログラム

```C#:CrossFadeSample.cs
using UnityEngine;
using UnityEngine.UI;
using DG.Tweening;

public class CrossFadeSample : MonoBehaviour
{
	// クロスフェードに使用するImageオブジェクト
	[SerializeField]
	private Image ImageUI;

	// テクスチャ1枚目
	[SerializeField]
	private Texture Texture1;

	// テクスチャ2枚目
	[SerializeField]
	private Texture Texture2;

	// 変化の速度 (秒)
	[SerializeField]
	private float Speed = 2.0f;


	void Start()
	{
		// Imageのマテリアルを取得
		Material material = ImageUI.GetComponent<Image>().material;

		// ブレンド率を0.0に設定
		material.SetFloat("_Blend", 0.0f);

		// テクスチャを設定する
		material.SetTexture("_Texture1", Texture1);
		material.SetTexture("_Texture2", Texture2);

		// ブレンド率を操作する (DoTweenを使用しています)
		material.DOFloat(1.0f, "_Blend", Speed).SetLoops(-1, LoopType.Yoyo);
	}
}
```


サンプルプロジェクトファイルはこちら
https://github.com/Necotarou/CrossFadeSample
NetCommons3にデフォルトで用意されてるバリデーションメッセージ


プラグインの開発中にサクっと参照したくなったのでまとめてみた。

## 利用例
```

'location_name' => array(
	'notBlank' => array(
		'rule' => array('notBlank'),
		// __d()の第2引数以降はsprintfと同様
		'message' => __d('net_commons', 'Please input %s.', __d('reservations', 'Location name')),
		//'allowEmpty' => false,
		//'required' => false,
		//'last' => false, // Stop validation after this rule
		//'on' => 'create', // Limit validation to 'create' or 'update' operations
	),
),

```

## 定義済みメッセージ

GitHub上の最新ファイル : https://github.com/NetCommons3/NetCommons/blob/master/Locale/jpn/LC_MESSAGES/net_commons.po

下記は2017年3月24日現在の定義済みバリデーションメッセージです。

```
msgid "Invalid request."
msgstr "入力値が不正です。"

msgid "Please input %s."
msgstr "%sを入力してください。"

msgid "If it is not approved, comment is a required input."
msgstr "差し戻す場合は、必ずコメントを入力してください。"

msgid "Please enter comments to the person in charge."
msgstr "担当者へコメントがあれば、入力してください。"

msgid "Unauthorized pattern for %s."
msgstr "%sの書式が不正です。"

msgid "Unauthorized pattern for %s. Please input the data in %s format."
msgstr "%sの書式が不正です。%s形式で入力してください。"

msgid "Only alphabets and numbers are allowed."
msgstr "半角英数字を入力してください。"

msgid "Only alphabets, numbers and symbols are allowed."
msgstr "半角英数字または記号を入力してください。"

msgid "Only alphabets and numbers are allowed to use for %s."
msgstr "%sは半角英数字を入力してください。"

msgid "Only alphabets, numbers and symbols are allowed to use for %s."
msgstr "%sは半角英数字または記号を入力してください。"

msgid "Please choose at least %s characters string."
msgstr "%s文字以上で入力してください。"

msgid "Only numbers are allowed."
msgstr "数字を入力してください。"

msgid "Please enter more than %s."
msgstr "%s以上の数値を入力してください。"

msgid "The input %s must be a number bigger than %d and less than %d."
msgstr "%sは%d～%dまでの数値を入力してください。"
```
コマンドプロンプトに日時（タイムスタンプ）をつける

Linux&bashの場合`PS1`環境変数を変更することでコマンドプロンプトを変更できます。以下のようにすればコマンドプロンプトに日時（タイムスタンプ）をつけることができます。

```console:
$ PS1='\D{%c} \u@\h:\w\$ '
```

実行後はこんな感じです。

```console:
Fri Mar 24 05:42:49 2017 it@it:~$ PS1='\D{%c} \u@\h:\w\$ '
Fri Mar 24 05:42:51 2017 it@it:~$ 
Fri Mar 24 05:42:52 2017 it@it:~$ 
Fri Mar 24 05:42:52 2017 it@it:~$ 
Fri Mar 24 05:42:52 2017 it@it:~$ 
Fri Mar 24 05:42:52 2017 it@it:~$ 
```

もうちょい短くするなら`PS1='\D{%F %T} \u@\h:\w\$ '`とすれば、以下のような感じにちょい短くなります。

```console:
$ PS1='\D{%F %T} \u@\h:\w\$ '
2017-03-24 05:43:39 it@it:~$
```

さらに短くするなら`PS1='\D{%y%m%d%H%M%S} \u@\h:\w\$ '`とすればシリアル番号みたいに短くなります。

```console:
$ PS1='\D{%y%m%d%H%M%S} \u@\h:\w\$ '
170324054411 it@it:~$ 
170324054412 it@it:~$ 
```

それはさすがに…ということなら`PS1='[\D{%c}]\n\u@\h:\w\$ '`のように改行コード（`\n`）を挟んで2行にしちゃうという手もあります。冗談のような話ですが実際に使ってみると思ったほどは気にならないので、私は案外これが好きだったりします。

```console:
$ PS1='[\D{%c}]\n\u@\h:\w\$ '
[Fri Mar 24 05:45:52 2017]
it@it:~$ 
[Fri Mar 24 05:45:52 2017]
it@it:~$ 
```

こうゆう設定をすると場所をとるといえばとるのですが、ターミナル＆コピー＆ペーストで、いつ何をしてどうゆう結果になったのか、といった記録を残す時とかは便利かなと思います。
TensorFlow > link > Ubuntu 14.04とTensorFlow (v0.12からv1.0.1)でのエラー

[小池誠さんのtwitterでリンクされていた](https://twitter.com/ike_jpn/status/838805853604036609)気になる情報。
https://github.com/tensorflow/tensorflow/issues/6968

詳細は読み切れていないが、Ubuntu 14.04とTensorFlow (v0.12からv1.0.1)でエラーが出るようだ。
Ubunt 16.04ではエラーが出ないらしい。

現在使用しているTensorFlowはv0.11で、バージョンアップを検討していたが、OS変更も必要となると、それなりの時間を確保しておかないと失敗しそうだ。

> jtoy commented 15 days ago
> As of march 9, i get this error testing on im2txt on all docker images up to 1.0.1, but the error is not in latest-devel

という記載もあり、最新の開発版なら14.04でも大丈夫なのだろうか。
技術英語 > something [akin to] printing Some error occurred / His interests are akin to mine. / You're not alone in that thinking.

@ Introducing Python: Modern Computing in Simple Packages by Bill Lubanovic
(No. 2907 / 12833)

> something **akin to** printing Some error occurred

例外を全部一緒くたにキャッチして扱うことは、エラーが出たらとにかく「Some error occurred」を出力する、ということに似ているとのこと。

https://www.merriam-webster.com/dictionary/akin
> :  essentially similar, related, or compatible 
His interests are akin to mine.

<hr>
関連して思い出したのは

> You're not alone in that thinking.

http://qiita.com/7of9/items/f52e54b15b972f3a3147
GoでMonad っぽく

# GoでMonad っぽく

GoでもMonadライブラリ書いている人もいるけど、言語のサポートがないので実用で使いたいものは見つからない。
しかし、実用で使えるエッセンスは取り入れられるはず、、ということでMonadっぽいデザインパターンを考えてみた。
厳密にはモナドではないけど、役に立つはず、、

# Maybeモナド

計算の途中結果がnilになるかもしれない場合の処理を綺麗に書く。

https://wiki.haskell.org/All_About_Monads#Do_notation の羊さんの例

ポイント

Nil相当のstructを用意して、nilの場合は代わりにそれを返す

``` go
package main

import (
	"fmt"
)

type Sheep struct {
	Name   string
	Father *Sheep
	Mother *Sheep
}

var NilSheep *Sheep = &Sheep{Name: "Nothing"}

func MaybeSheep(s *Sheep) *Sheep {
	if s == nil {
		return NilSheep
	}
	return s
}

func Mother(s *Sheep) *Sheep {
	return MaybeSheep(s.Mother)
}

func Father(s *Sheep) *Sheep {
	return MaybeSheep(s.Father)
}

func MaternalGrandfather(s *Sheep) *Sheep {
	m := Mother(s)
	return Father(m)
}

func MothersPaternalGrandfather(s *Sheep) *Sheep {
	m := Mother(s)
	f := Father(m)
	return Father(f)
}

func main() {
	bob := &Sheep{
		Name:   "bob",
		Father: NilSheep,
		Mother: NilSheep,
	}
	alice := &Sheep{
		Name:   "alice",
		Father: bob,
		Mother: NilSheep,
	}
	charie := &Sheep{
		Name:   "charie",
		Father: NilSheep,
		Mother: alice,
	}
	fmt.Println(MaternalGrandfather(charie).Name)
	fmt.Println(MothersPaternalGrandfather(charie).Name)
}
```

Nil相当のstructがimmutableでないのが気に入らないが、
関数で返してあげても良いかも

``` go
func NilSheep() *Sheep {
    return &Sheep{Name: "Nothing"}
}
```

# Errorモナド

ContextでErrorの値を引き回す
エラーなら処理をしない


``` go
package main

import (
	"fmt"
)

type Context struct {
	Err error
}

func doTaskA(context *Context) {
	if context.Err != nil {
		return
	}
	fmt.Println("Task A")
}

func doTaskB(context *Context) {
	if context.Err != nil {
		return
	}
	context.Err = fmt.Errorf("failed task B")
}

func doTaskC(context *Context) {
	if context.Err != nil {
		return
	}
	fmt.Println("Task C")
}

func main() {
	context := &Context{}
	doTaskA(context)
	doTaskB(context)
	doTaskC(context)
}
```

# その他のモナド

IOモナドとかStateモナドは、Goだとシンプルにかけるし困ってないのでいらないかな、
参照透過性を保つメリットはあるかもしれないけどオーバーヘッドが大きすぎて実用にならなそう。

何か他にGoで便利なやつあるでしょうか、
こうしてみると、GoはMonadいらないかもしれないですね、

個人的には、関数ではnilを返さないようにすると全体が綺麗に書けるというのが発見でした。
（当たり前か、、）
rails sしようとしたらmysqlのエラーが出てしまう時の対処法

#前置き
初心者なのもありMySQLのエラーですごく苦労したのでメモの意味も含めて記事を書かせて頂きます。もしツッコミどころがありましたら、是非ともコメントお願い致します！

#以下エラーの内容とその解決方法

チーム開発をしている中、急に```rails s```をすると下記のようなエラーが出るようになってしまいました。

```
ActionView::Template::Error (Mysql2::Error: Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated column 'practice_development.test.id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by):
42: 		<div id="navbar" class="navbar-collapse collapse">
43: 			<ul class="nav navbar-nav">
44: 				<li>

以下中略
```

原因としては5.7以上のMySQLを使用しているとsql_modeの初期設定が変わっているためエラーが起こるとのこと。

このエラー文でググったところ見事に分かりやすい記事がヒットしました！！
http://qiita.com/bboobbaa/items/9fdca834076cb4c3389e


上記のサイトを参考にしてまずはターミナル上でmy.cnfファイルがないか確かめます。

```
mysql --help | grep my.cnf
```

するとこんな感じでどこにmy.cnfがあるか分かります、、

```
                      order of preference, my.cnf, $MYSQL_TCP_PORT,
/etc/my.cnf /etc/mysql/my.cnf /usr/local/etc/my.cnf ~/.my.cnf 
```

なのでmy.cnfがありそうなところにcd /usrして上記のパスを参考にして探すのですがなんと僕のPCにはmy.cnfファイルが存在しませんでした（泣）

という訳で適当にcd /usr/local/etcまで移動してmy.cnf作成しましょう。こちらは ```touch my.cnf``` で作成できます。そして中身を編集します。

```my.cnf
[mysqld]
user = mysql
port = 3306
datadir = /var/lib/mysql
socket  = /var/lib/mysql/mysql.sock
symbolic-links = 0
character-set-server = utf8
skip-character-set-client-handshake
sql_mode = ""

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
```

こちらはvimコマンドかファイルをエディタから開いて編集してください。

その後mysql.server restartと打ち込み、改めて```rails s```すればうまくいくはずなのですが僕の場合違うエラーが出てしまいました。mysql.server restartが全然始まらず```rails s```では下記エラーが出てしまいました。。

```
Mysql2::Error: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) (Sequel::DatabaseConnectionError)

```

筆者は以下のようにsocketのパスを変えた上で、いらなさそうな記述をなくしたところrails sできるようになりました。もちろんファイル更新後mysql.server restartは忘れずにお願いします。

```my.cnf
[mysqld]
socket  = /tmp/mysql.sock
sql_mode = ""
```

おそらく```socket  = /var/lib/mysql/mysql.sock```というのはwindowsのsocketのパスかなと思いました。Macの場合ですと```socket  = /tmp/mysql.sock```がsocketのパスなのでこれで解決できるかと思います。

#もし上記の手順でやってみてもエラーになってしまう場合
この場合はおそらくmysqlコマンドもエラーになっているはずです(なのでMySQLサーバーの停止ができない)。
まずは```ps aux|grep mysql```と打ち込んでみましょう。これによりmysqlのプロセスを確認できます。

おそらくいらない番号のプロセスがあるはずなのでそいつらをkillコマンドで削除する。
例

```
kill 4795
```

参考リンク先→ http://qiita.com/yukihigasi/items/a1c84b14ad6807896003

削除後、再度```mysql.server restart```で解決。無事に```rails s```できるようになるはずです。
WordPressのtag名を記事タイトルに表示させる方法

#したいこと
WordPressのtag名を記事タイトルに表示させたい

#解決方法
WordPress独自のテンプレートタグ「get_the_tags」を使用してタグデータを取得。
取得したタグデータを、foreachで回して、欲しいタグ名を条件分岐で取得する


##完成したコード
```PHP:PHP
<h1 class="entry-title"><?php the_title(); ?><?php
  $post_tags = get_the_tags();
  if($post_tags){
    foreach($post_tags as $tag){
      if($tag -> name !== 'PR') continue;
      echo '['.$tag -> name.']';
    }
  }
?></h1>
```
##コード解説

###1.「get_the_tags」でtagデータを取得して、$post_tagsという変数に値を入れる

```PHP:
<?php
  $post_tags = get_the_tags();
```
###ex)取得できるデータ[引用元](http://sbs.ciao.jp/it/544/)
<img width="580" alt="9a23351ab8b8193070ecc0b76e70e134.png" src="https://qiita-image-store.s3.amazonaws.com/0/20635/ce748b74-72b9-6b62-f047-6cb4f8adf1aa.png">


###２.条件分岐でタグデータがあるか判断する。trueならば中の処理が走る

```PHP:
<?php
  if($post_tags){
```


###３.foreachでタグデータを全て取得する。

```PHP:
<?php
　　　　foreach($post_tags as $tag){
```


###４.取得されたタグデータから、条件分岐で「name」プロパティーの「PR」名が一致する値だけを取得する
　　if($tag -> name == 'PR') break;　でもいけそうな気がするが未検証。

```PHP:
<?php
　　　if($tag -> name !== 'PR') continue;
```

###５.echoで表示させる。　
'['.$tag -> name.']'　の箇所までが表示部分

$tag -> '['name.']'　で書くと表示されない


```PHP:
<?php
　　　echo '文字列'.$tag -> name.'文字列';
```

###6.改行が入るので注意が必要

開始タグ、終了タグのh1とphpの改行の間に、空欄が入ってしまう。

```PHP:
<h1 class="entry-title"><?php the_title(); ?>
  <?php
    ..........
     ............
      .............
  ?>
</h1>
```

正しい書き方

```PHP:
<h1 class="entry-title"><?php the_title(); ?><?php
  ..........
   ............
    .............
?></h1>
```

#まとめ
PHPはRubyと比べるとめんどくさい。。です。

#コメント
初心者の方には、ペアプロはおすすめだと思います！

理由は、パートナーの、エラー（課題）に対しての解決プロセス（エラー → 課題定義 → 検証）を体感できるから。相手のスピードに追いつこうと試みるので、必然的に同じプロセスを踏もうとするので自然と早くなる感じでです。　（うまく表現できないのですが。。）

プログラミングは、課題解決の連続なので、Σ(ﾟДﾟ；≡；ﾟдﾟ) 
課題解決プロセスを身に付けたい、スピードアップしたいならペアプロはとても良い!!´⊙ω⊙`

習うより慣れろ。　です。
ubuntu16.4でGRUBのメニュー待機時間を変更する

### GRUBのメニュー待機時間を30秒から5秒に変更する。

- 具体的には、下にある30秒を5秒に変更する

```/boot/grub/grub.cfg
terminal_output gfxterm
if [ "${recordfail}" = 1 ] ; then
  set timeout=30
else
```
"sudo vim /etc/default/grub"
を実行して、ファイルに以下を追加し、保存する。
**GRUB_TIMEOUTが既にある場合は値を書き換える。**

```
GRUB_TIMEOUT=5
GRUB_RECORDFAIL_TIMEOUT=5
```
- grubを更新する。

```shell-session
sudo update-grub
```
- ファイルを確認する。

```/boot/grub/grub.cfg
terminal_output gfxterm
if [ "${recordfail}" = 1 ] ; then
  set timeout=5
else
```

変更されました。
Raspberry pi 3環境構築手順(メモ)

# やること
マウス・キーボード・ディスプレイレスでRaspberry pi 3にraspbianをインストールして、Macからvncとかで接続。



# 用意するもの
- Raspberry pi 3本体
- LANケーブルと、Macをつなぐアダプタ
- Mac(ラズパイの電力も供給可能)
- microSD4GB以上とmicroUSBケーブル

# 手順概要
- 本家は遅いので[東京ミラーからraspbianをDLする](http://ftp.jaist.ac.jp/pub/raspberrypi/raspbian/images/raspbian-2017-03-03/)
  - [liteのミラーはこちら](http://ftp.jaist.ac.jp/pub/raspberrypi/raspbian_lite/images/raspbian_lite-2017-03-03/)
- microSDにOSイメージを焼く
- sshディレクトリを作成する
- raspi本体に焼いたmicroSDとLANケーブルを指して電源を入れる
- ssh後avahiインストールと設定をする
- vncのインストールと設定をする


# 手順詳細

- DLしたraspiのImageファイルはZIP形式に見えるがtarでないと解凍できなかった

```
$ wget http://ftp.jaist.ac.jp/pub/raspberrypi/raspbian/images/raspbian-2017-03-03/2017-03-02-raspbian-jessie.zip
$ tar zxvf 2017-03-02-raspbian-jessie.zip
```

- 以下でmicroSDの位置を確認しunmount後Imageを焼く(以下は/dev/disk2の場合)

```
$ diskutil list
$ diskutil unmountDisk /dev/disk2
$ sudo dd if=~/Downloads/2017-03-02-raspbian-jessie.img bs=1m of=/dev/rdisk2
```

- 2016年の11/25以降のバージョンからデフォルトでsshがdisableになっているため[sshディレクトリをtop階層に置く事でboot時sshをenableにできる](http://qiita.com/torch32171/items/c816acd5afa45fddabfe)

- microSDをMacから外し、Raspi本体につけて起動し、ipを確認後ssh

```
$ arp -a
$ ssh pi@192.168.x.y
```

- sshできたら各種(パスワード変更、ロケール設定、ホスト名設定、wifi設定)設定を行う。mac側でインターネット共有をオンにする。

```
pi@raspi:$ sudo raspi-config
```

- avahiをいれてDHCP環境でもhostnameに.localをつけてssh可能にする

```
pi@raspi:$ sudo apt-get update
pi@raspi:$ sudo apt-get install avahi-daemon
pi@raspi:$ sudo apt-get install avahi-autoipd
pi@raspi:$ sudo insserv avahi-daemon
```

- /etc/network/interfacesを編集し `iface eth0 inet dhcp` とする

```
pi@raspi:$ sudo vi /etc/network/interfaces
pi@raspi:$ /etc/init.d/networkig restart
pi@raspi:$ ssh pi@raspi.local
```

- vncを入れて起動

```
pi@raspi:$ sudo apt-get install tightvncserver
pi@raspi:$ tightvncserver
```

- macの移動→サーバへ接続で以下を入力するとvncでraspiが展開される

```
vnc://raspi.local:5901
```

- ここまで出来たらLANケーブルで接続している限り外でもmacからラズパイにssh可能。

- あとは家などの作業時はvncでラズパイのデスクトップから無線LANを選択→パスワード入力でLANケーブルも不要になる
- BlueToothが付いているので、[ネットワークの存在しない場所でもBT経由のssh](http://qiita.com/macoshita/items/8d3e8e1dbf9367b34bdf)

- Thinkpadにもいれてみたくなったので以下手順

[ETCHERインストール](https://etcher.io/)
[ISOをミラーからDL](http://ftp.jaist.ac.jp/pub/raspberrypi/pixel_x86/images/pixel_x86-2016-12-13/)
ETCHERでISOを焼いてThinkpadでBoot。
[USBブートではなく内蔵HDDブートも可能](http://my-web-site.iobb.net/~yuki/2017-03/raspberry-pi/s600-pixel/)

- 上記ISOをVirtualBoxで指定してMacの仮想でも動作させることができた

- vnc接続時のディスプレイサイズはtightvncserverコマンドを直接書き換える



`pi@raspi:$ sudo vi /usr/bin/tightvncserver`

```
#
# Global variables.  You may want to configure some of these for your site.
#

pi@raspi:$geometry = "1024x768";
pi@raspi:$depth = 24;
pi@raspi:$desktopName = "X";
```

自動起動やlighdm(ディスプレイマネージャ)の設定はこちらを参考に
http://qiita.com/mt08/items/ae6fa258710579651a8f

# VNCより高速かつコピペもできるxrdp

```
pi@raspi:$ sudo apt-get update
pi@raspi:$ sudo apt-get install xrdp 
pi@raspi:$ sudo service xrdp start
```

Microsoft Remote Desktop Clientをダウンロードしてきて繋げる
色を16bitにするとWiFiでもサクサク