OmniAICreator/Qiita-1.07M huggingface dataset:
Vue-Native Hello World !! まで

[Vue-Native](https://vue-native.io/)

前提条件

- node 6.0以上
- npm 4.0以上
- React Native CLIがグローバルにインストールされていること
- create-react-native-app がグローバルにインストールされていること

準備

```sh
yarn global add react-native-cli
yarn global add create-react-native-app
```

```sh
yarn global add expo-cli
yarn global add vue-native-cli
```

```sh
vue-native init test-app
```
![1](//images.ctfassets.net/ld2s2n0goor6/CESkiy39ldkuS5DcFQcX6/13d94da6a09117b7c34986f88f4ad412/1.png)
![2](//images.ctfassets.net/ld2s2n0goor6/7H2A8kIW4gcqv5TQxhbF1y/941169e320fb7b68919a45890537ac3a/2.png)
![3](//images.ctfassets.net/ld2s2n0goor6/5KSqavLbxPQyWClxMAG3nQ/1e482c7f9c3bb03d7a2929dbf8a1273c/3.png)
![4](//images.ctfassets.net/ld2s2n0goor6/40bWZ4rTaxYMdzrPTdSZZW/7af83a723cb9238fdfcd6f8034e02cbe/4.png)
![5](//images.ctfassets.net/ld2s2n0goor6/7sy7jbAjasSMMorboQNcs5/9a9206dcc7850fe9f9d7011a9209be89/5.png)

```sh
cd test-app
yarn start
```
![6](//images.ctfassets.net/ld2s2n0goor6/4QlBWFHHTKvRNUo2Aqmvtj/120afbb5b7c1ea1050a94a2ece40cc92/6.png)

「Run on iOS simulator」もしくはターミナルで「i」
![7](//images.ctfassets.net/ld2s2n0goor6/2TNn3ENHJlWY08dSwxdp7d/0b820f1127f1fdac74fd8b3a1c832c61/7.png)

2019.02.07時点でexpo@32.0.0でerror

package.json

```json
"expo": "^32.0.0",
    ↓
"expo": "^29.0.0",


"react-native": "https://github.com/expo/react-native/archive/sdk-32.0.0.tar.gz",
    ↓
"react-native": "0.55.4",


"babel-preset-expo": "^5.0.0",
    ↓
"babel-preset-expo": "^4.0.0",
```

app.json

```json
"sdkVersion": "32.0.0",
    ↓
"sdkVersion": "29.0.0",
```

```sh
yarn cache clean --force
yarn install
yarn start
```

再度

```sh
yarn start
```
「Run on iOS simulator」もしくはターミナルで「i」
![8](//images.ctfassets.net/ld2s2n0goor6/67cl96bMR9nrADuBX6zB7K/80ba15f5bbf85c005ed8362c258c182f/8.png)
【VBA】VBAでExcelを開くときに静かに開く。（あらゆる警告やメッセージを表示させない。）

# はじめに

Excelファイルを大量に自動操作するなかで、
ファイルを開くたびに警告メッセージやマクロが起動したり、データリンクの更新の有無を聞かれたり、と、ファイルを１つ開くたびに警告が表示され、折角自動処理をするのに都度動作がストップする時があります。

# 書く文

下記の文を使うとても静かに作業できました。

```VB:アラートを表示させない

    'Excelの口を封じる。（警告オフ）
    Application.DisplayAlerts = False

    'Excelの動作を封じる（トリガー式の自動マクロを起動させない。）
    Application.EnableEvents = False

    'Excelの画面更新を封じる
    Application.ScreenUpdating = False

    '念のためファイルの存在確認を開く前に実施。
    'ファイルが存在しない場合もエラーで止まるので。
    If Dir("ファイルフルパス") <> "" Then

    'そっと開く。（データリンクの更新をせずにブックを開く。※）
    Workbooks.Open Filename:=FullName, UpdateLinks:=0

    'そっと閉じる。
    Workbooks.Close SaveChanges:= False

```
データリンクの更新の引数については下記のようになっているようです。
- 0 外部参照、リモート参照ともに更新されません。 
- 1 外部参照は更新され、リモート参照は更新されません。 
- 2 リモート参照は更新され、外部参照は更新されません。
- 3 外部参照、リモート参照ともに更新されます。 


```VB:まずはファイル単体で試してみる。
    Dim ws As Worksheet
    Dim fullname As String
    Fullname = "c:\\filepath\filename.xlsx" 'ファイル
    Application.DisplayAlerts = False
    Application.EnableEvents = False
    Application.ScreenUpdating = False

    If Dir("FullName") <> "" Then
        Set ws = Workbooks.Open(Filename:=FullName, UpdateLinks:=0)

        'ここにファイルごとに実施する処理を書く

        ws.Close SaveChanges:= False
    End If

    Application.ScreenUpdating = True
    Application.EnableEvents = True
    Application.DisplayAlerts = True

```


おわり
2019/02/09　コードに誤りがあったので修正
AMD社製GPUを用いたTensorFlow環境構築～サンプル動作(失敗)

# はじめに
AMD GPUを用いてTensorflowのサンプル動作するまでの過程を記載します。
マイニングマシンからの転用でROCmを用いたTensorFlow環境を構築できるか試してみます。
**本構成ではPCIeの必要要件を満たせておらず、実現できませんでした。**
**別途、必要要件を満たしたシステムを用いて試そうと思います。**

# 構成
CPU: Intel J1900
GPU: Radeon Vega 56
Ubuntu : 18.04 LTS(Kernel 4.15)
ROCm Version: 2.1

# Ubuntuの導入
ダウンロードした[Ubuntu](https://www.ubuntulinux.jp/download/ja-remix)（今回は18.04）のISOイメージを[Rufus](https://rufus.ie/)等でUSBメモリに書き込み、
インストールメディアを作成します。その後USBから起動しローカルディスクへインストールします。

#ROCmの導入
[公式GitHub](https://github.com/RadeonOpenCompute/ROCm)のUbuntu Supportを参照しながら以下コマンドを実行しました。


・システムを最新状態にし、再起動

```
sudo apt update
sudo apt dist-upgrade
sudo apt install libnuma-dev
sudo reboot
```


・aptリポジトリにROCmを追加

```
wget -qO - http://repo.radeon.com/rocm/apt/debian/rocm.gpg.key | sudo apt-key add -
echo 'deb [arch=amd64] http://repo.radeon.com/rocm/apt/debian/ xenial main' | sudo tee /etc/apt/sources.list.d/rocm.list

```

・aptリポジトリの更新と `rocm-dkms`のインストール

```
sudo apt update
sudo apt install rocm-dkms
```

・ユーザー権限の設定

```
sudo usermod -a -G video $LOGNAME 
```

・システム再起動後、ROCmのインストールが正しく完了したかの確認

```
/opt/rocm/bin/rocminfo 
/opt/rocm/opencl/bin/x86_64/clinfo 
```

・実行すると以下のエラー

```
$/opt/rocm/bin/rocminfo 
hsa api call failure at line 900, file: /home/jenkins/jenkins-root/workspace/compute-rocm-rel-2,1/rocminfo/rocminfo.cc. Call returned 4104
```

<br>

調べてみるとLinuxカーネルバージョンの問題等の可能性があったため、
システムのバージョンを確認

```
$ sudo uname -a
Linux user 4.15.0-45-generic #48-Ubuntu SMP Tue Jan 29 16:28:13 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux

```

<br>

[ROCm GitHub](https://github.com/RadeonOpenCompute/ROCm)内のシステム要件を確認
 > Ubuntu 16.04.x and 18.04.x (Version 16.04.3 and newer or kernels 4.13 and newer)

Vega56のコードネームはVega 10のため以下が該当
>4.17: Fiji, Polaris 10, Polaris 11
4.18: Fiji, Polaris 10, Polaris 11, **Vega10**
4.20: Fiji, Polaris 10, Polaris 11, **Vega10**, Vega 7nm

ちゃんと満たしてました。
ほかに何が要因かとREADMEを眺めていたら、
CPUの必要要件がPCIe 3.0以降とのことでした。
今回使用していたCPUはCeleron J1900のため2.0しか対応していませんでした。

以下記載もありました。
PCIe 2.0でも一部CPUでは限定的に対応しているようですが、
Celeronは無理そうです。

 > ROCm 2.1.x should support PCIe 2.0 enabled CPUs such as the AMD Opteron, Phenom, Phenom II, Athlon, Athlon X2, Athlon II and older Intel Xeon and Intel Core Architecture and Pentium CPUs. 

# まとめ
今回使用したシステムではHW要件を満たせておらず動作ができませんでしたが、
別途、必要要件を満たしたシステムを用いて試そうと思います。
トラブルメモ > Terser TypeError: Cannot read property 'minify' of undefined


[Terser TypeError: Cannot read property 'minify' of undefined · Issue #3407 · vuejs/vue-cli](https://github.com/vuejs/vue-cli/issues/3407)


```
npm install terser@3.14 
```


TypeError: Cannot read property 'minify' of undefined


```
npm install terser@3.16
```
IIS > HTTP/1.1 405 Method Not Allowed


POST


![image](https://qiita-image-store.s3.amazonaws.com/0/49910/642c61b2-31ec-0f32-46cc-b086d6389989.png)



### 機能の追加と削除

![image](https://qiita-image-store.s3.amazonaws.com/0/49910/c8c52bfe-2d96-ba80-a609-0b07bd8f1f41.png)

### モジュールマップ

IISマネージャーから


![image](https://qiita-image-store.s3.amazonaws.com/0/49910/4f67a30c-9fea-5fd8-714c-ba3776f59b5c.png)
lernaでincludeMergedTagsを設定しないとマージコミットが変更として検知されてしまう

[lerna](https://github.com/lerna/lerna)では`lerna version --conventional-commits`というように`--conventional-commits`オプションを使うことで、コミットから次のバージョンを推測できます。

詳しくは[lernaでのmonorepoにおけるリリースフロー(Fixed/Independent) | Web Scratch](https://efcl.info/2019/01/26/monorepo-release-flow/)を参照。

しかし、この`--conventional-commits`はデフォルトでは問題があります。
GitHubではPRをマージするとマージコミットが作られますが、このマージコミットも変更のコミットとして扱われてしまいます。

<img width="996" alt="image.png" src="https://qiita-image-store.s3.amazonaws.com/0/734/c7a5fdce-78be-b943-397e-a409dbd939d7.png">

> タグ付け後のマージコミットが全体の変更として扱われる

これによって、変更してないけどマージコミットによって、バージョンを上げないといけないといった判定になってしまいます。

## includeMergedTags

この問題を回避するため、lernaには[--include-merged-tags](https://github.com/lerna/lerna/tree/master/commands/version#--include-merged-tags)というオプションがあります。

このオプションを有効化するとマージコミットは無視してくれます。
これによってマージコミット != 全体の変更ではなくなるため、無駄なバージョンアップを避けれます。

このオプションはCLIでは次のように有効化できます

```
lerna changed --include-merged-tags
```

`lerna.json`では`includeMergedTags`で設定できます。

```
{
  "version": "independent",
  "npmClient": "yarn",
  "useWorkspaces": true,
  "packages": [
    "packages/*",
    "examples/*",
    "packages/@textlint/*",
    "test/integration-test",
    "website"
  ],
  "includeMergedTags": true
}
```
【Visual Studio 2017】 他人のGitHubリポジトリへプッシュする方法

# 他人のGitHubリポジトリへプッシュする方法

この記事では、Visual Studio 2017でGitHubを扱う記事です。
**"Git for Windowws"**や**"Visual Studio GitHub連携コンポーネント"**を導入していない方は、[**"こちらの記事"**](https://qiita.com/elu_jaune/items/eb354558d0dc39add152)をご参照ください。

### 相手からリポジトリへ招待してもらう
招待されると招待メールが届くのでメールを開き、メール内の**"View invitation"(緑色のボタン)**を押す。
![1.png](https://qiita-image-store.s3.amazonaws.com/0/213065/5cd9ca50-806c-481c-5193-b58216b5e524.png)
**"Accept invitation"(緑色のボタン)**を押す。
![2.png](https://qiita-image-store.s3.amazonaws.com/0/213065/b5bb87fb-c190-b662-2131-aa20550db388.png)
招待されたリポジトリ。
まだ何もない。
<a href="https://github.com/task4233/hoge"><img src="https://qiita-image-store.s3.amazonaws.com/0/213065/300d81be-6e1b-9462-7312-20b8ba564e46.png" width="460px"></a>
![3.png](https://qiita-image-store.s3.amazonaws.com/0/213065/030ed7b5-096e-6eae-3678-6254e56d03d8.png)
**"Visual Studio 2017"**を起動する。
![4.png](https://qiita-image-store.s3.amazonaws.com/0/213065/55645046-f81c-7395-8898-2ef3da35178e.png)
**"チームエクスプローラー"**の左上にある緑のコンセントマークを押す。
![4_2.png](https://qiita-image-store.s3.amazonaws.com/0/213065/b472b1f8-60f1-8053-ab56-613ffe31f2fc.png)
**"GitHub"**の下にある**"clone"**を押す。
![5.png](https://qiita-image-store.s3.amazonaws.com/0/213065/ebcd54ed-1784-4626-a792-0fc014d68ba1.png)
小さい枠が出てくる。
![6.png](https://qiita-image-store.s3.amazonaws.com/0/213065/cc42c1f7-19ba-dc44-1c7f-232cba701163.png)
![7.png](https://qiita-image-store.s3.amazonaws.com/0/213065/19500f70-7ad0-e414-aaaf-932a714c162f.png)
上にある**"URLボタン"**を押す。
![8.png](https://qiita-image-store.s3.amazonaws.com/0/213065/9858a89a-bcf3-6e38-dce5-7b949c42e7a5.png)
招待をもらったリポジトリのURLを記入して**"Clone"**を押す。
![9.png](https://qiita-image-store.s3.amazonaws.com/0/213065/f8dc2b87-e7fc-1701-0e28-5f28647c840f.png)
リポジトリが読み込まれた。
![10.png](https://qiita-image-store.s3.amazonaws.com/0/213065/f8c92a72-8147-8f0a-0a8c-331c10cdcb93.png)
今回はこのリポジトリに**"test.txt"**を作成する。
![11.png](https://qiita-image-store.s3.amazonaws.com/0/213065/08ab84b7-ff38-79d3-353d-886fbd342ec0.png)
**"チームエクスプローラー"**を押して、**"変更"**を押す。
![12.png](https://qiita-image-store.s3.amazonaws.com/0/213065/b90b5255-b0d2-a9c0-b5d3-b490f2e0bcf0.png)
メッセージ欄に任意のメッセージを書き、**"すべてをコミット"**を押す。
![13.png](https://qiita-image-store.s3.amazonaws.com/0/213065/ca4611e1-5a20-a9b1-7582-4310d68664bf.png)
背景黄色部分に書かれている**同期**を押す。
![14.png](https://qiita-image-store.s3.amazonaws.com/0/213065/b0634117-92c2-6830-4eed-cd4eceb7a435.png)
![15.png](https://qiita-image-store.s3.amazonaws.com/0/213065/70f473c9-f101-7213-a486-a22626c9f03a.png)
**"プッシュ"**を押す。
![16.png](https://qiita-image-store.s3.amazonaws.com/0/213065/d6016f5a-05f0-a1d6-f084-6abd8d5ca58f.png)
![17.png](https://qiita-image-store.s3.amazonaws.com/0/213065/6e94ef8c-c69b-c685-f10e-b714b0b5aed8.png)
![18.png](https://qiita-image-store.s3.amazonaws.com/0/213065/d2ff67db-5c29-1958-0abf-8b4362488800.png)
プッシュされました。
![19.png](https://qiita-image-store.s3.amazonaws.com/0/213065/95e4963f-4f75-0fe4-56bd-b996cb37755f.png)
ブラウザでGitHubを見ると、プッシュできたことが確認できました。
![20.png](https://qiita-image-store.s3.amazonaws.com/0/213065/a02ef3bb-7dbe-b7c4-3239-edef4c601401.png)
ffmpeg + pygameで動画を表示する

- ストリーミング動画のプレイヤーにちょっとしたUIがついたものをつくりたい
- WebRTCをRaspberryPiやPINE64のブラウザ使うのは厳しかったので、代替案を探している
- ffplayは割と普通に動いているのでネイティブに近いやつなら大丈夫かも
- ffmpegでデコードしてpygame（中身はSDL）で表示させてみることにした

# コード

```python:video_player.py
import pygame
import subprocess as sp
import numpy as np

cmd = ["ffmpeg", "-i", "kemono_960x540.mp4", "-loglevel", "quiet", "-an", "-r", "10", "-pix_fmt", "rgb24", "-f", "image2pipe", "-vcodec", "rawvideo", "-"]
pipe = sp.Popen(cmd, stdin = sp.PIPE, stdout = sp.PIPE)

pygame.init()
display = pygame.display.set_mode((960, 540))
running = True

while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
    row_img = pipe.stdout.read(960*540*3)
    img = np.frombuffer(row_img, dtype='uint8').reshape((540,960,3))
    img = np.swapaxes(img, 0, 1)
    #print(img);break
    surf = pygame.surfarray.make_surface(img)
    display.blit(surf, (0, 0))
    pygame.display.update()
pygame.quit()
```

# 動かす

とりあえずmacOSで。

```
$ brew install ffmpeg
$ pipenv install numpy
$ pipenv install pygame
$ pipenv run python video_player.py
```

<img width="512" alt="スクリーンショット 2019-02-08 9.21.07.png" src="https://qiita-image-store.s3.amazonaws.com/0/26038/9062b9d2-12c3-82c5-e0c2-1aab5b12346c.png">


# 参考

- http://teemax.hatenablog.com/entry/2015/03/03/231300
- https://stackoverflow.com/questions/41168396/how-to-create-a-pygame-surface-from-a-numpy-array-of-float32
- https://www.pygame.org/docs/tut/SurfarrayIntro.html
- https://qiita.com/supersaiakujin/items/c580f2aae90818150b35
Jupyterから、AWS Athenaへ接続し、データを取得させる(mac OS)

Jupyterを用いて、Athenaへ接続させる。

ここではpythonライブラリの、
「PyAthenaJDBC」を使用して、Athenaへ接続し、
クエリ結果を取得するまでを目指します。(macOS 10.13.6)

*前提として、PyAthenaJDBCはjavaのjdkを動かすので、
jdkがない方は以下手順1から。
既に所持されている方は手順2から進めてください。

*2019年2月時点で
私の接続環境の、それぞれのバージョンは、
python3.7
jdk11
macOS 10.13.6
です。

*以下リンクは、PyAthenaJDBCの公式ページです。
こちらを参照すると、jdkのバージョンは8以上が必要です。
https://pypi.org/project/PyAthenaJDBC/


手順1
・ターミナルを開いて、JDKをインストールさせる

`brew cask install java`


手順2
・Jupyter(Labまたはnotebook)を開き、以下ライブラリをインストールさせる

```py

!pip install PyAthenaJDBC
!pip install psycopg2
!pip install ipython-sql
```

・以下おまじないを個人の環境に当てはめる
 - アクセスキー
 - シークレットキー
 - リージョン
 - データベース名
 - s3のcsvなど収めているディレクトリ

```py

%load_ext sql
%config SqlMagic.autocommit = False
conn = 'awsathena+jdbc://アクセスキー:シークレットキー@athena.リージョン.amazonaws.com:443/データベース名?s3_staging_dir=s3://s3のcsvなど収めているディレクトリ'
```

・SQLを書いて、実行

```py

%%sql $conn
SELECT * FROM "データベース名"."テーブル名" LIMIT 1; #←ここにお好みのSQLを記載してください。
```

また、
%や%%ってなんじゃらほい?という方は、
マジックコマンドで調べてみると幸せになると思います。

EOF
php-master-changes 2019-02-07

今日はある opcode からオペコードハンドラを得る処理の修正、icu-uc と icu-i18n を icu-io とあわせて必須パッケージ化、ビルド時の ICU 設定を pkg-config 優先にする修正、configure オプション --disable-opcache-filecache の削除、不要テストの削除、array_slice() 実装内の符号違いの比較の修正があった！

# 2019-02-07
## nikic: Fix DIM_OBJ specialization in zend_vm_get_opcode_handler_func
- https://github.com/php/php-src/commit/1a4ffcd2b43f073059e66ed3ed88c4cd7db039dc
- [7.4~]
- ある opcode からオペコードハンドラを得る処理 zend_vm_get_opcode_handler_func() で、SPEC_RULE_DIM_OBJ の[特化ハンドラ](https://nikic.github.io/2017/04/14/PHP-7-Virtual-machine.html#specialization)判定時に静的プロパティへの代入 ZEND_ASSIGN_STATIC_PROP を無視していた問題の修正

## nikic: Require icu-uc and icu-i18n next to icu-io
- https://github.com/php/php-src/commit/a093de8cc12a6671c9b13d0b6d899eca74065fba
- [7.4~]
- icu-uc と icu-i18n を icu-io とあわせて必須パッケージとした
- [PR:3796](https://github.com/php/php-src/pull/3796) でスッと話が出てスッと入った形

## derickr: Use pkg-config for ICU, as the old icu-config has been deprecated
- https://github.com/php/php-src/commit/e2edaa0ceeb4dad61b8d38312c18cb73b160e13e
- [7.2~]
- ビルドシステムで、ICU の設定を pkg-config を優先して使おうとするよう修正
- ICU 本家が [icu-config を deprecated にした](https://unicode-org.atlassian.net/browse/ICU-10464)ため
- 詳細は [PR:3796](https://github.com/php/php-src/pull/3796)

## nikic: Remove --disable-opcache-filecache option
- https://github.com/php/php-src/commit/c32da66e129897f4f103ecc6319332f160ee52ea
- [7.4~]
- ext/opcache で、ビルド時に opcache のファイルキャッシュ機能を無効する configure オプションを削除
- ファイルキャッシュが実験的機能だった頃の名残、[ini で有効無効切り替えられもする](http://php.net/manual/ja/opcache.configuration.php#ini.opcache.file-cache)ので今は不要なオプションだった
- 詳細は [PR:3799](https://github.com/php/php-src/pull/3799)

## nikic: Remove two more zpp variation tests
- https://github.com/php/php-src/commit/689521af8e9b8c6ddbc3b51344baf0ec83e044b1
- [先日](https://qiita.com/sj-i/items/04962b98ab92ee8528df#nikic-remove-zpp-variation-tests)と同様、実質引数処理 ZPP の挙動をテストするだけとなっている不要テストの削除

## nikic: Fix signedness in comparison in array_slice
- https://github.com/php/php-src/commit/53d8fa5af71e91799402224d4a137c2ee759a187
- [array_slice()](http://php.net/manual/ja/function.array-slice.php) の処理で符号違いの比較があったのを修正
wemosでtimer その2

#概要

wemosでtimerやってみた。
timer0やってみた。良くない。

#環境

- wemos d1 r1
- arduino esp8266 v2.5.0-beta2

#写真

![12.png](https://qiita-image-store.s3.amazonaws.com/0/18104/6dfe4527-95eb-6c0d-1203-a144b8fed326.png)


#サンプルコード


```
volatile unsigned long timeSpent = 1;
unsigned long prevm = 0;
void isrt0(void)
{
	timer0_write(ESP.getCycleCount() + 10000L);
	unsigned long now;
	int state = digitalRead(LED_BUILTIN);
	digitalWrite(LED_BUILTIN, !state);
	now = micros();
	timeSpent = now - prevm;
	prevm = now;
}
void setup()
{
	pinMode(LED_BUILTIN, OUTPUT);
	digitalWrite(LED_BUILTIN, LOW);
	Serial.begin(115200);
	noInterrupts();
	timer0_isr_init();
	timer0_attachInterrupt(isrt0);
	timer0_write(ESP.getCycleCount() + 10000L);
	interrupts();
}
void loop()
{
	Serial.println(timeSpent);
	delay(100);
}
```

以上。
【GitHub】README.md に画像を表示させる簡単な方法

#初めに
GitHubのREADME.mdに、自分が作ったサービスのUIや使い方などを画像で表示できたら嬉しいなと思い、調べてみたら簡単にできました。

##①GitHubで新規issueを作成

画像を表示させたいリポジトリで、新規Issueを作成します。

![スクリーンショット 2019-02-08 8.32.29.png](https://qiita-image-store.s3.amazonaws.com/0/269318/ac772314-40f0-f8a2-224f-ca6b322bbc68.png)

##②表示したい画像をドロップ

作成したisssueのコメントに、表示させたい画像をドロップしてきます。
![スクリーンショット 2019-02-08 8.33.24.png](https://qiita-image-store.s3.amazonaws.com/0/269318/3bee9a8e-928d-6ffd-7361-da1d49689dce.png)

##③生成された画像URLをREADME.mdにペースト
こんな感じで画像URLが生成されます。
![スクリーンショット 2019-02-08 8.42.23.png](https://qiita-image-store.s3.amazonaws.com/0/269318/a7d35b68-3aa6-27cb-6c65-fda64fcc3db3.png)

これをそのままREADME.mdにペーストします。

![スクリーンショット 2019-02-08 8.44.46.png](https://qiita-image-store.s3.amazonaws.com/0/269318/0dd1f435-bcbc-01a5-09cd-7f9cef52ac7a.png)

こんな感じで表示されます。issueはcloseさせちゃいましょう。
![スクリーンショット 2019-02-08 8.46.41.png](https://qiita-image-store.s3.amazonaws.com/0/269318/47d9520c-8006-b278-66fe-c266e9619636.png)

超簡単ですね！


#参考記事

https://qiita.com/lowg/items/06dd096e7ed1acce4b1e
Angularで子供の要素のネイティブ要素にアクセスしたい


たとえば、子供の要素のリサイズとかはflexboxに任せたいんだけど、リサイズ結果にアクセスしたいので、ネイティブ要素にアクセスしたい、子供の要素のサイズを計算して後から同じにしたい・・・そんなことありますよね？

Angular Materialのmat-button-toggleを使ってボタンを並べているんだけど、幅を統一したいとします。

```html:my-list.component.html
<mat-button-toggle-group [value]="innerValue" (change)="handleChange($event)">
  <mat-button-toggle *ngFor="let option of cleanedOptions" [value]="option.value">
    {{option.label}}
  </mat-button-toggle>
</mat-button-toggle-group>
```

ふつうに``@ViewChildren``を使うと、子供のコンポーネントが取得されて、そのネイティブのエレメントを取得するには_elementRefという非公式なプライベートっぽい属性があったので、これにアクセスしてとってきていたのですが、絶対違うな、と思って調べてみました。

こんな感じで、``@ViewChildren``に``{read: ElementRef}``をつけると、子供のコンポーネントのElementRefが取得できることがわかりましたので、行儀の悪い方法は使わなくてもすみます。

```ts:my-list.component.ts
import {
  Component,
  AfterViewInit,
  ViewChildren,
  QueryList,
  ElementRef
} from '@angular/core';
import {
  MatButtonToggle
} from '@angular/material/button-toggle';

@Component({
  selector: 'my-list',
  templateUrl: './my-list.component.html',
  styleUrls: ['./my-list.component.scss']
})
export class MyListComponent implements AfterViewInit {
  @ViewChildren(MatButtonToggle, { read: ElementRef })
  children: QueryList<ElementRef>;

  ngAfterViewInit() {
    let maxWidth = 0;
    this.children.forEach(child => {
      maxWidth = Math.max(
        maxWidth,
        child.nativeElement.getBoundingClientRect().width
      );
      console.log(child.nativeElement.getBoundingClientRect());
    });
    this.children.forEach(child => {
      child.nativeElement.style.width = `${maxWidth}px`;
    });
  }
}
```

あとは、ngAfterViewInit()の中で子供の要素のネイティブな属性にアクセスできるので、ここで最大の長さの子供の幅を採ってきて、全部に設定してあげれば、全部の子供の幅を同じにできますね。めでたしめでたい。
laravel git メモ

LaravelをLaradock上で構築した際に、

Sites/laradock
Sites/myproject

Sitesの下の階層でgit initを行なったがエラーが起きた。
原因はlaradockがgit pull　で別のところからリポジトリを引っ張って来ただと考えられる。

したがって、myprojectの下の階層で
git init
git add *
git commit -m"first commit"
git remote 自分のgithubページ
git push
で無事にgithubに公開できた。
getとpostについて調べてみた

いまいち理解出来ていないので、調べてみました。

##概要
・getとpostはhttp通信するときの方法(メソッド)の一つ。(他にはput、patch、head、deleteなど)
・どっちもwebサーバーに情報を渡すもの。
・手紙に置き換えると、封筒の表面に全ての情報が書いてあるのがget、封筒の中の手紙にきちんと情報が書いてあるのがpost。

##get
・リクエスト時にサーバへ送信するデータはリクエストURLの後に付け加えられる
形式→「URL?パラメータ名=値」、?がパラメータのはじまり、&でパラメータの切れ目、=は挟んだ左側がGETの変数名、右側が渡される値
・他人にみられたくないデータは送らない。URLで見えてしまうため
・送信できるデータ量に制限がある。(URLの長さ2048文字が送れるデータ量の限界)
・検索結果の一覧などをブックマークで保存できる
・URLなどを送信したい場合はGETを使う
・渡した値が履歴(キャッシュ)として残る
・パスワードや個人情報を渡す場合は、必ずpost。
・データーベースにアクセスするような内容は書かない(検索エンジンのクローラーがページをみにきたときにデータの追記・変更などをされないように)

##post
・bodyに含めてリクエストする。そのため目で見ることが出来ない。(目に見えないだけで通信を盗聴されてしまうと見えてしまう。決して安全という訳ではない)
・履歴が残らない。
・登録するときに使う(DBに格納する時など)
・他人にみられたくないデータ(パスワードなど)を送る場合
・twitterや掲示板の投稿などで使われる

##参考
・[「GETメソッド」と「POSTメソッド」の違い - 「分かりそう」で「分からない」](https://wa3.i-3-i.info/diff7method.html)
・[GETとPOSTの違いについて - Qiita](https://qiita.com/kanataxa/items/522efb74421255f0e0a1)
・[GETとPOSTの使い分け ついでにPUTとDELETE - Qiita](https://qiita.com/qiita_taro/items/66f2930c5d1cc10722e7)
・[HTTPとPOSTとGET - Qiita](https://qiita.com/Sekky0905/items/dff3d0da059d6f5bfabf)
・書籍-「プロになるためのWeb技術入門」
Railsチュートリアル：rails serverでのエラー

Macのローカル開発環境でRailsチュートリアル。
第1章 1.3.2のrails serverでエラーが発生した時の対処法です。以下の２つのエラーが出ました。



#rails server エラーの内容 その1

```
/Users/ユーザー名/environment/hello_app/config/boot.rb:4:in `require': cannot load such file -- bootsnap/setup (LoadError)
```

bootsnapというファイルはないとエラー。

##解決方法

チュートリアルではbootsnapは必要なさそうなので、
**configu/boot.rbの'bootsnap/setup'をコメントアウト。**



もしbootsnapが必要ならば、

```ruby:Gemfile
gem 'bootsnap'
```
Gemfileに'bootsnap'を追加すれば良いです。

Gemfileに追加したら`$ bundle install`


#rails server エラーの内容 その2

チュートリアルではbootsnapは必要なさそうなので、
configu/boot.rbの'bootsnap/setup'をコメントアウトで進めていくことにしました。

再びrails server
今度は違うエラーが出ました。 

```
/Users/ユーザ名/.rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/railties-5.1.6/lib/rails/application/configuration.rb:81:in `load_defaults': Unknown version "5.2" (RuntimeError)
```
バージョンが5.2ではないというエラー。

##解決方法



```ruby:Gemfile
gem 'rails', '5.1.6'  →'5.2'
```

Gemfileのrailsのバージョンを'5.1.6' から '5.2'に変更。

Gemfileを変更したら`$ bundle install`

そして再びrails server をすると実行することが出来ました。


参考記事ー[(New to Rails) rails server error: cannot load such file — bootsnap/setup (LoadError)]
(https://stackoverflow.com/questions/51493625/new-to-rails-rails-server-error-cannot-load-such-file-bootsnap-setup-load)
自律型データベース(Autonomous Transaction Processing)に Docker + Golang を使って接続

# はじめに

Oracle Cloud には、バージョンアップやチューニング、障害時の回復などの自動化を備えた マネージドデータベースサービス が存在しています。今回は、Autonomous Transaction Processing というデータベースサービスへ、Docker+Go言語を使用してアクセスを行います。

なお、[別の記事](https://qiita.com/sugimount/items/69e11c116a895c9feb97)で、ATPの作成やGo言語からの接続方法などを解説しています。



# GitHubのRepository紹介

今回作成したDockerFileとGo言語のソースコードは、まとめて以下のGitHubに格納しています。必要に応じて参照していただけるとわかりやすいかなと思います。

https://github.com/Sugi275/go-oracledb-test/tree/c84237214512d6e4bc3d653e11b4f0174e8c5ef2



# Docker Fileの作成

ubuntu:18.04 イメージをベースに、以下のように組み立てます。
RUNやCOPYを複数回使用しているため、Docker Imageは複数レイヤー出来てしまっています。
1個にまとめると、Docker Image のレイヤーをまとることが出来て、容量を削減できます。
しかし、やってみたところ1MBほどしか容量を削減できなかったため、読みやすさを重視して以下のようにしています。

DockerFileを使用するときは、各環境に合わせて内容を変更してください。[別の記事](https://qiita.com/sugimount/items/69e11c116a895c9feb97) を参考にすると書き換えがしやすいと思います。

- Walletのzipファイル
- Go言語内のATPへの接続先

```
string trim '
FROM ubuntu:18.04 
MAINTAINER sugimount <https://twitter.com/sugimount>

# set working directory
WORKDIR /opt/oracle

# package install
RUN apt-get update && \
    apt-get install -y wget unzip libaio1 && \
    apt-get clean && \
    rm -rf /var/lib/apt/lists/*

# instant client
RUN wget https://github.com/Sugi275/go-oracledb-test/raw/master/instantclient-basic-linux.x64-18.3.0.0.0dbru.zip && \
    unzip instantclient-basic-linux.x64-18.3.0.0.0dbru.zip && \
    rm /opt/oracle/instantclient-basic-linux.x64-18.3.0.0.0dbru.zip

# runtime linkpath
COPY oracle-instantclient.conf /etc/ld.so.conf.d/oracle-instantclient.conf
RUN ldconfig

# Wallet
COPY Wallet_tutorial1.zip /opt/oracle/instantclient_18_3/network/admin/Wallet_tutorial1.zip
RUN cd /opt/oracle/instantclient_18_3/network/admin/ && \
    unzip Wallet_tutorial1.zip

# default user
RUN adduser --uid 1000 go-oracledb
USER 1000:1000

# go binary
COPY ./bin/go-oracledb-test /home/go-oracledb/go-oracledb-test

EXPOSE 8080
ENTRYPOINT ["/home/go-oracledb/go-oracledb-test"]
' > /home/ubuntu/go-third-party/src/github.com/Sugi275/go-oracledb-test/Dockerfile
```



Docker Image を Build します

```
cd /home/ubuntu/go-third-party/src/github.com/Sugi275/go-oracledb-test
sudo docker build --tag=sugimount/go-oracledb-test:0.0.1 .
```



Image が出来上がっているか確認します

```
sudo docker image list
```



Docker コンテナを起動します

```
sudo docker run sugimount/go-oracledb-test:0.0.1
```



実行例
Go言語では、Autonomous Transaction Processingからデータを取得して、printを実施しているため、標準出力に表示されました。

```
> sudo docker run sugimount/go-oracledb-test:0.0.1
sempno:0000000001 empname:sugimount, gender:1
empno:0000000002 empname:helloworld, gender:0
empno:0000000003 empname:hellooracle, gender:0
empno:0000000004 empname:hellowug, gender:1
```



# debug command memo

```
sudo docker run --rm -it ubuntu:18.04 bash
```

```
sudo docker run --rm -it alpine ash
```



```
sudo docker run --entrypoint="/bin/bash" --rm -it sugimount/go-oracledb-test:0.0.1
```



# 参考URL

https://github.com/wendyeq/go-oracle-docker/blob/master/Dockerfile
https://github.com/cloudsolutionhubs/ATPDocker/blob/master/Dockerfile
Elm日記１

# ５分で書く
@suin さんが「５分でQiita記事書くのがおすすめ」と仰っていたので、実践してみます。

# 主旨
Elmについて学んだことや試したことを書きます。
ある程度まとめてから面白く書こうと思っていたら、いつまでも書かないでいたので、まとまりの悪い記事をちまちま書くことにしました。

# Elmとは
コンパイルするとHTML、JavaScript、CSSを出力してくれる言語です。
素のJavaScriptを頑張って書こうとするとぐちゃぐちゃになりやすいですが、
Elmは言語のルールが厳格なので汚くなりにくい、きれいなソースを維持！
（間違ってたらごめんなさい）
[公式サイト](https://elm-lang.org)
[日本コミュニティ](https://elm-lang.jp)
[日本語ガイド（コミュニティの方々が素敵に訳してくださっています）](https://guide.elm-lang.jp)
英語コミュニティのslackもありますが、ものすごい人数＆チャンネル＆英語オンリーなので、ついていけませんでした。辛うじてHappyNewYear!は読めました。

# 環境構築
ガイド見てやりました！
ただし、自分はスマホからいじれるようにしたかったので、
VPS（AWS Lightsail）を借りてそこにインストールしました。

1. 借りる
1. nodeをインストール
1. elmをインストール

別にVPSじゃなくても、コンパイルしてできあがったHTMLたちをNetlifyにあげるとかすれば動作確認できますが、スマホでそれするのが面倒そうだったので。。。

# スマホで何すんのよ
### ガイド見ながらコマンド実行
Elmには、Replという、コマンドを単発で実行する機能があります。
ガイドを見ながらReplして、動きを確認しつつ学びたかったのです。
### ひとさまのソースコードをコンパイルして実行
ElmはWebサーバー機能も持っています。
「elm reactor」と入力すると、ビルドしつつデプロイしてWebサーバーを起動してくれて、ブラウザからローカルにアクセスして動かせます。
さすがにスマホで開発するのはキビシイですが、githubからcloneしてきた、素晴らしいソースコードを実行してみるのに役立っています。

# VPS特有のつまずき
「elm reactor」すると、localhost:8000にアクセスして動作確認できるようになるのですが、VPS上でそれをやっちゃうと、どうやってアクセスしたらいいもんだか…と困りました。
解決策としては２つ考えました。

1. nginxなどのWebサーバーを別途インストールして、コンパイルしたHTMLたちをそこに置く（ためのshellを作っておく）
1. nginxを使うのは同じなんだけど、リバースプロキシ（というものらしい）の設定をして、nginxに対してのリクエストをElm内Webサーバーに転送する

ふつうに1が良さそうなんですが、2を採用しました！
最初は、リクエストURLがelm/で始まるものだけ転送しようとしたのですが、HTML内で読み込んでいるCSSやJSのファイルたちが絶対パスで書いてあり（俺が書いたわけじゃねーっす。Elmが出力したものです）、思っていたような動きにならず、全てのリクエストをelmサーバーに転送することにしました。
（nginxとかリバースプロキシのあたりでつまずいていたら、@enmaさんが情報くださいました。感謝です。）

# 5分で書けたかな？
気がつけば40分書いていました…こんなに雑なのに…
5分って難しい。次回こそは。
[Chrome拡張機能] 色の差を判別して距離を測ってくれる定規

[Rooler(提供元: blois.us)](https://chrome.google.com/webstore/detail/rooler/hhffakokipfiejidephlfnnpkceipglf?hl=de)

[demo](http://peteblois.github.io/rooler.js/)

面白いアプローチの定規です。

色の差を判別して距離を測ってるようです。
手軽に素早く距離を測れてレイアウト確認がとても捗ります！
今まで苦労して小さい部分の距離を測るのに苦労していましたが、これなら一瞬です！

ただ注意したいのが、色を判別して測っているので、
要素自体を判別しているわけではありません。
例えばあるボックスまでの距離を測りたい時に、
そのボックスに背景と同じ色のボーダーがあった場合、
そのボーダー分の距離は含まれません。
それと要素に影があった場合はその影までの距離になってしまいます。
これはこれで便利ですが、このことは頭に入れておく必要があります。
強力なWebベースIDEであるEclipse Orionの使い方

# Eclipse Orionとは？

>
「Eclipse Orion」は、自分のコンピュータにインストールすることなく、Webブラウザ経由でアクセスすることで開発作業を行うことができるIDE。コードエディタ、デバッガ、ファイルマネージャ、Git、FTP、SFTPクライアントなど、開発に必要な機能を備えている。

by [Webブラウザから利用できるIDE、「Eclipse Orion 17.0」リリース](https://thinkit.co.jp/news/bn/13203)


>
A modern, open source software development environment that runs in the cloud.
Code, deploy and run in the cloud.

by [Orion Hub](https://orionhub.org/mixloginstatic/landing.html?redirect=https%3A%2F%2Forionhub.org%2F&key=FORMOAuthUser)

# どんなことができるの？

## パワフルなコードエディタ

Orionは、コンテンツアシスト、コード補完、エラーチェックおよびコードマップを備えた強力なエディタ。

>
Powerful code editor
Orion is built with a powerful JavaScript code editor, equipped with content assist, code completion, error checking and a code map.

![](https://orionhub.org/mixloginstatic/images/assets/editor.png)
出典：[Orion Hub](https://orionhub.org/mixloginstatic/landing.html?redirect=https%3A%2F%2Forionhub.org%2F&key=FORMOAuthUser)

## 多彩なテーマ

Orionのエディタは、カスタマイズか他のエディタからのテーマのインポートにより、light、darkまたはその他の手間に変更可能。

>
Versatile theming
Orion's editor can be light, dark，or anywhere in between by customization or theme import from other popular editors.

![](https://orionhub.org/mixloginstatic/images/assets/style.png)
出典：[Orion Hub](https://orionhub.org/mixloginstatic/landing.html?redirect=https%3A%2F%2Forionhub.org%2F&key=FORMOAuthUser)

## コンパクトなGit UI
強力なgitサポート、あなたの選択を簡単にし、詳細から単純なものまで、スマートで、単一ページレイアウト。

>
Compact Git UI
Strong git support, easing your choice of control, from detailed to simple, in a smart, single page layout.

![](https://orionhub.org/mixloginstatic/images/assets/git.png)
出典：[Orion Hub](https://orionhub.org/mixloginstatic/landing.html?redirect=https%3A%2F%2Forionhub.org%2F&key=FORMOAuthUser)

# インストール方法

## npm

```bash
npm i orion
```

https://www.npmjs.com/package/orion

## java

[ダウンロードサイト](https://download.eclipse.org/orion/)からダウンロードして、orionファイルをダブルクリック。

## docker

```bash
docker run -p 8080:8080 -it kannkyo/orion
```

https://hub.docker.com/r/kannkyo/orion

# ライセンス

Dual-licensed under the [Eclipse Public License v1.0](https://www.eclipse.org/legal/epl-v10.html) and the [Eclipse Distribution License v1.0](https://www.eclipse.org/org/documents/edl-v10.html).
ProgateのPHPⅡを終えて

[未来電子テクノロジー](https://www.miraidenshi-tech.jp/intern-content/program/)でインターンをしているtsuyoshi514です。

#オブジェクト指向とは
オブジェクト指向とはその名の通りものを中心にした考え方のことです。僕も正直あまり理解できていません(笑)ただネットショッピングサイトなどのカートとかの良く見るものがオブジェクトで、こういったサイトはオブジェクトが複数組み合わせってできていると考えることができます。progateでは料理サイトを作りますが、このサイトを作るためにはクラスという設計図からオブジェクトを作っていきます。

#クラスとインスタンス
クラスは「class クラス名」と定義して、クラス名は大文字で始めます。そしてprogateによればクラス（設計図）を元に生成された実体を「インスタンス」と呼ぶそうです。「new クラス名()」という形でインスタンスを生成でき、インスタンスはクラスの外で作っていきます。そしてクラスの中身にはプロパティとメソッドというものが存在しています。progateによればプロパティとはインスタンスが持つデータのことで、メソッドはインスタンスに関連する処理（関数）のことと書いていますが、この料理サイトでいうとプロパティは料金とか料理名のことで、メソッドはその料金の取得方法のことですね。

#プロパティとメソッドの書き方
で実際にプロパティを書く際には「public $プロパティ名」のように定義します。そしてプロパティにアクセスする際には「->」を用いることでアクセスすることができます。メソッドは「public function メソッド名()」のように定義して、アクセスする際には「インスタンス->メソッド名()」でアクセスすることができます。

#require_onceについて
この料理サイトを作っているとだんだんコードが長くなってきます。すると表示用のファイルとデータ定義用のファイルとクラス定義用のファイルに分けることが必要になってきます。そしてその別のファイルを読み込む際にはrequire_onceを使用することで読み込むことができます。

#カプセル化について
プログラミングでは他の人が使いやすいように公開する機能とそれと逆に触れてほしくない機能はカプセル化することで隠すことができます。カプセル化することで安全に使用することができるので有効に使っていきましょう。

#最後に
はい、progate PHPⅡでは他のところも学ぶことができますが、細かくなるし説明できるほど理解できていないのでこれくらいにしておきます。まだ理解できていないところが多すぎるのでPHPⅢに移る前にもう一度復習したいと思います！
Rennka_Memo

#error:NullReferenceException: Object reference not set to an instance of an object
error:NullReferenceException: Object reference not set to an instance of an object
Valve.VR.SteamVR_Action_Boolean.GetState (SteamVR_Input_Sources inputSource) (at Assets/SteamVR/Input/SteamVR_Action_Boolean.cs:94)

####出来事
お借りしたコード:[こちら](https://framesynthesis.jp/tech/unity/htcvive/)

```c#:GrabTest.cs
using UnityEngine;
using Valve.VR;

public class GrabTest : MonoBehaviour
{
    public SteamVR_Input_Sources hand;
    public SteamVR_Action_Boolean grabAction;

    void Update()
    {
        if (grabAction.GetState(hand))
        {
            Debug.Log("Grab!");
        }
    }
}
```

このスクリプトをGameObjectにアタッチしてそのまま再生すると上記のエラーを吐く。
####解決策
アタッチしたGameObjectのInspectorのGrab Test (Script)のGrab ActionをNoneから変更すると解決する。
楽曲からのボーカル抽出とスケーリング処理 (python3)

# 実装:スケーリング処理　題材:ボーカル抽出
紛らわしいタイトルでしたら申し訳ありません。
>Deep U-Netで自動歌声分離
https://qiita.com/xiao_ming/items/88826e576b87141c4909

@xiao_ming さんのこちらの記事で紹介されているボーカル抽出を使いたかったのですが、公開されているサンプルコードではFFTのフレームにして1024~2048フレーム分（時間軸にしてだいたい33秒~66秒）ぐらいしか処理されなかったので楽曲全体で処理できるようにスケーリング処理をしたという内容になります。中身はただのスケーリング処理なのですが、もしかしたら自分と同じように1曲分ボーカル抽出をやりたいというような人がいるかもと思ったので記事にしてみようと思いました。あとQiitaへの投稿も多くないのでそれの勉強も兼ねてということで。
変数の付け方とかがアホっぽいのはご勘弁を。

##該当コード
公開されているdoexperiment.pyを使うことでボーカル抽出のデモができるようになっています。（同じディレクトリにutil.pyもある前提）

```python:util.py
import uitl.py

#init
fname = "test.wav"
mag, phase = util.LoadAudio(fname)
start = 0#2048
end = start+1024
print(mag.shape)
print(mag[:,start:end].shape)

#adapt mask
mask = util.ComputeMask(mag[:,start:end], unet_model="unet.model", hard=False)

#save
util.SaveAudio(
    "./wav/"+"vocal-%s" % fname, mag[:, start:end]*mask, phase[:, start:end])
util.SaveAudio(
    "./wav/inst-%s" % fname, mag[:, start:end]*(1-mask), phase[:, start:end])
util.SaveAudio(
    "./wav/orig-%s" % fname, mag[:, start:end], phase[:, start:end])
```

そしてこのままでは曲の一部しかボーカル抽出できない＋maskの適用は32~1024フレーム分しかできないので、これをスケーリング処理にして全時間分適用させるようにしたものが以下のコードです。

```python:doexperiment2.py

import util
import numpy as np

fname = "test.wav"
mag, phase = util.LoadAudio(fname)


# init
start = 0
end = start+1024
initnum = 10
if len(mag[:,start:end][0]) != 1024:
    end = start+512
    initnum = 9
    if len(mag[:,start:end][0]) != 512:
        print("too short. input more long File")

#first processing
mask = util.ComputeMask(mag[:,start:end], unet_model="unet.model", hard=False)
savemag = mag[:,start:end]*mask
savemag1 = mag[:,start:end]*(1-mask)
start = end
end = start+2**initnum

print("length abst data", mag[:,start:end].shape)

# loop processing
diff = 0
endpoint=True
while(endpoint):
    num = initnum
    while len(mag[:,start:end][0]) != 2**num: #need modity
        num-=1
        end = start+2**num
        if num==5:
            endpoint = False
            diff = len(mag[:,start:end][0])
            break

    if (endpoint):
        mask = util.ComputeMask(mag[:,start:end], unet_model="unet.model", hard=False)
        savemag = np.concatenate((savemag,mag[:,start:end]*mask),axis = 1)
        savemag1 = np.concatenate((savemag1,mag[:,start:end]*(1-mask)), axis = 1)
        print("concatenate list")
        # print(savemag-mag[:,start:end])

    else:
        print(np.shape(savemag))
        # print(savemag)
        print()
        break

    start = end
    end = start+2**num


end -= 2**num
util.SaveAudio(
    "./wav/vocal-all%s" % fname, savemag, phase[:, :end])
util.SaveAudio(
    "./wav/inst-all%s" % fname, savemag1, phase[:, :end])
```
originalはどうせ適応前のデータあるならいらないかなと思って保存のコードを省きました。

###改変コードについて
大雑把に説明すると、mask適応をしたフレームのmagをnumpyのconcatenateでスタックしていきます。
最後にutil.SaveAudioを使って全範囲のmag, phaseを合わせて音声ファイルとして保存します。
細かい所で色々微調整していますが基本的にはフレームが2^(initnum)より小さかったら2^(initnum-1)より大きいか調べる
というような処理をして最後にphaseの長さと揃えるために帳尻合わせをしています。
全時間分と散々書いていますが厳密には後ろの残りフレームが64以下になると処理をやめてしまいますので、最後の数秒は処理ができていないことになります。なんてこった。

##今後の展望
色々雑な点はありますがまずは指定フォルダ内の全ファイルにこれが適応できるようにクラス作ったりフォルダ内のファイル名一覧取得とかをやっていきたいと思います。
春休み到来! RX 470 8GB マイニングエディションと ROCm TensorFlow + StyleGAN で始める顔生成

春休み到来!

RX 470 8GB マイニングエディションと ROCm TensorFlow で StyleGAN で顔生成を始めよう!

できました.

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">ねんがんの RX470 8GB mem マイニングエディション + ROCm 2.1 + TensorFlow での StyleGAN の実行に成功したぞ!!!!!! 💪💪💪💪💪🎉🎉🎉🎉🎉🎉🎉🤘🤘🤘🤘😻😻😻😻😻㊗️㊗️㊗️㊗️㊗️🤩🤩🤩🤩🤩🤩🤩☀️☀️☀️☀️😊😊😊😊😊😎😎😎😎😎😎 <a href="https://t.co/omZ3gJCEmV">pic.twitter.com/omZ3gJCEmV</a></p>&mdash; Syoyo Fujita ⚡️ No ray tracing No life (@syoyo) <a href="https://twitter.com/syoyo/status/1093526177891770369?ref_src=twsrc%5Etfw">2019年2月7日</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>



## 環境

* Ubuntu 18.04
* ROCm 2.1 + TensorFlow 1.12
* RX 470 8GB マイニングエディション
* Python 3.6+(miniconda)

## セットアップ

ROCm TensorFlow を頑張ってインストールしよう!

https://qiita.com/syoyo/items/c6bc6dd4efbc10049640

2019 年 2 月 7 日時点の最新である ROCm 2.1 + MIOpen 1.7.1 で動作確認しました.

StyleGAN のオフィシャル実装は, 型付け機能や typeguard モジュールを使っているため, python 3.6+ が必須です. conda で python 3.6 環境を作っておきましょう.

```
$ conda create -n stylegan python=3.6
$ source activate stylegan
```

## StyleGAN を動かす.

https://github.com/NVlabs/stylegan

README にあるように git clone します.

### 実行する

ROCm TensorFlow 用の修正はありません. そのままで動きます.

```
$ python pretrained_example.py
```

でいけます. PIL など module が見つからないエラーが出たら, 適宜 pip install ください.
(PIL については pip install image で一応動きますが, 推奨される方法かしらん?)

### /gpu:0 が見つからないエラーが出る場合

ROCm TensorFlow ではなく, 通常の TensorFlow をソースコードからビルドなりして XLA を有効にしている場合は,

`/gpu:0` がみつからないエラーが出ますので,

https://github.com/NVlabs/stylegan/blob/master/dnnlib/tflib/network.py#L408

の部分を `/job:localhost/replica:0/task:0/device:XLA_GPU:0` あたりに書き換えると動きます.

https://www.tensorflow.org/xla/jit

### マイニングしながら動かす.

学習では 12 GB 以上のメモリが必要とありますが, GAN の実行だけであればあまりメモリを使わないようで, マイニング(ethminer)しつつ動かすことができました.

## 学習を動かす.

ROCm 2.2 + TensorFlow 1.13 で, NVIDIA に比べると 3~5 倍は遅いですが(ROCm は対応していない op/layer があり一部 CPU fallback している?)ですが, 学習が走るのを確認しました(それより以前では無限ループかなにかで学習が進まなかった)

## TODO

* ROCm で遅い原因をプロファイラーを使って原因を突き止める.
* StyleGAN で生成された顔を, ブロックチェーン(e.g. ERC721)で管理し, 肖像権管理を行う.
Windows 10 Pro x64 + Excel2016 x86 VBA で 可変長配列、Type、Dictionary を使う

#目的
自分の中では、可変長配列、Type、Dictionary はセットで使うことが多い気が
しているので、まとめてメモっておく
##ロジック的なもの
・ReDim typArry(3)：可変長配列のサイズを４と定義する
　※添え字の最小値は0、最大値は3、内容は未定義
・ReDim typArry(3)
　ReDim Preserve typArry(4)：
※typArry(3)までの値は保持
※typArry(4)の内容は未定義
・Dictionary.Exists(Key)：Keyが存在するかをチェックする
・Dictionary.Add Key, Value：Key, Valueのペアを登録する
・Variant = Dictionary.Keys：Keyの配列を取得する
・Dictionary.Item(Key)：Keyに対応するValueを取得する
対象データは[郵便番号データダウンロード](http://www.post.japanpost.jp/zipcode/dl/kogaki-zip.html)の全国一括(KEN_ALL.CSV)より一部抜粋
##サンプルコード
```vb
Option Explicit

Private Type typDemo
    Code    As String
    Name    As String
End Type

Private Sub UserForm_Initialize()

    Dim typArry()   As typDemo
    Dim varkeys     As Variant
    Dim keys        As Variant
    Dim intCnt      As Integer
    '
    '   配列の添え字は 0～3
    '
    ReDim Preserve typArry(3)
    Dim dict As New Dictionary
    Dim dcnt As New Dictionary
    '
    '   使用データ
    '
    typArry(0).Code = "01"
    typArry(0).Name = "北海道"
    typArry(1).Code = "02"
    typArry(1).Name = "青森県"
    typArry(2).Code = "03"
    typArry(2).Name = "岩手県"
    typArry(3).Code = "01"
    typArry(3).Name = "北海道"
    '
    '   LBound 関数は配列の最小インデックス
    '   UBound 関数は配列の最大インデックス
    '
    For intCnt = LBound(typArry) To UBound(typArry)
        If dict.Exists(typArry(intCnt).Code) Then
            '
            '   Dictionary に Key が登録済
            '
            Debug.Print "dict.Exists: ", _
                        intCnt, _
                        typArry(intCnt).Code, _
                        typArry(intCnt).Name
            '
            '   出現数のカウント
            '
            dcnt.Item(typArry(intCnt).Code) = dcnt.Item(typArry(intCnt).Code) + 1
        Else
            '
            '   Dictionary に Key, Value のペアを追加
            '
            dict.Add typArry(intCnt).Code, typArry(intCnt).Name
            '
            '   出現数のカウント：初期値
            '
            dcnt.Add typArry(intCnt).Code, 1
        End If
    Next
    '
    'Dictionary に登録された項目数
    '
Debug.Print dict.count
    '
    '   登録されたkeyをVariantのリストとして取得する
    '
    varkeys = dict.keys
    '
    '   Dictionary より Key, Value のペアを取得する
    '
    For Each keys In varkeys
        Debug.Print keys, dict.Item(keys), dcnt.Item(keys)
    Next
'
End Sub
```
Scalaでスネークケースをキャメルケースに変換する方法

# 概要
スネークケース(snake case)の文字列を、キャメルケース(lower camel case)に変換する方法をいくつか試してみました。
簡単のため、元の文字列はスネークケースとして `well-formed` であるとします。
(`_foo` `bar_` `B_aZ` などの文字列は想定しない)

# 試した実装方法

## Iteratorを使った命令型の方法
普通にIteratorでループして、 `_` の場合はもう一文字読み込んで大文字にしています。
(注：文字列の末尾が `_` だと落ちます)

```scala
  def byIte(str: String): String = {
    val it = str.iterator
    val sb = new StringBuilder
    while (it.hasNext) {
      val c = it.next()
      sb + ( if (c == '_') it.next().toUpper else c )
    }
    sb.toString()
  }
```

## 正規表現を使った方法

`replaceAllIn` を使って、 置換をかけます。

```scala
  private val Reg = """_([a-z0-9])""".r

  def byRegex(str: String): String = Reg.replaceAllIn(str, { m => m.group(1).toUpperCase } )
```

## foldLeftを使った方法

こちらは、ググって見つけたいかにも関数型っぽい素敵なやり方です。
`List` は先頭への要素追加が高速なので、最後に `reverse` をかけて反転させています。
`foldLeft` の動きを理解していないと、よくわからないかもしれません。
タプルの1つ目はアキュムレータで、 `List[Char]` 型です。2つ目は個々の要素で `Char` 型です。

```scala
 def byFold(str: String): String = {
    str.toList.foldLeft(List.empty[Char]){
      case ('_'::xs, c) => c.toUpper::xs
      case (xs, c) => c::xs
    }.reverse.mkString
  }
```

## zipを使った方法

大文字にするかどうかの判定にはひとつ前の文字が必要ということで、 `List[Char]` と、1文字シフトした `List[Char]` を `zip` して、ひとつ前の文字とのタプルを使って判定してみたものです。

```scala
  def byZip(str: String): String = {
    val chars = str.toList
    val cs =
      for ((c1, c2) <- chars zip (' ' :: chars) if c1 != '_' )
        yield (c1, c2) match {
          case (c, '_') => c.toUpper
          case (c, _) => c
        }
    cs.mkString
  }
```

処理イメージは以下です。(※は読み飛ばし)

||0|1|2|3|4|5|6|
|:-----|:-:|:-:|:-:|:-:|:-:|:-:|:-:|
| 文字 | f | o | o | _ | b | a | r |
| 一つ前 |  | f | o | o | _ | b | a |
| 結果 | f | o | o | ※ | B | a | r |

# パフォーマンス

各方法について、手元の環境で計測した結果の比較です。
`"check_performance_of_snake_to_camel_conversion"` という文字列を10万回変換した時間です。

| 方法 | ミリ秒 |
|:----|-----:|
| Iterator | 135 |
| Regex | 605 |
| foldLeft | 286 |
| zip | 367 |

やはり、正規表現が一番遅いですね。
Iteratorで回す方法が最速でした。

よりシンプルな実装方法や、高速な実装方法をご存知の方は是非コメントください！
Android Dagger2 利用例

# はじめに
KotlinでDIを実装してみました。
DIを使うメリットは以下だと考えています。

- 難読化の解消
- テストコードが作成しやすくなること
- メンテナンス性の向上

今回はlateinitしているプロパティにオブジェクトを注入します。

- Kotlin 1.3.20
- Dagger 2.21

# Dagger2の導入
```gradle:app/build.gradle
apply plugin: 'kotlin-kapt'

// ...

dependencies {

    // ...

    // Dagger
    implementation 'com.google.dagger:dagger:2.21'
    annotationProcessor 'com.google.dagger:dagger-compiler:2.21'
    kapt "com.google.dagger:dagger-compiler:2.21"
    kaptTest "com.google.dagger:dagger-compiler:2.21"
}
```

# Module
注入したいオブジェクトを返すメソッドを作成します。

```kotlin:ArticleViewModelModule.kt
@Module
class ArticleViewModelModule(private val articleList: MutableList<Article>) {

    @Provides
    @Singleton
    fun provideArticleListLiveData(): MutableLiveData<MutableList<Article>> {
        val mutableLiveData = MutableLiveData<MutableList<Article>>()
        mutableLiveData.value = articleList
        return mutableLiveData
    }

    @Provides
    @Singleton
    fun provideArticleList(): MutableList<Article> {
        return articleList
    }
}
```
クラスに `@Module` をつけ、メソッドに `@Provides` をつける必要があります。
`@Singleton`をつけると呼ばれるたびに作成せずに、常に1つのインスタンスを返します。

# Component
どこになんのモジュールを注入するかを定義します。

```kotlin:ArticleViewModelComponent.kt
@Singleton
@Component(modules = [ArticleViewModelModule::class])
interface ArticleViewModelComponent {
    fun inject(viewModel: ArticleViewModel)
}
```
ArticleViewModelModuleをArticleViewModelに注入したい場合、
このように書きます。

# ビルド
ModuleとComponentの作成後、ビルドする必要があります。
ビルドしないと呼び出す際に必要なclassが見つかりません。

# 呼び出し
呼び出し側はこのようになります。

```kotlin:ArticleViewModel.kt
class ArticleViewModel : ViewModel() {
    @Inject
    lateinit var articleListLiveData: MutableLiveData<MutableList<Article>>
    @Inject
    lateinit var articleList: MutableList<Article>

    fun set(articleList: MutableList<Article>) {
        val articleViewModelComponent = DaggerArticleViewModelComponent
                .builder()
                .articleViewModelModule(ArticleViewModelModule(articleList))
                .build()
        articleViewModelComponent.inject(this)
    }

    // ...

}
```

lateinitしているプロパティに `@Inject` アノテーションをつけます。
Componentのインスタンスを作成し、injectメソッドを呼び出して依存注入完了です。
Android Studio 実機デバック設定 (Xperia XZ1 - version 8.0.0)

# はじめに
Android Studio で実機デバックの設定に躓いてしまったため解決法の備忘録。

使用した実機: Xperia XZ1 (Android version 8.0.0)

結論としてドライバの更新を行って解決した。

# 問題点
Android Studio の**[run]**から実機でデバックをしようとしたが、実機が認識されていなかった。

# 解決手順
以下のURLを参考にした。
https://developer.android.com/studio/run/oem-usb?hl=ja

1. ページ下部の[Sony Mobile Communications]の欄からSony公式サイトへ移動。
2. [Xperia XZ1 driver] をダウンロード
3. Windows Explorer から「PC」を右クリックし、「管理」を選択
4. 左のパネルから「デバイス マネージャー」を選択
5. 「ユニバーサル シリアル バス コントローラー」から「ADB Driver」を選択
6. 2.でダウンロードしたフォルダからドライバをインストール

以上で認識してくれました。

# その他
自分の環境ではPCに接続するUSBポートによってもうまく認識されませんでした。
USB2.0 のポートではうまく認識されました。

(2019/10/06 追記)
USBケーブルによってもうまくいかない様子。
まずはUSBケーブルを交換してみよう。
Cloud9でブラウザ表示を閉じちゃった時の復活方法

## 事の起こり
今日も元気にRuby on Railsするぞい！と開活(開発活動。今1秒考えて作った造語)していたらウインドウが散らばりまくってどこに何があるのかまるでわからん状態になった。
片っ端から閉じてたらブラウザ表示するウインドウまで閉じちゃった…。
こんなしょうもないことで5分くらいずーっと焦ってたので、次やらかしたときのための備忘録。

## どこから開くのか

こ↓こ↑ (Preview > Preview Running Application)

<img width="1544" alt="スクリーンショット 2019-02-06 0.05.20.png" src="https://qiita-image-store.s3.amazonaws.com/0/304374/1850d2d5-2643-8dd9-ac9c-920a6606ff83.png">

ポチッとすると以下みたいに開きます。めでたしめでたし。

<img width="1544" alt="スクリーンショット 2019-02-06 0.05.27.png" src="https://qiita-image-store.s3.amazonaws.com/0/304374/adefcc1f-3256-c3d3-cd2b-95f3045777d6.png">

## そんだけ？

そんだけです。
Qiita書くと良いよって聞いたけどネタがこのくらいしかなかったんだよてへぺろ。
gulp4のインクリメンタルビルド

ひさびさにgulpに戻ってきて、初級者脱出でつまづいたところをメモしておきます。

記事の対象は「既存のプラグインを組み合わせてビルドやリントをかけられる」くらいのレベルです。

## スタート

普通にビルドするときは下のような感じ。
ひとまず Babel 想定ですが、TypeScriptやSCSSなども同じです。

```js:gulpfile.js
const gulp = require('gulp');
const babel = require('gulp-babel');

const SRC = 'src/**/*.js';
const DEST = 'build';

gulp('default', () => {
  return gulp.src(SRC)
    .pipe(babel, { babelrc: true })
    .pipe(gulp.dest, DEST);
});
```

## インクリメンタル

インクリメンタルビルドは下のような感じ。
`lastRun({ since: '<task name>` })`がキモです。

```js:gulpfile.js
gulp('build:incremental', () => {
  return gulp.src(SRC, lastRun({ since: 'build:incremental' }))
    .pipe(babel, { babelrc: true })
    .pipe(gulp.dest, DEST);
});
```

実際には `gulp.watch` と組み合わせることが多いです。

```js:gulpfile.js
gulp('watch', () => {
  return gulp.watch('SRC', gulp.parallel('build:build'))
});
```

## 重複をなくす

最初にコードを載せます。

```js:gulpfile.js
...
const through = require('through2');
const lazypipe = require('lazypipe');

...

const buildTasks = lazypipe()
  .pipe(babel, { babelrc: true })
  .pipe(gulp.dest, DEST);

gulp('build', () => {
  return gulp.src(SRC)
    .pipe(buildTasks())
    .pipe(through());
});

gulp('build:incremental', () => {
  return gulp.src(SRC, { since: gulp.lastRun('build:incremental') })
    .pipe(buildTasks())
    .pipe(through());
});
```

新しいものがたくさん出てきました。

まず、`lazypipe` です。これは事前に複数のプラグインのpipeを組み合わせて新しいプラグインをつくるものです。
これを使うと、ワークフローの共通化ができるようになります。
元になるプラグインを直接呼び出さず、それ自体を引数とともに渡していることに注意してください。

ただし、重大な欠点としてそのまま使うと、**タスクが終了しません**。
これは既知の問題ですが、作者は gulp4 に対応する予定がないそうです（gulp あるある）。
ではどうするか、というのが上のワークアラウンドです。
入力に手を加えず後続に流す`through`を使うことで正しくストリームの終了イベントがハンドルできるようになります。

今回のコードは [Github](https://github.com/karak/gulp-tools) に置いてあります。
Gem::LoadError Specified 'sqlite3' for database adapter　・・・　エラー

プログラミングの初学者です

何かしらのアウトプットをしていこうと思い、今回が初投稿です。


#  rails g コマンドが実行できない 

Cloud９で作業していた所、rails　gコマンドが実行できなくなりました。

ページを確認すると、

[railserror.PNG](https://qiita-image-store.s3.amazonaws.com/0/354877/b7f61645-04fa-93ea-ac00-4252d3eb3c65.png)


と表示が出ています。

しかし、gemfileを見てもSqlite3の記述はある・・・
bundle update をしてもだめでした。

#　原因

以下の記事を実行した所、無事実行できました。
https://teratail.com/questions/172684

gemfileのsplite3のバージョン指定が原因だった模様です。

gem 'sqlite3'
から
gem 'sqlite3', '~> 1.3.6'

にすることでコマンドが実行できるようになりました。

Web上で教えて頂ける先生がいるのは独学未経験の僕には、本当にありがたい
Java Repository of Eclipse with Maven : Missing artifact〜

# はじめに
大したことないは無いメモなので、読む価値はあんまりないです。

# 何が起こったのか
OS的にまっさらな状態でEclipseをインストールというか解凍。mavenでjunitとかの設定をすると、「Missing artifact・・・」とかエラーが出てしまう。
全く問題が無い別PCからEclipseを丸ごとコピーして、cleanで起動しても同じ現象が。

[こちら](https://teratail.com/questions/68163)の方と同じような現象が発生したわけですが、発生するPCと発生しないPCがあったりして困惑。

# 解決策
よくわかりませんが、Eclipseで以下を実行したらエラーが出なくなりました。
プロジェクトを右クリック->[Maven]->[ソースのダウンロード]
pom.xmlを保全したら自動でDLしてくれるんじゃないのでしょうか？

# まとめ
よくわかりません。
VueのtemplateをHTMLからpugに自動で書き換える方法

プロジェクトの全てのVueファイルのtemplateの言語をHTMLからpugに変える必要があったので、その手順を解説します。
[vue-pug](https://github.com/ToshioAkaneya/vue-pug)というnpmモジュールを使用します。
## VueのtemplateをHTMLからpugに自動で書き換える方法
まずはインストールします。

```bash
npm i -g vue-pug
```
カレントディレクトリ以下の全てのVueファイルをHTMLからpugに変換したい場合は次のようにします。

```bash
vue-pug ./
```
特定のファイルについてのみ適用したい場合は、ファイルを指定します。

```bash
vue-pug App.vue
```
これでOKです。

## あとがき
vue-pugは僕が公開した初めてのnpmパッケージです。これについては下の記事で詳しく書いているのでぜひ。
[初めてのnpmパッケージを公開して良かったことを書く](https://qiita.com/ToshioAkaneya/items/4f5af2a3b4e98f6d3a1c)
## 終わりに
私は現在、Web3のサービスの開発をしています。詳しくはこちらの記事をご覧下さい。
        [無料でイーサリアムが当たる、Web3時代の寄付サイトを作った話](https://note.com/kenroda/n/n814347fbdcd7)