OmniAICreator/Qiita-1.07M huggingface dataset:
ドキュメントはMarkdownにすれば管理がラクだし簡単にPDF化もできる

# はじめに
ドキュメントの管理の方法っていろいろあるけど、意外と__統一されてない__し、そもそも古いドキュメントだと__wordだったり__、__更新履歴残ってなかったり__…結構困ることありませんか？？

![nagedasu_woman.png](https://qiita-image-store.s3.amazonaws.com/0/112032/e2f717de-cdb2-a061-5e03-5443651e4729.png)


先日、実際この問題に直面して、ドキュメントの管理方法を考え直すことになったんです。
考えるべきポイントとしては、

* 不特定多数のメンバー間での利用において、
 * 管理しやすくしたい
 * 更新しやすくしたい
 * 更新履歴を残したい
* 保存形式は複雑なものではなく、単純で扱いやすいものにしたい
* 簡単にPDF化できるようにしたい
* etc...

などなど。
やっぱり複雑な__office(word,excel)の形式は避けたい__し、__簡単にPDF化できることは必須__ですね。その上で__管理も簡単にできたら最高！__と思ったんです。

# 管理方法・保管形式について考えてみたこと
## GitHub で管理

![doc_to_github.png](https://qiita-image-store.s3.amazonaws.com/0/112032/35b91e0d-e859-5349-e1c2-6fb12d0ba21e.png)


そうするとまず考えるのが管理の問題です。ここは__GitHub__に統一できるのがラクと思いました！
ポイントは、

1. 有償ですが、privateでリポジトリを作成できること（物によってpublicでも）
2. 更新がラク
3. 更新履歴がバッチリ残せる

ちょうど自分たちのチームではアカウントがあったこともあり、GitHubを採用しました◎

## Markdown で作成してPDF化する

![markdown_to_pdf.png](https://qiita-image-store.s3.amazonaws.com/0/112032/044c21aa-da0c-0fc8-6f76-c401fc223edf.png)

次に、どの形式で書類を作るかです。幸い__GitHubはどんな形式のファイルでもpushできる__ので、形式は何でもOKです。ただ書類としては__PDF__であるか、__簡単にPDF化できるもの__がいいですね。PDFそのもので保管した場合は、面倒なのが編集です。PDFは編集できないので、元ファイルも一緒にアップする必要があります。なのでどっち道PDFにする前のドキュメントで管理する必要があります。
ではどうしたらいいでしょう？

PDF化できる形式と言えば__Word__や__パワーポイント__などが浮かびますが、__書体や文字サイズなどが上手く統一されなかったり、勝手に変更になっていたり__、__不特定多数のメンバー間での利用には適さない__部分があるため、あまりおすすめではないです。そういった部分を気にしないでよい形式として、__Markdown__ があります。Markdown はQiita でもおなじみですが、Wikipediaには「__書きやすくて読みやすいプレーンテキストとして記述した文書__」とあるように、編集が本当に簡単です。

> 参考：Wikipedia
> [__Markdown__](https://ja.wikipedia.org/wiki/Markdown)

あとはPDF化さえ出来れば…
早速調べてみたところ、方法はさまざまありましたが、一番簡単に出来そうなのが、
__テキストエディタのAtom のPackage を利用する方法__でした！
（その方法については[次の章](#テキストエディタのAtom のPackage を利用する方法)でご紹介します。）

ここまでひとまず考えたことをまとめると、

1. __Markdown で作成__
1. __GitHub で管理__
1. __PDF化して利用__
 * [テキストエディタのAtom のPackage を利用する方法](#テキストエディタのAtom のPackage を利用する方法)

![図1.png](https://qiita-image-store.s3.amazonaws.com/0/112032/8558ecdc-a97b-9c47-35ab-80a33ab342d1.png)

というドキュメントの作成/管理体制がベストということがわかりました◎

## テキストエディタのAtom のPackage を利用する方法

![markdown_to_pdf_for_atom.png](https://qiita-image-store.s3.amazonaws.com/0/112032/68e22a19-4a48-e5c8-cadb-0227a2dd7580.png)

1. まずはテキストエディターの[__Atom__](https://atom.io/)をダウンロード・インストールします
 > 参考：__テキストエディタAtom(エイトム)とは？__
 > GitHubの創業者が作られたもので、自由にカスタマイズ可能なオープンソースのエディタ。
 > （詳細：[外部リンク](https://blog.codecamp.jp/atom_utility#Atom-2)）

1. 次に、下記の手順でAtomに__Package「markdown-pdf」__をインストールします
 * 「Atom」＞「preferences...」＞「Install」＞「Install Packages」の下のテキストフィールドに「markdown-pdf」と入力し検索＞「Install」をクリック
 * 日本語設定している場合は、「Atom」＞「環境設定...」＞「Install」＞「パッケージのインストール」の下のテキストフィールドに「markdown-pdf」と入力し検索＞「インストール」をクリック
1. Markdown でドキュメントを作成します
 * ページ区切りには次のコードを使います：`<div style="page-break-before:always"></div>`

1. 作成したMarkdown ドキュメントの上で「__control__ + __shift__ + __C__」
 * 数秒後PDF化されます◎

> 参考：日本語設定方法
> Package「markdown-pdf」をインストールする手順と同様に、「__japanese-menu__」を導入すると、メニューなどが日本語化されます。

とても簡単でした！

# おわりに
いかがでしたでしょうか。ドキュメント管理に困っている方、少しでもお役に立てれば幸いです！
また、これからドキュメントを作成される方は参考にしていただければ嬉しいです。
組織を移る際にメールを引き継ぐ方法

組織を移る際に[Outlook.com](https://outlook.live.com/owa/)を使ってメールを引き継ぐための方法についてまとめます。

#前提
* 組織Aから組織Bへ異動する
* メールアドレスが使える期間は以下のようになっている<br>![無題.png](https://qiita-image-store.s3.amazonaws.com/0/52291/087457f0-8dc9-6cd1-ae0c-adb43df4daeb.png)
* 組織Bのメールアカウントには他のメールアカウントと同期する機能が付いている

#手順
1. 移行用の[Outlook.com](https://outlook.live.com/owa/)のメールアドレスを作成します。<br>※このメールアドレスは使用できるメールアドレスがない期間に使用するメールアドレスにもなります。
2. [Outlook.com](https://outlook.live.com/owa/)で作成したメールアドレスにサインインします。
2. 歯車のマークをクリックし、`接続されているアカウント`をクリックします。<br>![2017-02-17_18h01_16.png](https://qiita-image-store.s3.amazonaws.com/0/52291/d41c183f-6311-7b68-6660-3b67a072f023.png)
3. 組織Aのメールアカウントに合わせて該当する方をクリックします。<br>![2017-02-17_18h10_29.png](https://qiita-image-store.s3.amazonaws.com/0/52291/d52ad303-045d-af32-784e-746d9586f7cd.png)
4. 組織Aのメールアカウントの情報を入力します。<br>※POP3かIMAPかを選択する必要がある場合には、POP3しか提供していない場合を除き、IMAPを選択するのがおすすめです。
5. 接続が完了した後、しばらく待つと組織Aのメールが同期されます。
6. 組織Bのメールアドレスが発行されたら、移行用のメールアカウントのメールを同期させます。
mod_rewriteでページ単位でリダイレクトさせる方法

URLを1個ずつ指定して別のサイトにリダイレクトさせる場合の書き方。

こういうケースではRewriteCondは不要です。

## 例

`/foo/bar.html` => `http://www.example.com/new/bar.html`
`/foo/buz.html` => `http://www.example.com/new/buz.html`

## 設定
```
RewriteRule ^foo/bar.html$	http://www.example.com/new/bar.html [R=301,L]
RewriteRule ^foo/buz.html$	http://www.example.com/new/buz.html [R=301,L]
```
クリッピングパスに間接参照は使えない

最近 SVG を触ってて、ちょっとはまったのでメモ。

## クリッピングパスの基本
クリッピングパスは対象の塗りを適用する範囲を別のパスによって制限する方法のこと。

```xml:hoge.svg
:
<def>
  <symbol id="hoge">
    <rect fill="#F00" width="100" height="100" />
    <rect fill="#0F0" width="100" height="100" x="10" y="10" />
    <rect fill="#00F" width="100" height="100" x="20" y="20" />
  </symbol>
</def>
<clipPath id="moja">
  <path stroke="none" fill="#000" d="M0 0 L100 25 130 130 25 100 0 0"/>
</clipPath>
<g clip-path="url(#moja)">
  <use xlink:href="#hoge" />
  <use xlink:href="#hoge" x="30" y="30" />
</g>
:
```

こんな感じで `<clipPath/>` で定義したものを `clip-path="url(#id)"` で指定して使う。こうすることで、連続する矩形の塗りを `id = "moja"` の描画領域で制限することできる。

## ClipPath の中をいじる
`<clipPath/>` の中にある `<path/>` を シンボル化してみる。

```xml:hoge.svg
:
<def>
  <symbol id="hoge">
    <rect fill="#F00" width="100" height="100" />
    <rect fill="#0F0" width="100" height="100" x="10" y="10" />
    <rect fill="#00F" width="100" height="100" x="20" y="20" />
  </symbol>
  <symbol id="test">
    <path stroke="none" fill="#000" d="M0 0 L100 25 130 130 25 100 0 0"/>
  </symbol>
</def>
<clipPath id="moja">
  <use xlink:href="#test" />
</clipPath>
<g clip-path="url(#moja)">
  <use xlink:href="#hoge" />
  <use xlink:href="#hoge" x="30" y="30" />
</g>
:
```

変更点は `<clipPath/>` の `moja` の中の `<path/>` を `<symbol/>` にして外に出しただけだ。
こうするとなにも表示されなくなる。 `<symbol/>` を `<g/>` などにしてもだめだった。

## Path を直接参照してみる

```xml:hoge.svg
:
<def>
  <symbol id="hoge">
    <rect fill="#F00" width="100" height="100" />
    <rect fill="#0F0" width="100" height="100" x="10" y="10" />
    <rect fill="#00F" width="100" height="100" x="20" y="20" />
  </symbol>
  <path id="test" stroke="none" fill="#000" d="M0 0 L100 25 130 130 25 100 0 0"/>
</def>
<clipPath id="moja">
  <use xlink:href="#test" />
</clipPath>
<g clip-path="url(#moja)">
  <use xlink:href="#hoge" />
  <use xlink:href="#hoge" x="30" y="30" />
</g>
:
```

変更点は `<symbol/>` の中で定義されていた `<path/>` を単独で定義してみただけ。また表示されるようになった。
どうやら、 `<clipPath/>` の中で `<use/>` を使って参照するものは `<path/>` や `<text/>` や基本図形[^1]などを直接参照する場合に限るらしい。
[^1]: rect や circle など

### クリッピングパスの中でグループ化したものを使いたい場合
直接参照しかできないので、当然グループ化した構造を `<use/>` で参照することはできない。
どうしたらいいかと思ったけど、グループ化したものの中身にそれぞれに ID をふって、`<clipPath/>` 内でそれぞれ `<use/>` するしかないかと思われる。

## ClipPath を定義する位置によるブラウザでの挙動の違い

最初は `<defs/>` 内に `<clipPath/>` を定義していた。Firefox では機能したが、Chrome では機能しなかった。
SVG もやっぱりブラウザでの挙動の違いが結構あるんだなぁ。[^2]
[^2]: みつを
The Basic - Booleans


Swift には *Bool* という名前の論理型が用意されている。
この型の値は、true もしくは false の真偽値。

この二つは文字ではあるが、" " でくくらない。

```swift
let orangesAreOrange = true
// Bool型 true

let turnipsAreDelicious = false
// Bool型 false

let beerShouldBeHot = "false"
// "" でくくると、String型の文字列になってしまう。
```

"" でくくらず、true もしくは false が初期値だった場合、型推測が働き Bool型 であると判定される。

Bool型 は if文 においてよく利用される。

```swift
if turnipsAreDelicious {
     print("Mmmm, tasty turnips!")
} else {
     print("Ewww, turnips are horrible.")
}

// false なので、"Ewww, turnips are horrible." がプリントされる
```

if文のような条件式については *Control Flow* で説明がある。

Swiftは型の概念があるため、true/false以外は真偽値に慣れない。

```swift
let i = 1
if i {

     // コンパイルエラーとして処理される。

}
```

しかしながら、下記のような記述は有効である。

```swift
let i = 1

if i == 1 {

     // 正しいコードとしてコンパイル・処理される
     
}
```

上記の *i == 1* の結果は Bool型であり、次の処理に進める。i == 1 のような比較については *Basic Operators* で解説がある。
Ubuntuで、残量バッテリーを表示する方法

Ubuntuのデフォルトの設定では、バッテリーの残量が表示されているはずですが、たまに表示されないこともあるので、表示する方法を記しておきます。

# 大まかな流れ
1. Unity tweak toolを開く
2. Unityという項目（１番上の段）の、「パネル」を選択
3. 「電源」にチェックを入れる。

## 1.Unity tweak toolを開く
Unity tweat toolが入っていない場合は、以下のコマンドで入ります。

```bash
sudo apt-get install unity-tweak-tool
```

インストールできたら、ターミナルで`unity-tweak-tool`と打てば起動します。

## 2.Unityという項目（１番上の段）の、「パネル」を選択

![unity-tweak-tool.png](https://qiita-image-store.s3.amazonaws.com/0/136124/5e710f82-8e86-434f-4600-ad25919f5142.png)


## 3.「電源」にチェックを入れる。
![unity-tweak-tool2.png](https://qiita-image-store.s3.amazonaws.com/0/136124/c5b1cbaf-b687-8be6-2d2b-2b89188559aa.png)


# 関連する投稿
コマンドラインでバッテリーの残量を表示できる方法もあるようです。
[バッテリーの残量を確認する方法](http://qiita.com/ka_/items/6670d437055f2e9cc537)

# あとがき
バッテリーを表示する以外にも、unity-tweak-toolにはいろいろな設定項目があるので、それも見てみるとおもしろいと思います。
C#：拆箱装箱2

.NET包含一个特殊的Object类，可以接受任意的数据类型的值，当所传递或所赋值的类型不是一个特定的数据类型时，object类就提供了一种传递参数和赋值的通用方法。赋给object的值必须作为引用类型，并存放砸托管堆中。

方法/步骤
1
装箱：
int age = 24;
object refAge= age;
可以看的出，第一条语句创建一个变量age，并将值放在托管栈中；
第二条语句将age的值赋给引用类型。它将值24放在托管堆中。
这个值类型包装为引用类型的过程，称为装箱。
![alt](http://e.hiphotos.baidu.com/exp/w=500/sign=6e2589ba0ed79123e0e094749d355917/fcfaaf51f3deb48f28f1786cf21f3a292cf578ec.jpg)
C#装箱和拆箱原理
2
拆箱：
相反，将引用类型转换为值类型的过程称为拆箱。拆箱将对对象强制转换为原来的类型。对前面的对象进行拆箱。
int  newAge = (int) refAge;
string newAge =(String) refAge;
拆箱的值必须和它要转换的目标的变量有相同的类型。
C#装箱和拆箱原理
C#：装箱和拆箱


装箱和拆箱是值类型和引用类型之间相互转换是要执行的操作。 

1.	装箱在值类型向引用类型转换时发生

2.	拆箱在引用类型向值类型转换时发生

光上述两句话不难理解，但是往深处了解，就需要一些篇幅来解释了。

我们先看装箱时都会发生什么事情，下面是一行最简单的装箱代码

object obj = 1;
这行语句将整型常量1赋给object类型的变量obj； 众所周知常量1是值类型，值类型是要放在栈上的，而object是引用类型，它需要放在堆上；要把值类型放在堆上就需要执行一次装箱操作。

这行语句的IL代码如下，请注意注释部分说明：

.locals init (
  [0] object objValue
)  //以上三行IL表示声明object类型的名称为objValue的局部变量 
IL_0000: nop
IL_0001: ldc.i4.s 9 //表示将整型数9放到栈顶
IL_0003: box [mscorlib]System.Int32 //执行IL box指令，在内存堆中申请System.Int32类型需要的堆空间
IL_0008: stloc.0 //弹出堆栈上的变量，将它存储到索引为0的局部变量中
以上就是装箱所要执行的操作了，执行装箱操作时不可避免的要在堆上申请内存空间，并将堆栈上的值类型数据复制到申请的堆内存空间上，这肯定是要消耗内存和cpu资源的。我们再看下拆箱操作是怎么回事：

请看下面的C#代码：

object objValue = 4;
int value = (int)objValue;
上面的两行代码会执行一次装箱操作将整形数字常量4装箱成引用类型object变量objValue；然后又执行一次拆箱操作，将存储到堆上的引用变量objValue存储到局部整形值类型变量value中。

同样我们需要看下IL代码：

.locals init (
  [0] object objValue,
  [1] int32 'value'
) //上面IL声明两个局部变量object类型的objValue和int32类型的value变量
IL_0000: nop
IL_0001: ldc.i4.4 //将整型数字4压入栈
IL_0002: box [mscorlib]System.Int32  //执行IL box指令，在内存堆中申请System.Int32类型需要的堆空间
IL_0007: stloc.0 //弹出堆栈上的变量，将它存储到索引为0的局部变量中
IL_0008: ldloc.0//将索引为0的局部变量（即objValue变量）压入栈
IL_0009: unbox.any [mscorlib]System.Int32 //执行IL 拆箱指令unbox.any 将引用类型object转换成System.Int32类型
IL_000e: stloc.1 //将栈上的数据存储到索引为1的局部变量即value
拆箱操作的执行过程和装箱操作过程正好相反，是将存储在堆上的引用类型值转换为值类型并给值类型变量。

装箱操作和拆箱操作是要额外耗费cpu和内存资源的，所以在c# 2.0之后引入了泛型来减少装箱操作和拆箱操作消耗。

下一篇我们看下使用泛型和不使用泛型情况下的装箱拆箱情况。
UbuntuでUSBメモリのマウント


UbuntuがGUIでUSBメモリを認識しないので，コマンドラインからマウントする．

#認識場所の確認

1．USBデバイス未接続の状態で，現在の認識状態を確認．

```bash
ls /dev/sd*

出力結果: /dev/sda /dev/sda1 /dev/sda2 /dev/sda3
```

２．USBデバイスを接続し，同様に確認して，未接続状態の時との違いを検索．
　　(この時，末尾に数字のついているものを優先)

```bash
ls /dev/sd*

出力結果: /dev/sda /dev/sda1 /dev/sda2 /dev/sda3 /dev/sdb /dev/sdb1
```

今回の場合は，/dev/sdb1 を選択．

#USBメモリのマウント
認識場所がわかったら，メモリをマウントする．
オプション -t でUSBのファイルシステムを選択する．

```bash
mount -t vfat /dev/[見当をつけた場所] /media

今回の場合 -> mount -t vfat /dev/sdb1 /media
```

これで，UbuntuにUSBメモリをマウントできた．
vccwのwordmoveが「permission denied」のエラーとなった際に・・


vccwでwordpressのローカル環境を作成して、テーマ開発する際にハマったのでメモ。



秘密鍵が複数あり、.ssh直下のid-rsa以外に独自の名前をつけている又はディレクトリを作成して保存している場合に、それに仮想環境からアクセスできるようにconfigの作成とssh-agentの登録を行わなくてはならない。

もし秘密鍵を.ssh/test/id_rsaに保管している場合は・・

```:.ssh/config
Host testsever
  HostName xxx.jp
  Port xxx
  User xxx
  IdentityFile ~/.ssh/test/id_rsa
  TCPKeepAlive yes
```
とconfigを作成した上で。。

```
$ ssh-add -K ~/.ssh/test/id_rsa
```
とターミナルでコマンドを打ちssh-agentに登録する。

これはターミナルを終了した際は **毎回行わなくてならない！**
それがわからず、2時間悩んだ。。

毎回打つのに楽するためにはaliasの登録がある
たとえば・・

```
$ alias ssh-pre='add-ssh -K ~/.ssh/test/id_rsa'
```

とすれば

```
$ ssh-pre
```

で上記コマンドが実行され、ssh接続の準備ができる。


[こちら](http://theorthodoxworks.com/wordpress/vccw3-local-wordmove-deploy/)のブログを参考にさせて頂きました。
GCPの負荷分散(LB) - Compute Engine構成のヘルスチェックでなんかこける

- ん、こけるはずないのにってとき

## やること
- firewallの `130.211.0.0/16`をallowになってるか確認してみてください
    - allowにすると動くかも

## なんで
- GCEのfirewallを解放してLB -> GCEのヘルスチェックのアクセスログを見てみる

```
- - - [16/Feb/2017:09:51:48 +0000] "GET /g/system HTTP/1.1" 200 1299 "-""GoogleHC/1.0" "130.211.1.99" "auth:-"
- - - [16/Feb/2017:09:51:50 +0000] "GET /g/system HTTP/1.1" 200 1299 "-""GoogleHC/1.0" "130.211.1.104" "auth:-"
- - - [16/Feb/2017:09:51:50 +0000] "GET /g/system HTTP/1.1" 200 1299 "-""GoogleHC/1.0" "130.211.1.96" "auth:-"
```
- `130.211.1.xxx`みたいのからアクセスきてる
- 調べてみるとGCPのドメインみたい

```
~ % whois 130.211.1.99
#略
NetRange:       130.211.0.0 - 130.211.255.255
CIDR:           130.211.0.0/16
NetName:        GOOGLE-CLOUD
```

- とりあえず、あけたら動いただった
- セキュリティ的に大丈夫なのかはよくわからない。。
- ケチって`130.211.1.0/24`とかやると、アクセスできないリクエストとかたまにあるからきっちり`130.211.0.0/16`で開けた方がいいかも 

## 追記 (2017/2/17)
- 公式docsによると `130.211.0.0/22` と `35.191.0.0/16` を開けておくといいみたいです
- https://cloud.google.com/compute/docs/load-balancing/http/


```
In addition, you must create a firewall rule that allows traffic from 130.211.0.0/22 and and 35.191.0.0/16 to reach your instances. This rule allows traffic from both the load balancer and the health checker. The rule should enable traffic on the port your global forwarding rule has been configured to use, and your health checker should be configured to use the same port.
```

```
https://cloud.google.com/compute/docs/load-balancing/http/
```
RedHat7にwordpressをインストールする

## 準備
* php7のインストールは[こちら](http://qiita.com/yokohama/items/c3f514a703a3660f633f)
* mariadbのインストールは[こちら](http://qiita.com/yokohama/items/e961a86602d2df3bc0a2)
* nginxのインストールは[こちら](http://qiita.com/yokohama/items/7286753710fdb1d275bc)
* php-fpmの設定は[こちら](http://qiita.com/yokohama/items/76e9a2d09112ed9e0d03)

## WrodPressのダウンロード

```
# wget https://ja.wordpress.org/latest-ja.tar.gz
# tar zxvf latest-ja.tar.gz
# mv wordpress /var/www/vhosts/[バーチャルホストのFQDN]
```

wordpressのドキュメントルートは、[今後のnginxの運用](http://qiita.com/yokohama/items/7286753710fdb1d275bc)で決めたディレクトリにした。


## mariadbの設定

今回のバーチャルホストで使うwordpress用のデータベースを用意する。データベース名はドメイン名にした（例えば、example.comだったら、example）。

```
mysql -u root -p

MariaDB [(none)]>create database example;
```
この他root以外のwordpress専用のmysqlのユーザーも作成しました。

## nginxとphp-fpmの設定

[こちら](http://qiita.com/yokohama/items/7286753710fdb1d275bc)で作成したバーチャルホスト専用の設定ファイルに、php-fpmnの設定を追加します。

```
# vi /etc/nginx/conf.d/example.com.conf
```

以下をserverディレクティブの後半に追記。

```
    # wordpress パーマネントリンク設定
    try_files $uri $uri/ /index.php?q=$uri&$args;

    # wp-config.phpへのアクセス拒否設定
    location ~* /wp-config.php {
        deny all;
    }

    # php-fpm用設定
    location ~ \.php$ {
        root /var/www/vhosts/example.com/wordpress;
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
```

確認とリスタート。

```
# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

# systemctl restart nginx.service
```

## WordPressの設定

```
# cd /var/www/vhosts/example.com/wordpress
# cp -p wp-config-sample.php wp-config.php
# vi wp-config.php
```

以下はデータベースに関する設定の箇所です。

```
define('DB_NAME', 'wordpress用に作成したデータベース名');
define('DB_USER', 'wordpress用に作成したデータベースのユーザ名');
define('DB_PASSWORD', 'ユーザーのパスワード');
define('DB_HOST', 'localhost');
define('DB_CHARSET', 'utf8');
```

また、設定ファイルに認証用のユニークキーの設定もしました。以下の、「put your unique phrase here」の箇所に任意の文字列を設定します。

```
define('AUTH_KEY', 'put your unique phrase here');
define('SECURE_AUTH_KEY', 'put your unique phrase here');
define('LOGGED_IN_KEY', 'put your unique phrase here');
define('NONCE_KEY', 'put your unique phrase here');
define('AUTH_SALT', 'put your unique phrase here');
define('SECURE_AUTH_SALT', 'put your unique phrase here');
define('LOGGED_IN_SALT', 'put your unique phrase here');
define('NONCE_SALT', 'put your unique phrase here');
```

いちいち設定するの面倒なので、こちらのサイトにアクセスすると勝手に定義を作成してくれるので、コピペして設定ファイルの該当部分にまるっと貼り付けるだけです。

https://api.wordpress.org/secret-key/1.1/salt/

## 動作確認

http://[ドメイン]/wp-admin/install.php
にアクセスしてログイン画面が表示されれば、サーバーサイドでの作業は一旦完了で、後は画面の指示に従ってインストールを進めていきます。
Lightningコンポーネント(サーバー側コントローラー)

####サーバー側RESTメソッド
クライアント側から呼び出すREST APIメソッドはstatic かつ @AuraEnabledを付ける。
クラス定義はVF用コントローラと同じで普通のクラスでよい。 

```java 
@AuraEnabled
public static List<xxx> getXXX(Id xx){
```

####クライアント側に返すカスタムオブジェクト
プロパティ、メンバーには @AuraEnabledを付けないと、クライアント側JSからは見えない

```java 
public class Item {
    @AuraEnabled public String itemNo {set; get;}
    @AuraEnabled public String tabName {set; get;}

```

サーバー側メソッドのパラメータとJS側から送られるデータ型の対応については下記のリンクが参考になる。

[Lightning Components & AuraEnabled method parameters: What’s working and what’s not](https://blog.texei.com/lightning-components-auraenabled-method-parameters-whats-working-and-what-s-not-83c351356104)
MSSQL to PostgreSQL

MSSQL Query and Function convert to PostgreSQL

1. PROCEDURE -> FUNCTION AND RETURN VOID;

```sql
CREATE OR REPLACE FUNCTION <function name> (value)
RETURNS void AS
$$
BEGIN
 <Procedure body>
END;
$$ LANGUAGE plpgsql VOLATILE;
```

2. Data type 
 * nvarchar -> varchar

3. TOP -> LIMIT

4. IF 
 * MSSQL :
 IF condition BEGIN 
 function
 END;
 * PostgreSQL :
 IF condition THEN
 function
 END IF;

5. DYNAMIC SQL 
MSSQL: EXEC query;

PSQL:

```sql
EXEC SQL BEGIN DECLARE SECTION;
EXEC SQL BEGIN DECLARE SECTION;
const char *stmt = "CREATE TABLE test1 (...);";
EXEC SQL END DECLARE SECTION;

EXEC SQL EXECUTE IMMEDIATE :stmt;
```
HTML5のhead内の記述

自分がよく使うパターンをメモ。

## 文書の最初からheadまでの記述
```.html
<!DOCTYPE html>
<html lang="ja">
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<title>タイトル</title>
<meta name="description" content="ディスクリプション">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<link rel="icon" href="favicon.ico">
<link rel="stylesheet" href="css/style.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<script src="js/function.js"></script>
```

html・head・body要素はいずれも、開始・終了タグともに、特定条件下で省略可能。
ここではhtml要素にlang属性を指定するために開始タグのみ記述する。

## 記述順
head要素内の子要素は、記述順に注意する必要があるものが多い。

1.  文字コードの指定  
日本語が出て来る前に記述したほうがいいらしい。重要なので最初に記述する。
1.  ビューポートの指定
1.  タイトル、ディスクリプション
1.  IE互換モードの指定  
cssを読み込む前に指定する。  
ただし、titleタグ・metaタグの前には書かないほうがいいというのを見かけた。  
理由はよくわからなかった。
1.  CSS読み込み
1.  JavaScript読み込み  
レンダリングを妨げるため、body内の最下部がいいとも聞く。  
ほかの解決策として、async属性というものもあるが、なにやら注意が必要とのこと。

## タグごとの説明

### `<html lang="ja">`
ブラウザに日本語のサイトと認識させるためにlang属性をつける。
これがなかったり、値がenになっていると、翻訳しますか？と出てしまうことがある。
emmetの初期設定だとenになっているので注意する。


### `<meta charset="utf-8">`
HTML5ではUTF-8を使用することが推奨されているそう。
使える文字が多かったり、多言語対応していたり、いいことが多い。
コーディングエディタによっては、Shift_JISやEUC-JPが対応していなかったりする。

### `<meta name="viewport" content="width=device-width">`
スマートフォン用のビューポートの指定。
widthはdevice-widthにしてレスポンシブにする。
initial-scaleは上記を記述して、きちんとコーディングすれば自動的に1になるので不要。
user-scalableを無効にするのはアクセシビリティ的によろしくないらしいのでしない。

レスポンシブではない場合はdevice-widthの部分を任意の値を設定する。

### `<title></title>`
タイトルの指定。
検索結果はもちろん、ブラウザのタブやブックマークに表示される。

### `<meta name="description" content="">`
ディスクリプション（＝直訳すると説明）の指定。
検索結果に出る文章。ただし、場合によっては他の文章が使われることもある。
他にも設定していないとOGPで使われたりする。

### `<meta http-equiv="X-UA-Compatible" content="IE=edge">`
IEの互換モードを防ぐ指定。
これをユーザーがONすると古いドキュメントモードで表示されてしまう。
元々はIE8で古いサイトを見ると崩れてしまうため、後方互換させるために実装されたもの。

### `<link rel="icon" href="favicon.ico">`
ファビコンの指定。ブラウザのタブやブックマークで表示される。
rel属性にshortcutは不要。拡張子がicoならばtype属性も不要。
マルチデバイス対応で細かく設定していくとかなりの量になるため、ジェネレーターを使うとよさそう。

http://realfavicongenerator.net/

~~しかし、サイトをホームに追加する人がどれだけいるのだろうか。~~
ホーム画面以外でも、ブラウザのブランク画面などでも表示される場合があるため、設定した方がよさそう。
つい先日知ったが、Androidでホーム画面に追加することでアプリのように振る舞う、プログレッシブWebアプリなるものもある。

### `<link rel="stylesheet" href="css/style.css">`
外部スタイルシートの読み込み。
type属性は初期値がtext/cssになったため、不要。
バックスラッシュも不要になった。

CSS同士の読み込み順にも注意する。
HTTPリクエストを減らすため、Sassを使ってまとめるといい。

### `<script src="js/function.js"></script>`
外部スクリプトの読み込み。
type属性は初期値がtext/javascriptになったため、不要。

CSS同様に、読み込み順にも注意する。
[備忘録]Docker上でnginx+tomcat を構築してみる。

##前提条件

  - CentOS7 on Vagrant (IP:192.168.33.10)
  - docker-compose  version:1.13.1:
  - docker version: 1.10.2

##まずはnginx単独で

```:./nginx/Dockerfile
#公式イメージでも良いが変更を考慮してDockerfileにて実施
FROM nginx:1.11
```

```nginx:./nginx/conf.d/nginx.conf
# Configuration for the server
server {
    listen       8080;
    server_name  localhost;
    root   /usr/share/nginx/html;

    location / {
        index  index.html index.htm;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    location ~ /\.ht {
        deny  all;
    }
}
```

```yaml:docker-compose.yml
version: '2'
services:
  nginx:
    build: nginx/
    hostname: ng01
    ports:
      - 8080:8080
    volumes:
      - ./nginx/conf.d:/etc/nginx/conf.d
      - ./nginx/log:/var/log/nginx
    container_name: nginx01
```

これでとりあえず起動すると
```
docker-compose up -d
```
http://192.168.33.10:8080/
にてnginxのhomeへアクセス可能

## nginx with tomcat

###Dockerfile
```:./tomcat/Dockerfile
FROM tomcat:8.5
```

### tomcat(app) は8090ポートで連携する。
*今のversionではlinksの定義は不要. nginx01 container からping app/app01が可能*

```yaml:docker-compose.yml
version: '2'
services:
  nginx:
    build: nginx/
    hostname: ng01
    ports:
      - 8080:8080
    volumes:
      - ./nginx/conf.d:/etc/nginx/conf.d
      - ./nginx/log:/var/log/nginx
    container_name: nginx01
  app:
    build: tomcat/
    hostname: appserver
    ports:
      - 8090:8090
    volumes:
      - ./tomcat/conf:/usr/local/tomcat/conf
      - ./tomcat/log:/usr/local/tomcat/log
    container_name: app01
```

###nginxのconfに修正を加える。

```nginx:./nginx/conf.d/nginx.conf
# Configuration for the server
    ....
    location / {
        #以下の１行追加(container_nameのapp01でもOK)
        proxy_pass http://app:8090;
        index  index.html index.htm;
    }
    ....
}
```

### tomcat のserver.xml のポートも8080->8090に修正

```xml:./tomcat/conf/server.xml
....
<Connector port="8090" protocol="HTTP/1.1"
         connectionTimeout="20000"
         redirectPort="8443" />
```

http://192.168.33.10:8080/
にアクセスしてみると今度はtomcat homeが見えるはず。
Laravel/Valet 2.0 のアップグレードでハマったのでメモ


Laravel/Valet は Mac で軽快にWebサーバーが構築できるので手軽なんですが、Valet 1.4 から 2.0 にアップグレードした時に、Web サーバーが Caddy から nginx に変更になりました。

また PHP71 にも対応しました。その時にミスったので
そこでハマったことをメモ。 

【2019/2/13 更新】PHP7.3.2 Homebrew の仕様変更などに伴い、少々変更しました。


参考記事
■ Mac のミニマムな Web サーバー Valet 超簡単メモ
http://qiita.com/katzueno/items/49ca8ca2eefbe0a61b63


## おそらくの原因

PHP7.1 サポートしたので、PHP7.0をアンインストールしないで PHP7.1 をインストールしてしまって混乱させてしまった。

また PHP 7.3 がリリースされたので、Brew での PHP 7.2 は `php@7.2` と指定しないといけなくなり、.bash_profile などの path 指定の書き換えが必要になりました。

## 症状

- valet start したのに `No response` で何も反応なし (nginx が動いてない)
- `sudo nginx` して起動するも `502 Bad Gateway` エラーがでる

## 解決策


- valet をアンインストール
    - `valet stop`
    - `valet uninstall`
    - ~/.valet/ フォルダを削除
- nginx をアンインストール
    - `brew uninstall nginx`
- composer をアンインストール
    - `brew uninstall composer`
- dnsmasq をアンインストール
    - `brew uninstall dnsmasq`
- php (php71 か php70) 等をいまある PHP をアンインストール
    - `brew uninstall php` 
    - `brew uninstall php@7.0` 
    - `brew uninstall php@7.1` 
    - 他に PHP が入っていたらすべて削除
    - ただし、サポート終了の PHP (7.0) 等は再インストールできなくなるので、最後の「おまけ」を御覧ください。
- Brew の Valet & PHP 関連パッケージをひとまず綺麗さっぱりアンインストール
- Mac を再起動。再起動時に「s」キーを押してシングルユーザーモードで起動

- 以下の手順で再設定

```
brew update
brew upgrade
brew install composer
brew install php
# デフォルトでは最新のPHPがインストールされるので、必要に応じて古いバージョンの PHP　をインストールしてください。
brew install php@7.1
brew install php@7.2
# ここで英語のメッセージで指示された「.bash_profile」の PATH の書き換え、php サービス登録を行う
composer global require laravel/valet
valet install
cd [valet の対象ディレクトリ]
valet park
```

これでうまくいきました。

## おまけ

PHP 5.6 や 7.0 をインストールしたい時

```
$ brew tap exolnet/homebrew-deprecated
$ brew install php@5.6
$ brew install php@7.0
```



これで、Mac に気軽なローカル環境を立てられます。
配列の特定要素を抽出するのに for 文の代わりに if 文を使いましょう

配列に特定な条件に合う要素を抽出するのに、よく下記のように `for` 文回してその中に `if` 文書いて、条件に合う要素があったら早期リターンし、なかったら `for` 文の外にデフォルト処理書くかと思います

==================追伸==================
コメントのご指摘を見て確かにこの例は `contains` がそのまま使えてあまりよろしくないなぁと思ってコードをちょっと直した。
==================更に追伸==================
そういえばコメントのご指摘の通り `first` メソッドがあった。
==================更に追伸終り==================
==================追伸終り==================


```swift
let list = ["Apple", "Boy", "Serval Cat"]

func search(for target: String) {
	
	for item in list {
		if item.lowercased().hasSuffix(target.lowercased()) {
			print("We have a \(item)")
			return
		}
	}
	
	print("We don't have a \(target)")
	
}

search(for: "cat") // We have a Serval Cat
```

でもこの書き方、当たる場合と当たらない場合の処理が違う深さのネストに入ってるし、`for` 文の中の `return` に気付かないと `for` 文の後ろの処理がされない可能性があることに気づかなくてバグの温床になる可能性もあるので、やはり `if else` 文で回したい。というわけで ~~`Sequence` を拡張してみた~~ `first` を使ってみよう

```swift
let list = ["Apple", "Boy", "Serval Cat"]

func search(for target: String) {
	
	if let target = list.first(where: {$0.lowercased().hasSuffix(target.lowercased())}) {
		print("We have a \(target)")
		
	} else {
		print("We don't have a \(target)")
	}
	
}

search(for: "cat") // We have a Serval Cat
```

のように使えます。たーのしー！
Windows 10 + Excel 2013 > Link > 指定されたプリンタは使用できません。別のプリンタを選択してください。 の対処

```txt:動作環境
Windows 10 Pro (64bit) Anniversary Update適用済
Microsoft Excel 2013
```

Excelで、あるファイルを印刷しようとすると以下のようになった。

- 印刷プレビューが表示されない
- プリンタの詳細を見ようとすると以下のエラーとなる
  - 「指定されたプリンタは使用できません。別のプリンタを選択してください。」

別のファイルでは印刷できた。

以下に記載の方法(通常使うプリンタの設定)にて解決しました。
[エクセルファイルがPDFファイルに変換できないとき @ ぷちぱそさん](https://www.putipaso.com/2016/06/18/%E3%82%AA%E3%83%95%E3%82%A3%E3%82%B9%E3%82%BD%E3%83%95%E3%83%88%E3%81%8Cpdf%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AB%E5%A4%89%E6%8F%9B%E3%81%A7%E3%81%8D%E3%81%AA%E3%81%84%E3%81%A8%E3%81%8D/)

情報感謝です。

Windows 10においては、前に使用したプリンタを覚えておく機能があるようだが、それが有効な場合に出るエラーのようだ。
関連 http://qiita.com/7of9/items/76f4463293bf0e08dac3
自作 Eclipse プラグインからプログラムで Maven プロジェクトをインポートする

Eclipse プラグインから， Maven プロジェクトをインポートする方法です。

Maven プロジェクトのインポートには m2e プラグインが必要なので，別途 Eclipse にインストールしてください。

この方法では pom.xml のあるフォルダーがインポートされるので， workspace フォルダー下に新たにフォルダーが作成されるわけではありません。

```Java
import org.apache.maven.model.Model
import org.eclipse.m2e.core.MavenPlugin;
import org.eclipse.m2e.core.project.IProjectConfigurationManager;
import org.eclipse.m2e.core.project.MavenProjectInfo;
import org.eclipse.m2e.core.project.ProjectImportConfiguration;
import org.eclipse.core.runtime.NullProgressMonitor;

```

〜

```
String groupId = グループ ID
String artifactId = アーティファクト ID
String version = バージョン
File pomXml = pom.xml のファイルオブジェクト

Model model = new Model();
model.setGroupId(groupId);
model.setArtifactId(artifactId);
model.setVersion(version);
model.setPomFile(pomXml);

MavenProjectInfo info = new MavenProjectInfo(artifactId, pomXml, model, null);

Collection<MavenProjectInfo> infoList = new ArrayList<>();
infoList.add(info);

IProjectConfigurationManager manager = MavenPlugin.getProjectConfigurationManager();
ProjectImportConfiguration config = new ProjectImportConfiguration();

try {
  manager.importProjects(infoList, config, new NullProgressMonitor());
} catch (CoreException e) {
  // 例外処理
}
```

グループ ID やアーティファクト ID は pom.xml にも書いてあることを Model オブジェクトにセットしないといけないのでちょっと冗長な気もしますが，とりあえずこれでできます。
The Basic - Type Aliases


*型エイリアス* とは、文字どおり、既存の型に別名をつけられる機能のこと。
型エイリアスを宣言するには *typealias* キーワードを利用する。

型エイリアスは、コードの文脈上把握しやすい名前で型を呼び出したい場合に有効な機能。

例えば外部ソースから特定のデータを参照したい場合など：

```swift
typealias AudioSample = UInt16
```

一度エイリアスを指定したら、どこでもそのエイリアス名でコードが書ける。

```swift
var maxAmplitudeFound = AudioSample.min
// maxAmplitudeFound は UInt16型 の 0
```
Git | カレントブランチをリモートの状態で強制上書きするコマンド例 ( reset --hard を手軽におこなう )

remote の設定はベーシックな場合を想定。

# 例

```
git reset --hard origin/$(git rev-parse --abbrev-ref HEAD)
```

でOK。

# エイリアス登録の例

ご利用は慎重に。

```bash:~/.gitconfig
[alias]
  current = !git rev-parse --abbrev-ref HEAD
  refresh = !git fetch && git reset --hard origin/$(git current)
```

# 環境

- git version 2.9.0

# 参考

- http://stackoverflow.com/questions/1417957/show-just-the-current-branch-in-git








<!-- Update From Qiita API -->

# チャットメンバー募集


何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
[Vim] 行の抽出/除外、文字列の抽出/除外 

行, 文字列の抽出/除外方法を毎回調べてるのでまとめ
`regx` は部分は正規表現になります

# ◯◯を含む行を抽出

```vim:行抽出
:v/regx/d
```

```vim:行抽出（選択範囲）
:'<,'>v/regx/d
```

```vim:検索したあとに対象を抽出
/regx
:v//d
```

# ◯◯を含む行を除外

```vim:行除外
:g/regx/d
```

```vim:行除外（選択範囲）
:'<,'>g/regx/d
```

```vim:検索したあとに対象を除外
/regx
:v//d
```

# 文字列◯◯を抽出
これだけはちょっと分かりにくいので実例で記載
`\(`と`\)` の間で囲んだ中の正規表現に一致する文字列を、後段の `\1` などで利用できる
複数指定している場合は `\2`, `\3` などで使用できる

```txt:実行前
<span>hoge</span>
<span>fuga</span>
```

```vim:文字列抽出（spanタグの中身を抽出）
:'<,'>s/^<span>\(.*\)<\/span>$/\1/
```

```txt:実行後
hoge
fuga
```

# 文字列◯◯を除外

```vim:文字列除外
# 現在の行の最初の対象文字列を除外
:s/regx//

# 現在の行の対象文字列を除外
:s/regx//g

# 全ての行の最初の対象文字列を除外
:%s/regx//

# 全ての行の対象文字列を除外
:%s/regx//g
```

```vim:文字列除外（選択範囲）
# 選択範囲行の各行の最初の対象文字列を除外
:'<,'>s/regx//

# 選択範囲行の対象文字列を除外
:'<,'>s/regx//g
```

```vim:検索したあとに対象を除外
# 現在の行の最初の対象文字列を除外
/regx
:s///

# 現在の行の対象文字列を除外
/regx
:s///g

# 全ての行の最初の対象文字列を除外
/regx
:%s///

# 全ての行の対象文字列を除外
/regx
:%s///g
```
Redhat7にnginxのインストールとバーチャルホストの設定

# インストール

```
# yum install nginx

# nginx -v
nginx version: nginx/1.10.2
```

# バーチャルホストの設定
今後の規約として、

* バーチャルホストの設定ファイルは、/etc/nginx/conf.dに、[ドメインのFQDN].confの名前で運用する。
* バーチャルホストのドキュメントルートは、/var/www/vhosts/[ドメインのFQDN]とする。

上記のルールに従って、/etc/nginx/conf.dの下に、example.com.confという設定ファイルを作りました。

```
server {
    listen       80 default;
    server_name  ec2-xx-xxx-xxx-xx.xx-xxxx-2.compute.amazonaws.com;

    charset utf-8;

    location / {
        root   /var/www/vhosts/example.com;
        index  index.html index.htm;
    }

    error_page 404 /404.html;
        location = /40x.html {
    }

    error_page 500 502 503 504 /50x.html;
        location = /50x.html {
    }

    location ~ /\.ht {
        deny  all;
    }
}
```
今後、このドメインをnginxのデフォルトサービスにしますので、defaultの設定をしています。

設定ファイルのシンタックスチェック

```
# nginx -t
nginx: [emerg] could not build server_names_hash, you should increase server_names_hash_bucket_size: 64
nginx: configuration file /etc/nginx/nginx.conf test failed
```

来ましたこれ。バーチャルホストの、server_nameが長いと怒られています。今回AWSのパプリックドメインをとりあえずそのまま使っているので、たしかに長いです。

で、エラーメッセージ通りに、nginx.confの、server_names_hashに、64を設定してあげてもやはり同じエラーが出ます。

なので、最終的に以下のようにhttpディレクティブの設定を修正しクリアしました。

```
http {
    server_names_hash_bucket_size 128;
```

確認。

```
# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
```
成功！

## デーモンの起動設定と、手動での起動
```
# systemctl enable nginx.service
# systemctl start nginx.service
```
iPhone無料音楽再生アプリ(F Player Lite)

![Screen Shot 0029-02-17 at 3.47.35 PM.png](https://qiita-image-store.s3.amazonaws.com/0/166098/7ed332fa-8d11-fdaf-2c67-5cd59892542f.png)


[F Player Lite : Free Version] 
AppStore link: https://itunes.apple.com/us/app/f-player-lite-free-music-mp3/id1149657157

[Youtube]
https://www.youtube.com/watch?v=Aw4pWz2OcyM
The Basic - Numeric Type Conversion


整数を取り扱う場合、もしそれらが絶対に負の数値にならないことがわかっていたとしても、基本的には *Int型* を使うよう心がけること。
※ 符号なし（正）の整数型として *UInt* が存在する。

整数を扱う場合に Int型 を使うように心がけていれば、コード内に生じるであろう整数リテラル値を扱う際に不要な問題を抱え込まなくてよくなるため。

Int型 以外が必要な場面とは、外部ソースが桁数に厳密である場合や、数値を厳格に管理して最大限の最適化を行いたい場合が想定される。

## 整数型変換
定数・変数に格納できる数値の範囲は、その型によって異なる。
例えば *Int8型* が対応する範囲が -128 から 127 なのに対し、 *UInt8型* は 0 から 255 となる。

その定数・変数に与えられた型が対応する範囲に収まらない数値を格納しようとすると、エラーになってしまう。

```swift
let cannotBeNegative: UInt8 = -1
// UInt8型は負の数値に対応していないためエラーになる。

let tooBig: Int8 = Int8.max + 1
// .maxオプションがInt8の最大値127を提供。
// +1 で 128 となる。
// Int8 対応範囲を超過した数値なのでエラーになる。
```

Int や Int8 のような様々な数値型はそれぞれが異なる対応範囲を持つため、異なる数値型間で作業をする場合は作業毎に型変換を行なう必要がある。

型変換を行うには、既存の定数・変数を使って変換したい型を初期化する必要がある。
下記例では、2000 という数値を持つ UInt16型の定数twoThousandと、1 という数値を持つ UInt8型の定数oneを足し算したいケースを表す。

```swift
let twoThousand: UInt16 = 2_000
let one: UInt8 = 1
let twoThousandAndOne = twoThousand + UInt16(one)
```

2つの定数 twoThousand と one は最初それぞれ異なる型で宣言されているが、one が UInt16 に型変換され両定数が同じ型で統一されているので足し算が成り立つ。

*型名(値)* は Swift における型イニシャライザに初期値を渡す文法である。
実際には、上記例でいうと UInt16 は UInt8型 の値を受け入れるイニシャライザを持っているので UInt8型 の 1 を受け入れて新しい UInt16型 の 1 を生成に成功している。
逆にいうと、 UInt16 が対応したイニシャライザを持っていない場合変換は失敗する。

イニシャライザの種類は拡張可能である。これについては _Extensions_ の項目で解説されている。

## 整数型と小数点型での変換
整数型と小数点型を同時に扱いたい場合は必ず型変換が必要になる。

```swift
let three = 3
let pointOneFourOneFiveNine = 0.14159
let pi = Double(three) + pointOneFourOneFiveNine
// pi は 3.14159 になる。
// 初期値が Double だったため、型推測から Pi は Double型になる。
```

定数 three は Int型 として宣言されているが Double型 の値生成に使われているため、足し算の項が全て Double になり式が成り立つ。

小数点型（Double, Float）から整数型への変換も可能。

```swift
let integerPi = Int(Pi)
// integerPi は 3 になる。
// 初期値が整数型のため、integerPi の型も Int型 になる。
```

小数点型から整数型へ変換が生じた場合、小数点以下は切り捨てられる。4.75 は 4 になり、 -3.9 は -3 になる。

```
注意
数値型の定数・変数と数値リテラルの扱いには差異がある。
数値リテラル 3 は直接 0.14159 と計算が行える。
これは、数値リテラルは明確な型を持たないため。
```
RedHat7でphp-fpmの設定

PHP7のインストールは、[こちら](http://qiita.com/yokohama/items/c3f514a703a3660f633f)

## php-fpmの設定

今回のwebserverは、apacheでなくnginxなので、php-fpmの設定ファイルのユーザーとグループを変更します。設定と言ってもユーザ名とグループ名を変えるだけです。

```
# vi /etc/php-fpm.d/www.conf
```

```
; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
;       will be used.
; RPM: apache user chosen to provide access to the same directories as httpd
user = nginx
; RPM: Keep a group allowed to write in log dir.
group = nginx
```
設定ファイルの、userとgroupをnginxに変更。

## デーモンの起動設定

```
# systemctl list-unit-files php-fpm.service
UNIT FILE       STATE
php-fpm.service disabled
1 unit files listed.

# systemctl enable php-fpm.service
Created symlink from /etc/systemd/system/multi-user.target.wants/php-fpm.service to /usr/lib/systemd/system/php-fpm.service.

# systemctl list-unit-files php-fpm.service
UNIT FILE       STATE
php-fpm.service enabled
1 unit files listed.
```

手動で起動。

```
systemctl start php-fpm.service
```
VMware Workstation > VMware Workstation 回復不能なエラー:(vcpu-0) vcpu-0:VERIFY vmcore/vmm/main/cpuid.c:386 bugNr=1036521 の対処 > VM->Settings->ProcessorsにおいてIntel VT-x/EPT or AMD-V/RVIを選択する

```txt:動作環境
Windows 10 Pro (64bit)
VMware Workstation v12.5.1
```

ゲストOS起動時に以下のエラーが出た。

> VMware Workstation 回復不能なエラー:(vcpu-0)
>
vcpu-0:VERIFY vmcore/vmm/main/cpuid.c:386 bugNr=1036521
>
「xxx\vmware.log」に、ログファイルがあります。
>
>サポートリクエストを提出できます。
>
>VMwareサポート...

### 対応方法

VM->Settings->Processorsにおいて`Intel VT-x/EPT or AMD-V/RVI`を選択する。
(または、その上の選択肢`Intel VT-x or AMD-V`でもいいようだ）。

「自動」がだめのようだ。

ただし、「自動」設定でも問題ないゲストOSもある。


関連 https://communities.vmware.com/thread/498854?start=0
> jmattson 2015/01/06 14:00
>
> ...
> Try setting the preferred mode (VM->Settings->Processors) to "Intel VT-x/EPT or AMD-V/RVI."
HTML に JSON データを埋め込んで JavaScript から利用する

サーバのデータをクライアントサイドの JavaScript で扱いたいとき、API を用意して取得する方法が一般的だが、もっと簡易的な方法として HTML に JSON データを埋め込むという方法がある。

## JSON を埋め込む
JSON の生成方法は利用している言語やテンプレートエンジンによって様々だが、今回は PHP で。

``` php
<script type="application/json" id="json-data">
<?php echo json_encode($data, JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP); ?>
</script>
```

`type="application/json"` を指定することで JSON 文字列として埋めこむことができる。

注意点として、HTML の中に JSON 文字列を埋め込むことになるため最低でも `<` と `>` はエスケープしておかないと XSS の恐れがある。PHP の `json_encode` の場合、 `JSON_HEX_TAG ` フラグを指定するとすべての `<` `>` を `\u003C` `\u003E` に変換できる。

## 埋め込んだ JSON を読み込んで利用する
``` js
var elem = document.getElementById("json-data");
var data = JSON.parse(elem.textContent);
```

先程の `script` エレメントの `textContent` プロパティから JSON 文字列が取得できるので、あとは `JSON.parse()` で JS オブジェクトに変換する。

## 別の方法との比較
よく見るのは「文字列リテラルとして埋め込む」方式。

``` html
<script type="text/javascript">
var data = JSON.parse('<?php echo json_encode($data, JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP); ?>');
</script>
```

この方式だとグローバル変数を利用することになってしまうので微妙。

グローバルに状態を持つのであれば DOM に持たせたほうがまだマシでは、ということで `<script type="application/json">` で埋め込む方式をオススメしたい。
Youtubeのチュートリアル動画を自動翻訳字幕を表示させる #UE4Study

# Youtubeのチュートリアル動画を自動翻訳字幕を表示させる

## Youtube動画に英語字幕をつける

歯車アイコンをクリック
![image](https://qiita-image-store.s3.amazonaws.com/0/111261/cb828310-d0b8-ba7f-d160-0c38f4c12e00.png)

字幕をクリック
![image](https://qiita-image-store.s3.amazonaws.com/0/111261/2211ae3f-f508-af7e-dbeb-11539d3ae539.png)

英語（自動翻訳）を選択
![image](https://qiita-image-store.s3.amazonaws.com/0/111261/178c2855-5725-9b65-fbd3-d8527a2b4883.png)

英語の音声が自動翻訳されて字幕が表示される
![image](https://qiita-image-store.s3.amazonaws.com/0/111261/cd336232-295f-5bea-7850-2ac8b88f4e34.png)

## Youtube動画に日本語翻訳を表示する

設定アイコン -> 字幕
![image](https://qiita-image-store.s3.amazonaws.com/0/111261/d3d08a59-ad42-4767-85b7-2ce7faaa4c0f.png)

自動翻訳をクリック
![image](https://qiita-image-store.s3.amazonaws.com/0/111261/ffea4e2f-0294-bedf-583f-132e3fcd7e88.png)

日本語を選択
![image](https://qiita-image-store.s3.amazonaws.com/0/111261/44300a65-6db0-eee3-f200-bb89d4dda9e8.png)


日本語が翻訳されて字幕表示される
![image](https://qiita-image-store.s3.amazonaws.com/0/111261/dad18035-ccf6-465b-2e44-e4a0412e363c.png)

##　日本語翻訳されているチュートリアルの場合

チュートリアルを順次日本語翻訳している

チュートリアルのプレイリスト
https://www.youtube.com/user/UnrealDevelopmentKit/playlists

日本語翻訳されていたチュートリアル動画のリスト
https://www.youtube.com/watch?v=w4XlBKeE46E&list=PLZlv_N0_O1gasd4IcOe9Cx9wHoBB7rxFl&index=1

歯車アイコン -> 字幕
![image](https://qiita-image-store.s3.amazonaws.com/0/111261/262ae2d0-a6fb-f450-3de7-95b9f039b83e.png)

日本語を選択

![image](https://qiita-image-store.s3.amazonaws.com/0/111261/abff79a9-3257-3033-4d3d-fcbcb99b3f6e.png)
kivyの各環境を整えてみる

前回、[kivyを使うためにはいろんな環境が必要](http://qiita.com/akashima/items/5b6d848e934b7ed64aae)ということがわかりました。

ということで、各環境を構築して用意してみよう、という記事になります。

# 利用環境

- Mac([構築済み](http://qiita.com/akashima/items/2a16ed2dbc407c9ab6cf))
- Windows([こちら](http://qiita.com/akashima/items/5b6d848e934b7ed64aae#windowsの場合)の記事にて、OSのセットアップまで完了済み)
- CentOS7([こちら](http://qiita.com/akashima/items/5b6d848e934b7ed64aae#linuxの場合)の記事にて、OSのセットアップまで完了済み)

CentOSならサクッと終わるだろ、と思ってたら、意外と大変な事実に気づかされてしまいました。
Cythonとかどうやってインストールするのか知らないレベルの人ですよ。

## Linux環境(CentOS7版)

Ubuntu？Gentoo？Fedora？
CentOS7美味しいレス(^q^)
とか思ってたら、先ほどの通り、Cythonのインストールでorzってなってるアカウントがこちらです。

とりあえず[Cython](http://cython.org/)のインストールはみんな通る道のようなのですが、あえて先人たちの知恵はスルーして（ぉぃ）自力でインストールします。

そんなもんpipで入るやろ、とか思って気軽に試すと、こうなりました。

```bash
$ pip install cython
bash: pip: コマンドが見つかりませんでした...
```

おーい。ちくしょうー。pipもねー環境なのかよ、CentOSってザコは。
と愚痴を垂れても仕方ないので、下記の通りコマンドを実行して推し進めていきます。

```bash
$ sudo yum install epel-release
$ sudo yum install python-pip SDL2 SDL2_ttf SDL2_image SDL2_mixer gstreamer python-devel freeglut-devel
$ sudo pip install pip setuptools --upgrade
$ sudo pip install Cython
$ sudo pip install kivy pygame
```

他にも必要なライブラリあるかもしれませんが、2017年2月16日時点はこれでうまく行きました。

```bash
$ sudo pip install kivy
Requirement already satisfied: Kivy-Garden>=0.1.4 in /usr/lib/python2.7/site-packages (from kivy)
Requirement already satisfied: requests in /usr/lib/python2.7/site-package (from Kivy-Garden>=0.1.4->kivy)
Installing collected packages: kivy
  Running setup.py install for kivy ... done
Successfully installed kivy-1.9.1
```

初期のMacにkivyを導入した時と同様動作するかどうか軽くチェックします。

```bash
python xxxx.py
```

※ コードは末尾の[おまけ](#おまけ)を参照

動作確認までOKでした。
次は、pyinstallerでビルドです。

```bash
python -m PyInstaller --name xxxx ./xxxx.py
```

これでビルドまで通りました。
実行もOKでした。
実 行 も O K で し た o r z

やっぱりかー、やっぱりそうですよねー。
環境毎に必要なのか…開発者泣くよ？

## Window環境(Windows10 Pro)

基本的には、下記のインストール手順で進められましたが、ちょいちょい引っかかるところがあったので注意書きします。

[kivy installation for windows](https://kivy.org/docs/installation/installation-windows.html)

詰まったところとしては、３箇所です。

- python3.x以降使うようになっている
- CythonのインストールにMicrosoft Visual C++ 14.0が必要で、Microsoft Visual C++ Build Toolsを使う。
	- http://landinghub.visualstudio.com/visual-cpp-build-tools
- kivyのインストールにCythonが必要なので、python -m pip install cythonを実行する
- kivyのインストールにglewが必要なので、http://glew.sourceforge.net/からglewをインストールする

※ glewのインストール方法をまともに解説してるサイトがなく、glewをpythonのフォルダにインストールしてもリンクエラーになるので、お手上げすることにしました。

動いたら教えてください。再度チャレンジします。
Linux、[Mac](http://qiita.com/akashima/items/2a16ed2dbc407c9ab6cf)がマジ神環境です。

### おまけ

kivyの動作確認に利用したコード

```python
import kivy

kivy.require('1.0.6')

from kivy.app import App
from kivy.uix.label import Label

class MyApp(App):
  def build(self):
    return Label(text='Hello world')

if __name__ == '__main__':
  MyApp().run()
```

※ Macの時は必要だった`import importlib`がLinuxでは不要でしたので、やはり部分的に環境依存が生じるようです。

# まとめ

疲れた。。。
マルチプラットフォーム開発ができるぞー、と喜んで開発環境構築してましたけど、Windowsの開発環境が全くわかりませんでした。
元Windowsユーザなのに。
MacやLinuxでの開発に比べると、Windowsの開発って結構煩わしいのかもしれません。
というか、MacやLinuxの開発環境の方が出揃ってる感じがしますね。

Windowsユーザに当分の間、戻ることはなさそうです。
cocos2d-xのSDKBOXの課金で、IAP :WARNING!, Products size is 0でプロダクト情報が取れない。

IAP :WARNING!, Products size is 0でプロダクトの価格などが取れない場合の対処法。

http://discuss.cocos2d-x.org/t/sdkbox-iap-warning-products-size-is-0/33540/3

上記では、契約／税金／口座番号にて契約が更新されてない（青いrequestボタンを押すと直る）と書いてあった。

これも引っかかっていたが、自分の場合は、アプリのbundle IDが違っていたorz。

この場合、環境面のチェックポイントは、
① iTunes Connectにて契約／税金／口座番号にて契約が更新されているか確認。
② ストアとアプリのbundle IDが違ってないこと。
③ iTunes connectに課金の情報が設定してある。
※自分の場合は、課金のステータスを送信準備完了にした。
④ res/sdkbox_config.jsonの設定が正しいこと。
ぐらいか。


ちなみに、プロダクトインフォの取得について、現状、
①実機しか課金は動かないと書いてあったけど、シミュレータでもプロダクト情報が戻って来た。
②ATSは無効化しろとかいてあるけど、そうでなくても動いてる。


環境：
cocos2d-x(ver 3.14)とSDK BOX(v1.0.1.17)
S3 においた html を Web に公開する

## Bucket とファイルの準備

http://YOURBUCKET.s3-website-ap-northeast-1.amazonaws.com/index.html を作る

## Bucket Policy に以下を記述する

```
{
	"Version": "2012-10-17",
	"Statement": [
		{
			"Sid": "AddPerm",
			"Effect": "Allow",
			"Principal": "*",
			"Action": "s3:GetObject",
			"Resource": "arn:aws:s3:::YOURBUCKET/*"
		}
	]
}
```
オンラインでEC2のルートディスクを拡張する


@ryo0301さんにEBSがオンラインで拡張できるよって教えてもらったので、試してみました。

# AWSコンソールからディスクサイズを拡張

EBSのVolumesからModify Volumeを選んで拡張できます。
なんとVolume Typeも変えられるみたいです。
今回はそこは不要なので、Sizeだけ8Gから500Gに変更しました。
（増やしたら減らせません。）

![modifyvolume.png](https://qiita-image-store.s3.amazonaws.com/0/45645/be23b089-4c42-60e7-ad9c-4bc8676bbc0e.png "modifyvolume.png")

optimizingになればもうresize2fs可能なようです。数秒でoptimizingになりました。
completedまでは5〜10分程度でした。

# resize2fs

ディスクの状態を確認します。

```bash
$ df
Filesystem     1K-blocks    Used Available Use% Mounted on
devtmpfs         2014036      56   2013980   1% /dev
tmpfs            2024908       0   2024908   0% /dev/shm
/dev/xvda1       8123812 2962092   5061472  37% /

$ lsblk
NAME    MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
xvda    202:0    0  500G  0 disk
└─xvda1 202:1    0    8G  0 part /
```

実行します。

```bash
$ sudo resize2fs /dev/xvda1
resize2fs 1.42.12 (29-Aug-2014)
The filesystem is already 2096635 (4k) blocks long.  Nothing to do!
```

# Nothing to do!

できませんでした。
調べたら、こんな記事を発見したので、参考にさせてもらって実行します。
[EC2のCentOS6 HVMでresize2fs "Nothing to do!"と言われたとき](http://takeshiyako.blogspot.jp/2014/12/ec2centos6-hvmresize2fs-nothing-to-do.html)

# growpart & resize2fs
growpartしたあとにresize2fsすればいいようなのでやってみます。

まずはgrowpartです。

```bash
$ sudo growpart /dev/xvda 1
CHANGED: disk=/dev/xvda partition=1: start=4096 old: size=16773086,end=16777182 new: size=1048571870,end=1048575966
```

もちろんまだ増えてません。

```bash
$ df
Filesystem     1K-blocks    Used Available Use% Mounted on
devtmpfs         2014036      56   2013980   1% /dev
tmpfs            2024908       0   2024908   0% /dev/shm
/dev/xvda1       8123812 2962092   5061472  37% /
```

resize2fsを実行して

```bash
$ sudo resize2fs /dev/xvda1
resize2fs 1.42.12 (29-Aug-2014)
Filesystem at /dev/xvda1 is mounted on /; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 32
The filesystem on /dev/xvda1 is now 131071483 (4k) blocks long.
```

増えました。

```bash
$ df
Filesystem     1K-blocks    Used Available Use% Mounted on
devtmpfs         2014036      56   2013980   1% /dev
tmpfs            2024908       0   2024908   0% /dev/shm
/dev/xvda1     515928484 2978256 512849980   1% /

$ lsblk
NAME    MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
xvda    202:0    0  500G  0 disk
└─xvda1 202:1    0  500G  0 part /
```

無事500Gになりました。
AndroidのNDKビルドでsoファイルのdebug symbolsのstripを避ける方法

debug symbolsを含んだsoファイルを利用する場合、デフォルトではdebug syｍbolsはstripされてしまいます。
stripを避けたい場合は、対象のsoファイルをprebuildするためのAndroid.mk内で `cmd-strip` を空定義すればstripされなくなります。

```
LOCAL_PATH := $(call my-dir)
 
# prebuilt shared library
include $(CLEAR_VARS)

LOCAL_MODULE := libxxxx
LOCAL_SRC_FILES := libs/$(TARGET_ARCH_ABI)/libxxxx.so
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include
cmd-strip :=
include $(PREBUILT_SHARED_LIBRARY)
```
Golangで簡単並列化

# はじめに

Golangを選ぶ理由として並列処理が簡単に書けるからというのもあるんじゃないかと思います。
なので今回は並列化をピックアップしました。

僕のやっている書き方なので、これが最善では無いと思いますがとりあえずご紹介。


# Golangで並列化したいときはgoroutineを使いましょう

```go
go func(){
    // 処理
}()
```

でもこれだけだと処理の完了とか取れないので"sync"パッケージも使いましょう。

```go
import "sync"
```

つまりどういうことかと言うと

```go:main1.go
package main

import(
    "fmt"
    "sync"
    "time"
)
func main(){
    var s, e time.Time
    s = time.Now()
    var wg sync.WaitGroup
    for i:=0; i<20; i++{
        wg.Add(1)
        go func(num int){
            defer wg.Done()
            process(num)
        }(i)
    }
    wg.Wait()
    e = time.Now()
    fmt.Printf("処理完了 : %v Seconds\n", (e.Sub(s)).Seconds())
}
func process(num int){
    fmt.Printf("%d 番目の処理開始\n", num)
    time.Sleep(1 * time.Second)
    fmt.Printf("%d 番目の処理終了\n", num)
}
```

main1.goは20件並列に処理しています。sync.WaitGroupで処理の完了を待っているところがポイントですね。
これで並列化できたのでメデタシメデタシ。

ですが、ちょっと待ってください、これ

```go
    for i:=0; i<20; i++{
```
この20って数字が10000とかだと処理しきれなくなることある！
と気が付きます。ではどうするか。
# 最大並列数を決めてしまいましょう。

```go:main2.go
package main

import(
    "fmt"
    "sync"
    "time"
)
func main(){
    var s, e time.Time
    s = time.Now()
    var wg sync.WaitGroup
    c := make(chan int, 10)
    for i:=0; i<20; i++{
        wg.Add(1)
        go func(num int){
            c<-1
            defer func(){
                <-c
                wg.Done()
            }()
            process(num)
        }(i)
    }
    wg.Wait()
    e = time.Now()
    fmt.Printf("処理完了 : %v Seconds\n", (e.Sub(s)).Seconds())
}
func process(num int){
    fmt.Printf("%d 番目の処理開始\n", num)
    time.Sleep(1 * time.Second)
    fmt.Printf("%d 番目の処理終了\n", num)
}
```

これの

```go
    c := make(chan int, 10)
```
この部分で並列数を入れています。10を好きな数字に変えて並列数を変更しましょう。
あとはprocess関数の中身を変えるだけであなただけの処理の完成です。

それでは楽しいGolangライフをお過ごしください。
PowerShellスクリプトの即席ロギング

PowerShellを急に触ることになったヒトのための備忘録。
スクリプトファイルに関数を用意しておいて、各所で使いまわせるようした。

# 事前準備

+ 任意場所に、ログファイルの配置場所 `D:\hogehoge\log` ディレクトリを作っておいてください。


# 定義する

下記のようなスクリプトを書いて、デスクトップに `log.ps1` といった名前で保存する。

```bash
## HOWTO USE
## 1.READ THIS FILE 
# . ".\\log.ps1"
## 2.CALL FUNCTION 
# Log "F_FUGA01" "hoge"

function Log($LogName, $LogString){
    
    # Set file path
    $LogPath = "D:\hogehoge\log"
    $Now = Get-Date
    $LogFile = $LogName + "_{0:0000}{1:00}{2:00}.log" -f $Now.Year, $Now.Month, $Now.Day
    $LogFileName = Join-Path $LogPath $LogFile
    
    # Set file message
    $Log = "{0:0000}-{1:00}-{2:00} " -f $Now.Year, $Now.Month, $Now.Day
    $Log += "{0:00}:{1:00}:{2:00}.{3:000} " -f $Now.Hour, $Now.Minute, $Now.Second, $Now.Millisecond
    $Log += $LogString

    Write-Output $Log | Out-File -FilePath $LogFileName -Encoding Default -append
    Return $Log
}
```

# 呼び出す

外部のPowerShellスクリプトから呼び出すときは下記のような感じ。
注意点は、「外部ファイルのImportの仕方」と「呼び出す関数への引数の渡し方」。

```bash
. C:/Users/Administrator/Desktop/log.ps1
Log "F_FUGA01"  ("{0}-{1}" -f "hoge", "fuga")
```

## その他
 
PowerShell実行時に権限あたりで怒られるときは、PowerShellのターミナルで権限を調整。

```
PS C:\Users\Administrator\Desktop> Set-ExecutionPolicy RemoteSigned
```
Mac のターミナルで "Error checking TLS connection: Host is not running" エラーが出た時の対処方法 (Docker 関連º


Docker の Machine が inactive だと起こるようです。

## 修復手順

default の docker を削除して作り直すので、何かしてたら、VMを保存するなど注意して作業を行ってください。

```
$ docker-machine rm default
$ docker-machine create default --driver virtualbox
```

これで治る場合もあるらしい。

参考
https://github.com/docker/toolbox/issues/453