OmniAICreator/Qiita-1.07M huggingface dataset:
Windows10の不要なファイルを削除して空き容量を増やす

# 概要

Windowsを長いこと使っているといつの間にかディスクの空き容量が少なくなってきます。
ディスクのクリーンアップや不要なアプリケーションを削除しても何故か空き容量が増えないことがあります。
そんな時はWindowsのOSに隠されている不要ファイルを削除してみましょう。
環境によっては数GBの空き容量を増やすことができます。

# 注意事項

特殊なコマンドを使用して不要なファイルを削除するため実施は自己責任でお願いします。

# 削除するもの

* Windows Update のキャッシュファイル
* WinSxS の不要なコンポーネントファイル
* DNS レゾルバのキャッシュファイル
* Windows ストアのキャッシュファイル

# 削除方法

## Windows Update のキャッシュファイル

Windows Update を行うとキャッシュファイルが作られていきます。
キャッシュファイルは不要なので削除しましょう。

管理者権限で起動したコマンドプロンプトから操作していきます。

(1) Windows Update サービスを停止します。

```
net stop wuauserv
```

(2) 以下のフォルダーに含まれているファイルとフォルダーをすべて削除します。

```
C:\Windows\SoftwareDistribution\Download
```

(3) Windows Update サービスを開始します。

```
net start wuauserv
```

## WinSxS の不要なコンポーネントファイル

Windows のアプリケーションが使用する不要な古いコンポーネントファイルが `C:\Windows\WinSxS` に格納されています。
このフォルダーには数GBの不要なファイルが格納されていますが OS が管理しているフォルダーのため専用のコマンドから削除していきます。

以下のコマンドから古いコンポーネントファイルは残した状態で安全に不要なコンポーネントファイルが削除できます。

```
Dism.exe /online /Cleanup-Image /StartComponentCleanup
```

### すべての古いコンポーネントファイルも削除する

古いコンポーネントファイルを残す必要がない場合は以下のコマンドで削除します。

**※注意！インストール済みのサービスパックや更新プログラムのアンインストールはできなくなります。**

```
Dism.exe /online /Cleanup-Image /StartComponentCleanup /ResetBase
```

### サービスパック領域のコンポーネントファイルも削除する

サービスパックで使用している領域が不要な場合は以下のコマンドで削除します。

**※注意！サービスパックのアンインストールはできなくなります。**

```
Dism.exe /online /Cleanup-Image /SPSuperseded
```

## DNS レゾルバのキャッシュファイル

ネットワーク上のサーバーやWebを開くときに DNS レゾルバのキャッシュファイルが作られます。
不要なので削除しましょう。

```
ipconfig /flushdns
```

## Windows ストアのキャッシュファイル

Windows ストアアプリを使っている場合はストアアプリのキャッシュファイルを削除しましょう。

```
wsreset
```

# 結果

すべての削除コマンドを実行してキャッシュファイルをクリーンアップした結果、約8GBの空き容量を増やすことができました。
ディスクの空き容量が少なくて困っている方は自己責任でお試しください。

# 参考

[Windows10 隠れている不要ファイルを削除して容量確保](https://www.incmplt.net/2018/01/06/windows10-diet-portabook/)
Wwise Unity Integrationで音を鳴らす最小構成をつくる

##概略
WwiseというサウンドミドルウェアをUnityに組み込むことができるのですが、基本の確認のため、ただ１つの音を鳴らすだけの構成を作る方法をまとめました。
#目次
- 用語と全体像など
- 準備
- Wwiseでの作業
    - 各Unitを構成する
        - Audio
        - Events
        - SoundBanks
        - GameSyncs
    - EventとMusic Segmentを結びつける
    - EventとSoundBankを結びつける
- Unityでの作業
    - おまけ、オブジェクトクリックで音楽再生

##用語と全体像など

- State　状態。今回は１つだけつくります。
- Event　Play,Stopなど。今回はPlayのみのEventをつくります。
- Bank　StateやEventを一つにまとめたもの。

まずは、WwiseでStateとEventをオーサリング（構成）し、Bankファイルを生成します。
後半で、それをUnityで読み込み、StateとEventを指定して音楽を再生させます。


##準備
Wwise Launcherをダウンロードした後、WwiseとUnityでそれぞれプロジェクトを作成し、integrationを済ませます。
##Wwiseでの作業
###各Unitを構成する
それぞれのタブで、Unitを作成していきます。
()内はUnit名です。各自好きな名前をつけられます。
#####Audio
<img width="382" alt="スクリーンショット 2018-08-22 13.53.38.png" src="https://qiita-image-store.s3.amazonaws.com/0/223765/6e3220f6-1853-435a-8756-b54b96907d47.png">

- Interactive Music Hierarchy
    - Work Unit(Default Work Unit)
        - Music Segment(New Music Segment)
            - Music Track(New Music Track) wavファイルはここに配置します。

#####Events
<img width="383" alt="スクリーンショット 2018-08-22 13.53.51.png" src="https://qiita-image-store.s3.amazonaws.com/0/223765/8c600fef-68e4-3b21-a586-590e71eb3588.png">
- Events
    - Work Unit(Work UnitsDefault)
        - Event(New_Event)

#####SoundBanks
<img width="382" alt="スクリーンショット 2018-08-22 13.54.01.png" src="https://qiita-image-store.s3.amazonaws.com/0/223765/1fd37597-3fee-bbb7-c3d7-8453caffe147.png">

- SoundBanks
    - Default Work Unit
        - SoundBank(New_SoundBank)

#####Game Syncs
<img width="384" alt="スクリーンショット 2018-08-22 13.54.08.png" src="https://qiita-image-store.s3.amazonaws.com/0/223765/29b4507b-1946-f428-891b-e78d619b2452.png">

- States
    - WorkUnit(Default Work Unit)
        - State Group(New_State_Group)
            - State(New_State)

###EventとMusic Segmentを結びつける
New_Music_SegmentをPlayするようにEventと結びつけます。
<img width="498" alt="スクリーンショット 2018-08-22 14.10.01.png" src="https://qiita-image-store.s3.amazonaws.com/0/223765/96724ffe-e3f0-6e21-9fa2-c4c773bbb768.png">

###EventとSoundBankを結びつける
EventがSoundBankに出力するようにします。
<img width="272" alt="スクリーンショット 2018-08-22 14.11.18.png" src="https://qiita-image-store.s3.amazonaws.com/0/223765/81be80e0-15b0-8b35-8609-1c92daf32bb1.png">

##Unityでの作業
空のオブジェクトを作り、

- Ak State
- Ak Bank
- Ak Event

をアタッチし、それぞれのNameを設定します。
<img width="426" alt="スクリーンショット 2018-08-22 14.12.05.png" src="https://qiita-image-store.s3.amazonaws.com/0/223765/7242e8a0-3be1-582d-14f3-1766166dea80.png">


Editorを再生すると、音楽が流れます。
###おまけ、オブジェクトクリックで音楽再生
ここままだと、Editorの再生と同時に音楽が流れるので、オブジェクトをクリックしたときに再生されるように改良します。
SphereやCubeなどのオブジェクトを作成し、上記同様3つのスクリプトをアタッチします。
Ak EventのTrigger OnをAk Trigger MouseDownに設定し、同スクリプトをアタッチします。
<img width="426" alt="スクリーンショット 2018-08-22 14.26.57.png" src="https://qiita-image-store.s3.amazonaws.com/0/223765/6ebd80b8-e098-8b57-9b6b-30684dd6dd1b.png">

オブジェクトをクリックすると、音楽が流れます。
MilkcocoaをESP32(NefryBT)で使ってみる


Nefry BTでMilkcocoa使ってみたいという声があったので試してみました。

前提としてESP32向けのMilkcocoaライブラリが存在しないのでESP8266向けのライブラリをいじって試してみます。

前半は@306_sanさんの記事をもとに試してみています。

参考: [ESP32(ESP-WROOM-32)でMilkcocoaSDKを使う](https://qiita.com/306_san/items/d074199e6fb4c3d637ed)

## MilkcocoaのESP8266ライブラリ

https://github.com/milk-cocoa/Milkcocoa_ESP8266_SDK からダウンロードしてArduino IDEで読み込みます。

## ライブラリの中を変更

`/Users/foo/Documents/Arduino/libraries/Milkcocoa_Arduino_SDK-master/Adafruit_MQTT.cpp`

```
#include "include/Adafruit/Adafruit_MQTT.h"

#if defined(ARDUINO_ARCH_AVR)
#define strncasecmp strncasecmp_P
#define strncpy strncpy_P
#else
//#include "avr/dtostrf.h" //=>ここをコメントアウト
#endif
```

## Nefry BTで使ってみる

大元は部谷さんの[記事](http://blog.mlkcca.com/iot/milkcocoa-arduino/)のコードです。

```milkcocoa.ino
#include <Milkcocoa.h>
#include <WiFi.h>

#define MILKCOCOA_APP_ID      "APPID"
#define MILKCOCOA_DATASTORE   "DATASTORE_NAME"
#define MILKCOCOA_SERVERPORT  1883

const char MQTT_SERVER[] PROGMEM    = MILKCOCOA_APP_ID ".mlkcca.com";
const char MQTT_CLIENTID[] PROGMEM  = __TIME__ MILKCOCOA_APP_ID;

WiFiClient client;
Milkcocoa milkcocoa = Milkcocoa(&client, MQTT_SERVER, MILKCOCOA_SERVERPORT, MILKCOCOA_APP_ID, MQTT_CLIENTID);

void setup(){
  Serial.begin(115200);
}

void loop(){
  // 以下をloopの中で必ず実行します
  milkcocoa.loop();

  // データ格納用のオブジェクトです
  DataElement elem = DataElement();

  // 以下のようにkey, valueを設定していきます。
  elem.setValue("name", "Milk");
  elem.setValue("age", 35);

  // データストア名を指定して、データをpushもしくはsendします
  //milkcocoa.push(MILKCOCOA_DATASTORE, &elem);
  // or
  milkcocoa.send(MILKCOCOA_DATASTORE, &elem);
}
```

ここでは

```
#define MILKCOCOA_APP_ID      "APPID"
#define MILKCOCOA_DATASTORE   "DATASTORE_NAME"
```

の2箇所を各自のものに修正します。

## フロントのJSで確認

```index.html
<html>
    <script src="https://cdn.mlkcca.com/v0.6.0/milkcocoa.js"></script>
    <script>
        var milkcocoa = new MilkCocoa('APPID.mlkcca.com');
        var ds = milkcocoa.dataStore('DATASTORE');
        // setInterval(()=>{
        //     ds.push({v:1}, (err, sended) => {
        //         console.log('送信:', sended);
        //     });
        // },2000);

        ds.on('send', (send) => {
            console.log(send.value);
        });

    </script>
</html>
```

## Node.jsで受け取る

```
npm i milkcocoa
```

```send.js
'use strict'

const MilkCocoa = require('milkcocoa');
const milkcocoa = new MilkCocoa('APPID.mlkcca.com');
const ds = milkcocoa.dataStore('DATASTORE');

ds.on('send', (err, send) => {
  console.log(err,send);
});
```

このコードでNefry BTから送られてくるSendメッセージを受信できます。

![](https://i.gyazo.com/324a5d1e7537753590026b3461731777.gif)


## onpushとonsendが...

試そうとするとNefry BTが無限ループになってしまいました。
再度調べて試してみよう。
利用者46万人・レビュー☆4(777人)のchrome拡張に潜む罠... Rails < "HTTP Origin header (http://evil.com/) didn't match request.base_url"

## 流れ (※ 一部表現や脚色あり)
|顔文字|人物|
|:---|:---|
|😿（😸）|私|
|🐻|利用者|
|🤡|chrome拡張の開発者|

🐻 < お疲れ様です。◯◯◯.hoge.comで△△△操作を試したところ、できませんでした。☓☓☓ボタン押下後、エラー表示がでます。

😿 < お疲れ様です。承知しました。調査します。 

**==========ログ確認===========**

```
{"@timestamp":"2018-XX-XXT14:22:47.596+09:00","severity":"WARN","hostname":"hoge","process_id":"","message":"[666eb95c-acec-42d4-8f4c-5be6ede5aee7] HTTP Origin header (http://evil.com/) didn't match request.base_url (https://◯◯◯.hoge.com)"}
{"@timestamp":"2018-XX-XXT14:22:47.603+09:00","severity":"ERROR","hostname":"hoge","process_id":"","message":"[666eb95c-acec-42d4-8f4c-5be6ede5aee7] ActionController::InvalidAuthenticityToken"}
```

😿 < HTTP Origin ヘッダーがなんらかの理由で、リクエストのベースのURL (`https://◯◯◯.hoge.com`) と一致しなかった可能性があります。


🐻 < ???

**==========軽く調査...===========**　※ 🤡= chrome拡張の開発者
🤡 < As for evil.com - it was joke and small reminder that we need take care about what we allow in our CORS headers.
**=============================**

😿 < 下記のようなChrome拡張を入れて、HTTP Originのheaderを書き換えていたりしますでしょうか？
      https://chrome.google.com/webstore/detail/allow-control-allow-origi/nlfbmbojpeacfghkpbjhddihlkkiljbi

🐻 < 拡張消してログイン成功したようです！ 調査ありがとうございました！

😸 < ファーwwwwww

## 起きた問題を3行で説明
- 管理画面上での操作がエラー
- ログに "CSRFのtokenチェックエラー && 異なるoriginからのリクエスト"
- 利用者曰く、原因不明...

## どうしてこんなことが起こったのか？
- 利用者がresponse headerに'Access-Control-Allow-Origin'を  
  追加するchrome拡張を入れていた。  


**↓↓↓以下開発者の発言↓↓↓**

🤡 < 私たちがCORSヘッダーで許可していることを注意する必要があることを冗談と小さなリマインダーのつもりで追加した。

🤡 < 私は、多くの人がこれについて不平を言っていることを知っているので、次の月曜日（29/05/2010）までに拡張を更新し、このフィールドを編集可能にすることを約束します!

- 問題のissueの開発者のコメント : https://github.com/vitvad/Access-Control-Allow-Origin/issues/45#issuecomment-303422786

## 結論

現在(2018/08/22) : ＼治ってねぇ!!／
GithubのSourceの該当部 : https://github.com/vitvad/Access-Control-Allow-Origin/blob/b1685e014e1bdae4d0be3ac10aa2636fe41926a0/background.js#L8

### 😸 < ファーwwwwww

Google Chromeの拡張を入れる時は少しだけ調べよう。
とりあえず入れました は **ダメ。ゼッタイ。**

~~ふざけた記事を書きたかっただけだとかは、断じて無いです。~~

## 参考
- Githubのリポジトリ: https://github.com/vitvad/Access-Control-Allow-Origin
インストーラーを作成する

#はじめに
10年ぶりくらいでWindowsアプリケーションの開発を行って、インストーラーの作成が必要になったので、Visual Studio 2017 で開発したアプリケーションのインストーラーを作成する方法をまとめてみました。
開発環境：**Visual Studio 2017 Community**

#準備
[Microsoft Visual Studio 2017 Installer Projects](https://marketplace.visualstudio.com/items?itemName=visualstudioclient.MicrosoftVisualStudio2017InstallerProjects)をダウンロードしてインストールします。
[vs2013用](https://marketplace.visualstudio.com/items?itemName=UnniRavindranathan-MSFT.MicrosoftVisualStudio2013InstallerProjects) / [vs2015用](https://marketplace.visualstudio.com/items?itemName=visualstudioclient.MicrosoftVisualStudio2015InstallerProjects)

#インストーラーの作成
インストーラーを作成するに当たり、まずは適当なソリューションを用意します。

###新しいプロジェクトの追加
ファイル -> 新規作成 -> プロジェクト を選択し、「新しいプロジェクトの追加」を行います。
そのたのプロジェクトの種類 -> visual Studio Installer を選択し、今回は Setup Project でインストーラーを作成していきます。
![SetupPrj.png](https://qiita-image-store.s3.amazonaws.com/0/226493/1d6a9eac-185e-b659-13dd-0284df81f926.png)
###インストーラー構成の設定
プロジェクトを作成すると下記のような画面が表示されます。このViewでインストールするファイルの構成を行います。
ここでは、特殊フォルダ、ファイル、ショートカットなどさまざまな設定が行え、その他にもレジストリー設定やセットアップ画面のカスタマイズなどの設定も行える機能もあるので、時間があれば今後追記したいと思います。

まずは、作成したプログラムをインストールする単純なインストーラーを作成したいので　[Application Folder] 右クリック -> Add -> プロジェクト出力を選択
「プロジェクト出力グループの追加」画面が開くので、プライマリ出力を選択

![構成.png](https://qiita-image-store.s3.amazonaws.com/0/226493/c5e36367-a118-fc6b-4cad-5c3e2baa3011.png)

作成したプロジェクトをビルドすればインストーラーの完成です。

---
[アンインストールのトラブルシューティング](https://qiita.com/kuri734/items/e7f49161b16db066c26c)
（備忘録）プレゼンソフト紹介リンクまとめ

Imperssive
http://gihyo.jp/admin/serial/01/ubuntu-recipe/0088
以前、遊びに行った研究発表で使われていて、かっこいいなあ、と思った覚えがある。

http://iteto.hatenablog.com/entry/2017/06/28/200106
https://ogatism.jp/presentation_softs/
VSCodeで空白文字を見やすくする方法

#VSCodeは空白文字が見にくい...
VSCodeでシェルスクリプトを作成した際、余分な全角スペースがあって動かなかったことがありました...。
ホワイトスペースが見やすくなればもうこんな失敗しません！！:frowning2:
ということで、以下のように設定して見ました。
:speech_left:Visual Studio Code 1.26.1 

#step1:`renderWhitespace`を設定する
①基本設定->設定
setthing.json 内でホワイトスペースを表示する設定を以下のように記入する。

```json
  "editor.renderWhitespace": "all",
```
②ついでにタブは半角スペース4つ分に指定。
※`　editor.detectIndentation`はtrueにしていると自動でtabSizeが決まってしまう

```json
  "editor.detectIndentation": false, 
  "editor.tabSize": 4,
```
#step2:拡張機能`Whitespace+`で空白を見やすくする
`Whitespace+`は空白文字に色をつけてくれる拡張機能です。

①Cmd + Shift + x で拡張機能画面を開いて「Whitespace+」を検索。インストールする。
②Cmd + Shift + p でコマンドパレットを開き、「Whitespace+ Toggle」を実行

#見やすくなりました
step1,2を設定した結果がこちらです。だいぶ見やすくなりました！
![image.png](https://qiita-image-store.s3.amazonaws.com/0/261128/d320ef95-0266-f86c-d7da-565e9deb2ff1.png)
カメラマンの技術に感動したカットを載せるだけ。

#何度も見直した興奮するぐらいいい画の瞬間

STADIUM SUPER TRUCKS RACE 1 - BARBAGELLO 2018
https://youtu.be/JYdvcqAc-88?t=18m39s

18:51からのカメラワークに興奮
Windows10で「Windows Hello」が突然使えなくなった時の対処法

## 前置き
Windows10に搭載されている「Windows Hello」ですが、せっかく設定をしたのに急に使えなくなってこまったことがありましたのでその時の対処法をメモとして残しています。

そもそも「Windows Hello」の設定が出来ないんですがどうなってるんですか？
という人（私もそうでした）は以下の記事を参考にして「Windows Hello」の設定を行って快適なPCライフをゲットしてください。

▼ Windows 10で指紋認証Helloがグレーアウトして設定できないを解決
https://mseeeen.msen.jp/windows-10-cannot-change-fingerprint-authentication-setting/


## 解決方法
解決方法は２つあります。
1. 電源 → 再起動 を実施する
2. シャットダウン時にShiftボタンを押しながらシャットダウンを行う

上記２つの方法ではwindows10から実装されている高速スタートアップが無効化された状態でシステム停止が行われるため、周辺機器での動作不備が解消される場合があります。
それは「Windows Hello」も例外ではなく指紋認証の場合も周辺機器として認識されている為この対応が必要になります。

この為通常のシャットダウンでは現象が解消しないと言った現象が発生します。
高速スタートアップは通常であればとても便利な機能なのですが、周辺機器に不備が出た場合やシステムの変更を行ったが反映されていない等の場合はこちらを疑ってみてはいかがでしょうか。
swift:「タップイベントの有効化と無効化の切り替え方法」

#はじめに
初歩的な実装かと思いますが、Swift3とSwift4が若干異なるため備忘録を含め記録として残したいと思います。


```Swift:改行方法
label.text = stringRecived.replacingOccurrences(of: "\n", with: "\n")

```

今回参考にした記事です。
より詳細に記載がりますので、よろしければご参照ください。
https://stackoverflow.com/questions/48755746/new-line-command-n-not-working-with-firebase-firestore-database-strings?rq=1

ご参考になれば幸いです。
Font Awesome 5でjs+SVGとWeb Font+cssのどちらで描画するか問題

#Font Awesome 5

[公式ページ](https://fontawesome.com/)

具体的な導入の仕方は公式にも書いてますし、日本語で教えてほしかったらググったら先人の記事が出てきます。

#この記事で書くこと

versionが5系になってから導入方法（描画方法）が大きく分けて2種類選べるようになりました。

- js+SVG
- Web Font+css

WordPressで作成するときにFont Awesome 5を組み込むとなると、
どちらにせよファイルをDLする必要があるのですが、その話は置いときます。

んで、なんとなくでjs+SVGを選んでいたのですが訳あって最終的にはWeb Font+cssの方法を採用しました。
その経緯、つまり**それぞれ何ができて何ができないのか**を備忘録としてまとめておきます。

##共通

Font Awesome 4同様に\<i>タグでどのアイコンを出力させるかをclassで指定します。

`<i class="fab fa-twitter"></i>`

`class="fab"`は「**企業ロゴなどのグループから表示する**」ということを示します。
例のようにTwitterロゴやYouTubeロゴなんかがあります。
fabの他にもfas、farなどがありますが詳しくは公式サイトのリストで確認してください。
サンプルコードにセットで書いてあるのでそのままコピペでいけます。

`class="fa-Twitter"`は「**Twitterロゴを表示する**」ということを示します。
詳しくは公式（略）

どちらの方法でも疑似要素に描画することもできますが、
**js+SVGの方法で行うのは**力技感あるからなのか**非推奨**となっています。

(追記：2018.08.22)
*[こちらの記事](https://its-office.jp/blog/web/2018/02/18/fontawesome.html)にjs+SVGの処理詳細が記述されていました。*

##js+SVG
###特徴

- **画面を表示した際に\<i>タグはコメントアウトされ、svgタグへと置き換わります。**

そのため、色を変えたり表示位置の調整などはsvg、あるいは付随するclass（.svg-inline--faなど）をセレクタとして使用する必要があります。

- **js+SVG特有の設定がある**

公式でオススメされている要因。
描画領域に対するスケーリングやポジショニングなどの**トランスフォーム指定**（Power Transforms）や
複数のアイコンを重ねて描画するマスク(Masking)、
アイコンに指定したテキストを重ねるレイヤー（Layering, Text, & Counters）などがあります。

「カートと入っている商品数を描画」なんてこともできる感じです。

###できないこと

- **一部jsと相性が悪い（？）**

実装の仕方によるとは思うのですが、すでに稼働しているサイトで扱う場合や
過去に自身で実装した処理を転用しようとした場合に、使えなくなる場合があります。

どうしてそうなるかまでは時間がなくて調べられず。

自分の場合は4系から5系に変更するという作業だったのですが、
ハンバーガーメニュー用処理で`.toggleClass()`を使用している箇所でループしていました。
（メニューに`class="open"`を`.toggleClass()`で付与したり除去したり切り替える処理）
対象となる要素に`class="open"`があるかによって
子要素で描画するアイコンを変化させるものだったからなのかとも思います。

ともあれ前提として、**js+SVGで導入してみて、描画するアイコンを変化させる箇所で動作確認して使えるか検証してから実装**という形になるのかなあと思います。

*(追記：2018.08.23)
これ書いたあとに他の人が作ったサイト見てるとハンバーガーメニューでも5系で動いてるサイトがあったんで、
実装処理内容によるっぽいです。*

##Web Font+css
###特徴

- **4系までと使い方はほぼ同じ**

`fa`→`fab`、`far`
cssで
`font-family: Awesomefont;`→`font-family: Font Awesome 5 Free;`
となるところ以外はさほど変わらないです。

これまでのノリでサクサク進めたい人はこちらを選んでもいいかもしれません。
アイコンによっては`font-weight: bold;`を指定しないといけない場合がありますが。

また、js+SVGのように\<i>タグが別のものに置き換えられることもないです。

###できないこと

- **5系で追加された設定が使えない**

js+SVGで紹介した各種設定が使えないということですね。
何が使えないかは、そこに書いてあるものが使えないということなので割愛します。


#まとめ

**基本
→js+SVG**

**js+SVGで既存のjs処理が動作しなくなった
以前からFont Awesome使っててスピード感が欲しい
→Web Font+css**

こんな感じ？

自分自身Font Awesome使うの初めてだったんでツッコミお待ちしております。
正規表現が苦手なのでまとめておく

# はじめ
正規表現(マッチパターン)に弱すぎるのでまとめておくよ

#どんな種類があるよ
##基本
|パターン|意味|
|:--:|:--:|
|ABC|この文字列である|
|[ABC]|``` [] ```内の文字列がいずれか1つは入っている|
|[^ABC]|``` [] ```内の文字列以外のもの1文字(^がNotを意味)|
|[A-Z]|A~Zの間の1文字|
|A｜B｜C|ABCのいずれか|
|(a)|括弧内を1文字扱いする|
## 量指定
|パターン|意味|
|:--:|:--:|
|X*|Xの文字が0文字以上マッチしている|
|X?|Xの文字が0または1のマッチをしている(2になるとダメ)|
|X+|Xの文字が1文字以上連続している|
|X{n}|Xがn個連続|
|X{n,}|Xがn個以上連続|
|X{m,n}|Xがm個以上n個以下連続|
## 位置指定
|パターン|意味|
|:--:|:--:|
|^|行先頭|
|$|行最後尾| 
## 文字セット
|パターン|意味|
|:--:|:--:|
|.|任意の1文字が一致|
|\w|[A-Za-z0-9_]|
|\W|[^A-Za-z0-9_]|
|\d|[0-9]|
|\D|[^0-9]|
|\n|改行一致|
|\r|復帰と一致|
|\t|タブと一致|
|\v|垂直タブ|
|\f|フォーム フィード|
|\s|[\n\r\t\v\f]|
|\S|[^\s]|
|\~|~|
`rails new`で作成されたディレクトリについて

#はじめに
プログラミングを勉強し始めて、１週間ほど経ちました。
何が分からないのか分からない系の学習期間がまだまだ続いていきそうな今日このごろです。

それでも俺は抵抗するで！拳で！ギノキンです。

分からないなら、箇条書きして、一つ一つ調べていくしかないやんけ！！
ってことで、`rails new`して作成されたディレクトリについて調べてみました。

##作成したアプリケーション内のディレクトリについて
作成したtwitterディレクトリの下には多数のファイルやフォルダが生成されており、これらがRailsアプリケーションを構成しています。Railsが生成したファイルとフォルダについて下記に記します。


###app/
ここにはアプリケーションのコントローラ、モデル、ビュー、ヘルパー、メイラー、チャンネル、ジョブズ、そしてアセットが置かれます。

`※アセット...デジタルコンテンツの開発では、その構成要素となる画像や3Dモデル、音楽、効果音などの素材のこと。`

###bin/
ここにはアプリケーションを起動/アップデート/デプロイするためのRailsスクリプトなどのスクリプトファイルが置かれます。

`※デプロイ...実行ファイルを、実行する環境に合わせて、実際に実行できるようにすること。インストールとは違い、開発者が準備完了だとネットワーク上で利用できるようにすること。インストールとはそのデプロイされたものを自分のpcなどに入れて利用できるようにすること。`

###config/
アプリケーションの設定ファイル (ルーティング、データベースなど) がここに置かれます。

###config.ru
アプリケーションの起動に必要となる、Rackベースのサーバー用のRack設定ファイルです。

`※Rack...Rackは魔法のようなもので、Rackを使えばどのアプリケーションサーバーであってもあなたのRailsアプリケーションを動かすことができます。RackはRailsのようなRuby製のwebフレームワークとアプリケーションサーバーの両方が話せる共通言語のようなものだと考えてください。`

###db/
現時点のデータベーススキーマと、データベースマイグレーションファイルが置かれます。

###Gemfile,Gemfile.lock
これらのファイルは、Railsアプリケーションで必要となるgemの依存関係を記述します。この2つのファイルはBundler gemで使用されます。

###lib/
アプリケーションで使用する拡張モジュールが置かれます。

`※モジュール...「部品」のことで、その一つで機能としては成立するが、通常他のものと一緒に使用することができるもの。`

###log/
アプリケーションのログファイルが置かれます。

###package.json
Railsアプリで必要なnpm依存関係をこのファイルで指定できます。このファイルはYarnで使われます。Yarnについて詳しくは、YarnのWebサイトを参照してください。

`※npm...正式名称は、Node Package Managerです。npmの正式名称からも解るように、Node.jsのパッケージ（Package ）を管理する（Manager）ツールです。`

`※Yarn...npmと互換性のあるJavaScriptのパッケージマネージャーです。簡単に言うとnpm installをより高速に、そしてコンパクトにしたものです。`

###public/
このフォルダの下にあるファイルは外部 (インターネット) からそのまま参照できます。静的なファイルやコンパイル済みアセットはここに置きます。

###Rakefile
このファイルには、コマンドラインから実行できるタスクを記述します。ここでのタスク定義は、Rails全体のコンポーネントに対して定義されます。独自のRakeタスクを定義したい場合は、Rakefileに直接書くと権限が強すぎるので、なるべくlib/tasksフォルダの下にRake用のファイルを追加するようにしてください。

`※コンポーネント...部品、成分、構成要素などの意味を持つ英単語。ITの分野では機器やソフトウェア、システムの構成する部品や要素などのことを意味する。`

###README.md
アプリケーションの概要を説明するマニュアルをここに記入します。このファイルにはアプリケーションの設定方法などを記入し、これさえ読めば誰でもアプリケーションを構築できるようにしておく必要があります。

###test/
Unitテスト、フィクスチャなどのテスト関連ファイルをここに置きます。

`※テストフィクスチャ...テストを実行、成功させるために必要な状態や前提条件の集合を、フィクスチャと呼ぶ。これらはテストコンテキストとも呼ばれる。`

###tmp/
キャッシュ、pidなどの一時ファイルが置かれます。

`※キャッシュ...一度見たホームページのデータをパソコンの中に一時保存して、速く表示できるようにする機能です。 `

`※プロセス...情報処理においてプログラムの動作中のインスタンスを意味し、プログラムのコードおよび全ての変数やその他の状態を含む。オペレーティングシステム (OS) によっては、プロセスが複数のスレッドで構成される場合があり、命令を同時並行して実行する`

`※pid...プロセスID。それぞれのプロセスに割り当てられた管理用の番号のこと。プロセスに配られるゼッケンのようなものです。
`

###vendor/
サードパーティによって書かれたコードはすべてここに置きます。通常のRailsアプリケーションの場合、外部からのgemファイルをここに置きます。

###.gitignore
Gitに登録しないファイル（またはパターン）をこのファイルで指定します。

`※ignore...無視。`

###.ruby-version
デフォルトのRubyバージョンがこのファイルで指定されます。

`デフォルト...コンピュータで、あらかじめ設定されている標準の状態・動作条件。初期設定。初期値。`

##Railsを起動させる
先ほど作成したRailsアプリケーションは、既に実行可能な状態になっています。Webアプリケーションを開発用のPCで実際に動かしてこのことを確かめてみましょう。twitterディレクトリに移動し、以下のコマンドを実行します。

###Webサーバーを起動させる
```
$ bundle exec rails server
```

ブラウザを開いて http://localhost:3000 を表示してください。Railsのデフォルト情報ページが表示されます。

#終わりに
正直、分からないことだらけで調べるだけで一日フルに使ってしまう。
一日ってもっと長かったはずなんやけどなー！

間違ってる表現等がある場合は、ご指摘頂けますと幸いです。
Cloud Shell実行でゼロ幅スペースにハマった話し

Azure Cloud ShellからNSGを作ろうとしたけど、なぜかコマンドが動かなくてしばらくハマりました。
似たようなことに陥った方もいるかもと思い残しておきます。

# コマンド実行したけどエラーが出る
* 実行コマンド

```
az network nsg create --resource-group $RESOURCE_GROUP --name $NSG_NAME
```

* エラーメッセージ

```
Resource name xxx is invalid. The name can be up to 80 characters long. It must begin with a word character, and it must end with a word character or with '_'. The name may contain word characters or '.', '-', '_'.
```

# 原因の切り分け

今回実行しているコマンドは、Power Pointからのコピペで実行していました。
試しにコピペじゃなくて、すべて直打ちしてみるとうまく動きました。

コピペが怪しい・・？

# 原因特定！

コピーした文字列と直打ちの文字列をviで見比べてみました。

* コピペ

```
az network nsg create --resource-group $RESOURCE_GROUP --name $NSG_NAME<200b>
```

* 直打ち

```
az network nsg create --resource-group $RESOURCE_GROUP --name $NSG_NAME
```

ん？<200b>？

コピペしたほうは文字コード<200b>が挿入されています。（ゼロ幅スペース）

O365のPower Point（Web版）でコピーするとゼロ幅スペースが挿入されるようです。
ローカルのPower Pointで開くとゼロ幅スペースは挿入されませんでした。

# まとめ

思いがけないところでハマってしまいました。
同じエラーメッセージが出力された方はゼロ幅スペースがないか確認してみてはどうでしょうか。
ReactNativeでボタン押下し通信処理する(とその時の勉強メモ)

# ReactNativeでボタン押下し通信処理する

## ボタン押下時の処理
```
_onPressButton = async() => { //ここの行が自分的に肝
	try {
		//ボタン押下時の処理を書く所
		let response = await fetch('https://facebook.github.io/react-native/movies.json');
		let responseJson = await response.json();
		this.setState({
			dataSource:responseJson.movies,
		},function(){});
		return responseJson.movies;
	} catch(error) {
		console.error(error);
	}
}
```

## ボタン(と通信結果を表示する場所)の設置
```
<Button
	title="get the movie list"
	onPress={this._onPressButton} //押下時の処理の指定方法
/>
<FlatList
	data={this.state.dataSource}
	renderItem={({item})=> <Text>{item.title},{item.releaseYear}</Text>}
	keyExtractor={(item,index) => index.toString()}
/>
```

# ボタン押下時のasyncの書き方

```
//こっちはだめ
async function _onPressButton() {

//こっちもだめ
async _onPressButton() {

//こっちにする
_onPressButton = async() => {

```

ふむ。

# async/awaitとPromiseの勉強
https://qiita.com/soarflat/items/1a9613e023200bbebcb3

上記ページによくまとめられているのでそちらを見られる方がよいと思います。
以下は、上記ページを参考、引用させていただいた自分の理解で書いてます。

# asyncの勉強

asyncはPromiseを返す。

.thenでreturn値を受け取ることが出来て、
代入先変数名(以下では、value)を指定して処理を実行させることができる。

```react:こちらのコードは上記ページより引用
resolveSample().then(value => {
    console.log(value); // => resolve!!
});
```

.catchも似た感じで、throw+new Errorの値を受け取ることができる。

```react:こちらのコードも上記ページより引用
// reject!!をthrowしているため、この値がrejectされる
async function rejectSample() {
    throw new Error('reject!!');
}

// resolveSampleがPromiseを返し、reject!!がrejectされるため
// catch()が実行されコンソールにreject!!が表示される
rejectSample().catch(err => {
    console.log(err); // => reject!!
});
```

そして、asyncを使わない場合は、Promiseを返さないので、
then,catchは使えない。

# awaitの勉強

asyncの中で使われる。
asyncの中でawaitで指定された関数がPromiseの結果を返すまで処理が待たれる。

疑問、asyncもPromiseを返すわけだがawaitもPromiseを返す?

解答、awaitはPromiseを返さない。awaitに指定された関数がPromiseを返す必要がある。

```react:こちらのコードも上記ページより引用、一部改変
function sampleResolve(value) {
    return new Promise(resolve => { // 指定された関数内でPromiseを返す
        setTimeout(() => {
            resolve(value * 2);
        }, 2000);
    })
}

async function sample() {
    const result = await sampleResolve(5); // awaitの指定
    return result + 5;
}
setup selenium in Mac for safari

# 趣旨
mac環境でsafariの自動化テストを行う環境構築手順

# 準備するもの
-Mac (HighSierra)


# 設定
## 1. JDK
### install
Java SE Development Kit 8 をdownloadして、インストールする

download
http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

### 環境変数
環境変数に以下を設定する
Mac環境次第ですが、例えば .bashrc

<TABLE BORDER=1>
<TR><TH>変数</TH><TH>意味 </TH></TR>
<TR><TD>JAVA_HOME  </TD><TD>Javaのinstall path <BR> (ex. export JAVA_HOME=`/usr/libexec/java_home` )</TD></TR>
<TR><TD>Path </TD><TD>実行フォルダのパス <BR>(ex. export PATH=\${JAVA_HOME}/bin:$PATH ) </TD></TR>
</TABLE>

### 実行確認
コマンドプロンプトを起動し、パスを確認する

```
java -version
```

## 2. brew
seleniumをinstallするとき、brewコマンドを利用する。
defaultではmacに入っていないので、使えるようにする

### install brew

以下コマンドを実施

```
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
```

動作確認

```
brew -v
```

## 3. selenium-server-standalone
2パターンあるseleniumのsiteからjarをダウンロードする方法と、brewでinstallする方法
https://www.seleniumhq.org/download/

今回、brewで入れる方法

```
 brew install selenium-server-standalone
```

すると、下記のようにインストールされたパッケージのpathが表示される

```
==> Summary
🍺  /usr/local/Cellar/selenium-server-standalone/3.13.0: 5 files, 22.4MB, built in 6 seconds
```

## 4. safari
オプションで”メニューバーに開発メニューを表示”をONにする
<IMG SRC="https://qiita-image-store.s3.amazonaws.com/0/267085/9fa59539-9f27-17c8-3ffb-3987f6aaca2b.png" width=70%>

開発メニューから”リモートオートメーションを許可”をONにする
<IMG SRC="https://qiita-image-store.s3.amazonaws.com/0/267085/d96579b0-edd0-617c-57e4-bd038af883a1.png" width=70%>


# run server

## safari webdriver
```
/usr/bin/safaridriver --port 0
```

## selenium server
```
java -jar /usr/local/Cellar/selenium-server-standalone/3.13.0/libexec/selenium-server-standalone-3.13.0.jar 
```
※brewでinstallした場合、インストールされたpathからjarのpathを確認し、指定する
デフォルトはport 4444 になる
UbuntuでSSHをインストールする手順

GNOMEデスクトップでUbuntuをインストールするとsshdがインストールされていない。
インストールする手順をまとめています。

```
sudo apt-get install ssh
systemctl start sshd
```

以下、実行ログ

```
ubuntu-18@ubuntu-18:~$ sudo apt-get install ssh
[sudo] ubuntu-18 のパスワード:
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
以下のパッケージが新たにインストールされます:
  ssh
アップグレード: 0 個、新規インストール: 1 個、削除: 0 個、保留: 5 個。
5,188 B 中 0 B のアーカイブを取得する必要があります。
この操作後に追加で 106 kB のディスク容量が消費されます。
以前に未選択のパッケージ ssh を選択しています。
(データベースを読み込んでいます ... 現在 153167 個のファイルとディレクトリがインストールされています。)
.../ssh_1%3a7.6p1-4_all.deb を展開する準備をしています ...
ssh (1:7.6p1-4) を展開しています...
ssh (1:7.6p1-4) を設定しています ...
ubuntu-18@ubuntu-18:~$ systemctl start sshd
==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units ===
'ssh.service'を開始するには認証が必要です。
Authenticating as: ubuntu-18,,, (ubuntu-18)
Password:
==== AUTHENTICATION COMPLETE ===
ubuntu-18@ubuntu-18:~$ ps -ef | grep sshd
root      3341     1  0 11:18 ?        00:00:00 /usr/sbin/sshd -D
root      4754  3341  0 12:00 ?        00:00:00 sshd: ubuntu-18 [priv]
ubuntu-+  4825  4754  0 12:00 ?        00:00:00 sshd: ubuntu-18@pts/1
ubuntu-+  5023  4826  0 12:23 pts/1    00:00:00 grep --color=auto sshd
```
C＃でWordにExcelテーブルをインポートする

Word文書にExcelスプレッドシートを表示するには、Excel文書をOELオブジェクトとしてWordに挿入するか、Excel表をWordにコピーします。 この資料では、ExcelスプレッドシートをWordにコピーし、Excelの表のスタイルを保持する方法について説明します。
このシナリオでは、Spire.Xls.dllとSpire.Doc.dllの両方をプロジェクトで参照する必要があります。[Spire.Office](https://www.e-iceblue.com/Introduce/spire-office-for-net.html)をダウンロードしてDLLファイルを使用してください。
【C#】

```ruby:Program.cs

static void Main(string[] args)
{
//ワークブックオブジェクトを作成する
Workbook workbook = new Workbook();
//Excelドキュメントを読み込む
workbook.LoadFromFile(@"テスト.xlsx");
//最初のワークシートを取得する
Worksheet sheet = workbook.Worksheets[0];
//Documentオブジェクトを作成する
Document doc = new Document();
//Wordにフォームを追加する
Table table = doc.AddSection().AddTable(true);
//Excelテーブルデータの行数と列数に基づいてテーブルの行と列を設定する
table.ResetCells(sheet.LastRow, sheet.LastColumn);
//Excelテーブルの行をトラバースする
for (int r = 1; r <= sheet.LastRow; r++)
    {
     //Excelテーブルの列をトラバースする
     for (int c = 1; c <= sheet.LastColumn; c++)
         {
           //Excelテーブルのセルを取得する
           CellRange xCell = sheet.Range[r, c];
           //Wordの表のセルを取得する
           TableCell wCell = table.Rows[r - 1].Cells[c - 1];
           //Excelのセルデータを対応するWordセルに取り込みます
           TextRange textRange = wCell.AddParagraph().AppendText(xCell.NumberText);
                //セルフォーマットをコピーする
           CopyStyle(textRange, xCell, wCell);
           }
      }

       //ドキュメントを保存
       doc.SaveToFile("結果.docx", Spire.Doc.FileFormat.Docx);
    }
    private static void CopyStyle(TextRange wTextRange, CellRange xCell, TableCell wCell)
   {
    //フォントスタイルをコピーする
    wTextRange.CharacterFormat.TextColor = xCell.Style.Font.Color;
    wTextRange.CharacterFormat.FontSize = (float)xCell.Style.Font.Size;
    wTextRange.CharacterFormat.FontName = xCell.Style.Font.FontName;
    wTextRange.CharacterFormat.Bold = xCell.Style.Font.IsBold;
    wTextRange.CharacterFormat.Italic = xCell.Style.Font.IsItalic;
    //セルの背景色をコピーする
    wCell.CellFormat.BackColor = xCell.Style.Color;
    //テキストの配置をコピーする
    switch (xCell.HorizontalAlignment)
    {
        case HorizontalAlignType.Left:
            wTextRange.OwnerParagraph.Format.HorizontalAlignment = HorizontalAlignment.Left;
            break;
        case HorizontalAlignType.Center:
            wTextRange.OwnerParagraph.Format.HorizontalAlignment = HorizontalAlignment.Center;
            break;
        case HorizontalAlignType.Right:
            wTextRange.OwnerParagraph.Format.HorizontalAlignment = HorizontalAlignment.Right;
            break;
    }

}


```
デバッグコードが実行されると、ドキュメントという単語が生成されます
![4.jpg](https://qiita-image-store.s3.amazonaws.com/0/278784/434ddd1c-80f6-c2e7-21d4-4bc9584f4ea0.jpeg)
Kotlinで一度しか行わない処理を実現する

いわゆる、onceですね
以下のコードはAndroid studioのBase Activityのテンプレートコードを改修しています。

```kotlin
class BasicActivity : AppCompatActivity() {

    val onceExecute: Runnable? by lazy {
        //ここに、一度しかやらない処理を書く
        Log.d("TAG","execute!")
        null
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_basic)
        setSupportActionBar(toolbar)

        fab.setOnClickListener { view ->
            onceExecute?.run() //一度しか行わない処理
        }
    }

}
```

lazyを利用して、onceExecute内に処理を書いて、最後にnullを返します。
onceExecuteの返却はRunnableである必要はないのですが、.run()で繋げたほうが可読性としては良さそうなのでそうしてます。
iTerm2 での pane を分けて作業開始を自動化する AppleScript


`command + shift + d` の pane 分けに飽きた人に何かしら参考になれば幸いです。

こんなことやってる人がいるのかしらないですが、僕はやっているのですが..。
docker-compose 環境で作業することが多いです。なので、下図のようなのが僕の `iTerm2` の定位置になっています。

<img width="1289" alt="スクリーンショット 2018-08-22 11.56.37 2.png" src="https://qiita-image-store.s3.amazonaws.com/0/45822/ae61b8bc-898e-2398-511c-b7f962230ad8.png">

このポジションをつくるのに、毎回 `command + shift + d` とかで、pane を分割してとやっているのですが、これが飽きてしまいました。


めんどくさい動作↓
![start_work.gif](https://qiita-image-store.s3.amazonaws.com/0/45822/7dcddd8d-8929-096f-f773-135cfa915024.gif)

これを簡単にやりたいとおもって、以下の shell script を書きました。

```shell:start_work.sh
osascript <<-EOF
tell application "iTerm2"
    # Split pane
    tell current session of current window
        split horizontally with default profile
        split vertically with default profile
    end tell

    # Exec commands
    tell first session of current tab of current window
        write text "until docker-compose exec rails bash; do; sleep 2; done"
    end tell
    tell second session of current tab of current window
        write text "docker-compose up"
    end tell
    tell third session of current tab of current window
        # write text "echo 3"
    end tell
end tell
EOF
```

これを、`sh start_work.sh` で叩くと３つの pane が開かれて、すこし楽しいです。

![start_work_after.gif](https://qiita-image-store.s3.amazonaws.com/0/45822/7dec6ac6-f81f-ddea-680b-66fe1dfdf93c.gif)

コンテナに入る部分は、 `until` でコンテナが立ち上がるまでやってるので ERROR とかでちゃいます。このシェルを個人的にどうやって運用するのかとかはまだ考えていませんが、ひとまず `iTerm2` の操作をシェルからできたので投稿です。
MacBook Air（early 2015）でLGディスプレイ（29UM59-P）をウルトラワイド出力で使う方法

#まとめ
・MacBook Air（early 2015）とLGディスプレイ（29UM59-P）は相性問題で本来ウルトラワイド出力できない
・システムパッチでの解決に失敗したが、SwitchResX（シェアウェア）を用いて成功した
・MacユーザーでこれからLGのウルトラワイドディスプレイを買う人は所持Macの相性を予め確認して、可能ならDisplayportのあるゲームモデルを買うと良いと思います

#相性問題でウルトラワイド出力できない！
・Macでは「Displayportではウルトラワイドが使えるがHDMIではウルトラワイド出力非対応」
・廉価版の29UM59-Pは入力端子がHDMI端子×2のみで、Displayportがない
という理由で、このままでは**MBA mid 2012で29UM59-Pをウルトラワイド出力することはできません**。

#私の環境
・OS: Mac OS Sierra バージョン10.12.6
・PC: MacBook Air (13-inch, Early 2015)
PCおよびシステムの詳細スペックは以下を参考にどうぞ（3枚目は後述のSwitchResXがシステムレポートにうつりこんでます）
![スクリーンショット 2018-08-22 12.05.37.png](https://qiita-image-store.s3.amazonaws.com/0/263073/6f9976c8-3339-90d0-4b6e-c8febf7011f8.png)
![スクリーンショット 2018-08-22 12.05.15.png](https://qiita-image-store.s3.amazonaws.com/0/263073/425d6458-00f9-2238-628a-354729b621f0.png)
![スクリーンショット 2018-08-22 12.04.57.png](https://qiita-image-store.s3.amazonaws.com/0/263073/9cb4dc52-2d14-b101-d359-688bf7b1cdd3.png)

・ディスプレイ： 29UM59-P
・PC→ディスプレイの接続方法： [この](http://amzn.asia/8rgmkUZ)中華ケーブル一本で接続
・クラムシェルモードで使用
・使用ソフト: SwitchResX4（後述、10日間無料試用版）

#パッチ施行後、起動不能に
##調べてみた
この問題はハード性能の問題というよりシステム側でリミットがかけられてしまうことによるものだそうで、そのためサードパーティ製のシステムパッチで解決したという報告（[このブログ記事](https://www.tabishirube.com/lg-29um57.html)の後半で紹介されています）がありました。

##やっちまった
やってみたんだけど、パッチ後**通常起動しなくなった**ためリカバリモードで起動の上タイムマシンで復元しました。うちのMBA固有の問題の可能性もあります＆このパッチでうまくいったという報告もある（英語・日本語）ため、バックアップを取った上で自己責任でならば、試されることをオススメします。

#SwitchResX（シェアウェア、1980円　※今回は10日間無料の試行版でトライ）で解決
途方にくれていたところ、海外フォーラムのQ&A記事でSwitchResXというシェアウェアが激推しされており、トライ。成功しました。
→[SwitchResXのインストール&基本的な使い方（日本語）](http://itopia.teambog.net/2015/04/23/6637)
実際にSwitchResXを用いてLGの当該ディスプレイにウルトラワイド出力する方法は[このサイト（英文）](https://blog.wasin.io/blog/2017/09/28/switchresx-to-help-set-up-ultrawide-lg-monitor-on-macos.html)の前半に従って進めました。[SIPを無効化](https://ittrip.xyz/soft/mac/mac-os-sierra-sip)（※自己責任）した後、SwitchResXのコンフィグから「カスタム設定の追加」を選択、すると設定画面が開くのでチェックボックスの有無から各項目の値まで[このサイト（英文）](https://blog.wasin.io/blog/2017/09/28/switchresx-to-help-set-up-ultrawide-lg-monitor-on-macos.html)の前半に載っている設定ウィンドウのスクショ通りに設定しましょう。
設定後、再起動すればMacの画面がウルトラワイド出力されているはずです。

[How to get the LG 29UM57 Monitor working CORRECTLY with your Mac](https://www.youtube.com/watch?v=k2MdxzAC4cA)
こちらは動画解説（同じ方法）です。ご参考にどうぞ。

今回は以上の方法でうまくいきました。同じ症状でお悩みの方の参考になれば幸いです。
（MacユーザーでこれからLGのウルトラワイドディスプレイを買う人は所持Macの相性を確認して買うか、はじめからDisplayportのあるゲームモデルを買いましょう）

#今後の課題
同じMBA early 2015 の Boot Camp＋Winodws10 環境ではウルトラワイド出力できないので、そちらはまた別の対策を考える必要がありそうです。

#追伸
結局、３４型ウルトラワイドがほしいです
texテンプレートを使ってknitrからpdfを作る際のエラー対処

学術雑誌や学会論文など、latexのテンプレートを配布しているところが多いが、それらを使ってRmarkdownからpdfを作成したい。今回は小さなエラーが出てつまづいたので、おそらくすぐ忘れるので解決した方法をメモ。

##1. テンプレのダウンロード
今回はisprsという国際会議プロシーディングスのテンプレートを使いたい。


##2. Yamlの作成
こんな感じ。templateで.texを、documentclassで.clsを、bibliographyで.bibを指定する。
ascii_identifiersはなくてもよいと思う。

```{r}
---
title: "ISPRSguidelines_authors"
author: "AAA"
date: "8/1/2018"
output:
  pdf_document: 
    md_extensions: -ascii_identifiers
    fig_caption: yes
    keep_tex: true
    template: ~/ISPRSguidelines_authors.tex
  md_document:
documentclass: ~/isprs.cls
bibliography: ~/ISPRSguidelines_authors.bib
---

```


##3. Error対処

こんなエラーが出ました。

```
pandoc: "template" (line 49, column 748):
unexpected "\\"
expecting letter
CallStack (from HasCallStack):
  error, called at src/Text/Pandoc/Templates.hs:73:35 in pandoc-1.19.2.1-JIeRA5EnQv74mk86CvVbbp:Text.Pandoc.Templates
Error: pandoc document conversion failed with error 1
Execution halted
```

調べてみるとこちら[https://github.com/jgm/pandoc/issues/2937] が原因のよう。

そこで、.texファイル内の$ $でくくられているものを、$$ $$にする。
これで解決しました。

もし、rticlesで対応しているテンプレートを使うならそれを用いるのがもっとも手っ取り早いと思います。
https://github.com/rstudio/rticles
Tableauの表において各列のtop3に色をつける

# 表で各列のtop3に色付けしたい！！
Tableauで項目ごとに列を作って表を作っていたのですが、
各列ごとにtop3に色をつけようとしたところつまづきました。
（以下完成イメージ）
<img width="450" alt="スクリーンショット 2018-08-22 11.36.51.png" src="https://qiita-image-store.s3.amazonaws.com/0/198985/87027aab-27ae-6581-7da9-b3cce2d16fb9.png">

# １つのtop3だけならなんとかなる
以下の方法を使えば一つのランキングだけはなんとかなりました。
### `RANK()`を使う
1. `RANK()`を使って特定の列に関する順位をメジャー（計算フィールド）で作っておく
2. 左側マークの色にそのメジャーを入れて、`ステップドカラー 2ステップ`＋`中央値 4`
<img width="451" alt="スクリーンショット 2018-08-22 11.42.58.png" src="https://qiita-image-store.s3.amazonaws.com/0/198985/781d38a8-f40e-005a-cde5-0b641e744d64.png">

### INDEX()を使う
1.並び順を降順にする
2.`INDEX()`を使ってメジャー（計算フィールド）を作っておく
3.左側マークの色にそのメジャーを入れて、`ステップドカラー 2ステップ`＋`中央値 4`
<img width="451" alt="スクリーンショット 2018-08-22 11.45.12.png" src="https://qiita-image-store.s3.amazonaws.com/0/198985/dd56141d-9091-83fa-1b9a-6b8476d8fe49.png">

### SQLでflg立てをする
実際にはやっていないですがカスタムSQLの時点で上位のものにflg立てをすれば上二つに似たことができそうです。

# 列の数ワークシートを作るしかない。。。
以下で似たことはできるのですがどうも一つの表ではできないようでした。
[Tableau 10.2 新機能：メジャー毎の凡例表示が可能になりました #tableau](https://dev.classmethod.jp/business/business-analytics/tableau-10-2-new-features-legends-per-measure/)

そのため各列ごとにワークシートを作ってダッシュボードであたかも一つの列に見せかけました
<img width="986" alt="スクリーンショット 2018-08-22 11.52.08.png" src="https://qiita-image-store.s3.amazonaws.com/0/198985/91cbfc74-de78-98dc-f242-b7199480d307.png">

何かいい方法があれば教えて欲しいです。。。

## コメントでいい方法を教えていただきました！
Gassyohさんありがとうございます！！
ユーザー定義でIteratorを作成しようとするとエラーが出力される。

※前提：strictNullCheckが有効、targetがes2015以上

下記のコードをコンパイルしようとするとエラーが発生します。

```ts
class MyIterableIterator implements IterableIterator<number> {
  __count = 0;
  [Symbol.iterator]() {
    return this;
  }
  next() {
    const count = this._count;
    if (count < 10) {
      this.count++;
      return { value: count, done: false };
    }

    // ↓この一行でエラーが発生する
    return { done: true };
  }
}
```

javascriptの[Iterator Protocol](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Iteration_protocols#The_iterator_protocol)では、`iterator.next()`が返すオブジェクトは`done`プロパティが`true`のとき、`value`プロパティを省略してよい、と定められております。

しかし、現在のTypeScript(3.0)ではvalueプロパティを省略することができませんし、undefinedを代入することもできません。

この問題はすでに公式issueに報告されていますが、DefinitelyTypedライブラリと競合するため、修正できないのが現状です。
https://github.com/Microsoft/TypeScript/issues/11375

現在の回避策としては、asキャストや型アサーション演算子で凌ぐしかありません。

```ts
return { done: true } as IteratorResult<number>;
```
Gitコマンドを使う前に　バッファサイズを大きくしておく

# Gitコマンドを使う前の設定
### 大きいサイズのCloneなどを実行すると、エラーが発生します。

***エラー例***

```
error: RPC failed; curl 18 transfer closed with outstanding read data remaining
fatal: The remote end hung up unexpectedly
```



## [対応]バッファサイズを大きくしておく
### 1　TortoiseGitを右クリック
![image.png](https://qiita-image-store.s3.amazonaws.com/0/278660/86a2e8c4-60b4-a635-f1b4-b3268bd81b8e.png)

### 2 TortoiseGit画面
![image.png](https://qiita-image-store.s3.amazonaws.com/0/278660/3eeda877-8545-98aa-57d8-99c382a0ed04.png)
### 3 Config値を変更

```
  [http]
        sslVerify = false
	postBuffer = 104857600
```
OpenCVとZbarでバーコード・QRコード認識(Python)

#OpenCVとZbarでバーコード・QRコード認識(Python)


自分用の備忘録兼バックアップ的なもの

***

##環境

* OS : Ubuntu16.04LTS
* IDE : PyCharm Community Edition
* Python : 2.7

***

##Pythonライブラリ
覚えてる分だけ

* Pillow
* zbar
* opencv

ライブラリのインストール時の問題はStack Overflowにお世話になった

***
##Zbar導入

pipでインストールしようとしてもエラーを吐く

```
sudo apt install python-zbar
```

これでインストールできる

***

##ソース

```python:ReadCode.py
# -*- coding: utf-8 -*-
import cv2
import zbar

scanner = zbar.ImageScanner()

scanner.parse_config('enable')

cap = cv2.VideoCapture(0)

captured = False

while True:

    ret, frame = cap.read()

    gray_img = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

    rows, cols = gray_img.shape[:2]
    image = zbar.Image(cols, rows, 'Y800', gray_img.tostring())
    scanner.scan(image)

    cv2.imshow("frame", gray_img)

    for symbol in image:
        #print('%s' % symbol.data)
        f = open('barcode.txt', 'w')
        f.write('%s' % symbol.data)
        f.close()
        captured = True

    if captured:
        break

    if cv2.waitKey(1) == 27:
        break

cap.release()

cv2.destroyAllWindows()
```

***

##結果

```text:barcode.txt
4909411076634
```

一番手こずったのは環境構築(Zbar)
【Swift 4対応】UITableView (Grouped style) でのセパレータコントロール

# 注意
UITableView に含まれるセパレータの役割を担う View は、 `UITableViewCellSeparatorView` という private な class です。この記事の方法は非推奨な方法となりますので、テクニックの一つとして御覧ください。

# セクショングループの上下セパレータを非表示にする

![Untitled.001.png](https://qiita-image-store.s3.amazonaws.com/0/128344/0ea09e79-c0f7-e0cc-7daf-3e1efb15fec3.png)

```swift
class SampleCell: UITableViewCell {
    override func layoutSubviews() {
        super.layoutSubviews()
        let targetName = "_UITableViewCellSeparatorView"
        for view in subviews {
            // グループの上下セパレータを非表示
            view.isHidden = view.frame.origin.x == 0 && NSStringFromClass(view.classForCoder) == targetName
        }
    }

    override func prepareForReuse() {
        super.prepareForReuse()
        separatorView.isHidden = false
    }
}
```

# 本当は
上記のようなデザインを実現したい場合は、自分でセパレータを作ってコントロールするのが良さそうです。
勉強会レポート - サービスイノベーション基礎講座

※メモ書きになるので詳細は資料を確認！

ウィングアーク１st株式会社　 大川 真史氏

資料
https://speakerdeck.com/masashiokawa/20180821service-innovation-basic-lecture-ev01

・[APQCプロセスフレームワーク](https://speakerdeck.com/masashiokawa/20180821service-innovation-basic-lecture-ev01?slide=9)
→ 業務を俯瞰で理解するためのフレームワーク

・[農林水産以外は全てサービス！](https://speakerdeck.com/masashiokawa/20180821service-innovation-basic-lecture-ev01?slide=12)

## １．サービスの特性、価値の決定要因

サービスの定義：サービス提供者が対価を伴って受容者の望む状態変化を引き起こす行為
by サービス工学研究会
→　状態変化がないとサービスと呼ばない

相手が受け入れなければサービスとして成立しない！！（＝協働生成）
価値の評価は **事前期待・提供プロセス・成果品質**
・事前期待がないサービスは価値と知覚されない
　→潜在的な事前期待を顕在化させるか
　　事前期待に適合していないサービスはリアルだと犯罪・・・。
・提供プロセス・成果品質
　→サービスには必ずギャップが発生する。
　　知覚したサービスに対して対価が支払われる

## ２．価値の類型

・顧客とは誰か
バイヤー・ペイヤー・ユーザ
→顧客を明確に定義して期待価値を把握することが重要

・顧客が知覚する２種類の価値
差異化価値、基本的価値

・一番良い価値提供を狙おうとすると迷惑行為になる

・差異化価値（２パターンしかない）
　既存サービスを他社が追従できない水準で提供
　誰も提供していない機能を提供

顧客接点がすべて。システム化以前に良く考える。

## ３．価値を認識するプロセス

設計・提供・認識のギャップがある。

## ４．サービス開発の基本的な方針

＊＊作るべきサービス：ユーザが使いつづけるサービス＊＊

ユーザは何が良いサービスが教えてくれるわけではない。
→アンケートやヒアリングは無意味
　１日でも多く１日でも速くユーザからダメだしされるべき

アジャイル（＝試行錯誤型）で開発する。
→ディレクター、エンジニア、ユーザ、UXデザイナーでチームを組む

例：山口洋介氏　薬局
→現場の人がサービスを構築すると勝てない

・QFD＝品質設計で使用
　品質機能設計
vbscript

#cmd発行

```
Set objShell = CreateObject("WScript.Shell")
objShell.Run "cmd /c ipconfig /all > c:¥ip.txt",0,false
```

##### 第二引数
0非表示
1通常ウィンドウ
2最小化
3最大化

##### 第三引数
trueコマンドの処理を待って次を実行
falseコマンドの処理を待たずに次を実行
秘密鍵にパスフレーズが設定されているとSourceTreeを使ってBitbucketのリモートにプッシュできない

### 困ったこと
SourceTreeを使ってBitbucketのリモートレポジトリにソースをコミットできない（コンソールでgit pushは可能）

### 前提条件
- OSはmacOS
- SSH秘密鍵を~/.ssh/id_rsaとして生成済み
- Bitbucketの自分のアカウントのSSH鍵に~/.ssh/id_rsa.pubの内容を設置済み
- Bitbucketにレポジトリは作成済み
- SourceTreeのリモートレポジトリはアプリの次の手順で設定済み（メニュー＞リポジトリ＞リポジトリ設定＞リモート＞追加＞URLの右の地球儀ボタンを押してBitbucketを指定）

### 現象
SourceTreeのプッシュを実行すると下記のエラーメッセージが表示されプッシュに失敗する。

> git@bitbucket.org: Permission denied (publickey).

### 原因
SSH秘密鍵~/.ssh/id_rsaにパスフレーズが設定されていると失敗する。
確かにコンソール上でプッシュした時には下記のようにパスフレーズを聞かれていた。

> $ git push -u origin master
> Enter passphrase for key '/Users/xxx/.ssh/id_rsa':

 ~~次のようにパスフレーズを削除したらプッシュに成功した。~~

> ~~$ openssl rsa -in ~/.ssh/id_rsa -out ~/.ssh/id_rsa2~~
> ~~$ mv ~/.ssh/id_rsa2 ~/.ssh/id_rsa~~
> ~~$ chmod 600 ~/.ssh/id_rsa~~

mikkameさんからコメント頂きまして、下記の様にssh-agentに秘密鍵を登録することでパスフレーズ付きの秘密鍵でもプッシュに成功しました。

> $ ssh-add -K

調べたところmacOS標準のsshクライアントはデフォルトでkeychainの情報を参照できるらしく、ssh-addを使って秘密鍵をkeychainに登録しておけばパスフレーズ付きでもsshクライアントが利用できる様になるらしい。


しかし、失敗時のエラーメッセージが不親切すぎるなぁ
MITなカンバンWebアプリWekanをDockerで

# Wekanをセットアップ

## 環境

```text:/etc/redhat-release
CentOS Linux release 7.0.1406 (Core) 
```

## 手順

```shell-session
# systemctl stop firewalld
# systemctl disable firewalld
# setenforce 0
# timedatectl set-timezone Asia/Tokyo
# timedatectl set-time 13:00:00
```

### dockerとdocker-composeをインストールします

```shell-session
# yum install -y docker
# systemctl start docker
# systemctl enable docker
# curl -L https://github.com/docker/compose/releases/download/1.22.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
# chmod +x /usr/local/bin/docker-compose
```

> `curl: (35) Peer reports incompatible or unsupported protocol version.`と言われたら
>
> ```shell-session
> # yum -y update nss curl libcurl
> ```

### docker-compose.ymlを用意します

```shell-session
# yum -y install git
# git clone https://github.com/wekan/wekan-mongodb.git
```

### docker-composeで起動します

```shell-session
# cd wekan-mongodb
# docker-compose up -d
```

### 確認

ブラウザで`http://%YOUR_SERVER%`を開いて、見えればOK

# 参考

- https://github.com/wekan/wekan/wiki/Install-and-Update#install-using-docker
SQL Server の良く使うSQLまとめ

# 特定のキーワードを含むプロシージャを探す

特定のキーワードを含むプロシージャやファンクションを探したい時は以下のSQLで探せます。

```sql

SELECT t2.type, t2.name, t1.definition
  FROM sys.sql_modules AS t1
  JOIN sys.objects AS t2 ON t1.object_id = t2.object_id
 WHERE t1.definition LIKE '%キーワード%'
 ORDER BY t2.type, t2.name;
```

# 特定のカラムを含むテーブルを探す

特定のカラムを含むテーブルを探したい時は以下のSQLで探せます。

```sql

SELECT t1.name AS TableName, t2.name AS ColumnName
  FROM sys.tables AS t1
  JOIN sys.columns AS t2 ON t1.object_id = t2.object_id
 WHERE t2.name LIKE '%カラム名%'
```

# 現在実行中のSQLを確認する

```sql

SELECT
	r.session_id,
	r.start_time,
	TotalElapsedTime_ms = r.total_elapsed_time,
	r.[status],
	r.command,
	DatabaseName = DB_Name(r.database_id),
	r.wait_type,
	r.last_wait_type,
	r.wait_resource,
	r.cpu_time,
	r.reads,
	r.writes,
	r.logical_reads,
	t.[text] AS [executing batch]
FROM
	sys.dm_exec_requests r
CROSS APPLY
	sys.dm_exec_sql_text(r.sql_handle) AS t
ORDER BY
	r.total_elapsed_time DESC;
```

# ロック状況を確認する

```sql
SELECT
    resource_type AS type,
    resource_associated_entity_id as entity_id,
    ( CASE 
        WHEN resource_type = 'OBJECT' THEN OBJECT_NAME( resource_associated_entity_id )
        ELSE
          ( SELECT OBJECT_NAME( OBJECT_ID )
              FROM sys.partitions
             WHERE hobt_id=resource_associated_entity_id )
     END) AS object_name,
    request_mode AS request_mode,
    request_type AS request_type,
    request_status AS request_status,
    request_session_id AS session_id
  FROM sys.dm_tran_locks
 WHERE resource_type <> 'DATABASE'
 ORDER BY request_session_id
```

# セッション情報を確認する

```sql
SELECT * FROM sys.dm_exec_sessions
```

# 0除算エラーを回避する

SELECT で除算をする場合に、0除算エラーを回避するにはNULLIFを使用します。

```sql

SELECT t1.profit / NULLIF(t1.sales, 0) * 100 AS grossProfitRatio
  FROM Sales AS t1
```

# プロシージャやファンクションの更新時間を確認する
```sql
SELECT name, create_date, modify_date
  FROM sys.objects
 WHERE type = '名前'
 ORDER BY name;
```
[Python]プログラム中に対話型インタープリタを起動させる

テストやデバッグなどで、プログラム中の適当な箇所で対話型インタープリタを実行させたい時があるが毎回忘れるため、ここに備忘録として残します。
python3でしか確認していませんが、python2.7でもcodeモジュールは提供されているみたいだし、動くと思います。


```python
import code

a=1+1
print("Hello!")

# 対話型インタープリタを起動させ、exitされた後も後続のプログラムを走らせる
try:
    code.InteractiveConsole(globals()).interact()
except SystemExit:
    pass

print(b)
print("bye!")
```


実行結果

```bash
> python .\InteractiveConsole.py
Hello!
Python 3.6.4 (v3.6.4:d48eceb, Dec 19 2017, 06:54:40) [MSC v.1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> a
2
>>> b = "foo"
>>> quit()
foo
bye!
```
vueで条件分岐、ループをみやすくする

vueで条件分岐、ループを書く場合は以下のようになると思いますが、分岐やループしているかが分かりにくいように感じました。

```vue:vue
<template lang="pug">
div
  //- 条件分岐
  p(v-if="true") TRUE
  p(v-else) FALSE
</template>
```

```vue:vue
<template lang="pug">
div
  ul
    //- ループ
    li(v-for="(item, index) in [1, 2, 3]", :key="index") {{ item }}
</template>
```

原因は条件分岐などのロジックと表示部分が一緒になっているせいだと思うので、以下のようにtemplateを使ってロジック部分だけ抽出すると見やすくなるのかなと思いました。

```vue:vue
<template lang="pug">
div
  //- 条件分岐
  template(v-if="true")
    p TRUE
  template(v-else)
    p FALSE
</template>
```

```vue:vue
<template lang="pug">
div
  ul
    //- ループ
    template(v-for="(item, index) in [1, 2, 3]")
      li(:key="index") {{ item }}
</template>
```
JavaScript Promise備忘録

# 概要
JavaScriptのPromiseを使ったサンプルコードのメモ。

fnメソッドの引数を変更する事によって、resolveを返す時とrejectを返す時の動作確認も可能。動作確認は[Repl.it](https://repl.it/)が便利。

```e.g.
resolveを返したい場合: fn('Success')
rejectを返したい場合: fn('Fail')
※rejectを返す場合はresolveを返す引数`Success`以外であれば何でもよい。
```

# async/await

```JavaScript
let count = 0

const fn = (arg) => {
  return new Promise(function(resolve, reject) {

    count++

    if (arg === 'Success') {
      resolve(`${count}回目 Success!`)
    } else {
      reject(`${count}回目 failed...`)
    }
  })
}

async function fnAsync() {
  try {
    const fn1 = await fn('Success')
    console.log(fn1)
    
    const fn2 = await fn('Success')
    console.log(fn2)
    
    const fn3 = await fn('Fail')
    console.log(fn3)
  } catch (e) {
    console.log(e)
  }
}

fnAsync()
```

# then/catch
```JavaScript
let count = 0

const fn = (arg) => {
  return new Promise(function(resolve, reject) {

    count++

    if (arg === 'Success') {
      resolve(`${count}回目 Success!`)
    } else {
      reject(`${count}回目 failed...`)
    }
  })
}

fn('Success').then(data => {
  console.log(`${data}`)
  return fn('Fail')
}).then(data => {
  console.log(`${data}`)
  return fn('Success')
}).then(data => {
  console.log(`${data}`)
}).catch(data => {
  console.log(data)
})
```
【Xcode】iOS SimulatorをDockに追加する方法

## すばやくシミュレーターだけを実行したい

[Xcode の iOS Simulator を単体で開く方法](https://qiita.com/phi/items/a1a5bc405dfd99b83ae8)を読んで、そういえばシミュレーターをDockに追加しておけば便利だな、と思ったのでやってみました。

## シミュレーターをDockに登録する

まずは、Xcodeからシミュレーターを実行します。

<img width="487" alt="001.png" src="https://qiita-image-store.s3.amazonaws.com/0/38924/f18fb863-9a8d-c95d-ad26-e3f37781e104.png">


Dockに表示されているシミュレーターを右クリックして、オプション -> Dockに追加をクリックします。

<img width="145" alt="002.png" src="https://qiita-image-store.s3.amazonaws.com/0/38924/89b097fe-b6f1-63a5-eb33-9584d381ada0.png">


すると、Dockにシミュレーターが追加されます（Xcodeちゃんと仲良くDock追加の記念撮影）。

<img width="921" alt="003.png" src="https://qiita-image-store.s3.amazonaws.com/0/38924/b7c47893-ebfc-d822-6a08-dc14cd4404eb.png">


iPhone Xが起動するので（どこかでデフォルトの端末を設定するところがある？）、メニューのHardware -> Deviceをクリックすると、iOSやtvOSやwatchOSが表示されます。あとは、OSをクリックして、各OSに対応した端末のなかから実行したい端末を選択しましょう。

## 終わりに

すでにシミュレーターにインストール済みのアプリを実行したり、デバッグする前にシミュレーターからアプリを削除したいときなどに、Xcodeからシミュレーターを実行しなくてもいいのでひと手間へらすことができます。

この記事で、世界中のXcoderの時間が短縮されて、すばらしいアプリがたくさん生まれると幸いです😊
【Carthage】Task failed with exit code 65:

# 注意
このエラーは様々な原因で発生すると思われます。
解決策の一つとして見ていただければと思います。

# 状況
`carthage update --platform iOS` で `Task failed with exit code 65` と言われてしまう。

```sh
$ carthage update --platform iOS

*** Building scheme "VueFlux" in VueFlux.xcodeproj
Build Failed
	Task failed with exit code 65:
	/usr/bin/xcrun xcodebuild -project /Users/travis/build/AkkeyLab/AppName/Carthage/Checkouts/VueFlux/VueFlux.xcodeproj -scheme VueFlux -configuration Release -derivedDataPath /Users/travis/Library/Caches/org.carthage.CarthageKit/DerivedData/9.1_9B55/VueFlux/1.4.2 -sdk iphoneos ONLY_ACTIVE_ARCH=NO BITCODE_GENERATION_MODE=bitcode CODE_SIGNING_REQUIRED=NO CODE_SIGN_IDENTITY= CARTHAGE=YES archive -archivePath ./ SKIP_INSTALL=YES GCC_INSTRUMENT_PROGRAM_FLOW_ARCS=NO CLANG_ENABLE_CODE_COVERAGE=NO (launched in /Users/travis/build/AkkeyLab/AppName/Carthage/Checkouts/VueFlux)

This usually indicates that project itself failed to compile. Please check the xcodebuild log for more details: /var/folders/bb/n7...gn/T/carthage-xcodebuild.ih...zh.log
```

# 解決策
macOS, Xcode ともに最新の状態にする。
CI を利用している場合は Xcode のバージョンも変更してあげる必要があります。

```yml:.travis.yml
-        - osx_image: xcode9.1
+        - osx_image: xcode9.4.1
```