OmniAICreator/Qiita-1.07M huggingface dataset:
Jupyter Notebook の図の背景色を変える

Jupyter Notebookにテーマを適用したところ
図をプロットした時に見づらくなってしまったので**図の背景色を白に変更**しました。

#Jupyterでテーマを変えてみたら...
jupyterの真っ白な画面って観にくいですよね。。
そこでテーマを設定して背景を暗くしよう。
→**monokai**に設定しました！
###まずはテーマの設定
①ターミナルでjupyterthemesをインストール
`pip install --upgrade jupyterthemes`

②好きなテーマ（オプション）を設定
`jt -t monokai -T -N`
＊今回の設定
　　テーマ：monokai
　　オプション：-T（ツールバーの表示）, -N（Notebook名の表示）

参考：[Jupyter Notebook - jupyterthemes で見た目をカスタマイズする。](http://pynote.hatenablog.com/entry/jupyter-themes)

####jupyterを再起動すると...
観やすい上にカッコいい！！！！
<img width="1112" alt="スクリーンショット 2019-02-07 19.31.37.png" src="https://qiita-image-store.s3.amazonaws.com/0/274538/05261bf9-d11f-22ff-1ccf-e80e03827951.png">

と思いきや・・・

<img width="1075" alt="スクリーンショット 2019-02-07 19.30.50.png" src="https://qiita-image-store.s3.amazonaws.com/0/274538/253cd9ea-e575-f649-53c0-8362f427b839.png">
**図の軸がみにくい！！！！**

こんなんじゃ使えん。。。
なんとか図の背景だけ白くできないものか。。。


##図の背景を白くする方法①
matplotlibならfigに対してset_facecolorしてあげればいける！！

```python
fig.patch.set_facecolor('white')
```
<img width="984" alt="スクリーンショット 2019-02-07 19.40.56.png" src="https://qiita-image-store.s3.amazonaws.com/0/274538/bbbe541a-30fc-c983-2421-4015822f9857.png">

観やすいけど毎度やるのはくっそめんどくさい。。
そしてfig設定しない時どうすればいいの？？？


##図の背景を白くする方法②
色々調べたらcssを直接編集するのがいいらしい。。
参考：[Jupyter Notebookのテーマを変更する](https://kinformation.sakura.ne.jp/20170901-01)

下記のファイルを書き換えればいいらしい。
>.jupyter/custom/custom.css

でもこれ私だけでしょうか？？

こんなファイルどこにも見当たりません。。。
おそらくanaconda経由でjupyterいれてるからですかね。

そこでoverride.cssを編集する。
>/users/anaconda3/lib/python3.6/site-packages/notebook/static/notebook/css/override.css

>*場合によってはlib下のpythonフォルダがない場合もあるらしい。
>/users/anaconda3/lib/site-packages/notebook/static/notebook/css/override.css

override.cssを下記のように編集して・・・

```css

/*This file contains any manual css for this page that needs to override the global styles.
This is only required when different pages style the same element differently. This is just
a hack to deal with our current css styles and no new styling should be added in this file.*/

#ipython-main-app {
    position: relative;
}

div.output_area img, div.output_area svg {
 background: #fff;
}

```
　jupyterを再起動させてみると・・・
<img width="987" alt="スクリーンショット 2019-02-07 19.54.45.png" src="https://qiita-image-store.s3.amazonaws.com/0/274538/4d4a2e9a-82e9-4061-fd3a-5e51963ca4bd.png">

なんと！！！
めっちゃ観やすいではありませんか！！！！

これがやりたかったんだなぁぁ

##余談

感動しすぎてQitta初投稿してしまいました。
今後も備忘録的に少しずつ残していけたらと思います。



今回お気付きの方も多いとは思いますが、今回掲載した画像は
[Pythonではじめる機械学習 ―scikit-learnで学ぶ特徴量エンジニアリングと機械学習の基礎](https://www.amazon.co.jp/dp/4873117984/ref=asc_df_48731179842581606/?tag=jpgo-22&creative=9303&creativeASIN=4873117984&linkCode=df0&hvadid=295686767484&hvpos=1o3&hvnetw=g&hvrand=10852828203618362929&hvpone=&hvptwo=&hvqmt=&hvdev=c&hvdvcmdl=&hvlocint=&hvlocphy=1028851&hvtargid=pla-526272655673&th=1&psc=1)
の実行結果です。
観やすいjupyterを使ってこれから勉強頑張ります！
lib以下のmodule

#初めに
gitlabのソースコードを暇なので見たいたところ結構controller内に

Gitlab::Utils.to_boolean

みたいなコードがあったりして何なのか調べてみた

#lib以下にmoduleを書いている

どうやらlib以下にいろいろ書いていて

たとえば

lib/gitlab/utils.rb

がありその中身は

```ruby 
module Gitlab
  module Utils
    extend self

    # Ensure that the relative path will not traverse outside the base directory
    def check_path_traversal!(path)
      raise StandardError.new("Invalid path") if path.start_with?("..#{File::SEPARATOR}") ||
          path.include?("#{File::SEPARATOR}..#{File::SEPARATOR}") ||
          path.end_with?("#{File::SEPARATOR}..")

      path
    end
以下略
```

みたいになっている

この中に書いたコードをcontroller内で

Gitlab::Utils.method

みたいな感じで予備足しているっポイ

いろんな場所で使うコードの場合このようにしておくと便利なのかも

#試しに使ってみた

試しに使ってみた。

自分の場合20時を超えると機能が使えなくなることを想定して

　
現在の時刻が20未満ならtrue以上ならfalseをだつものを作ってみた

　
　
まずlib以下にtest_libフォルダ(アプリ名)を作ってその下にopening_hour.rbファイルを作成した。
　
　
そしてその中に

```ruby 
module TestLib
    module OpeningHour

        def self.check
            time = Time.new 
            return false if time.hour > 20
            return true            
        end 
    end 
end 
```

このようなコードを書いた。

これでOKではなく

lib/以下のファイルを読み込んでくれるようにするために

application.rbに

```ruby 
 config.eager_load_paths.push(*%W[#{config.root}/lib])
 config.autoload_paths = config.eager_load_paths.dup
```


これを加える

そしたら

rails cで試してみる

使い方は

TestLib::OpeningHour.check

みたいに呼び出す


```
rails c
irb(main):001:0> TestLib::OpeningHour.check
=> true
```



みたいな感じでうまくいく

おわり:sunny:
using MAT がJulia 1系で失敗するので一時的な回避策を紹介

# 本日は

諸事情でMATLABソースコードと .mat の謎ファイルを触ることになりました。

MATLABのものを動かしたいんだけれどドドド。まぁとりあえず、コードの実行は Octave でごまかすとしてだ。

```console
# mac でのインストール。
$ brew install octave
```

 *.maｔ 形式のファイルをどう読むかです。

## Octave だと

```octave
load('読みたいやつ.mat')
```

でOK。

## Python だと

```python
from scipy.io import loadmat
loadmat('読みたいやつ.mat')
```

という方法があります。ありがたやー。ですが、実際に呼び出してみると

```python
someobject[0,0]['keyname'][0,0][index]
```

のように欲しいものにアクセスするためには `[0,0]`とか`[0][0]` のように形式的なオブジェクトの殻をどんどん割っていく感じで書かないといけません。書いた人間からするとまぁわかりますが、初めてコードを読む人がみるとなんだこのたくさんの添字アクセスは・・・。というお気持ちになると思います。

ちなみに loadmat の引数に `squeeze_me=True` を使うといくつかのケースでは無駄な添字アクセスの記述を減らせることもありますが、そうでない場合もあります。その他の関数などは公式のドキュメントを参照してみましょう。

# Juliaからだとどうですかね？

Octaveの学習コストとJuliaの学習コストを考えて後者を選ぶ人もいるかもしれません。
そんな人のために調べてみました。


# `Pkg> add MAT`

[MAT.jl](https://github.com/JuliaIO/MAT.jl) というのがあるらしいです。

## install 

```julia
julia> ] をタイプ
(v1.1) pkg> add MAT
```

## 使います。

ビルドステータスみるとビルドがこけているみたいですね。（２０１９年2月現在）
インストールできるけれどプレコンパイルできんのやろ？

```
using MAT
```

プレコンパイルが走ります。失敗します。あー、はいはい。そうだと思った。

## 調べます。

- [どうやら１系はまだ対応していないらしい](https://www.reddit.com/r/Julia/comments/9nlqcn/reading_matlab_files_on_julia_10/) 0.6 では動いてたっぽい
- [Precompiling fails in Julia 1.0 #90](https://github.com/JuliaIO/MAT.jl/issues/90) で同様のエラーが報告されている。
- まだ、パッケージのコードがJulia1系には対応しきれていないらしい。
- もう少し上記のIssueを読んでみると https://github.com/JuliaIO/MAT.jl/issues/90#issuecomment-433425746 にて次の方法で”とりあえずは”回避できるようだ

```console
julia> ]
(v1.0) pkg> rm MAT
julia> ]
(v1.0) pkg> add https://github.com/halleysfifthinc/MAT.l#v0.7-update
julia > using MAT
[ Info: Precompiling MAT [23992714-dd62-5051-b70f-ba57cb901cac]
julia>
```

## できたかな？

![image.png](https://qiita-image-store.s3.amazonaws.com/0/135978/b0bc24e3-d123-4897-87a7-bc80d5933353.png)

できました。手元にある.matのも開くことができました。値が整数で欲しい配列なのに　Any が型の配列が得られたりしていますけれどまぁ、Juliaから読み込めただけマシかなという印象です。
Unity2018.3.3からasyncメソッドで例外がthrowされるとエラーが止まらなくなる。

# 追記(2019/3/8)
コチラの問題について、2018.3.7f1で解決されている事を確認しました。

# 発生する現象
タイトル通り。
しかも、EditorModeに戻ってもエラーが吐かれ続ける。

## 環境
・Unity 2018.3.3～

# 再現手順

↓のスクリプトを1つ用意してボタンを押すだけで簡単に再現します。
![2019-2-7_19-29-52.png](https://qiita-image-store.s3.amazonaws.com/0/30163/18c98165-4a62-bfd7-56c6-ba5b53741a5a.png)
![2019-2-7_19-30-16.png](https://qiita-image-store.s3.amazonaws.com/0/30163/be0b327e-7f35-2618-5428-c9c39ce6e7c7.png)

# 原因らしきもの
UnitySynchronizationContext内で、Queueに積まれたWorkRequestをInvokeする部分の実装が2018.3.3から変わっている事が原因と思われます。

dnす(ryで見てみると、↓がUnity2018.3.2までの実装
![2019-2-7_10-38-48.png](https://qiita-image-store.s3.amazonaws.com/0/30163/7b27bb92-d50a-f864-40a7-56f6c9cecb9d.png)
↓がUnity2018.3.3からの実装
![2019-2-6_14-43-19.png](https://qiita-image-store.s3.amazonaws.com/0/30163/a466c7a1-3861-c82c-d510-1cbee11ae3f7.png)
となっており、WorkRequestをInvokeするまでは溜まったWorkRequestがClearされないという実装に変わっている事がわかります。
つまり、Invoke()でThrowが走るとClearされずに次のフレームでも同じWorkRequestがInvokeされるようです。


ただ、github上のmasterではUnity2018.3.2のバージョンのコードが公開されています。
masterが最新のリリースのものではないという事でしょうか。
https://github.com/Unity-Technologies/UnityCsReference/blob/master/Runtime/Export/UnitySynchronizationContext.cs#L68-L79
![2019-2-7_19-36-47.png](https://qiita-image-store.s3.amazonaws.com/0/30163/3dc43e3f-668d-b80a-2e32-40e5a40d4ff2.png)



# 対策
①asyncを使いたい場合は、2018.3.3以降のアップデートは保留にしてUnityの対応を待つ
②自家製SynchronizationContextを作ってAsyncOperationManager.SynchronizationContextを乗っ取る
③Task+SynchronizationContextではなく、[UniTask](http://neue.cc/2018/07/12_567.html)を使う。
![SnapCrab_NoName_2019-2-9_22-48-18_No-00.png](https://qiita-image-store.s3.amazonaws.com/0/30163/a686c57d-8439-d7bb-ffe3-31e4aba35cf1.png)


あと、バグレポは送りましたが、2018.3.4で修正されてないのでいつ直るかはわかりません。
量と質　ソースコードの評価。仮説（158）

量と質　ソースコードの評価

メトリクス計測 SourceMonitor 紹介
https://qiita.com/syougun360/items/f38981dba32d3afd2957

PhpMetrics - コード・メトリクスをお手軽にビジュアル化
https://qiita.com/anfangd/items/48b3e12f2328199c59ed

あきらめるにはまだ早い！ソースコードの品質向上に効果的なアプローチ
https://qiita.com/hirokidaichi/items/5a5cb63ef5499143bc40

【自動整形】[ formatter / Beautifier ] でソースコードの可読性を上げ品質向上に繋げよう
https://qiita.com/anfangd/items/7188a5f31fcbb7f2aa27

プログラマにも読んでほしい「QC検定にも役立つ！QCべからず集」
https://qiita.com/kaizen_nagoya/items/d8ada7b7fceafe2e5f0e

# 参考資料
質と量。仮説（156）
https://qiita.com/kaizen_nagoya/items/d5361daeeb13c71caa91

ネット記事の指針。仮説（157）質と量　
https://qiita.com/kaizen_nagoya/items/44a83508ac6ec2fa4cf0

ソースコードの評価。仮説（158）量と質　
https://qiita.com/kaizen_nagoya/items/f35aa0e4bf64ac49b1bc

ソフトウェアの評価。仮説（159）量と質　
https://qiita.com/kaizen_nagoya/items/415a1bc4013c7a879548

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

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

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

Please press the like icon 💚　and follow me for your happy life.
ChromebookのLinux（Crostini）の日本語入力をAnthyで構築

ARMアーキテクチャのChromebookでの、Crostiniの日本語入力環境については、ネットで調べるとMozcを使う方法が多い。
もちろんMozcがベストなのですが、この記事を書いている時点で、私の環境(ASUS Flip C101PA)だと、うまくいかなかった（ARM用VS Codeと、busterのMozcを一緒にインストールすると、VS Codeがエラー出して起動しなくなる）ので、Anthyで日本語入力環境を構築したのでメモ。


## VS Codeのインストール
これはいろいろなサイトで紹介されていますので簡単に。
https://www.reddit.com/r/Crostini/wiki/howto/install-vscode
から、ダウンロードしてきてインストール。

## Anthyのインストール

```
$ sudo apt install fcitx-anthy
```

インストール終わったら設定画面を起動

```
$ fcitx-configtool
```

設定画面
1. Input MethodでAnthyを検索して追加
2. Global Configで入力の切り替えボタンを設定

おわったら、

```
$ fcitx-autostart
```

で起動するだけ。
VS Codeを立ち上げて切り替えボタンを押すと日本語が入力できます。

- 日本語フォントやVS Codeの日本語化
- fcitx-autostartの自動化

などは、Mozcをつかったインストール方法の情報を調べると沢山でてくるので、それらを参照ください。

## 参考サイト

http://www.webcyou.com/?p=8765
https://www.taneyats.com/entry/vscode-on-c101pa
https://matoken.org/blog/
http://www.webcyou.com/?p=8765
https://www.axon.jp/entry/2018/10/18/201812
https://qiita.com/mitsuharu_e/items/3902a7f6e83ee10d72ba#vs-code%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB
Booting CentOS 6 in 4 seconds...で止まったままになった

##Booting CentOS 6 (2.6.32-754.el6.x86_64) in 4 seconds...

CentOS 6.10をベアボーンPCにインストール⇒再起動したところ、

```
Press any key to enter the menu
Booting CentOS 6 (2.6.32-754.el6.x86_64) in 4 seconds...
```
と表示されたまま起動が進みませんでした。
※4 seconds...の部分がずっと4 seconds...のまま止まった状態です。キーを押すと普通にgrubメニューには行けました。　

## CMOSバッテリーを交換すべし
ハードウェアに内蔵されているCMOSバッテリーが寿命を迎えていると、ハードウェアクロックが進まなくなりgrubへのカウントダウンも止まってしまうようです。

BIOSのセットアップ画面で「System Time」項目を見てみると、たしかにこちらも止まったままになっていました。
CMOSバッテリーを交換すべし。

##参考にしたWebページ
* http://www.webhostingtalk.com/showthread.php?t=1384141
* https://stackoverflow.com/questions/19536816/bootloader-countdown-timer-stuck-at-4-seconds
* [PC内のCMOSバッテリーの劣化（と車のキーの電池交換）](https://pc-pier.com/blog/2016/04/28/cmos-battery/)
Google ColaboratoryのTensorflowを1.12にする。

# ColaboratolyのTensorflowが1.13.0rcになっていた！！ 

![image.png](https://qiita-image-store.s3.amazonaws.com/0/11203/24b98a8e-a800-bb62-6922-c4c91ab32c64.png)

Colaboratolyで訓練して、結果のモデルをローカルPCで動かしているのでバージョンを合わせたいが、pipで検索しても1.13が無い。

```
(tf-gpu) C:\>pip search tensorflow
tensorflow (1.12.0)  - TensorFlow is an open source machine learning framework for
                       everyone.
```

Googleさん、導入早すぎる。。。


# Tensorflowのバージョンを変更する

```bash

# cuda10がインストールされているが、1.12ではcuda9が対応バージョンなのでcuda10を削除 
# https://www.tensorflow.org/install/source#tested_build_configurations
!apt-get --purge remove cuda*
!apt autoremove

# cuda9のインストール
# ColaboratolyのUbuntuは18.04だけど16.04のcuda9で大丈夫！
!wget https://developer.nvidia.com/compute/cuda/9.0/Prod/local_installers/cuda-repo-ubuntu1604-9-0-local_9.0.176-1_amd64-deb
!dpkg -i cuda-repo-ubuntu1604-9-0-local_9.0.176-1_amd64-deb
!apt-key add /var/cuda-repo-*/7fa2af80.pub
!apt-get update
!apt-get install cuda-9-0

# 1.12のGPU版をインストール
!pip uninstall -y tensorflow
!pip install tensorflow-gpu==1.12.0
```

まあまあ時間がかかるので、ひたすら待ちます。
この後に訓練したモデルを作って、ローカルPCの1.12で動かしたら正常にpredict出来ました。

※CUDA9.0を入れ替えないと`ImportError: libcudart.so.9.0: cannot open shared object file: No such file or directory`になります。

# (蛇足)tf-nightlyを試してみた

[tf-nightly](https://pypi.org/project/tf-nightly/)が1.13の先行したものだが、colab(1.13)で作ったモデルをローカルPCに持ってきてtf-nightly(1.13)で動かしてもダメでした。

```
ValueError: Tensor("Placeholder:0", shape=(), dtype=float32) must be from the same graph as Tensor("total:0", shape=(), dtype=resource).
```

これが`model.predict()`で発生して、原因の切り分けが出来なかったので諦めました。
`placeholder:0`なので変数だとわかるか、`total:0`って何？というのと`dtype=resource`はどこにも指定してないタイプだったので、どこが悪いのか見当もつきませんでした。

# 読んだページ

- https://www.tensorflow.org/install/gpu
- https://www.tensorflow.org/install/source#common_installation_problems
- https://qiita.com/min9813/items/90a1ef62b3dc37d0cc33
- https://qiita.com/JeJeNeNo/items/b30597918db3781e20cf
- https://qiita.com/akatsukaha/items/e24f8da70a438b4a9e18
- http://thr3a.hatenablog.com/entry/20180113/1515820265
Linux に Anaconda で TensorFlow をインストールし Jupyter Notebook で使う簡単な方法

Anaconda 公式ブログ（英語）に書かれていた方法に，一部，追記した内容となります．
ブログ記事が最近，削除されたようなので，備忘録として残しておきます．
もしかしたら問題があるのかもしれませんが，2019年 2月現在，最も簡単で確実な方法と思います．

##環境
ホストマシンの OS: Mac OS X, Windows 7
VirtualBox: 6.0.4
Linux: CentOS 7.6.1810, Ubuntu 18.04.1 LTS
Anaconda Installer: Anaconda3-5.3.1-Linux-x86_64.sh
Python 3.7.0
conda 4.5.11

※ 最新の Anaconda3-2018.12-Linux-x86_64.sh でインストールすると，Jupyter Notebook のセルが動作しないようです．

##概要
1. TensorFlow 用の環境を作成
2. その環境に Jupyter をインストール
3. ベース環境に nb_conda をインストール
4. ベース環境で Jupyter Notebook を起動
5. ブラウザ上で .ipynb 新規作成時に Python[conda env:tensorflow_env] を選択

##実際のコマンド

```
$ conda create -n tensorflow_env tensorflow
$ conda activate tensorflow_env
(tensorflow_env) $ conda install jupyter
(tensorflow_env) $ conda deactivate
(base) $ conda install nb_conda
```

tensorflow_env 環境は以下のディレクトリに保存されます．
anaconda3/envs/tensorflow_env

※ インストールされていないパッケージが多々あるため，その都度，インストールが必要になるのが不便です．

```
(base) $ jupyter notebook
```

####ブラウザ上で
localhost:8888/tree
の Jupyter (Home) で
New -> Python[conda env:tensorflow_env]

####動作確認

```python:HelloTensorFlow.ipynb
import tensorflow as tf
print(tf.__version__)
```
【Android】アプリがあればアプリへ飛ばし、なければストアに飛ばす

タイトルの通りです、簡単ですが調べてもなかなか出なかったので・・・

##飛ばしたいActivityにintent-filterを追加

```xml:AndroidManifest.xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="com.ringored.app">

       <activity ...>
            <intent-filter>
                <action android:name="android.intent.action.VIEW" />
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.BROWSABLE" />
                <data
                    android:path="/"
                    android:scheme="scheme"
                    android:host="host"/>
            </intent-filter>

```

##URIの書き方

URIの構成は以下の通りです
 android-app://{package_id}[/{scheme}[/{host}[/{path}]]][#Intent;{...}]

詳しくは[こちら]
(https://developer.android.com/intl/ja/reference/android/content/Intent.html#URI_ANDROID_APP_SCHEME)

上記の通りの実装の場合URIは
「android-app://com.ringored.app/scheme/host/」となります。

パラメータを乗せて飛ばすこともできます。
大量のPOST配列をJSONにしてPHPに送信することでPOST数を削減する

#概要
大量の配列をPOSTするページがあり、
PHPのmax_input_varsで設定された上限（デフォルト1,000個）に引っかかってしまい、
POSTデータがPHPで受け取れないという現象が起きていた。
（配列のPOSTでも1件ずつカウントされるんだ…）

そのため、FormをJSON形式にシリアライズしてPOSTし、
CakePHPでアンシリアライズするようにした。

#環境
PHP5.6
CakePHP2

#POSTしたいデータ
FormHelperでinputタグを出力している

```php
echo $this->Form->hidden('Param1.' . $idx . '.id');
echo $this->Form->hidden('Param1.' . $idx . '.name');
```
結果のHTMLではname属性に以下のようにセットされる

```html
<input type="hidden" name="data[Param1][1][id]" value="value1"/>
<input type="hidden" name="data[Param1][1][name]" value="value2"/>
<input type="hidden" name="data[Param1][2][id]" value="value3"/>
<input type="hidden" name="data[Param1][2][name]" value="value4"/>
```

#JSでシリアライズ
submitイベントで以下の処理を発火させる。

```javascript
var form = $('#form');

//formの全要素をJSON化してサブミット
var $fields = form.serializeArray();
for (var i = 0; i < $fields.length; i++) {
    //name属性の配列表記をドット記法に変換
    $fields[i].name = $fields[i].name.replace('data[', 'data.').split('][').join('.').replace(']', '');
}
form.after('<form id="formJson" action="" method="post"><input type="hidden" name="json" value="' + h($fields ? JSON.stringify($fields) : "") + '"></form>');
form = $('#formJson');

form.submit();
```

#CakePHPでアンシリアライズ
とにかくdataに突っ込んでいるので '_method' もdataに入るようになったけど動いてるからいいか。

```php:IshigurosController.php
if ($this->request->is('post') && $this->request->data('json')) {
    //Json形式のプロパティデータを連想配列形式へ変換する
    //Json形式でなければ何もしない
    $decoded = json_decode($this->request->data('json'), true);
    if ($decoded && json_last_error() === JSON_ERROR_NONE) {
        $request = Hash::expand(Hash::combine($decoded, '{n}.name', '{n}.value'));

        //'data'のみ特別処理する
        $requestData = [];
        if (isset($request['data'])) {
            $requestData = $request['data'];
            unset($request['data']);
        }

        foreach($request as $k => $v) {
            $this->request->data($k, $v);
        }

        foreach($requestData as $k => $v) {
            $this->request->data($k, $v);
        }
    }
}
```
UiPath Studio の動作が遅くなったら

UiPath でロボットを作成中にStudioの動作が遅くなってきたら、以下の点をチェックしましょう。
1. 1つのxamlに含まれるactivitiesの数はいくつでしょうか?
->推奨は200以下だそうです。
https://forum.uipath.com/t/xaml-uipath/84424

大きくなってきたら、部品ごとに切り分けられないかという視点でロボットを見直しましょう
[test][cucumber] cucumberで失敗したシナリオだけ再実行する

# はじめに
rerunの使い方についての情報が思ったより引っかからなかったので書きます

# 環境
- Ubuntu 16.04.2 LTS
- ruby 2.4.1p111 (2017-03-22 revision 58053)
- cucumber (2.4.0)

# 失敗したシナリオの一覧を作成する
cucumber実行時に以下のオプションで失敗したシナリオのファイルパスと行番号が記述されたファイルが作成されます

```shell
cucumber -f rerun -o rerun.txt
```
標準出力、HTMLレポート作成も同時に行うには以下のドキュメントが参考になります

cucumber で 同時に別々のフォーマットで出力する方法
https://qiita.com/bamchoh/items/1828d3b0d38a4f398984

rerun.txtの中身は以下のようにfeatureのファイルパスと失敗したシナリオの行番号が記載されています

```rerun.txt
features/login.feature:33:44:55
features/logout.feature:66:77
```

#失敗したシナリオ一覧を再実行する

```shell
cucumber @rerun.txt
```

rerun.txtに記載されたシナリオのみ実行されます
Notable使い始め


Typoraが謎のエラーで使えなくなってしまったから、NotableというMarkdownエディタ・ノートアプリを使ってみる。


[オープンソースのノートアプリ『Notable』は、Markdownを覚えればEvernoteを超える \| ライフハッカー［日本版］](https://www.lifehacker.jp/2019/02/organize-your-thoughts-with-this-markdown-note-taking-a.html)

[クロスプラットフォームに対応しシンタックスハイライトやタグ、マルチ編集機能をサポートしたオープンソースのノートアプリ「Notable」がリリース。 \| AAPL Ch.](https://applech2.com/archives/20181229-notable-github-flavored-markdown-base-note-app.html)



[GitHub - fabiospampinato/notable: The markdown-based note-taking app that doesn't suck.](https://github.com/fabiospampinato/notable)





### ライセンス



MIT © Fabio Spampinato






---



## 実際に使ってみる

Windows

### ダウンロード




ダウンロードページから、

Notable-1.3.0-win.zipをにダウンロード



### インストール



ダウンロードしたzipファイルを展開。

Notable.exe を実行する。


![SnapCrab_Notable_2019-2-7_13-19-38_No-00.png](https://qiita-image-store.s3.amazonaws.com/0/267899/dcf754ce-c1e0-4a65-a5e8-91b51bae5c0f.png)


デフォルトのデータディレクトリを選択する画面が出る。マルチデバイスに同期したければオンラインストレージに保存できる。


ここでOnedriveに保存することにする。[Select] をクリックしOnedriveにNotableというフォルダを作成し、選択する。



![SnapCrab_Notable_2019-2-7_13-22-34_No-00.png](https://qiita-image-store.s3.amazonaws.com/0/267899/c9df9b2b-643e-e503-a932-b349fdc438c2.png)
初期画面。


> 13 共同編集
> 共同編集機能はなくて、Dropboxとかの共有ストレージに保存してるときは二人が同時に編集しないように気をつけてね。

という内容。



おや？チュートリアルのようだが13番目しか入っていない。



[Help] > [Tutorial]

![SnapCrab_Notable_2019-2-7_17-44-18_No-00.png](https://qiita-image-store.s3.amazonaws.com/0/267899/b4853178-2bb9-dd16-8acf-b243d6052cda.png)



[Import Notes] をクリックすると、すべてのチュートリアルが降ってくる。



![SnapCrab_Notable_2019-2-7_17-48-35_No-00.png](https://qiita-image-store.s3.amazonaws.com/0/267899/3b005e4a-c6e7-10b2-3d27-8d264c28fda8.png)




このチュートリアルを読めばだいたいできることがわかる。



## 新規ノート

[Note] > [New]、Ctrl+N、[＋]ボタンで新規ノート

![SnapCrab_Notable_2019-2-7_17-54-18_No-00.png](https://qiita-image-store.s3.amazonaws.com/0/267899/2db0f106-b309-8b22-8bd4-7da92ccc15ae.png)


日本語入力は可能。

タイトルに日本語が入っていても、.mdファイルの名前も文字化けせずに日本語で保存される。

![SnapCrab_Notable_2019-2-7_17-53-58_No-00.png](https://qiita-image-store.s3.amazonaws.com/0/267899/fc9bc258-82e3-5fbc-5a6b-40b19005aca6.png)



## 画像埋め込み



Tutorial 10



保存ディレクトリに attachments というフォルダができており、その中に画像を保存する。

添付アイコンをクリックすることでエクスプローラーから attachments にコピーしてこれる。



埋め込むときは



```

![*](@attachment/{image_file_name}.png)

```



で埋め込む。



画像ファイル名をコピペするのに手間がかかるので、選択時点でクリップボードにコピーしたり、D＆Dで埋め込みマークダウンを自動生成してくれるようになったら嬉しい。


## タグ

Tutorial 06


ノートを複数選択して、まとめてタグをつけられるのは便利。
![SnapCrab_Notable_2019-2-7_18-25-33_No-00.png](https://qiita-image-store.s3.amazonaws.com/0/267899/5e7222ba-49c9-81bb-6e38-798f394213fa.png)

タグに`Notebooks/hoge`でhogeノートブックを作れる。
![SnapCrab_Notable_2019-2-7_18-32-12_No-00.png](https://qiita-image-store.s3.amazonaws.com/0/267899/e8f4a1ad-983e-3bff-15ea-f1877d269060.png)

ノートブック内で新規ノートを作成すると自動で親ノートブックのタグがつく。


## 少し触った感想

タグツリーで擬似的にフォルダ階層っぽく管理できるMarkdownエディタ・ノート管理アプリ。

まだ使いこなせていないからかもしれないけど、
画像周りは手間がかかる。

`@tag`でタグリンク貼れるけど、補完もないので面倒くさい。



Markdownエディタとしてはいいけど、ノート管理としてはまだもう少し惜しいと感じる。

もうしばらく使ってみます。

### ほしい機能

* 前見てたページに戻るショートカット
    * OneNoteでいう Alt + ←
* URLのTitle補完
    * Boostnoteみたいなやつ。
Python初学者のための開発の基礎知識

[未来電子テクノロジー](https://www.miraidenshi-tech.jp/intern-content/program/)でインターンをしている<@matsuotaiga>です。
ここまでHTML,CSS,PHPを学習してきました。
そして今回新たにPythonの学習を始めようとしています。

今回は同じくpythonを学習しようとお考えの方に向けて基礎知識など記述していきます。

<h4>統合開発環境(IDE)って？</h4>
統合開発環境とはコードもかけるしコンパイルもできる、デバッグもできる開発のためのツールのこと。
これ１つでプログラムを書くことが可能になるわけです。

<h4>用語解説</h4>
ソースコード=>人間語で書いたプログラムの元ネタ(コンピュータには理解できない)
バイナリーコード=>コンピュータがわかる言葉で書かれたプログラム(コンピュータは0,1で理解します)
コンパイル=>ソースコードをバイナリーコードに変換する作業のこと
デバッグ=>不具合の原因を探して治すこと

統合開発環境はどれがオススメか？ということですが、開発者の方にオススメされたこともあり僕は[jupyter](https://jupyter.org/intern-content/program/)を使っています。使いやすくておすすめですよ。

Pythonによるデータ解析では下記のライブラリがよく使われます。

・NumPy（数値計算）
・pandas（データ解析）
・matplotlib（データ可視化）
　また、これらを利用しながらPythonを実行し、メモや可視化を行うことができるツールとして「Jupyter Notebook」がよく用いられます。


Jupyter Notebookはウェブブラウザで動作します。対話型でPythonなどプログラムを実行することができる多機能なエディターです。上の画面の通り、Pythonのプログラムを実行し、結果を確認する、といったサイクルを回しながら使用します。マークダウン形式でメモを記述したり、グラフを表示したりしながら作成します。全体を表現力のあるドキュメントとしてファイル保存もできます。

詳しいことは[Jupyter Notebookの使い方](
https://techacademy.jp/magazine/17430)を見てみてください。
Twilioのquick startのAPI部分をレンタルサーバー(CPI)に乗っけてみた

最近TwilioのiOSのquick startをやる機会があって
その途中で、サーバーを用意してください！と手順にあり
え、サーバーどうしよう。。。
と思って、会社で提供している、レンタルサーバー(CPI)に乗っければ？
と上司に言われやってみたものの、ちょいとハマったのでメモ。

## 環境
mac:mojave

## 参考
iOSのquick start
https://jp.twilio.com/docs/voice/voip-sdk/ios/get-started

サーバー用意してください！の章
https://jp.twilio.com/docs/voice/voip-sdk/ios/get-started#bullet3

## 手順
1. CPIにファイルをアップロードするためのftpクライアントをインストール
2. サーバーアプリケーションをデプロイ

### 1 .CPIにファイルをアップロードするためのftpクライアントをインストール
以下サイトからfileZillaをインストール
https://ja.osdn.net/projects/filezilla/

CPIのコンソールに移動して、ftp用のアカウントを作成し
fileZillaからファイルをアップロードダウンロードできるようにする

CPIの公式ftpに関するQAはこちら
http://acesr.document.secure.ne.jp/ftp/ftpsoft/

#### ハマりポイント！
apple storeからだと、無料版のFTPクライアントは皆無。。。
fileZillaも有料なので、fileZillaのサイトからダウンロードしてインストールしよう。
また、MacのFinderからFTP接続できるものの、アップロード、ダウンロード、ファイルの削除など
ファイル操作ができなかった。。。

### 2.サーバーアプリケーションをデプロイ
CPIはphpとPythonに対応しているため、どちらかの
サーバーアプリケーションを選択し、ダウンロードする。
それをCPI上の `/html` 配下に配置する。

#### ハマりポイント！
CPIのドキュメントルートはHTTPとHTTPSでそれぞれ違う！
httpは `/html` がドキュメントルート
(apiを配置したかったから `/api` を作って配置してもアクセスできずハマった。。)

httpsはオンラインヘルプに `/secure` っぽい記載があったけど
今は `/html` でhttps接続できるみたい。
**※プランによって違うので要注意です!**

以下ドキュメントルートについて
https://www.cpi.ad.jp/support/faq/faq_func/faq_func_directory/support-602.html

そんなこんなでわかれば一瞬で構築できたのに
しょうもないところでハマって、半日くらいかかった。。。

ドキュメントはちゃんと読もう。。。

ただCPIは使用中のサポートも手堅くやってるので
聞いちゃうのが早いかも！
サポートが厚いのはザ・日本の企業！って感じ笑

サポート窓口：https://www.cpi.ad.jp/support/contact.html
macOS に Netezza Software Emulator をインストール (2019年版)

開発用に個人の端末で puredata (旧称 netezza) を動かす方法。FPGAは流石にないのでエミュレータとしてVMイメージの形で配布してある模様。

[PC上でメモリ5GBで動く! Netezza Software Emulatorを使ってみた](https://qiita.com/ishida330/items/8a23ae32b34b9aa461a0) の補足程度の内容。チラ裏。

## Netezza Software Emulator をダウンロードする

https://www14.software.ibm.com/webapp/iwm/web/preLogin.do?source=swg-im-ibmndn

にアクセスして、IBM Developer アカウントを作ってログインしたのち、ダウンロードする。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/9641/3f0bad81-50a7-f999-625f-605077f5d11e.png)

ダウンロードするときに、 `Download Director` なる謎のなにかを使うか、http を使うかの選択肢がある。http を使うと３時間かかるらしいが、Download Director を使うと18分ぐらいですむようなので、我慢して `Download Director` 側を選んでそれをインストールし、それを使ってダウンロードさせた。

.ova ファイルがダウンロードされる。これは汎用フォーマットなので VMWare にも VirtualBox にもインポートできる。

## VMWare Fusion で起動する。

ダウンロードした .ova ファイルをインポートして起動した。特別に設定したのは以下の項目

### Intel VT-x を有効化

VMWare の設定 > プロセッサとメモリ > 詳細オプションを開く > Intel VT-x ... を有効にする

![image.png](https://qiita-image-store.s3.amazonaws.com/0/9641/86049663-5480-605a-664e-8a77427a334e.png)

### セキュリティとプライバシーを設定

`/dev/vmmon を開くことができませんでした : パイプが壊れています` というメッセージが出た。

macOS の環境設定からセキュリティとプライバシー > 一般 から VMWare を許可すると治った。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/9641/4770544f-ae14-df7e-3c58-4f82c21175e1.png)



## VirtualBox で起動する → できない

ゲストからインターネットに出る && ホストから puredata にアクセスできるように、ネットワーク構成をアダプタ2つ(NAT+ホストオンリーアダプタ)にしようとするとイメージが対応しておらず起動できなかった。ホストオンリーアダプタだけにしても同じエラー。NATだけにすると起動はしたが、ホストから puredata に繋がらないので意味がない。

<img src="https://qiita-image-store.s3.amazonaws.com/0/9641/81b245cf-e63a-2675-bbd6-e599e01febc5.png" width="50%" />


かつ Intel VT-x アクセラレーションはデフォルトで有効になっているにも関わらず、有効にしろとのエラーメッセージが出た。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/9641/0c8217ee-80aa-e74f-80c7-b65278e20462.png)

# ログインとか簡単な使い方

こちらのページが便利なのでそちらをみてね > [PC上でメモリ5GBで動く! Netezza Software Emulatorを使ってみた](https://qiita.com/ishida330/items/8a23ae32b34b9aa461a0)

# もっと便利に && トラブルシューティング

## ssh でログインする

sshd は動いているようなので nz ユーザの `~/.ssh/authorized_keys` に公開鍵をおけば nz ユーザでホストから ssh ログインできた。github に登録している公開鍵を持ってくると楽チン。

```
$ wget -O ~/.ssh/authorized_keys https://github.com/ユーザ名.keys
$ chmod 600 ~/.ssh/authorized_keys
```

## System is not 'Online

```
$ nzsql
SYSTEM.ADMIN(ADMIN)=> select * from test..test1;
ERROR:  System is not 'Online'
```

おそらくまだ Online 状態になっていない。

```
$ nzstate
System state is 'Discovering'.
```

以下のように状態が遷移するので待つ必要がある。ref. [Netezza 起動時のシステム状態](https://www.ibm.com/support/knowledgecenter/ja/SSULQD_7.1.0/com.ibm.nz.adm.doc/r_sysadm_system_states_startup.html)

* Stopped
* Discovering (検出中)
* Initializing (初期化)
* Pre-online (プレオンライン)
* Resuming
* Online (オンライン)

nzhw などで状況を確認。Online になるのを待つしかない。

```
$ nzhw
Description HW ID Location   Role   State   Security
----------- ----- ---------- ------ ------- --------
Rack        1001  rack1      Active Ok      N/A
SPA         1002  spa1       Active Ok      N/A
SPU         1003  spa1.spu1  Active Booting N/A
Disk        1004  spa1.disk1 Active None    Disabled
Disk        1005  spa1.disk2 Active None    Disabled
Disk        1006  spa1.disk3 Active None    Disabled
```
Quadcept 日本語シルク

Quadceptと言うPCB CADを使っていますが、日本語でシルクを書ける事を知りました。

https://forum.quadcept.com/questions/802?product=pcb_designer

![Quadcept-1.jpg](https://qiita-image-store.s3.amazonaws.com/0/285344/a5976158-bb29-5367-d626-8ead295ccd78.jpeg)
![Quadcept-2.jpg](https://qiita-image-store.s3.amazonaws.com/0/285344/ea0ee3d6-86af-21ee-374b-7f6cf26e385f.jpeg)

すごいよ･･･
まじめにシルクの為にフォントを埋め込もうと思ったのに、これで解決ですよ・・・
[OCI] Oracle Linux7 起動カーネルを変更してみた。

Oracle LinuxはUnbreakable Enterprise Kernel (UEK) と Red Hat互換カーネルがあります。
Oracle Cloud Infrastructure (OCI)のOracle Linux7のOracle提供イメージでインスタンスを作成するとデフォルトではUEKで起動します。

この記事では起動Kernelの変更してみた手順を記載します。(Oracle提供イメージは Oracle-Linux-7.6-2019.01.17-0を使用)

### カーネルのリストを表示する

```
[opc@host ~]$ sudo awk -F\' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2-efi.cfg
0 : Oracle Linux Server 7.6, with Linux 3.10.0-957.1.3.el7.x86_64
1 : Oracle Linux Server 7.6, with Unbreakable Enterprise Kernel 4.14.35-1844.1.3.el7uek.x86_64
2 : Oracle Linux Server (3.10.0-957.el7.x86_64 with Linux) 7.6
3 : Oracle Linux Server (0-rescue-5e232f837a42419b95b1e19a97b16a98 with Linux) 7.6
```

### 現在のデフォルトを調べる

```
[opc@host ~]$ sudo grub2-editenv list
saved_entry=1
```

### 利用したいカーネルをデフォルトに設定
sudo grub2-set-default X コマンドでデフォルトを設定します。例えば上記のリストから 3.10.0-957.1.3.el7.x86_64 を設定する場合は「X」を id となる「0」に変更して実行します。

```
[opc@host ~]$ sudo grub2-set-default 0
```

> リストは0(ゼロ)から始まっていることに留意してください。

### GRUB 2の起動メニューを生成

grub2-mkconfig コマンドでGRUB 2（GNU GRand Unified Bootloader 2）の起動メニューを生成し、dracut コマンドでinitramfs ファイルを生成します。

```
[opc@host ~]$ sudo grub2-mkconfig -o /etc/grub2-efi.cfg
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-3.10.0-957.1.3.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-957.1.3.el7.x86_64.img
Found linux image: /boot/vmlinuz-4.14.35-1844.1.3.el7uek.x86_64
Found initrd image: /boot/initramfs-4.14.35-1844.1.3.el7uek.x86_64.img
Found linux image: /boot/vmlinuz-3.10.0-957.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-957.el7.x86_64.img
Found linux image: /boot/vmlinuz-0-rescue-5e232f837a42419b95b1e19a97b16a98
Found initrd image: /boot/initramfs-0-rescue-5e232f837a42419b95b1e19a97b16a98.img
done
[opc@host ~]$ sudo dracut --force
bash
modsign
nss-softokn
i18n
network
ifcfg
btrfs
crypt
dm
dmraid
kernel-modules
lvm
mdraid
qemu
qemu-net
iscsi
nfs
resume
rootfs-block
terminfo
udev-rules
virtfs
biosdevname
systemd
usrmount
-uptrack
base
fs-lib
microcode_ctl-fw_dir_override
shutdown
[opc@host ~]$
```

### 再起動して確認

再起動してログインし、指定したカーネルになっていることを確認

```
[opc@host ~]$ sudo reboot
```

```
[opc@host ~]$ sudo grub2-editenv list
saved_entry=0
[opc@host ~]$ uname -a
Linux host 3.10.0-957.1.3.el7.x86_64 #1 SMP Thu Nov 1 00:13:43 PDT 2018 x86_64 x86_64 x86_64 GNU/Linux
```

### おわりに
OCIでOracle LinuxのRed hat互換カーネルで起動させることができました。

### 後述
参考情報
- [Oracle LinuxのデフォルトカーネルをスマートにUEKからRHCKに変更する](https://qiita.com/yamada-hakase/items/bf3a8cfb054b3a8cbd0a)
- [OSカーネルの更新](https://docs.cloud.oracle.com/ja-jp/iaas/Content/Compute/References/updatingkernel.htm)
コマンドでWindowsにChromeをインストールする

# 背景
Windows Serverを新しくたてた時に、Chromeをインストールするのが面倒だったので、コマンドでインストールしたかった。
IEでChromeのインストーラを落とそうとすると、インターネットプロパティいじらないといけないから面倒なんですよね。

# スクリプト
下記、　PowerShellで動きます。

```:sh
$Path = $env:TEMP; $Installer = "chrome_installer.exe"; Invoke-WebRequest "https://dl.google.com/tag/s/appguid%3D%7B8A69D345-D564-463C-AFF1-A69D9E530F96%7D%26browser%3D0%26usagestats%3D1%26appname%3DGoogle%2520Chrome%26needsadmin%3Dprefers%26brand%3DGTPM/update2/installers/ChromeSetup.exe" -OutFile $Path\$Installer; Start-Process -FilePath $Path\$Installer -Args "/silent /install" -Verb RunAs -Wait; Remove-Item $Path\$Installer
```


元ネタ: https://www.youtube.com/watch?v=M0qX46M3mnE
LaravelとVueのベストプラクティスを考える

## 概要
悶え苦しみながらVueのベストプラクティスを追い求めた日々を記録するところ。
より良い方法があれば都度更新する。

## 前提
- 現状はSPAにしない(multi page application的な)  
    一部の画面だけ試験的にVueを導入するし
- サーバーサイドはLaravel使ってる
- Laravel-mixを使う  
    HACK: Laravel-mix使わずnodeから入れたい、そしてHMR使いたい(npm run watch-pollはモウイヤダ)
- Single File Componentsを使う
- vuex使う
- vue-router使う
- `実装してく中で不都合な真実はその都度修正する`

## ディレクトリ構成
機能ごとにディレクトリを分ける。
機能ディレクトリの中にコンポーネントとstoreとrouterとapp.js(vueの宣言)を入れる。
![Screen Shot 2019-02-07 at 16.48.36.png](https://qiita-image-store.s3.amazonaws.com/0/236072/d6ee1159-6777-bc0c-831f-a1ba9f8a85fa.png)

### components
どの単位でコンポーネント分けるのヨ
ってなりそうだからatomic designに則って分ける
hadaはここらへんを参考にした
https://qiita.com/MyPoZi/items/b30eef0ed239e9039caa
![Screen Shot 2019-02-07 at 16.49.38.png](https://qiita-image-store.s3.amazonaws.com/0/236072/9a58b430-77cb-c47b-93b4-91f5c896300c.png)
templatesとpagesの違いってなんだよとかどのコンポーネントの単位からstoreにアクセスするんだよとかは、やりながら考える

### store
積極的にmodulesを使っていきたい所存
actions、getters、mutations、stateは分けたい女尊
https://qiita.com/tockn/items/2ce68b99e0839df52200
![Screen Shot 2019-02-07 at 16.49.48.png](https://qiita-image-store.s3.amazonaws.com/0/236072/8fc910e5-ea28-7d0c-31ba-87d4c8d98d46.png)

### コンパイル先(public/js)
すでに生のjavascriptファイルがあり、vueをコンパイルしたファイルが混在する形になるので明示的に分けた(つもり)
![Screen Shot 2019-02-07 at 16.50.20.png](https://qiita-image-store.s3.amazonaws.com/0/236072/356618d2-8587-54f8-8338-de0cac84e87c.png)


## store(Vuex)
vuexって？
https://www.hypertextcandy.com/vue-laravel-tutorial-authentication-part-3

vuex使うときはいつか
https://user-first.ikyu.co.jp/entry/design-of-vue-and-vuex
- 親子関係のあるコンポーネント間のデータの受け渡しは「Event Up, Props down」で
- 親子関係のないコンポーネント間のデータの共有はVuexで
- コンポーネントの固有のデータはコンポーネントのローカルステート(data)で
- グローバルなデータはVuexで

modulesの中のindexではstateとmutationsとactionsとgettersを受け取ってexportするだけ

```javascript:assets/js/GMB/tag/store/modules/locations/index.js
import { state } from './state'
import { mutations } from './mutations'
import { actions } from './actions'
import { getters } from './getters'

export default {
    namespaced: true,
    state,
    getters,
    mutations,
    actions
}
```

storeのindexの中で各modulesを受け取る

```javascript:assets/js/GMB/tag/store/index.js
import Vue from 'vue'
import Vuex from 'vuex'

import location from './modules/locations/index'

Vue.use(Vuex)

const store = new Vuex.Store({
    modules: {
        location
    }
})

export default store
```

## vue-router
基本的にroutesに設定するcomponentはpageディレクトリ配下のもの

```javascript:assets/js/GMB/tag/router.js
import Vue from 'vue'
import VueRouter from 'vue-router'
Vue.use(VueRouter)

export default new VueRouter({
    mode: 'history',
    routes: [
        {
            path: '/',
            component: require('./components/pages/EditTag.vue'),
        },
    ]
})
```
node-redでrequireを使うには・・・

node-redでrequireを使うには・・・

起動時にSettings file  : \Users\ken.yuasa\.node-red\settings.js
が読み込まれている旨の表示がある・・・

C:\Users\ken.yuasa>node-red
4 Feb 14:06:49 - [info]

Welcome to Node-RED
===================

4 Feb 14:06:49 - [info] Node-RED version: v0.19.5
4 Feb 14:06:49 - [info] Node.js  version: v10.15.0
4 Feb 14:06:49 - [info] Windows_NT 10.0.17763 x64 LE
4 Feb 14:06:50 - [info] Loading palette nodes
4 Feb 14:06:52 - [warn] rpi-gpio : Raspberry Pi specific node set inactive
4 Feb 14:06:52 - [warn] ------------------------------------------------------
4 Feb 14:06:52 - [warn] [node-red/tail] Not currently supported on Windows.
4 Feb 14:06:52 - [warn] ------------------------------------------------------
4 Feb 14:06:52 - [info] Settings file  : \Users\ken.yuasa\.node-red\settings.js
4 Feb 14:06:52 - [info] HTTP Static    : C:\Users\ken.yuasa\node_modules\node-red\public
4 Feb 14:06:52 - [info] Context store  : 'default' [module=memory]
4 Feb 14:06:52 - [info] User directory : \Users\ken.yuasa\.node-red
4 Feb 14:06:52 - [warn] Projects disabled : editorTheme.projects.enabled=false
4 Feb 14:06:52 - [info] Flows file     : \Users\ken.yuasa\.node-red\flows_yuasa-dw800g1.json
4 Feb 14:06:52 - [warn]


この\Users\ken.yuasa\.node-red\settings.js上に読み込みたいｊｓについて設定を書く必要がある

例

    functionGlobalContext: {
        sensor1:require('./sensors/sensor1.js')
        // os:require('os'),
        // jfive:require("johnny-five"),
        // j5board:require("johnny-five").Board({repl:false})
    },

ちなみに./sensors/sensor1.jsというのは設定ファイルが置いてある場所に配置してある・・・

呼び出す側（functionタグの中身）は以下のように書く必要がある・・・
var sensor = new global.get('sensor1')
msg.payload=sensor.get();
return msg;




-----------------------------------------------------------------------------------------

    functionGlobalContext: {
        sensor1:require('./sensors/sensor1.js'),
        sensor1:require('./simple-bot/chat-server-bot.js'),
        sensor1:require('./simple-bot/chat-server.js'),
        sensor1:require('./simple-bot/make-dic.js')
        // os:require('os'),
        // jfive:require("johnny-five"),
        // j5board:require("johnny-five").Board({repl:false})
    },



Error: Cannot find module 'mongodb'

あらかじめ入れとかないとダメらしい・・・

-----------------------------------------------------------------------------------------

追加モジュールのロード
Functionノードに追加モジュールを直接ロードすることはできません。 settings.jsファイルでロードし、 functionGlobalContextプロパティに追加される必要があります。

例えば、os組込みモジュールはsettings.jsファイルに以下の設定を追加することによって、 すべてのFunctionノードで利用可能になります。

functionGlobalContext: {
    osModule:require('os')
}
この時点で、モジュールはFunctionノード内で以下のように参照できます。 global.get('osModule')

設定ファイルでロードされたモジュールは、設定ファイルと同じディレクトリにインストールされる必要があります。 デフォルトのユーザディレクトリ（~/.node-red）を利用しているだろうほとんどのユーザは以下のようにインストールを実行します。:

cd ~/.node-red
npm install name_of_3rd_party_module




https://teratail.com/questions/110625
Flutterアプリにスプラッシュスクリーンを設定する

Flutterアプリにスプラッシュスクリーンを設定する方法のメモです。
今回紹介する方法以外にも、[プラグイン](https://pub.dartlang.org/packages/splashscreen)を利用する方法があるみたいです。

また、各大きさに対応した画像の用意には[ここ](http://nsimage.brosteins.com/)が便利です。

# 設定方法

## Android

1. launch_background.xmlのlayer-list内にitemを追加

```xml:$PROJECT_ROOT/android/app/src/main/res/drawable/launch_background.xml
<item>
    <bitmap
        android:gravity="center"
        android:src="@mipmap/sample_logo" />
</item>
```

2. Androidmanifest.xmlのmeta-dataを編集（label,iconを追加）

```xml:$PROJECT_ROOT/android/app/src/main/AndroidManifest.xml
<meta-data
    android:name="io.flutter.app.android.SplashScreenUntilFirstFrame"
    android:label="flutter_splash"
    android:icon="@mipmap/sample_logo"
    android:value="true" />
```

3. 下記画像を格納する

- $PROJECT_ROOT/android/app/src/main/res/drawable/mipmap-hdpi/sample_logo.png
- $PROJECT_ROOT/android/app/src/main/res/drawable/mipmap-mdpi/sample_logo.png
- $PROJECT_ROOT/android/app/src/main/res/drawable/mipmap-xhdpi/sample_logo.png
- $PROJECT_ROOT/android/app/src/main/res/drawable/mipmap-xxhdpi/sample_logo.png
- $PROJECT_ROOT/android/app/src/main/res/drawable/mipmap-xxxhdpi/sample_logo.png

## iOS

1. 下記画像を格納する[^1]

- ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png
- ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@x2.png
- ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@x3.png

[^1]: 画像名を変更したい場合は、同じディレクトリ内のContents.jsonを編集する

# 参考

https://www.developerlibs.com/2018/07/flutter-how-to-fix-white-screen-on-app.html
terraform の aws_iam_policy_attachment は使わないほうが無難

## はじめに

aws_iam_policy_attachment でuser/role/groupとポリシーを紐付けている場合、 terraform apply したときに**既存で紐づけている別のuser/role/groupのポリシーが剥がれてしまうことがある**ようです。
原因は `aws_iam_policy_attachment` でポリシーを紐付ける場合の aws provider の仕様のためで、
代替として、 `aws_iam_role_policy_attachment` などを使って紐付けるようにしましょう。

## 問題点

aws_iam_policy_attachment でuser/role/groupとポリシーを紐付けている場合、 terraform apply したときに**既存で紐づけている別のuser/role/groupのポリシーが剥がれてしまうことがある**

## 原因

terraform の公式ドキュメント[[2]]では以下のような警告がされている。

> **WARNING**: The aws_iam_policy_attachment resource creates exclusive attachments of IAM policies. Across the entire AWS account, all of the users/roles/groups to which a single policy is attached must be declared by a single aws_iam_policy_attachment resource.
> This means that even any users/roles/groups that have **the attached policy via any other mechanism (including other Terraform resources) will have that attached policy revoked by this resource**. 

**`aws_iam_policy_attachment` で紐付けられているもの以外はポリシーが剥奪されてしまうらしい**。


## 解決策

代替として、`aws_iam_role_policy_attachment`, `aws_iam_group_policy_attachment`, `aws_iam_user_policy_attachment` を使うよう勧めている。

> Consider aws_iam_role_policy_attachment, aws_iam_user_policy_attachment, or aws_iam_group_policy_attachment instead. These resources do not enforce exclusive attachment of an IAM policy.

**terraform の AWS provider の仕様**ということですが、意図しない変更になりやすいので、**最初から `aws_iam_policy_attachment` でなく `aws_iam_role_policy_attachment` などを使ったほうが無難**だと思います。

## 参考

- [1]. https://github.com/terraform-providers/terraform-provider-aws/issues/133
- [2]. https://www.terraform.io/docs/providers/aws/r/iam_policy_attachment.html

[1]: https://github.com/terraform-providers/terraform-provider-aws/issues/133
[2]: https://www.terraform.io/docs/providers/aws/r/iam_policy_attachment.html

こちらの記事も参考にしてください。

* [aws_iam_policy_attachment を含むコミットを禁止する](https://qiita.com/billthelizard/items/790ab2696fe95e6eeaee)
* [iam_policy_attachment を移行するときの落とし穴](https://qiita.com/billthelizard/items/14d3c5ce7b99daaacc11)
Progate中級を終えて

<h1>はじめに</h1>
[未来電子テクノロジー](https://www.miraidenshi-tech.jp/intern-content/program/)でインターンをしているHiromasa030911です。
今回は、progateの中級編を終えて、細かなレイアウトやデザインの方法を学んだので、それをまとめていこうと思います。
<h1>ページのレイアウト</h1>
ホームページのレイアウトは大きく5つからできている。
上からヘッダー　トップ　本文　フッターになっている。
ヘッダーはそのまま「header」のタグを用いることで作成できる。
トップや本文は、「p」や「h」を用いて作成した内容を、「background-color」などのcssを用いて作成する。
フッターは、「hover」や「font awesome」を用いてアイコンをつけていくことで作成する。
なお、「hover」クリックされたときに関係する。
<h1>細かな要素</h1>
ホームページのレイアウトを作成するには、細かな設定をする必要がある。
例えば、ページの要素の間隔をそろえたり、文字の透明や不透明を調節することがある。
間隔の調整には「margin」が、文字の明度には「opacity」が用いられる。
これらのタグを知っておくことで、より複雑なレイアウトのページが作成できるのだ。
<h1>おわりに</h1>
今回で基本的なことは学び終えたのでとても達成感がありました。
プログラミングに関する感覚をつかめてきたので、これからの学習もさらに進めていきたいです。
また、今回までに学習したタグをもう一度復習して、いつでも使えるようにしていきたいです。
Python2 と Python3 > 0か1の値が16個入ったリストから[MSB..LSB]の並びとして値を取得する

```
Raspberry Pi 3 Model B (以下RPi)
Raspbian Stretch
- python 2.7.13
- python 3.5.3
- bash v4.4.12
- Geany v1.29
- GNU Make 4.1
- gcc (Raspbian 6.3.0-18+rpi1+deb9u1) 6.3.0 20170516
```

### 処理概要

- リストに0か1の値が16個入った状態
- [MSB..LSB]の並びとして、16個の値から一つの値を取得する
- Python2で使用
    - Python3でも使えると良い

### 実装 v0.1 (by 7of9)

https://qiitadon.com/@7of9/101549508258242113

```py
bit16 = [0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0]
res = 0
for idx, elem in enumerate(bit16):
	res |= elem
	if idx < 15:
		res <<= 1
print(res)
```

```txt:結果
15370
```


### 実装 v0.2 (@sharowさん)


https://qiitadon.com/@sharow/101549836140712218
> (安全な[要出典])eval使うという手も。

>```
>>> from ast import literal_eval
>>> bits = [0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0]
>>> literal_eval('0b' + ''.join(map(str, bits)))
15370
```

上記のように教えていただきました。
ずいぶんシンプルになりました。
情報感謝です。
Python 2.7.13でもPython 3.5.3でも動作確認済です。


### 備考 (@sharow さん)

> あとは公式ドキュメントにあるとおり、外部(他のユーザー)のデータを評価するときには大きさに注意する必要があります。

> https://docs.python.org/3.6/library/ast.html#ast.literal_eval

情報感謝です。


### ast

- ドキュメント » Python 標準ライブラリ » 32. Python言語サービス
    - [32.2. ast — 抽象構文木](https://docs.python.jp/3/library/ast.html)
    - [32.2.3. ast ヘルパー](https://docs.python.jp/3/library/ast.html#ast-helpers)
Amazon QuickSightを触ってみる

# QuickSight
AWSのデータの可視化ツール
https://docs.aws.amazon.com/ja_jp/quicksight/latest/user/welcome.html

普段は[Google データポータル](https://datastudio.google.com/)を利用しているので、比較を兼ねて使ってみたいと思います！

# データの追加＆見る
### 接続できる先一覧
<img src="https://qiita-image-store.s3.amazonaws.com/0/333838/02049cb4-ded2-bdc3-f84a-c6a5f2434283.png" width=70%>

CSVファイルだったら、一覧からファイルを選んでアップロード
<img src="https://qiita-image-store.s3.amazonaws.com/0/333838/720c522c-5770-30c7-3d47-c08a8cbc5318.png" width=50%>
S3からだったら、manifestファイルというデータの置き場所が書かれたファイルを置いてあげる
<img src="https://qiita-image-store.s3.amazonaws.com/0/333838/cb5cc22e-4283-fc0e-56d5-6c9b41d587cb.png" width=50%>
manifestファイル

```json
{
  "entries": [
    {"url":"s3://bucket名/ファイル名.csv"}
 ]
}
```
### データの内容をプレビューしてくれる(CSVの場合)
<img src="https://qiita-image-store.s3.amazonaws.com/0/333838/62b6c51a-ea87-95c6-1e66-da4b9aca5710.png" width=50%>
### アップロード完了
<img src="https://qiita-image-store.s3.amazonaws.com/0/333838/00fbe12e-dae8-b1ed-fdd7-c9040c9afaf6.png" width=50%>
### データを見る
data portalよりも大量のデータを入れてもさくっと計算してくれるような感じがする。（体感）
SPICEっていう計算エンジンが優秀とのこと。
<img src="https://qiita-image-store.s3.amazonaws.com/0/333838/0731b2ce-3eb6-afb4-f22b-ece6584efe41.png" width=50%>
### ダッシュボードにして、みんなにシェア
<img src="https://qiita-image-store.s3.amazonaws.com/0/333838/5f178ce7-7cc9-dd92-1150-6a0d25b01ba9.png" width=50%>
みんなにシェアしたいのに、このアカウントにいる人しか招待できないみたい！！

# 現時点での感想
- データの表示が早くて良い！
- tableauに比べたら安価でみんなが利用できる、data portalに比べるとお金がかかる
  料金:https://aws.amazon.com/jp/quicksight/pricing/
- 良きか悪きか、アカウント作成しないと、ダッシュボードを共有できない
- AWSにデータが溜まっている人はQuickSightのほうが便利？
- まだ使えてないけど、機械学習とかあるみたいなので、利用してみたい
Install Docker Compose on CentOS 7

![docker-compose-image.png](https://qiita-image-store.s3.amazonaws.com/0/348116/27135309-9db3-8ea2-838a-ff841e2d953f.png)

# 2020/10/23 追記

記事内容は、[Zenn.dev](https://zenn.dev/ymasaoka/articles/install-docker-compose-centos-7) へ移すことにしました。
~~当面の間、内容はこちらにも記載しておきますが、そのうち削除するつもりです。~~

Qiita での記事内容は削除しました。
Zenn.dev 側で掲載していた内容と同じものを公開しているので、そちらをご確認ください。

- [Install Docker Compose on CentOS 7](https://zenn.dev/ymasaoka/articles/install-docker-compose-centos-7)
Ubuntu18.04のLXDコンテナ上でDockerが起動しない問題の対応

以下の記事の続きです。

LXDコンテナでDockerが起動しない（起動に失敗する）問題への対応方法
https://qiita.com/tabimoba/items/4f7af774145c0dbd70d9

前回は特定のserviceファイルを変更するという方法で書きましたが、この方法でも解決しない場合がありました。また、serviceファイルを書き換えるという方法自体が微妙な感じでした。

現在は、以下のような形で、コンテナを作成後にconfigに値を与えたうえでコンテナを起動させることで、LXDコンテナ上でDockerが利用できるようになります。

```
# lxc init <イメージ名> <コンテナ名>
# lxc config set <コンテナ名> linux.kernel_modules overlay
# lxc config set <コンテナ名> security.nesting true
# lxc config set <コンテナ名> security.privileged true
# lxc start <コンテナ名>
```
Ansible と Terraform の違い

## はじめに
Terraformを触るにあたり、Ansibleと機能的に何が違うのか混乱していたので調べてみたメモです

## それぞれの特徴
![terraform.png](https://qiita-image-store.s3.amazonaws.com/0/39442/4d98fd3e-bfb8-cfbd-3728-05d25e407b99.png)

  * メイン：クラウドインフラストラクチャオーケストレーション
  * サブとして構成管理もできる
  * サーバー自体をプロビジョニングするように設計されている
  * 厳密に宣言的(コードで最終状態を指定する)
  * マルチクラウドを効率的に管理する
  * 新しいサーバに対してhogehogeする
  * クラウドリソース(サーバ、LB、DNS)の管理に優れている

***
![ansible.jpg](https://qiita-image-store.s3.amazonaws.com/0/39442/1de2b06d-5143-3977-57ac-027152253978.jpeg)

  * メイン：構成管理
  * サブとしてオーケストレーションタスクも実行できる
  * 既存のサーバにソフトウェアをインストールして管理する
  * 手続き型(最終状態を達成する方法を指定する)
  * サーバーとサービスを目的の状態にする為のツール
  * プロビジョニングもできる
  * 既存のサーバに対してhogehogeする
  * ソフトウェアの管理に優れている
  * パッケージのインストール、アプリケーションのデプロイ、設定管理

## まとめ
クラウドのインフラ構築(サーバ調達、ルーティング設定)はTerraformで、
それ以降の、
アプリケーション稼動環境の構築(ミドルウェアの導入、アプリデプロイ)はAnsibleにやらせると
双方の得意分野を活かせそう。

# 参考リンク
[Ansible vs. Terraform: Fight!](https://linuxacademy.com/blog/devops/ansible-vs-terraform-fight/)
[Terraform vs. Ansible vs. Puppet](https://logz.io/blog/terraform-ansible-puppet/)
[Why we use Terraform and not Chef, Puppet, Ansible, SaltStack, or CloudFormation](https://blog.gruntwork.io/why-we-use-terraform-and-not-chef-puppet-ansible-saltstack-or-cloudformation-7989dad2865c)
[Ansible vs Terraform](https://www.reddit.com/r/devops/comments/7vyttn/ansible_vs_terraform/)
Windows10のWSLでRubyとRuby on Railsをアンインストールする

WSL（Windows Subsystem for Linux）にインストールしたRubyとRuby on Railsをアンインストールする手順です。

#環境

- Windows 10 Home (ver.1803)
- Ubuntu 18.04
- ruby 2.5.3p105 (2018-10-18 revision 65156) [x86_64-linux]（rbenv経由でインストール）
- Rails 5.2.2

#Ruby on Railsのアンインストール
まずはインストールされている`Rails`のバージョンを確認します。
`-v`オプションを付けて`rails`コマンドを実行します。

```shell-session

shuhey@HelloWorld:~$ rails -v
Rails 5.2.2
```

次にアンインストールですが、アンインストールは`gem uninstall rails -v 5.2.2`ではなく、`gem uninstall railties -v 5.2.2`とします。


```shell-session
shuhey@HelloWorld:~$ gem uninstall railties -v 5.2.2

You have requested to uninstall the gem:
        railties-5.2.2

coffee-rails-4.2.2 depends on railties (>= 4.0.0)
rails-5.2.2 depends on railties (= 5.2.2)
sass-rails-5.0.7 depends on railties (< 6, >= 4.0.0)
sprockets-rails-3.2.1 depends on railties (>= 4.0, development)
web-console-3.7.0 depends on railties (>= 5.0)
If you remove this gem, these dependencies will not be met.
Continue with Uninstall? [yN]  y
Remove executables:
        rails

in addition to the gem? [Yn]  y
Removing rails
Successfully uninstalled railties-5.2.2
```

これでRuby on Railsのアンインストールが完了です。


#Rubyのアンインストール
`rbenv`を使ってインストールしてある場合です。
rubyのバージョンを調べます。

```shell-session
shuhey@HelloWorld:~$ ruby -v
ruby 2.5.3p105 (2018-10-18 revision 65156) [x86_64-linux]
```

`rbenv`の`uninstall`コマンドを使ってrubyをアンインストールします。
上で調べたバージョンは`2.5.3p105`ですが、ここで指定するバージョンは`2.5.3`だけでOKです。

```shell-session
shuhey@HelloWorld:~$ rbenv uninstall 2.5.3
rbenv: remove /home/shuhey/.rbenv/versions/2.5.3? [yN] y
```

これでRubyのアンインストールが完了です。
Xcode使い方箇条書き

主にXcodeのGUI部分の使い方についてここでは記載します。
備忘録的な感じで調べてもなかなか出ないものも含めて。。

## 環境

- Xcode : Version 10.1 (10B61)
- Macbook Pro 

## エラー系

Q. 途中で止まるんだけど。。
A. ブレイクポイント貼ってない？（左の青色の部分）

![test](https://cl.ly/fb0697084218/download/Image%2525202019-02-07%252520at%2525205.14.34%252520PM.png)

## 操作系

Q. ボタンとかラベルとかどこから出せる？
A. 真ん中の丸に四角い穴の空いたボタンから出せる

![test](https://cl.ly/c40fff4172b0/download/Image%2525202019-02-07%252520at%2525205.18.36%252520PM.png)

## 最後に

随時更新していきます
Python2から3へ移植したコードで画像ファイルのopen()でエラー

下記は画像ファイルをopen()で開いてデータを取得するコードです。
Python2環境では正常に実行できていました。

```fuga.py
import requests

url = 'https://contoso.com/images/hoge.jpg'
filename = 'hoge.jpg'
data = (requests.get(url)).content

f = open(filename, 'wb')
f.write(data)
f.close()

filedata = open(filename, 'r').read()
```

しかし、同じコードのままPython3環境に移植すると、実行時に下記のエラーが発生。

```
Traceback (most recent call last):
  File "/root/python/fuga.py", line 11, in <module>
    filedata = open(filename, 'r').read()
  File "/usr/lib64/python3.6/codecs.py", line 321, in decode
    (result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 0: invalid start byte
```

ファイルopen時のモードを'rb'として、明示的にバイナリモード(binary mode)で開くと正常に実行されるようになりました。

```new_fuga.py
import requests

url = 'https://contoso.com/images/hoge.jpg'
filename = 'hoge.jpg'
data = (requests.get(url)).content

f = open(filename, 'wb')
f.write(data)
f.close()

filedata = open(filename, 'rb').read()   #open()のモードで'rb'を指定
```