OmniAICreator/Qiita-1.07M huggingface dataset:
Windows 10 への更新プログラム適用後に VPN 接続ができなくなった場合の対処

KB4535996 (OS ビルド 18362.693 および 18363.693) の既知の問題として、プロキシ利用環境での VPN 接続に関する問題が確認されています。
https://support.microsoft.com/ja-jp/help/4535996/windows-10-update-kb4535996
>手動または自動構成プロキシを使用するデバイス (特に仮想プライベート ネットワーク (VPN)) を使用するデバイスは、通知領域のネットワーク接続ステータス インジケーター (NCSI) に限られるか、またはまったくインターネット接続ステータスを示さない場合があります。 
これは、VPN に接続または VPN から切断された場合、または双方の状態を変更した後に発生する可能性があります。 
この問題が発生したデバイスでは、WinHTTP または WinInet を使用するアプリケーションを使用してインターネットに接続する際に問題が発生する可能性があります。 
この状態のデバイスで影響を受ける可能性のあるアプリの例としては、Microsoft Teams、Microsoft Office、Microsoft Office 365、Microsoft Outlook、Internet Explorer 11、および一部のバージョンの Microsoft Edge が含まれますが、これらに限定されません。


この問題は KB4554364 (OS ビルド 18362.753 および 18363.753)で既に解決されています。
https://support.microsoft.com/ja-jp/help/4554364/windows-10-update-kb4554364


急遽リモート ワークが導入された方なども多いかと思いますが、VPN 接続がうまくいかない場合は上記の問題に引っかかっていないかチェックしてみてください。

ちなみに、OS ビルドは winver コマンドなどで確認可能です。
JavaScript で正規表現を使って HTML の属性を取得する。

parser 等を使わずにサクッと取得したいと思いました。

```javascript
// attribute(対象となるDOMの文字列, 要素名)
function attribute(str, key) {
  const regExp = new RegExp(`${key}="([^"]*)"`)
  return str.match(regExp)[1]
}

attribute('<p id="hello" style="color: red;">Hello, world</p>', 'style')
```
```
> attribute('<p id="hello" style="color: red;">Hello, world</p>', 'style')
'color: red;'
> 
```

`[^"]*` ... `"` を含まない任意の文字列
P4Runtime を試してみよう

## P4Runtime APIを試すチュートリアルを作りました

大規模なネットワークインフラ関連事業者のなかでは、Software Defined Network (SDN) は今や普通のものとなりました。自分もSDNコントローラを作ってみたい、と思った人も多いでしょう。

P4はデータプレーンをプログラムするためのプログラミング言語ですが、今日はP4Runtime APIを使ったSDNコントローラ作成のチュートリアルを紹介します。

### まえおき - 読者の想定

- P4の概要を聞いたことがある
- 少しはP4プログラムを読んだ or 試したことがある
- P4Runtime については試したことが無い
- 無いけど、簡単なコントローラの一つでも作ってみたい

ひょっとしたら、P4Runtime APIを使ったコントローラを作りかけたが余りの資料の少なさとわかりにくさに挫折した、という人が最適かもしれません。私自身がそうなりかけて、このチュートリアルを作ったのですから。

### 本題 - チュートリアルの概要紹介

そこで、そうした人たち向けにP4Runtime APIの機能のいくつかを使った簡単なスイッチプログラムのチュートリアルを作りました。

### [P4Runtime-NanoSwitch](https://github.com/yyasuda/P4Runtime-nanoswitch/blob/master/docs_ja/README.md) 
"A Simple L2 lerning switch development tutorial on P4Runtime"

がそれです。このチュートリアルでは、以下の四つのことを試します。最終的には非常に簡素な MAC Learning Switch が出来上がります。

- Multicast Group の設定と、それを利用した Flooding 処理
- Packet-In 処理を利用した、コントローラへの処理依頼
- Packet-Out 処理を利用した、スイッチのテーブルへのエントリ追加
- そうした実験を行うための P4Runtime Shell への機能追加

つまりこうした、コントローラを作成するための一般的な事項について、ざっと眺めて試してみれば、皆さん自分の望むコントローラを試作することができますよね？というコースです。

これらの実験は、以下の環境で行います。
- コントローラ役には P4Runtime Shell を用いる
- スイッチ役には P4Runtime に対応した Mininet を用いる
- P4 コンパイルにはオープンソースの p4c を用いる

Docker, Mininet あたりの操作に慣れた人なら、数時間で一通り試せるサイズだと思います。

## 資料など

P4/P4Runtimeについては、初学者・取っかかり時期の人向けの資料やリンクが思いつかず。。なにかあれば一報ください。

- [日本P4ユーザ会](https://p4users.org)
- [P4Runtime API](https://p4.org/p4-runtime/)

**そうそう。**

P4Runtime APIはgRPC / Protocol Bufferを用いているので、そのあたりの理解があると分かり良いと思います。

それから、こんなチュートリアルも作ってみました。はじめの一歩、のような感じで、コントローラなどは全く登場せず、ただP4Runtime APIを使って、Packet-In/Outやフローエントリの設定など基礎的な操作を試すものです。

- [P4Runtime-firstbite](https://github.com/yyasuda/P4Runtime-firstbite/blob/master/docs_ja/README.md) 

こんなツールも作ってみました。CPU portの番号を「実環境」で調べるものです。P4RuntimeだとCPU portって何番か決まってないんですよね。。

- [P4Runtime-CPUport-finder](https://github.com/yyasuda/P4Runtime-CPUport-finder/blob/master/README_ja.md)


### おまけ

P4Runtimeを使ったスイッチ・プログラミングはそれなりに良く出来ていて分かりやすいところもあるのですが、とにかく易しくない＆優しくないです。関連する要素を一通り把握して、最初の一歩が踏み出せるまでがとてもしんどい。初学者向けのまとまったものがなく、検索するとレベルが大幅に異なるドキュメントが出てくる。幾つかのものはバージョンが古かったりある環境では動作しなかったりで、いつも疑いながら進めていく感じです。

その中で何度も「これ簡単なチュートリアルがあったら短い時間で済んだのになあ」と思いました。簡単な入り口となるチュートリアルを作成したのはそのためです。

P4Runtime関連で、何か良いツールや教材となりそうなものをお持ちの方はぜひ共有して、取りかかる人を増やしましょう！
[heroku] ローカルでは何もエラー出ないのにherokuでデプロイしたら自作のapiに503エラーが出たりする場合

##環境
node：v8.11.3

##起こったこと
タイトル通りだが、一つの作品をherokuでデプロイし外部公開して実際に動かしてみると、一部の機能だけ503エラーが出てしまう。
ローカルでは問題なく動くのに。。。

herokuの内部のエラーを見ても直接は関係なかった。

ウーン...ウーン...ファ！？ウーン...

この謎の現象に1日中かけても解決できていなかったが、とうとう解決できた。

##解決方法
もしかしてバージョンの違い？という名推理が働いた。
だって古かったらnodeの非同期使えなかったりするからなぁ。。。
そういえばデプロイするときバージョンとか何も指定していなかったことを思い出した。

ググったら、herokuデプロイの際にバージョン指定できることが判明。感動の涙が出た。

デフォルトのpackage.jsonでは12.xとかいうふざけたバージョンになってて泣いた。こちとら、数年前に作ったシステムをデプロイするんじゃ。

```json:package.json
  "engines": {
    "node": "12.x"
  }
```
いや、できるだけ最新のほうがいいのは分かるが、今回はそれはつらいッピ！変更しますゾ。
ローカルでは問題なく動いているので、ローカルのnodeとnpmのバージョンを調べてpackage.jsonに追加

```json:package.json
  "engines": {
    "node": "8.12.0",
    "npm": "6.4.1"
  }

```

これでデプロイしたら、とうとう動いた。
結局いつもの、バージョンの違い。

ほんとこのエンジニア生活では、「バージョンの違い」は逃れられない試練なんだよなぁ(戒め)
しょうがねぇなぁ(孫悟空)。バージョン気を付けてみっか！(孫悟空)

てか、heroku側で出るエラーが抽象的すぎんゾ。。。
ローカルで出るようなエラーと全く同じエラーでいいからそのまんま出してほしいゾ。

## 感想
awsとかdockerで環境構築してから開発する場合そのときにいろいろバージョン指定したりするからこのようなミスをすることはないはずだけど、herokuみたいにリポジトリフォークしてそのままデプロイするとこのようなミスをするんだなって思った。
UiPath StudioX のデータ抽出 ボタンの出し方

UiPath StudioXでデータ抽出(Data Extraction)のボタンを出すのに苦戦した為、備忘録として書く。

# データ抽出(Data Extraction)とは


指定されたWebページまたはアプリケーションからデータテーブルデータや検索結果など構造化データを抽出する。


UiPathのデータスクレイピング(Data Scraping)と似た機能であり、現時点(2020/4/9)でStudioXの情報が少ない為、機能が気になる方は「UiPath データスクレイピング」で調べるとイメージがつきやすいかもしれない。

データ抽出はStudioXのリボン部分にあるのだが、これが最初から表示されてない場合パッケージ管理からダウンロードする必要があり、その方法がネットで見つけることが出来ず手間取ったという経緯である。
<img width="551" alt="リボン部分.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/616232/436d7932-6827-ee6c-0476-43260c2556ad.png">




# パッケージのダウンロード方法
<img width="640" alt="インストール方法.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/616232/2e17b8b4-7881-6c54-654c-49424d4300fb.png">


①リボン部分の「パッケージを管理」をクリック。
　別画面で表示されたパッケージ管理画面が表示される。
②「オフィシャル」をクリック
③「UiPath.UIAutomationNext.Activities」を入力
④プレリリースにチェック(☑)を入れる
⑤検索で出てきたものを選択
⑥「インストール」をクリック

※この後必要であればパッケージ管理画面下にある「保存」をクリック。
私の環境では一度インストールしている為か「保存」のクリックが出来なかった。臨機応変にご対応下さい。

# パッケージのインストールに手間取った原因

公式StudioXガイドに似ているアクティビティがあったためである。

今回インストールしたかったアクティビティは下記。
[Extract Table Data](https://docs.uipath.com/studiox/v2020.4/docs/n-extract-data)
UiPath.**UIAutomationNext**.Activities.NExtractData


似たアクティビティは下記。
[Extract Data](https://docs.uipath.com/studiox/docs/extract-data)
UiPath.**UIAutomationX**.Activities.ExtractData

日本語版
[データを抽出](https://docs.uipath.com/studiox/lang-ja/docs/extract-data)
UiPath.**UIAutomationX**.Activities.ExtractData



日本語版を読んだが、正直データ抽出(Data Extraction)のアクティビティと思っても問題無い機能説明になっている(気がする。。。)
しかしExtractDataの「UiPath.UIAutomationX」でパッケージを調べても出なかったので、兎にもかくにも気をつけて欲しい。
※正確なこと分かる方いらっしゃったら記事の作成をお願い致します。


※Googleで検索すると似たアクティビティの説明の方が先に検索結果にでるようになっている。(…罠がいっぱい)
<img width="690" alt="検索結果.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/616232/58c9a0bb-e8ff-6d3a-eca7-9f727ed34ddf.png">
Google Cloud 認定　Associate Cloud Engineer （ACE）に合格しました

# 概要
GCP系の資格のアソシエイトレベルの資格。
> 時間: 2 時間
登録料: $125 （税別）
言語: 英語、日本語、スペイン語、ポルトガル語、フランス語、ドイツ語、インドネシア語
試験の形式: 試験は選択式で、テストセンターで受験します。お近くのテストセンターはこちらから検索してください。
前提条件: なし
推奨される経験: GCP の実務経験が 6 か月以上。

# 勉強法
自分のスキルは、クラウドの業務経験なし（触ったことはある）、インフラ系の運用エンジニア。
AWSのソリューションアーキテクトとSysOpsのアソシエイト持ち。

[Udemy](https://www.udemy.com/)で
下記の練習問題を購入。
しょっちゅうやってる値引きキャンペーンで２０００円くらい。
Udemyはしょっちゅう値引きで８０％引きとかなるので、キャンペーン待って買うのをおすすめ。
Google Cloud Platform Associate Cloud Engineer Practice Test
（普通の練習問題　約５０問※２、コマンドライン系の練習問題２０問）

あとは、Google公式の[模擬試験](https://cloud.google.com/certification/practice-exam/cloud-engineer?hl=ja)（２０問くらい）
Googleフォームでやるもので、無料で何回でも可能。

上記をひたすらやって、答えの理由をドキュメントで確認するを繰り返す。

# 試験の感想
合格しました。
点数出ないので、どの程度かは不明。

実感としては、
５０問中、絞り込めなかったのは５問程度、他は１択か２択まで絞り込めた。

模擬試験に比べると、
問題も選択肢も情報量を増やしているので、一見難しくなったように見える。
知識的には問題をちゃんと読んで、勉強した知識で消去法をすれば、
ほとんどの問題は回答を２択まで絞り込めると感じました。

コマンドライン関連は、細かいオプションを丸暗記するというよりも、
主要コマンドがどのサービスに使われるかと、引数の勘所が分かっていれば大丈夫なレベルでした。

総じて、基本的な勘所が分かっていれば、回答を絞れる問題でした。

# 試験後の通知とか
申し込みをしたWebassessorのサイトで合格になったことはすぐ確認できる。
認定書は数日後にメール通知がきて、
Accredibleというとこのcredenitial.netで見れるようになる。
認定書はきた後も、
Webassessorのサイトには、
「最終的な試験結果が確定されるためには、Googleによる審査が必要です。」と表示されていて、
これには７〜１０日かかると書いてあり、完了後にメール通知があるらしい。
現時点で１０日経っているが、通知はまだない。
コロナのせいで遅れているのかもしれない。

領収書はWebassessorのサイトで発行。
ドル表示なので、会社とかに出すにはクレカの明細を待たなければいけなかった。
Google Meet（Hangouts Meet）にトラブルなく参加する方法

Google Meet（旧名Hangouts Meet）の会議に、社外の方をお呼びした際、

 * 指定されたURLに接続しても、会議の画面にならない
 * 事前に接続確認したい

というお話をいただくことがあります。ここでは、Meetの会議に参加するときに、よくある問題と接続確認の方法について説明したいと思います。
なお、2020年4月8日現在の情報に基づいて記述しています。

# 会議への参加方法

通常、会議の主催者は、事前に参加者にURLを連絡します。
参加者は、時間になったらそのURLにブラウザからアクセスすると、通常はこのような画面になります。
<img width="1002" alt="step1b.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184457/5de54d97-ecb8-8975-47f9-6156af803269.png">

（画面キャプチャの都合上、マイクとカメラはオフにしていますが、URLにアクセスした直後は両方オンになっているはずです。）

この画面がでない、という場合は、次の点をチェックしてください。

__対応ブラウザ__
Google Meetの対応ブラウザは次のようになっています。これらのブラウザを使用していることを確認してください。なお、他の参加者に画面共有をする際、全画面共有とウィンドウ共有が選べますが、Safariの場合は全画面共有にしか対応していませんのでChromeかFirefoxがオススメです。

* Chrome 最新版
* Firefox 最新版
* Safari 最新版
* Microsoft Edge 最新版

__ログイン画面が出てしまう場合__
URLにアクセスすると次のログイン画面が出ることがあります。
これは、Googleのアカウントで既にログインしている場合に起こります。この場合は、ブラウザのプライベートウィンドウで、URLを開き直すことをオススメします。
<img width="1008" alt="step2b.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184457/87b0462e-78e4-dd27-abc4-b7f48cccf9e2.png">

# 会議前に接続テストをする
会議が始まって、相手の声が聞こえない、こちらの声が相手に伝わらない、などが発生すると調整に時間がかかってしまいます。そういうことのないように、Meetで事前に接続テストをすることができます。

カメラ画像が表示されている右下に・が3つ表示されているアイコンがあります。（下図の矢印部）
![step3b1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184457/759c190d-08be-42de-1916-62e09fdda5fd.png)

ここをクリックして表示されるメニューから「設定」を選択します。
![step3b2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184457/282dcf99-d260-f303-3ef8-82a4ff3e23e2.png)

そうすると、2つタブがあるウィンドウが開きます。

 * マイクのテスト: 「音声」タブで、パソコンに向かって発言すると、マイクアイコンの横にある･･･が動けば、マイクは動作しています。
 * スピーカーのテスト: 「音声」タブで、スピーカーアイコンの横にある「テスト」をクリックして音が聞こえれば、スピーカーは動作しています。
 * カメラのテスト: 「動画」タブで、自分の画像が写っていれば、カメラは動作しています。

<img width="543" alt="step4b.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184457/f0485d21-5bbf-c455-b174-ed9d7e01c2ec.png">

ここまで出来ていれば、問題なく参加出来ると思います。

# いつ参加すべきか
「名前」を入力して「参加をリクエスト」を押しても参加出来ない場合、すこし焦るかもしれません。
このとき裏で何が起こっているかというと、主催者側に「●●さんの参加を受け入れますか」的な確認ダイアログが表示されていて、受け入れるを選択しないと入れないようになっています。
ボタンを押しても参加出来ない場合は、主催者がそのボタンを押せない状態だと思いますので、気長に待ちましょう。
ただし、まれに主催者もしくは参加者がURLを間違えていることもあります。。。
[Python] 前月を取得する

## やりたいこと
- ファイル名に前月をつけたい　→ 前月を取得したい

## ポイント
- ```datetime```で現在日付を取得して1か月引けばいい
- ```dateutil```を使うと簡単らしい

## サンプルコード
まずは```dateutil```をインストール

``` 
pip install python-dateutil
```

今日の日付を取得して、１か月ひいてみる

```python:tesy.py
#今日
today = datetime.date.today()
#先月
sengetsu = today - relativedelta(months=1)
```

```python:結果
2020-03-09
```

ファイル名に使いたいのは```yyyyMM```なのでフォーマット

```python:test.pyを修正
sengetsu = (today - relativedelta(months=1)).strftime('%Y%m')
print(sengetsu)
```
```python:結果
202003
```

## 感想

- 意外と面倒くさいことがわかった

- 　```powershell```だと``` (get-date).AddMonths(-1).ToString('yyyyMM')```で１行で終わり
MODIS のデータを R で扱ってみる（地表面温度 LST）

MODIS（MODerate resolution Imaging Spectroradiometer）のデータを R で扱う機会があったのでメモ。
なお、{[MODIS](https://github.com/MatMatt/MODIS)} という R のパッケージがあり、取得から加工までできてしまうみたいだが今回これは使わず、データの取得はNASA のサイト [EARTH DATA](https://earthdata.nasa.gov/) から DL、hdf への変換は [cygwin](https://www.cygwin.com/) ということにしておきます。

MODIS の 地表面温度（LST: Land Surface Temperature）に関するプロダクト MOD11A1 (LST_Day_1km) を可視化を含む分析において扱いやすくするために、

1. hdf 形式から GeoTiff 形式に変換し、
2. 座標を WGS1984 に変換し、
3. 物理量（ケルビンとか温度（セルシウス度））に変換する

コードをメモします。ポイント 1, 2 については [MODIS Tool](https://lpdaac.usgs.gov/news/downloadable-modis-reprojection-tool-mrt-and-mrtswath-tool-have-been-retired/) とか [HEG](https://newsroom.gsfc.nasa.gov/sdptoolkit/HEG/HEGHome.html)とかがあるが、それを R で代替しようとしたものです。全部 library(MODIS) でやればいいのに。

``` r
library(gdalUtils)
library(raster)
library(rgdal)
####

## 1. GeoTiff への変換
setwd("C:/hoge/piyo/MOD11A1_hdf") # cygwin で変換した .hdf を保存したフォルダ 
for(i in 1:length(list.files())){
  gdalUtils::gdalinfo(list.files()[i])
  dat <- gdalUtils::get_subdatasets(list.files()[i])
  gdalUtils::gdal_translate(dat[1],  # 1 が LST_Day_1km
                 dst_dataset=paste("C:/hoge/piyo/MOD11A1_tif/LST_Day_", i, ".tif", sep=""), of="GTiff")
  print(i)
}

## 2. 座標を WGS1984 に変換
setwd("C:/hoge/piyo/MOD11A1_tif")
for(i in 1:length(list.files())) {
    gdalUtils::gdalwarp(paste("LST_Day_", i, ".tif", sep=""),
                        paste("C:/hoge/piyo/MOD11A1_tif_prj/LST_Day_", i, ".tif", sep=""),
                        t_srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs", # to WGS1984 
                        overwrite=T)
  print(i)
}

## 3. 物理量に変換する（ついでに関心の対象範囲に clip/crop する）
setwd("C:/hoge/piyo/MOD11A1_tif_prj")
TargetArea <- readOGR("C:/hoge/piyo/TargetArea.shp") # たとえば、国土数値情報行政区域から関東地方のshp
#plot(TargetArea)

for(i in 1:length(list.files())){
  dat2 <- raster(list.files()[i])
  values(dat2) <- values(dat2)*0.02 - 273.15
  # 0.02 は MOD11A1 の scale値；　273.15 はケルビンからセルシウス度への変換式
  dat3 <- crop(dat2, TargetArea)
  writeRaster(dat3, filename=paste("C:/hoge/piyo/MOD11A1_fin/LST_Day_", i, ".tif", sep=""), 
              format="GTiff", overwrite=TRUE)
  print(i)
}
```

scale 値というのは、観測値（the digital values）を物理量（ここではケルビン）に変換するための値です（参考： https://lpdaac.usgs.gov/products/mod11a1v006/ ）。ここではさらに温度とするために -273.15 しています。

MOD11A1 の LST_Day_1km は、広域に毎日とれるが、雲があったりで見えるところ／見ないところが毎日違ったりする。

関東地方の2020年のある日の地表面温度分布（ブランクは NA）
![fig.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569582/42acbac0-cea4-0d85-f930-1bebc8837038.jpeg)


（もう一度）全部 library(MODIS) でやればいいのに。
アマビエさんのSlack絵文字を作ってみた

Twitterでアマビエさんが人気なようなので、Slack絵文字にしてみました。
著作権フリーです。おすきに右クリックでダウンロードください。

<h3>イラスト</h3>

静止画
![amabie.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129828/e5d763ca-ffa6-eb74-acf0-0111b2a4cb36.png)

ぴょんぴょん
![amabie_image_jump.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129828/19399c51-4928-4c80-2764-5b699cb728e8.gif)

キラキラ
![amabie_image_foil.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129828/5c31ff62-8210-de38-5762-d0944aa56bd2.gif)

<h3>テキスト</h3>
![アマ_ビエ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129828/7440fd5e-949d-e5f4-c619-5cebd8e8605e.png)

![amabie_jump.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129828/66cc4e03-0533-eed4-9ff5-da23e85562d8.gif)

![amabie_kaiten.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129828/3fc8cbce-1ed5-51d7-8fb7-18f94c5095d8.gif)

<h3>自分でも作れる</h3>
絵文字ジェネレータ
https://emoji-gen.ninja/

MEGAMOJI
https://zk-phi.github.io/MEGAMOJI/

テキストの場合は絵文字ジェネレータで生成。
描画の場合はクリスタやイラレなどで128px x 128px以下。
モーションはMEGOMOJIで。

<h3>こちらもどうぞ</h3>
noteでも頒布しています。
https://note.com/nocchilog/n/nd4d030a4c7fa
array_spliceで多次元配列に配列を追加する

array_spliceで多次元配列の中に配列を追加したい

```
親配列
$hoge = [
    ['id' => 1, 'name' => 'はげ'],
    ['id' => 2, 'name' => 'ひげ']
];

追加配列
$add = ['id' => 3, 'name' => 'ほげ'];
```
直で追加配列を指定してみる。

```
array_splice($hoge, 1, 0, $add);

結果：
[
    ['id' => 1, 'name' => 'はげ'],
    'id' => 3,
    'name' => 'ほげ',
    ['id' => 2, 'name' => 'ひげ']
]
```
ぶっ壊れた（・ω・｀

なので一度配列で入れ子にしてあげる。

```
array_splice($hoge, 1, 0, [$add]);

結果：
[
    ['id' => 1, 'name' => 'はげ'],
    ['id' => 3, 'name' => 'ほげ'],
    ['id' => 2, 'name' => 'ひげ']
]
```

おっお（＾ω＾
GitLabからJenkins Pipelineへの Source Cloneではまった話

### 今回の環境はこちら
ソース

- GitLab Community Edition 12.5.10

動作環境

- Jenkins v2.204.2
- OpenShift v3.11 : はJenkinsはここからデプロイしてます
- Kubernetes v1.11

## 概要
GitLabからのcloneって ローカルだとさくっといけるじゃないですか

例: `git clone htttps://userid:pass@url〜`

でも、Jenkins Pipeline は 甘くなかったです。

結論的には、下記でうまくいきました。

- git の `credentialsId`構文を使った
- CredentialsIDは Jenkinsに入力時に指定するものでなく、Jenkinsが自動採番するものを使った

## Try and Error
下記だとできませんでした。

- Pipelineで、withCredentialsで認証情報をローカル変数に格納し、それをURL内にセット

一応 認証情報はJenkinsに格納して、ソース上で直書きしないようにしてます。
(仮に直書きしても疎通できないらしい。よい子はやっちゃダメよ)

ソース


```JavaScript
withCredentials([[$class: 'UsernamePasswordMultiBinding', 
   credentialsId: '認証情報の名前(Jenkinsで自動採番されるやつ)',
   usernameVariable: 'USERNAME', passwordVariable: 'PASSWORD']]) {
   git url: "https://$USERNAME:$PASSWORD@gitのURL", branch: "master"
}
```

↑ 実は 「UsernamePasswordMultiBinding」が間違っているのかもしれないと思い、「UsernamePassword」でやってもだめでした↓

```JavaScript
withCredentials([usernamePassword(
   credentialsId: '認証情報の名前(Jenkinsで自動採番されるやつ)', 
   usernameVariable: 'USERNAME', passwordVariable: 'PASSWORD')]) {
   git url: "https://$USERNAME:$PASSWORD@gitのURL", branch: "master"
}
```

結果　認証エラー

```JavaScript
stderr: fatal: Authentication failed for 'https://****@gitのURL/'
```


## Try and OK, but...

Pipelineを使わず、「フリースタイルのビルド」を選択して GitLab連携するとさくっとcloneできます。
このときは「ソースコード」の「Git」から「認証情報」を登録してやります。

しかしPipelineを使いたいんですよね〜


## Finally OK

最終的にこれで、Pipelineからでもうまくいきました。
なお、credentialsIdは、あらかじめGitで登録した「ユーザー名とパスワード」でJenkinsに登録し、自動採番されるIDをPipeline内にふってやります。

```JavaScript
git credentialsId: '認証情報の名前(Jenkinsで自動採番されるやつ)', 
  url: "https://gitのURL", branch: "master"
```

## 補記: 認証方法についてのTry & Error
「ユーザー名とパスワード」ってださくないか、と思い、Gitのリポジトリのデプロイトークンや、ssh keys で試しましたが、そちらはうまくいきませんでした。
やり方がわかっていないだけのような気もしますが。。。。


以上、困っている人の参考になれば幸いです
IE11では、チェックボックスのindeterminateプロパティが変化したときにonchangeイベントは発動しない

JavaScriptを使うと、チェックボックスの中間状態を表すのに、`indeteminate`プロパティを使えます。
以下のHTMLをブラウザで表示すると、チェックボックスとボタンが表示されます。ボタンを押すと、チェックボックスが中間状態になります。

```html
<meta charset="utf-8">
<input type="checkbox" id="test" onchange="showAlert()">
<input type="button" onclick="toIndeterminate()" value="チェックを中間状態にする">
<script>
  let checkbox = document.getElementById("test");

  let showAlert = function(){window.alert("alert")};
  let toIndeterminate = function(){checkbox.indeterminate = true};
</script>
```

ところがどうやらIEでは、チェックを中間状態にしてから、チェックボックスをクリックしても、`onchange`イベントは発生しないようです。

仕方ないので、`onclick`にすることで対応しました。

```html
<meta charset="utf-8">
<input type="checkbox" id="test" onclick="showAlert()">
<input type="button" onclick="toIndeterminate()" value="チェックを中間状態にする">
<script>
  let checkbox = document.getElementById("test");

  let showAlert = function(){window.alert("alert")};
  let toIndeterminate = function(){checkbox.indeterminate = true};
</script>
```
[Windows] Firebaseのlogin時に「Error: Cannot run login in non-interactive mode.」と言われた時の解決方法

Firebase に限った話ではないですが、ググっても直ぐに解決策を見つけることができなかったので書きます。

```
$ firebase login

Error: Cannot run login in non-interactive mode. See login:ci to generate a token for use in non-interactive environments.
```
となった場合は、使用しているターミナルアプリが原因です（私はMinGWを使っていました）。

Windowsのコマンドプロンプトを使えば、loginコマンドが実行できす。

# 参考

* [CygwinでPythonを対話モードで起動する]
(http://lunran.sakura.ne.jp/wordpress/2013/08/15/cygwin%E3%81%A7python%E3%82%92%E5%AF%BE%E8%A9%B1%E3%83%A2%E3%83%BC%E3%83%89%E3%81%A7%E8%B5%B7%E5%8B%95%E3%81%99%E3%82%8B/)
PHP　検索・置換系の引数の順番まとめ

\$needleと\$haystackどっちが先だったっけ？
といつも~~記憶喪失~~悩まされるのでメモ

| 関数 | 第1引数 | 第2引数 | 第3引数 | 第4引数 | 第5引数 |
|:--|:--|:--|:--|:--|:--|
| strpos | <font color=“Crimson”>$haystack</font> | <font color=“Blue”>$needle</font> | $offset |  |  |
| substr_count | <font color=“Crimson”>$haystack</font> | <font color=“Blue”>$needle</font> | $offset | $length |  |
| str_replace | <font color=“Blue”>$search</font> | $replace | <font color=“Crimson”>$subject</font> | $count |  |
| preg_match | <font color=“Blue”>$pattern</font> | <font color=“Crimson”>$subject</font> | $matches | $flags | $offset |
| preg_replace | <font color=“Blue”>$pattern</font> | $replace | <font color=“Crimson”>$subject</font> | $limit | $count |
| preg_replace_callback | <font color=“Blue”>$pattern</font> | $callback | <font color=“Crimson”>$subject</font> | $limit | $count |
| array_search | <font color=“Blue”>$needle</font> | <font color=“Crimson”>$haystack</font> | $strict |  |  |
| array_filter | <font color=“Crimson”>$array</font> | <font color=“Blue”>$callback</font> | $flag |  |  |
Visual Studio Codeのダークテーマをさらに黒くしよう

<a href="https://qiita.com/ayatokura/items/4301e0d1d8b339f722eb">設定(JSON)</a>に，以下のコードを付け加えて，

```json:settings.json
"workbench.colorCustomizations": {
        "[Default Dark+]": {
            "titleBar.activeBackground": "#000",
            "sideBar.background": "#000",
            "tab.activeBackground": "#000",
            "tab.inactiveBackground": "#000",
            "editorGroupHeader.tabsBackground":"#000",
            "activityBar.background":"#000",
            "editor.background":"#000",
            "tab.activeBorder":"#ce9178",
            "tab.border": "#000"
        },
    }
```

配色テーマを「Default Dark+」に変更するとこうなります．
![2020-04-10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230846/f162b01c-26d5-d20b-5ffb-bd746428f304.png)

## 参考にさせていただいた記事

【Visual Studio Code】v1.12.1 設定のためのSettings.jsonファイルについて
https://qiita.com/ayatokura/items/4301e0d1d8b339f722eb

Visual Studio Code の配色を好き勝手にカスタマイズした（settings.json）
https://qiita.com/deren2525/items/6bc099ae8c05e3076055
【備忘録】CPUバス接続について調べたこと　

#概要
　マイコンのペリフェラル制御で、アドレスとデータバスを使用した通信をする機会があり、用語など調べたことを備忘録として残します。

#内容

【バスの方式】

 - セパレートバス　　　：　アドレスバスとデータバスが分かれている
 - マルチプレクスバス　：　アドレスバスとデータバスが兼用

【バスアクセス方法】

 - 1ライトストローブモード
 - バイトストローブモード


##1ライトストローブモード

 - bit数に関わらず、1アクセスでR/Wが可能。
 - この時のライト信号はWR#。
 - データバスがマイコンと一対一で接続されている場合などに使用。
 - 基本的には２byte単位でデータをやり取りするため、アドレスは偶数で指定する。
 
##バイトストローブモード
 - 外部メモリのデータバスが8bit。
 - データを複数回に分けてアクセスする。16bitデータバスならD0～D7、D8～D15で2回に分けてアクセスする
 - 利用されるWR信号はWR0#(D0～D7)、WR1#(D8～D15)となる。
 - R/W問わずアクセス中にはBC0#(D0～D7)、BC1#(D8～D15)が出力される。
 - BC信号は上位バイト下位バイトの選択に使われる。

#見分け 
　どちらの方式か見分けるにはデータシートを読めばわかると思います。自分なりには、アドレス線の0（A0）を使用していなければ1ライトストローブだと思います。

A0 を使わない　＝＞　偶数アクセス、バイトアクセスしない、16bitアクセスや32bitアクセス等
 
今まで出くわした例でいうと、PCL6025というモータのパルスコントロールLSIの場合は1ライトストローブでした。

#その他
　バスを共有して使う場合はCS信号でチップを選択したり、ICによってはアクセス方法に癖があったりするようです。

 マイコンとFPGAのやりとりに使用する事もありますが、ここの設計はきちんとしないと無駄なアクセスをしてしまいますね。FPGAのレジスタが16bit幅なら、1ライトストローブのデータバス16bitにすれば一回のアクセスで済むように。この時、アドレスは偶数となるので注意が必要ですが。
 
参考

https://japan.renesasrulz.com/cafe_rene/f/forum5/996/thread
http://www.elec-hobbyist.com/MicomMemo/RX62_Intro_3.html
VBA用エディタVBEを黒背景にする。

メモとして残します。

設定する項目だけピックアップするので、
前提としては、デフォルトであること。

#■やり方
##オプションを開く
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/213462/ae066269-c7c3-8b7d-2934-b0ccd2a9da09.png)
その後エディタの設定タブを選択する。
##コードの表示色
###・標準コード
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/213462/577e723b-c993-8f38-6d22-738c8f81012d.png)
###・コメント
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/213462/d234309b-7a37-1295-1bc1-225c53aed21d.png)
###・キーワード
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/213462/82ae0f43-6e65-3f0e-2e2d-0dfc69a4e454.png)
###・識別子
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/213462/de457fbb-a527-927f-8e63-c027cebfd5b4.png)
foliumを使ってみた

## はじめに
最近foliumという、データを地図上で表示するライブラリを使ってみたので、勉強しながら記事にまとめてみました。



## foliumとは
[Folium](https://python-visualization.github.io/folium/)はデータを[Leaflet.js](https://leafletjs.com/)のマップで可視化をするpythonのライブラリです。

pythonのデータ操作とleafletのマッピングの両方の強みが利用できます。

Github:https://github.com/python-visualization/folium
Documentation:https://python-visualization.github.io/folium/

## インストール
pip installでインストールできます。


```python:foliumのインストール
$ pip install folium
```

## 地図を表示してみよう！
まずはjupyterで東京駅([35.681167, 139.767052])を中心とした日本地図を表示。
`location`に緯度経度を入力すると、その位置を中心としたmapが表示できます。


```python:東京駅を中心とした日本地図をplot
import folium
map_ = folium.Map(location=[35.681167, 139.767052], zoom_start=7)
map_
```

<img width="972" alt="スクリーンショット 2019-12-03 14.31.51.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/217571/783c6ed4-9c15-6f7f-ed72-1d18c3f7444e.png">

3行だけで地図が表示できました。

次は作成した日本地図に、百貨店の位置情報をマッピングしてみます。
百貨店の位置情報はHPで検索し、csvファイルとして保存しました。

csvファイルはこんな形式で保存しています。(`department_info.csv`)

|| store_name|	contry	|area	|prefecture	|city	|address	|latitude	|longitude	|depart|
|:--:|:--:|:--:|:--:|:--:|:--:|:--:|:--:|:--:|:--:|
|0	|日本橋三越本店	|日本	|関東	|東京都	|中央区	|東京都中央区日本橋室町1-4-1|	35.685633|	139.773430|	三越|
|1	|銀座三越	|日本	|関東	|東京都	|中央区	|東京都中央区銀座4-6-16	|35.671370|	139.765738|	三越|
|・・・|
| 88 | ShinQs ビューティー パレット 町田店 | 日本 | 関東 | 東京都 | 町田市 | 東京都町田市原町田6-4-1 町田東急ツインズ WEST 3F | 35.542690 | 139.446409 | 東急百貨店 |
| 89 | ながの東急百貨店 | 日本 | 中部 | 長野県 | 長野市 | 長野県長野市南千歳1-1-1 | 36.645052 | 138.188676 | 東急百貨店 |


```python:先ほど表示したmapに百貨店のマーカーを追加する
import pandas as pd
data = pd.read_csv('department_info.csv')
color_list = {'三越':'red', '大丸':'blue', '西武・そごう':'green', 
              '高島屋':'purple', '阪急阪神':'orange', '東急百貨店':'darkred'}
for k, v in data.iterrows():
    folium.Marker([v.latitude, v.longitude], popup=v.store_name, icon=folium.Icon(color=color_list[v.depart])).add_to(map_)    

map_
```

<img width="971" alt="スクリーンショット 2019-12-03 15.13.48.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/217571/e1dd436a-dbcb-5364-3793-4a1be0490d6a.png">

* `popup=xxx`
xxxにコメントを追加すると、ポップアップとして表示できます。


* `icon=folium.Icon(color=xxx1, icon=xxx2)`
マーカーiconの種類はxxx1とxxx2を指定すると変更できます。

 xxx1に使用できるカラー

```
[‘red’, ‘blue’, ‘green’, ‘purple’, ‘orange’, ‘darkred’,
’lightred’, ‘beige’, ‘darkblue’, ‘darkgreen’, ‘cadetblue’, 
‘darkpurple’, ‘white’, ‘pink’, ‘lightblue’, ‘lightgreen’, 
‘gray’, ‘black’, ‘lightgray’]
```

 xxx2に使用できるマーカー
https://glyphsearch.com/?library=font-awesome


次は表示した百貨店ごとに、半径20kmの円を表示してみます。

```python:百貨店から20km圏を円で表示
for k, v in data.iterrows():
  folium.Circle([v.latitude, v.longitude], radius=20 * 1000, tooltip='20km', popup=v.store_name
                              , color=color_list[v.depart], fill_color=None).add_to(map_)

map_
```

<img width="972" alt="スクリーンショット 2019-12-03 16.34.28.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/217571/0dc12aaa-91d3-375f-6efa-5192cf031a28.png">


最後に作成したmapをhtml形式で保存しました。

```python:作成したmapを保存
map_.save('department_location.html')
```

## おわりに
思った以上に簡単に、綺麗な地図可視化することができました。

(アカウント移行に伴い再掲)
Private Docker RegistryからPullできないとき

会社とかで立ててるプライベートなDocoker RegistryからPullできずこんなメッセージが、、、

```shell
unauthorized: authentication required
```
pullする前にPrivate Docker Registryへログインする必要があるようだ。

ログインするには？

```
docker login -p [ユーザーパスワード] -u [ユーザー名] [サーバ名]
```
このようにPrivate Docker Registryの認証情報を引数につけてloginする
そのあとにdocker pullするとPrivateなDocker Registryイメージをpullできる。

Private Docker Registryからログアウトするときは

```
docker logout [サーバ名]
```

たまに忘れるので備忘録として
cygwin_exception::open_stackdumpfile: Dumping stack trace to perl.exe.stackdumpとなった時の対応方法

- 環境
    - Windows 10 64bit バージョン1909
    - git version 2.25.0.windows.1

# 事象 : 長期間使用されたSVNをGitに移行したくて`git svn init`したらなんか言われた

```bash
$ git svn init -s --prefix=svn/ --no-minimize-url https://server.domain.com/repos/hoge/subdir/subsubdire
Initialized empty Git repository in C:/git/iko/.git/
      0 [main] perl 1474 cygwin_exception::open_stackdumpfile: Dumping stack trace to perl.exe.stackdump
```

```text:perl.exe.stackdumpを見ても意味不明
Exception: STATUS_ACCESS_VIOLATION at rip=00000000000
rax=0000000000000000 rbx=00000006011390B8 rcx=00000006011420F8
rdx=000000060114A438 rsi=0000000000000000 rdi=0000000000000011
r8 =0000000000000000 r9 =0000000601179EA8 r10=0000000100000000
r11=0000000601179EA8 r12=00000000FFFFC278 r13=0000000601139148
r14=00000006011420F8 r15=0000000000000000
rbp=00000000FFFFC270 rsp=00000000FFFFC208
program=C:\apps\Git\usr\bin\perl.exe, pid 1529, thread main
cs=0033 ds=002B es=002B fs=0053 gs=002B ss=002B
Stack trace:
Frame        Function    Args
End of stack trace
```

`.git/config`をみると基本的なSVNの構造なのに`svn-remote`に`branches`や`tags`がない・・・

```conf:config
[core]
    repositoryformatversion = 0
    filemode = false
    bare = false
    logallrefupdates = true
    symlinks = false
    ignorecase = true
[svn-remote "svn"]
    url = https://server.domain.com/repos/hoge/subdir/subsubdire
    fetch = trunk:refs/remotes/svn/trunk
```

# 原因1 : SVNのあるサーバーに接続できていないから
散々調べた挙句・・・`server.domain.com`にそもそも繋がらない・・・SVNがでかいとか履歴が多いとか関係なかった。
今回は`hosts`にある余計な設定のせいで接続できない状態になっていた
あまりこの理由で引っかかる人はいないかも・・・

# 原因2 : メモリの問題？
[perl - git svn clone malformed index info error - Stack Overflow](https://stackoverflow.com/questions/32465621/git-svn-clone-malformed-index-info-error)
この場合は、`.git/config`に設定を追加すると対応できるようだ。
Resolve authentication error for ssh:// in Cargo project

In some crates, dependencies may be use ssh protocols, cargo build may lead some error like this:

```

Caused by:
  failed to authenticate when downloading repository
attempted ssh-agent authentication, but none of the usernames `git` succeeded

Caused by:
  error authenticating: no auth sock variable; class=Ssh (23)
```

## How to fix?

Some advices [here](https://github.com/rust-lang/cargo/issues/3900) like this:

```
[url "git@github.com:"]
    insteadOf = https://github.com/
```

But not worked for me, I used this resolution:

```shell

eval `ssh-agent -s`
ssh-add
cargo ...
```
IntelliJのSBTコンソールに<set>:1: error: not found: value ideaPortがでたら

## 概要

ある日急にタイトルのようなエラーがでて動かなくなった😇


### 解決方法

Stack overflowとかでだいたい `rm -r project/target` をすればなおる的なこと書いてあるけど、なんか腑に落ちない。。。。。。
(IntelliJならもっと簡単な方法あんじゃね)

ってことで調べたらめちゃシンプルな方法あった

1. IntelliJで画面右側にある(自分の環境では)sbtタブをクリック
2. リロードマークみたいなのがあるのでそれをクリック


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133737/8c94407d-b26f-1e20-b3fe-8de1d7c95100.png)


以上！！！！！


### 参考資料

[Exception in Intellij's SBT Console: not found: value ideaPort ideaPort in Global := 49516](https://stackoverflow.com/questions/55501899/exception-in-intellijs-sbt-console-not-found-value-ideaport-ideaport-in-globa/55900545)
[AE]キーフレームの範囲内での最大値を求める　メモ用

＃やりたい事
レイヤーの回転にキーフレームを２つ打って
その間のベロシティが最大の時の値を取りたい時

#内容
whileを使って配列に入れていく。
キーフレームの１～２の時間を一度フレームに変換して
count++フレームとして利用して、countをframesToTime（）で時間に戻す
それを配列に追加していく。

#使いどころ
最大のモーションブラーがかかった場所で次の処理や効果を加える。
これによって、一番視認しずらい場所で変更を加える事が出来る。
言えばトリガーみたいな役割で使う予定。

#expression

```javascript
key1 = timeToFrames(t = thisComp.layer("HEY").transform.rotation.key(1).time, fps = 1.0 / thisComp.frameDuration, isDuration = false);
key2 = timeToFrames(t = thisComp.layer("HEY").transform.rotation.key(2).time, fps = 1.0 / thisComp.frameDuration, isDuration = false);

var count = 0;
var velArray =[];
while(count < key2){
	temp = thisComp.layer("HEY").transform.rotation.velocityAtTime(framesToTime(count, fps = 1.0 / thisComp.frameDuration));
	velArray.push(temp)
	count ++
}

velArray.join("\r");
Math.max.apply(null, velArray);
```
Emacs - abbrev の外道な(?)使い方

**abbrev モードを使う目的**
打鍵量を減らすことです。

**先頭は数字**
略語の先頭を数字にすることで、キーワードやシンボルと重ならないパターン（基本は構文エラー）を利用します。

例えば、C++言語では

```text:
3d  ->  #define
8i  ->  #include
3u  ->  #undef
2c  ->  continue
3r  ->  return
2rc ->  reinterpret_cast
0p  ->  printf
...
```

などとなるように略語を登録して使います。

**先頭の数字で後続をグループ分け**

数値に意味を持たせて

```
1i  ->  std::cin
1o  ->  std::cout
1e  ->  std::cerr
11a ->  boost::array
...
```

みたいなのもありでしょう。

---

・ 登録内容は、オレオレ略語の塊なので、他人と共有が困難です
・ 文字種違い入力で自動展開にしておくと、数値記述が展開されることがあります
BigQuery Materialized View とは

この記事は古いです。
2021-02-26のGAに伴い、Materialized Viewができることは大幅に増えました。
ぜひ公式のドキュメントを読んでいただければと思います。

https://cloud.google.com/bigquery/docs/release-notes#February_25_2021

https://cloud.google.com/blog/products/data-analytics/bigquery-materialized-views-now-ga

# この記事何
BigQuery materialized views が 2020-04-08 に beta になりました。
伴って、ドキュメント[^1][^2][^3][^4]が増えているので、重要だと思ったポイントをまとめました。

[^1]: [Introduction to materialized views](https://cloud.google.com/bigquery/docs/materialized-views-intro)
[^2]: [Materialized views FAQ](https://cloud.google.com/bigquery/docs/materialized-views-faq)
[^3]: [Creating and using materialized views](https://cloud.google.com/bigquery/docs/materialized-views)
[^4]: [BigQuery Materialized View best practices](https://cloud.google.com/bigquery/docs/materialized-views-best-practices)


# materialized view とは
誤解を恐れずに言えば、最新キャッシュの存在を保証した VIEW です。

## メリット
自動 & 手動のキャッシュ再計算が定義されており、メンテ不要で新鮮にできます。

## 作り方
いつもの CREATE VIEW に MATERIALIZED を入れるだけです。

```sql
CREATE MATERIALIZED VIEW `project-id.my_dataset.my_mv_table` AS
SELECT date, AVG(net_paid) AS avg_paid
FROM project-id.my_dataset.my_base_table
GROUP BY date
```

CREATE OR REPLACE ができなかったりちょっと不便です。
また、集約関数を持たない Materialized View は作れません。

## 価格（オンデマンド）
実テーブルと同様の参照、保存コストに加え、ベーステーブルが更新されると差分の計算コストがかかります。
ただし集約関数は、中間データを保持するためテーブルの保存コストとは差異があります。

## 更新頻度

### 通常の自動更新
自動更新頻度は標準 30 分、最小1分、最大7日間で設定できます。
total_bytes_processed、total_slot_ms を監視して、コストに応じて自動更新間隔を調整しよう。
ベーステーブルの変化率が小さいなら更新頻度下げましょう。ベーステーブルがコロコロ変化するなら更新を頻繁にしましょう。ベーステーブルの取り込みに合わせてキックできるなら自動更新を切って、手動更新も良いでしょう。

DML INSERT や append で更新された時は、前の自動更新のキャッシュとベーステーブルの差分に対するクエリが走ります。この差分を取り込む更新になるため、更新頻度を調整しましょう。

（自動更新とベーステーブル更新時の自動更新の区別がよくわかってないです、コメント or [Twitter](https://twitter.com/na0fu3y) で連絡ください！）

### invalidated になった時の自動更新
これらのアクションでベーステーブルが更新されると、5 分以内に Materialized View も自動更新されます（おそらくその間はベーステーブルにクエリが走ります）。

- DML UPDATE
- DML MERGE
- DML DELETE
- truncation
- partition expiration
- console
- bq command-line
- API equivalents of the preceding items in this list

## デメリット
- UNNEST、JOIN、UDF、大部分の集約関数はサポートされていない
- 集約関数は、APPROX_COUNT_DISTINCT、ARRAY_AGG、AVG、COUNT、HLL_COUNT.INIT、MAX、MIN、SUM のみサポートされている（COUNT(DISTINCT x) は非対応）
- ベーステーブルと同じデータセットにある必要がある
- Materialized View はデータセットレベルの権限設定しかできない
- Materialized view はネストできない
- 同じベーステーブルに 20 個までしか定義できない
- まだ各言語の Client API はなさそう

## スケジュールドクエリとの使い分け
可能な限り、スケジュールドクエリよりマテリアライズドビューを使いましょう。
複雑な計算が必要ならスケジュールドクエリもやむなしですが、データの古さを許容できる必要があります。

[Comparison to other BigQuery techniques](https://cloud.google.com/bigquery/docs/materialized-views-intro#comparison) に
Caching、Scheduled queries、Standard views、Materialized views の比較があるので興味があれば読みましょう。

# まとめ
私自身が思ったことをまとめます。

## すぐに使えるポイント
- キャッシュが有効な JOIN のない VIEW やスケジュールドクエリを Materialized View に置き換える
- 中間生成物を Materialized View にして、最終結果は JOIN 出すなどの工夫で、中間生成物の管理コストと計算時間を低減する
- ニアリアルタイムにすべてのデータを扱いたい場合、DWH に JOIN 済のテーブルを用意して全てを Materialized View にする

## ちょっと厄介なポイント
- Materialized View を無理に活用しようとすると既存のビューやテーブルの再設計が必要になる
- ベーステーブルと同じデータセットにしかおけない（[Table access controls](https://cloud.google.com/bigquery/docs/table-access-controls-intro) がGAになったので、うまく設定すれば参照権限が強すぎる問題は生じない）
- JOIN、UNNEST など強力な関数が使えないので、キャッシュ管理コストの低減のためにリプレイス再設計は割に合わない
AWS WorkSpaces が使っている IP リスト


AWS WorkSpace が利用している IP レンジが 2020/4/20 から増える(た)。

Starting on April 20, 2020, Amazon WorkSpaces will use an expanded list of Amazon EC2 public IP address ranges for its PCoIP gateway servers.

## Asia Pacific (Tokyo)
18.180.178.0 - 18.180.178.255
18.180.180.0 - 18.180.181.255
54.250.251.0 - 54.250.251.255

## US East (N. Virginia)
3.217.228.0 - 3.217.231.255
52.23.61.0 - 52.23.62.255

## US West (Oregon)
44.234.54.0 - 44.234.55.255
54.244.46.0 - 54.244.47.255

## Asia Pacific (Seoul)
3.34.37.0 - 3.34.37.255
3.34.38.0 - 3.34.39.255
13.124.247.0 - 13.124.247.255

## Asia Pacific (Singapore)
18.141.152.0 - 18.141.152.255
18.141.154.0 - 18.141.155.255
52.76.127.0 - 52.76.127.255

## Asia Pacific (Sydney)
3.25.43.0 - 3.25.43.255
3.25.44.0 - 3.25.45.255
54.153.254.0 - 54.153.254.255

## Canada (Central)
15.223.100.0 - 15.223.100.255
15.223.102.0 - 15.223.103.255
35.183.255.0 - 35.183.255.255

## Europe (Frankfurt)
18.156.52.0 - 18.156.52.255
18.156.54.0 - 18.156.55.255
52.59.127.0 - 52.59.127.255

## Europe (Ireland)
3.249.28.0 - 3.249.29.255
52.19.124.0 - 52.19.125.255

## Europe (London)
18.132.21.0 - 18.132.21.255
18.132.22.0 - 18.132.23.255
35.176.32.0 - 35.176.32.255

## South America (Sao Paulo)
18.230.103.0 - 18.230.103.255
18.230.104.0 - 18.230.105.255
54.233.204.0 - 54.233.204.255
Angularで複数画面でキーイベントを取得するときの注意

Angularで異なる画面で同じキーイベントを取得して処理している場合、後で定義した方のイベント処理が実行されてしまう。
例えば
A-Component

```
export class A-Component implements OnInit {
  ・・・
  ngOnInit():void {
    fromEvent(document, 'keyup').subscribe((e:KeyboardEvent) => {
      //イベント処理
    });
  }
}
```

B-Component

```
export class B-Component implements OnInit {
  ・・・
  ngOnInit():void {
    fromEvent(document, 'keyup').subscribe((e:KeyboardEvent) => {
       //イベント処理
    });
  }
}
```
としてあるとき、A-Componentのみ表示のときはB-Componentのイベント処理は実行されないが、画面遷移してB-Componentを表示後A-Componentに戻った時、B-Componentのイベント処理が実行されてしまう。

これを防ぐためには、B-ComponentでfromEventの戻り値を保持し、OnDestroy時にunsubscribeする必要がある。
具体的には
B-Component

```
export class B-Component impkements OnInit, OnDestroy {
  ・・・
  stream:any;

  ngOnInit() : void {
    this.stream = fromEvent(document, 'keyup').subscribe((e:KeyboardEvent) => {
      //イベント処理
    }
  }

  ngOnDestroy : void {
    this.stream.unscribe();
  }
}
```
Vimexcelの検索ではマージされたセル内の文言を検索できない

# ISSUE
Vimexcelの検索機能では、マージされたセルにある文言を見つけることができない。

# Solution
1. Vimexcelの検索を使わない。
1. 検索対象範囲のマージをすべて解除する。マージを解除すれば検索できることは確認したのですが、あまり現実的ではない方法なので、実質はSolutionは思いついていません。

私はvimexcelのほかにRelaxToolsを入れていますので、そちらで検索するようにしています。それかExcelの標準の検索か。

# 備考
Vimexcel:Vimexcel_1.2.5
Excel:Microsoft Office 365 ProPlus
OS:Windows 10
AWS CodeBuild でビルドの成功率が下がったとき

##CodeBuildでビルドするときに、なぜかビルドに成功する確率が低くなりました。

同じコードで成功するときと失敗するときがあり、
失敗する確率が高くなって、時間のロスを感じましたが、

対処法を明記します。

とても簡単です。

CodeBuildのビルドは、同時にいくつでも実行可能なので、
ビルド作業を繰り返して、同時に５個～１０個くらいビルドすれば、
どれかのビルドは成功します。

それでオッケーです。

同時にビルドするとこんな感じです。
![無題.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531595/b98cc5ee-3285-136f-0a8b-6c7887227775.png)

明確な原因が分かる人いたら教えてください。
【初心者向け】同値分割と境界値分析

## はじめに
今回は全国各地の入社して間もないだろう新入社員さん向けに、テストを行う上であると便利な知識、同値分割と境界値分析の用語についてざっくりと説明します。
※「そんなの知ってるよ！」「もう仕事でプログラミングやってるから大丈夫！」「テスター歴〇年のベテランです！」という方はブラウザバック推奨です！
本記事はあくまで知識０の方がざっくりとでもいいのでイメージが湧くようにお手伝いする記事ですので、専門の難しい用語はあまり出てきません。ご了承ください。


###何故それを説明するの？
冒頭にも記載しましたが、同値分割と境界値分析の考え方はIT系の企業に入りたての方なら持ってると便利な知識です。
多くの会社ではいきなりプログラミングを行うのではなく、下積み経験として何かしらのテストを行いますからね！
そのテストも大きく分けるとブラックボックステストとホワイトボックステストという項目になるのですが、ホワイトボックステストから行うことはあまりないと思うので今回はブラックボックステストについて軽く紹介してから本題に入ります。
※ホワイトボックステストは記事を分け、[次の回](https://qiita.com/sakuraki11/items/6cd02fc735863feb254b)で紹介しました。

## ブラックボックステスト
☆ざっくり説明すると取扱説明書通りに商品が動くかどうか確かめるテストだよ！

ブラックボックステストとは、発売前の商品の動作と仕様書や取扱説明書（商品の動作の理想像が詰まったファイルや紙の塊）を見比べてバグが起こらないかチェックするテストです。

「発売後の商品でも不具合はあるからテストする意味はあるのかな？」と思ったそこの貴方！かなり意味があるんですよ！！
発売した商品は沢山テストを行って不具合がかなり減ってるものなので、このテストは大事なんです。


お待たせしました！
では、そんな二つの考え方について見ていきましょう！

## 同値分割
☆ざっくり説明すると、同じ行動を行うものを集めてその中の一つを選んでテストだよ！
イメージの例：「りんご」「蜜柑」「バナナ」は全部ジャンルが果物なので、「りんご」を調べてジャンルが果物と表示されるか確かめる。

同値分割とは、行動パターンが同一で変化しない値を集め、その値を全部同一の結果であるとみなし、値の中から任意のものを一つ選んで行うテストの手法です。

何故そんなことをするの？
→全部同じ値なら何を入れても同じになるよね！という前提で、ユーザーがその値を元に操作した際機能を使えるかテストするためだよ！

####ーテスト設計者（テストを作る人）のメリットとデメリットー
・メリット：同じパターンの機能や分類があればある程テストする回数が減ること。
・デメリット：本当にその機能や分類が同じであるか分からない段階では使えないこと。

## 境界値分析
☆ざっくり説明すると、区切りの両端にある値が合っているか調べるテストだよ！
イメージの例：200枚の紙があり、1～100枚目は赤、101～200枚目には黄色の色がついています。赤い紙の始まりと終わりの1枚目と100枚目、黄色い紙の始まりと終わりの101枚目と200枚目を確認し、色がそれぞれ合っているか確かめる。

境界値分析とは、行動パターンが変化するところの境目の値に着目し、それぞれきちんと分類が行われているか確かめるテストの手法です。

何故そんなことをするの？
→ここはこの値だけど、ここからはこの値だよね！という前提で、ユーザーが思った通りにその機能を使えるか確かめるためだよ！

####ーテスト設計者（テストを作る人）のメリットとデメリットー
・メリット：境界値周辺にはバグが潜んでいることが多いので、テストする本来の目的である不具合の発見が比較的簡単に行いやすいこと。
・メリット2：同値分割のみよりテスト結果の精度が高く、追加の要望や仕様の削除などで仕様変更があった際も比較的対応しやすいこと。
・デメリット：多い時だと同値分割のみの3倍近くテストする回数が増えるため、テストする時間や人が必要であること
・デメリット2：テストする項目を作る際にはどこは削って良くてどこからは必ず実施しないといけないかが同じジャンルの製品でもプロジェクトによって異なること。

## おわりに
いかがでしたか？
もしこの記事を見て「ブラックボックステストについてもっと詳しく知りたい！」と思った方は、是非Qiitaの他の専門的なことが書かれている記事をご覧になってくださいね。
Reactで改行を<br />に変換

```js

  function nl2br(text) {
    var regex = /(\n)/g
    return text.split(regex).map(function (line) {
        if (line.match(regex)) {
            return React.createElement('br')
        }
        else {
            return line;
        }
    });
  }
```


```js

            <Typography variant="p" align="center" color="textSecondary" paragraph>
            {  nl2br(KAKA.detail) }
            </Typography>
```

## 参考

https://qiita.com/kouheiszk/items/e7c74ab5eab901f89a7f
Scilabのインストール方法の説明（旧バージョンも含む）

# Scilab 5.4のインストール方法

1. [Scilabのホームページへ行く](https://www.scilab.org/)
 - 最新バージョンを使用するのであれば、トップページからインストーラをダウンロードして4.へ進む
2. [Scilab 以前のバージョンのページに移動](https://www.scilab.org/previous-scilab-versions )
3. Scilab 使用しているOSに合わせたものをダウンロードする
 - 例> [Scilab5.4.1 Windows 64ビット版] (http://www.scilab.org/download/5.4.1/scilab-5.4.1_x64.exe)
4. インストーラの指示に従うとインストール完成
zoom用のバーチャル背景を作ろう！

zoomにはバーチャル背景という機能があり、

グリーンバックも必要なくお手軽に任意の背景に設定できます。

部屋が猛烈に散らかっていても安心ですね。

今回はAdobeのillustratorを使用しました。

##作り方

お好きな画像を配置し、

1280×720または1920×1080で保存（アスペクト比16:9の場合）。

以上。

##おまけ

おまけにサンプル画像を２つお付けしましたので、

ご自由にお使いください。

###1.岩岡屋背景
![zoom_de_iwaokaya.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273740/597f8377-cb06-f43e-85e2-ecfc744b982a.png)

###2.究極完全体スワッピーチャレンジ背景
![pachipachi.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273740/dbc29add-9d89-79cb-6915-9adf1d80b6b3.png)
ABC158-E「Divisible Substring」

# [Divisible Substring](https://atcoder.jp/contests/abc158/tasks/abc158_e)

# 考えたこと

- 愚直解
  - 間に合わない
  - 高速化も思いつかない
- 法則性がある？
  - 入力3を見ると、Sがすごい大きい数値なのに答えの数値があまりにも小さい（名推理）
  - なんか法則性があって計算式を立てれば答え出るんじゃね？（頭良さそう）
  - 無理だね（頭悪かった）
- むりだなぁ。かなしいなぁ
- 自分の回答→[コード](https://atcoder.jp/contests/abc158/submissions/11451175)



## 解法までの流れ

1. つかみどころがなさそうなので、とりあえず求めたいものを式にする

   - [$S_l, S_0]$の範囲を$U_l$という記号で置き換える
   - すると、区間[l, r]の数値は$\frac{U_l - U_{r+1}}{10^r}$という式で表せる
   - よって、今回求めたいものは$\frac{U_l - U_{r+1}}{10^r} \equiv 0\ (mod\ P)$となるような区間[l, r]の個数となる

2 $10^r$とPが互いに素ではない場合を考える

   - modの除算は、分母とPが互いに素でないとできないので、この場合を考える
   - これは、Pが2か5のときに互いに素ではなくなる
   - 数値を桁ごとに左から見ていく
   - そして、その数値の一の位がPで割れるかを判定することで$O(N)$で答えが求まる

3 $10^r$とPが互いに素である場合を考える

   - $\frac{U_l - U_{r+1}}{10^r} \equiv 0\ (mod\ P)$ → $U_l - U_{r+1} \equiv 0\ (mod\ P)$ →$U_l \equiv U_{r+1}\ (mod\ P)$と式変形をする
   - つまり、$U_l \equiv U_{r+1}\ (mod\ P)$となるような区間[l, r]の個数を数える問題を考えればいい
   - これは両端の数値がわかれば条件に当てはまるかが判定できるということを意味するので、計算量を減らす手がかりになりそう。
   - $1253 \equiv 1000+200+50+3\ (mod\ P)$みたいなことができるから、各桁のmodをあらかじめとっておく
   - そして、すべての区間[l, r]について足し合わせて判定することで答えが求まる。しかしこれは$O(N^2)$
   - なので、累積和を用いる
   - そして、$U_l \equiv U_{r+1}\ (mod\ P)$を判定することで$O(N \log N)$で答えが求まる
   
   

## [コード](https://atcoder.jp/contests/abc158/submissions/11681759)

```cpp
#include <bits/stdc++.h>
using namespace std;

int N, P;
string S;

int main() {
	cin >> N >> P >> S;

	// 例外処理
	if (P == 2 or P == 5) {
		long long ans = 0;
		for (int r = 0; r < N; r++) {
			if ((S[r] - '0') % P == 0) {
				ans += r + 1;
			}
		}
		cout << ans << endl;
		return 0;
	}

	// 各桁ごとにmodを求める
	vector<int> s(N+1);
	int ten = 1;
	for (int i = N-1; i >= 0; i--) {
		int num = (S[i] - '0') * ten;
		s[i] = num % P;
		ten *= 10;
		ten %= P;
	}

	// 累積和を求める
	for (int i = N-1; i >= 0; i--) {
		s[i] += s[i+1];
		s[i] %= P;
	}

	// 両端の数値を判定して答えを求めていく
	long long ans = 0;
	map<int, int> mp;
	mp[0] = 1;
	for (int i = N-1; i >= 0; i--) {
		ans += mp[s[i]];
		mp[s[i]]++;
	}

	cout << ans << endl;

	return 0;
}
```

   

## 感想
- よくわかんなかったら、求めたいものを式にすると良さそう（それが普通なのかもしれんけど普段やってない）
- 区間の問題は累積和を考えるといい（ってすぬけさんが言ってた）
- あまりの性質みたいなのをあまりわかってなかったなーって思った（ギャグではない）
- ばちゃで参加したんだけど、その時の順位が190位くらいで、「お！調子ええやん！」って思ったけどバチャ内の順位で泣いた（コンテスト中の人も反映されると思ってた）



## 参考にしたもの

- [はまやんさん](https://www.hamayanhamayan.com/entry/2020/03/08/100748)
- [けんちょんさん](https://drken1215.hatenablog.com/entry/2020/03/08/020200)
- [ヨビノリの合同式動画](https://www.youtube.com/watch?v=6COGmURbrAw)
🍰【CakePHP2】js.mapファイルが存在しないエラーの解消法

## 環境
PHP 7.2.21
CakePHP 2.10.18

## やりたいこと
pnotifyを追加したところ、下記の様なJsControllerが無いエラーが多数吐かれていたが動作に問題はなかった
が、このまま放置は良くないので出ないように修正したい

```error.log
2020-03-04 10:10:58 Error: [MissingControllerException] Controller class JsController could not be found.
Exception Attributes: array (
  'class' => 'JsController',
  'plugin' => NULL,
)
Request URL: /js/vendor/jquery-pnotify/pnotify.js.map
Stack Trace:
#0 /***/***/***/webroot/index.php(100): Dispatcher->dispatch(Object(CakeRequest), Object(CakeResponse))
#1 {main}
```


## やったこと

```pnotify.custom.min.js
/*
PNotify 3.2.0 sciactive.com/pnotify/
(C) 2015 Hunter Perrin; Google, Inc.
license Apache-2.0
*/
!function(t,i) *******省略******* {"feturn s(i)});
//# sourceMappingURL=pnotify.js.map ←これを削除もしくはmapファイルを追加で対応可能

```

ここからmapファイルをダウンロードし同階層に格納
https://cdnjs.com/libraries/pnotify

もしくは最下部にあるmapファイルのリンクを削除

```pnotify.custom.min.js
//# sourceMappingURL=pnotify.js.map
```
【jQuery】RailsでjQueryを使う

学習中に作っていたrailsアプリでjQueryを使いたかったのですが、
設定方法があいまいだったのでざっと調べました。
参考にしていただけると幸いです。

# jQueryを使いたい。


## 作業内容
**1. &ensp;'jquery-rails'の導入**
**2. &ensp;turbolinksの停止。**
**3. &ensp;読み込みの確認。**

### 1. &ensp;'jquery-rails'を導入する
最下行にjquery-railsを記載します。

```ruby:Gemfile
gem 'jquery-rails'
```

### 2. &ensp;turbolinksを停止させる
Gemfileからturbolinksをコメントアウトする。

```ruby:Gemfile
 ~変更前~
# Turbolinks makes navigating your web application faster. Read more: https://github.com/turbolinks/turbolinks
gem 'turbolinks', '~> 5' 

 ~変更後~
# Turbolinks makes navigating your web application faster. Read more: https://github.com/turbolinks/turbolinks
# gem 'turbolinks', '~> 5' # この行をコメントアウトする
```
( turbolinksはRails 4以降デフォルトでGemfileに導入されています。)

**！ここでGemfileを変更したので、bundle installをします。**
_____________________________________________________________
次に、**application.html.haml** から turbolinks の部分を削除します。
(application.html.**erb**から、hamlに変換しています。)

```haml:application.html.haml 
 ~変更前~
!!!
%html
  %head
    %meta{:content => "text/html; charset=UTF-8", "http-equiv" => "Content-Type"}/
    %title giga-app
    = csrf_meta_tags
    = stylesheet_link_tag    'application', media: 'all', 'data-turbolinks-track': 'reload' ← このオプションを消す
    = javascript_include_tag 'application', 'data-turbolinks-track': 'reload' ← このオプションを消す
  %body
    = render "layouts/notifications"
    = yield
 
 ~変更後~
　省略
    = stylesheet_link_tag    'application', media: 'all'
    = javascript_include_tag 'application'
　省略
```
____________________________________________________
最後に**application.js** から turbolinks の部分を削除します。


```js:application.js
// This is a manifest file that'll be compiled into application.js, which will include all the files
// listed below.
//
// Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts,
// or any plugin's vendor/assets/javascripts directory can be referenced here using a relative path.
//
// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
// compiled file. JavaScript code in this file should be added after the last require_* statement.
//
// Read Sprockets README (https://github.com/rails/sprockets#sprockets-directives) for details
// about supported directives.
//
//= require jquery      
//= require jquery_ujs
//= require turbolinks  ⬅️ ここを削除する
//= require_tree .

```
__________________________________
### 3. &ensp;Jsファイルの読み込みを確認。
実際の処理を記述するjsファイル( 今回は item.jsとします )に、
以下の記述をし、ブラウザで読み込みを確認します。

```js:item.js

$(function(){
});
```
**ここで、コンソールに何もエラーが出なければ問題なく読み込めています。**

うまく読み込めていないと、何かしらエラーが出ています。
[![Image from Gyazo](https://i.gyazo.com/fd6fed284cd6e551db34e3a5782a71de.png)](https://gyazo.com/fd6fed284cd6e551db34e3a5782a71de)
____________________________________________
ここまで問題なく進むと、RailsにてjQuery を使う準備が完了です。

ご覧いただきありがとうございました。
TypeScript: debounce関数を実装する方法(10行)

関数が連続して呼び出されたとき、実行されるを最後の1回の呼び出しだけに限定してくれる、`debounce`関数というものをTypeScriptで実装する方法です。

debounce関数は、例えば連打によるイベントの連続発火のせいで、関数が何度も実行されてしまうのを抑制したいときに便利です。

ここでは、実装方法を紹介しますが、車輪の再発明をしたくない人は、[lodash](https://www.npmjs.com/package/lodash)の[_.debounce()](https://lodash.com/docs/4.17.15#debounce)など、ライブラリもあるのでそちらを使ってみてください。

## debounce関数の実装(TypeScript)

```ts
const debounce = <T extends (...args: any[]) => unknown>(
  callback: T,
  delay = 250,
): ((...args: Parameters<T>) => void) => {
  let timeoutId: number // Node.jsの場合はNodeJS.Timeout型にする
  return (...args) => {
    clearTimeout(timeoutId)
    timeoutId = setTimeout(() => callback(...args), delay)
  }
}
```

## 動作デモ

まず、debounceされていない関数の実行例です。受け取った数値を出力する関数`printNum`を10回連続して実行してみます:

```ts
const printNum = (n: number): void => {
  console.log(n)
}

for (let i = 0; i < 10; i++) {
  printNum(i)
}
```

出力結果は、0〜9がすべて出力されます:

```
0
1
2
3
4
5
6
7
8
9
```

次に、debounceされた関数を作り、それを同じように実行してみます:

```ts
const debouncedPrintNum = debounce(printNum)

for (let i = 0; i < 10; i++) {
  debouncedPrintNum(i)
}
```

実行結果は、0〜8が間引かれ、9だけが出力されます:

```
9
```
pythonwebスクレイピング-要素を一括取得

>PythonによるWebスクレイピング〜入門編〜【業務効率化への第一歩】の9-10勉強メモ
https://www.udemy.com/course/python-scraping-beginner/
スクレイピング対象ページ(PW制限あり)
https://scraping-for-beginner.herokuapp.com/mypage

#要件: 下記テーブルの右側部分のテキスト情報を一括取得すること
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/68847/96f844a7-3785-04ca-debe-04bbb581f894.png)

F12を押し、開発ツールで確認すると右側のテキストは、すべてtdでマークアップされていることがわかる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/68847/2a57626f-813a-2872-e765-a7f6c725b716.png)

## 1. ブラウザからtdの要素を取得する。
```
elems_td = browser.find_elements_by_tag_name('td')
```
## 2. tdの中から要素を一つづつ取り出しvalueに入れる

tdの要素をすべて取得したelems_tdの情報を、elem_tdに入れる。

```
values = []
#elems_tdの中から要素を一つづつ取り出しelem_tdに入れる
for elem_td in elems_td:
```
##3.elem_tdの要素(text形式)を、valueに入れる。
 
```
    #elem_tdの要素(text形式)を、valueに入れる
    value = elem_td.text
```
##4. valueの要素をすべて、valuesのリストに追加

```
    #valueの要素をすべて、valuesのリストに追加
    values.append(value)
```


##すべてのコード
```
#ブラウザからtdの要素を取得
elems_td = browser.find_elements_by_tag_name('td')
values = []
#elems_tdの中から要素を一つづつ取り出しelem_tdに入れる
for elem_td in elems_td:
    #elem_tdの要素(text形式)を、valueに入れる
    value = elem_td.text
    #valueの要素をすべて、valuesのリストに追加
    values.append(value)
```
```
#valuesを打つ
values
```
## 結果
```
['今西 航平', '株式会社キカガク', '1994年7月15日', '千葉県', 'バスケットボール\n読書\nガジェット集め']
```
Arduino DueでNo Device Foundで困った場合の対処方法


#No Device Found（怒り）
ArduinoDueを始めた方は必ずぶつかる問題だと思います。
しかも解決策がなかなか見つからなかったりもします。
**Atmelチップの左上の「ERASE」スイッチを1秒以上長押ししてください**
これで、私は回避できました。
![Arduino-Due-Pin-mapping_blog.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/405484/a3de4d5c-61d1-df9f-62cb-3088c16da6d9.png)
USBポートは、ＤＣジャックに近い[USB PROG] を使って確認しました。