OmniAICreator/Qiita-1.07M huggingface dataset:
Ruby 本引数と仮引数の関係性について

引数と仮引数の関係性について学んだのでアウトプット

今回作成するプログラムは非常に単純コンソール上に入力した名前の後ろに”さん”を付けて返り値を出すプログラム

例:コンソール上に　青木　と打ったら返り値は　青木さん　となる。

'さん'付けしたい名前を本引数として’namae_san’メソッドに飛ばしその中の仮引数を操作し、元の処理の流れに戻した上で、再度表示する。


本引数と仮引数の関係性について実験するためにまずは失敗例から記載する

```
def namae_san(namae)
namae = "#{namae}" + "さん"
end

puts "さん付けしたい名前を入力してください"
namae = gets.chomp

namae_san(namae)

puts namae


＝＞　　実行結果　　”とも”と入力した場合　”とも”　　　※さん付けされていない

```

上記はユーザーからの入力をnamaeに代入してnamae_sanメソッドに本引数として引き渡している。　
その後代入された値は、namaeという仮引数で処理されて後ろに”さん”がつけられる。
だが、”さん”付けされたはずの値をputs"namae"で表示した結果”さん”付けはされていない。

原因として、ユーザーから入力された内容はまずnamae変数に代入されるが、その後namaeを本引数として仮引数に受け渡しnamae_sanメソッドに引き渡す際に、内容がコピーされて受け渡されている事が原因となる。

puts namae で出力されたものはユーザーが入力した値のままとなる。

namae_sanメソッドで”さん”付けされた値を改めてnamae変数に代入する形で目的が実現する。

```
def namae_san(namae)
namae = "#{namae}" + "さん"
end

puts "さん付けしたい名前を入力してください"
namae = gets.chomp

namae = namae_san(namae)

puts namae
=>実行結果　入力　とも　　出力　　ともさん
```



0 < x < 1 な数字の名前って。。。

class名にすべく、うまい名前をつけようと、こいつはなんて呼ぶんだろうと調べた。

というか、0 < x < 1 がどんな数字か調べた。

ら、こいつはざっくりと、
1/3 とか 4/5 とか、分子が分母より小さい分数のことであると言えそう。

こんな分数には名前がついてて、

**真分数 / ProperFraction**

ていうんだって。

ついでに、

* **分子** = **Numerator**
* **分母** = **Denominator**
* **分数線 or 括線** = **Fraction Bar** (1/3 ← 分数表記に使われる線のこと)

とか言うらしい。
anyenvでgoenvをインストールし、Visual studio codeでGO言語を使用して開発する環境を整える

## 環境
* OS Sierra
* Visual Studio Code 1.25.1 (1.25.1)
* ※前提として最新のanyenvのインストールが完了しているとします
* [参考]https://github.com/riywo/anyenv

## goenvのインストール

```shell
anyenv install goenv
exec $SHELL -l
goenv install -l //インストールできるGoのバージョンが表示されます
goenv install 1.10.3　//バージョンは適宜修正してください 
goenv global 1.10.3　//今回はグローバルにインストールします
```

## GOPATHの設定
- シェルの設定ファイルに以下を追記(~/.bashrcや~/.zshrcなど)
    - GOPATHのディレクトリは適宜修正してください

```
export GOPATH=$HOME/go
export PATH=$GOPATH/bin:$PATH
```

## Visual Studio Codeの設定
* 拡張機能よりGoをインストール(Gopherのアイコンが付いているもの)
    * Visual Studio Codeをリロードして拡張機能を有効化してください
* Code->基本設定->設定よりsettings.jsonを開く
* 以下を右側のエディタに貼り付け
    * Visual Studio Codeのデフォルトのシェルがbashになっていたので一番上の行でzshに変更しています
    * go.gopathには「GOPATHの設定」で設定したパスを設定します

```json:settings.json
"terminal.integrated.shell.osx": "/usr/local/bin/zsh",
"go.gopath": "/Users/ユーザ名/go",
"go.goroot":"/Users/ユーザ名/.anyenv/envs/goenv/versions/1.10.3"
```

* Visual Studio Codeを再起動

## その他
* goのファイルを開くと右下に黄色の文字で「Analysis Tools Missing」と出るのでクリックしてインストールすると便利なツールがGOPATH配下にインストールされます。
* [参考]https://github.com/Microsoft/vscode-go/wiki/Go-tools-that-the-Go-extension-depends-on
Vue.js で作ったページを Parcel でビルドして NW.js でデスクトップアプリ化してみた

# はじめに

NW.js を使うと web 技術を利用してデスクトップアプリを作ることが出来ます。今回は以下の技術の組み合わせでシンプルなデスクトップアプリを作っていました。

- Vue.js
- TypeScript
- Parcel
- NW.js

# まずはプロジェクトを作る

新しく空のディレクトリを作り、その中で `npm init` を実行して `package.json` を作ります。

```bash
$ npm init -y
```

`parcel-bundler` をインストールします。

```
$ npm i -D parcel-bundler
```

# Vue.js でアプリを作る

まずは `index.html` を作ります。

```html
<html>
<body>
  <div id="app"></div>
  <script src="./main.ts"></script>
</body>
</html>
```

次に `main.ts` を追加します。

```ts
import Vue from "vue";
import App from "./App.vue";

new Vue({
  el: "#app",
  render: h => h(App)
});
```

そして `App.vue` を追加します。

```vue
<template>
  <section>
    <p>{{count}}</p>
    <button @click="addCount(1)">UP</button>
    <button @click="addCount(-1)">DOWN</button>
  </section>
</template>

<script lang="ts">
export default {
  data () {
    return { count: 0 };
  },
  methods: {
    addCount(amount: number): void {
      this.count += amount;
    }
  }
};
</script>
```

# ビルドする

`package.json` の `script` に `start` コマンドを追加します。

```json
  "scripts": {
    "start": "parcel index.html",
    "test": "echo \"Error: no test specified\" && exit 1"
  },
```

NW.js 起動時に正しく読み込めるように `--public-url ./` を追加しています。

一度 `npm start` を実行して依存するパッケージをインストールします。

ここまでの内容は以下の記事と全く同じです。

- [Vue 2.5 + TypeScript 3.0 を Parcel でビルドする](https://qiita.com/bananataro/items/5f27014e06117ec9e91e)

# NW.js で動かす

まずは `npm` コマンドで `nw` コマンドをインストールします。

```
$ npm i -S nw
```

`package.json` の `main` を `build/index.html` にします。

```json
  "main": "build/index.html",
```

`package.json` の `script` を次のようにします。

```json
  "scripts": {
    "start": "parcel index.html",
    "build": "parcel build index.html --out-dir ./build --public-url ./",
	"nw": "nw",
    "test": "echo \"Error: no test specified\" && exit 1"
  },
```

`npm run build` で html と js にコンパイルします。

```
$ npm run build
```

`npm run nw` で NW.js でアプリを実行します。

```
$ npm run nw
```

実行すると以下のようなウインドウが表示されます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/277993/76a45151-4cd2-4ad9-2f2d-7acb3b140faa.png)

`package.json` 全体は最終的に以下のようになりました。

```json
{
  "name": "vue-nwjs",
  "version": "1.0.0",
  "description": "",
  "main": "build/index.html",
  "scripts": {
    "start": "parcel index.html",
    "build": "parcel build index.html --out-dir ./build --public-url ./",
    "nw": "nw",
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "@vue/component-compiler-utils": "^2.1.0",
    "parcel-bundler": "^1.9.7",
    "typescript": "^3.0.1",
    "vue-template-compiler": "^2.5.17"
  },
  "dependencies": {
    "nw": "^0.32.1",
    "vue": "^2.5.17",
    "vue-hot-reload-api": "^2.3.0"
  }
}
```

# まとめ

一通り NW.js を使ってデスクトップアプリを作れそうな気がしてきたので、次はもう少し複雑なアプリを作ってみたいと思います。
「DBダンプを取得して！」って何？

#「DBをdump」ってなんやねん
「DBをdumpする」っていうのは「DBの内容をデータに出力」という意味らしい。

今日は
***指定したDBのバックアップをとって、その内容をファイルに出力する***という作業を行った。


本番環境のDBだったので、
SSHで接続して実行。

#どんなコマンドか？

```
$mysqldump -u ユーザ名 -p -h ホスト名 DB名 > ファイル名
```
これで、指定したDBの内容をファイルに出力できる。
オプション（-u:ユーザ名、　-p:パスワード, -h:ホスト名）は```database.yml```に書いてある。下記みたいな感じで。

```database.yml
username:○○
password:○○
host:○○
```
*passwordが記入されてなかったら-pはやらなくてもOK
*mysqldumpコマンドとdumpコマンド間違えた。dumpコマンドは「ファイルシステムのバックアップ」になるから違う（詳細は知らん）。
2018年8月第1週　今週気になった記事まとめ

# 今週気になった記事まとめ
##■「だじいな おらしせ」――広告の文字を並べ替えたら、老舗店のどら焼きが大ヒット
http://www.itmedia.co.jp/business/articles/1807/30/news083.html
もちろん基本的なデザインが押さえられているであろうことは承知の上だが、アイデア1つでバズることは広告として素晴らしい。

##■WindowsのDaaS化で従来のPCは終焉か
https://tech.nikkeibp.co.jp/it/atcl/idg/14/481542/080100535/?ST=cm-software&P=1
記事の内容がDaas化に対して否定的だったのはちょっと意外だったが、「物を持ってどうこう」っていうのはどんどん少なくなっている流れがあるから、この流れもいずれ主流になるのだろうなー。

##■ゲーム開発を始める前に知っておくべきこと
https://gigazine.net/news/20180803-making-first-game/
ここで主題となっているのはゲーム開発に関してだけど、
・簡単なものを作って成功体験を重ねる
・自分のできること、できないことを理解して、できないことは人やサービスを活用したり、時には切り捨てる
という考え方は様々なクリエイティブな活動に通じるものだなと。

##■32カ国対応のSIMフリー翻訳機「ez:commu」発売　2万円台半ば
http://www.itmedia.co.jp/mobile/articles/1807/30/news118.html
Amazonのレビューを覗いてみたけど結構評価が高かったので、本当に使えるんじゃないかとちょっと気になる。

##■メモからアラームが届くとはねぇ。キングジムから、電子ペーパーなメモ帳がクラウドファンディングで資金募集中
https://www.gizmodo.jp/amp/2018/07/kakumiru-cloudfunding.html
メモ、カレンダー、電卓、時計が一つで賄えるのは良いかも。
メモにはポストイットを使っていることが多いけど、どこまで快適になるか。。。

##■“俺の嫁召喚装置”「Gatebox」15万円の量産モデル発売　甘～い新機能で新婚気分（動画あり）
http://www.itmedia.co.jp/news/articles/1807/31/news040.html
「”俺の嫁”を真剣に召喚する」という取り組みが仕事としてある意味理想的で良いなぁと。
だんだんとコストダウンしてきて「超物好きが買う」→「物好きが買う」くらいの金額になってる。
まだしばらくは難しいだろうけど、この手の製品はインプットがどれだけ自然にしていけるかが大きな壁かなとAmazonAlexaを使ってて思う。
「OK,Google」とか「ねぇ、ヒカリ」とかはどうしても会話というより操作という感覚を払しょくできない気がする。

##■Alexaの代わりに「AIアナウンサー」がニュース読み上げ　SpecteeがAPI提供
http://www.itmedia.co.jp/news/articles/1808/01/news113.html
アナウンサーがAPIモジュールになる時代。
Alexaスキルでお金を稼ぐのではなく、Alexaスキルに使えるモジュールでお金を稼ぐってのが面白い。


全体通じて・・・
今週は目に付くニュースが全体的に【未来感】を感じるものが多かったなと。
Bitcoin - raw transaction

##raw transaction概要
参考: [bitcoin API (JSON-RPC) を 使って raw transaction で送金する(signrawtransaction)](http://bitcapitalz.hatenablog.com/entry/2014/08/20/220800)

Bitcoinのversion0.7より生のトランザクションにサインをして送金することができるようになった。
詳しい説明は https://en.bitcoin.it/wiki/Raw_Transactions にある。

まず、createtransactionで取引のIDと自分宛のvoutの索引をいれて、そのあとアドレス:金額を入れてrawtransactionを生成する
それをsignrawtransactionに入れて、あとから秘密鍵を後からつける
署名済みのraw transactionが出来たらsendrawtransactionで送信

###お釣りに気をつける
気をつけるところはお釣り。createrawtransactionだと、使用する入力と出力の計算を自分で行わないといけない。
10bitcoinの入力を5bitcoinを誰かに送って手数料を0.01bitcoinにしたい時は、手数料は入力と出力の差額だから、ちゃんと[送金先アドレス:500000000, お釣りのアドレス:499000000]の出力を入れないといけない。

# raw transactionの実行
参考 [BitcoinWiki Raw Transactions](https://en.bitcoin.it/wiki/Raw_Transactions)

## raw transactionの生成
createrawtransactionを使用する

```console
createrawtransaction [{"txid":txid,"vout":n},...] {address:amount,...}
```

## 署名

```console 
signrawtransaction <hex string> [{"txid":txid,"vout":n,"scriptPubKey":hex},...] [<privatekey1>,...] [sighash="ALL"]
```
## raw transactionの送信

```console
sendrawtransaction <hex string>
```

## bitcoin-cliによりトランザクションを送信

```console
sendrawtransaction $(getrawtransaction $TXID)
```
正規表現で忘れがちなこと ( 基本的な落とし穴 )

意外と正規表現の基本ではまる人が多いような気がしたので、書き記す。

ひとつずつは単純なケースだが、正規表現が長くなってくると、わりと考慮漏れを見かけることがある。

## 1文字以上マッチさせる場合はプラス `+` を使う

```
/\d/ 
```

これは数字1文字にしかマッチしない。
`100` をマッチさせているつもりが先頭の `1` までしか見ていなかったりする。

「数字の連続」をマッチさせる場合は `+` を付ける。

```
/\d+/
```

これで数字の連続全体 ( たとえば `100` )  がマッチする。

## 「あってもなくても良い」場合

「あってもなくても良い場合」がアスタリスクで書かれている場合がたまにある。

```
/(SomeString)*/
```

これだと 0回以上のマッチなので、 `SomeStringSomeStringSomeString` とかにもマッチしてしまう。

```
/(SomeString)?/
```

であれば `SomeString` が「ある場合」と「ない場合」にマッチする。

上の例ではまったく意味はないが、次のような例だと違いが出る。

`/This(SomeString)?IsOK/`

この書き方だと `ThisIsOK` と `ThisSomeStringIsOK` の2パターンにマッチする。

## 行頭行末のマッチを忘れずに

ついつい忘れがち。

```
/SomeString/
```

これだと `OooooooooooooooooSomeStringIsHeeeeeeeeeere!` とかにもマッチしてしまう。

```
/^SomeString$/
```

厳密にマッチさせる場合は行頭・行末の考慮を忘れずに。

## ブラケットの中は1文字分のパターンマッチ

```
/[abc]/
```

これは `a` か `b` か `c` の1文字にマッチする。
`abc` という文字列にマッチするわけではない。

`abc` にマッチさせる場合はグルーピングを使う。

```
/(abc)/
```

## 可読性

省略記法は便利だが、可読性のためにはあえてマッチ文字を羅列した方が良いんじゃないかと思っている。

```
/[0-9]/
```

これは `\d` と等価。

```
/[a-zA-Z0-9_]/
```

これは `\w` と等価。








<!-- Update From Qiita API -->

# チャットメンバー募集


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

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





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
WordPress の Gutenberg を有効化したら編集画面が真っ白になっている場合の対処

2018 年リリース予定の WordPress v5.0 でコアに取り込まれる「[Gutenberg](https://ja.wordpress.org/gutenberg/)」。
「[プラグイン](https://ja.wordpress.org/plugins/gutenberg/)でこの機能を有効化したら編集画面が真っ白になっている」というサイトがあったのでトラブルシューティングをしました。


## 状況

確認したところ以下のような状況で編集ができません。

- Gutenberg を有効化したら編集画面が真っ白になっている。
- カスタム HTML ウィジェットのテキストエリアが表示されない。


## 調査

概ね察しが付いたのですが念のため調査を行い、以下を確認しました。

- 標準テーマでは編集できる。
- DevTools で確認すると JavaScript エラーが出ている。

既にリリースから日がたっているウィジェットを調べて裏付けをとります。

`wp.mediaWidgets.init();` というエラーが表示されていますので、これを手がかりに調査します。

> Fixed it: remove “defer parsing of javascript” functions in functions.php
>
> <cite>[Topic: Cannot edit widgets after updating to 4.9 | WordPress.org](https://wordpress.org/support/topic/cannot-edit-widgets-after-updating-to-4-9/)</cite>


下記にも同じような質問がありました。

> * [javascript - Wordpress 4.8 - ReferenceError: Can't find variable: wp - Stack Overflow](https://stackoverflow.com/questions/44659717/wordpress-4-8-referenceerror-cant-find-variable-wp/44680483#44680483)

いずれも JavaScript を非同期で動かすために `async` や `defer` 属性を付与していることが原因とされています。

また [Health Check & Troubleshooting] (https://ja.wordpress.org/plugins/health-check/) を利用して調査した結果、プラグインは影響していないことが確認できました。

つまりテーマの `functions.php` 等の中で `async` や `defer` 属性を JavaScript に付与している処理があり、これが WordPress の機能とぶつかっている事が推測できます。


## 対処

問題の起きているテーマの `functions.php` から読み込まれているファイルを調査し、以下のような記述を見つけました。

[script_loader_tag](https://developer.wordpress.org/reference/hooks/script_loader_tag/) をフックして `async` 属性を付与しているようです。

```php
add_filter( 'script_loader_tag', 'replace_script_tag' );
function replace_script_tag( $tag ) {
	return str_replace( "type='text/javascript'", 'async', $tag );
}
```

ここが該当箇所ですので `add_filter` 行をコメントアウトするか、下記のように管理画面を対象から除外します。

```php
add_filter( 'script_loader_tag', 'replace_script_tag' );
function replace_script_tag( $tag ) {
    if ( ! is_admin() ) {
        return str_replace("type='text/javascript'", 'async', $tag);
    }

    return $tag;
}
```

以上でエラーは解消されました。
新人エンジニアの時に知っておきたかったこと[Macキーボード設定編]

## はじめに
この記事は[新人エンジニアの時に知っておきたかったこと](https://qiita.com/hirokisan/items/cd45d3f6e5fa688235fc)に含まれます。
他の記事は上記のリンクから遷移可能です。あわせてご覧ください。

## キーボード設定
エンジニアとしては毎日キーボードを触ることになります。
キーボードを使いやすく設定することで毎日の作業をより効率的にこなすことができると言えるでしょう。
よく使うキーを押しやすく設定することでキーを押す際の時間を短縮することができます。

この記事では基本的なキーボード設定をご共有します。
私自身、Macを使用していますので、この記事の内容はMacにおけるキーボード設定になります。
基本的なコンセプトはWindows等を使用する場合でも活用できるはずなので各自の環境でご設定ください。

### キーの連続入力の速さを設定する
キーの連続入力の速さを高めることでキー連続入力の待ち時間を減らすことができます。
この設定に慣れると、デフォルト設定の入力が遅く感じるようになるはずです。
設定手順は以下の通りです。

1. 画面左上のリンゴマークを押下する
2. 「システム環境設定」を押下する
3. 「キーボード」を押下する

すると、以下の画面が表示されることでしょう。

<img width="668" alt="スクリーンショット 2018-07-18 21.02.02.png" src="https://qiita-image-store.s3.amazonaws.com/0/97975/1ee31649-bc5a-4ed8-4510-000bf0d9bb56.png">

画像の赤枠で囲っている「キーのリピート」と「リピート入力認識までの時間」を画像のように設定してみてください。

キーの連続入力の設定前後比較です。

![2018-07-18 21_11_56.gif](https://qiita-image-store.s3.amazonaws.com/0/97975/efa3f050-ad9c-382f-42d1-5b5815d8b067.gif)

![2018-07-18 21_11_16.gif](https://qiita-image-store.s3.amazonaws.com/0/97975/4824ab14-11ca-afd7-e58f-41c957048f1d.gif)

この設定をしておくことで、タイピングする際のストレスを減らすことができます。
最初は慣れないかもしれませんが、慣れてくると元には戻れなくなるはずです。

### 修飾キーを変更する
修飾キーとは「Caps Lock キー、Control キー、Option キー、および Command キー」を指します。
Macを使用していると、Controlキーをよく使うことになるはずです。
一方でCaps Lockキーはほとんど使わないです。
しかし、Caps LockキーはControlキーよりも押しやすい位置にあるかと思います。
そこで、Caps LockキーをControlキーとして設定します。

設定手順は以下の通りです。

1. 画面左上のリンゴマークを押下する
2. 「システム環境設定」を押下する
3. 「キーボード」を押下する
4. 「修飾キー」を押下する

すると、以下の画面が表示されることでしょう。

<img width="663" alt="スクリーンショット 2018-07-18 21.21.17.png" src="https://qiita-image-store.s3.amazonaws.com/0/97975/92721e11-6874-64aa-e6e3-75aaffcaa23e.png">

画像の赤枠で囲っているように設定してみてください。
これでCaps LockキーがControlキーとして機能するようになります。

US配列のキーボードを使用している方は入力ソースの切り替え用のショートカットを再設定する必要があるかもしれません。
その場合は、キーボード設定画面で再設定することが可能です。

<img width="665" alt="スクリーンショット 2018-07-18 21.29.15.png" src="https://qiita-image-store.s3.amazonaws.com/0/97975/09651978-1ef6-efc4-c285-fb942eb42fff.png">

お好きなショートカットをご設定ください。

### キーボード設定ツールを導入する
キーボード設定用のツールもあります。
私自身はあまり活用していませんが、キーボードのカスタマイズの幅が広がるはずです。

- [Karabiner](https://pqrs.org/osx/karabiner/)

設定方法に関しては以下の記事が参考になりそうです。

- [【Mac効率化】Karabinerで爆速開発環境を構築する](http://www.thinkingsalad.com/technology/karabiner)
- [Karabiner-Elementsの設定項目をまとめました](https://qiita.com/s-show/items/a1fd228b04801477729c#%E8%A8%AD%E5%AE%9A%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AE%E5%BD%A2%E5%BC%8F%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6)

## まとめ
この記事ではMacキーボード設定をご共有しました。
特に凝った設定はしていませんが、最初に設定しておくとキーボード操作の効率が高まるはずです。
もっと凝りたいという方はぜひカスタマイズしてみてください。
今更ながらDocker上でRailsを開発するための簡易リポジトリを作った

技術書典5に出展することになり、内容は`Rails`が絡んでくるものなのですが、よくよく考えたら「よくDockerとRailsを組み合わせて開発してるけど、`Rails new`どうやるんだ？」って感じたので、いい機会だと思って`Rails`立ち上げのためのリポジトリを作りました。

## リポジトリ
https://github.com/minakawa-daiki/rails-docker

## バージョンなど
### Ruby
Ruby 2.5.1
https://github.com/minakawa-daiki/rails-docker/blob/master/docker/rails/Dockerfile

### Rails
Rails 5.2.1
https://github.com/minakawa-daiki/rails-docker/blob/master/Gemfile

### MySQL
MySQL 5.7
https://github.com/minakawa-daiki/rails-docker/blob/master/docker-compose.yml

## セットアップ
1. `.env.sample` を `.env` にリネームする
1. docker-compose run --rm web bundle exec rails new . --force --database=mysql
3. `config/database.yml`を編集する

    ```yaml
    ...
    default: &default
        adapter: mysql2
        encoding: utf8
        pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
        username: root
        password:
        host: db
    ...
    ```

4. docker-compose run --rm web bundle exec rails db:create
6. docker-compose up

## ブラウザでアクセス
<img width="841" alt="Screen Shot 2018-08-03 at 19.51.39.png" src="https://qiita-image-store.s3.amazonaws.com/0/213538/85ad4bcb-0345-6bb4-1fdc-c5ead1c56340.png">

この画面が出れば完成

## もう少ししっかりと構築したい人向け
https://qiita.com/kawasin73/items/b8b092e9b763387c6ba8
しっかりと説明まで書かれていて、良いです。

## 終わりに
技術書典で本を書くことになりました。
友人たちと一緒に様々な技術のごちゃ混ぜ本的なのを出す予定なので、良かったら立ち寄って見てください！
<img width="263" alt="Screen Shot 2018-08-02 at 8.32.23.png" src="https://qiita-image-store.s3.amazonaws.com/0/213538/92733352-8705-2383-f867-9267ad91d497.png">

Twitter: https://twitter.com/oliver_diary
GitHub: https://github.com/minakawa-daiki
はてなブログ: https://oliver0521.hatenablog.jp
Just Do it!!!!!!!!!!!!!!!!!!!!!


# 0. Just Do it!

[Just Do It!](https://www.youtube.com/watch?v=ZXsQAXx_ao0)
Don't let your dreams be dreams.
Yesterday, you said tomorrow.

So [Just Download it!](https://www.dropbox.com/s/nd5xe75uo1lo6ix/JustDoIt%21%21.zip?dl=0)

# 1. Just Explain it!

このアプリは、Just Do itおじさんに感動して作成したアプリです。
このアプリを一度起動すると、プロセスなどを停止しない限り永遠に常駐し続け、パソコンのスリープを解除するとJust Do itおじさんに叱咤激励されます。
それだけのアプリです。効果はかなりあります。

# 2. Just Make it!

このアプリは、html+css+javascriptでマルチプラットフォームアプリが制作できるライブラリ「[Electron](https://electronjs.org/)」とJust Do itおじさんで作成されています。

必要なファイルは以下のみです。
これらのファイルを同じフォルダにぶち込みます。

- main.js
- index.html
- audio.js
- JustDoItおじさんの音声ファイル

Electron導入は[こちらの記事](https://qiita.com/umamichi/items/6ce4f46c1458e89c4cfc)が非常にわかりやすかったです。

## 2-1. main.js

以下がmain.jsソースコードです。

```javascript
const electron = require('electron');
const app = electron.app;
const BrowserWindow = electron.BrowserWindow;
const Tray = electron.Tray;

var mainWindow = null;

app.on('ready', () => {

    //スリープ解除したときのイベント
    electron.powerMonitor.on('resume', () => {

        //これまでのウィンドウを閉じる
        if (mainWindow != null) {
            mainWindow.close();
            mainWindow = null;
        }

        //新しいウィンドウを作成する
        //音声ファイルを再生したいだけのためウィンドウを最小透過に設定
        mainWindow = new BrowserWindow({
            width: 0,
            height: 0,
            transparent: true,
            frame: false,
            toolbar: false,
            resizable: false,
            show: false
        });

        //ローカルのhtmlファイルを当てはめる
        mainWindow.loadURL('file://' + __dirname + '/index.html');
    })

    //アプリをDock非表示にする
    app.dock.hide();
});

```

ソースコードもJust Do Itおじさんを流すためだけの内容であるため、非常にシンプルです。
シンプルすぎて、脆弱性まみれじゃないかと心配になります。


## 2-2. index.html 

```html
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
</head>
<body>
</body>
<script src="audio.js">
</script>
</html>
```

音声を再生するためのhtmlファイルです。
音声を再生するjavascriptファイルを読み込むだけの内容になっています。

## 2-3. audio.js

```
var audio = new Audio(__dirname + '/JustDoIt.wav');
audio.play();
```

htmlのaudio要素を作成して、再生するだけです。
もはや、ソースコードとは呼べないレベルです。
今回は、急いで作成したため、なかなかの仕上がりになっています。

## 2-4. JustDoIt.wav

Just Do It!
このファイルを好きなファイルにすると、スリープ解除したときに好きな音声を流すことができます。かわいいは正義。

# 3. Why made it!

パソコンを開くと、ついニコニコ動画を開いてしまう自分がいました。
これからはJust Do itおじさんの力を借りてプログラミング頑張りたいです。


# 4. Just Summarize it!

Just Do itおじさんの力を借りてプログラミング頑張るぞー
あと、Electronすごい便利だなと感じました。(基礎の基礎しか触ってないのに何言っているんだ)
時間があれば、強制的に音量を最大にしたり、Just Do It音声ファイルを自分で選べたりループおじさんできるようにしたいと思います。

今現在、mac用しかパッケージ化していないため、Windows用にもパッケージ化しようと思います。
Windowsにおける物理メモリと仮想メモリのまとめ

Windowsでメモリ不足で急激にスローダウンしたため調査。そのときのメモ。
結局はアプリのメモリリーク

・搭載可能な物理メモリ
32ビットOS・・・基本は物理メモリ4Gまで、実質は3G（グラフィックデバイスなどで1G消費）
64ビットOS・・・基本は物理メモリ2Tまで

http://www.atmarkit.co.jp/ait/articles/0903/13/news131.html


・仮想メモリの仕組み
http://windows-core.com/windows_feature/feature-7.php


・プロセスのメモリ使用容量の調べ方
http://tooljp.com/windows/doc/Windows7/ResourceMonitor/memory/memory.html

・Windows 10でメモリの使用状況を確認する方法
https://121ware.com/qasearch/1007/app/servlet/relatedqa?QID=017678

・
mem.exeはあてにならない。パフォーマンスモニタでの確認が必須。

・
プロセスごとの消費メモリはtasklist.exe でもタスクマネージャでも確認が可能。
C:\>tasklist

イメージ名                     PID セッション名     セッション# メモリ使用量
========================= ======== ================ =========== ============
System Idle Process              0 Services                   0         24 K
System                           4 Services                   0        680 K
smss.exe                       328 Services                   0        176 K
csrss.exe                      480 Services                   0      1,592 K
wininit.exe                    520 Services                   0        348 K
csrss.exe                      528 Console                    1     21,736 K
services.exe                   568 Services                   0      4,048 K
lsass.exe                      592 Services                   0     11,256 K
winlogon.exe                   620 Console                    1        392 K
lsm.exe                        648 Services                   0      1,156 K
svchost.exe                    744 Services                   0      3,756 K
svchost.exe                    820 Services                   0      5,244 K
MsMpEng.exe                    888 Services                   0     24,152 K
＜以下略＞

・注意
pagefile.sysを使用しない設定になっていないか確認。その場合物理メモリがなくなるとアウト。
通常は物理メモリと同じサイズか１．５倍。物理メモリが２Gとか少ない場合は２倍くらいか。

Windows 10で仮想メモリのサイズを変更する方法

http://121ware.com/qasearch/1007/app/servlet/relatedqa?QID=020452


(*)ちなみにLinuxは物理メモリがあいている限りファイルキャッシュに使用するため、一見物理メモリが枯渇しているようにもみえる。
AWS SAPメモ

SAA は参考書とWeb情報で実践で合格できましたが、SAPは厳しそうです。想定システム　の規模も大きいので手軽にAWSで構築できません。とりあえずamznのドキュメントを読みまくって理解していくしかないようですね。特にポリシー、ロール、認証、フェデレーション、SSO、IAMあたりが鬼門です。
iPhone Application Development	 

Offingapp <a href="http://offingapp.com/">mobile app agency</a> is a reputed mobile application development company.Apple has already changed the mobility platform so the development of innovative and user friendly apps. Since our inception in the marketplace, we have been developing best iPhone mobile apps for our valued customers. 
![Offingapp Mobile Application Development.jpg](https://qiita-image-store.s3.amazonaws.com/0/278227/a98e71b9-ae5e-042e-bf0b-f5db6ca698bd.jpeg)
 
Extensive Range Of Applications :
Offingapp  is one of the major service providers in iPhone apps development domain. We have been creating iPhone apps that are being used by broad range of customers which range from Business users to mass customers. We have a professional team of iPhone application developers who develop an extensive range of apps for buyers. The range includes:

iPhone Business Application
iPhone Multimedia Application
iPhone Internet Application
iPhone GPS Based Application
iPhone Entertainment Application
iPhone Gaming Application
iPhone Utility Application
And much more
At Offingapp  works with impressive idea, thorough knowledge and technical skills. iPhone has offered agreat platform to our dedicated iPhone apps developers to develop all varieties of mobile phone apps. Our versatility helps to build apps with more credibility and availability. Our experienced iOS developers are clued-up with foundation and different elements involved in the making of iPhone Applications.

Hire Dedicated iPhone Apps Developers :
You can hire our dedicated iPhone apps developers who work the best for your needs.  Hire our team of iphone developers, who are well-versed in the latest iPhone SDK, iOS and other technologies in the market. Our competent developers provide custom iPhone apps that are intelligible, innovative and creatively attractive in nature.

Hire dedicated iPhone Business Application developers
Hire iPhone Multimedia Application Developers
Hire iPhone Internet Application Developers
Hire iPhone GPS Based Application Developers
Hire iPhone Location Based Application Developers
Hire iPhone Education Application Developers
Hire iPhone Banking Application Developers
Hire iPhone Financial Application Developers
Why us : 
We have the competent team of best iPhone application developerswho have the talent and relevant skills to fix complex iPhone mobile applications for users. When you subscribe our iPhone apps development service, you come forward to a number of benefits.

Highly skilled in newest SDK and iOS technology
Quick project initiation with less paper work
Complete control over your projects 
Transparent client engagement process 
We offer you the best services of iPhone App developers that your budget. They leave no stone unturned and ensure constant client communication with the client right from the beginning to accomplishment of the iPhone apps development project. Don’t wait anymore. If you want to get your iPhone apps designed by the development moguls, Offingapp  is the right place indeed. To know more about out iPhone mobile apps development spectrum, call us now.
Webサイトで使うアイコンをどこから入手するか

ハンバーガーメニューのボタンや、SNSのロゴなど、Webサイト製作で使うアイコンをどう調達しようか悩んでいます。  
選択肢は以下の4つだと思います。
結論から言えば、おとなしくフォントを使うことにしました。

- フォント ([Font Awesome](https://fontawesome.com/) など)
- SVG ([Octicon](https://octicons.github.com/) など)
- CSS ([CSS ICON](https://cssicon.space/) など)
- 画像

フォントは一番手軽だと思います。  
Font AwesomeのようにCDNからWebフォントとして利用したり、[IcoMoon](https://icomoon.io/app/)の無料プランのように必要なものだけ選んでダウンロードしたり。  

SVGはフォントと違って影をつけられないなど少しだけ使い勝手が悪いですが、CDNという外部に頼る不安もありませんし、フォントをダウンロードする手間と容量も不要という長所もあります。  
Octiconの使い方については、別の記事を書いています。  
🔗 [素のHTMLでのOcticonsの使い方 - Qiita](https://qiita.com/sutara79/items/3898a3fe2264a19ce16e)

簡単な図柄ならCSSの`transform`などを組み合わせて描くのもアリかとも考えました。  
しかし、大きさを手軽に変えられないという欠点があります。  
「CSS ICON」のように、`scale()`で変えるしかなさそうです。  
全てのサイズを`%`や`em`で指定して、`font-size`に応じて柔軟に大きさを変えられないかと試行錯誤しましたが、アイコンが小さくなると描画が崩れる場合がありました。
下のサンプルをご覧ください。

<p data-height="265" data-theme-id="dark" data-slug-hash="qyKOQM" data-default-tab="css,result" data-user="sutara79" data-pen-title="CSSで描いたアイコンは汎用性に難がある" class="codepen">See the Pen <a href="https://codepen.io/sutara79/pen/qyKOQM/">CSSで描いたアイコンは汎用性に難がある</a> by Yuusaku Miyazaki (<a href="https://codepen.io/sutara79">@sutara79</a>) on <a href="https://codepen.io">CodePen</a>.</p>
<script async src="https://static.codepen.io/assets/embed/ei.js"></script>

「CSS ICON」のように`px`で指定すれば崩れませんが、気軽に再利用することはできないと思います。
解説用のサンプルなど、わざわざフォントやSVGを使うまでもない場面では役に立つと思いますが、本番では安心して使えません。
そういうわけで、おとなしくフォントを使うことにしました。
Datadog を用いて Prometheus Exporter の監視をする(Version 6 以上)

[Datadog を用いて Prometheus Exporter の監視をする](https://qiita.com/moaikids/items/d843f94426c90265491b)

以前上記のような Qiita を書きましたが、Datadog Agent の最新バージョン（Version 6) では 動作する Prometheus の Check スクリプトが同梱されるようになりましたので、手順が少し変わります。

こちらでは、Version 6 以降での対応手順について記載します。

# Reference
Datadog Version 6 になってから公式ドキュメントが充実してきているように感じます。Prometheus 対応についても簡単な紹介が公式サイトにも掲載されており、基本的にはこちらに沿って対応すれば OK です。

<https://www.datadoghq.com/blog/monitor-prometheus-metrics/>

# AutoDiscovery
ここでは、Datadog の AutoDiscovery 機能を用いて、任意の Prometheus Exporter からメトリクスを取得してみます。

## dd-agent Docker Image
dd-agent の Docker Image は、Versionの 5 までのものと 6 以降で GiｔHub のリポジトリや Docker Hub の場所が変更になっています。

- Version 5 以前
  - https://github.com/DataDog/dd-agent
  - https://hub.docker.com/r/datadog/docker-dd-agent/
- Version 6
  - https://github.com/DataDog/datadog-agent 
  - https://hub.docker.com/r/datadog/agent/ 

Prometheus の check スクリプトを用いたい場合は、Version 6 の Docker Image を使用します。

Kubernetes 上で動かす際のサンプル設定については、他の Qiita にも記載していますので、そちらを参照ください。

- [datadog 用の RBAC の設定](https://qiita.com/moaikids/items/d4cb5a830b7ee53bb42b#version-6-%E7%94%A8%E3%81%AE-dd-agent-docker-image-%E3%81%AE%E6%BA%96%E5%82%99)
- [dd-agent の Daemonset 設定](https://qiita.com/moaikids/items/d4cb5a830b7ee53bb42b#dd-agent-%E3%81%AE-daemonset-%E8%A8%AD%E5%AE%9A)

## AutoDiscovery Annotation
Pod の Annotation で、Prometheus Checks スクリプトを使用する定義を書きます。

以下は Deployment の設定の例です。

```deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: sada4j
spec:
  template:
    metadata:
      annotations:
        ad.datadoghq.com/frontend.check_names: '["prometheus"]'
        ad.datadoghq.com/frontend.init_configs: '[{}]'       
        ad.datadoghq.com/frontend.instances: [{"prometheus_url": "http://%%host%%:9090/metrics","namespace": "myapp","metrics": ["http_requests_total"],"type_overrides": {"http_requests_total": "gauge"}}]
```

Prometheus の Checks では以下の設定が必要です。

- prometheus_url
  - Prometheus Exporter の URL を指定します。
- namespace
  - 当該メトリクスの namespace を指定します。
  - こちらで指定した値が、Datadog 上ではメトリクス名の Prefix となります。
- metrics
  - Prometheus Exporter から Datadog に送るメトリクスの名前を指定します。
  - ワイルドカードの指定や、複数指定も可能です。
- type_overrides
  - metrics の種類(guageなど)を明示的に指定します。 
  - 指定しない場合は、Datadog が自動的に種類を判別します。   


以上で、Prometheus Exporter からメトリクスを取得し、Datadog に送ることができるようになります。標準で checks スクリプトが同梱されるようになったため、以前のバージョンよりもかなり手軽に Prometheus Exporter のメトリクスを Datadog に取り込むことができるようになったと思います。

また Datadog の AutoDiscovery 機能を用いることで、 これらの設定を Kubernetes の YAML 上で完結させることができることも、大きなメリットのように感じます。
システムにrbenvをインストールしてみた

# はじめに
ApacheでRailsを使用するためにrbenvを導入しました。各ユーザに導入するよりもシステム(全体)にインストールしてシステム固有で使います。

[ユーザ環境に入れる時の詳細はこちら](https://jitaku-server.com/?p=245)

# OS
CentOS6.10

# 必要なもの
rbenvとrbenvのプラグイン(ruby-build)

# 参照
[Environment variables](https://github.com/rbenv/rbenv#environment-variables)

# rbenvとruby-builのインストール
## どこに
/opt/rbenv

## rbenvインストール
```shell_session
# git clone https://github.com/sstephenson/rbenv.git /opt/rbenv
```
## ruby-buildインストール
```shell-session
# git clone https://github.com/sstephenson/ruby-build.git /opt/rbenv/plugins/ruby-build
```

## 設定
参照より、/opt/rbenvにダウンロードしたrbenvを参照するために環境変数を追加、rbnenv初期化。ユーザ環境だと`RBENV_ROOT`はデフォルトで$HOMEなので特に設定する必要はない。

```shell-session
# echo 'export RBENV_ROOT="/opt/rbenv"' >> /etc/profile
# echo 'export PATH="${RBENV_ROOT}/bin:${PATH}"' >> /etc/profile
# echo 'eval "$(rbenv init -)"' >> /etc/profile
```

# どうなった
上手くシステムにインストールできました。

```shell-session
# rbenv install 2.5.1
Downloading ruby-2.5.1.tar.bz2...
-> https://cache.ruby-lang.org/pub/ruby/2.5/ruby-2.5.1.tar.bz2
Installing ruby-2.5.1...
Installed ruby-2.5.1 to /opt/.rbenv/versions/2.5.1

# rbenv global 2.5.1

# rbenv versions
  system
* 2.5.1 (set by /opt/.rbenv/version)
```
Ruby 　異なるスコープの変数を利用する。

定義したメソッド（def ~ end）の外で定義された変数はそのままでは使えない。

```
---------------------------------------------
def sample1
  rei1 = "HelloWorld!"
  puts "#{rei1}"
end

sample1              => HelloWorld!
--------------------------------------------

メソッド内部での変数使用であり、問題なくHelloWorldと出力される。


一方メソッド外で変数を呼び出した場合は下記の通り変数が定義されていないエラーが返される。
----------------------------------------------
def sample1
rei1 = "Hello World"
end

def sample_output
puts "#{rei1}"
end

sample_output     =>NameError
----------------------------------------------
```

rei1に代入された値はメソッド内部のみで使用可能となる為、sample1メソッド外であるsample_outputメソッドにおいて、rei1変数が呼び出せなかったことが原因となる。


ここからはメソッドの外で定義された変数（メソッドのスコープ外）をメソッドで使用するための、引数・仮引数を紹介する。

```
---------------------------------
def sample1(rei1)
  puts "#{rei1}"
end

rei1 = "代入しました。"

sample1(rei1)　　　　＝＞代入しました。

---------------------------------
```

まずはdef~end間でsample1メソッドの定義を行っている。
次にrei1に"代入しました"の文字を代入した後、sample1メソッドを呼び出して表示している。

ここでsample1メソッドを呼び出す際にそのメソッドに送る変数を（）で記載しており、これが本引数と言われている。

一方でメソッドに渡されてからメソッド内部で使用される変数はdef sample1(仮引数)となる。
そのメソッド内部では仮引数で記載された変数名で処理が行われる事となる。

```
----------------------------------
def sample2(output)
  puts "#{output}"
end

rei1 = "Hello World"

sample2(rei1)
----------------------------------
```
sample2メソッドに(output)という名前の仮引数を定義し、以降このメソッド内部ではoutputという変数名で処理が行われる。
rei1に”HelloWorld”を代入し、sampleメソッドにrei1変数を受け渡している。（本引数）

以上の流れによって、メソッド外で定義された変数をメソッド内部にで使用出来る。
Amazon Rekognitionのデモを触ってみた①

AWSのサービスを調べてみた所、Amazon Rekognitionという画像認識・分析サービスがあったので
デモを触ってみた感想などを書いていきます。


#デモへの流れ

AWSのマネジメントコンソールのサービスから「Amazon Rekognition」にとんでみると、さっそくデモへのリンクが出てきます。

![alt](https://s3-ap-northeast-1.amazonaws.com/qiita-post-image/macarthur/SnapCrab_Rekognition+Console+-+Internet+Explorer_2018-8-3_17-4-7_No-00.png)

クリックしてみましょう。

![alt](https://s3-ap-northeast-1.amazonaws.com/qiita-post-image/macarthur/SnapCrab_RekognExplorer_2018-8-3_17-11-53_No-00.png)


すぐにデモのページになります。

#デモスタート！

まず最初に、オブジェクトとシーンの検出からデモを始めていきます。
ここでは画像のシーンや、画像内の物体にラベルを付け、信頼度のスコアを提供してくれます。
試しに食べ物の画像を認識させてみます。アップロードから画像をアップロードします。

![alt](https://s3-ap-northeast-1.amazonaws.com/qiita-post-image/macarthur/SnapCrab_Rekognition+Console+-+Internet+Explorer_2018-8-3_17-37-57_No-00.png)


food,Hot potなど画像をしっかり認識していることが分かります。
次に動物の画像をアップロードしてみます。

![alt](https://s3-ap-northeast-1.amazonaws.com/qiita-post-image/macarthur/SnapCrab_Rekognition+Console+-+Internet+Explorer_2018-8-3_17-38-18_No-00.png)

項目は少ないですが、animal,adorable(かわいいの意)と正しく認識されていることが分かります。
人だけでなく、食べ物や動物の認識も正しくできるのですね！

次に顔の分析という項目に移ってみます。

ここでは、顔の属性（性別、推測年齢、表情等）の分析を行ってくれます。今回はデモの画像をそのまま使用します。

![alt](https://s3-ap-northeast-1.amazonaws.com/qiita-post-image/macarthur/SnapCrab_Rekognition+Console+-+Internet+Explorer_2018-8-3_17-39-37_No-00.png)

appears to be female,age range ,smiling ,appears to be happyなど表情の分析までされていますね！


#まとめ
短いですが今回はここまでになります！人の認識ももちろんですが、動物認識、ましてや「かわいい」といった概念的分析まで行えてしまうのはすごいですね！
次回以降、他のデモにも触っていきます！また、Amazon Rekognition がどの様なシステムに使われているかも調べていこうと思ってます！
Yarn ver1.9.2で「Linking dependencies...」で時間がかかる方へ

# バージョンダウン
Yarn 1.7.0 に落とすとだいぶ時間が減ります。
https://github.com/yarnpkg/yarn/releases/tag/v1.7.0
バージョンダウンってのもなんか引っ掛かりますが。

# Githubのissue
ちなみにGithubのissueでは結構話題になっていて、Windowsのセキュリティソフトのせいだとか色々議論がなされていますが、解決方法は、まちまちのようです。

よいYarnライフを。
sbtで一部のファイルをrunの監視対象から除外する


build.sbtの中で `watchSources` という変数をいじってあげればよさそう

```scala:build.sbt
watchSources ~= {
   _.filterNot(x => x.getCanonicalPath.contains("asset/public"))
}
```


確認

```terminal
$ sbt
> show watchSources
```
CakePHP3でcontainの中のテーブルをソートする

## 環境
CakePHP 3.5

## 前提
posts hasMany commentsの関係とする

## やること
postsは昇順、commentsは降順でデータを取得する

```PostsController.php
<?php
namespace App\Conttoller;

class PostsController extends AppController
{
    /*
     * index method
     */
    public function index()
    {
       $posts = $this->Posts->find()
           ->contain([
               'Comments' => [
                   'sort' => [
                       'id' => 'DESC'
                   ]
               ]
           ])
           ->order([
               'id' => 'ASC'
           ]);
    }
}
```
メモ：ReactNativeデバッグ時のコマンド

#エラー："Port already in use", "No bundle url present" など
`lsof -i :8081` 
`kill -9 <PID>`

Source:
https://facebook.github.io/react-native/docs/troubleshooting

-----
#エラー："does not exist in the Haste Mmodule map"など
- キャッシュのクリーンアップ
`watchman watch-del-all`
`rm -rf node_modules && npm install`
`rm -rf /tmp/metro-bundler-cache-*`
`rm -fr /tmp/haste-map-react-native-packager-*`

- Buildキャッシュのクリーンアップ
`rm -f /ios/build`

まとめると
`rm -f /ios/build && watchman watch-del-all && rm -fr /tmp/haste-map-react-native-packager-* && rm -rf /tmp/metro-bundler-cache-*`

source:
https://github.com/facebook/react-native/issues/12754
https://gist.github.com/RidaRidss/27e6de16af0a742354f60bf7ea6c9111

---
# エラー: Unable to execute JS call: __fbBatchedBride is undefined

# manually bundle
`react-native bundle --dev false --platform ios --entry-file index.ios.js --bundle-output ios/main.jsbundle --assets-dest ./ios`

# regenerate the main.jsbundle file 
`react-native bundle --entry-file ./index.ios.js --platform ios --bundle-output ios/main.jsbundle`

source: https://github.com/facebook/react-native/issues/18472

#エラー：application has not been registered
index.jsの\<App Name>をupdate
source:
https://stackoverflow.com/questions/38340360/react-native-application-has-not-been-registered-error

#エラー:The following build commands failed: Analyze node_modules/react-native/ReactCommon/yoga/yoga/YGNodeList.c
`rm -rf ios/build/ModuleCache/*`
then
`react-native run-ios`
source: 
https://github.com/facebook/react-native/issues/12609

`rm -rf ~/.rncache`
https://github.com/facebook/react-native/issues/14423
何回やってもBitbucketにPush出来ない

#Rails Tutorial 1.4.3 Bitbucket
##SSH鍵を作成してpushするとエラー

```
It is required that your private key files are NOT accessible by others. This private key will be ignored.
```
チュートリアルを参照に手順通り進めると先ず突き当たる一つ目の壁。

```
 chmod 0600 ~/.ssh/id_rsa
```
terminalにて以上のコマンドを打つことで、鍵のpermissionを変更が可能とのこと。

##鍵のpermissionを変更してpushしてもエラー

```
repository access denied. access via a deployment key is read-only. fatal: Could not read from remote repository.

```
レポジトリを作成して、レポジトリ設定からSSH鍵を登録すると起こるエラーがこれ。
レポジトリではなく、bitbucket=>ユーザーアイコンからbitbucket設定を選択してこちらに登録。

##それでもまだエラーが発生

```
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
```
なぜかこのようなエラーが発生したので

```
git pull origin master
```

マージさせることで解決？

##git pull origin masterを行ってもエラー

```
 git fetch && git merge origin/master
```
こうすればよいという記述を参考にトライ、無事以下のエラーが発生

```
fatal: refusing to merge unrelated histories
```

##それでもまだエラーが発生

```
Automatic merge failed; fix conflicts and then commit the result.
```

```
 git merge --allow-unrelated-histories origin/master
```

先ほどのコードにハイフン以下の記述を加えてみる。

##git push -u origin masterがエラー

```
conq: repository does not exist.
fatal: Could not read from remote repository.
Please make sure you have the correct access rights and the repository exists
```

このエラーに遭遇したら以下のように打ち直すことで解消。

```
git remote set-url origin git@bitbucket.org:ユーザー名/リポジトリ名.git
```

##bitbucketのソースを開くと表示されない

```
どうやらここにはないようですそのファイルまたはディレクトリは存在しません。前のページに戻り別のもので試してください。
```

コミットの履歴や変更日時は表示されるのに、該当ファイル（ソース）を開くとエラーが発生。
こればかりはお手上げ。
原因はおそらく、レポジトリを作成する際に「Readmeファイルを作りますか？」という項目にチェックを行ったことでrailsファイルにあるReadmeファイルとの競合が発生した為に起こったエラーと考えられる。
結局レポジトリを削除し、アカウントを削除した後に、再度作り直してReadmefile作成のチェック項目を外して、再び

```
git push -u origin master
```

を行うと再び同じエラー群に遭遇するので順不同に上記の解決コードを入力したのちに、

```
git remote set-url origin git@bitbucket.org:ユーザー名/リポジトリ名.git
```

上記コードを実行することでソースが無事表示されるように。

参考サイト
https://qiita.com/mizukmb/items/f12765a9efdaeb2973e5
https://qiita.com/takanatsu/items/fc89de9bd11148da1438
https://hacknote.jp/archives/15275/
https://qiita.com/tt0805/items/fdcffa0ee0fe0f0f6038
https://qiita.com/bird_tummy/items/216d760c9c05e8470014
https://confluence.atlassian.com/bitbucket/add-unversioned-code-to-a-repository-877177133.html
Kotlinでconstructorをprivate化したい時

Kotlin入門者による適当なアウトプット

# シングルトンを作るケース
class宣言の直後、クラスのヘッダーに`private constructor()` と書いて、初期化ブロック（init）内に色々書く。

```kotlin

class ProjectRepository private constructor() {
    private var githubService: GithubApi

    init {
        val retrofit = Retrofit.Builder()
                .baseUrl(GithubApi.GITHUB_API_URL)
                .addConverterFactory(GsonConverterFactory.create())
                .build()
        githubService = retrofit.create(GithubApi::class.java)
    }

    companion object {
        private var projectRepository: ProjectRepository? = null

        fun getInstance(): ProjectRepository {
            if (projectRepository == null) {
                projectRepository = ProjectRepository()
            }
            return projectRepository!!
        }
    }
}
```

参考：
https://dogwood008.github.io/kotlin-web-site-ja/docs/reference/classes.html
SQL Server のシーケンス番号はロールバックされない

[シーケンス番号は、現在のトランザクションの範囲外で生成されます。 シーケンス番号を使用しているトランザクションがコミットまたはロールバックされるかどうかにかかわらず、シーケンス番号は使用されます。](https://docs.microsoft.com/ja-jp/sql/t-sql/statements/create-sequence-transact-sql?view=sql-server-2017#general-remarks)

ということらしいです。
Apache2.4のアクセス制御

こんにちは。Apacheについて右も左もわからないのでApacheにアクセス制御があることなんて知らなかった人です。


#どんなものが制御されるの？
Apacheで使われている全てのファイルを対象としてアクセスの制限を設定することが出来る。


#どんな風に制御かけるの？
```PHP:
<Directory "/var/www/html">
    Allow from all
</Directory>
```

```PHP:
<Directory "/var/www/html">
    Deny from all
</Directory>
```

```PHP:
<Directory "/var/www/html">
    Order Allow, Deny
    Allow from all
    Deny from all
</Directory>
```
こんな感じです。

#AllowとかDenyって言われてもわかんないよ！
###Allowって何？
アクセスを許可することです。
つまり Allow from all と書くと全てのアクセスが許可されたことになります。

####Allow fromの後ってall以外にも指定できるの？
できます。
IPアドレスで指定もできますし、ドメイン名でも指定できます。

#####IPアドレスで指定
```PHP:
<Directory "/var/www/html">
    Allow from 192.168.1.0
</Directory>
```
IPアドレス「192.168.1.0」からのアクセスだけ許可されます。


#####ドメイン名で指定
```PHP:
<Directory "/var/www/html">
    Allow from adminweb.com
</Directory>
```
ホスト名の後ろが「adminweb.com」と一致したら許可されます。
「aaa.adminweb.com」だったり「www.bbb.adminweb.com」だった場合でも後ろがadminweb.comなのでアクセス許可されます。


###Denyって何？
Allowの反対でDenyは不許可になります
Deny from all と書くと、全てのファイルのアクセスが不許可になります。

####Deny fromもIPアドレス指定、ドメイン名指定できるよね？
出来ます。


#####IPアドレスで指定
```PHP:
<Directory "/var/www/html">
    Deny from 192.168.1.0
</Directory>
```

#####ドメイン名で指定
```PHP:
<Directory "/var/www/html">
    Deny from adminweb.com
</Directory>
```

#おわり
何かほかにもいろいろあるらしいけどそれはまた後日
python macで仮想環境を構築 virtualenv


##作業環境

* MacBook Air (11-inch, Mid 2012)
* Python 3.6.4

##参考元
https://www.udemy.com/the-python-mega-course/learn/v4/overview

##まずは仮想環境を作る
Flaskでweb作るための作業フォルダを作るために、仮想環境を作る。mac用。linuxもおなじ。

1. なんでもいいからフォルダを作る。フォルダ名はアプリケーション名でもプロジェクト名でもなんでもいい。
2. 1で作ったフォルダの中に`static`フォルダ。`templates`フォルダを作る。templatesのs忘れずに。
3. `virtual`フォルダを作る。仮想環境上で`python`や`pip`コマンドなどを使えるようにする。1で作ったフォルダの中のディレクトリに移動してから、terminalで下記のコマンドを実行

```py:1の中のディレクトリで
pip install virutalenv
python -m virtualenv virtual
```

app_folder
|
|---static
|
|---templates
|
|---virtual　
|
|---backend.py (pyファイル)
こんな感じの構成になってればおｋ。

* バックエンド用の`.py`ファイルの位置も同じさっき作ったフォルダ群と同じディレクトリーに入れる。
* staticフォルダにはcssファイルが入る
* templatesフォルダにはhtmlファイルが入る
* virtualフォルダにはpythonのモジュールが保存される。モジュールを入れるには2つの方法がある。下記参照
* 特定のフォルダ内部でterminalを起動するには、いちいち`cd フォルダへのpath`をしなくても [フォルダを右クリックしてterminalを起動する方法](https://m.designbits.jp/13031711/) すれば簡単に開ける。ないとめんどい。

```py:virutalフォルダと同階層でterminalを起動
#1
virtual/bin/pip install module_name
#2
. virtual/bin/activate
pip install module_name

#おまけ:window
virtual/Script/pip install module_name
```

* 1か2のどちらかの方法でもいい。個人的には`activate`で仮想環境に入るほうが好き。`python`や`pip`コマンドの実行とかしやすいから。
* 2の方法は、仮想環境を`activate`で起動。仮想環境上で
も`python`や`pip`コマンドは正常に機能する。戦闘に". "をつけないと"permission denied"って言われる場合がある。
* windowでモジュールを追加するとき、`pip install`でエラーが出る時がある。[プレコンパイルされたpythonのモジュールがDLできるサイト](https://www.lfd.uci.edu/~gohlke/pythonlibs/)ここからファイルを拾ってきて、プロジェクトフォルダの中に入れれば`pip install module_name`でインストールできるようになる。


webページの開発とかするときに、仮想環境は作るべきとのこと。

##あとがき
次はHerokuにアップロードする手順。
まとめるのわかりにくいから分ける。
NGINX Amplify アラート検知と外部への通知タイミング

# NGINX Amplify

好きですよ、NGINX Amplify

![](https://cdn-1.wp.nginx.com/wp-content/uploads/2017/09/Amplify-desktop-hero-1040x600@2x.png)

[NGINX Amplify \- Get real\-time diagnostics for your apps](https://www.nginx.com/products/nginx-amplify/)
[Pricing \- Application Delivery for the Modern Web \| NGINX](https://www.nginx.com/products/pricing/)

# アラート発生時の通知タイミング

他の監視サービスに比べてちょっと通知が遅いなという印象なので時間を記録しておきます。

NGINX Amplify上での検知日時: `Aug 03, 2018 09:00:07 GMT`
e-mail: `Date: Fri, 3 Aug 2018 09:00:18 +0000`
Slack: `18:01:02`

対して遅いわけでは無いけれど近年どれも速報性高いからちょっとだけ気になる程度でした。

気軽に使おう NGINX Amplify :)
gulp4のgulp-watchでファイルのイベントやパスを取得する

~~gulp4でgulp-watchを使って更新しようと思ったら更新されなかった。
watchでは更新できるが、更新されたファイル名なんかを取れない（？）。
どっちかを諦めるべきなのか・・~~

公式にやり方が書いてあった。

```js:gulp3
import gulp from 'gulp';
import watch from 'gulp-watch';
watch(souce, (file) => {
 gulp.start(build);
 console.log(file.event);
 console.log(file.path);
});
```


```js:gulp4
import gulp from 'gulp';
let watcher = gulp.watch(souce, gulp.series('build'));
watcher.on('all', (event, path) => {
 console.log(file.event);
 console.log(file.path);
});
```

https://github.com/gulpjs/gulp/blob/4.0/docs/API.md#gulpwatchglobs-opts-fn
discordのbotをpythonで動かしてみる

前回の記事で無事pythonデビューを果たしたので、pythonで何を作るか。
#discord.pyでbotを作る

題名にもある通りdiscordのbotを作りたい。
主に友人とゲームをするときにお世話になっているdiscordは、APIが公開されていて様々な言語でラッピングされたAPIも公開されている。
pythonを始めたのはdiscord.pyでbotを作るため。
C#等でもできるらしいがせっかくなので新しい言語を触ってみるということでpythonを選択。

この記事では自作テストbotをサーバーに導入して動作確認をする。
どんな機能をつけるかは次回以降。

##botを登録する
botの動作をpythonで書く前に、プログラムに必要なトークンを取得する。
https://qiita.com/PinappleHunter/items/af4ccdbb04727437477f
を参考に[公式サイト](https://discordapp.com/developers/applications/)からbotを作る。
サイトの内容が少しだけ変わっているようなので改めて載せていく。

developer portalのApplicationsから「Create an application」を選択。
「NAME」の部分を変更し、ページ下の「Save Changes」をクリックし、「All your edits have been carefully recorded.」と出ればOK。
![GeneralInfo.png](https://qiita-image-store.s3.amazonaws.com/0/277953/80a85991-615b-bba4-2da8-1cef3f285ce0.png)
*****
左のタブから「BOT」を選択し、「ADD BOT」を選択。注意書きが表示されるので続行。
プログラムではTOKENが必要になるのでこれをメモ。一応外部に漏れるとまずいので取扱には注意。
テストbotの段階なので「PUBLIC BOT」のチェックは外しておく。(外さなくてもいい)
「Save Changes」を押して次へ。
![bot_create.png](https://qiita-image-store.s3.amazonaws.com/0/277953/c83e671d-6909-775b-9277-cf0dc70e2711.png)
*****
左のタブから「OAUTH2」を選択し、ページ下の「OAUTH2 URL GENERATOR」から「bot」にチェックを入れると、URLが表示される。
![OAUTH.png](https://qiita-image-store.s3.amazonaws.com/0/277953/77cd72f4-7c5f-ab14-d908-3404809bf90d.png)
さらにページ下の「BOT PERMISSIONS」から必要そうなものにチェックを入れておく。(まだよくわからないのでとりあえず画像のとおりにした)
![botpermissions.png](https://qiita-image-store.s3.amazonaws.com/0/277953/626c4d8b-2262-911e-020f-30c65a20689a.png)

さきほどのURLが少し変わっているのでこれを踏むとdiscordのサーバーにbotを招待できるので招待しておく。

![inivite.png](https://qiita-image-store.s3.amazonaws.com/0/277953/8303cd89-6e89-26fa-c628-c4297261e0b2.png)
無事にサーバーに参加。

##discord.pyの導入
botの作成はできたので中身を作る準備をする。まずはdiscord.pyのパッケージの導入。
以下のコードをcmdから実行。pipってのがNuGetとかnpmみたいなやつかな？と解釈。

```bash
python3 -m pip install -U discord.py
```

実行すると「pipのバージョンが低いから上げろ」的な黄色い文が表示され(画像を取り忘れた)、アップデートを実行するための命令も一緒に出力されていたのでそれを実行。pipのバージョンが上がったのでもう一度discord.pyの導入をし、無事終了。

##VS2017で実行
さきほどの記事を参考に、挨拶を返すプログラムを書く。ほぼ同じコードなのでここには載せない。
しかし、

```python3
import discord
```

がモジュールとして認識されておらず、実行に失敗する。python自体の勉強はしていないのでぐぐる。
「import discord Syntax Error」等で調べていると、[このフォーラム](https://python-forum.io/Thread-Discord-Bot--6076)を見つけたので、「ツール」→「Python」→「Python環境」からPython3.7.0のパッケージからdiscordをアップデート。
実行できるようになったかと思いきやまだ動かないので、続けて調べていると、[discord.pyの公式Githubのisuue](https://github.com/Rapptz/discord.py/issues/1249)に3.7.0では動かないと書いてあった。最初から公式サイトの動作環境を見ておくべきだった。
「ツール」→「Python」→「Python環境」でPython3.6のパッケージにdiscord.pyを導入し、「ソリューションエクスプローラー」の「Python環境」を右クリックし「Python環境を追加/削除」で3.7.0から3.6.3に。
この辺のパッケージ設定は正しいやり方なのかはわからないので、詳しい人に聞くか書籍などで正しく学んだほうが良い。

無事ソースコードが色鮮やかになり、実行するとサーバーにいたTest greet botがオンラインに。
![result.png](https://qiita-image-store.s3.amazonaws.com/0/277953/56751118-ed0c-245d-9b2e-43a843bba325.png)

#おわり
次回からbotに機能をつけていく。
Stampery Merkle Tree Algorithm PROOFS VERIFICATION の丁寧な説明

[Stampery BTA v6](https://s3.amazonaws.com/stampery-cdn/docs/Stampery-BTA-v6-whitepaper.pdf)

Merkle Tree の PROOF VERIFICATION の説明ですぐに理解できなかったところがあったので、 メモとして残しておきます。
Page 6 の Merkle Index ( $ \Pi _{[1]} $ ) です。

$$ \omicron = \left( \frac{ \iota }{2^n} \right) \mod{2}  $$

より正確に書くと次のようになります。 単なる括弧ではなくガウス記号です。 more precisely:

$$ \omicron = \left[ \frac{ \iota }{2^n} \right] \mod{2} $$


9ページにあるこの式で、 $ \iota $ は 0 から始まる Merkle Tree の何番目のノードかを表すインデックスです。
(iota is the index that represents the node index start with 0.)
$ \omicron $ は $ 0 \lt \frac{\iota}{2^n} \lt 1 $ のときには ゼロ になります。
(omicron is 0 when $ 0 \lt \frac{\iota}{2^n} \lt 1 $ .) 

すると、 $n$ , $\iota$ による $ \omicron $ の値は次のようになります。
(The omicron value table corresponding to n and iota is as follows.)
列が $\iota$ を表し、 行が $n$ を表します。
(column means iota value, row means n.) 

| $ \omicron $  | 0| 1| 2| 3| 4| 5| 6| 7| 8| 9| 10|
|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|--:|
| 0| 0| 1| 0| 1| 0| 1| 0| 1| 0| 1| 0|
| 1| 0| 0| 1| 1| 0| 0| 1| 1| 0| 0| 1|
| 2| 0| 0| 0| 0| 1| 1| 1| 1| 0| 0| 0|
| 3| 0| 0| 0| 0| 0| 0| 0| 0| 1| 1| 1|
| 4| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0|

$ \omicron $ が 0 のときは右のハッシュと、 1 のときは左のハッシュと結合します。
(combine hash to the right one when omicron is 0, to the left one when omicron is 1.)

たとえば、 $ \iota = 1 $ のときは、 1, 0 ですから、 左、右 というように結合します。

```
  o
 /  \
 o   o
| | | |
0 1 2 3
```

つまり、 V. PROOF OF ANCHORAGE の i. Proof formatting for internal use というところで説明されている proof の配列は、 結合するべき HASH を結合する順番に並べたものということです。