OmniAICreator/Qiita-1.07M huggingface dataset:
[もう大丈夫]git コミットを消したあなたへ

`git reset  --hard ハッシュ値`　で特定のコミットまで戻る。

`git reflog`

```bash:
shimizu@MyComputer1:/mnt/c/Users/81905/Desktop/chatplus$ git reflog
1857c8dfb (HEAD -> netseeds3_lang_change) HEAD@{0}: reset: moving to 1857c8dfb60fbacd25e1b34658775d1af7f4f063
2d7f571e6 HEAD@{1}: checkout: moving from netseeds3_text_change to netseeds3_lang_change
c85462328 HEAD@{2}: checkout: moving from netseeds3_lang_change to netseeds3_text_change
2d7f571e6 HEAD@{3}: checkout: moving from netseeds3_text_change to netseeds3_lang_change
c85462328 HEAD@{4}: checkout: moving from netseeds3_lang_change to netseeds3_text_change
2d7f571e6 HEAD@{5}: checkout: moving from netseeds3_text_change to netseeds3_lang_change
c85462328 HEAD@{6}: checkout: moving from netseeds3_lang_change to netseeds3_text_change
```


`HEAD@{xx}`というのは、過去何番目のHEADの状態を表す。
元に戻りたいポイントが分かれば、あとは、`git reset --hard`で強制的に巻き戻します。

```bash:
git reset --hard HEAD{1}
```
Laravelのプロジェクトをgit pullしたときに実行するキャッシュクリア系のコマンドをワンライナーでするやつ

Laravelのプロジェクトを`git pull`したときに実行するキャッシュクリア系のコマンド(`Artisan`)をワンライナーでするやつです。
[【Laravel】わりとよく使うArtisanコマンド集 - Qiita](https://qiita.com/sola-msr/items/a09b857c5e7f7c88d01d#%E3%82%AD%E3%83%A3%E3%83%83%E3%82%B7%E3%83%A5%E3%82%AF%E3%83%AA%E3%82%A2%E7%B3%BB) のコマンドを順に実行します。

# コマンド

```
composer dump-autoload && php artisan cache:clear && php artisan config:clear && php artisan view:clear && php artisan route:clear
```

# 参考URL

- [(Linux)コマンドを連結して行う｢;｣｢&｣｢&&｣｢||｣の違い : old_3流プログラマのメモ書き](https://jehupc.exblog.jp/15729095/)
ログインユーザー以外のユーザーを抜き出したい（Laravel）

# Laravel

Controllerに下記を記述。
`paginate`をする際に、ログインユーザを除くユーザを表示できます。

```
public function showUsers() {
        $users = User::where("id" , "!=" , Auth::user()->id)->paginate(10);

        return view('users.index', compact('users'));
    }
```
MSCOCO2014 のannotationsに category_id を追加する

MSCOCO2014 のcreate_coco_tf_record.pyでpbtxtを書き出そうとしていますが、groundtruth_dataのkeyに、categoriesもcategory_idも無いのですね。各imagesに、手でidを付けていくしかないのでしょうか。
経験者のアドバイスをお願いします。
ZohoCRMで選択リストの変更履歴をAPIで取得する

ZohoCRMで選択リストの変更履歴をAPIで取得したくなったのでやってみました。

## 手順
1. ZohoCRMの設定ページにて、履歴取得対象項目のプロパティから、`選択リストの値の履歴を有効にする`を選択
2. `https://www.zohoapis.com/crm/v2/settings/related_lists?module={module-api-name}`<br>から関連リストの一覧を取得し、変更履歴のapi_nameを特定
    - module_api_name: 履歴取得対象の項目を持っているタブのAPI名
  
3. `https://www.zohoapis.com/crm/v2/{module_api_name}/{record_id}/{related_list_api_name}`
から履歴を確認したいレコードの変更履歴を取得
    - module_api_name: 履歴取得対象の項目を持っているタブのAPI名
    - record_id: 履歴を確認したいレコードのID
    - related_list_api_name: 2で特定した変更履歴のAPI名

4. 対象レコードの選択リスト変更履歴が取得できましたー


## ちなみに
変更履歴を格納するタブは、LinkingModuleN（N=連番）というAPI名で生成されます。

`https://www.zohoapis.com/crm/v2/LinkingModuleN`でレコード一覧を取得しても、<br>どのレコードの変更履歴なのか特定する項目が見当たりませんでした。
Laravel で PHPUnit 実行時に .env.testing を見てくれない？

# 環境

- PHP 7.1
- Laravel 5.7
- PHPUnit 7.5.15

# 起きた事

- `.env` に `APP_ENV=local` 、 `.env.testing` に `APP_ENV=testing` を記述してある状態。
- `phpunit.xml` では特に `APP_ENV` の指定なし。
- PHPUnit の処理中で `config('app.env')` を実行したら `local` が返ってしまった。

# 原因と対処

`.env` の値がキャッシュされてました。

せっかくなので、 `TestCase.php` の `setUp()` で全てのキャッシュを消すようにしました。

```php:~/tests/TestCase.php
    public function setUp()
    {
      parent::setUp();

      Artisan::call('cache:clear');
      Artisan::call('config:clear');
      Artisan::call('optimize:clear');
      Artisan::call('route:clear');

      // ...
    }

```
vue.js テキストエリア伸ばす

テキストエリアを文字数に応じて自動で伸ばす。
ちゃんとコンポーネントも読み出す。

今回は element ui を使う。
一般的なテキストエリアとは違うので注意。

```top.vue

<el-form-item label="無料占いの内容" prop="message">
    <TextareaResizeComponent
            v-model="form.message"
            placeholder="ここにサンプル"
            name="message"
    ></TextareaResizeComponent>
    <!--<el-input type="textarea" v-model="form.message" :rows=5></el-input>-->
</el-form-item>


・・・略
<script>
    import TextareaResizeComponent from "./TextareaResizeComponent";

    export default {
        components: {TextareaResizeComponent},
        data() {
                form: {
                    message:''
                },
</script>

```


テキストエリアリサイズコンポーネント

```TextareaResizeComponent.vue

<template>

<el-input
        :name="name"
        :value="value"
        :placeholder="placeholder"
        :rows="rows"
        type="textarea"
        @input="updateValue"
></el-input>


</template>

<script>
    export default {
        name: "TextareaResizeComponent",
        props: {
            value: { type: String, require: true },
            name: { type: String, require: true },
            placeholder: { type: String, require: false },
            cols: { type: Number, require: false }
        },
        computed: {
            rows() {
                var num = this.value.split('\n').length;
                return (num > 10) ? num : 10;
            }
        },
        methods: {
            updateValue(e) {
                //普通のテキストエリアと違うので注意
                this.$emit("input", e);
            }
        }
    };
</script>

```
MSI製ノートPCでHoudiniがクラッシュしまくる

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/29342/a84e6993-8261-5c77-0d1a-9098104b4ec3.png)

## TL;DR
NahimicドライバーをアンインストールしてNahimicServiceを停止したら治る

## 問題詳細

最近MSI GS65を修理に出してWindowsをクリーンインストールし直した所、Houdiniが死にまくるようになった。
起動時のスプラッシュをCloseしたら死ぬ、Tabを押したら死ぬ、ウインドウを移動したら死ぬ……。

## ググった
"Houdini 17 crashing constantly" というスレッドを発見。
https://forums.odforce.net/topic/40383-houdini-17-crashing-constantly/

同じMSI製ノートのユーザーが「Nahimicを無効にすると治るで」と言っている。
Nahimicは音声出力に空間系の処理をかけてくれるらしいけど、GPUを使って処理をしていて、Houdiniと相性が悪いらしい。

## Nahimicを無効にする

### 1. 「プログラムの追加と削除」からNahimicをアンインストール

スクショ撮るの忘れた……
「Nahimic」って奴があるので普通にアンインストールします。

### 2. タスクマネージャーからNahimicServiceを停止

NahimicをアンインストールしてもNahimicServiceは消えてくれない……ので手動で停止します。
タスクマネージャー > サービスからNahimicを探します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/29342/823c91bf-98ee-e99a-1144-6b3785e6c2a5.png)

右クリック > `停止` をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/29342/06ef2963-6658-8be5-2fae-2f2af0bb606c.png)

これでHoudiniは動くようになるけど、PCを再起動したらまたNahimicServiceが起動してしまうので、サービスを無効にしておきます。
右クリック > `サービス管理ツールを開く` からサービス管理ツールを開き、NahimicServiceを右クリックして `プロパティ`を選択。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/29342/fed66ea6-b515-552e-da61-75b0cd7af7c4.png)

`スタートアップの種類`が`自動`になっているので`無効`に変更して、`適用`をクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/29342/65467974-836a-4939-9e4c-1885c0ab0389.png)

これでNahimicを完全に停止できました。
Houdiniを起動してみると問題なく動くはず！
Reactのコンポーネントに関する覚書

JSX記法はReact.createElementの糖衣構文という文脈で色々と実験してみた結果

# JSXのタグ名は変数名でも可
ユーザー定義のタグ(大文字から始まるもの)は参照できる範囲の識別子なら可能なので、適当な変数に代入してその変数名を使っても良い。
(React.createElementの第一引数に過ぎないので)
ただ、先頭を大文字にしないと独自コンポーネントと認識してくれないのでそこだけは守る必要あり

表示するコンポーネントの動的切替なんかもタグと{}の中から追い出すことも出来る

``` javascript
const Hoge = FugaComponent;

//render内
<Hoge/> //FugaComponentが出力される

const Hoge = someCondition ? FugaComponent : PiyoComponent;

<Hoge/> //someConditionに応じてどちらが表示されるか決まる

``` 

# JSX記法とReact.createElementは混ぜても使える

以下のような感じ

``` jsx
render () {
 <React.Fragment>
   {React.createElement('div',{},'hoge')}
 </React.Fragment>
}
//<div>hoge</div>になる

```

JSXのタグで挟まれた要素は、React.createElementの第3引数(children)に渡される
JSX要素とReact.createElementの戻り値は内部的に同じになるなのでこれでもOK。

実務での使いどころはあるのかというと多分ないけれど。

ただ、JSXのタグの子要素はあくまで第3引数渡される値ということを認識しておくと、
軽く条件分岐する時にifではなく三項演算子を使う理由や、
ループを回す際にmapを使う理由辺りにも納得がいきやすい。
無名関数の実行とreturnし忘れ等も減るのではないかと。

# まとめ
* タグ名はあくまで第一引数
* タグの子要素は第三引数に渡す値　=> よって{}内は式でないといけない
* 内部的にJSXタグとReact.createElementは等価なので混ぜても使える
Emacs の rgrep で無視ファイルと無視ディレクトリを追加する



init.el に下記の行を追加すれば rgrep で余計なファイル/ディレクトリを見なくなる。
my-ignore-directories と my-ignore-files は適当に変更してもOK。

```.el
  (setq my-ignore-directories '("node_modules" ".bundle" "yardoc" "coverage" "log" "tmp"))
  (setq my-ignore-files '("*.min.js" "*.log"))
  (setq grep-find-ignored-directories (append grep-find-ignored-directories my-ignore-directories))
  (setq grep-find-ignored-files (append grep-find-ignored-files my-ignore-files))
```
今日のpython2 warning: DEPRECATION: Python 2.7 will reach the end of its life on January 1st, 2020.

「「FORTRAN77数値計算プログラミング」のプログラムをCとPython」をdockerで
https://qiita.com/kaizen_nagoya/items/2a961ec2de818ede717b


の作業でのエラー、と警告。

基本となるdocker imageに、numpyがはいっていなかった。

```
# python2 maceps.py
Traceback (most recent call last):
  File "maceps.py", line 2, in <module>
    import numpy as np
ImportError: No module named numpy

# pip2 install numpy
bash: pip2: command not found

# curl https://bootstrap.pypa.io/get-pip.py | python2    
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 1733k  100 1733k    0     0  7105k      0 --:--:-- --:--:-- --:--:-- 7105k
DEPRECATION: Python 2.7 will reach the end of its life on January 1st, 2020. Please upgrade your Python as Python 2.7 won't be maintained after that date. A future version of pip will drop support for Python 2.7. More details about Python 2 support in pip, can be found at https://pip.pypa.io/en/latest/development/release-process/#python-2-support
Collecting pip
  Using cached https://files.pythonhosted.org/packages/30/db/9e38760b32e3e7f40cce46dd5fb107b8c73840df38f0046d8e6514e675a1/pip-19.2.3-py2.py3-none-any.whl
Collecting setuptools
  Using cached https://files.pythonhosted.org/packages/b2/86/095d2f7829badc207c893dd4ac767e871f6cd547145df797ea26baea4e2e/setuptools-41.2.0-py2.py3-none-any.whl
Collecting wheel
  Using cached https://files.pythonhosted.org/packages/00/83/b4a77d044e78ad1a45610eb88f745be2fd2c6d658f9798a15e384b7d57c9/wheel-0.33.6-py2.py3-none-any.whl
Installing collected packages: pip, setuptools, wheel
Successfully installed pip-19.2.3 setuptools-41.2.0 wheel-0.33.6

# pip2 install numpy
DEPRECATION: Python 2.7 will reach the end of its life on January 1st, 2020. Please upgrade your Python as Python 2.7 won't be maintained after that date. A future version of pip will drop support for Python 2.7. More details about Python 2 support in pip, can be found at https://pip.pypa.io/en/latest/development/release-process/#python-2-support
Collecting numpy
  Downloading https://files.pythonhosted.org/packages/1f/c7/198496417c9c2f6226616cff7dedf2115a4f4d0276613bab842ec8ac1e23/numpy-1.16.4-cp27-cp27mu-manylinux1_x86_64.whl (17.0MB)
     |################################| 17.0MB 18.4MB/s 
Installing collected packages: numpy
Successfully installed numpy-1.16.4
```

# 文書履歴(document history)
ver. 0.01 初稿 20190827
ver. 0.04 URL追記　20230228

### 最後までおよみいただきありがとうございました。

いいね　💚、フォローをお願いします。

####  Thank you very much for reading to the last sentence.

Please press the like icon 💚　and follow me for your happy life.
升級 CircleCI 的 Xcode 到 10.3.0 後發生的 Ruby 找不到版本的問題

最近終於有空來升一下手上專案的 Swift 的版本了
今天在換 CircleCI Xcode 映像檔到 `10.3.0` 之後，
在執行 Ruby 相關指令的時候發生這個問題 (節錄自 CircleCI 的 console output)

``` bash
ruby: unknown Ruby: 2.4
```

設定檔節錄：

``` ruby
command:  echo "ruby-2.4" > .ruby-version
```

覺得都沒有動怪怪的，就去看了一下文件，就發現原來換了 Xcode 之後支援的 Ruby 版本也不同了！看起來 2.4 在 Xcode `10.3.0` 已經不被支援了，所以就只能換一下了

### Xcode 10.2.1

- [Xcode 10.2 image released | CircleCI](https://discuss.circleci.com/t/xcode-10-2-image-released/29761)
- [manifest](https://circle-macos-docs.s3.amazonaws.com/image-manifest/build-534/index.html)

> The system Ruby is unchanged at 2.3.7p456. We also have Ruby 2.4.6 and 2.5.5 available to use via chruby.

### Xcode 10.3.0

- [Xcode 10.3 image released | CircleCI](https://discuss.circleci.com/t/xcode-10-3-image-released/31561)
- [manifest](https://circle-macos-docs.s3.amazonaws.com/image-manifest/build-903/index.html)

> The system ruby is 2.3.7; Ruby 2.5.5 and 2.6.3 are available to chruby.

## 更換

換成映像檔可以支援的 Ruby 版本就順利建置成功了！

``` ruby
command:  echo "ruby-2.6.3" > .ruby-version
```
立ちあがっているビットを数え上げるアルゴリズム

## この記事は何か?

立ちあがっているビットを数え上げるアルゴリズムについて取り上げる。

たとえば十進数で `7` という数は `Python` では `0b111` と表現できる。 `0b` は単に数が二進数であることを表現しているだけなので、数値表現部分は `111` である。つまり、立ちあがっているビットは `3` つである。このように、数を十進数で与えられたときに、それを二進数で表現した場合に立ちあがっているビット数を返す方法を探求したい。

## 最下位ビットからナイーブに数え上げる方法

次のような方法がもっともナイーブだろう。

```python
def count_bits(n):
    count = 0
    while n:
        if n & 1 == 1:
            count += 1
        n >>= 1

    return count
```

なんのことはない。数を 1 ビットずつ右にシフトしながら、最下位ビットと `1` の AND が `1` になるものを数えているだけである。

## 立ち上がっているビットを右から落としていく方法

`x = x & (x - 1)` で x の最下位ビットを落とせる。したがって `x` が `0` になるまで `x = x & (x - 1)` を繰り返すことで、立ち上がっているビットを数えられる。

具体的には次のように書ける。

```python
def count_bits(n):
    count = 0
    while n:
        count += 1
        n = n & (n - 1)

    return count
```

## 数と立ち上がっているビット数のマップをあらかじめ作っておく方法

あらかじめ `Python` のリストに「立ち上がっているビット数」を計算してつめておく方法も考えられる。 `CPython` のリストは `C 言語` での配列で実装されているため、この方法であれば与えられた数を二進数表現した際に立ち上がっているビットの数を `O(1)` で返せる。

仮に 64 ビットの整数が入力される場合、この方法を単純に適用するとリストが大きくなりすぎるため現実的ではない。そういうときは全体のビット列を n 分割するとよい。入力が 64 ビットの整数である場合、16 ビットごとに分割して考えると、2^16 (すなわち 65536) 個の要素を持つリストさえあればよい。

具体的には、まず次のように 16 ビットの整数に対応するリストを作成する。

```python
def _count_bits(n):
    count = 0
    while n:
        count += 1
        n = n & (n - 1)

    return count


PRE_CALCULATED_COUNT = []
for i in range(65536):  # 65536 = 2^16
    PRE_CALCULATED_COUNT.append(_count_bits(i))
```

ここで計算した `PRE_CALCULATED_COUNT` を使い、ビットマスクを使いながら 16 ビットずつ立ち上がりビット数を調べて足し合わせればよい。

```python
def count_bits(n):
    bitmask = 0xffff
    return (PRE_CALCULATED_COUNT[(n & bitmask)] +
            PRE_CALCULATED_COUNT[(n >> 16 & bitmask)] +
            PRE_CALCULATED_COUNT[(n >> (16 * 2) & bitmask)] +
            PRE_CALCULATED_COUNT[(n >> (16 * 3) & bitmask)])
```
MuJoCo Unity Pluginのインストール方法

# MuJoCo Unity Pluginを使用する動機
[![ビデオが開けなかった](http://img.youtube.com/vi/8oRi6ypqk4o/0.jpg)](http://www.youtube.com/watch?v=8oRi6ypqk4o)
Unityのレンダリングエンジンを利用して、MuJoCoシミュレータの見た目をよりリアルにできる。
Unityエディタを使い慣れている人にとっては、MuJoCoシミュレータがより扱いやすくなると思われる。

# インストールのフロー
1. Unityをインストール
2. MuJoCoをインストール
3. MuJoCo Unity Pluginをインストール

# Unityをインストール
[こちらのサイト](https://unity3d.com/jp/get-unity/download)からダウンロードとインストール。
詳しい方法は省略（[Unityのダウンロード〜インストールまで徹底解説](https://www.sejuku.net/blog/47646)などの記事を参照）。

# MuJoCoをインストール
[Lisenceページ](https://www.roboti.us/license.html)からライセンスを取得し、[Productsページ](https://www.roboti.us/index.html)からMuJoCo Proをダウンロードとインストール。
ライセンス取得に関しては[物理エンジンmujoco登録の仕方](https://qiita.com/syo_s/items/88ffa540c2822b2a923c)などを参照。
登録に成功するとメールが届くので、添付してある`mjkey.txt`をダウンロードする。
現時点(19/8/27)でプラグインに対応しているのがv1.5なので`mjpro150`をダウンロード・解凍。
[こちら](https://github.com/openai/mujoco-py#install-mujoco)を参考に以下のようにする。
1. ホームディレクトリの下に`./mujoco`ディレクトリを作成。
2. `./mujoco`の下にダウンロードして解凍した`mjpro150`ディレクトリを移動。
3. `./mujoco`の下に`mjkey.txt`を置く。

# MuJoCo Unity Pluginをインストール
[Productsページ](https://www.roboti.us/index.html)からMuJoCo Plugin and Unity Integrationをダウンロード。
現在(19/8/27)の最新版は`mjuni155`なのでこれをダウンロード・解凍。
[公式ドキュメント](http://www.mujoco.org/book/unity.html)のWorkflowを参考に以下のようにする。
1. Unityのプロジェクトを開く。
2. 解凍した`mjuni155_macos/Tools`ディレクトリ(※macOSの場合)の下にある`Plugins`, `Scripts`ディレクトリをUnityプロジェクトの`Assets`ディレクトリの下に置く。正しくコンパイルされると、Unityエディタのメニューバーから`Window -> MuJoCo Import`が選択できるようになる。
3. `Window -> MuJoCo Import`をクリックして、`MuJoCo Import`ウィンドウの`Browse...`ボタンをクリックしてモデルを指定する。例えば、`mjuni155_macos/Tools/Models/mjcf/pr2.xml`を指定し、`Import Model`をクリックすると下のようにSceneにpr2が現れる。
<img width="801" alt="スクリーンショット 2019-08-27 11.12.09.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/474579/8c14065d-afe5-ffb7-6416-6670c92af638.png">
かっこ+漢字+かっこ を正規表現で除外

```php
$output = preg_replace("/[(][\p{Han}]*[)]/u", "", $input);
```

[] : この中にある文字にマッチする
[\p{Han}]：漢字にマッチ
* : 前の文字が1文字以上続く（続かなくてもOK）
[\p{Han}]* : かっこの間に漢字が1文字以上入るという意味
iPhoneの電源が急に入らなくなったりフリーズした場合にとりあえずやってみること

私のiPhoneXが動画を見ている時に急にアプリが落ちて電源も急に落ちました。そして電源を押しても起動しなくなりました。
（落下もさせていませんし、バッテリーも十分あり、水没もさせておりません）

iPhoneの画面がフリーズしたり、電源が入らなくなった場合にやってみることをメモします。

## 強制再起動する

iPhone 8 以降：
1. 音量を上げるボタンを押してすぐに放す
2. 音量を下げるボタンを押してすぐに放す
3. Apple ロゴが表示されるまでサイド（電源）ボタンを押し続ける。10〜20秒

iPhone 7、iPhone 7 Plus、iPod touch (第 7 世代)：
1. サイドボタン (または上部のボタン) と音量を下げるボタンを同時に 10 秒以上、Apple ロゴが表示されるまで押し続ける

ホームボタン搭載の iPad、iPhone 6s 以前、iPod touch (第 6 世代) 以前：
1. サイドボタン (または上部のボタン) とホームボタンを同時に 10 秒以上、Apple ロゴが表示されるまで長押しする

これを**強制再起動**というそうです。


## バッテリーの確認、電源に接続して様子を見る

上記でもダメな場合、デバイスを電源に接続して様子を見る

1時間以上たっても充電画面が表示されない場合や、「電源に接続してください」という画面が表示される場合は、
ほこりがたまっていたりケーブルの接触不良がないかを確認する


## リカバリモードを試す

デバイスの電源は入るが、起動の途中で動かなくなる場合は
**リカバリモード**を試してみる
リカバリモードとは電源は入るがOSに異常がある場合の修復機能です。

1. iTunesを起動しているPCを用意する
2. PCとiPhoneをUSBケーブルで接続する
3. iPhoneをリカバリモードにする ※
4. iTunes側で確認画面が表示されたら「アップデート」もしくは「復元」を選択する

※リカバリモードは端末毎に上記強制再起動と同様のため類似手順でiPhoneが初期化されないようにご注意ください。



と、まあここまでやっても私の場合はダメでした。
AppleStoreのスタッフさんに確認しましたが、ここまでやったらあとは自分でできることは特にないそうです。
これ以上は店舗への修理依頼や郵送での修理依頼がいるそうです。
店舗は混雑していることが多いので事前に予約することをおすすめします。

ここまでやってダメなら終わりじゃない？諦めるしかない？とも思いますが、
ストアの店員さん曰く、店舗のPCと繋げてハードの電流の流れを確認したりとまだやれることはあるそうです。
なので治る可能性に賭けて期待です。。。

https://support.apple.com/ja-jp/iphone/repair/service#otherrepairs
AppleCare加入していないので修理代金６万はムリ。
その場合は新しいiPhone出るまでGoogle Pixel3aでも買おうかな。


## 参照
https://support.apple.com/ja-jp/HT201412
コマンドラインでランダムなパスワードに使えそうな文字列をさくっと作る

## アルファベット+数字+記号


```
openssl rand -base64 6
```

`6` の部分を変更すると文字列長を変更できます。

### 結果結果(サンプル)

```
64rbP0Ln/08=
```

## アルファベット小文字 + 数字

```
openssl rand -hex 4
```

`4` の部分を変更すると文字列長を変更できます。

hexを使用しているためアルファベットはa-fまでしか使われずパスワードとして十分強力ではないため文字列を長めにして使用することをおすすめします。

### 結果(サンプル)

```
76d5736c
```
Cloud Run Buttonを設置してGitリポジトリにあるアプリケーションをサクッとGCPのCloud Runで動かす

# Cloud Run Buttonとは
Deploy to Heroku Buttonと同じようにGitリポジトリにあるアプリケーションをボタンワンクリックでGCPのCloud Runにデプロイすることができます。GitリポジトリのREADMEに設置することが多いと思います。
Cloud Runはコンテナアプリケーションをサーバーレスで動かせるサービスです。
herokuではDeploy to Heroku Buttonをクリックすると分かりやすい専用の画面が表示されますが、Cloud Run ButtonをクリックするとGCPのCloud Shellの画面が表示され、そこでデプロイが始まります。GCPっぽさがありますね。


GoogleによるCloud Run Button紹介記事は[こちら](https://cloud.google.com/blog/products/serverless/introducing-cloud-run-button-click-to-deploy-your-git-repos-to-google-cloud)

# Cloud Run Buttonの設置の仕方

https://github.com/GoogleCloudPlatform/cloud-run-button にすべてが書かれていますが、手順を書き残しておきます。

## 動かしたいアプリケーションのGitリポジトリのREADMEにCloud Run Buttonをおく

以下の画像リンクをREADMEに書きます。

```
[![Run on Google Cloud](https://storage.googleapis.com/cloudrun/button.svg)](https://console.cloud.google.com/cloudshell/editor?shellonly=true&cloudshell_image=gcr.io/cloudrun/button&cloudshell_git_repo=YOUR_HTTP_GIT_URL)
```

YOUR_HTTP_GIT_URLはそのGitURLです。(例えば`https://github.com/GoogleCloudPlatform/cloud-run-hello.git`)

## (Optional) Dockerfileを用意

そのリポジトリにDockerfileがあるとdocker build時に使ってくれます。
もしDockerfileがない場合、[Cloud Native Buildpacks](https://buildpacks.io)の仕様にそってコンテナ化してくれます。
Cloud Native Buildpacksについて知りたい方は[こちら](https://speakerdeck.com/jacopen/cloud-native-buildpackde-mendounakontenaimezizuo-cheng-wo-zi-dong-hua-siyou)

## リポジトリパラメータのカスタマイズ

- `cloudshell_git_branch=BRANCH_NAME`をCloud Run Buttonのリンクのクエリパラメータに追加すると、指定したブランチを使用してくれます
- `cloudshell_dir=SUBDIR`をCloud Run Buttonのリンクのクエリパラメータに追加すると、指定したサブディレクトリを使用してくれます

## デプロイパラメータの指定

リポジトリのrootにapp.jsonがあれば、サービス名や環境変数をカスタマイズできる

```json
{
  "name": "foo-app",
  "env": {
      "BACKGROUND_COLOR": {
          "description": "specify a css color",
          "value": "#fefefe",
          "required": false
      },
      "TITLE": {
          "description": "title for your site"
      }
  }
}
```

上記のようなapp.jsonだと、`foo-app`という名前でCloud Runのサービスが作られる。未指定だとリポジトリ名がサービス名になる
`env`は環境変数になる。

## 注意点

herokuのapp.jsonとバッティングする。
たとえばherokuのapp.jsonには`addons`フィールドが指定できるが、Cloud Run Buttonではそのフィールドがあるとエラーになる。。
`cloudshell_git_branch=BRANCH_NAME`でブランチ名が指定できるので、Cloud Run用のブランチを作って指定すれば回避できるが本質的ではない。
UnityにIronPythonを取り込む

古い記事が多く導入に手間取ったのでその際のメモを残します。

## バイナリを取得してくる
こちら[公式](https://github.com/IronLanguages/ironpython2/releases)のアーカイブだと古いバージョンが無い為
[nuget](https://www.nuget.org/packages/IronPython/)のアーカイブから持ってきます。
バージョンは好きなものを選択してください。

## バイナリ取得後
ダウンロードすると '.nupkg' というファイル名になっていると思われるので、
拡張子を.zipに変更して解凍します。
(内部的にはzipなので、問題なく解凍できるはずです)

※一部Macで解凍してもzip.cpgzファイルとなってしまうものがある場合は
ターミナルを開いて該当ファイルがあるディレクトリに移動し下記コマンドで解凍可能です。

```
# 下記コマンドは例です。(自身のバージョンに合わせて下さい)
$ unzip iron_python.2.7.X.zip
```

## Unityに導入する

1, Assets以下にPluginsフォルダーを作成する
2, 下記DllをPlugins以下に配置する
3, 以上です。コンパイルエラーなど出ていなければ問題ないはずです。

* IronPython.dll
* IronPython.Modules.dll
* Microsoft.Dynamic.dll
* Microsoft.Scripting.AspNet.dll
* Microsoft.Scripting.dll
* Microsoft.Scripting.Metadata.dll

後は、他のIronPythonの資料を見て頂ければと思います。
大事なポイントを２つまとめました。 
### Point
* nugetからバイナリを持ってくる
* 上記dllを全て配置する

### 動作確認環境
動作確認した環境を載せておきます. 

* Unity2019.1.9f1
* IronPython2.7.5(.Net4.5)

### Reference
* https://qiita.com/masashi_sampe/items/bd9f9a74a054934277c1
* http://baba-s.hatenablog.com/entry/2017/10/25/100000
* https://3daysam.com/post-301/
xubuntu19.04 に xrdp接続

## 参考

* [Ubuntu 18.04: Xfceデスクトップ環境にXRDPで接続する - Narrow Escape](https://www.hiroom2.com/2018/05/07/ubuntu-1804-xrdp-xfce-ja/)

## 準備

```sh
apt install -y xrdp
```

* 現在ログイン中のセッションがあればログアウトしておく。
* 自動ログインを無効にしておく。

```diff:/etc/lightdm/lightdm.conf
 [seat:*]
- autologin-user=user1
+#autologin-user=user1
```

* リモートデスクトップ接続をしたら、 Xorg を選択し、ユーザー名、パスワードを入力しログイン。

## 気づいたこと

* xubuntu19.04をクリーンインストールして上記手順だけで成功した。~/.xscreenrc や ~/.xsession の作成は不要だった。
今日のfortran warning :Warning: Illegal preprocessor directive

今月は、週に１日くらいしかfortranを触っていない。


```
# gfortran maceps.f 
maceps.f:1:2:

    1 | # https://qiita.com/riko111/items/084b774327c716044b13
      |  1
Warning: Illegal preprocessor directive
```

詳細は後ほど。
Jupyter Notebookの開発環境整備[memo]

Jupyterを使い始める時に参考にしたサイトのメモ

# フォント、背景色など
https://qiita.com/uratatsu/items/cdc83308ce85a32d0512
白背景色を変更する。上の記事をそのままパクりました。

```
pip install jupyterthemes
jt -t onedork -f inconsolata -T -N -cellw 90% -tfs 11
```

# キーバインド
https://www.g104robo.com/entry/jupyter-notebook-vim

```
$ pip install jupyter_contrib_nbextensions
$ jupyter contrib nbextension install --user
$ mkdir -p $(jupyter --data-dir)/nbextensions
$ cd $(jupyter --data-dir)/nbextensions
$ git clone https://github.com/lambdalisue/jupyter-vim-binding vim_binding
$ jupyter nbextension enable vim_binding/vim_binding
```

でvim 風のキーバインディングにできるそうです。

# ショートカット
https://qiita.com/masafumi_miya/items/6524dbd227705351a00c

コマンドモードでhを押すとショートカットキーの一覧がみれます。

# matplotlibでのfigの表示
https://qiita.com/gyu-don/items/062fd82e4dd2a9b6dfbb

```
matplotlib.use('tkAgg')
%matplotlib inline
import matplotlib 
import matplotlib.pyplot as plt
```

のような形で`matplotlib.use('tkAgg')
%matplotlib inline`を`import matplotlib.pyplot as plt`の前に書く。

importの後だと反映されない。

逆にファイルに出力したい場合は、
https://qiita.com/koichifukushima/items/e63e642431db92178188

```
matplotlib.use('Agg') 
```

をimport matplotlibの後につける

ファイルの保存は

```
plt.savefig('figure.png')
```

# その他まとめ
https://qiita.com/ishizakiiii/items/b98bbf8997f039f40058
テーマやデバッグのやり方、レポートをJupyterから作成する方法など色々まとまっています。
超優しい先輩に何度も指摘してもらった"インデント"の流儀

#はじめに
2019.06.17に人材系営業からRuby on RailsのWebエンジニアになったでみーと言います。
僕は文系出身で開発は全くの未経験ですが、一念発起してJOBチェンジした者です。
とても優しく指導して下さっている先輩たちのもと、コツコツと勉強を進めているのですが、やはり分からない事も多く、先輩の時間を頂くことが多い恐縮な日々です。。
今回、先輩たちに指摘してもらった"インデント"について、文系なりにまとめてみました。


#まとめる目的

####①なぜインデントが必要なのか
####②短な例えで言うとなに？
####③どうやって付けるの？
####④漏れ抜けしない対策
####⑤LT用

#読者の対象

最近言語を覚えたエンジニア初心者。
後輩にインデントなんて基礎を教えなきゃいけない先輩エンジニア

#なぜインデントを理解できないのか？
未経験者や初心者人からすると、インデントってなにそれ？美味しいの？って感じです。
そもそもプログラミングしている自分の作業が何なのかイメージできない。
だからそういう人たちにも理解してもらう為には、言語化とイメージ化に両方が必要。

#①なぜインデントが必要なのか？
そのほうが見やすいでしょう？と言われても、あんまりイメージできない人いませんか？
僕もその一人でした。
まるで*「貴様は今まで食ったパンの数を覚えているのか」*に等しい感覚でした。
でも、僕たち初心者は綺麗かどうかが分からない。まず存在を理解するだけで精一杯。

###でも・・・待てよ・・・俺の遠い昔の記憶がこれに似た経験を・・・

##②短な例えで言うとなに？

###原稿用紙ッ・・・！！！

![p0183_s.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/453260/9de5f24f-6da6-1807-62a4-f5465ac5f8b7.jpeg)

我々、文系でも馴染みのあるインデントはおそらく原稿用紙の記述ルールだろう。
夏休みの宿題、読書感想文、突然見せられた戦争テーマのアニメ映画
今思い出すだけでも久石譲の「summer」が聞こえてきそうな今日この頃だが、
これ以上に脱線せずにインデントの話の続きをします。

####[#参考]原稿用紙のルール
https://www.zkai.co.jp/el/course/sakubun_club/sakubun-kakikata/genkouyoushi.html

原稿用紙には、タイトルを書く時に２マス空けたり、名前の場所に指定があったり、改行にルールがあった。
コレが字下げ、インデントと言われるものだ。
このイメージができるとインデントの必要性が理解できてくる。

例えば、原稿用紙をルール無用で字下げせずに、ひたすらに書き連ねていくとどうだろうか。
とても汚く読みにくい文章になる。
コーディングとは機械のために言語ではあるが、実際に書くのも直すのも人間だ。
ルールだけではなく、表現もそうだ。
いきなり村上春樹みたいな文章書かれても困るのだ。
誰しもがハルキストでは、ない。

#③どうやって付けるの？

ルールは会社によって様々だろうが、基本的には半角スペースを２つ付ける。
メソッド名の定義にif文を使うなどする時に[def create]の[end]と[if]の[end]を
きちんと分別しやすくないですか？
def createの条件のためその下のif文はさらにインデントを半角スペース2個分を付ける。
こうすることでend抜けのエラーも把握しやすくなるし、自分も修正しやすくなる。

```ruby:index.controller.rb　(2)
    #カテゴリの新規作成
  def create
    if params[:a_type].present? 
      @create = AType.new(a_type_params) 
    elsif params[:b_category].present?
      @create = BCategory.new(bcategory_params) 
    end

    if @create.save
      @create.update_attributes(name: @create.id)
      redirect_to admin_customizes_index_path
    else
      render :index
    end  
  end
```
ちなみにインデントが無いとこうなる・・・

```ruby:index.controller.rb　(2)
    #カテゴリの新規作成
def create
if params[:a_type].present? 
@create = AType.new(a_type_params) 
elsif params[:b_category].present?
@create = BCategory.new(bcategory_params) 
end
if @create.save
@create.update_attributes(name: @create.id)
redirect_to admin_customizes_index_path
else
render :index
end  
end
```
なんか見づらく無いですか？？
こういう風に理解すると初心者の僕にもとても分かりやすいのだ。
人よがりな自己満足な書き方をしても、それは仕方ない。
さらに初心者は自分でコードの良し悪しが分からないんだから、余計にそうだ。
せめて人に「見ていただく」という視点を意識して今後も一緒に頑張っていきましょう。
僕も覚えがいい方では無いから、皆さんと一緒に頑張っていきたいです。

#④漏れ抜けしない対策
Visual Studioを使っているんですが、先輩にコレを入れてもらいました。
https://mimumimu.net/blog/2012/06/22/visual-studio-%E3%81%A7%E3%81%AE%E3%82%A4%E3%83%B3%E3%83%87%E3%83%B3%E3%83%88%E3%81%AE%E6%95%B4%E5%BD%A2%E6%96%B9%E6%B3%95%E3%80%82/

tabボタンを押すと自動でインデントが入る仕組みになります。
めっちゃ楽・・・スペースを押すために手を下にやる必要がなく便利です。
AWS（SAA-C01）認定試験の問題集(2019)

AWS（SAA-C01）試験資料集のURL

BLOG

http://jayendrapatil.com/

無料
[www.briefmenow.org/amazon](www.briefmenow.org/amazon)

https://aws.koiwaclub.com/

[SAA-C01-certified-solutions-architect-practice-tests](https://www.lleicloud.com/index.php/aws-certified-solutions-architect-practice-tests/)

有料
[https://www.udemy.com](https://www.udemy.com)

[https://www.whizlabs.com/free-test/](https://www.whizlabs.com/aws-solutions-architect-associate/free-test)

[https://www.examkiller.net/](https://www.examkiller.net/)

[https://www.prepaway.com](https://www.prepaway.com)
触覚VRデバイスの実装３：指への力覚提示（多指＋２軸）~実機デモ~

#はじめに
前回の記事"[触覚VRデバイスの実装３：指への力覚提示（多指＋２軸）](https://qiita.com/YI_D/items/fa212344905f0f3445f2)"の実機を組み立てたのでデモを投稿します。

#実現したい触覚
・手で硬いモノを握ったときのグリップ感（握ったときの物体からの反力）

こちらの記事"[触覚VRデバイスの実装２：人差し指への力覚提示](https://qiita.com/YI_D/items/a324db7037c2ec964c7e)"で紹介したデバイスにアップデートを加え、1軸から2軸での力覚提示にしています。

#外観

デバイス単体
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/371835/e8d0507f-5b31-2488-b02f-816ac25d7760.jpeg" width="800px">
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/371835/9ee03e3f-1cc9-2290-34ea-674be451183d.jpeg" width="800px">

装着時：2軸で指に力覚を提示する。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/371835/88d707d7-64a1-20a9-3d34-c697ea1ec916.jpeg" width="800px">

折りたたみ時
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/371835/f3bf99e7-985a-3d34-4980-e6b253abe45b.jpeg" width="800px">


#動作
生成される触覚・力覚の確認のための簡単な動作テストです。感圧センサを右手の人差し指の腹に固定。右手の人差し指の腹で感じる力覚を左手にコピーしています。具体的には右手の感圧センサの値をPWM値に変換して左手のデバイスのモータにドライバを介して出力しています。

◼️テスト動作　感圧センサ → モータ駆動
クリックで動画再生
https://www.youtube.com/watch?v=axKi0lAL-4I
[![No Link](http://img.youtube.com/vi/axKi0lAL-4I/0.jpg)](https://www.youtube.com/watch?v=axKi0lAL-4I)


◼️装着時の動き
クリックで動画再生
https://www.youtube.com/watch?v=nP_xqtRnZJI
[![No Link](http://img.youtube.com/vi/nP_xqtRnZJI/0.jpg)](https://www.youtube.com/watch?v=nP_xqtRnZJI)
※デバイスの感触を確かめるための簡易的なテストのため、デバイスの動作速度に合うように手を閉じる速さをユーザ側で調整しています。

#使用感と今後
"モノを握っている感"は1軸より2軸提示の方が表現できているように感じます。
次は親指への力覚提示を検討します。


以上
Ranorexで必ず最後にActionを実行させる方法

テスト失敗時にブラウザが残ってしまうことが問題になっていました。
そこで調べていると下記掲示板の投稿を見つけました。

[Do an action IF tests fail](https://www.ranorex.com/forum/do-an-action-if-tests-fail-t11081.html)

ティアダウンを設定すればいいとのこと。

基本的な操作でユーザーマニュアルにも書いてありましたので、勉強不足というところですね。。。
eclipceでプロジェクトが表示されないとき

eclipceでプロジェクトが表示されないときの対処法  

状況
CVSレポジトリーでチェックアウト済みであり、前日の夜までは開けていたのだが、次の日にプロジェクトが真っ白になっていた。
プロジェクトのディレクトリ自体は存在するけどワークスペースを再開してもでない、、、


対処法
左上のファイルから、「インポート」
次に「一般」を押して「既存のプロジェクトをワークスペースへ」を選択
自身のプロジェクトのルートディレクトリを指定して「プロジェクトをワークスペースにコピーにチェック」を選択し、「終了」。

これでプロジェクトが復活してビルドされるはずです！！
MattermostとGitLabの連携


gitにプッシュしたとき、Mattermostに通知が来るように設定したときのメモ

# ■Mattermost
1.メインメニュー→「統合機能」選択
2.「統合機能」→「内部向きウェブフック」を選択
3.「内向きのウェブフックを追加する」押下
4.下記の画面が表示されるので必要なところを埋める(今回は下記の内容で作成)
![内部向きウェブフック設定.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/484170/3f21da06-0aed-7f9e-c72c-d3343a095b1e.png)
5.「保存する」押下

Webhook URL作成完了(3で表示されていた画面に作成したURLが表示される)




#■GitLab
1.連携させたいプロジェクトを選択
2.「設定」→「インテグレーション」
3.スクロールしてProject servicesの「Mattermost notifications」を選択(設定画面開く)
4.設定画面(今回は下記の内容で設定)
　　Active チェックする
　　trigger 必要な項目をチェック、フォームに連携通知させたいチャンネルを入力
　　webhookにMattermostでつくったURLを設定
　　usrname を設定
　　Notify only broken pipelines　チェック(デフォルトのまま)
5.「Test settings and save changes」押下

連携完了
powershell 個人メモ 

### レジストリを出力
```
$h ='HKEY_CURRENT_USER\Software\Microsoft\Office\16.0\Outlook\Profiles\Outlook'
reg export $h C:\tmp\outlook.reg
```
### エラーの時の挙動

```
 Continue が、既定値で、エラーでとめたいときは、Stop にする
$ErrorActionPreference = "Continue"
```
コンテナのシェルに接続する2つの方法

コンテナのシェルに接続するには、`docker attach`と`docker exec`の２つがある

# docker attach

```
$ docker attach <コンテナ名 or コンテナID>
```

- コンテナのPID1のプロセスの標準入出力に接続する
- コンテナの起動時のコマンドでシェルを指定した場合に、`docker attach`すると起動時に指定したシェルに接続できる

```
# bashを指定してコンテナを起動
$ docker run -itd --name alpine1 alpine /bin/bash
# bashに接続
$ docker attach alpine1
```

- 注意点
  - 起動時にデーモンを起動していた場合は、デーモンの標準入出力に接続される
  - attachで接続したあとに、exitで抜けるとPID1のプロセスが終了してしまいコンテナも停止する
  - 基本的にはCtrl+p qを連続して入力するとプロセスを終了させずに抜けることができるが、起動時に`-it`をつけていない場合は抜けることができないので注意


# docker exec

```
$ docker exec -it <コンテナ名 or コンテナID> <シェル>
$ docker exec -it alpine /bin/bash
```

- `docker exec`は、起動しているコンテナ内で任意のコマンドを実行するコマンド
- シェルに接続するために、`-it`オプションをつけてシェルを指定しコマンドを実行する
- docker attachとは違い、exitで抜けてもコンテナを停止させないので、こちらのほうが安全
相加平均と相乗平均のとある図についての話

# 概要
たまたま見かけた以下の図が気に入ったので，黄緑色，水色の線の長さがそれぞれ $\frac{x+y}{2}, \sqrt{xy}$ であることの証明をメモとして残す[^1]．
[^1]: Qiita の数式機能のテストも兼ねている．

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">【相加平均と相乗平均】 <a href="https://t.co/fks6AgIQMV">pic.twitter.com/fks6AgIQMV</a></p>&mdash; 数学を愛する会 (@mathlava) <a href="https://twitter.com/mathlava/status/1165856962082308096?ref_src=twsrc%5Etfw">August 26, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

# 証明

## 黄緑色の線
図の半円の直径は $x+y$ であるから，半径にあたる黄緑色の線の長さは $\frac{x+y}{2}$ である．

## 水色の線
図において半円の直径を $\mathrm{AB}$ とし，$\mathrm{AB}$ を斜辺とする直角三角形のもう1つの頂点を $\mathrm{C}$ とする．そして，頂点 $\mathrm{C}$ から辺 $\mathrm{AB}$ に下ろした垂線と辺 $\mathrm{AB}$ との交点を $\mathrm{H}$ とする．いま $\mathrm{AH}=x, \mathrm{BH}=y$ である．
三角形 $\mathrm{ACH}$ において，三平方の定理より $x^2+\mathrm{CH}^2=\mathrm{AC}^2$ である．また，三角形 $\mathrm{BCH}$ において，三平方の定理より $y^2+\mathrm{CH}^2=\mathrm{BC}^2$ である．よって，三角形 $\mathrm{ABC}$ において，三平方の定理より

```math
(x+y)^2=\mathrm{AB}^2=\mathrm{AC}^2+\mathrm{BC}^2=(x^2+\mathrm{CH}^2)+(y^2+\mathrm{CH}^2)=x^2+y^2+2\mathrm{CH}^2
```

となる．従って

```math
\mathrm{CH}^2=\frac{(x+y)^2-x^2-y^2}{2}=\frac{2xy}{2}=xy
```

であるから，$\mathrm{CH}>0$ より $\mathrm{CH}=\sqrt{xy}$ が得られる．
SAP Analytics Cloudのサービス概要

# SAP Analytics Cloudとは
![図1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/486466/12be0a7f-0ace-bdf9-c38e-2af62b36ff4d.png)
SAPが提供するBI、計画、予測ができるクラウドサービス。
これまで複数の製品で断片的に管理していたデータを、SAP Analytics Cloudでは1つのサービスで管理が可能となる。
クラウドサービスなのでリアルタイムにデータを確認することが可能。
3ヶ月に1度ペースでアップデートされているため、今後も機能は拡張していくと思われる。

# SAP Analytics Cloudの利点
![スクショBI.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/486466/04955b66-e181-afd2-d39a-75f01b396637.png)
![image (2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/486466/054aeb98-b66f-e2a1-2ff1-454cfbfcb850.png)

1. BI、計画、予測が1つのクラウドサービス上で行える
1. クラウド、ローカルを含む様々な製品と接続が可能（参考：[データ接続環境](https://help.sap.com/doc/00f68c2e08b941f081002fd3691d86a7/release/ja-JP/bdf055159cbb4f36b26c93ccb0c56066.html)）
1. 視覚性に優れたユーザインターフェース
1. レポートティング、グラフ作成などが利用でき、より多角的な予実管理をサポート

# 推奨環境
デスクトップブラウザ：GoogleChromeの最新バージョン
　次点でMicrosoft Edgeの最新バージョン→Internet Explorer 11だが、基本はGoogleChromeを推奨

# SAP Analytics Cloudを使うには
1. 無料トライアル
　・30日間使用可能
　・サンプルデータはあらかじめ用意されていないのでご注意
　・使用できる機能に制限あり
　・[トライアルページ](https://discover.sapanalytics.cloud/jptrialrequest-auto-1/)

1. 購入する場合
　・1ユーザー/月　JPY 2,425から
　・[購入サイト](https://www.sap.com/japan/products/cloud-analytics.html)

# 参考
[製品ページ](https://www.sap.com/japan/products/cloud-analytics.html)
[ヘルプポータル](https://help.sap.com/viewer/product/SAP_ANALYTICS_CLOUD/release/ja-JP)
次世代キーボード Tap Strap を買ったので使い方を練習するサイトを作った

先日、何かの拍子に Tap Strap というキーボードを知りました。
メリケンサックのように指にはめるタイプのキーボードです。

https://www.tapwithus.com/

キーボードを指にはめて、ピアノを引くときのように決められた組み合わせで指を軽くタップすると、文字が打てるというものです。
このキーボード、片手だけで文字や数字を打ち込めるのでとても便利なのですが、指の使い方を覚えるのが大変です。
アルファベットの指の使い方はこんな感じ。

`o` がタップする指、 `x` がタップしない指です。

```javascript
{
  a: 'oxxxx', b: 'xoxxo', c: 'oxooo', d: 'oxoxx', e: 'xoxxx', f: 'ooxox',
  g: 'oxoox', h: 'xoooo', i: 'xxoxx', j: 'oooxo', k: 'oxxox', l: 'xxoox',
  m: 'xoxox', n: 'ooxxx', o: 'xxxox', p: 'ooxxo', q: 'xooxo', r: 'oooox',
  s: 'xxxoo', t: 'xooxx', u: 'xxxxo', v: 'ooxoo', w: 'oxoxo', x: 'xoxoo',
  y: 'oxxxo', z: 'xxoxo'//, bs: 'xooox', enter: 'oxxoo'
}
```

なかなか複雑です。。。
公式でもその問題は認識しているらしく、[Tap Academy](https://www.tapwithus.com/apps/)という練習アプリがリリースされています。
が。初めて使う人にとっては難易度が高い。。

ということで、自分で作ってみました。
見た目は残念な感じですが、一応ちゃんと動きます。

レポジトリ
https://github.com/gorogoroyasu/tap-strap-practice
作ったサイト
https://gorogoroyasu.github.io/tap-strap-practice/single/



## 見た目
![https___gorogoroyasu_github_io_tap-strap-practice_single_.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/115634/78b2e4df-a90f-a295-df5e-51073bc54e15.png)

## 間違えたとき
![https___gorogoroyasu_github_io_tap-strap-practice_single_.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/115634/94ede493-ee1a-7602-829e-93c8425e9e9f.png)

## 3回間違えたらヒントを出す！
![https___gorogoroyasu_github_io_tap-strap-practice_single_.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/115634/fe68368f-059b-35db-739d-419deefc38e1.png)


機能としては、上述した程度のものしかありません。
今の所、
1. Question を出す。
2. 正解だったら次の問題へ。間違いだったら、何と何を間違えたのかを出す
3. 3回以上間違えたら `hint` と称した答えを出す
という感じです。

あと、割とえげつないのが、問題が無限ループしていること。
この辺は、ちょこちょこいい感じに直していこうと思います。

# Vue.js

殆ど使ったことはないですが、使ってみました。
難しかったのは、 form にフォーカスを当てるところでした。
ドキュメントに書いてたんですけどね。。
https://jp.vuejs.org/v2/guide/custom-directive.html

```javascript
directives: {
    focus: {
      inserted: function (el) {
      el.focus()
    }
  }
},
```

そもそも ディレクティブ という機能を知らなかったので勉強になりました。

あと、body タグにid を振って

```javascript

new Vue({
  el: '#body',
  data: obj
})
```

という風にしようとしていたのですが、だめだよって怒られました。
苦肉の策で、

```html
<body>
  <div id='body'>
  </div>
</body>
```

という構成にして、逃げました。

たぶん、そもそもの使い方が違うんだと思います。
時間を見つけて正しい書き方に修正しようと思います。
あと、見た目がだいぶ悪いので、それもなんとかしようと思います。



# 最後に
$200 と決して安くはないですが、もし購入される方がいらっしゃったら、このクーポンを使っていただけると。
10% off になるらしいです。


<blockquote class="twitter-tweet"><p lang="en" dir="ltr">I bought an interesting device. Use this code to get yours $10 off. /<br>Get $10 off when you order a Tap. Use coupon: REFYNFCACAREG at checkout to redeem offer <a href="https://t.co/uSlJrxjfbq">https://t.co/uSlJrxjfbq</a></p>&mdash; はまのや⊿ (@gorogoroyasu) <a href="https://twitter.com/gorogoroyasu/status/1160353284210581509?ref_src=twsrc%5Etfw">August 11, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

Enjoy Tap Strap!
初心者によるjavaScriptによるpreventDefaultについての学習

今回はpreventDefaultです。

preventDefaultとは「要素に設定された規定の動作をキャンセルする」です。

例として長い本文を途中で区切り、「続きを読む」などをクリックさせて全文を表示されるというものです。

```html

  <style>
    .hidden {display:none;}
  </style>

  <p>
    text. text. text. text. text.   <span class="hidden">
    text. text. text. text. text. text. text. text. text. 
    text. text. text. text. text. </span><a href="">続きを読む</a>
  </p>

```
適当にこうしておきます。

次に

```JavaScript:main.js
  const a = document.querySelector('a');
  const span = document.querySelector('span');

  a.addEventListener('click', () => {
    a.classList.add('hidden');
    span.classList.remove('hidden');
  });
```
このように書いておきます。
aとspanを定義して、aをクリックしたらhiddenクラスをつけて[続きを読む]を非表示にし、
逆にspanからhiddenクラスを外すことで全文表示させるというもの。

ただしこれだと、クリックした一瞬表示されるがすぐ戻ってしまいます。
それはなぜかというと`<a href="">`と空のため、このページ自体に遷移し元の状態に戻ったから。

それを解消するための手段の一つとして、preventDefaultを使う。
繰り返しになるが、preventDefaultとは「要素に設定された規定の動作をキャンセルする」。
aタグの規定の動作「ページ遷移」をキャンセルさせることで、元の状態に戻るのを防ぐ目的です。

```JavaScript:main.js
  a.addEventListener('click', e => { // ()をeに変更
    e.preventDefault();
    a.classList.add('hidden');
    span.classList.remove('hidden');
  });
```
では次は、本文省略時は「続きを読む」、全文表示時には「省略する」にして、表示非表示を切り替えられるようにしましょう。

```html
  <p>
    text. text. text. text. text.   <span class="hidden">
    text. text. text. text. text. text. text. text. text. 
    text. text. text. text. text. </span><a href=""></a>
  </p>

```
html側ではaタグの中身を削除。

```JavaScript:main.js
  const a = document.querySelector('a');
  const span = document.querySelector('span');

    a.textContent = '続きを読む'

  a.addEventListener('click', e => {
    e.preventDefault();
    if (span.classList.contains('hidden')) {
      span.classList.remove('hidden');
      a.textContent = '省略する'
    } else {
      span.classList.add('hidden');
      a.textContent = '続きを読む'
    }
  });
```
JavaScript側では、まずaのテキストに続きを読むを追加し
spanのhiddenクラスがあるかないかで切り分けてみました。

とりあえずはこれで切り替えられるようです。
（本当はtoggleを使いたかったのですが、どうもうまく行かなったです。
もしアドバイスいただければ嬉しいです）

preventDefaultは何かと使えそうです。
何かをやらせたいのに、別の動作が引っかかるときなどに重宝しそうですね。
jmeter


ダウンロード
https://jmeter.apache.org/download_jmeter.cgi
(windowsの場合はzip)


インストール（どこでも）
インストール後、ファイル内のbinファイルにパスを通す
jmeter.batが実行ファイル


起動(CMDより)

```
jmeter
```

日本語選択

```
options
Choose Language
Japanese
```

最初の使う前に

```
TestPlanで右クリック
追加
スレッド
スレッドグループ

スレッドで右クリック
追加
サンプラー
HTTPリクエスト

スレッドで右クリック
追加
リスナー
統計ツリーで表示
```


ローカルで使い始める
アクセス

```
プロトコル　HTTP
サーバー   localhost
ポート     80
メソッド   get(postの場合はpostにするだけでいい)
パス       

(http://localhost:80)へのアクセス
```

渡す値

```
下部の追加をクリックする
名前　key
値    value

(http://localhost:80?key=value)へのアクセス
```

変数
設定エレメントー＞カウンター
設定エレメントー＞ランダムバリュー


コマンドラインからの実行

```
jmeter -n -t {ファイル名} -l log.jtl -e -o report
```
メトリクスについての学習 （管理図分析）

# メトリクスの分析：管理図分析
https://qiita.com/bakachou/items/53d7332fd11ad4dc08f9
こちらでメトリクスについて学び始めた。

メトリクスは単に数値なので、これをもとに分析する必要がある。
その分析手法には以下のようなものがある

- 管理図分析（閾値モデル）
- ゾーン分析
- 曲線近似分析
- トレンド分析
- チェックリスト分析

メトリクスで出した数値をもとに上記の手法を利用し、図にして分析を行う。
ここでは管理図について学んでみる。

# 管理図分析（閾値モデル）
UCL/LCLを定めて、データを図にプロットし、その分布でUCL、LCLを越えていないかを判断する分析方法であり、過去の状態をものさしとして、現状の工程が安定な状態か、また安定な状態を維持するために用いる折れ線グラフ。

管理したい特性値を、平均値、不良率（バグ発生率）、不適合数（バグ数）などの値で打点していく。

ざっと以下のような図のようになる。
![管理図.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/304109/46d20723-2470-a380-6120-db5a88d6ace7.png)

|用語|説明|
|---|---|
|UCL|上方管理限界線（Upper Control Limit）|
|LCL|下方管理限界線（Lower Control Limit）|

この上方管理限界線／下方管理限界線をきめるときに3σ法をとる。
標準偏差を σ として標準偏差の中央を0として、0± σ の間に値をとる確率は以下のようになる。

|σ|標準偏差の割合|
|---|---|
|1σ|68.27%|
|2σ|94.45%|
|3σ|99.7%|

そして、管理図にはいくつかの種類がある。

|管理図|説明|
|---|---|
|X-R管理図|平均値または中央値（X）と範囲（R）のデータを併せた管理図|
|x管理図|個々のデータでの管理図|
|P管理図（不良率管理図）|不良品の割合の管理図|
|Pn管理図（不良個数管理図）|不良個数の管理図|
|C管理図（欠点数管理図）|欠点（要求に合わない個々の欠陥）数（C）を打点して管理する場合の管理図|
|U管理図||

## X-R管理図
平均値、または中央値（X）と範囲（R）のデータを併せた管理図。

X管理図は平均値を打点し群間（日別など）の平均値の変化をみる。
R管理図はバラツキの変化を見るもので、群ごとに範囲（R）を打点し、群内（日内）のバラツキの変化（変動）をみる。


## x管理図
1個の測定値しか得られない場合や、ほぼ均一で平均値をとっても意味がない場合に、1個のデータをそのまま打点して管理する。

## P管理図（不良率管理図）
バグの個数（Pn）をテストケース（n）で割った不良率（P）を利用した管理図。


## Pn管理図（不良個数管理図）
不良率を計算しないでテストしたバグの個数によって管理する

## C管理図（欠点数管理図）
要件にあわない欠点数を打点する。

## U管理図
C管理図の変化形



## 考察とか疑問とか
上方管理限界線、下方管理限界線にσをとるのであれば、全て標準偏差を計算しないといけないのか。
こういうのを利用するためにどれぐらいの母数が必要というか取得しているのだろう
不具合分析をするための管理図は、やはりP管理図やPn管理図になるのだろうか？

統計の話が多くて、久しぶりに高校の教科書をだしてきた。
分散とか標準偏差とかぐらいなら覚えているが、共分散とか回帰分析やら出てきて完全にいろいろ忘れている。（というか、やったことすら忘れているなど。。。寝てたのか？）


まだ実践したことがないので、管理を作った後の分析がまだぼんやりしている。
15年間システム開発業を営んで来た結果の最適解

15年間様々な環境を試してきましたが、これが最適かと思っている事を記載します。
随時更新し、各項目の詳細は別記事で記載していこうかと考えています。

2019/08/28追記
多くのいいねを頂きありがとうございます。
大切な業務分析が抜けていましたので、追記させて頂きました。

# 環境周り

## 開発環境

### [IntelliJ](https://www.jetbrains.com/idea/)

vim・emacsでプラグインを使用、Eclipseなど様々なIDEを使用してきましたが、現在はIntelliJに統一しました。
以下採用理由です。

* 構築が行いやすい
* 多数の言語・フレームワークに対応している
 * あらゆるプロジェクトにて同じIDEを使用出来る
* 補完が非常に便利
* あらゆる操作にキーバインドが設定可能
* 初心者から熟練者まで満足できる操作性

## [Docker](https://www.docker.com)

出来る限り環境依存を無くす為、データベースなどのサーバープロセスはDockerで構築しています。
但し、Tomcatは環境依存が少ないため、ローカルで立ち上げています。
まだ、本番運用では運用経験なし。

## [upsource](https://www.jetbrains.com/upsource/)

コードレビューはupsourceで行っています。
以下採用理由です。

* gitの履歴が見やすい
* upsourceのレビューをIntelliJから紐付け出来る
* upsourceの通知をIntelliJから受け取れる
* IntelliJ内でやり取りを行える

## [Jenkins](https://jenkins.io/)

CI環境(自動テスト・デプロイ)は、特に不満がなくJenkinsを使用してます。
ただ、環境維持が面倒なので、クラウドサービスを採用しても良いかなとも思っています。

## 言語

### バックエンド

PHP(CakePHP・Laravel)、Ruby(Ruby on Rails)、Java(SpringBoot)、NodeJSなど案件に合わせて最適な環境を選択していますが、特別な要件がない限り、Kotlin(SpringBoot)で開発しています。
以下採用理由です。

* Kotlin
 * Rubyのようにサクサクプログラムが書ける
 * 最終的にはjavaのプログラムになる為、プログラムを動作させる環境依存が少ない
 * javaを知っていれば、サクッと習得できる
* SpringBoot
    * 必要な機能(認証機能・データベース操作)がサクッと準備出来る
    * 大きな仕様変更がない(Ruby on Railsはこれで苦労)
    * ビジネスロジックを如何に綺麗にコーディングするかにフォーカスしやすい

### フロントエンド

AngularJSをメインで使っていましたが、今はReactをメインにしています。学習コストがそれほど高くないですが、より綺麗な設計にする事がハードルが高く、プログラマーのスキルに依存してしまう事が現在の悩み。

## 本番環境

### [Heroku](https://heroku.com)

特別な要件がない限り、Herokuで運用している事が多いです。
以下採用理由です。

* SpringBootで開発している場合だとサクッとリリース可能
* OSのアップデートなどの保守作業を行う必要がない
* 大規模サイトではない限り低コストで運用可能
* ログ監視サービス・DNSサービスなどサクッと準備可能

### [さくら VPS](https://vps.sakura.ad.jp)

特別な要件がある場合は、さくらのVPSを使用しています。
採用理由は安さですが、保守作業の手間や、さくらのメンテナンスの多さからメインで採用には至っていません。

## 社内運用

### [Redmine](http://redmine.jp/)

社内のタスク管理はRedmineを使用しています。
以下採用理由です。

* 設定項目が豊富で、社内に合った設定が可能
* 足りない機能はカスタマイズ可能
* APIが豊富
* 特に他に移る理由がない

### [Slack](http://slack.com)

社内のコミュニケーションはSlackを使用しています。メールでは遅すぎますし、口頭では相手の集中力を妨げる事になるため、ほぼSlackだけでコミュニケーションをしています。
但し、Slackのチャンネル運用には気を遣ってます。理由は一つのチャンネルで話しが多すぎると、全メンバーがその情報の確認の為に時間をロスすることになったり、後から情報を参照しにくい為です。
SlackとRedmineを連動出来る[ROSA](https://www.rosa-slack.com/)を採用しています。
採用理由は以下です。

* 案件毎にチャンネルを持つことになるが、そのチャンネルではチケットの作成のみとなっている
    * 1案件1チャネルとすると話しが多すぎる
* 1チケット1チャネルとなっている為、一つのタスクに話題をフォーカス出来る
* チケットが終了状態となると、チャンネルもアーカイブされる
    * チャンネルが無限に増えない
* Slackの情報がRedmineにも残るため、Slackで話された内容がRedmineの検索機能を用いて細かく検索出来る

### [Redash](https://redash.io)

Redmineに蓄積されたデータから、業務分析に使用しております。
活用内容は[システム開発における業務分析](https://qiita.com/jjaji80/items/51337e7f43e7c4cbb904)にまとめさせて頂きました。

# 円滑化

## 教育用Redmineプロジェクトを作成

Wikiに働く為の知識をまとめ、それぞれのステップで新人にチケットをアサインしています。
これによりその新人の教育プロセスが可視化され、予定工数と実績工数により、その人の習得の早さも判断しています。
以下Wikiに記載している情報です。

* Redmineの使い方
* Slackの運用方法
* 心構え
    * 納期に対する考え方
    * 報告･連絡・相談の心構え・方法
    * 時間に対する価値
    * 品質を確保する方法
    * 仕事に対するベストプラクティス
* 環境構築
* gitの使い方
* 各スタッフの紹介
* IDEなどのTips
* コーディングルール
* レビューの行い方
* Kotlinのチュートリアル
* SpringBootのチュートリアル
GCP > 静的IPを指定していると課金されて焦ったメモ

課金されてないと思い込んでたが、ふと明細をみたら課金されて焦った。
`Compute Engine Static Ip Charge in Japan`と書いてありました。

<img width="1090" alt="スクリーンショット 2019-08-27 8.08.25.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/49910/2164b396-b97f-bd5d-ba89-903840312fe1.png">


これは何だったけ？と調べてみると以下にヒットしました。
[すべての料金  |  Compute Engine ドキュメント  |  Google Cloud](https://cloud.google.com/compute/all-pricing?hl=ja&_ga=2.81142098.-414697353.1566860495#ipaddress)

<img width="887" alt="スクリーンショット 2019-08-27 8.15.32.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/49910/ab4cf88f-4e75-c8c3-ebf8-82f380f04cfb.png">


```
未使用の IP アドレスの料金体系
静的外部 IP アドレスを予約したものの使用していない場合、その IP アドレスについては以下の表に従って課金されます。
静的外部 IP アドレスを予約し、VM インスタンスや転送ルールなどの Compute Engine リソースとともに使用している場合、
そのアドレスは使用中と見なされ、それについては課金されません。
```


どうやら、インスタンスだけ消して、静的アドレスを解放してなかったのが原因みたいです。

<img width="863" alt="スクリーンショット 2019-08-27 8.12.56.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/49910/43a0d321-442a-fc75-ece7-93c805667361.png">

使ってないインスタンスに割り当ててるIPを消して、解決
Wagtailチュートリアル 9 blocks.pyで新しいフィールドを作る(2)

# Wagtailチュートリアル 9
<=[8 blocks.pyで新しいフィールドを作る(1)]
(https://qiita.com/tagawahirotaka/items/82e13c046ef189201299)
=>[10 カードを表示しよう](https://qiita.com/tagawahirotaka/items/9fef73345fe2c88486d2)
##blocks.pyで新しいフィールドを作る(2)

20,22


```python:strams/blocks.py

from wagtail.core import blocks

# 18 TitleAndTextBlockを定義
class TitleAndTextBlock(blocks.StructBlock):

    title = blocks.CharBlock(required=True, help_text="Add your title")
    text = blocks.TextBlock(required=True, help_text="Add additional text")

    class Meta:
        template = "streams/title_and_text_block.html" # 18 テンプレートの場所
        icon = "edit" # 18 admin画面のアイコン
        label = "Title & Text" # 18 admin画面の表示

# 20 追加
class RichtextBlock(blocks.RichTextBlock):

    class Meta:
        template = "streams/richtext_block.html"
        icon = "doc-full"
        label = "Full RichText"

# 22 追加
class SimpleRichtextBlock(blocks.RichTextBlock):

    # 22 field_block.pyからオーバーライド
    def __init__(self, required=True, help_text=None, editor='default', features=None, **kwargs):
        super().__init__(**kwargs)
        self.features = [
            "bold",
            "italic",
            "link",
        ]


    class Meta:
        template = "streams/richtext_block.html"
        icon = "edit"
        label = "Simple RichText"
```

20,22

```python:flex/models.py

from django.db import models

# 16 18 モデルに必要なものをインポート
from wagtail.admin.edit_handlers import FieldPanel,StreamFieldPanel
from wagtail.core.models import Page
# 18 モデルに必要なものをインポート
from wagtail.core.fields import StreamField

from streams import blocks # 18 streams/blocks.pyをインポート

# 16 モデルを定義
class FlexPage(Page):

    template = "flex/flex_page.html"

    # 18 追加
    content = StreamField(
        [
            ("title_and_text", blocks.TitleAndTextBlock()),# 18 strams/blocks.pyに定義されている
            ("full_richtext", blocks.RichtextBlock()),# 20 追加
            ("simple_richtext", blocks.SimpleRichtextBlock()),# 22 追加
        ],
        null=True,
        blank=True,
    )

    subtitle = models.CharField(max_length=100, null=True, blank=True)

    content_panels = Page.content_panels + [
        FieldPanel("subtitle"),
        StreamFieldPanel("content"),
    ]

    class Meta:
        verbose_name = "Flex Page"
        verbose_name_plural = "Flex Pages"
```

21

```html:wagtailtutorial/templates/streams/richtext_block.html

{{self}} {# 21 RichtextBlockを表示 #}
```

20
<img width="1440" alt="スクリーンショット 2019-08-27 08.06.06.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402245/2e9c690d-3229-96e8-5372-afe8adb76b80.png">

21
<img width="1440" alt="スクリーンショット 2019-08-27 08.09.08.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402245/ce863e9b-66ba-8508-d336-d58004fe849a.png">

22
<img width="1440" alt="スクリーンショット 2019-08-27 08.25.31.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402245/95962e96-2166-6dcd-37fd-e343280a6010.png">