OmniAICreator/Qiita-1.07M huggingface dataset:
Coder上で秒でサーバを立てる

Coder使ってみた！
[ブラウザでVS codeが使えるクラウド IDEの大本命「Coder」](https://qiita.com/MegaBlackLabel/items/bbec97db769667962bce)

Coderはブラウザ上でVSCodeがそのまま使えるIDEです。

多分本来の使い方ではないですが、
Coder上で秒速でサーバを立てて動作確認する方法。
プロジェクトを作成して、index.htmlを作成する。

```index.html
<html>
    <head>
        <title>test</title>
    </head>
    <body>
        hello world!!
    </body>
</html>
```

プロジェクトのターミナルからコマンドが叩けます。
npmは最初から使えます。

<img width="943" alt="スクリーンショット 2019-03-01 18.00.52.png" src="https://qiita-image-store.s3.amazonaws.com/0/55077/6bc027d2-33c7-9ac8-0ca4-297d23da57db.png">


serveでサーバを立てるためのパッケージ
ngrokはlocalhostをグローバルに公開するためのパッケージ
をインストールします。

```.sh
$ npm install serve ngrok
$ npx serve . &

   ┌─────────────────────────────────────────────────┐
   │                                                 │
   │   Serving!                                      │
   │                                                 │
   │   - Local:            http://localhost:5000     │
   │   - On Your Network:  http://172.20.64.2:5000   │
   │                                                 │
   └─────────────────────────────────────────────────┘

$ npx ngrok http 5000

ngrok by @inconshreveable                                                                                                                                            (Ctrl+C to quit)

Session Status                online
Session Expires               7 hours, 59 minutes
Version                       2.2.8
Region                        United States (us)
Web Interface                 http://127.0.0.1:4040
Forwarding                    http://1d8aee5b.ngrok.io -> localhost:5000
Forwarding                    https://1d8aee5b.ngrok.io -> localhost:5000

Connections                   ttl     opn     rt1     rt5     p50     p90
                              0       0       0.00    0.00    0.00    0.00
```

ngrokで払い出されたURLにアクセス
（この場合は、`https://1d8aee5b.ngrok.io`）

<img width="498" alt="スクリーンショット 2019-03-01 18.02.40.png" src="https://qiita-image-store.s3.amazonaws.com/0/55077/4428f5c2-3ce7-77c6-de02-8ba7ff880399.png">
SW4STM32で逆アセンブルリストを出力する

# はじめに
System Workbench for STM32 (SW4STM32)で開発を行うとき，コンパイラの動作を調べるために逆アセンブルリストが必要になることがある．そのための設定をメモ．

環境はmacOS Mojave，SW4STM32 v2.8．ターゲットはNucleo F411RE．

# 逆アセンブルリストの出力
Project Explorerでプロジェクトを選択し，メニューバーの"Project">"Properties"をクリックする．

"C/C++ Build">"Settings"をクリックし，"Build Steps"タブを選択する．

![Screenshot 2019-03-01 at 17.50.49.png](https://qiita-image-store.s3.amazonaws.com/0/320451/f30c36f0-9774-40c7-c9f8-aaf3e1bf9cb9.png)


"Post-build steps"の”Command: "欄を以下のように変更する．

```shell:Command:
arm-none-eabi-objdump -D -Sd "${BuildArtifactFileBaseName}.elf" > "${BuildArtifactFileBaseName}.lst" && arm-none-eabi-objcopy -O binary "${BuildArtifactFileBaseName}.elf" "${BuildArtifactFileBaseName}.bin" && arm-none-eabi-size "${BuildArtifactFileName}"
```

"OK"をクリックし，ビルドすると，.binや.elfといったバイナリファイルと同じ階層に.lstの逆アセンブルリストが出力される．

![Screenshot 2019-03-01 at 17.54.44.png](https://qiita-image-store.s3.amazonaws.com/0/320451/3b3fb829-0b05-3288-187d-cfacdf5da070.png)

以上．
[Python] if __name__ == '__main__'の意味するところ

## はじめに
Pythonをやっている人ならこの「おまじない」のようなものをどこかで見たことがあると思います。

今回はこれが実際どんな意味を表しているか、詳しく見ていきたいと思います。

## なんのためにあるのか
一言でいうと、この`if __name__ == '__main__'`はこのPythonファイルが

```shell
$ python ファイル名.py
```

というように実行されているのかを判定するif文です。

## ないと何が困るのか
ためしに`if __name__ == '__main__'`のないPythonファイルを作ってみます。

```py:hello_world.py
def main():
    print('Hello World!')

main()
```

これを実行すると当然ですが、

```shell
$ python hello_world.py
Hello World!
```

と表示されます。

しかし・・・

この同じディレクトリでこのPythonファイルをimportしてみると、

```
$ python
>>> import hello_world
Hello World!
```

というように「Hello World!」が表示されてしまいます。。

Pythonでは、importされたファイルの中身は実行されてしまうのでこのようなことがおきてしまうのです。

## 本題

では`__name__`には何が入っているのでしょうか？

これは特殊な変数で、このPythonファイルの**モジュール名**が文字列で入っています。

たとえば、import hello_worldとされた場合、hello_world.py内部での`__name__`は`hello_world`という文字列になります。

そして、python hello_world.pyとして実行した場合は、`__name__`は`__main__`という文字列になります。

これを実際に確認してみましょう。

先程のhello_world.pyを少し書き換えます。

```py:hello_world.py
def main():
    print('Hello World!')

main()
print(f'__name__: {__name__}')
```

これを先程と同じように２通りの方法で実行してみましょう。

まず、普通に実行してみます

```shell
$ python hello_world.py
Hello World!
__name__: __main__
```

次に、importして試してみます。

```
$ python
>>> import hello_world
Hello World!
__name__: hello_world
```

ちゃんと両方とも期待どおりの結果になり、結果を確認することができました。

## おわりに
またひとつ自分の中の疑問が解決されました。

最後まで読んでいただきありがとうございます。
予測精度評価指標をPythonで実装する

# 構築したアルゴリズムの予測結果を評価するための誤差について

以下の誤差を紹介します。

||略称|日本語|
|:-----------------|:------------------|:------------------|
|Mean Absolute Error|MAE|平均絶対誤差|
|Mean Absolute Persentage Error|MAPE|平均絶対誤差率|
|Root Mean Squared Error|RMSE|平均平方二乗誤差|
|Root Mean Squared Persentage Error|RMSPE|平均平方二乗誤差率|

## Mean Absolute Error
基本。

```math
\dfrac {1}{N} \sum ^{N}_{i=1}\left| \widehat {y_{i}}- y_{i}\right|
```

```python
from sklearn.metrics import mean_absolute_error
mean_absolute_error(true, pred)
```


## Mean Absolute Persentage Error
異なるスケール間の誤差を比較できる。

```math
\dfrac {100}{N}\sum ^{N}_{i=1}\left| \frac{ \widehat {y_{i}}-y_{i} }{y_{i}}\right|
```
```python
import numpy as np
np.mean(np.abs((pred - true) / true)) * 100
```


## Root Mean Squared Error
MAEに比べ誤差の影響が大きい。

```math
\left(\dfrac {1}{N}\sum ^{N}_{i=1}\left( \widehat {y_{i}}-y_{i} \right)^2\right)^{\frac{1}{2}}
```
```python
import numpy as np
from sklearn.metrics import mean_squared_error
np.sqrt(mean_squared_error(true, pred))
```

## Root Mean Squared Persentage Error
誤差の影響を大きく反映し、かつ異なるスケール間の誤差を比較できる。

```math
100\left(\dfrac {1}{N}\sum ^{N}_{i=1}\left( \frac{\widehat {y_{i}}- y_{i} }{y_{i}}\right)^2\right)^{\frac{1}{2}} 
```
```python
import numpy as np
np.sqrt(np.mean(((pred - true) / true)**2))*100
```
## これすごい
手書きの式をTeX式にしてくれます。
https://webdemo.myscript.com/views/math/index.html
swap領域を使っているプロセスを表示する。

swap領域を使っているプロセス5件を調べるワンライナーを作ってみました。かなり強引ですが。。。

`# echo "==== swap ====" ; grep VmSwap /proc/*/status | sort -k 2 -t ":" -r | head -5 ; echo "==== ps ====" ; grep VmSwap /proc/*/status | sort -k 2 -t ":" -r | head -5 | awk -F'[/]' '{print $3}' | xargs ps -p`

実行例を載せておきます。

```
# echo "==== swap ====" ; grep VmSwap /proc/*/status | sort -k 2 -t ":" -r | head -5 ; echo "==== ps ====" ; grep VmSwap /proc/*/status | sort -k 2 -t ":" -r | head -5 | awk -F'[/]' '{print $3}' | xargs ps -p
==== swap ====
/proc/42790/status:VmSwap:        193052 kB
/proc/107858/status:VmSwap:        25364 kB
/proc/774/status:VmSwap:           12484 kB
/proc/108833/status:VmSwap:        10604 kB
/proc/109552/status:VmSwap:         6364 kB
==== ps ====
   PID TTY      STAT   TIME COMMAND
   774 ?        S      0:00 /sbin/dhclient -d -q -sf /usr/libexec/nm-dhcp-helper -pf /var/run/dhclient-ens160.pid -lf /var/lib/NetworkManager/dhclient-b79ef9d4-5822-4
 42790 ?        Sl   115:54 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid
107858 ?        Ssl    0:14 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid
108833 ?        Ssl   12:22 /usr/bin/python2 -Es /usr/sbin/tuned -l -P
109552 ?        Ss     4:57 /usr/sbin/httpd -DFOREGROUND
```
cloud9にrailsアプリをクローンした後、postgresqlをマイグレーションする方法

初めてのクローンと初めてのポスグレマイグレーションで躓き、かなりの時間を要したので自分用のメモも兼ねて一連のやり方を書いておく。

1. `sudo service postgresql start` まずは手始めに試してみる。エラーが帰ってくる。

2. [niki12260714の日記]("http://niki12260714.hatenablog.com/entry/2018/05/17/105557")このサイトを参考にしてpostgresをインストール（Postgres95にした）。
3. postgresの初期化まで進めると 1. の起動が効くはず（但しインストールの際にバージョンを指定した場合はpostgresql95のように"95"と指定しないとエラーになりました）。この段階で好きなアプリを`git clone`しときました。

4. `sudo -u postgres psql` これを打つとsuperuserのpostgresとして`psql`を使えるようになります（githubのgitみたいなもんです）。`postgres=#`が出てきます。

5. ここで新規ユーザー、新規データベースを作成することができます。デフォルトのpostgresのままでデータベースを作成しても良かったのですが新規のユーザーを作成し、データベースも作成しました。

```
CREATE ROLE 名前 SUPERUSER; # ユーザー作成

create database データベース名前 owner ユーザー名; #データベース作成
```
`owner`を書かないとデフォルトユーザーpostgresのデータベースになるので気をつける。ユーザーにデータベースを作成する権限が必要なのでここ>>[【初心者向け】PostgreSQLのロールについて分かり易く解説]("https://eng-entrance.com/postgresql-role")を参考して権限を与える。
6. rails側に戻り、config/database.ymlを変更する。

```
default: &default
  adapter: postgresql
  encoding: unicode
  host: db
  username: ユーザー名
  password:
```
　*この段階でパスワードは設定していませんでしたが、最後にパスワードがないって怒られたので上記の解説を参考にしてパスワード設定した方が良いです（後でも構いませんが）。
7. ここで`rake db:migrate`してエラー` PG::ConnectionBad: FATAL:  Peer authentication failed for user`が出ました。詳しくはわかりませんが、`pg_hba.conf`の設定を変える必要があります。`pg_hba.conf`の場所は[ここ]("https://qiita.com/QUANON/items/c1938a90c1c6374911d8")を参考にしてください。postgresユーザーにパスワードを設定していないと効かないかもしれません。そのときは大抵ここ`/var/lib/pgsql/data`にあります。ないときはなんとか探してください。`pg_hba.conf`の場所がわかれば peer を md5 に変更します。[参考ブログ]("https://qiita.com/tomlla/items/9fa2feab1b9bd8749584")

これで再起動すれば`rake db:migrate`できると思います。
SEO対策のためにHTMLのアウトラインと今一度真剣に向き合ってみた

会社のテックブログにて書いたので、リンク貼っておきます。

[SEO対策のためにHTMLのアウトラインと今一度真剣に向き合ってみた](https://techblog.istyle.co.jp/archives/3261)
Firebase Functionでregionを指定するとHostingのrewritesがうまくいかない件

タイトルままですが...

## Function

Functionを書きます。 ```.region('asia-northeast1')``` を指定することで、us-central1とかではなくasia-northeast1で動きます。

```js
exports.Sample = functions
  .region('asia-northeast1')
  .https.onRequest((request, response) => {
        response.status(200).send('Hello Fireabase');
  });

```

```https://asia-northeast1-hogehoge.cloudfunctions.net/Sample``` で動くようになります。

## firebase.json

Hostingのrewritesは下記のようにします。

```https://hogehoge.firebaseapp.com/functions/Sample``` を呼ぶとSampleが稼働するはずです。

```JSON
{
  "firestore": {
    "rules": "firestore.rules",
    "indexes": "firestore.indexes.json"
  },
  "hosting": {
    "public": "app",
    "rewrites": [
      {
        "source": "/functions/Sample",
        "function": "Sample"
      },
      {
        "source": "**",
        "destination": "/index.html"
      }
    ],
    "ignore": [
      "firebase.json",
      "**/.*",
      "**/node_modules/**"
    ]
  }
}
```

### 実際は...

転送されるのはいいんですが、こんな感じになっちゃいました...
asia-northeast1ではなくus-central1になっちゃいます。

```https://us-central1-hogehoge.cloudfunctions.net/Sample/functions/Sample``` にリダイレクトされてしまいます。

どうすればいいんだろ...？

firebase.jsonの指定でなんとかなるのかもしれませんが、[hosting の完全な構成の例](https://firebase.google.com/docs/hosting/full-config?hl=ja#section-full-firebasejson)には書いてないような。

### だいぶ経ちますができないみたいです （2022-08-19更新）

ここに記載がありました。

https://firebase.google.com/docs/functions/locations#http_and_client_callable_functions

> 重要: HTTP 関数を使用して Firebase Hosting で動的コンテンツを提供するには、us-central1 を使用する必要があります。

### アプリから使うならonCall〜httpsCallableにしよう。

Webアプリ等から利用するなら、fetchとかではなくonCallを使えばCORSや認証関係などの面倒なことが楽に回避できます。

#### Cloud Functionsの方はこんな感じになります。

regionを指定します。

```javascript
exports.doSomeAction = functions
  .region('asia-northeast1')
  .https.onCall(async (data, context) => {
    if (!context || !context.auth) {
      throw 'permission denied , The resource cannot be accessed. Authentication is required.';
    }
    return true;
  });
```

#### クライアント側はこんな感じになります。

こちらもregionを指定します。

```javascript
const doSomeAction = () => {
  const callable = firebase
    .app()
    .functions('asia-northeast1')
    .httpsCallable('doSomeAction');
  return callable({});
};

export default {
  doSomeAction: doSomeAction
};
```
GRUB設定でコンソール画面を古いVGAモニターの解像度に変更

# 背景
仮想ではない物理的なベアメタルサーバーにubuntu serverをインストールした際に、古いVGA解像度のモニターしかデータセンター内に無くて、インストール後のサーバーのコンソール画面が表示されずに困った際のメモ。

# 表示モニター
古いスクエアタイプのモニターのVGA解像度でXGA(1024x768)です。
サーバー機器の場合はHDMIやDPじゃなくてVGA端子出力が割と多い。

# OS
「ubuntu server 16.04 LTS」でGRUB2自体はXGA(1024x768)の解像度で表示されます。
OSのubunruが起動後のCLI画面はSXGA(1280x1024)で設定されているので、インストール後の画面が対応モニターで無い場合は表示されない状態になります。

# OS起動前のGRUB2画面での設定
OS起動前のGRUB2画面で「e」のキーを押して編集モードを表示します。
以下の箇所を編集します。

```:変更前
gfxmode $linux_gfx_mode
```

```:変更後
gfxmode 1024x768
```

その他にlinux行の末尾にオプションを追加します。

```:linux行の末尾へ追加
nomodeset
```

編集が出来たら、「F10」キーを押してそのまま起動を継続します。
これで古いVGAモニターのXGA(1024x768)解像度でもコンソール画面が表示されます。

# GRUB2の設定保存
このままだと再起動時には元に戻って変わらないので、GRUB2設定を保存します。

```:/etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="nomodeset"
GRUB_CMDLINE_LINUX="video=1024x768"
```

設定内容をGRUB2へ反映させます。

```:設定コマンドを実行
$ sudo grub-mkconfig -o /boot/grub/grub.cfg
```

これで再起動時にも変更したVGAモニターの解像度になります。
sklearnでmnistがダウンロードできない

mnistを使おうとしたら急につかえなくなってしまったのでその対処法です
sklearnで下を実行したらタイムアウトでエラーになりました

```python

from sklearn import datasets
mnist = datasets.fetch_mldata('MNIST original')
```

https://github.com/amplab/datascience-sp14/raw/master/lab7/mldata/mnist-original.mat
ここからmnist-original.matをダウンロードし、それを`~/scikit_learn_data/mldata/`に保存してから再実行すると実行できました

参考
https://github.com/scikit-learn/scikit-learn/issues/8588
ややマイナーだけどハマると手放せないvimプラグイン4選

# はじめに
vim使いのみなさんこんにちは。今日も良いvimrc改造日和ですね。

さて、本日はタイトル通り、世間的にはマイナーだけど素晴らしいプラグインをいくつか紹介します。
vimが歴史の長いエディターですから、古くからの定番プラグイン・その紹介記事もたくさんありますが、反面新しく生まれたプラグインが埋もれてしまうとか、そんなこともありがちなので。

## `yuttie/comfortable-motion.vim`
https://github.com/yuttie/comfortable-motion.vim

`<C-d>` `<C-u>` などのスクロール操作をなめらかにするプラグインです。[公式のREADMEにその様子が載っている](https://github.com/yuttie/comfortable-motion.vim)のでぜひ見てください。

デフォルトだと一瞬で画面が飛んでしまい、どんな動作をしたか・どのくらい移動したかが分かりづらいので、スムーズかつ素早くテキストを眺めるには必須のプラグインです。
READMEにもある通り、大変細かくオプションを指定できるので、環境や好みに合わせて挙動をカスタマイズできます。

デメリットとしては、デフォルトより動作が重くなることです。ただ今どきの開発環境で処理が重くて使えないというのはまずないと思うので、描画に影響を与えるこれらのオプションを見直してみるとよいかと思います。

* カーソル位置ハイライト `set cursorline` `set cursorcolumn`
* 相対行番号 `set relativenumber`
* 各種シンタックスハイライト (デフォルトではほぼ問題は起こらないが、プラグインで変更している場合に)

## `machakann/vim-sandwich`
https://github.com/machakann/vim-sandwich

括弧を素早く操作するプラグインで、 有名な `vim-surround` の改良版ともいえるプラグインです。
`vim-surround` で出来なかったことが出来るというわけではないですが、細かな挙動が気に入っています。

* 他にプラグインを入れずとも dot repeat 可能
* 操作する囲みがハイライトされる
* キーマッピングがしやすい

なにぶん先駆者が有名すぎるせいでマイナーになっている部分がありますが、気になる方には是非一度試していただきたいプラグインです。

## `mhinz/vim-sayonara`
https://github.com/mhinz/vim-sayonara

ウィンドウを閉じずにバッファを閉じるプラグインです。次々とファイルを開いていくとどんどんバッファが溜まっていきますが、増えすぎたときに掃除をするときとか、間違ってバイナリファイルを開いてしまったときにバッファに残さず閉じるときなど、ちょいちょいと使う機会があります。

類似のプラグインは何種類かあり(忘れました)、試してきたのですが今の所これが一番違和感のない挙動をしてくれます。(同じバッファを複数のウィンドウで開いているケースとか)

シンプルな使い方なので、あんまり語ることはありませんが、バッファを閉じたい系の人にはとりあえずこれを強くオススメします。

## `cocopon/vaffle.vim`
https://github.com/cocopon/vaffle.vim

比較的マイナーじゃないかもしれません。こちらはファイラープラグインです。
ファイラーとしては `NERDTREE` `vimfiler` `dirvish` などがあり、いずれも試してきましたが、このプラグインが一番機能面のバランスが取れており好きです。一生手放したくない度はかなり高いです。

有名なNERDTREEとは違い、横に開いておくのではなく、ウィンドウ全体がファイラーになり

* ディレクトリを移動してファイルを開く (同じウィンドウでvaffleは閉じてファイルが開かれる)
* ファイル・ディレクトリを作成する
* 名前を変更する
 
といった操作がシームレスに可能です。

他のファイラープラグインとの比較としては、

* NERDTREE
    * そんなに横にツリーを表示しておきたいことがなくなってきた
    * 若干重い感じがする
* vimfiler
    * 重い
    * 二画面モードが好みで長い間使ってはいたが、uniteをctrlpに移行したのに合わせて使わなくなった(今はfzfですが)
* dirvish
    * シンプルを極めすぎてハードコアな感じになっている

という、だいたい作者さんの主張どおりの感想を得てきています。
NERDTREEもよいものですが、そこからワンランク上のvimmerを目指したい方にぜひオススメしたいプラグインです。

ちなみに同作者さんのカラースキーム `iceberg` も愛用しており、ついでに紹介させていただきます。
カラースキームは相当な数を彷徨い歩きましたが、今は iceberg に安住しています。たまに他のエディタに移動すると iceberg じゃなくて心が落ち着かないなんてこともあったりなかったり。

## それから
まだ紹介したいプラグインは何個かありますが一旦pendで。

今回ご紹介したプラグインはいずれもシンプルさが特徴ですので、ぜひ気楽に試してハマっていただけると嬉しいです!
dockerfileを作る時にエディタとかの環境を整える

# dockerfileを作る時にエディタとかの環境を整える

`docker run -it ubuntu:18.04 sh` でdockerfileを作る時にエディタとかの環境を整える

```
apt update && apt install -y nano vim net-tools dnsutils iputils-ping iproute2 curl wget 
```
Windowsでプロセス毎のメモリ使用量をtasklistコマンドで取れる

# はじめに
知り合いに「仮想環境のメモリの空き具合が適切かわからないので検討したい」と言われて
そういえばコマンドあるんかな　と思って調べた

あった

# タイトルで出オチ感は凄いが、とりあえず備忘として貼っておく
tasklistコマンドなんてものがあるらしい
/FOオプションで出力形式も選べるみたい。(下の例はCSVモードで画面出力してみたもの)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/144657/61d27a5f-76e4-5ffd-6f9b-b9d1a7f2c904.png)

いろいろできそうではある。
いつからあるのかは不明。(調べるまで全く知らなかったので…)
機械学習論文読みメモ_162

[Smallify: Learning Network Size while Training](https://arxiv.org/abs/1806.03723)
様々なハードウェアやアプリケーションにDNNを適用するにあたって、
それぞれに適当なモデルサイズ、精度、予測時間を実現する事は重要である。
従来手法はそれらを異なったステージで最適化してきたため、最適な設計が
難しかった。
本論で提案する手法はそれら要素を同時に最適化可能である。
提案モデルは、学習時にニューロンレベルの枝刈りを行う事で
モデルサイズと性能を調整する。
この枝刈り手法は、さらに密な重み行列を作成するため、
計算効率も良い。

[Measuring the tendency of CNNs to Learn Surface Statistical Regularities](https://arxiv.org/abs/1711.11561)
CNNは汎化性能が高い一方でadversarial exampleには脆弱である。
この事実はCNNが高い抽象レベルの特徴を獲得出来ていない事を示唆する。
本論はCNNが主に表面的なstatistical regularityを学習している事を示す。
この事を示すために、Fourier filteringを適用する事でデータの高レベル特徴を
保ったままそれ以外の統計値を変化させたデータを作成し、学習に用いた。
結果、CNNはFourier filterで変化させた部分を学習する傾向が強い事が分かり、
特に変化させたデータで学習したモデルのテストデータに対する汎化ギャップが増加する事がわかった。
またCNNの深さを増加させてもこうした汎化ギャップを低減する効果は低い事がわかった。

[Why do deep convolutional networks generalize so poorly to small image transformations?](https://arxiv.org/abs/1805.12177)
画像に対するCNNは、画像への小さなtranslationやdeformationに対して頑健である事が仮定される。
本論では、最新のCNNモデルはそうした小さなtranslationに対して大きくその出力結果を変えてしまう事
を示す。
さらにこうした脆弱性は現実で起こりうるようなtranslationについても同様である。
またこの脆弱性はCNNをより深い構造にするほど顕著に観測される事が分かった。
この原因は最近のCNNで普及しているstrideを利用したsamplingにある。
つまりsamplingが存在する事である特定のtranslationに対してのみしかCNNは反応する事
ができなくなってしまう事が原因となっている。
また一般的に利用されるデータセットが持つbiasの影響も上記のtranslation invarianceに
対して影響を与えている。
OutsystemsからHangoutsChatにメッセージを投稿

#はじめに

ある日、社内の開発でOutsystemsからHangoutsChatにメッセージを投稿する機能を作ることになった私。
いつものごとくOutsystems関係の記事は存在せず・・・でしたのでここに記します。

#想定読者

・OutsystemsでHangoutsChatにメッセージを投稿したい方
・Outsystemsやってるよ！って方
#事前準備

・メッセージを投稿するHangoutsChatの部屋を作成

部屋の作成に関しては下記を参考にしました。
https://tech.torico-corp.com/blog/google-hangouts-chat-send-message/

・HangoutsChatにPostするためにHttpリクエストのモジュールを導入
https://www.outsystems.com/forge/Component_Overview.aspx?ProjectId=427&ProjectName=ardohttp&Unfollow=False

ツールはいろいろあると思うのですが、今回はこちらをチョイスしました。



###■実装フロー


####①Assignで通知したいメッセージをvalにセット
![image.png](https://qiita-image-store.s3.amazonaws.com/0/130275/59715003-3e76-c206-94b4-3caf8186ab62.png)
####②ArdohttpのHTTPPOSTを使います

#####Site.URLはSitePropertyでSet
設定する値は、HangoutsChatの部屋を作成時に発行されたWebhookのURL

![WS000017.JPG](https://qiita-image-store.s3.amazonaws.com/0/130275/61fe1418-2da0-bf07-f08b-95fbada342d2.jpeg)

####DataはJson形式でセット

![image.png](https://qiita-image-store.s3.amazonaws.com/0/130275/575880c0-c0cc-8293-64de-402f0c9f82ea.png)


####③トリガーにした「Postテスト」ボタンをぽちっと
![image.png](https://qiita-image-store.s3.amazonaws.com/0/130275/dbfe0fd6-f3d3-5f53-f53e-592cb07d2bab.png)

####④無事HangoutsChat側でメッセージを受信
![image.png](https://qiita-image-store.s3.amazonaws.com/0/130275/aa920f37-f0f8-77c7-ccc5-88eadd011d4e.png)


#終わりに
・いつも通りドキュメントがなかった
・HangoutsChatに渡すJsonの形式をOutsystems側でどう渡せば良いのか謎だった
R.swift をどうしても Carthage で使いたいあなたへ（改）

[R.swift をどうしても Carthage で使いたいあなたへ](https://qiita.com/monoqlo/items/c1370ed22b002c71da90)という記事があります。今 [CocoaPods との戦いでとても疲れた](https://twitter.com/lovee/status/1101341392503111681)ので、CocoaPods を排除するために R.swift のインストールでとても参考になりました。

今回自分の場合は、理論上、R.swift はビルドタイムで勝手にリソースへのコードを生成してくれるツールであってライブラリーではない、ということは逆にいうとそもそも Carthage ではなく Homebrew で取り込められるはずだと思いました。実際 [Homebrew 自身も rswift のインストールのための Formula も公開している](https://formulae.brew.sh/formula/rswift)ためそのまま `$ brew install rswift` を叩けば勝手に R.swift がインストールされます。

ところがそれで自動生成されたファイルには結局 `import Rswift` があったのでビルドで躓いて、そこでググって出てきたのが最初に紹介した記事です。なるほどふむふむ、つまりは R.swift の利用にはどうやら R.swift.Library も必要で、そしてこれは Carthage からでも落とせる、ということですね。

というわけで最終的には Homebrew と Carthage だけで R.swift の導入に成功しました（RswiftDownloader は必要ありませんでした）ので、簡単に手順をまとめます：

1. Homebrew から rswift の自動生成プログラムをインストールします（Brewfile を利用している場合は `brew "rswift"` の行を Brewfile に追加し、利用していない場合はそのまま `$ brew install rswift` のコマンドをターミナルから叩けば OK です）
2. Carthage で R.swift.Library を導入します（Cartfile に `github "mac-cain13/R.swift.Library"` の行を追加し、あとは他の Carthage で導入するライブラリーと同じような設定方法で設定します）
3. [公式のインストール手順の Manually の 2 番](https://github.com/mac-cain13/R.swift#manually)から続けます（ただし `rswift` の呼び出しはそもそも Homebrew によって導入済みなので、`"$SRCROOT/rswift"` のように呼び出さなくても普通に `rswift` で呼び出せます）

以上で、R.swift を CocoaPods の代わりに Homebrew と Carthage で簡単に導入できます。
スマホでフォントサイズが16px以下でもinputフォーカス時にズームインさせない

```html
<meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1">
```

いつもinputは16px以上でとデザイナーの方に言っていたのですが、格好いいデザインなのでどうにかできないかといろいろやってたら上でできました。

iPhone、Androidともに拡大しない。(ここでいうAndroidは9を指します。)
Androidの場合maximum-scale=1を入れるとズームインできなくなるみたい。

なお、Androidの場合

```html
<meta name="viewport" content="width=device-width,initial-scale=1">
```

のみでも拡大しない。前は拡大してたような…
JSでUA判別してViewport切り替えるのがベストなのでしょうか
crontabを安全に編集する手順

**crontabは -r オプションをつけると内容が即削除されます。**

そのため、**crontabを直接開く・編集するというのはオペミスに繋がる可能性が高いです。**

安全にcrontabを編集するには『**crontabの内容をファイルに書き出し、そのファイルを編集する**』という方法をとることをおすすめします。

（もっというと、サーバー上でファイルを編集すること自体が安全な方法ではないので、gitでcrontabの内容をバージョン管理するほうが確実ではあるのですが、今回はその話はしません。）

## 手順

```bash
### 現在のcrontabの設定をファイルに書き出し
$ crontab -l > crontab.org
$ crontab -l > crontab.edit
  
### ファイルの編集(実行時間などは既存のものとあまり重複しないようにする)
$ vi crontab.edit
 
### 現在のcrontabと編集したファイルのdiff確認
$ crontab -l | diff crontab.edit -
-> 自分が編集した部分だけdiffに出ればOK
  
### crontab登録　
$ crontab crontab.edit
  
  
### crontab確認
$ crontab -l
-> 自分が登録(削除)した部分がちゃんとcrontabに反映されていることを確認
  
### ファイルの削除
$ rm crontab.org crontab.edit
```



## 参考

- [安全なcrontab修正手順](https://qiita.com/nekogeruge_987/items/f16aa7dd0119839af0a1)
- [crontabの設定方法](http://pb-times.jp/P_521ab8c540f59)


## さいごに
crontabを安全に利用する方法についてブログでまとめました。ぜひご覧になってください↓
<a href="https://nishinatoshiharu.com/not-delete-crontab/" target="_blank">crontabを誤って削除しないための対策と削除してしまった時の対処方法まとめ</a>

ツイッター(<a href="https://twitter.com/nishina555" target="_blank" rel="noopener">@nishina555</a>)やってます。フォローしてもらえるとうれしいです！
jtagscan

ピン接続が分からないJTAGピンをFTDIのBitBangで総当たりするプログラムを作ってみました。

https://github.com/yamori813/D2XX_Samples_MPSSE/blob/master/jtagscan.c

同じレポジトリにあるjtagtest.cをベースにしましたが、jtagtest.cはmpsseで作られていたのでBitBangに書き換えました。mpsseに移植したのは自分ですが、FTを使い始めた最初の頃で、今見るとなにやってるのかさっぱり分かりません。mpsseはA0がCKL固定になってしまうのでBitBangで書き換えました。

JTAGの処理はSYNC BitBangでおこなっていて、以下のように2バイトのtms,tdi,tckをFT_WriteしてFT_Readの2バイト目をtdoとして処理してます。

![JTAG-BITBANG.png](https://qiita-image-store.s3.amazonaws.com/0/104066/044eb659-be9f-47b6-7f78-6ef1c6739ad0.png)

SYNC BitBangではWriteしたデータ変化が反映される直前のデータがReadされるようです。またWriteした数しかReadできません。

Macの雪豹で作りましたが、MacであればFTDIのライブラリの在処をMakefileで書き換えればビルドできると思います。

FT232HのA0からA4までをつなぎ確認できます。誤って拾うケースもあるので、これで特定できたらUrJTAGなどで確認してください。

![写真（2019-03-04 12.45）.jpg](https://qiita-image-store.s3.amazonaws.com/0/104066/53494ec0-0bb2-9fba-32c3-573b097db282.jpeg)

```
bash-3.2$ ./jtagscan 
Scan Start
3:TCK 1:TDI 4:TDO 2:TMS 0:nTRST 
IDCODE: chain -0, 159463d3
tdo sequence 11 found at IR 5
The IR chain length is 4
```

120通りを人力でやるのはしんどいので、作ってみました。

TCK, TDI, TMS, nTRSTの4本はプルアップされているまたは抵抗のランドが用意されている事が多く、TDOはそのままの事が多いです。

JTAGなターゲットは3.3V系がほとんどなのでFT232Hを使うのが良いです。

昔AVRを使って作っていた人も見つけましたがFT232Hの方がお手軽だと思います。

https://www.elinux.org/JTAG_Finder

製品もあるようです。

http://www.jtagfinder.com/

MacBook AIR Originalの雪豹でスキャンに5分弱かかります。もう少し早くしたいです。あと8本なり16本でスキャンできるようにもしたいです。
AWS Elastic Beanstalk でDelayed Jobのworkerを運用する

メールやslack通知を非同期実行するのに Delayed jobを導入。
`.ebextensions`でworker起動しようと思ったが、killして起動し直すのも面倒だし、止まってないかの監視も必要なので、Rakeタスクで止まってたら起動する処理をスケジューラで実行することにした。
（`Modules::LogNotice`、`Modules::SlackNotifierJob`はログ書き出し、slack通知を行うJob。）

```ruby:lib/tasks/delayed_jobs.rake
namespace :delayed_jobs do
  desc 'delayed_job のプロセスを起動'
  task start_up: :environment do
    Rails.logger.info "[BATCH]delayed_jobs.start_up is begun."
    ps = `ps aux | grep jobs`
    Rails.logger.info ps
    if !Rails.env.development? && !ps.match(/bin\/rake jobs:work *\n/)
      # バックグラウンドでjobを起動。
      if system('cd /var/app/current && nohup bundle exec rake jobs:work > /dev/null 2>&1 &')
        Modules::LogNotice.perform ['jobが起動していなかったので起動しました。']
      else
        message = 'jobの起動に失敗しました。確認してください。'
        Rails.logger.fatal message
        Modules::SlackNotifierJob.perform_now({ text: message }, 'danger')
      end
    end
    Rails.logger.info "[BATCH]delayed_jobs.start_up is finished."
  end
end
```
```ruby:config/schedule.rb
...
every 10.minute do
  command "cd /var/app/current && bundle exec rake delayed_jobs:start_up"
end
...
```

標準出力、標準エラー出力を破棄しているが、ログに出すのも余裕があれば検討。

参考

- [Railsでの非同期処理とDelayed Job – RE:ENGINES](https://re-engines.com/2018/09/25/rails-async-job/)
- [nohup \- コマンド \(プログラム\) の説明 \- Linux コマンド集 一覧表](https://kazmax.zpp.jp/cmd/n/nohup.1.html)
- [bash スクリプトの先頭によく書く記述のおさらい \| Money Forward Engineers' Blog](https://moneyforward.com/engineers_blog/2015/05/21/bash-script-tips/)
- [Railsのrakeタスクをバックグラウンド実行し、ログアウトしても終了させない方法 \| Zoetin's diary](http://zoetin.com/2016/09/11/rails%E3%81%AErake%E3%82%BF%E3%82%B9%E3%82%AF%E3%82%92%E3%83%90%E3%83%83%E3%82%AF%E3%82%B0%E3%83%A9%E3%82%A6%E3%83%B3%E3%83%89%E5%AE%9F%E8%A1%8C%E3%81%97%E3%80%81%E3%83%AD%E3%82%B0%E3%82%A2%E3%82%A6/)
- [いい加減覚えよう。 \`command > /dev/null 2>&1\`の意味 \- Qiita](https://qiita.com/ritukiii/items/b3d91e97b71ecd41d4ea)
pythonで音声をいじったり出力したりする方法まとめ

# 目的
ディープラーニングで声を変換したくて、とりあえず音声をpythonでいじったりする方法を調べたので（自分用に）まとめる。

# まとめること一覧
- 形式変換して保存
- メル周波数ケプストラム係数（MFCC）
- 録音してある音声の出力
- リアルタイム入出力

# 形式変換して保存
```
import pydub

sound = pydub.AudioSegment.from_file('ファイル', '拡張子')
sound.export('ファイル.wav', format='wav')


# 以下ちょっとした音声情報を調べる
from matplotlib import pyplot as plt

channel_count = sound.channels
fps = sound.frame_rate
duration = sound.duration_seconds

print(channel_count)    # チャンネル数(1:mono, 2:stereo)
print(fps)              # サンプルレート(Hz)
print(duration)         # 再生時間(秒)

# 波形を表示
samples = sound.get_array_of_samples()
plt.plot(samples)
plt.show()
```

# メル周波数ケプストラム係数（MFCC）
```
import librosa

x, sampling_rate = librosa.load('ファイル.wav')
mfcc = librosa.feature.mfcc(x, sr=sampling_rate)


# 以下視覚化
from librosa import display
from matplotlib import pyplot as plt
import numpy as np

display.specshow(mfcc, sr=sampling_rate, x_axis='time')
plt.colorbar()
plt.show()

# mfccはnumpy arrayなのでnumpyでいろいろできる
print(mfcc.shape)
```

# 録音してある音声の出力
```
import pydub
from pydub.playback import play

sound = pydub.AudioSegment.from_wav('ファイル.wav')
play(sound)
```

# リアルタイム入出力
```
import pyaudio

chunk = 1024 # * 2    処理の重さによって値を変える
sr = 48000 # 小さくしていくと音質が悪くなる
speaker = pyaudio.PyAudio()

stream = speaker.open(
    format=pyaudio.paInt16,
    channels=1,
    rate=sr,
    frames_per_buffer=chunk,
    input=True,
    output=True
)

while stream.is_active():
    I = stream.read(chunk)
    # I = 何かしらの処理(I) 処理を加えるときはchunkをいくらか大きくする
    O = stream.write(I)

stream.stop_stream()
stream.close()
speaker.terminate()
```


以上。またいろいろわかり次第まとめていく。
UIPickerView(ドラムロール)の値が？（クエスチョン）になってしまって泥沼だった話

ドラムロールを作ってくれと言われたので……

早速作ったわけですが、苦戦しました。
なんでかって、


![iOS の画像.jpg](https://qiita-image-store.s3.amazonaws.com/0/367893/4830064f-7bcf-d071-4442-2d3aa7fa0a55.jpeg)


この１、２、３と縦に並んでる部分があるじゃないですか。
これがなんと、全てハテナマークで表示されてしまうんです（この写真では直っています）

色んなところでドラムロールのコードは掲載されていますがどれも同じ現象に悩まされました。
原因を調べてもなぜか数えるほどしか出てこない。。。(しかも解決していない）

これは記録しておこうということで。

まず、最初に調べたコードです。
ドラムロールを作る際にほぼ最低限必要な項目です。


```swift
import UIKit

// UIPickerViewDastaSourceとUIPickerViewDelegateは継承しなければエラーが出ます（fixをクリックすれば直してくれますが）
class ViewController: UIViewController, UIPickerViewDataSource, UIPickerViewDelegate {


    @IBOutlet weak var pickerTextField: UITextField!
    var array:[String] = ["1", "2", "3"]

    var pickerView = UIPickerView()

    override func viewDidLoad() {
        super.viewDidLoad()

        // pickerViewの位置と大きさを指定
        pickerView.frame = CGRect(x: 0, 
                                  y: 0, 
                                  width: UIScreen.main.bounds.size.width, 
                                  height: pickerView.bounds.size.height)

        // データソースを設定（よくわからない）
        pickerView.dataSource = self

        // デリゲートを設定（これを書くのを怠るとドラムロールにハテナすら表示されません。空っぽです）
        pickerView.delegate = self

        // 初期に選択されているドラムロールの値（必ずしも必要ではない）
        pickerView.selectRow(0, inComponent: 0, animated: true)

        // ここでいうtextViewはドラムロールで選択した値が収納されるテキストボックスです（画像でいう、２と書かれた場所）
        self.textView.inputView = pickerView
    }

    // ドラムロールの数です。今回は一つなので1を返します
    func numberOfComponents(in pickerView: UIPickerView) -> Int {
        return 1
    }
    // ドラムロールに表示する値の数を返します
    func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
        return array.count
    }
    // ドラムロールに表示する値（文字列）をここで返します
    func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
        return array[row]
    }
    // ドラムロールにて選択した値をtextViewに設定します
    func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
        textView.text = array[row]
    }

```

このコードはなぜか有名で、これに一味加えたくらいのソースコードはわんさか出てきました。
しかしどれを使ってもいくつか警告やエラーが出てきて、クリックして直してくとドラムロールの値はハテナとなりました。

ちなみにこれをfixをクリックして直していくと

```swift
    // ドラムロールに表示する値（文字列）をここで返します
    fileprivate func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
        return array[row]
    }
```

↑fileprivateがつけられてしまいます。

どうやらこれが原因だったようで。。。



多分、fileprivateがつけられてしまう理由は、pickerViewという関数が三つあって、内二つが引数の数と型が一致しているからかと思います。
関数の区別がつかないからとりあえずfileprivateを付けろ的なw
そのせいで外から呼び出せなかったのだと思います。
値が取れないのでブレイクポイントを張ったらそこを通らず、初めて気づきましたw

とりあえずfileprivateを外して引数の型など諸々をいじったところ、最終的には

```swift
    // ドラムロールに表示する値（文字列）をここで返します
    func pickerView(_ pickerView: UIPickerView, viewForRow row: Int,forComponent component: Int, reusing view: UIView?) -> UIView{
        let label = UILabel()
        label.text = array[row]
        label.textAlignment = NSTextAlignment.center
        return label
    }
```

これに書き換えたところうまく表示されました。
さっきまでStringで返してたのにUIViewで返して大丈夫？と心配だったのですが問題ありませんでした。

すごく初歩的なのでしょうけど、　pickerView自体ブラックボックスで仕組みがイメージできていないためこのような初歩的な部分に気づかなかったのだと思います。

精進しますw
CpawCTF Q.7 writeup

# ファイル情報
```
> file exec_me
exec_me: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.24, BuildID[sha1]=663a3e0e5a079fddd0de92474688cd6812d3b550, not stripped
```
なので、64bit Linuxで実行した方が良さそう。
ということで、dotinstallとかを参考に、CentOS Vagrantをサクッと、Vagrant環境を構築した。
その間の、試行錯誤は割愛。
# Vagrantで実行
```Bash
$ ./exec_me
-bash: ./exec_me: 許可がありません。
```
？？
```Bash
$ ls -la
合計 84
(中略)
-rw-rw-r--.  1 vagrant vagrant 8556  2月 24 21:00 2019 exec_me
(中略)
```
どうやら、ファイルに実行権限が与えられていなかったので、
```
$ sudo chmod 777 exec_me
$ ./exec_me
```
これで、flagが取得できる
游ゴシックの指定方法

毎回、游ゴシックを指定するたびに調べているので、メモを残す。（99%自分のため。）

主に参考にしたのはこちらです。
[游ゴシックのfont-family指定方法2018年度版！@font-faceは絶対NG！WindowsのChromeでかすれる問題徹底検証](https://wemo.tech/1155)

どうしてとか、そうしないとどうなるのとかはこちらをご覧ください。

## 游ゴシックの指定方法

```css
body{
  font-family: "游ゴシック体", YuGothic, "游ゴシック Medium", "Yu Gothic Medium", "游ゴシック", "Yu Gothic", sans-serif;
}
```

## boldの指定方法

```css
.bold{
  font-family: "游ゴシック体", YuGothic, "游ゴシック", "Yu Gothic", sans-serif;
  font-weight: bold;
}
```

## アルファベットと日本語で太さを変えたい時

```css
body{
  font-family: "アルファベットに指定したいフォントファミリー", "游ゴシック体", YuGothic, "游ゴシック Medium", "Yu Gothic Medium", "游ゴシック", "Yu Gothic", sans-serif;
}
.bold_ja{
  font-family: "游ゴシック体", YuGothic, "游ゴシック", "Yu Gothic", sans-serif;
  font-weight: 700;
}
.bold_en{
  font-family: "アルファベットに指定したいフォントファミリー", sans-serif;
  font-weight: 500;
}
```
StyleGANの2方向マッピング

Deep Learning初心者故、間違いがありましたら指摘いただけると幸いです。

# 今更だけどStyleGANて何
[StyleGAN「写真が証拠になる時代は終わった。」](https://qiita.com/Phoeboooo/items/7be15acb960837adab21)に全てが書いてあります（丸投げ）

原文を読みたい数奇な方は[A Style-Based Generator Architecture for Generative Adversarial Networks](https://arxiv.org/abs/1812.04948)にPDFが置いてありますので、どうぞ

# よく見るやつ
$A$と$B$を混ぜ合わせるといい感じに$AB$の中間画像を表示するぞ！
![image.png](https://qiita-image-store.s3.amazonaws.com/0/137384/5d722838-194a-a1d6-8fa1-43e09eebe156.png)


# 3個混ぜたいんだけど
ggっても中々出てこない上に、にこやかに笑った人達の顔ばっかり出てくる
俺はキャラの顔でやりたい

# じゃけん実装しましょうね
手軽に試してみたかったので、今回は[こちら](https://colab.research.google.com/drive/1IC0g2oDQenrDmwbtkKoNQsWpjwBcncL8?authuser=2)のColaboratory Bookをお手本に学習済みのモデルを利用させて頂きました

# 2方向のマッピングをするには？？？
先ず二つの画像を取り出しているコードを読んでみる

```python
# generate images code interpolated across one of the 512 dimensions
init_latent = np.random.RandomState(seed).randn(1, Gs.input_shape[1])[0]

def apply_latent_fudge(fudge):
  copy = np.copy(init_latent)
  copy[interpolate_dim] += fudge
  return copy
  
interpolate = np.linspace(0., 30., 10) - 15
latents = np.array(list(map(apply_latent_fudge, interpolate)))
```
ノイズであるinit_latentに対してinterpolateを与えることで2点間の変化を取り出している気がする
多分こんなイメージ

```math
N = \begin{bmatrix}
R_0\dots R_d
\end{bmatrix} \\
I = \begin{bmatrix}
J \dots K
\end{bmatrix} \\
L = \begin{bmatrix}
(N + I_0) \dots (N + I_n)
\end{bmatrix}
```
> $N$ := Noise, $I$ := Interpolate, $J,K \in \mathbb{Z^+}$, $R_d$ := Random Value

なんでInterpolateをノイズに与えることで別の画像へ近づくのかがいまいち理解できていないが
これを2方向にするとなると多分こうなる

```math
N_1 = \begin{bmatrix}
R_0\dots R_d
\end{bmatrix} \\
N_2 = \begin{bmatrix}
R'_0\dots R'_d
\end{bmatrix} \\
I = \begin{bmatrix}
J \dots K
\end{bmatrix} \\
L = \begin{bmatrix}
(N + I_0) \dots (N + I_n)
\end{bmatrix} \\
L = \begin{bmatrix}
L_1 \dots L_2
\end{bmatrix}
```
単純にInterpolateを加えたノイズを二つ用意して、線形補間すればいいんじゃなかろうか的な思考

# 一応できた
![image.png](https://qiita-image-store.s3.amazonaws.com/0/137384/86188f5d-6314-e5ad-c095-9ada1aca9771.png)

```python
def apply_latent_fudge(fudge, target_latent):
  copy = np.copy(target_latent)
  copy[interpolate_dim] += fudge
  return copy


def gen_interpolate():
  return np.linspace(0, 30, width)
  
interpolate = gen_interpolate()
applier1 = lambda f: apply_latent_fudge(f, init_latent1)
latent1 = np.array(list(map(applier1, interpolate)))
applier2 = lambda f: apply_latent_fudge(f, init_latent2)
latent2 = np.array(list(map(applier2, interpolate)))
def v_linspace(i):
  v = np.array(list(map(lambda l: np.linspace(latent1[i][l], latent2[i][l], height), range(latent1.shape[1]))))
  v = v.transpose()
  return v
combined_latent = np.array(list(map(v_linspace, range(width))))
combined_latent = np.array(list(map(lambda x: x.flatten(), combined_latent.transpose()))).transpose()

images = Gs.run(combined_latent, None, **synthesis_kwargs)
```

[StyleGAN 2way mapping](https://colab.research.google.com/drive/1HB7kUstNWykrwElmjXqqBtm4fmsZGbGI) (*Google Colab*)
出来たんだけど、理解しきれていないのでもやもやする
あと2wayじゃなくて4頂点間の補間な気がしなくもない

#### もし宜しければ指摘いただけると幸いです
openpyxlで別ブックにシートをコピーする

# Introduction

この記事ではopenpyxlで別ブックにあるシートをコピーする方法を掲載しています。
openpyxlでは**基本的には別ブックにあるシートを丸ごとコピーすることはできません**([リンク先参照](https://qiita.com/m5knt/items/ab56f1d0a783f3422ee3))。ですが、シートにある値であれば、コピーすることができます。

# Pythonスクリプト

Pythonのコード例を以下に示します。以下の例ではfgo.xlsxのシート1の内容を読み込み、新規作成したfgo_2.xlsxのclassというシートにコピーしています。

```python:sheet_copy.py

'''
    sheet_copy.py
    purpose: make new xlsx and copy sheet
'''

import openpyxl as xl


# set input file name
inputfile = 'fgo.xlsx'

# set output file name
outfile = 'fgo_2.xlsx'

# set output sheet title 
sheettitle = 'class'

# read tmp xlsx
wb1 = xl.load_workbook(filename=inputfile)
ws1 = wb1.worksheets[0]

# create new xlsx file
wb2 = xl.Workbook()
ws2 = wb2.worksheets[0]
ws2.title = sheettitle

# write to sheet in output file
for row in ws1:
    for cell in row:
        ws2[cell.coordinate].value = cell.value

# save target xlsx file
wb2.save(outfile)

```


最後の方の

```python:
# write to sheet in output file
for row in ws1:
    for cell in row:
        ws2[cell.coordinate].value = cell.value
```

の部分でws1(fgo.xlsxのシート1)のcellの値を、逐次的にws2(fgo_2.xlsxのclassシート)のcellに代入しています。

同様の方法を使えば、塗りつぶしの色やフォントなどの体裁もコピーできそうです。
iOSでスクショ、画面録画時にトリガーする処理を実装する

具体的にどういうことをしたいかというと、NetflixやAmazon Primeビデオなど動画配信サービスアプリ内でスクショをすると著作権、データ保護（DRM）のため、黒塗りされるのです。
（ちなみに画面録画すると、録画終了時に動画が保存されませんでしたとエラーが出ます）

|Netflix|Amazon Prime ビデオ|
|:---:|:---:|
|![IMG_2281.PNG](https://qiita-image-store.s3.amazonaws.com/0/40009/f3479af0-bf34-0cb9-84af-10fc7e05df65.png)|![IMG_2283.PNG](https://qiita-image-store.s3.amazonaws.com/0/40009/f9ec882e-c6fb-77d9-3c5a-bb2dd1e4dbba.png)|

UI周りのボタンはそのままですが、肝心の動画部分は黒塗りされています。
**これ、実装してみたい！**って思うじゃないですか。

ということで、調べてみると、結論から言うと、iOS12リリース時点では**不可能**なんですね。

なぜなら、**スクショを撮った瞬間、画面録画がスタートされる瞬間を検知する仕組みがない**からです。

ですが、スクショを撮った後、画面録画を終了する時点は検知する仕組みはあったので、紹介したいと思います。

###スクリーンショットを撮った後を検知する
使うのは`userDidTakeScreenshotNotification`です。

**○userDidTakeScreenshotNotification - UIApplication | Apple Developer Documentation**
https://developer.apple.com/documentation/uikit/uiapplication/1622966-userdidtakescreenshotnotificatio

`NotificationCenter`の通知を使って検知します。
これは何を検知するとかいうと`UIScreen.main.isCaptured`の値が変わった時に呼ばれます。

`userDidTakeScreenshotNotification`はスクリーンショットを撮った時の通知です。

```Swift
override func viewDidLoad() {
    super.viewDidLoad()

    NotificationCenter.default.addObserver(
        self,
        selector: #selector(didTakeScreenCaptured(_:)),
        name: UIApplication.userDidTakeScreenshotNotification,
        object: nil
    )
}

@objc private func didTakeScreenCaptured(_ notification: Notification) {
    blackView.isHidden = UIScreen.main.isCaptured
}
```

上記はスクリーンショットを撮影後、隠しているビューを表示するというものです。

実際に撮影してみると、スクリーンショットはそのまま撮影できますが、その直後にメソッドが呼ばれて処理されます。

###画面収録した後を検知する
使うのは`capturedDidChangeNotification`

**○capturedDidChangeNotification - UIScreen | Apple Developer Documentation**
https://developer.apple.com/documentation/uikit/uiscreen/2921652-captureddidchangenotification

使い方は`userDidTakeScreenshotNotification`と同じで、`viewDidLoad(_:)`などで実装します。

```Swift
override func viewDidLoad() {
    super.viewDidLoad()

    NotificationCenter.default.addObserver(
        self,
        selector: #selector(didCapturedScreen(_:)),
        name: UIScreen.capturedDidChangeNotification,
        object: nil
    )
}

@objc private func didCapturedScreen(_ notification: Notification) {
    yellowView.isHidden = UIScreen.main.isCaptured
}
```

こちらも`UIScreen.main.isCaptured`の値が変更になったら、呼ばれます。

簡単ですが、サンプルを作ってみました。
こちらからどうぞ。

**○ScreenCapturedSample**
https://github.com/takashings/ScreenCapturedSample

### 実際にどういう時に使うのか
正直`userDidTakeScreenshotNotification` と`userDidTakeScreenshotNotification`では撮影後に呼ばれるため、何の意味もないのでは？という風に思いますよね。
はい、僕も同じく同様の感想です。

ですが、こういう仕組みがあるからには何か活用できるのではないかと思います。

考え得る使いどころとしては、スクショ、画面録画をしたら**個人で楽しむ分には良いけど、ネットに流さないでねとアラートを表示**したり、逆に**今スクショしたものをSNSにシェアしませんか？**と促す（特にゲームでは使えるかも？）という感じでしょうか。

将来的にはもしかしたら、`userWillTakeScreenshotNotification`や`userWillTakeScreenshotNotification`のようなものが実装されるかもしれませんね（されるといいな）。
【リリース】Nextcloud のバージョン 15.0.5、14.0.8 と 13.0.12がリリースされました

【リリース】Nextcloud のバージョン 15.0.7、14.0.10 がリリースされました

2019年4月9日に Nextcloud の最新バージョンとして、15.0.7、14.0.10がリリースされました。今回のリリースの少し前に、15.0.6、14.0.9がリリースされておりましたが、いくつかのバグフィクスが加えられたようです。
15.0.6/15.0.7 では60個程度の変更で15.0.5よりサイズが少し大きくなっております。14.0.9/14.0.10は30個弱程度の修正です。  
_※(注)公式 Blog では14系の修正は2個と書かれておりますがこれは14.0.9⇒14.0.10としての修正個数で、14.0.8⇒14.0.9でも修正が加えられております。_  
変更としては小さいですが、マイナーバージョンアップでは信頼性、セキュリティー、安定性の向上を目指しています。  
リリースにあたっては RC版を提供して広範囲なテストを行っておりますので、より信頼できるものが提供されております。Nextcloud 社の公式 Blog でも `"it is a bad idea to not upgrade!"` (更新しないなんて悪い考え方だ!) と書かれるほどですので、更新を前提とした運用をしていくことが薦められます。  
13系の公式サポートはすでに終了となっており、今後最新バージョンは提供されません。15系もしくは14系へのアップグレードを強くお勧めします。

### 主な改善点

- ナビゲーション関連の改善
- アクセシビリティとUIの修正
- ユーザ管理の改善
- クラウド共有先から `Google+` を削除。

**★この記事は、[スタイルズ社のNextcloudサイト](https://nextcloud.stylez.co.jp/) の [Nextcloudブログ](https://nextcloud.stylez.co.jp/nextcloudblog)にも公開しております！**
特定のディレクトリ配下のファイルを容量の大きい順に表示する。(MB表示)

`# ls -la --block-size=MB $(find "ディレクトリ名" -type f) | sort -nr -k5 | head`


例)「/var/log」の場合

```
# ls -la --block-size=MB $(find /var/log/ -type f) | sort -nr -k5 | head
-rw-------  1 root   utmp   46MB  3月  1 06:43 /var/log/btmp-20190301
-rw-------  1 root   root   16MB  2月 17 07:52 /var/log/secure-20190217
-rw-r--r--  1 mysql  mysql  14MB  3月  1 14:28 /var/log/mysqld.log
-rw-------  1 root   root   13MB  2月 24 08:28 /var/log/secure-20190224
-rw-------  1 root   root   13MB  2月  3 06:06 /var/log/secure-20190203
-rw-------  1 root   root   11MB  2月 17 07:52 /var/log/fail2ban.log-20190217
-rw-------  1 root   root   11MB  2月  3 06:05 /var/log/maillog-20190203
-rw-------  1 root   root   10MB  2月 17 07:51 /var/log/maillog-20190217
-rw-------  1 root   root   10MB  2月 10 03:48 /var/log/maillog-20190210
-rw-------  1 root   root    9MB  2月 24 08:28 /var/log/maillog-20190224
```
RHEL DVD iso を使用した yum リポジトリの設定

# 参考URL
https://access.redhat.com/ja/solutions/117643

# ISO イメージでリポジトリーを作成する

## ISO イメージをマウント
サーバの適当なディレクトリにISOイメージを配置し、マウントする

```
mkdir -p /mnt/rhiso
mount -o loop RHELX-XXXX.iso /mnt/rhiso
```

## repoファイルの作成
/etc/yum.repos.d ディレクトリにリポジトリファイルを作成する。

```
vi /etc/yum.repos.d/dvd.repo
[RHEL5-Server-DVD]
name=Red Hat Enterprise Linux $releasever - $basearch (DVD)
baseurl=file:///mnt/rhiso/Server
enabled=1
gpgcheck=1 
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release
```

# yum install
以下のコマンドでインストールする

```
yum --disablerepo=* --enablerepo=RHEL5-Server-DVD install [package name]
```
Android SDK をCLI で管理する（Unity向け）

## はじめに
Android SDKをアップデートしなきゃと思ったらCLIを見つけたので使ってみたメモ。UnityでしかAndoroidアプリを作らないのでAndroid Studioは不要、IDEなしで軽くコマンドライン管理できたら嬉しい。

追記：[Unity公式ドキュメント：Android environment setup](https://docs.unity3d.com/Manual/android-sdksetup.html)
（shienaさんより情報を頂きました。ありがとうございます）

## セットアップ
1. [Android Studioのダウンロードページ](https://developer.android.com/studio)の下の方「Command line tools only」から環境に合わせてダウンロード
2. zipを解凍してできたtoolsを適当な場所に配置
3. tools/bin/sdkmanager.bat（Windowsの場合）がSDK ManagerのCLI。

## 使い方
[sdkmanagerのユーザーガイド](https://developer.android.com/studio/command-line/sdkmanager)より。

### リストアップ
インストール済みパッケージ（Installed packages）と利用可能パッケージ（Available packages）をリストアップする。

```
$ sdkmanager --list
```
実行するとまず Installed packages、続けて Available packages が表示される。 Available packagesのリストは長いので、だいぶスクロールして戻らないと Installed packagesを確認できない。

### インストール

```
$ sdkmanager パッケージ名
```
パッケージ名は--list で表示されたPath を書けばOK。スペース区切りで複数指定できる。

### アンインストール

```
$ sdkmanager --uninstall パッケージ名
```

### インストール済みパッケージのアップデート

```
$ sdkmanager --update
```

## UnityのAndroid SDK設定
### パッケージのインストール
UnityでAndroidアプリをビルドするために必要な最低限のパッケージをインストールする。バージョンはビルドターゲットに合わせて必要なものを。2019/03/01 現在の最新バージョンだと最終的こんな感じ。実験用なので、自前のPixel 3だけで動けばいいや、な環境。

```
$ sdkmanager build-tools;28.0.3 platform-tools platforms;android-28
```

結果。

```
$ sdkmanager --list
Installed packages:=====================] 100% Computing updates...
  Path                 | Version | Description                    | Location
  -------              | ------- | -------                        | -------
  build-tools;28.0.3   | 28.0.3  | Android SDK Build-Tools 28.0.3 | build-tools\28.0.3\
  platform-tools       | 28.0.1  | Android SDK Platform-Tools     | platform-tools\
  platforms;android-28 | 6       | Android SDK Platform 28        | platforms\android-28\
  tools                | 26.1.1  | Android SDK Tools 26.1.1       | tools\
（略）
```

### Unity側の設定
#### Preferences
いつも忘れるのでメモ。Preferences... > External Tools のAndroid SDK 設定には、先程CLI を配置したパスを指定すればOK。つまり指定したパスの直下に以下のディレクトリがあるようにすると、その下をUnityが探してくれる。

```
build-tools
platform-tools
platforms
tools
```

#### Player Settings
Project Settings > Other Settings。Minimum API Level とTarget API Level には先程インストールしたパッケージのバージョンを指定する（実際は先にこっちが決まるはずなので順序が逆かも……）。

## まとめ
ひとまずでかいAndroid Studio不要でUnity用にAndroid SDKをコマンドライン管理できるようになった。たぶんすぐ忘れるのでメモとして残しておく。
isoファイルをマウントする

#isoファイルをマウントする方法
下記のコマンドを実行します。

```
mount -o loop -t iso9660 [isoイメージファイル] [マウントポイント]
```

# アンマウントする
下記のコマンドを実行します。

```
umount [マウントポイント]
```
Gitを2.21.0にアップデートしたらcloneできなくなった話(fatal: multiple updates for ref 'refs/remotes/origin/master' not allowed)

## 現象
Mac用パッケージ管理ツールのHomebrew経由でGitを2.21.0(2月24日リリース)にアップデート。
GitHubからソースを落としてくるべく、```git clone```を実行したら次のエラーが発生。

```
fatal: multiple updates for ref 'refs/remotes/origin/master' not allowed
```

Gitの管理下**ではない**ディレクトリでcloneしても発生するからよくわからない。



## 解決方法
Gitのglobal設定が保持されている```~/.gitconfig```から```[remote "origin"]```に関する記述を削除したら解消。

```
##### 変更前 ######

[user]
	email = *****
	name = *****
[http]
	postBuffer = 2M
[core]
	excludesfile = /Users/xxxxx/.gitignore_global
	editor = vim
[remote "origin"]
	fetch = +refs/heads/*:refs/remotes/origin/*
```

```
##### 変更後 ######

[user]
	email = *****
	name = *****
[http]
	postBuffer = 2M
[core]
	excludesfile = /Users/xxxxx/.gitignore_global
	editor = vim
```

## 最後に
```[remote "origin"]```の設定が2.21.0のバージョンアップの際に追加されたのか、それとも旧来からある設定がこのバージョンアップで悪さをするようになったのかは不明。
とりあえずは問題なく動いているので良かったがモヤモヤする……

## 備考
2019/03/01：諸事情により再投稿しました
C++でコンパイルと実行をするCLIコマンド

## ステップ1
.bashrcに以下を記述します

```sh
alias gpp='g++ -Wall -O3 -std=c++17 -I/usr/local/include'
function cr(){
  gpp $1 && ./a.out
}
function crio(){
  gpp $1 && ./a.out < in.txt > out.txt
}
export -f cr
export -f crio
```

## ステップ2
以下を実行します。

```
. ~/.bashrc
```

## ステップ3
こんな感じで使います。

```
cr main.cpp
crio main.cpp
```
## 余談
crはcompile&runの省略という気持ちで命名しました。
crioはcompile&run&in.txt&out.txtの省略という気持ちで命名しました。
回帰分析を行う際の曜日と休日のダミー変数

回帰分析を行う際の{曜日、休日、祝日}など、人の行動に関与するダミー変数を作成したので共有する。

以下画像はデータ例
![image.png](https://qiita-image-store.s3.amazonaws.com/0/154154/773853ea-4ff1-bffc-17af-95a0af56ba32.png)

以下ソースコード

```.py
import numpy as np
import pandas as df
import sys
from datetime import *
from time import *
import csv

# 祝日のデータを読み込む
def import_Pholiday():
	get_data = []

	#祝日データ読み込み先のパス
	path = './import_data/holiday_data.csv'
	with open(path,'r',encoding="utf-8_sig") as f:
		reader = csv.reader(f)
		for row in reader:
			get_data.append(row)

	return get_data

# csv出力先
def write_csv(data):
	# ソースと同じディレクトリにsome.csvとして書き出す
	with open('some.csv', 'w') as f:
		writer = csv.writer(f, lineterminator='\n')
		for i in range(0,len(data)):
			writer.writerow(data[i])

def main():
	#作成するトレンド日数
	trendDay = 1860

	# [日付,月,火,水,木,金,土,日,祝日,祝日の名前,休]
	trend = [[]]
	arr = ["日付","月","火","水","木","金","土","日","祝日","祝日の名前","休日","年末年始"]

	# 今日の日付を選択
	day_now = datetime.today()

	ph_day = import_Pholiday()

	for i in range(len(ph_day)):
		ph_day[i][1] = datetime.strptime(ph_day[i][1], '%Y/%m/%d')
		ph_day[i][1] = datetime.strftime(ph_day[i][1], '%Y%m%d')

	# 日付のフォーマット型を整形
	first_day = day_now.replace(day=1)
	day = datetime.strftime(first_day, '%Y%m%d')
	print(day)

	trend[0] =arr

	# 各日にちのトレンドデータを作成
	for i in range(0,trendDay):
		trend.append([0]*12)
		first_day = first_day - timedelta(days=1)
		day = datetime.strftime(first_day, '%Y%m%d')
		trend[i][0] = day

		if first_day.weekday() == 0:
			trend[i][1] = 1
		elif first_day.weekday() == 1:
			trend[i][2] = 1
		elif first_day.weekday() == 2:
			trend[i][3] = 1
		elif first_day.weekday() == 3:
			trend[i][4] = 1
		elif first_day.weekday() == 4:
			trend[i][5] = 1
		elif first_day.weekday() == 5:
			trend[i][6] = 1
		elif first_day.weekday() == 6:
			trend[i][7] = 1

		if str(day) in str(ph_day):
			trend[i][8] = 1
			for j in range(len(ph_day)):
				if str(day) == str(ph_day[j][1]):
					trend[i][9] = str(ph_day[j][3])

		if str(trend[i][0]).endswith('1231') or str(trend[i][0]).endswith('1231') or str(trend[i][0]).endswith('0101') or str(trend[i][0]).endswith('0102') or str(trend[i][0]).endswith('0103'):
			trend[i][11] = 1

		if trend[i][6] == 1 or trend[i][7] == 1 or trend[i][8] == 1 or trend[i][11]:
			trend[i][10] = 1

		#print(trend[i])

	#print(trend[0])
	#print(trend[1])
	write_csv(trend)

if __name__ == '__main__':
	main()
```

githubに作成したcsvなども置いてあります。
https://github.com/Baya-Non/-Linear_regression_trend