OmniAICreator/Qiita-1.07M huggingface dataset:
tf.contrib.seq2seq.BeamSearchDecoder の length_penalty_weight


# BeamSearch のスコアリングと length_penalty_weight
BeamSearch では、パラレルに beam_width 個の生成を各ステップで行い、そのうち最も「スコア」の高いもののみを残して次のステップを生成します。（大雑把な説明です）
ある一定の長さの文章を常に生成するのであれば、スコアとして log probability を使うことができます。（これが一番基本的な BeamSearch です。）
しかし、 Seq2Seq 等の場合生成される文章の長さには差があります。

- A: やあ
    - logprob(やあ) = logprob(や) + logprob(あ)
- B: こんにちは、いい天気ですね。
    - logprob(こんにちは・・・) = logprob(こ) + logprob(ん) + ... + logprob(。)

ここで logprob はマイナスの値なので、文章の長い B は小さな値に成ってしまい不利です。
その為 BeamSearch の結果短い文章ばかりが生成されることがあります。
この問題を補正するために、長さが長いほど、 log probability を大きくする正則化が必要になります。
これが length_penalty_weight です。

# length_penalty_weight の計算
TensorFlow の公式の [tf.contrib.seq2seq.BeamSearchDecoder](https://www.tensorflow.org/api_docs/python/tf/contrib/seq2seq/BeamSearchDecoder) では、上述の length_penalty_weight でこの正則化を行うことができます。

`length_penalty_weight` が 0.0 (デフォルト) だと長さでの正規化を行わず、1.0に近づくほど、長い文章の生成を優遇するようになります。（一応数式上は1.0を超えても動くはず）

コードを読むと、以下の計算式でスコアが計算されていることがわかります。

```math
score=\frac{logprob}{length\_penalty} \\
length\_penalty=\left(\frac{5 + length}{5 + 1}\right)^\alpha
```
上式の $\alpha$ が `length_penalty_weight` です。
この式は https://arxiv.org/abs/1609.08144 の論文に書かれた方法の実装と成っています。
ちなみにこの論文ではこの数式や5というマジックナンバーの理由は特に述べられてません。経験的にこれがうまく行ったそうです。
また論文中ではこの文章の長さによる正則化の他に、 seq2seq のエンコーダーに渡す文章の各トークン（単語）をどれだけ網羅的に使えているかを attention mechanism を使って判断し、それも正則化項として加えているようです。

ちなみに論文の p.12 `7 Decoder` に上記の式の説明があります。

## コード内での説明
lengthpenalty の [tensorflow のコード内のコメント](https://github.com/tensorflow/tensorflow/blob/r1.7/tensorflow/contrib/seq2seq/python/ops/beam_search_decoder.py#L675)を引用しておきます。

>  Calculates the length penalty. See https://arxiv.org/abs/1609.08144.
>   Returns the length penalty tensor:
> 
>   ```
>   [(5+sequence_lengths)/6]**penalty_factor
>   ```
>   where all operations are performed element-wise.
>   Args:
>     sequence_lengths: `Tensor`, the sequence lengths of each hypotheses.
>     penalty_factor: A scalar that weights the length penalty.
>   Returns:
>     If the penalty is `0`, returns the scalar `1.0`.  Otherwise returns
>     the length penalty factor, a tensor with the same shape as
>     `sequence_lengths`.
気づけばプロ並みPHP　ショッピングカート作りにチャレンジ！＃３【日記】(2018-04-10)

３つほどプログラムをコピペしてデータベース登録～修正までの学習。
一応プログラミングしながら出てくる命令を見て学習していく仕様にはなっているけど、こういうのは文法の解説だけが載った本でもおさらいしたいな･･

タイプミスや更新し忘れなどでリンクが上手くつながっていない、そういうのをチェックして行くことでも言語に対する理解が深まるので、こういうタイプの本だと自習していてそういうのはむしろ美味しいと思う。
ページャの実装(kanimari)

# kaminariによる実装

## gemを入れる
```ruby:Gemfile
  gem 'kaminari'
```

その後`$ bundle install`を実行

## ファイルの生成
`$ rails generate kaminari:views default`を実行し、ファイルを生成

## ファイルに書き込む

1. `controller`でインスタンス変数に格納する

```ruby:controller
  def index
      @pages = Page.page(params[:page])
  end
```

2. viewにページネーションを表示

```erb:views
  <%= @pages.each do |f| %>
    .
    .
    .
  <% end %>

  #ここを記述
  <%= paginate @pages, class: "paginate"  %>
```

##　カスタマイズ
### 一覧の表示数の変更
```ruby:config/initializers/kaminari_config.rb
  Kaminari.configure do |config|
      config.default_per_page = 5
  end
```
ソース解読 > 秀丸エディタ > 謎変数(配列)の使用関数の確認

```txt:動作環境
Windows 7 Pro (32bit)
秀丸エディタ Version 8.79
```

### ソース内謎変数（配列）解析手順

1. grep検索
2. grep結果をファイルごとに開く
3. 開いたファイルにてCtrl+Fで名前検索
4. F11でアウトライン解析表示

それを使っている関数名が黄色表示される。

- [秀丸エディタ > アウトライン解析 > 黄色の表示 > 検索しているキーワードを含む関数](https://qiita.com/7of9/items/41fe1b64e7f6e372d1f2)


grep検索は関数のコール文を表示するが、それがどの関数で呼ばれているかは検索結果を開くまで分からない。
【Android Studio】 org.gradle.internal.UncheckedException: java.lang.ClassNotFoundException: org.w3c.dom.ElementTraversal のエラーについて


久しぶりにAndroid Studioをアップデートして新しいプロジェクトを作成したら下記のエラーがでました。

```
Gradle sync failed: Unable to start the daemon process.
This problem might be caused by incorrect configuration of the daemon.
For example, an unrecognized jvm option is used.
Please refer to the user guide chapter on the daemon at https://docs.gradle.org/4.4/userguide/gradle_daemon.html
Please read the following process output to find out more:
-----------------------
org.gradle.internal.UncheckedException: java.lang.ClassNotFoundException: org.w3c.dom.ElementTraversal
at org.gradle.internal.UncheckedException.throwAsUncheckedException(UncheckedException.java:63)
at org.gradle.internal.UncheckedException.throwAsUncheckedException(UncheckedException.java:40)
at org.gradle.internal.classloader.ClasspathUtil.getClasspathForClass(ClasspathUtil.java:84)
at org.gradle.internal.classloader.DefaultClassLoaderFactory.createIsolatedClassLoader(DefaultClassLoaderFactory.java:61)
at org.gradle.launcher.bootstrap.ProcessBootstrap.runNoExit(ProcessBootstrap.java:50)
at org.gradle.launcher.boo... (show balloon)
```

stack overflowでも未解決?
[https://stackoverflow.com/questions/49503402/org-w3c-dom-elementtraversal-crash-when-using-gradle-above-4-4?rq=1](https://stackoverflow.com/questions/49503402/org-w3c-dom-elementtraversal-crash-when-using-gradle-above-4-4?rq=1)

色々ググってたら下記のTweetを発見
<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">gradle氏がorg.gradle.internal.UncheckedException: java.lang.ClassNotFoundException: org.w3c.dom.ElementTraversalって言って起動しなくなって死んでる</p>&mdash; Yuki Fujisaki / tnj (@tnj) <a href="https://twitter.com/tnj/status/954942601894928384?ref_src=twsrc%5Etfw">2018年1月21日</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">うおー /Library/Java/Extensions に xml-apis.jar その他があってこれが優先されてたっぽい。消したら解決した。。</p>&mdash; Yuki Fujisaki / tnj (@tnj) <a href="https://twitter.com/tnj/status/954981244353196034?ref_src=twsrc%5Etfw">2018年1月21日</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>


ということですので、`/Library/Java/Extensions` の中身を全部一旦別のディレクトリに退避させて再度実行してみたところちゃんとbuildできました。


Fujisakiさんありがとうございました！
Eclipse org.eclipse.wst.common.componentの更新タイミング

Eclise(4.5）で自動生成される。これ

org.eclipse.wst.common.component

の更新タイミング。

いくら手動で更新しても自動更新され自信喪失しちゃうこれ。

プロジェクトのプロパティの「デプロイメント・アセンブリ―」を更新すると更新されます。
PIXIをNUXTで使う

npm経由でインストールしたパッケージを`import`しようとすると、windowが見つからないだのなんでので怒られる。その対処法はNUXT公式の[FAQ](https://ja.nuxtjs.org/faq/window-document-undefined/)にある通り。

`nuxt.config.js`ファイルの`vendor`の値として`node_modules`にインストールしたパッケージを指定して、`index.vue`ファイルで`process.browser`が`true`の処理内に書くことでエラーが発生しなくなる。


```nuxt.config.js
module.exports = {
  build: {
    vendor: ['pixi.js']
  }
}
```

```index.vue
<template>
  <h1>hello</h1>
</template>

<script>
if (process.browser) {
  console.log(PIXI)
}

export default {

}
</script>

```
Ruby on Railsのアプリ作成における環境構築手順・MacBook Pro版

#0.はじめに
　この記事は新たなmacを手に入れた時、すぐにRailsを使えるようにするための手順をまとめたものである。
　OSはmacOS High Sierra 10.13.4で構築した。
　基本的に[このサイト](https://gorails.com/setup/osx/10.13-high-sierra)を参考にしている。

#1.Homebrewのインストール
　Homebrewをダウンロードする。途中で「XCode CommandLine Toolsをダウンロードしますか？」と聞かれた場合、yesと答えよう。

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

　ちなみにHomebrewとは、「macOS Xオペレーティングシステム上でソフトウェアの導入を単純化するパッケージ管理システムのひとつ」である。(by [wiki](https://en.wikipedia.org/wiki/Homebrew_(package_management_software)))

#2.Rubyのインストール
##2-1.rbenvのダウンロード
　rbenvはrubyのヴァージョン管理を行ってくれる。

```
$ brew install rbenv ruby-build
```

　次にターミナルを開く度にrbenvをロードすべく次を実行する。

```
$ echo 'if which rbenv > /dev/null; then eval "$(rbenv init -)"; fi' >> ~/.bash_profile
$ source ~/.bash_profile
```

　1行目のコマンドは、文字列 `if which rbenv > /dev/null; then eval "$(rbenv init -)"; fi` をhomeディレクトリの `.bash_profile`   に追記している。
　2行目のコマンドは、ホームディレクトリのファイル`.bash_profile`に記載されているコマンドを実行している。

##2-2. rubyのインストール　


```
$ rbenv install 2.5.0
$ rbenv global 2.5.0
$ ruby -v
```

としてrubyのヴァージョンが出力されたらok。

#3.Gitの構築
　今後ヴァージョン管理にはGitを使用する。そこで、まず自分のGithubアカウントを作成し、そのアカウントに対応したGitをセットアップする。

##3-1. Githubアカウントの作成
　まずは[Github](https://github.com/)でアカウントを作成。そしてターミナルで

```
$ git config --global color.ui true
$ git config --global user.name "YOUR NAME"
$ git config --global user.email "YOUR@EMAIL.com"
```

を実行。`YOUR NAME,YOUR@EMAIL.com`にはGitHubアカウントのアカウント名とメールアドレスを設定する。

## 3-2.鍵をGithubに通す
　まずは自分の鍵を作成する。

```
$ ssh-keygen -t rsa -C "YOUR@EMAIL.com"
```

　実際に作成されているかチェック。

```
$ cat ~/.ssh/id_rsa.pub 
```

この出力(公開鍵)はコピーしておく。

　次に[New SSh key](https://github.com/settings/keys)にて先ほどのコピーした公開鍵を登録する。鍵の名前はなんでも良い。

　最後に上手くいったかチェック。

```
$ ssh -T git@github.com
```

もし、`Hi *****! You've successfully authenticated, but GitHub does not provide shell access. `と返ってきたら成功。


#4. Railsのインストール
　以下のコマンドを実行するだけ。

```
$ gem install rails -v 5.1.4
$ rbenv rehash 
$ rails -v 
```

上手くいっていれば、最後にヴァージョンを出力してくれる。

#5. データベースのセットアップ
　homebrewを用いてデータベースを構築することで、PCに元から入っているヴァージョンのものとのトラブルを防ぐ。

```
$ brew install sqlite3
$ brew install mysql
```

　`sqlite3`は一番簡単に試せるデータベースである。`MySQL`とは 世界中で最もよく利用されているオープンソースのデータベースのひとつで、高速で使いやすいことが特徴である。

#6.アプリ作成
　実際にアプリを作って見る。

```
$ rails new myapp
```

カレントディレクトリに`myapp`が作成されていれば完成。

　もしデータベースがMySQLのアプリを作成したければ

```
$ rails new myapp -d mysql
```

で作れる。
expressで設定ファイルを読み込む（＋環境毎に切り替える）


いくつかの方法があるようですが、標準機能で事足りるようです。

## 参考

大変参考になりました。

* https://maku77.github.io/nodejs/express/switch-env.html

## 基本

expressはapp.get('env')で環境（NODE_ENVの内容）が取得できる。
下記のようなexpressを利用するjsを書いて実行します。

```js:app.js
var express = require('express');
var app = express();

//環境を表示
console.log(app.get('env'));
```

標準ではdevelopmentが返る。

```bash
development
```

## NODE_ENVの値は起動時に（も）設定できる

起動時コマンドの頭につけると読み込まれる。

```bash
$ NODE_ENV=production node app.js

production
```

## 設定ファイルを用意する

設定用のjson(config.json)を作成し、環境毎に値を設定する。

```js:config.json
{
    "development": {
        "host": "test-server"
    },
    "production" : {
        "host": "honban-server"
    }
}
```

## 環境毎に変数を見てみる

```js:app.js
var express = require('express');
var app = express();

//環境を表示
console.log(app.get('env'));
//configファイルから環境に応じた内容を取得
var config = require('./config.json')[app.get('env')];

//表示
console.log(config.host);
```

## PM2を利用した場合

pm2を利用した場合は頭に環境変数を付けるという形式では動かないようです。

### 参考

* https://intheweb.io/untitled-2/

### 設定ファイル

pm2用の設定ファイルをカレントに作成し、

```json:pm2.config.json
{
  "name" : "App_Name",
  "script" : "./index.js",
  "env": {
    "NODE_ENV" : "development"
  },
  "env_staging": {
    "NODE_ENV" : "staging"
  },
  "env_production": {
    "NODE_ENV" : "production"
  }
}
```

### 起動

設定ファイルと環境を指定して起動させます。

```bash
pm2 start pm2.config.json --env staging  
```
OpenPose - Portable Demo for Windowsでとりあえず動かす

#実行方法
1. 下記からbinaryファイル(現時点の最新は`openpose-1.3.0-win64-gpu-binaries.zip`)をダウンロードする  
https://github.com/CMU-Perceptual-Computing-Lab/openpose/releases
2. 解凍したフォルダ(仮に`openpose`とする)をCドライブ直下に置く (実際はどこに置いても良い)
3. `openpose\model`フォルダ内にある`getModels.bat`を実行してモデルをダウンロードする
4. `openpose`フォルダを開き，アドレスバーに`cmd`と入力しコマンドプロンプトを立ち上げる
5. コマンドプロンプトで`bin\OpenPoseDemo.exe`を実行する

#コマンド
**Webカメラで実行する**
特にオプションは必要ない
`bin\OpenPoseDemo.exe`

**Imageファイルで実行する**
`--image_dir`の後に静止画ファイルのあるディレクトリを指定する
`bin\OpenPoseDemo.exe --image_dir examples\media\`

**Videoファイルで実行する**
`--video`の後に動画ファイルを指定する
`bin\OpenPoseDemo.exe --video examples\media\video.avi`

**手および顔の検出**
手は`--hand`，顔は`--face`を指定する
`bin\OpenPoseDemo.exe --hand --face`

**高精度実行**
検出精度は向上するが速度が極端に低下する（Titan X 6.7GB GPUで1fps）
`bin\OpenPoseDemo.exe --net_resolution "1312x736" --scale_number 4 --scale_gap 0.25`
`bin\OpenPoseDemo.exe --net_resolution "1312x736" --scale_number 4 --scale_gap 0.25 --hand --hand_scale_number 6 --hand_scale_range 0.4 --face`
MindMup 2 > 印刷時に読めなくなる色 (Map theme=Productivity(Beta))

```txt:動作環境
Windows 10 Pro (64bit) Fall Creators Update適用済
Google Chrome バージョン: 65.0.3325.181（Official Build） （64 ビット）
```

### 関連

- [MindMup 2 > 印刷時に読めなくなる色 (Map theme=Standard)](https://qiita.com/7of9/items/98d675a968f1c1a6f92c)

### 見えなくなる色

組込みソフトの関数構造のマインドマップを作った。
マインドマップ形式では縦方向が長くなる。MindMup 2 においてはMap themeをProductivity(Beta)にすることで、縦方向の長さを縮める効果がある。
(View -> Map theme -> Productivity(Beta))

一方で、Productivity(Beta)では見えなくなる色があるようだ。

下の図では、読めない文字に加え、Map theme=Standard時に印刷で文字が読めなくなる色は`---`としている。

![qiita.png](https://qiita-image-store.s3.amazonaws.com/0/32870/e8bd1e72-2ef8-cf2e-d13b-2a336ced87f1.png)

x+xという記載で文字が読める色を使うとMap theme=StandardとProductivity(Beta)の両方で読めるマインドマップにすることができる。
Gitあれこれ ~其の壱~

# はじめに
Git利用時に忘れがちなコマンドの備忘録です。
様々なサイトに書いてあるコマンドをかき集めてまとめてみました。

#Step1: 設定
`git config --global user.name “Natalie Portman”`
=>名前を設定
`git config --global user.email natalie@portman.com`
=> emailを設定
`git config user.name`
=>名前を確認
`git config user.email`
=> emailを確認

#Step2: Gitの大まかな流れ

```
1. working tree(ワーキング・ツリー) 
2. index(インデックス)=>stage
3. local repository(ローカル・リポジトリ)=>HEAD
4. remote repository(リモート・リポジトリ)

git add => ワーキング・ツリーの変更をインデックスへ反映させる（1から2へ）
git commit => インデックスでの変更をローカル・リポジトリへ反映させる（2から3へ）
git push => ローカル・リポジトリの変更をリモート・リポジトリに反映させる（3から4へ）
```

#Step3: addからpushまで
`git init`
=> Gitのリポジトリを新規作成
`git staus`
=> 現在のコミット状況や変更ファイルの一覧などを確認
`git add file_name`
=>`file_name`という名前のファイルをステージングする
`git commit`
=>インデックスでの変更をローカル・リポジトリへ反映させる
`git commit -m “commit_message”`
=>コミットに短いメッセージをつけることができるオプション `-m` とメッセージの本文をつけてコミット
`git commit --amend`
=> 直前のコミットを修正
`git commit --amend -m “edited_message”`
=> 直前のコミットのメッセージを修正
`git push origin(remote_name) branch_name`
=> リモートリポジトリにローカルリポジトリの内容を反映させる
`git log`
=> コミットの情報と履歴を一覧で確認。
`git log --oneline --graph --decorate`
=>今までのコミットやマージの記録を線で確認。


#Step4: ブランチ操作をする
`git branch`
=>ローカルブランチの状態を確認。現在どのブランチで作業中なのか、切り替え可能なブランチはあるか、などなど
`git branch -r`
=>リモートブランチの状態を確認。
`git branch -a`
=>ローカルとリモートのブランチを両方確認
`git branch branch_name`
=>新たに’branch_name’という名前のブランチを作成
`git checkout branch_name`
=>現在作業中のブランチから`branch_name`という名前のブランチへ移動
`git branch -b branch_name`
=>`branch_name`という名前のブランチを作成し、そのブランチへ移動
`git merge branch_name`
=>現在作業中のブランチに`branch_name`という名前のブランチをマージ
`git merge --ff branch_name`
=>
`git merge --no-ff branch_name`
=> マージコミットのインスタンスを生成しブランチの流れを分かりやすくする（マージ後でも元に戻せるようにする）
`git branch -d branch_name`
=> `branch_name`という名前のブランチを削除
`git reflog HEAD`
=> 過去にHEADが差していたコミットの一覧を作成する
`git branch branch_name HEAD@{number}`
=> 削除したブランチを復活させる。

`fast-forward` => 下記の記事を参照してください。
https://qiita.com/shoichi0599/items/0bbaef4e224201f9c30f
https://backlog.com/ja/git-tutorial/stepup/stepup1_4.html

#Step5: `git reset`を使いこなす

`HEAD` => 作業中のローカルブランチへのポインタ（今いるブランチの最新コミット）
`HEAD^` => 直前のコミット

`git reset`のオプション
`--soft`      => HEADのみをリセット
`--mixed `  => HEADとindexをリセット
`--hard`.    => HEADとindexとworking treeをリセット

`git reset HEAD file_name`
=> `file_name`のステージングの取り消し(`git add`の取り消し)
`git reset --hard HEAD^`
=> HEADとindexとworking treeをリセットしコミット前の状態に戻す（`git commit`の取り消し）
`git reset --soft HEAD^`
=> コミットのみを取り消し、他はそのままにしておく（`git commit`の取り消し）
`git reset --hard HEAD`
=>マージを元に戻す（マージ後にコミットを行なっていない場合）
`git reset --hard ORIG_HEAD`
=>マージを元に戻す（マージ後にコミットを行なっている場合）


これにてひとまず終了。次回は`revert`や`stash`などについて書ければと思います。
translucentを有効にしたopenldapでのreplicationの設定について

# 訂正

Translucentを有効にしたopenldapを作成し、そのレプリカを作る事に成功したと思い、このページを作成しました。

しかし、その後、Kubernetes環境でうまく動作しないため、コンテナ化の前に構築したVMWare上で、当初の検証環境を立ち上げ、再現性を確認したところ、一時的に成功したように見えるタイミングはあるものの、多くの時間はクエリに応答できない状態となる事が分かりました。

そのため、以前このページに記述していた大部分は削除しました。

translucentのみをOLCで構築する分には一部の記述は有益なので、興味のある場合は履歴から過去のバージョンを確認してください。
スライダー・カルーセル



スライダー

## Vegas

[Vegas Background SlideShow](http://vegas.jaysalvat.com/)

![grid.gif](https://qiita-image-store.s3.amazonaws.com/0/49910/a51cb12f-a5e9-4259-85a1-02bb23f98319.gif)

ken burns 効果でスライド切替え可能
切替時のエフェクト多数


## Smoothslides

[Smoothslides Demo](http://kthornbloom.github.io/Smoothslides/#demo)
ken burns 効果でスライド切替え可能
ただし画像が拡大される。

![image](https://qiita-image-store.s3.amazonaws.com/0/49910/181b868a-c661-a65f-d2b1-6d2d844d0c1e.png)

## slick

[slick - the last carousel you'll ever need](http://kenwheeler.github.io/slick/)


![image](https://qiita-image-store.s3.amazonaws.com/0/49910/a29ef263-2713-9430-5646-b9102d555b31.png)


・レスポンシブ対応


## FlexSlider

[FlexSlider 2](http://flexslider.woothemes.com/index.html)

・Carousel
・

![image](https://qiita-image-store.s3.amazonaws.com/0/49910/df63428e-9fa0-60fa-dc67-7a9a37c065be.png)


## bxSlider

[jQuery Content Slider | Responsive jQuery Slider | bxSlider](https://bxslider.com/)

![image](https://qiita-image-store.s3.amazonaws.com/0/49910/62bc9945-119f-dd6c-edbd-bdc929db2c39.png)
pipのエラーAttributeError: '_NamespacePath' object has no attribute 'sort'をなおした話

# はじめに
`pip install hoge`や`pip list`を行おうとしても以下のようなエラーが出てきたのでその対処法をまとめます。

```bash:error
tk@tk-ThinkPad-E480:~$ pip list                                                                                                                                                                            [193/193]
Traceback (most recent call last):
  File "/home/tk/anaconda3/bin/pip", line 7, in <module>
    from pip import main
  File "/home/tk/anaconda3/lib/python3.5/site-packages/pip/__init__.py", line 43, in <module>
    from pip.utils import get_installed_distributions, get_prog
  File "/home/tk/anaconda3/lib/python3.5/site-packages/pip/utils/__init__.py", line 27, in <module>
    from pip._vendor import pkg_resources
  File "/home/tk/anaconda3/lib/python3.5/site-packages/pip/_vendor/pkg_resources/__init__.py", line 3018, in <module>
    @_call_aside
  File "/home/tk/anaconda3/lib/python3.5/site-packages/pip/_vendor/pkg_resources/__init__.py", line 3004, in _call_aside
    f(*args, **kwargs)
  File "/home/tk/anaconda3/lib/python3.5/site-packages/pip/_vendor/pkg_resources/__init__.py", line 3046, in _initialize_master_working_set
    dist.activate(replace=False)
  File "/home/tk/anaconda3/lib/python3.5/site-packages/pip/_vendor/pkg_resources/__init__.py", line 2578, in activate
    declare_namespace(pkg)
  File "/home/tk/anaconda3/lib/python3.5/site-packages/pip/_vendor/pkg_resources/__init__.py", line 2152, in declare_namespace
    _handle_ns(packageName, path_item)
  File "/home/tk/anaconda3/lib/python3.5/site-packages/pip/_vendor/pkg_resources/__init__.py", line 2092, in _handle_ns
    _rebuild_mod_path(path, packageName, module)
  File "/home/tk/anaconda3/lib/python3.5/site-packages/pip/_vendor/pkg_resources/__init__.py", line 2121, in _rebuild_mod_path
    orig_path.sort(key=position_in_sys_path)
AttributeError: '_NamespacePath' object has no attribute 'sort'


```

# 実行環境
Ubuntu 16.04.4 LTS
Python 3.5.1 :: Anaconda 4.0.0 (64-bit)
pip 9.0.3

# 解決方法

最初に方法を、その後にコードを書きます。

エラーが出た`__init__.py`の2121〜2122行目を編集します。
自分の場合は上述のようなエラーが出たのでパスは`/home/tk/anaconda3/lib/python3.5/site-packages/pip/_vendor/pkg_resources/__init__.py`になります。
下のようにもともとあったコード（2行目まで）をコメントアウトして、3〜5行目を追加します。

```python3:what_to_do
#orig_path.sort(key=position_in_sys_path)
#module.__path__[:] = [_normalize_cached(p) for p in orig_path]
orig_path_t = list(orig_path)
orig_path_t.sort(key=position_in_sys_path)
module.__path__[:] = [_normalize_cached(p) for p in orig_path_t]

```

では実際にやっていきましょう。
2121行目とか見てられないので、`less`を使って`orig_path.sort`を検索、ハイライトさせて表示させます。

```bash:less
sudo less -p orig_path.sort /home/tk/anaconda3/lib/python3.5/site-packages/pip/_vendor/pkg_resources/__init__.py

```
すると該当の箇所がハイライトされた状態で`__init__.py`が開かれるので、`V`を押してエディターを開きます。
あとは上のように元々あった2行をコメントアウト、新たに3行を追加して終わりましょう。
エディターを終了するときは`Ctrl + x`、`y`で終了し、`less`を終了するときは`q`を入力してください。

#参照

- [pip3 error - '_NamespacePath' object has no attribute 'sort'](https://stackoverflow.com/questions/47955397/pip3-error-namespacepath-object-has-no-attribute-sort)
GitHubでpush時にERROR: Permission

検証で複数アカウントを使っていて、他のアカウントのリポジトリにpushしようとしたら、以下なエラーが。

```
ERROR: Permission to xxxxx denied to xxxxx.
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
```

リポジトリ側のアカウントでCollaboratorsの設定をpushを行うアカウントに対して行うことで解消。
python 動かしていて、コンピュータがうるさくなってきたら(mac, linux編)

「ゼロから作るDeep Learning ２自然言語処理編」を読む前に読んで置くとよい資料とプログラム
https://qiita.com/kaizen_nagoya/items/537b1810265bbbc70e73

の例題プログラムの動作確認試験@macOS。

コンピュータがうなり出した。

```shell-session:shell
$ ps -ax
14158 ttys000    0:00.09 python
14676 ttys000    0:02.63 python train.py
14712 ttys000    0:01.44 python train_custom_loop.py
14746 ttys000    0:00.95 python show_spiral_dataset.py
14777 ttys000    0:00.96 python count_method_small.py
14865 ttys000    0:01.41 python train.py
26590 ttys000    0:00.01 ps -ax
90666 ttys000    0:00.06 login -pf kaizen_nagoya
90667 ttys000    0:01.14 -bash
 1009 ttys001    0:00.03 login -pf kaizen_nagoya
 1010 ttys001    0:00.15 -bash
13610 ttys001    0:00.13 python
14581 ttys001    0:00.10 python
14219 ttys003    0:00.08 python -v
14237 ttys003    0:00.10 python -v
14356 ttys003    0:00.07 python
67338 ttys003    0:00.08 login -pf kaizen_nagoya
67339 ttys003    0:01.34 -bash
68207 ttys004    0:00.06 login -pf kaizen_nagoya
68209 ttys004    0:00.06 -bash
```
もし、自分で新たに編集入力中のファイルがなければ、
pythonとついた行の番号をkill

```shell-session:shell
kill 13610
kill 14581
kill 14219
kill 14237
kill 14356
kill 14676
kill 14712
kill 14746
kill 14777
kill 14865
```

おとなしくなった。

Linux/Debian/Ubuntu/Raspbianでも同様かも

くれぐれも、新たに編集入力中のファイルがないことを確認してから
killしてください。編集入力中のファイルは、保存してなければ帰ってきません（自動保存機能のついたエディタを利用している場合には、その自動保存時点以降、、、）。
# kill四段活用

```shell-session
$ kill 1234
$ kill -9 1234
$ sudo kill 1234
$ sudo kill -9 1234
```

# 関連資料

GPU搭載端末利用顛末(1日目・2日目)'SSLError(SSLError(1, '[SSL: CERTIFICATE_VERIFY_FAIL ED] certificate verify failed (_ssl.c:777)'),)'

https://qiita.com/kaizen_nagoya/items/149cae9df7adbf2df1cc

python: Error in sitecustomize; set PYTHONVERBOSE for traceback: KeyError: 'PYTHONPATH'
https://qiita.com/kaizen_nagoya/items/50e6c79810a154eb5c5a

### 文書履歴
ver. 0.10 初稿 20180410
ver. 0.11 kill四段活用追記 20180411
ver. 0.12 ありがとう追記　20230413
## 最後までおよみいただきありがとうございました。
いいね　💚、フォローをお願いします。
####  Thank you very much for reading to the last sentence.
Please press the like icon 💚　and follow me for your happy life.
riot.js ace tagを作る。

### 日本語の変換に目をつぶればace editorは簡単。
```html
<script src="https://cdnjs.cloudflare.com/ajax/libs/ace/1.3.3/ace.js" type="text/javascript" charset="utf-8"></script>
<script src="//gnjo.github.io/riot.js"></script>
<ace></ace>
<ace></ace>
<ace></ace>
<ace></ace>
<ace></ace>
<ace></ace>
```
```js
riot.tag(`ace`
,`<pre ref="code"></pre>`
,function(opt){
 let ed=null;
 this.one('mount',function(){
     ed = ace.edit(this.refs.code,{
        maxLines: 30,
        wrap: true,
        autoScrollEditorIntoView: true
    })      
     ed.setTheme("ace/theme/solarized_dark");
     ed.session.setMode("ace/mode/javascript");
 })
})       
;
riot.mount('ace')
;
```
機械学習をする際必要な手順（その１）

##前置き
機械学習を勉強する際に、ネットでいろんな記事を読んで、調べたりするが、そのせいか、知識がごちゃ混ぜになっている。
一旦知識の整理として、そもそも機械学習するにあたって、一般的にどういうステップを踏んでいくのかについて、一通りまとめてみました。
##参考文献
上記の内容は *Francois Cholletの「Deep Learning with Python」* を参考に記事を書きました、もっと詳しく知りたい方はこちらの本を読んでください。

##処理する手順
まず処理する手順を大まかに以下の４つの部分となっている
1.課題の把握＆データ収集
2.評価
3.特徴エンジニアリング
4.Overfittingへの対応

##1.課題の把握＆データ収集
まず、ある課題が与えた時、以下の２点について把握する必要がある
１）入力データ（トレーニングデータ）は何になるのか？
２）その入力データに対して、どういう予測をしたいのか？
####ここで注意して欲しいのは
予測は、適切なトレーニングデータがあることを前提としている。
つまり、
例えば、あなたが映画のレビューを感情ごとに分類（予測）したい場合、トレーニングデータとして、映画のレビューとそれの感情注釈データを持っている必要がある。逆に、映画のレビューしかないと、トレーニングしても、そのレビューの感情について何が正解なのかがわからないので、利用可能なデータがあるかどうかは重要になってくる。
したがって、次の手順に移る前に、あなたは、
１）入力と出力は何か？
２）どういうデータを使って行くか
について把握している必要がある
そして、この手順では、今後の手順に向けて2つの仮説を立てていることに注意して欲しい。
*１）あなたの入力を与えることによって、ちゃんと該当する出力を予測できる*
*２）あなたが使っているデータは十分有益であること、つまり、入出力間の関係を十分に抽出できるようなデータであること*
これらの仮説は、モデルを作った後に、検証を行う。
####トレーニングデータの重要性
上述の仮説１）でも言ったように、トレーニングデータを与えることで、ちゃんと他のデータも予測できるということも仮定しているのです。
ただし、現実はその仮定通りにはうまく行かない（当然だw）
ここで説明するため一つ典型的な課題を挙げる
#####「Nonstationary Problems」
この類の問題とは、
例えば、衣類の推薦システムを実装するとしたら
もし、トレーニングの際は8月のデータを使い、最後に推薦システムを冬のデータで生成する。この場合、衣類の買い上げは季節によって一定ではないので、モデルの構築は月によって変える必要がある。
なので一ヶ月のデータだけ使って他の月を予測するのは正しくないのです！
正しいやり方として、
定期的にモデルをリトレーニングし（最近のデータでトレーニング）
あるいは、定常になっている部分を含むデータをトレーニングデータとして使う、例えば、数年分のデータを使うとか。
ここで、忘れてはいけないことは、入力する際、時間もinputとしてモデルに入れましょう！（じゃないと、意味ないです）

##続き
ステップ２の評価　についてははこれから続けて書きます
気づけばプロ並みPHP　ショッピングカート作りにチャレンジ！＃２【日記】(2018-04-09)

エラートラップ
tryによるエラートラップについて勉強。
サーバーに何かあったときに
「障害が発生しています」
という表示をさせるもの。

こういうものはちゃんとできてるかそうでないかでユーザーの使い心地が全然違うから、チェックリストのようなものを作って忘れないようにしたほうがいいかな
viでカーソルキーを使用するとABCDが入力されてしまう問題

##概要
viで編集中にカーソルキーを使用するとABCD改行等が入力されてしまう問題を対処しました。
Vimについての記述はたくさんありましたが、viについては少なかったの記載しました（とはいっても対処方法は同じです）。

##対処方法
.vimrcにset nocompatibleを追記（ファイルがなければ新規作成）すればOKです。

```Bash:
$ vi ~/.vimrc
set nocompatible
```

viでもVimでも.vimrcでいいみたいです。
なら、情報がたくさんあるので、以下のサイト等を参考に、便利そうな設定も追加して、自分好みにしようと思います。
ついでにVimもインストールしました。

##参考サイト

- [初心者向け vimrcの設定方法](https://qiita.com/iwaseasahi/items/0b2da68269397906c14c)

##追記
投稿後に関連記事でみつけた情報

- [set nocompatibleはもういらない](https://qiita.com/yu_suke1994/items/e0a19574994a57c8fe17)
- [Vi で方向キーを押すとABCDになる](https://qiita.com/CloudRemix/items/681d5b4e5eda809fecac)
Googleドライブ > ファイル名キーワードによる検索 > title:キーワード

```txt:動作環境
Windows 8.1 Pro (64bit)
```

Googleドライブで作成したMindMup 2のマップファイルを検索すると見つからなかった。
`xxxBackup`を含むファイル名としている。

### 失敗

`xxxBackup`で検索すると

> この検索条件に一致するファイルやフォルダはありませんでした。

### 成功

`title:xxxBackup`で検索すると、該当ファイルが見つかった。

### link

https://gsuitetips.com/tips/drive/advanced-searches-on-google-drive/
> title:
> Search by title of the file or document (combine with " " to perform exact title search)
【WordPress】PHP ヒアドキュメント / WP ショートコード 備忘録

#なぜWPショートコードを作成することになったのか
既存ファイル（特にスタイル）に依存しない独立したコードを使いまわしたい
例えば既存の記事ページ複数に渡り、新たなエリアを追加したい時などに、CSSが干渉して、記事によって無駄な記述が増えてしまったり、WPのタグ自動挿入機能で無駄な改行タグに邪魔されることがある。
こういった事象を解決するために、ショートコードを作成する。

（例1）function.phpに直接記述する

```java:function.php
/**
 * インフィードエリアを呼び出すショートコード追加
 * @param string $str
 * @return string
 */
function shortcode() {
$str=<<<eot
	<div class="infeed_area01">
	    <a href="https://www.aaa.jp/bbb/">
	        <img src="/common/img/contents/point/infeed01.png" alt="">
	        <p><span>関連リンク</span><br>備忘録総合ランキングTOP5</p>
	    </a>
	</div>
eot;
	return $str;
}
add_shortcode('infeed_area', 'shortcode');
?>
```

（例2）function.phpからincludeして読み込む
手順1 : function.phpの直下にあるfunctionsディレクトリの中に上記ショートコードの記述をしたファイルを作成

手順2 : functions.phpでincludeの記述

```java:function.php
foreach(glob(TEMPLATEPATH."/functions/*.php") as $file){
	require_once $file;
}
```

*補足
glob()を使用してfunctionsディレクトリの中の全テンプレートファイルをワイルドカード指定で読み込み
ionicでenvironmentsを利用する。

ionicではangularのenvironmentsのような環境ごとに変数を切り替える機能がデフォルトではないので、調べた中で一番シンプルそうな方法で実装してみようと思います。
(ionic4では実装されるらしい。)

# 1. 各環境用のjsonファイルを作成する
.envフォルダを作成し、環境毎にjsonファイルを作成します。

```
.env/
  production.json
  staging.json
  development.json
```

ファイルの中身は、以下のような内容にします。

```json:development.json
{
  "environment": "development",
  "endpoints": {
    "server1": "https://....",
    "server2": "https://...."
  }
}
```

# 2.Scriptを作成する
上記jsonファイルを読み込み、app.config.tsファイルを生成するためのスクリプト、`./scripts/environment.js`を作成します。

```javascript:./scripts/environment.js
#!/usr/bin/env node
var path = require('path');
var process = require('process');
var fs = require('fs');

class Environment {
  constructor(args) {
    args = JSON.parse(args).original;
    const defaultEnv = 'development'; //Set default environment
    let env;
    
    if(args.includes('ionic:build')) {
      let envFlags = args.filter((arg) => arg.includes("--env"));
      env = (envFlags.length === 1) ? envFlags[0].substr(envFlags[0].indexOf("=") + 1) : defaultEnv;
    } else {
      let index = args.indexOf('--env');
      env = (index > -1) ? args[index+1] : defaultEnv;
    }

    console.log(`Using environment config: ${env}`);
    this.setEnvironment(env);
  }

  setEnvironment(env) {
    let config;
    
    try {
      config = require(path.join('../', '.env', env + '.json'));
    } catch(e) {
      throw new Error(`The config file for this environment is missing (${e.message})`);
    }

    var wstream = fs.createWriteStream(path.resolve('./src/app/app.config.ts'));
    wstream.write(`
      import { InjectionToken } from "@angular/core"; //Use InjectionToken in Angular 4.x
      export let APP_CONFIG = new InjectionToken<string>("app.config");
      export const AppConfig = ${JSON.stringify(config)};
    `);
    wstream.end();
  }
}

new Environment(process.env.npm_config_argv);
```

# 3.npm scriptを修正する
npm scriptに以下のコマンドを追加し、作成したscriptが実行されるようにします。

```json:package.json
"scripts": {
    ...
    "ionic:watch:before": "node ./scripts/environment",
    "ionic:build:before": "node ./scripts/environment",
    ...
  }
```

`ionic serve`もしくは`ionic build`をすると、`./src/app/app.config.ts.`が生成されるようになります。
また、`ionic serve --prod --env=production`のようにパラメーターを渡すことで環境を切り替えることができます。

# 4.moduleにimportする
`app.config.ts`を`app.module.ts`でimportします。

```typescript:app.module.ts
import { APP_CONFIG, AppConfig } from './app.config';

@NgModule({
    ...
  providers: [
    ...
    { provide: APP_CONFIG, useValue: AppConfig }
    ...
  ]
})
```

# 5.読み込んで使用する
importすること、Angular DI経由で、`app.config.ts`に設定された各種値を読み込めるようになります。

```typescript:example-page.ts
import { Component, Inject } from '@angular/core';
import { APP_CONFIG } from './app.config';

@Component({
  selector: 'example-page',
  templateUrl: 'example-page.html'
})
export class ExamplePage {
 
  constructor(@Inject(APP_CONFIG) private config) {
    console.log(config.environment);
    console.log(config.endpoints.server1);
  }

}
```


----
<参考>
https://github.com/ionic-team/ionic-app-scripts/issues/762#issuecomment-295235407
https://gist.github.com/rossholdway/16724496806b66a162ee6cbf8bfc5def
font-sizeをどの幅でも縮小拡大するvw単位の使い方

vwの単位が幅によって拡大縮小はするのですが
1vw,2vwなどこれが何pxになるのかわからない。

例えば414pxの幅にfont-size:16pxを表示させたいと言うはXvwになるのか？

比率を計算するのは
414px : 100vw = 16px : Xvw
Xvw = ( 16 * 100 ) / 414px
3.864734299516908vwとなる。

これをいちいち計算して入力しても構わないのですが、
calcを使用すればこう言う書き方ができます。

```css
font-size: calc( ( 16 * 100vw ) / 414 );
```
db内の(指定)データの確認exist?

# db内のデータの確認exist?(引数も可能)
## 使い方
```
  モデル.exist?(条件)
```

## 例：

Pagesテーブルに１件でもデータは存在するか確認
*引数を渡さないで使用

```
Page.exists?
# SELECT 1 FROM "pages" LIMIT 1
```

categoryがrailsであるデータが存在するか確認

```
Page.exists?(:category => "rails")
# SELECT 1 FROM "pages" WHERE "pages"."category" = "rails" LIMIT 1
```
検索条件を指定してdbから取得

# 条件を指定してdbから取得するメソッド集

## `where(条件)`

### 使い方
```
  モデル.where(条件)
```

### 例：

文字列で指定

```
Page.where("category_id = '1'")
# SELECT "pages".* FROM "pages" WHERE "pages"."category_id" = 1
```
ハッシュで指定

```
Page.where(category_id: 1)
# SELECT "pages".* FROM "pages" WHERE "pages"."category_id" = 1
```

配列で指定

```
Page.where(["category_id = ? and url_id = ?", 1, 1])
# SELECT "pages".* FROM "pages" WHERE (category_id = 1 and url_id = 1)
```

nilのすべてのデータを取得

```
Page.where("title = ?", nil)
# SELECT "pages".* FROM "pages" WHERE (title = NULL)
```

nilでないすべてのデータを取得

```
Page.where("title not ?", nil)
# SELECT "pages".* FROM "pages" WHERE (title not NULL)
```
onlineTool  > カウントダウン タイマー オンライン > ブラウザタブにカウントダウン残り時分秒が表示される | notification:終了時の明示 | 目的の明示

```txt:動作環境
Windows 8.1 Pro (64bit)
Google Chrome バージョン: 65.0.3325.181（Official Build） （64 ビット）
```

### カウントダウン タイマー オンライン

オンラインで使えるキッチンタイマーを探した。

以下を見つけた。
https://timer.onlinealarmkur.com/ja/

ブラウザのタブにカウントダウンの残り時分秒が表示される点は良い。

タイムアウト時に音が鳴る。サウンドをミュートにするなどして、周囲への配慮は必要。

### notification:終了時の明示

- 1分で終わるデータ処理
    - 他の作業をしない
- 30分未満で終わるデータ処理
    - こういうツールで終了時を可視化する
    - 他の作業をする
- 30分を超えるデータ処理
    - メール通知機能を使う
    - 他の作業をする

適宜使い分けする。


### 裏技
(追記 2018/04/23)

URL指定には`#`付のコメントが残せる。
例として

https://timer.onlinealarmkur.com/ja/#WRF
とすると、「将来参照時」に「WRFの処理だ」というのが分かる。

適宜適切なコメントをURLに含めることで、3つ以上のキッチンタイマーの運用での失敗確率が低減するだろう。
reactのLifeCycleについて超入門&従来のJSライブラリとの違いについて簡単にまとめた

#従来のJSライブラリとの違い
1. サーバーのデータから全HTMLを作成(共通)
2. イベント検出(共通)
3. データ変更やサーバとの通信など必要な処理を行う(共通)
4. 画面上の変更が必要な箇所を **コーディング** によって置き換える(従来) <-> 仮想DOMを利用して**自動的** にDOMを部分更新してくれる(React)

→大規模アプリケーションに強い

#Lifecycle
Lifecycle:Componentの生まれてから死ぬまでの流れを表現したもの。
React.Componentの機能で、Componentを継承したクラス内で使用可能。
→Mount系 / Update系 / Unmount系 / Error Handling系に分かれる。

##Mount系
These methods are called when an instance of a component is being created and inserted into the DOM
→class内最初のrender()がMountと思っていいのでは？
ex.

- `constructor()`
- `componentWillMount()`
- `render()`
- `componentDidMount()`

##Update系
An update can be caused by changes to props or state. These methods are called when a component is being re-rendered 
→2回目以降の`render()`がUpdate
ex.

- `componentWillReceiveProps()`
- `shouldComponentUpdate()`
- `componentWillUpdate()`
- `render()`
- `componentDidUpdate()`


##Unmount系
This method is called when a component is being removed from the DOM
→DOMからの削除がUnmount
`componentWillUnmount()`のみ

##Error Handling
This method is called when there is an error during rendering, in a lifecycle method, or in the constructor of any child component
→Lifecycle　methodや子要素の`constructor()`でエラーが起きた時に呼ばれる
`componentDidCatch()`のみ

##使用例
- `componentDidMount()`でEventを登録→`componentWillUnmount()`で削除
- アプリが重くなってきたら`shouldComponentUpdate()`で軽くする


##簡単な図解のまとめ
<img width="1265" alt="スクリーンショット 2018-04-10 10.51.45.png" src="https://qiita-image-store.s3.amazonaws.com/0/235554/fcd115aa-e08f-4229-886d-2df2855b9b78.png">

##補足
componentWillMount / componentWillReceiveProps / componentWillUpdateなどは廃止予定
→代わりに`static getDerivedStateFromProps()`ができた。
componentのインスタンス化の後、propsの取得後に発火
iPad > PDF > PDF Viewer by PSPDFKit > Dropboxへのアップロード | Bug (ハイライト)

```txt:動作環境
iPad mini4
```

### 関連

- [iPad > GoodReader 3 > ブックマークは移行されない (ソフト、プラットフォーム独自機能)](https://qiita.com/7of9/items/bf00491ee7a873e2ffff)


### PDFViewer 

GoodReader 3からの切替えとして、以下を使用してきた。

```
PDF Viewer by PSPDFKit
```

三か月くらい使用しただろうか。
~~大きな問題は見られない。~~

使っている機能

- ハイライト
- ブックマーク


### Dropboxへのアップロード

1. 上部メニューの上矢印付のボックスをタップ (左から2つ目)
2. Dropboxで読み込む、をタップ
3. Dropboxに保存、にて「別のフォルダを選択してください...」をタップ
4. フォルダを選択する
5. 選択する、をタップ
6. 保存、をタップ
7. 「xxx」に置き換えますか? というダイアログで「置き換える」をタップ

保存先フォルダの位置を覚えておかないといけない。


### Bug (ハイライト)

iPad上で黄色のハイライトをつけた。
Dropboxで同期後、WindowsのPDFソフトで開くと、それらハイライトは灰色になっている。

青色のハイライトも灰色になる。
色情報は消失するのだろうか。
さくらのレンサバで独自ドメイン（https）にEC-CUBEを設置する流れ

さくらのレンタルサーバー（スタンダード）に、EC-サイトを設置したかったのですが、なかなか手こずったりしたので、大まかな流れになりますが、記述しておきます。

メモ書き程度なので、個々の作業は、公式のやり方をググるなりして、参照するようにしてください。

<h2>環境：さくらのレンタルサーバー（スタンダード）、さくらで取得した独自ドメイン</h2>


<h2>前提条件</h2>
さくらのコントロールパネルにログイン状態で作業します

<h2>作業１</h2>
さくらレンサバで独自ドメイン登録（これは公式をググろう）

<h2>作業２</h2>
コンパネメニューの独自ドメイン/SSL設定からhttps化。

※letsEncryptは無料のSSLで更新も自動でやってくれるのでグッドです。

<h2>作業２ー５</h2>
データベースを作っておく。
専用のデーターベースを作っておきましょう！他のWP等と一緒のデータベースにするといろいろまずいです。


<h2>作業３</h2>
クイックインストールから、EC-CUBEを、独自ドメインにクイックインストール

<h2>作業４</h2>
引き続きそのまま

>> アプリケーションの設定へ進む <<

で設定する

（ページを離れた場合はクイックインストールのインストール済み欄に行き）EC-CUBEのインストール設定をする。

詳細設定の際、httpsのみ使うという設定が最初にあったと思うので、わすれずにチェック。

<h2>作業５</h2>
作業というか注意。

作業４の設定がややこしいので、公式をググりながらやりましょう！ホスト名（＝サーバー名）だったり、適当に入れると、やり直しに鳴ると思いますので、しっかりやりましょう。

設定方法が公式であったと思います。

<h2>おまけ：作業６</h2>
インストールが無事終わったら、/html/install.phpを削除しましょうとあるので、FTPソフトなどで削除しておきましょう。

<h2>課題</h2>
ec-cubeのページが
https://独自ドメイン/設定したディレクトリ/html/

になっていますが、

https://独自ドメインだけにしたい

です。

この記事はのちに更新します。
Slackで3週に一回のリマインドを入れる

## やり方

/remind "3週に一回思い出したいこと" at every 3 weeks monday 10:00

とやれば

"3週に一回思い出したいこと" at 10:00 every 3 weeks (next occurrence is Monday, {次のリマインドする日})

という感じで登録されます

## 用途

私は定期的に有給の予定を立てるのに使ってます。
あとは、アジャイル開発のスプリントが3週で1スプリントの場合とか。
MacOS X 10.12の Xcode に古い MacOSのSDKをインストールする


10年以上前の Cocoa アプリをコンパイルする必要が出てきたので、それのメモ書き。

一応で Mac OS X 10.9 以上に対応させるのが目的。

XCodeのバージョンは9.2、AppStoreからインストールしたものです。

## 準備

1. https://github.com/devernay/xcodelegacy から XcodeLegacy.sh をダウンロードしておく。
2. https://github.com/phracker/MacOSX-SDKs/releases から対象SDKをダウンロードしておく

## インストール

対象SDK(この場合は `MacOSX10.9.sdk.tar.xz`)のあるディレクトリで、`XcodeLegacy.sh`のコマンドを実行する。

```
~/Downloads/r $ sudo /Users/yasui/bin/XcodeLegacy.sh -osx109 install

*** Info: found Xcode >= 4.3 in /Applications/Xcode.app
*** installed MacOSX10.9.sdk.tar.xz
*** modified MacOSX Info.plist
*** Warning: /Developer/SDKs should be a symlink to /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs
Check that /Developer exists, and fix /Developer/SDKs with:
 $ sudo ln -sf '/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs' /Developer/SDKs

```

## 設定

対象プロジェクトでプロジェクトの `Architecture`→`BaseSDK`で`OS X 10.9` が選択できれば成功です。
ATOM用ターミナルプラグイン PlatformIO IDE Terminal でPATHに困った話

`~/.bash_profile`や`~/.bashrc`にPATHの追加設定を書いて、bashの起動時にPATHを自動設定するということを良くやりますが、ATOMのターミナルプラグインである[PlatformIO IDE Terminal](https://github.com/platformio/platformio-atom-ide-terminal)を使ってATOM内に起動したシェルのPATHが、iTERM2上のシェルでのPATHと異なってしまい、しばらく苦労してました。

## 困っていたこと
私は普段`~/.bash_profile`で、追加したいパスがPATHになかった場合のみ追加するという処理を書いています。

```bash:.bash_profile
gnubin_path=/usr/local/opt/coreutils/libexec/gnubin

echo $PATH | grep -q $gnubin_path > /dev/null 2>&1

if [ $? -ne 0 ]; then
  export PATH=$gnubin_path:$PATH
fi
```

iTERM2でシェルを起動したとき、PATHは以下のようになっていました。

```
$ echo $PATH
/usr/local/opt/coreutils/libexec/gnubin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
```

この状態だと、例えば`ls`コマンドは`/usr/local/opt/coreutils/libexec/gnubin/ls`のバイナリを使用します。

```
$ which ls
/usr/local/opt/coreutils/libexec/gnubin/ls
```

しかし、ATOM内のシェルでは以下のように`/usr/local/opt/coreutils/libexec/gnubin`が後ろに来てしまっています。

```
$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/opt/coreutils/libexec/gnubin
```

この状態だと、`ls`コマンドは`/bin/ls`のバイナリを使用してしまいます。

```
$ which ls
/bin/ls
```

## 原因
bashは親プロセスの環境変数を子プロセスに引き継ぎます。
ATOMプロセスのPATHが`/usr/local/opt/coreutils/libexec/gnubin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin`になっていると、その子プロセスとなるATOM内シェルのPATHには`/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/opt/coreutils/libexec/gnubin`が引き継がれます。
`/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin`はbashの終了時にPATHから削除され、bashの起動時に自動的にPATHの先頭に追加されるようです。

この状態で`.bash_profile`が実行されるので、すでに該当のパスが存在していると判断されて、`export PATH=$gnubin_path:$PATH`が実行されません。

## 解決方法
ATOM内シェルの時のみ、PATHを初期化するという処理を`.bash_profile`に加えてあげれば良いです。
現在のシェルがATOM内シェルかどうかは、親プロセスのコマンドに`platformio-ide-terminal/lib/process.coffee`が含まれているかどうかで判断しています。

```bash:.bash_profile
ps u -p $PPID | grep 'platformio-ide-terminal/lib/process.coffee' > /dev/null 2>&1
if [ $? -eq 0 ]; then
  export PATH=/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
fi

gnubin_path=/usr/local/opt/coreutils/libexec/gnubin

echo $PATH | grep -q $gnubin_path > /dev/null 2>&1

if [ $? -ne 0 ]; then
  export PATH=$gnubin_path:$PATH
fi
```

これでATOM内シェルでも以下のPATHが設定されます。

```
/usr/local/opt/coreutils/libexec/gnubin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
```
Python > try, except > UnicodeError 実装例

```txt:動作環境
ideone (Python 3.5)
```

@ Scipy lecture notes, Edition 2017.1
https://www.scipy-lectures.org/_downloads/ScipyLectures-simple.pdf
p45

UnicodeErrorのエラー補足例がある。

参考にして実装してみた。

https://ideone.com/t3h7di

```py
def filter_name(name):
	try:
		name = name.encode('ascii')
	except UnicodeError as e:
		raise e
	return name
	
res = filter_name('7of9')
print(res)
res = filter_name('7之9')
print(res)
```

```txt:stdout
7of9
```

```txt:stderr  
Traceback (most recent call last):
  File "prog.py", line 10, in <module>
  File "prog.py", line 5, in filter_name
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe5 in position 0: ordinal not in range(128)
```

### link

- https://docs.python.org/ja/3.6/library/exceptions.html?highlight=unicodeerror#UnicodeError
Single Page Application を Serverless Framework と React でやる Tutorial(5)

## まとめ

とういわけで総集編です。以前 redux を使わないで Single Page Application を作る Tutorial で紹介した記事一覧、詳細を取得してお気に入りのフラグを追加するだけのシンプルな React App を Serverless Framework を使って構築します。

http://serverless-fav-articles.s3-website-ap-northeast-1.amazonaws.com

とはいってもすでに Tutorial 1 から 4 で大体の作り方は説明済みなので github にコードを README をおいてあるのでそちらを参照して下さい。

https://github.com/okamuuu/serverless-fav-articles

## あとがき

ちなみに週３程度でリモートワークできる職場を探しているのですが心当たりのある方はお知らせ頂けると助かります。
Python > os パッケージ > os.path.expanduser() > home directory文字列の正式表示

@ Scipy lecture notes, Edition 2017.1
https://www.scipy-lectures.org/_downloads/ScipyLectures-simple.pdf
p41

```py
In [88]: os.path.expanduser('~/local')
Out[88]: '/Users/cburns/local'
```

https://docs.python.jp/3/library/os.path.html#os.path.expanduser

### link

- [Python > library > os > os.walk() > ディレクトリ構造を取得 / 指定ディレクトリ内の各ファイルパスを取得する実装](https://qiita.com/7of9/items/57e33388c4fbdec06a47)

- [Meaning of tilde in Linux bash (not home directory)](https://stackoverflow.com/questions/998626/meaning-of-tilde-in-linux-bash-not-home-directory?utm_medium=organic&utm_source=google_rich_qa&utm_campaign=google_rich_qa)
AWS 上で Oracle Database 製品を無償で試行できるか問合せてみました

回答結果
-------

**2018/04/10 時点で、AWS 上で Oracle Database 製品を OTN開発者ライセンス契約 の範囲内で無償で使用可能**[^1] ということでした。

以下、回答いただいた内容を抜粋しました。

>【AWS環境でのOTNライセンスのご利用について】

>Oracle Technology Network（OTN）に掲載されている
Oracle Database製品は、下記OTNライセンス契約の範囲内で
無償で使用することが可能です。
また同契約書には、Amazon Web Services（AWS）環境上での
利用に関する記述はないため、OTNライセンスの製品をAWS環境上で
使用できないといった制限もございません。

>ただし、OTNライセンスでの製品のご利用にあたっては、
OTNライセンス契約書をお読みいただき、契約書の規定される
内容すべてに同意いただく上で利用する必要がございます。
（完全合意の原則）

>OTNライセンス契約につきましては、以下リンク先をご確認ください。

>＜Oracle Technology Network License Agreement（OTNライセンス契約）＞
http://www.oracle.com/technetwork/jp/licenses/standard-license-192230-ja.html

>なお、OTNライセンス契約には、次の条件／目的における利用が
不可である旨、規定されていますので、ご留意願います。
・本番利用、データ処理、業務処理、商用利用
・一度でも本番利用されたソフト、アプリケーションでの利用
・教育 ・配布、頒布 ・譲渡

>OTN開発者ライセンスの範囲を超えて使用する場合は、
正規ライセンスの購入が必要でございます。

[^1]: 現時点での [OTN開発者ライセンス](http://www.oracle.com/technetwork/jp/licenses/standard-license-192230-ja.html) の 最終更新日は**2014年9月9日** です。更新日が変更になった場合は、再度、「[日本オラクル お問い合あせ](https://www.oracle.com/jp/corporate/contact/index.html)」 に 問合せてください。
Androidで3DR Solo Appがインストールできない

# 問題
Android Play Storeで3DR Soloアプリをインストールしようとしたら以下のようなエラーが
`このアプリはお使いの端末に対応していません。`

そこでインストール要件をGoogle Play Storeで見てみると
```
Android 要件
4.3 以上
```
と書いてある．自分のは4.4なのに・・・・

# 原因
今自分が使っている端末での動作テストがされていないだけだそう．
つまり，Androidのバージョンが4.3以上であれば動くということ

# 解決方法
そこで，アプリをusb経由で入れてみます．

## スマホ側準備
1. 身元不明？のアプリを許可する（設定⇒開発者用？⇒許可）
2. File Managerというアプリをインストール

## PC側
1. http://www.onyxbits.de/raccoon からRacoonというアプリインストール
2. Racoonで自分のGoogle Account登録（情報漏えい防ぐために新しいアカウント使用）
3. Racoonでアプリ検索しインストール
4. インストールしたフォルダに移動


## インストール
1. スマホをUSBで接続
2. さきほどインストールしたファイルをスマホにコピペ
3. スマホからFile Manager使ってそのファイルを開きインストール

# 注意点
今回手動でインストールしたアプリは自動アップデートはできないらしい．


# 参考文献
https://www.youtube.com/watch?v=CrG_UaQ6OWQ&t=173s
Bootstrapが4.1になってたメモ

なんかBootstrapの4.1が出てたのでなんとなく増えたのをメモっておく
http://blog.getbootstrap.com/2018/04/09/bootstrap-4-1/
#変更点
formにrange inputが増えた→カスタム版もある
https://getbootstrap.com/docs/4.1/components/forms/#range-inputs
https://getbootstrap.com/docs/4.1/components/forms/#range

カルーセルにフェードが追加
https://getbootstrap.com/docs/4.1/components/carousel/#crossfade

ドロップダウンに.dropdown-item-textオプションができた（dropdown中で反応しないテキスト）
https://getbootstrap.com/docs/4.1/components/dropdowns/#dropdown-options

flex-fillやshrinkができた→smとかmdとかlgとかxlが使えて便利そう
https://getbootstrap.com/docs/4.1/utilities/flex/#fill

flex-glow-0と1とかできてた
https://getbootstrap.com/docs/4.1/utilities/flex/#grow-and-shrink
まあびよんと伸びてくれたりシュッと縮んでくれるんだろうな

table-borderlessができた
https://getbootstrap.com/docs/4.1/content/tables/#borderless-table

monospaceとかtext-bodyとかtext-white-50とかtext-black-50はつかわなそうだしいいや

box shadowが　.shadow-none,shadow-sm,shadow,shadow-lgでかんたんにつけられる
https://getbootstrap.com/docs/4.1/utilities/shadows/

入力グループ、フォームフィールドバグが4.1.1で修正されそうなのでそこまでまつかなあ

そしておせわになってるbootstrap4移行ガイド
http://cccabinet.jpn.org/bootstrap4/
iOS11 から正規表現で名前付きキャプチャが使える


いまさらですが、 `NSTextCheckingResult` に `range(withName:)` なる定義が追加されていたので試してみました。

https://developer.apple.com/documentation/foundation/nstextcheckingresult/2915200-range


```swift
func yearMonthDay(from target: String) -> (year: Int, month: Int, day: Int)? {
    let pattern = "(?<year>\\d+)-(?<month>\\d+)-(?<day>\\d+)"
    let regex = try! NSRegularExpression(pattern: pattern, options: [])
    
    let nsTarget = target as NSString
    let nsRange = NSRange(location: 0, length: nsTarget.length)
    guard let result = regex.firstMatch(in: target, options: [], range: nsRange) else {
        return nil
    }
    return (
        Int(nsTarget.substring(with: result.range(withName: "year")))!,
        Int(nsTarget.substring(with: result.range(withName: "month")))!,
        Int(nsTarget.substring(with: result.range(withName: "day")))!
    )
}

print(yearMonthDay(from: "2018-4-10"))
// Optional((year: 2018, month: 4, day: 10))
```
DockerでScala/sbt環境をお手軽に使う


[@hseeberger](https://twitter.com/hseeberger) 氏の公開Dockerイメージを使って
`Scala/sbt` 環境をお手軽に利用することができます。
Dockerfileを見るとまめにバージョン等を更新してくださっているようです。


**(追記) コメントにてご指摘頂いたのですが[こちらの](https://github.com/hseeberger/scala-sbt/pull/72)のプルリクエストでDockerHub上のDockerfileが使えなくなってました。** [DockerHub上](https://hub.docker.com/r/hseeberger/scala-sbt)の `Alternatively, you can build an image from Dockerfile ...`にbuild方法が追記されているようです。

-- 以下、旧情報 --

適当にディレクトリを作成して、そこで以下を実行

```bash
$ cd /path/to/local_work_dir
$ docker run -it --rm -v `pwd`:/root hseeberger/scala-sbt
・・・省略・・・
root@2ea77ee39bc0:~# pwd
/root
```
* `-it` : コンテナに入れる
* `--rm` : コンテナ終了時に自動削除してくれる
* ```-v `pwd`:/root``` : ローカルの今いるディレクトリをコンテナの`/root`にマウントする(ファイルを共有出来る)



dockerコマンドを実行したディレクトリ(ローカル)でそれっぽいファイルを作る

```bash
$ pwd
/path/to/local_work_dir
$ echo 'object Main { def main(args: Array[String]): Unit = println("hello") }' > hello.scala
```
コンテナ上で

```bash

root@2ea77ee39bc0:~# pwd
/root

root@2ea77ee39bc0:~# ls
hello.scala  // ちゃんといる

root@2ea77ee39bc0:~# sbt run
hello
```

:raised_hands_tone2: :raised_hands_tone4: :raised_hands_tone3:
コードでAutoLayout-余白を均等に配置する

つい先日`NSLayoutAnchor`と`UILayoutGuide`というものの存在を知りました、すいません
もしかして`NSLayoutAnchor`があれば、いまどき外部ライブラリなんか使わないよってなノリなんですかね？
でもまだ慣れないので[TinyConstraints](https://github.com/roberthein/TinyConstraints)を使い続けてます

#やりたいこと
画面サイズに関わらず余白を均等にして固定サイズのviewを複数貼り付けたい
これもstackviewってやつ使えばいいらしいがまだよく分かってないので愚直にspaceを配置していく方法


#表示
<img src="https://i.gyazo.com/fb2f442b96edc9a2184773890110f5e1.png" width=25%>

#ソース
```swift
import UIKit
import TinyConstraints

class ViewController:UIViewController{
  
  override func viewDidLoad() {
    super.viewDidLoad()
    self.setup()
  }
  
  private func setup(){

    //add
    let space1 = UILayoutGuide()
    self.view.addLayoutGuide(space1)

    let v1 = UIView()
    self.view.addSubview(v1)
    v1.backgroundColor = .red
    
    let space2 = UILayoutGuide()
    self.view.addLayoutGuide(space2)
    
    let v2 = UIView()
    self.view.addSubview(v2)
    v2.backgroundColor = .blue

    let space3 = UILayoutGuide()
    self.view.addLayoutGuide(space3)

    
    //layout
    space1.centerY(to: self.view)
    space1.height(to: v1)
    space1.left(to: self.view)

    v1.centerY(to: space1)
    v1.width(50)
    v1.height(to: v1, v1.widthAnchor)
    v1.leftToRight(of: space1)
    v1.rightToLeft(of: space2)
    
    space2.centerY(to: space1)
    space2.size(to: space1)

    v2.centerY(to: space1)
    v2.size(to: v1)
    v2.leftToRight(of: space2)
    v2.rightToLeft(of: space3)

    space3.centerY(to: space1)
    space3.size(to: space1)
    space3.right(to: self.view)
  }
}
```
PHPで大文字・小文字の変換をしたい

##PHPで大文字

```php
echo strtoupper("Horikwa\n");
echo strtoupper("hiyoko\n");
echo strtoupper("TOKIYA\n");
echo strtoupper("PHPer\n");
```
結果

```
HORIKAWA
HIYOKO
TOKIYA
PHPER
``` 

##PHPで小文字

```php
echo strtolower("Horikwa\n");
echo strtolower("hiyoko\n");
echo strtolower("TOKIYA\n");
echo strtolower("PHPer\n");
```
結果

```
horikawa
hiyoko
tokiya
phper
``` 

##PHPで頭文字だけ大文字

```php
echo ucwords(strtolower("HORIKAWA Tokiya"));
```
結果

```
Horikawa Tokiya
``` 
上記は`strtolower`で全て小文字に変換された後に`ucwords`で頭文字だけ大文字に変換しています。

ググったら一瞬で出る記事ですがアウトプットの習慣付けのために書きました。
MySQLでUNIXタイムスタンプと日付を相互変換するメモ

## 日付からUNIXタイムスタンプに変更

```sql
SELECT UNIX_TIMESTAMP('2018-04-10 12:00:00')
```

## UNIXタイムスタンプから日付に変更

```sql
SELECT FROM_UNIXTIME(1523329200)
```
[自分用]効率化的なものまとめ

## nohup
```bash
$ nohup python main.py &
```
https://qiita.com/alancodvo/items/15dc36d243e842448d33

## Portforwarding
https://qiita.com/mechamogera/items/b1bb9130273deb9426f5

## Convert fucking ^M to CRLF
> [this legend saved my life!!](https://stackoverflow.com/users/802397/netpoetica)
A file I had created with BBEdit seen in MacVim was displaying a bunch of ^M line returns instead of regular ones. The following string replace solved the issue - hope this helps:
:%s/\r/\r/g
It's interesting because I'm replacing line breaks with the same character, but I suppose Vim just needs to get a fresh \r to display correctly. I'd be interested to know the underlying mechanics of why this works.

```bash
$ vim filename
try this command! :%s/\r/\r/g
```

## Vim command
https://qiita.com/iwaseasahi/items/f536bb3772d2fad5e03c

## JMeter for Stress Text with dynamic parameters

```bash
# how to run the jmeter
$ java -jar /Applications/apache-jmeter-4.0/bin/ApacheJMeter.jar
```
basic intro: https://marunouchi-tech.i-studio.co.jp/4529/
Setting dynamic parameters: http://tenforward.hatenablog.com/entry/20080909/1220943546

## Installation of MeCab on Ubuntu 16.4 
https://qiita.com/ForexRobotics/items/3fc859b29c9d013867be

## flask with multi-thread
https://stackoverflow.com/questions/14814201/can-i-serve-multiple-clients-using-just-flask-app-run-as-standalone

## file transfer between Azure instance and local
https://docs.microsoft.com/ja-jp/azure/virtual-machines/linux/copy-files-to-linux-vm-using-scp
https://stackoverflow.com/questions/43630112/cant-scp-to-azures-vm