OmniAICreator/Qiita-1.07M huggingface dataset:
【簡潔】リストのタグについて~<ul> <ol> <li> <dl> <dt> <dd>~

##リストのタグの種類

この記事はHTMLの基礎文法について学習できます。今回取り扱うタグは
1.`<ul>`
2.`<ol>`
3.`<li>`
4.`<dl>`
5.`<dt>`
6.`<dd>`
の6つです。

それでは見ていきましょう。

---
###タグの解説
この記事では５つのタグをまとめて解説していこうと思います。

```index.html
<ul>
  <li>ポケモン</li>
  <li>デジモン</li>
  <li>ホリエモン</li>
</ul>

<ol>
  <li>ポケモン</li>
  <li>デジモン</li>
  <li>ホリエモン</li>
</ol>

<dl>
  <dt>ポケモン</dt>
  <dd>ピカチュウが有名</dd>
  <dt>デジモン</dt>
  <dd>Butterflyが有名</dd>
  <dt>ホリエモン</dt>
  <dd>ロケットの人</dd>
</dl>
```

上記のようにコードを書くとブラウザでは下記のように表示されます。<br>
<details><summary><strong>ブラウザ表示はここをクリック</strong></summary><div>

<ul>
  <li>ポケモン</li>
  <li>デジモン</li>
  <li>ホリエモン</li>
</ul>

<ol>
  <li>ポケモン</li>
  <li>デジモン</li>
  <li>ホリエモン</li>
</ol>

<dl>
  <dt>ポケモン</dt>
  <dd>ピカチュウが有名</dd>
  <dt>デジモン</dt>
  <dd>Butterflyが有名</dd>
  <dt>ホリエモン</dt>
  <dd>ロケットの人</dd>
</dl>

</div>

<br>
<br>

1.`<ul>`は箇条書きのリストを表示させる時に使います。<br>
2.`<ol>`は順序月のリストを表示させる時に使います。<br>
3.`<li>`にはリストの項目を囲ってあげます。`<ul>`と`<ol>`の中で使います。<br>
4.`<dl>`説明リストを表示させる時に使います。<br>
5.`<dt>`は`<dl>`の中で使い、項目を囲ってあげます。<br>
6.`<dd>`は`<dt>`で囲った項目の説明を書くタグです。インデント下げされて表示されます。<br>

###覚え方

#####・`<ul>`と`<ol>`と`<dl>`を混同してしまいそうな時

`<ul>`は unordered list の略です。項目が順序付いてないリストなので un が何もつかないと言う意味で想像できると思います。

`<ol>`は ordered list の略です。なんとなく順序付いてるリストなので orderの o かなと想像できると思います。

`<dl>`は description list の略です。聴き慣れない英単語なので覚えにくいですが、`<ul>`と`<ol>`をしっかり覚えていれば大丈夫です。あまり聴き慣れないので逆に覚えてしまうかもしれません。
<br>
<br>
#####・`<dl>`と`<dt>`と`<dd>`を混同してしまいそうな時

`<dl>`は description list の略です。リストなので d に続くのが l ということが想像できますね。

`<dt>`は description term の略です。 termはあまり馴染みがないですが項目を囲むのは童貞=dt と覚えておけばバッチリです。

`<dd>`は description definition の略です。こちらも馴染みがない英単語ですが、項目の説明は、誰でも大好き=dd で覚えればバッチリです。なんだかオタク用語が出てきてしまいましたが。
`<dt>`とセットで覚えるといい感じです。

<br>
<br>

この記事を読んでいただきありがとうございました。
Githubのリポジトリを共有する方法（collaboratorではなくManage accessへ変更されています。）

# Githubで共同開発者にリポジトリを共有する方法(2020/05版）

GitHubの共同開発者を追加する方法が変更されており、
Settings＞Collaboratorから
Settings＞Manage accessへ変更となっていた。

## 結論

以下GitHubヘルプを参考に
Settings＞Manage accessで共有設定を行った。

https://help.github.com/ja/github/setting-up-and-managing-organizations-and-teams/adding-outside-collaborators-to-repositories-in-your-organization

## 手順
>リポジトリにて
>Settings＞Manage access＞Invite a collaborator

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/630810/cd39a73a-759e-7e58-9e97-b7419322867c.png)

>Invite a collaborator to リポジトリ名
>＞Add GitHubアカウント名 to リポジトリ名　を押下

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/630810/52a25b0a-b6ed-4363-2b43-bb9749ff82c5.png)

>完了

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/630810/7d783ec8-eb50-0a62-44c3-6ef7f400e278.png)

>あとがき
招待された方は以下記事などを参考に
参加＆クローンすることで開発着手が可能となります。

https://qiita.com/key_it6/items/eff223ff5427438c9775
CSS 基礎・基本 ナビゲーションバー #12

今回は今までの学習内容を生かしてナビゲーションバーを作成していきます。ここでは、ページ内でユーザーがサイト内の別ページに移動できるリンクを作成します。今回も気楽に見てください。

##ナビゲーションバーのhtml構造！

###html構成まとめ！
段階はありますがここで一つにここはまとめます。

```html:index.html;
<!DOCTYPE html>
<html lang="ja">
  <head>
    <meta charset="UTF-8">
    <title>HTML</title>
  </head>
  <body>
    <ul id="nav">
      <li><a href ="#">TOP</a></li>
      <li><a href ="#">ABOUT</a></li>
      <li><a href ="#">NEWS</a></li>
      <li><a href ="#">LINK</a></li>
    </ul>
  </body>
</html>
```

##ID名「nav」の要素の装飾！

###行うことと簡単なまとめ
まず、id:navの要素の内側の隙間を0に設定し間隔も0に設定。
リストの項目の点も消す。
内側のli要素がul要素を飛び出さないようにoverflowを使用する。

```ccs:main.css;
@charset "UTF-8";

#nav {
  list-style-type: none;
  margin: 0;
  overflow: hidden;
  padding: 0;
}
```

##id名「nav」要素の直下にあるli要素を装飾！

###行うことと簡単なまとめ
バックグラウンドのカラーを変更し、高さを変更！
そして、borderで枠組みを作成。
inlineのものはそれ自身が高さを持たないためheightが適用されないのでblockに変更。
その後、リンク文字を縦の中央揃えにして、横中央揃えにする。
横幅を98pxにして、floatをleftにしてリスト項目を横に並べる！
枠線が重複して今うのでborderの調整で左側の枠を0にする。
一番最初の要素のみに枠線を左側に着ける！

```css:main.css
#nav > li {
  background-color: #900;
  border: 1px solid #300;
  border-left: 0;
  display: block;
  float: left;
  height: 48px;
  line-height: 48px;
  text-align: center;
  width: 98px;
}

#nav > li:first-child{
  border-left: 1px solid #300;
}
```

割とまとめて書いてしまいましたけど、やってることは今まで書いた記事を見返してもらえれば同じことをしています。

##リンク文字を調整

###行うことと簡単なまとめ
まず、書き込む場所を準備!
文字の色をcolorを使って調整！
先と同様、displayをblockに変更！
text-decorationを使って下線を削除！

```CSS:main.css;

#nav > li >u{
  color : #FFF;
　display: block;
　text-decoration: none;
}

```

##ナビゲーションバーに効果を！

###準備：li要素にマウスが乗ったとき！
マウスが乗った際にスタイル指定するのは`:hover`を使用！
`#nav > li:hover{  }`

###背景色を調整！
`#nav > li:hover{ background-color : #C33; }`

###準備:a要素にマウスが乗ったとき！
`#nav > li > a:hover{  }`

###a要素に下線を！
文字に下線を追加するにはtext-decorationを使用！
`#nav > li > a:hover{ text-decoration: underline; }`

###まとめ！

```ccs:main.css;
@charset "UTF-8";

#nav {
  list-style-type: none;
  margin: 0;
  overflow: hidden;
  padding: 0;
}

#nav > li {
  background-color: #900;
  border: 1px solid #300;
  border-left: 0;
  display: block;
  float: left;
  height: 48px;
  line-height: 48px;
  text-align: center;
  width: 98px;
}

#nav > li >u{
  color : #FFF;
　display: block;
　text-decoration: none;
}

#nav > li:hover{
  background-color: #C33;
}

#nav > li > a:hover{
  text-decoration: underline; 
}
```

---

今回はいつも説明してるところをまとめて終わらせてみました。記事を書く時間の短縮と見やすさの向上を目指してみてます。見ずらいなと思ったら書いていこうと思います。
firebase関係のnpm個人的メモ

# firebase関係のnpmまとめ
firebase関連のnpmを整理してみる。
## firebase
API_KEYなどを管理するプラグインを使えるようにするパッケージ

```~/plugins/firebase.js
import firebase from 'firebase'

var config = {
  apiKey: process.env.FB_API_KEY,
  authDomain: process.env.FB_AUTH_DOMAIN,
  databaseURL: process.env.FB_DATABASE_URL,
  projectId: process.env.FB_PROJECTID,
  storageBucket: process.env.FB_STORAGE_BUCKET,
  messagingSenderId: process.env.FB_MESSAGING_SENDER_ID
}
if (!firebase.apps.length) {
  firebase.initializeApp(config)
}

export default firebase
```

## firebase-tools
firebase設定をCUIで実行するものパッケージ
firebase コマンドが使えるようになる

```
$ firebase init
$ firebase deploy
...etc
```

## vuexfire
firestoreをvue.js(nuxt.js)に簡単に実装できるパッケージ
#Mac の #iTerm2 でサウンド・音を消す

Preference > Profile > Terminal > Silence Bell
 
![image](https://user-images.githubusercontent.com/13635059/81461763-04134280-91e9-11ea-8120-a6acaee44fe8.png)


# Original by Github issue

https://github.com/YumaInaura/YumaInaura/issues/3152











<!-- Update From Qiita API -->

# チャットメンバー募集


何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
HTML、CSS番外編①～外部メディアを利用する！Googleマップ、Twitter、YouTube～

#外部メディアを利用する
Webページ内に場所を示す地図が埋め込まれていたり、ページ下部にSNS各種のタイムラインが表示されていたりします:point_up_tone1:
今回はGoogleマップ:map:や、SNSのプラグインの導入方法を紹介していきます:grinning:


今回の記事:arrow_down:

- 地図を表示しよう！Googleマップの表示
- Twitterプラグインを挿入しよう
- YouTube動画を挿入しよう


#地図を表示しよう！Googleマップの表示
Googleマップ挿入の仕方を紹介していきます。
まずはGoogleマップWebサイトへ:arrow_right:[Googleマップ](https://www.google.com/maps/)

表示ししたい場所の住所を入力すると、「共有」ボタンが表示されます。
<img width="905" alt="コメント 2020-05-10 120450.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562982/527b6674-8754-7293-4414-e9a9b09ffd79.png">

「共有」ボタンをクリック→「地図を埋め込む」をクリック
<img width="878" alt="共有リンク.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562982/27c221c2-748a-c34e-e2e9-c77216ceacde.png">

デフォルトでは「中」になっているサイズを「カスタマイズ」にする。ここでは「800×400」で設定します。
<img width="485" alt="googlemap.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562982/e1059cdf-d42e-dfc1-1416-cb522a048246.png">


地図を埋め込むコードが表示されるので、HTMLをコピー
<img width="875" alt="カスタマイズ.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562982/8e5e1ac1-1462-6e70-bbb9-3c321dee852e.png">


#Twitterプラグインを挿入しよう
Twitterプラグインの挿入の仕方です。コードを取得するためのページは英語で書かれていますが、簡単な設定ですので、ぜひ挑戦してみましょう:relaxed:

まずはTwitterプラグイン生成ページへ:arrow_right:[Twitterプラグイン](https://publish.twitter.com/)

「Enter a Twitter URL」にTwitterのURL（twitter.com/アカウント名）を入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562982/fdfd5ca8-daaf-0060-eeca-eb43767ccde5.png)

Here are your display optionsの画面になり何を表示したいか選べます。
<img width="937" alt="displeyoption.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562982/b3e87e22-2cbd-4826-9837-c9782b24ab4f.png">


コードが表示されますが、サイズなどを変更したい場合は、「set customization options」リンクをクリック
<img width="933" alt="twitter.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562982/8ed08d85-ba7e-deb4-252c-da7cd8183076.png">

変更がない場合は、Copy Codeでコピー、変更がある場合は変更後に、Updateでコピー完了です。
<img width="512" alt="サイズ変更.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562982/cd38a66f-5c7c-89d7-1f79-38dca78733c7.png">

コピーしたコードをHTMLに張り付ければ完了です。Twitterのプラグインは**レスポンシブに対応してます**:exclamation:


#YouTube動画を挿入しよう
世界最大の動画共有サービスであるYouTubeの動画を表示させます。他のプラグインを比べて設定もとても簡単です。

まずはYouTubeのWebサイトへ:arrow_right:[YouTube](https://www.youtube.com/)

掲載したい動画を表示させ、動画の下にある「共有」ボタンをクリック
<img width="422" alt="Youtubeshare.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562982/ff7a4020-65c9-55ce-e592-a728e5c10100.png">

表示されたパネルで「埋め込む」をクリック
<img width="386" alt="コメント 2020-05-10 125951.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562982/67529823-8076-a6bb-f061-cdc4ccbae966.png">

動画の再生開始位置を変更するには、「開始位置」にチェックを入れ、何分何秒から開始させたいか入力できます。
後は、コピーしてHTMLに張り付ければ完了です。


#参考文献
Mana著、「1冊ですべて身につくHTML＆CSSとWebデザイン入門講座」、SBクリエイティブ株式会社、2019年
Ubuntu14.04 で Apache2 が動かなくなった

古い Ubuntu14.04 でまとめて apt-get upgrade したら Apache2 でエラー。


```

sudo service apache2 restart
 * Restarting web server apache2                                                                                                        [fail] 
 * The apache2 configtest failed.
Output of config test was:
apache2: Syntax error on line 21apache20 of /etc/apache2/apache2.conf: Syntax error on line 1 of /etc/apache2/mods-enabled/php5.load: Cannot load /usr/lib/apache2/modules/libphp5.so into server: /usr/lib/apache2/modules/libphp5.so: cannot open shared object file: No such file or directory
Action 'configtest' failed.
The Apache error log may have more information.
```

「apache2 error Could not open configuration file /etc/apache2/conf.d/: No such file or directory - Ask Ubuntu」
https://askubuntu.com/questions/365454/apache2-error-could-not-open-configuration-file-etc-apache2-conf-d-no-such-fi

を参考に以下の処理を行う。

# httpd.conf の生成


```

$ cd /etc/apache2
$ sudo touch httpd.conf
```

# conf.dディレクトリの生成

更に、

```

$ sudo service apache2 restart
 * Restarting web server apache2                                                                                                        [fail] 
 * The apache2 configtest failed.
Output of config test was:
apache2: Syntax error on line 234 of /etc/apache2/apache2.conf: Could not open configuration file /etc/apache2/conf.d/: No such file or directory
Action 'configtest' failed.
The Apache error log may have more information.

```

と出たので以下のようにして対処。

```

$ sudo mkdir conf.d

```

# 動作した

```

$ sudo service apache2 restart
 * Restarting web server apache2                                                                                                               AH00112: Warning: DocumentRoot [/home/sensho-ds/public_html] does not exist
                                                                                                                                        [ OK ]
$
```
AWSにWordPressを移行すると同時に、GatsbyとNetlifyでWordPressをHeadlessにした

『[【Amazon3時間クッキング】材料費500円でAWSにWordPress環境を構築するレシピ](https://qiita.com/blackriver/items/9ef870b1624373d18dfa)』を参考に、[さくらのVPC](https://vps.sakura.ad.jp/)で公開していた[WordPress](https://wordpress.org/)のサイトを[AWS](https://aws.amazon.com/jp/)に移行し、WordPressのHeadless化も試してみました。  

## なぜやったか

AWSを触りながら勉強したかったのでさくらのVPCからAWSに移行しました。
また、WordPressの管理画面は使いながらサイトを閲覧するときはもっと早くようにしたいと思っていたためにWordPressをHeadless化しました。

移行したブログはもともとWordPressを勉強のために使ってみたくて始めたブログで、全然更新できていませんでした。  

英語の勉強にもなると思い、外国人向けに英語で書いた日本語学習サイト([Hello Japanese](https://hello-japanese.net/))です。[ネコでもわかる！さくらのVPS講座](https://knowledge.sakura.ad.jp/7938/)を読みながら2018年に公開しました。[Adobe Illustrator](https://www.adobe.com/jp/products/illustrator.html)の練習も兼ねようと絵も入れているのですが、英語と絵に時間がかかるのでなかなか更新できていません。　　

なかなか更新はできていませんが、今後もこのサイトを通じて学んでいけたらと思っています。

## なにをしたか

### AWSにWordPress環境を構築し、サイトを移行
[前述の記事](https://qiita.com/blackriver/items/9ef870b1624373d18dfa)を参考にしてAWSにWordPress環境を構築し、さくらのVPCからデータ移行しました。

移行には[All-in-One WP Migration](https://wordpress.org/plugins/all-in-one-wp-migration/)のプラグインを用いました。途中アップデートサイズの問題がありましたが、『[All-in-One WP Migrationでアップロードファイルサイズを上げる方法](https://web-ashibi.net/archives/2560#toc2)』を参考にプラグインで解決しました。

### WordPressをHeadless化

WordPressをHeadless化するのは『[Gatsby + Netlify + WordPressでHeadless CMS化してみた。](https://qiita.com/theNewWave/items/160ee83e06d008e4bf4d)』を参考にしました。  

以下の図のような感じです。
![image](https://i.gyazo.com/ddb9104e2bc8eb3beb07f7b4ad13db0b.png)
[パブリックサブネット](https://docs.aws.amazon.com/ja_jp/vpc/latest/userguide/VPC_Scenario2.html)には[EIP](https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html)を設定して公開しており、ブログを公開する際はそこからWordPressの管理画面に入ります。
[JAMstack Deployments](https://github.com/crgeary/wp-jamstack-deployments)プラグインを用いて、ブログを更新すると[Netlify](https://www.netlify.com/)がビルド、デプロイして公開するようにしています。ビルドの際には[Gatsby](https://www.gatsbyjs.org/)で静的サイトを生成します。

閲覧者はNetlifyで公開されたサイトからブログを閲覧することになるので、[Custom domains | Netlify Docs](https://docs.netlify.com/domains-https/custom-domains/)を参考にして以前からのドメインをカスタムドメインとしてアクセスできるように使えるように設定しました。

---
AWSのサービスだけで完結できると思うのですが、変な形になってしまいました。  

AWSはサービスの量が膨大でどこから手をつけたらいいのかわからなくなりそうですが、少しずつ使っていって関連する部分から始めていくのがいいと思いました。まずは**使ってみる**というのがよさそうです。  
Netlifyは便利です。[Netlify Forms](https://docs.netlify.com/forms/setup/)で[フォーム](https://qiita.com/toshikisugiyama/items/b523bb47e463060040cc)が簡単に作れたり、[Functions](https://docs.netlify.com/functions/overview/)を使ってLINEボットを作れたりもします。(Functionsは[AWS Lambda](https://aws.amazon.com/jp/lambda/)が基盤になっているようです。)

Gatsbyは[React](https://reactjs.org/)を基にしたフレームワークです。この中で[GraphQL](https://www.gatsbyjs.org/docs/glossary/graphql/)にも触れることができたこともよかったです。

## 参考
- [【Amazon3時間クッキング】材料費500円でAWSにWordPress環境を構築するレシピ](https://qiita.com/blackriver/items/9ef870b1624373d18dfa)
- [Gatsby + Netlify + WordPressでHeadless CMS化してみた。](https://qiita.com/theNewWave/items/160ee83e06d008e4bf4d)
- [All-in-One WP Migrationでアップロードファイルサイズを上げる方法](https://web-ashibi.net/archives/2560)
- [Custom domains | Netlify Docs](https://docs.netlify.com/domains-https/custom-domains/)
scalaの計算問題解いてみた

# 5月10日の学び
本日はドワンゴ様の新卒研修で使用しているカリキュラムを触ってみる
[ドワンゴ scala研修テキスト](https://scala-text.github.io/scala_text)

## 様々な出力を試してみる

- `0xff`

```scala
scala> 0xff
res2: Int = 255
```

- `1e308`

```scala
scala> 1e308
res3: Double = 1.0E308
```

- `9223372036854775807L`

```scala
scala> 9223372036854775807L
res4: Long = 9223372036854775807
```

- `9223372036854775808L`

```scala
scala> 9223372036854775808L
<console>:1: error: integer number too large
       9223372036854775808L
```

- `9223372036854775807`

```scala
scala> 9223372036854775807
<console>:1: error: integer number too large
       9223372036854775807
```

- `922337203685477580.7`

```scala
scala> 922337203685477580.7
res5: Double = 9.2233720368547763E17
```

- `1.00000000000000000001 == 1`

```scala
scala> 1.00000000000000000001 == 1
res6: Boolean = true
```

- `"\u3042"`

```scala
scala> "\u3042"
res7: String = あ
```

- `"\ud842\udf9f"`

```scala
scala> "\ud842\udf9f"
res9: String = 𠮟
```

## 浮動小数点の計算
浮動小数点の計算には演算子が使用できるが誤差が生じる可能性があるので注意が必要
[Int]と[Double]と型が違っていても計算することが可能

```scala
scala> 4.5 / 2
res11: Double = 2.25
```

`dbl.asInstanceOf[Int]`を使用する事で型を変換することができる。
これにより変換した場合、小数点以下は切り捨てになるので注意が必要

```scala
scala> (4.5).asInstanceOf[Int]
res12: Int = 4

scala> (3.0).asInstanceOf[Int]
res13: Int = 3
```

## 練習問題

##### 問題1
Q. 
¥3,950,000を年利率2.3％の単利で8か月間借り入れた場合の利息はいくらか（円未満切り捨て）

A. 
単利なので利率は3,950,000にのみかかる
年利2.3%なので、(元本 * 0.023) / 12 = 一月の利息
一月の利息 * 8ヶ月　= 答えとなり

答えは 60,566円

##### 問題2
Q. 
定価¥1,980,000の商品を値引きして販売したところ、原価1.6％にあたる¥26,400の損失となった。割引額は定価の何パーセントであったか

A.
問題文から　
原価 - 26,400 = 販売額
販売額 / 定価 = 定価の何%で販売したか
100 - 定価の何%で販売したか = 割引率
であることがわかる

答えは 18%
Serverlessでデプロイ時にPolicyLengthExceededExceptionが発生した

# デプロイ時エラーは突然に
[Serverless Framework](https://www.serverless.com/)を使ってAWSでアプリケーション開発を始めて１年半、リソース200個上限エラー[^1]以来の久しぶりにリソース制約的なものにぶち当たった。

```
The final policy size (20658) is bigger than the limit (20480). (Service: AWSLambda; Status Code: 400; Error Code: PolicyLengthExceededException; Request ID: 774f1682-eec3-46d8-8aa4-bef4cb7ecedc)
```

むむむ

[^1]: AWS Community Day Kanazawa での発表を参照
  [発表動画](https://youtu.be/goKgzN0ogN0?t=4663)
  [資料](https://speakerdeck.com/fossamagna/use-with-extending-serverless-and-amplify)

# まずはググる
とりあえず、何が起きているかというとAWS Lambdaの関数リソースベースのポリシーのサイズに上限があり、これは変更できないのでサポートに助けを求めても無理、ということ。Lambdaの制限については[こちら](https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/gettingstarted-limits.html)

で、こんなエラーはきっと「あるある」なので、誰かがどうにかしてるはず、と思って探すと、[ServerlessのIssue](https://github.com/serverless/serverless/issues/5357)が見つかった。しかも`Closed`。やった、解決策がある。

読んでみると、LambdaのイベントソースがCloudWatchの場合に個別のPermissionを指定していて制限に掛かった→１つのPermissionにまとめた、ということだった。
ん？ウチのアプリではCWをソースにしてない。
うーん・・・？

# 解決編
アプリでは直接は使ってないけど、ログをElasticsearch Serviceへ流すために入れている[serverless-es-logs](https://github.com/daniel-cottone/serverless-es-logs)プラグインだ、ということに気づいた。
期待通り（？）、[Issue](https://github.com/daniel-cottone/serverless-es-logs/issues/365)もある。あら、`Open`だ。
なんか、他のIssueも放置されてそうに見えるし、しばらく更新されてない。[^2]
件のIssueに「こうやって解決した」って書いてる内容を見ると、やってることはServerless本体で統合Permissionにしたのと同じっぽいので、もうこれなら自分でやるか、と思い、es-logsをforkして直して解決。
ついでにnestedなPermissionのCFスタックが３つもあったのが２つに減った :laughing: 

[^2]: 2020/5/1に依存関係の修正だけ入ってた
npm run watch実施時に発生したnpm WARN package.jsonのエラーに関して

## `npm run watch`実施時に`npm WARN package.json`が発生

今までは通常通りに`npm run watch`を使用できていたのに、急に以下のエラーが発生

```
$ npm run watch
npm WARN package.json @ No repository field.

```
# 以下、対処方法
##　再度インストールを実施
```
// バージョン指定でインストール
nodebrew install-binary {version}

// 安定版インストール
nodebrew install-binary stable 

// 最新版インストール
nodebrew install-binary latest 
```

### `nodebrew ls`か`nodebrew list`で一覧を確認

```
mbp:~ *****$ nodebrew ls
v0.10.12
v13.13.0
v14.1.0
```

### `nodebrew use`で使用するバージョンを指定
この`nodebrew　use`を使用しないとうまくいかないので実施する

```
// バージョン指定で使用
mbp:~ *****$ nodebrew use 14.1.0

// 安定版を指定
mbp:~ *****$ nodebrew use stable

// 最新版を指定   
mbp:~ *****$ nodebrew use latest
```

### 最後にバージョンの確認

```
mbp:~ *****$  node -v
```

### 参考記事
[npm command not found と出てきた時の解決方法](https://qiita.com/hoppy/items/6822b78b9b130f030c54)
[nodebrewでNode.jsをアップデートする](https://qiita.com/Sr_Bangs/items/bda855068576905a441f)
最小最短のHTMLメモ

# 書いてみる
W3Cのvalidatorに通るように書くと以下。

```
<!DOCTYPE html><html lang=en><title>?</title><p>!</html>
```

`<p>`はHTML4に配慮するなら必要とのこと。配慮しないなら3文字削れますね。

Googleスタイルガイドに沿うと

```
<!DOCTYPE html><title>?</title><p>!
```
になる、と。ここは`<p>`があるんですね。略して良いなら `<!DOCTYPE html><title>?</title>!` が最短だったのに。惜しい。

# 参考
+ https://qiita.com/wakaba@github/items/ec36c9d67707d8fb4395
+ https://validator.w3.org/nu/#textarea
+ https://gist.github.com/cmalven/1885287
+ https://google.github.io/styleguide/htmlcssguide.html#Optional_Tags 
+ https://www.publickey1.jp/blog/19/htmlw3cwhatwgwhatwghtml.html
Flutterインストール（MacOS）

せっかくなので作業ログ的にメモ。ちょっと昨日実施したので詳細がブレるかもしれませんがご愛嬌。
作業日:2020/5/10
環境:MacOS 10.15.4
インストール済み:Xcode,Android studio

参照URL
https://flutter.dev/docs/get-started/install/macos

## flutterのインストール
上記のURLより
flutter_macos_1.17.0-stable.zip
ダウンロードしダブルクリックで解凍。
mv flutter /usr/local/
(/usr/local/flutter に配置の場合。どこでもよい。)

パスを通す
echo export PATH="$PATH:/usr/local/flutter/bin" >> ~/.bash_profile
(念の為、すでに存在しないか事前にcat ~/.bash_profileでチェック)

source ~/.bash_profile 
(上記で読み込まなくても再ログイン等でも良い)

flutter precache
(予め、必要な処理を実施しておく。やらなくても、実際に利用時に実行されるのであえてやらなくても良い)

## IDEへの組み込み
flutter doctor
を実施、記載通り必要な処理を実施。
(すみません。。。色々コマンド打て等言われたんですが、、メモってなくて。。基本言われたとおり実施してれば問題ないかと。。。英語ではありますが。)
GCP-ACE試験対策[課金の予算とアラートを設定する]

> 課金の予算とアラートを設定する

今回は、これについて。

GCPでは、予算を設定することができ、閾値を越えるとアラートを発泡することが出来る。
（想定外の請求を避けるため）

※予算を超えても、APIの利用が止まるわけではない

では、実際に設定をしていく。

![スクリーンショット 2020-05-10 12.13.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/623009/109aa6fc-dfa8-4ddb-8e66-c7ddf0079e05.png)

![スクリーンショット 2020-05-10 12.14.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/623009/650cf785-f56e-cb79-eba6-977be7a48eba.png)

どのプロジェクト・サービスを予算の対象とするかを決められる。

![スクリーンショット 2020-05-10 12.16.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/623009/ec95572d-dd39-1a26-922d-285367b2a18c.png)

![スクリーンショット 2020-05-10 12.18.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/623009/3c89c1a4-3a8d-87bf-d403-efb436a7c8f8.png)

pub/subの連携も可能で
pub/sub -> cloudfunction -> slack
pub/sub -> dataflow -> bigquery -> 分析 
みたいなことも

通常は、アラートがメールで通知される。

予算とアラートのページが表示されない場合は、ロール不足が考えられる。
Excel VBAで簡単なテロップを作ってみた

#Excel で簡単なテロップ

VBAで簡単なテロップを作ってみた

```vb:Module1
Sub telop()

    Sheet1.Range("E7").Value = ""
    For J = 0 To 200000
        DoEvents
    Next J

    Sheet1.Range("E7").Font.Color = 0
    S = "　　　　　　　　"
    R = "Excelでテロップ"
    T = S & R & S
    For i = 1 To Len(T)
        Sheet1.Range("E7").Value = Mid(T, i, 10)
        For J = 0 To 10000
            DoEvents
        Next J
    Next i

    Sheet1.Range("E7").Font.Bold = True
    R = "流れる文字にして"
    T = S & R & S
    For i = 1 To Len(T)
        Range("E7").Value = Mid(T, i, 10)
        For J = 0 To 10000
            DoEvents
        Next J
    Next i
    
    Sheet1.Range("E7").Font.Bold = False
    Sheet1.Range("E7").Font.Color = -16776961
    R = "赤文字に変えてからの、、、"
    T = S & R & S
    For i = 1 To Len(T)
        Sheet1.Range("E7").Value = Mid(T, i, 10)
        For J = 0 To 10000
            DoEvents
        Next J
    Next i
    
    Sheet1.Range("E7").Font.Color = 0
    Sheet1.Range("E7").Value = ""
    For J = 0 To 20000
            DoEvents
    Next J
    
    Sheet1.Range("E7").Value = "おわり！"
    For J = 0 To 20000
            DoEvents
    Next J

End Sub
```
【個人メモ】Raspberry pi セットアップ手順

#初期化
microSDをSDFormatter4.0以降を使用して初期化する
FAT32でフォーマットすること
公式サイトからNoobsの最新版をDLする
公式サイト：https://www.raspberrypi.org/downloads/raspbian/

当該ファイルを展開し、フォルダの中身をSDカードにコピーする
SDカードをRaspberrypiにセットして起動する

### raspberrypi zero w の場合
microSDをSDFormatter4.0以降を使用して初期化する
FAT32でフォーマットすること
公式サイトからraspbian-stretch-liteの最新版をDLする
公式サイト：https://www.raspberrypi.org/downloads/raspbian/
Etcherを使いSDにイメージファイルを書き込む
boot直下にsshファイルを作成する
boot直下cmdline.txtにmodules-load=dwc2,g_ether を追加する
boot直下config.txtに"dtoverlay=dwc2"を追加する　要""。touchコマンドがよい

参考：https://qiita.com/hishi/items/8bdfd9d72fa8fe2e7573

###ファイルによるwifi設定
boot直下にwpa_supplicant.confを作成し、下記を書き込む。

```
country=JP
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
    ssid="hoge"
    psk=hugahuga
}
```

pskについて下記サイトでSSIDとパスキーから生成する。SSIDは""で囲む。pskは囲まない
http://jorisvr.nl/wpapsk.html

参考：https://qiita.com/mascii/items/0d1a280ac58ed8f6f999

#最新化
apt-get update および apt-get upgrade を実行

```　
apt-get update && apt-get upgrade -y
```

#SSH有効化
sudo raspi-configを実行
5 Interfacing Optionsを選択し、SSH を enableとする

#Vimインストール

```
dpkg -l | grep vi
sudo apt-get --purge remove vim-common vim-tiny
sudo apt-get install vim
```

:set mouse= # Visualモード無効化
https://qiita.com/morikooooo/items/9fd41bcd8d1ce9170301

#IP固定
```
sudo vim /etc/dhcpcd.conf
```

```
interface eth0
static ip_address=xxx.xxx.xxx.xxx/24
static routers=xxx.xxx.xxx.xxx
static domain_name_servers=xxx.xxx.xxx.xxx

interface wlan0
static ip_address=xxx.xxx.xxx.xxx/24
static routers=xxx.xxx.xxx.xxx
static domain_name_servers=xxx.xxx.xxx.xxx
```

#Samba有効化
参考：https://qiita.com/ARBALEST000/items/78f459567e1e90de99e5

 
#NTP設定

```
sudo apt-get update && sudo apt-get -y install ntp
```

#Webiopiインストール
最近はFastapiでAPIサーバを実装しちゃうので利用しないけど
利用する際は下記でインストール

https://www.hiramine.com/physicalcomputing/raspberrypi3/webiopi_install.html

```
wget https://sourceforge.net/projects/webiopi/files/WebIOPi-0.7.1.tar.gz
tar xvzf WebIOPi-0.7.1.tar.gz
cd WebIOPi-0.7.1
wget https://raw.githubusercontent.com/doublebind/raspi/master/webiopi-pi2bplus.patch
patch -p1 -i webiopi-pi2bplus.patch
sudo ./setup.sh
```

※ webiopi over internet はOFFにする

その他、gitのsettingsリポジトリからファイルを取得
/usr/local/lib/python3.7/dist-packages/WebIOPi-0.7.1-py3.7-linux-armv6l.egg/webiopi/utils/thread.py
の runLoop関数を下記の通り修正

```
def runLoop(func=None, async_=False):
    global RUNNING
    RUNNING = True
    signal.signal(signal.SIGINT, stop)
    signal.signal(signal.SIGTERM, stop)

    if func != None:
        if async_:
            TASKS.append(Task(func, True))
        else:
            while RUNNING:
                func()
    else:
        while RUNNING:
            time.sleep(1)
```

#OPENCVをインストール
参考：https://qiita.com/mt08/items/e8e8e728cf106ac83218
Rails に Argon2 を導入したい

# はじめに
「PHPer もすなる Argon2id といふものを、Railserもしてみむとてするなり。」とは紀貫之は言わなかっただろうけど、Argon2 を Ruby on Rails に導入したいと思ったのさ。

# そもそも Argon2 とはなにか
- Wikipedia の記事「[Argon2](https://ja.wikipedia.org/wiki/Argon2)」を読んでね！
- Bcrypt は2020年でも安全だが、さすがに20年使われてきたパスワードを保存するハッシュ関数を使い続けるのは心もとない
- PHP 界隈では Argon2 が利用されているし、もう５年ほど利用されているので、もう利用してもよいのでは

# Bcrypt vs Argon2
- Rails から使う用法としては、両方ともパスワードを安全にハッシュ化する関数である
- 2020年春の時点では、両方とも安全とされている
- Bcrypt のメリット・デメリット
    - Rails で標準採用されている
    - 文字数制限が不安視されている
        - see also → [bcryptの72文字制限をSHA-512ハッシュで回避する方式の注意点](https://blog.tokumaru.org/2019/02/caution-bcrypt-with-sha512.html)
- Argon2
    - 新しいハッシュ関数
    - 文字数制限が無い
    - PHPでは標準採用されたみたい
        - https://wiki.php.net/rfc/argon2_password_hash_enhancements
- 心配なら Bcrypt にかけたハッシュを Argon2 で再度ハッシュ化したらいいのかな？
    - 逆はダメ、絶対！

# やりたいこと
- Ruby on Rails 6 に Argon2id を導入したい
- だいたい Rails で bcrypt が標準だけど、それと同じ感じで利用できるようにしたい
- 利用する Gem は [ruby-argon2](https://github.com/technion/ruby-argon2) を使う

# レッツトライ！
```sh
$ rails g model staff name:string email:string password_digest:string
$ rails db:migrate
```

としておく。ここまでは bcrypt を導入するのと同じ。次は `rails c` で irb でためすことにする。

```irb
> h = Argon2::Password.new(t_cost: 2, m_cost: 16)
> h.create("password")
=> "$argon2i$v=19$m=65536,t=2,p=1$jL7lLEAjDN+pY2cG1N8D2g$iwj1ueduCvm6B9YVjBSnAHu+6mKzqGmDW745ALR38Uo"
> Argon2::Password.verity_password('password', h)
=> true
> Argon2::Password.verify_password('qwerty', h)
=> false
> s = Staff.new(name:"jhon", email:'jhon@example.com')
> s.password_digest = h.create("password")
> s.save
> s = Staff.last
> Argon2::Password.verify_password('password', s.password_digest)
=> true
> Argon2::Password.verify_password('qwerty', s.password_digest)
=> false
```
それほど `has_secure_password` を使って Bcrypt を使うのと違いがない感じですかね。


# おわりに
途中でやる気がなくなったので、モデル層だけ Rails に Argon2 を導入するところでとどまってしまった。コードは [Github](https://github.com/seahal/qiita) にアップしているので、気になる方は確認ください。

# 参考文献
- https://qiita.com/fursich/items/54f8cba74ede96d0b689
Flutter入門サイトを作ってみた件【Flutterで始めるアプリ開発】


みなさん、こんにちは
とあるサラダ🥗の会社で開発やってます umatoma です。

Flutter入門用のWebサイトを1つ作ってみたので、
それに関しての記事を投稿してみようかなーと思っています。

# 目次
- Flutterで始めるアプリ開発
- なぜ作ったのか
- 今後の予定
- 最後に


# Flutterで始めるアプリ開発

### Flutter入門サイト

作ってみたFlutter入門用のWebサイトがこちら👇です。

**Flutterで始めるアプリ開発**
*Flutterを使ったiOS/Android/Webアプリ開発への入門に必要な情報を分かりやすく紹介*
https://www.flutter-study.dev/
![banner.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/632977/a3a10e00-baf5-9a1a-2250-134f5f7e7f8d.png)

### 想定しているターゲット層

- アプリを作ってみたいけど、どうやって作るか分からない方
- iOS/Androidのアプリ開発が難しすぎて挫折してしまった方
- Flutterを使って簡単にアプリを作れるようになりたい方
- などなど

現時点では、**Flutterをこれから使ってみたい人達**をターゲットして考えています。
なので、**分かりやすさ・進んでる感** といったものを重視している感じです。

### 何が得られるのか

- FlutterとFirebaseを組み合わせたアプリ開発ができる状態になる
- 作成したアプリを自分のWebアプリとして公開する

公開しているコンテンツを最後までやってもらえれば、
**FlutterとFirebaseを組み合わせたアプリ開発とりあえずできる状態**
に到達できるようなコンテンツにしています。

さらに、**Webアプリとして公開することで達成感みたいなものを満たし**つつ、
**周囲の人達にもシェアして、承認欲求を満たしてもらえる**と良いのかなと思っています。

（プログラミングって継続的に学習し続ける必要があると思っていて、
継続できるきっかけを作れれば良いなという思いがあります。）


### コンテンツの内容

カテゴリ的には以下の7つを用意していて、
**１〜７を順番に進めてもらえるとゴールを達成**できる仕組みです。

1. Flutterとは
1. Flutterを使ってみる
1. Widgetを使ってみる
1. Todoアプリを作ってみる
1. Firebaseとは
1. Firebaseを使ったアプリ
1. Webアプリ公開

※ アプリの規模が大きくなってきても対応できるよう
**Providerを使った状態管理も少しだけ触れてたり**します
https://www.flutter-study.dev/firebase-app/provider

もう少し大きな括りで言うと以下の2つに別れています

- Flutterの基礎を学び、Flutterを使ったアプリ作成を目指す
- Firebaseの基礎を学び、FlutterとFirebaseを使ったアプリ公開を目指す

![flutter-study-steps.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/632977/dc20e6dd-6bd1-121a-5b8c-fa5e3fb1d64e.png)


# なぜ作ったのか

自分でもよく分からないですが、勢い余って作ってしまった感じです😅

きっかけとしては、最近仕事でFlutterとFirebaseを使うようになり、
自分自身の勉強も兼ねてまとめサイト作ると面白いかなと思ったとこですかね。

あとは、Flutterの今後に期待し、
**日本でFlutterが流行るきっかけを作れるといいな**と思ったりしています。
（Flutterって、日本語の情報がまだまだ少ないので。。。）


# 今後の予定

完璧を目指すよりもスピード重視🚀で進めたため、
分かりづらい部分や不足している情報はたくさんあると思います。

なので、
今後も積極的にコンテンツの更新・追加をやっていきたいと思っています💪

追加するコンテンツとしては、
より本格的なアプリを作るために必要な情報があると良いのかな？

**Twitterで更新内容を告知してる**ので、よかったらフォローしてね🙇‍♂️
[@flutter_study](https://twitter.com/flutter_study)


# 最後に

Flutterを使うと、驚くぐらい簡単にUIが構築できてしまいます。

また、Webアプリのサポートも整ってきていて、
iOS/Android/Webすべてを1つのソースコードで実現したプロダクトが出てくるのも
そう遠くないのではないでしょうか？

そんなFlutterに期待して
微力ながらFlutterの普及に貢献できたら良いなと思います😀
heroku phpファイル　デプロイフロー

自分のメモ用

アプリケーションの作成
↓
Setteingsを押す。
↓
Buildpacksのphpを追加
※herokuに何の言語を使うのかを教えてあげる
↓
アップするフォルダにcomposer.jsonがあるかを確認する
※このファイルを作っておかないとエラーが出てデプロイ出来ない。
ファイルの中身は空欄でOK！
↓
ターミナルより下記のコマンドを入力
↓
heroku login
↓
heroku git:clone -a アプリの名前
↓
cd アップするファイル←移動する
↓
git add .
↓
git commit -am "make it better"
↓
git push heroku master


これで完了。


再デプロイしようとして同じフローを行うと
すでにアップされていますみたいな表示が出るのでアプリを削除して再登録してやり直す。

※削除時に入力画面が出てくるが、アプリの名前を入力すればOK！
勉強のためのメモ

ひたすら勉強したものを載せていくメモ 2020/05/10(日)～

★SalesCloud vs ServiceC




##受験範囲
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/450298/1b29758d-1625-fc7b-c2c9-92fafdebf909.png)

##Communityライセンス(2020/05/10)
####ポイント
・CustomerCommunity
　　→顧客向け。よってSFAなどの機能は使えなくていいので、商談・リード・キャンペーンは利用不可。代わりに電話の問合わせを下げるようなケースなどは利用可能。
　　→基本個人顧客が利用する想定なので、また、大規模なユーザが使うことを想定しパフォーマンス懸念を無くすためにロールは不要と推察。
　　→Plusがつくとレポートなど追加機能使える。
・PartnerCommunity
　　→パートナー企業向け（代理店とか。）
　　→企業なのでアクセス権限に階層構造をとりえることからShareなども利用できる。
　　→SFAのような機能も使える。
・ライセンス単位（メンバーベース、ログインベース）
　　→ユーザは多くても頻繁にログインしないときはログインベースがおすすめ。
・共有セット
　　→ロールが使えないと共有ルールが使えない。代わりに共有セットでの権限付与を検討
　　→共有セットの特徴は、権限付与したいレコードのAccount/Conatctへのリレーションを利用して権限付与する点（つまりそれがER数にはねる。）
・APIコール数がライセンスに紐づいてるが、APIコール数とは、外部システムからAPIをコールされた（Webサービスを呼ばれた）数である。

■ Communityライセンスの公式ヘルプ（ここにExternal Identityは未掲載）
https://help.salesforce.com/articleView?id=users_license_types_communities.htm&type=5
■ Communityとアクセス権限
https://www.terrasky.co.jp/blog/2016/161205_001912.php
■ 共有セット
https://www.terrasky.co.jp/blog/2015/150908_001441.php


##モバイル(2020/05/24)
ハイブリットアプリに関する考察
https://yapp.li/magazine/3190/
【laravel】local.ERROR Class not foundの際の対処

# laravelで新しくコントローラーを作った際にエラーが出たのでその対処に関して

## 新しくコントローラーを作成すると以下のエラーが発生

```
local.ERROR: Class 'App\Model\＊＊＊＊＊' not found 
{"userId":9,"exception":"[object] 
(Symfony\\Component\\Debug\\Exception\\FatalThrowableError(code: 0):
```

どうやら新しくコントローラーの作成等をするとエラーが発生するらしい



##　対処①

```
composer dump-autoload
```

##　対処②

```
composer update [特定のパッケージ]
```

**注意**
`composer update`のみをしてしまうとすべてのパッケージの更新がされてしまうので、いろいろ影響がでるので注意が必要！！

[特定のパッケージ]の調べ方はわかっていないです、、、、

## 参考記事
[Composerで特定パッケージのみを更新](https://qiita.com/sunnyG/items/01079156b0e340019716)
GitHubにssh接続する初心者さん

# 公開鍵と秘密鍵のペアを生成します
鍵を入れるフォルダに移動します
先頭 $ マークは「ここから入力開始できますよ」を表す記号
Windowsの場合は先頭 > マーク

```terminal
$ cd ~/.ssh
```

## 鍵を生成

```terminal
$ ssh-keygen -t rsa
```

1.パスワード（パスフレーズ）を設定したい場合
任意で生成される秘密鍵／公開鍵ファイル（id_rsaとid_rsa.pubの2つの鍵が生成されます）の名前は変更できます。
本ページの変更例）github_id_rsa

```terminal
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/(ユーザー名)/.ssh/id_rsa): github_id_rsa
Enter passphrase (empty for no passphrase): 
Enter same passphrase again:
```

2.パスワード（パスフレーズ）を設定しない場合は
質問されたら都度エンター（合計3回）を押せば、大丈夫です。


## 生成できたか鍵を確認します

```terminal
$ ls -al
github_id_rsa
github_id_rsa.pub
```
できてました。
```github_id_rsa``` のーファイルパーミッションは```-rw-------```です。

# 生成した公開鍵をGitHubに登録します
GitHubにログインしていることが前提でURLにアクセスします
https://github.com/settings/keys

## 画面右上の「New SSH key」ボタンを押します

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/501225/26b14a47-c921-3291-9baa-eaf618e79e6d.png)

## Title欄に公開鍵名、Key欄に公開鍵
- Title欄に公開鍵名を記入します。
 - 公開鍵を識別できる任意の名前を入力します。
- Key欄に公開鍵の中身を貼り付けます。

例）
github_id_rsa
github_id_rsa.pub

 - このコマンドで中身をコピーできます（Mac）
 - ```$ pbcopy < github_id_rsa.pub```
 - このコマンドで中身をコピできます（Windows）
 - ```$ clip < github_id_rsa.pub```
 - コピーしたらKey欄に貼り付けします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/501225/f8d6095c-747d-a577-9fa6-4a02420df540.png)

## ボタンを押して登録
```Add SSH ket``` ボタンを押して登録完了

## 確認
```$ ssh -T git@github.com```

こんなエラーがでました。

```terminal
Warning: Permanently added 'github.com,52.192.72.89' (RSA) to the list of known hosts.
git@github.com: Permission denied (publickey).
```

```ssh-add -l``` してみてください。
何も表示されないようならSSHのエージェントに ```github_id_rsa``` というssh秘密鍵を登録しましょう.

```
$ ssh-add github_id_rsa
Enter passphrase for github_id_rsa: 
```
パスフレーズを設定している場合には聞かれます。

## ふたたび確認
```$ ssh -T git@github.com```

こんなエラーがでました。

```
ssh: connect to host githhub.com port 22: Connection refused
```

これでエラーの場合は

```$ ssh -vT git@github.com```
ずらずら表示されます

## ふたたび確認
```$ ssh -T git@github.com```

成功しました

```
Warning: Permanently added the RSA host key for IP address '52.69.186.44' to the list of known hosts.
Hi （ユーザー名）! You've successfully authenticated, but GitHub does not provide shell access.
```
接続完了!
GitHubではシェルアクセスは許していないとありますが、心配しないで大丈夫です。

# さいごに
他にも環境や設定方法でやり方はいろいろとあるようです、探してみてください。
わたしは今回これでつなぐことができました。
[Docker for Windows] Sprockets のディレクトリ名がコンフリクトする場合 [Ruby on Rails]

## この記事で解決すること
```
Errno::EEXIST in Hoge#moge
File exists @ dir_s_mkdir - /Railsapp/tmp/cache/assets/sprockets/v4.0.0/**
```
このエラーを **Windows 10 April 2018 Update** 以降のWindowsにおいて解決する

## 原因
Sprockets の使っているキャッシュ用ディレクトリ名が大文字と小文字を区別しているが、WindowsのAPIはディレクトリの大文字と小文字を区別しない事でディレクトリ名がコンフリクトしていることが原因

## 解決

管理者権限でPowerShellを起動します。

```powershell
PS C:\Development\Railsapp>  fsutil.exe file SetCaseSensitiveInfo .\tmp\cache\assets\sprockets\v4.0.0\
```

おわり。

個人開発や開発環境が全員Windowsで統一されているなどの環境であれば、下記で紹介しているSprocketsとDockerの設定を変える方法も有効だと思います。

複数人が参加しているプロジェクト開発などにおいては、標準（Unix環境）にWindows環境が合わせていく方がよりコード・設定の複雑さを減らし良い解決だと思っているので、上記の解決をしてみました。

## 関連・類似記事
今回の手法とは異なる手法で解決している記事があるので、そちらも参考になるかもしれません。

##### SprocketsのCache先を変更することで対応している
- [【Dcoker for Windows】Sprocketsのキャッシュのフォルダ名におけるコンフリクトエラー](https://taka5607.hatenablog.com/entry/2020/04/14/031503)
- [Windows+Docker+Railsでsprocketsのエラーが出る時](https://crieit.net/posts/Windows-Docker-Rails-sprockets)

##### Issue
[FileStore cache patch in v3.6 causes directory name collisions in Windows · Issue #283 · rails/sprockets](https://github.com/rails/sprockets/issues/283)

## 余談
Windows NTはいつまでMS-DOS時代のしがらみから抜けられないのだろうか・・・。
この記事がどなたかの役に立てば幸いです。
Pathname#globをFile::FNM_DOTMATCHオプション付きで呼びだしたときに、”.”や”..”が消えてしまうのはなぜ？

## 疑問に思った点

`Dir.glob`や`Pathname.glob`でワイルドカード（`*`）を指定し、なおかつ`File::FNM_DOTMATCH`オプションを渡すと、`.`や`..`が含まれるパスが返ってきます。

```ruby
require 'pathname'

pathname = Pathname.pwd
#=> #<Pathname:/Users/jnito/dev>

# Dir.glob は "." と ".." を保持する
Dir.glob(pathname.join('*'), File::FNM_DOTMATCH).sort[0..1]
#=> ["/Users/jnito/dev/.", "/Users/jnito/dev/.."]

# Pathname.glob も "." と ".." を保持する
Pathname.glob(pathname.join('*'), File::FNM_DOTMATCH).sort[0..1]
#=> [#<Pathname:/Users/jnito/dev/.>, #<Pathname:/Users/jnito/dev/..>]
```

しかし、`Pathname#glob`（インスタンスメソッドの`glob`）を使うと`.`や`..`が消えて、カレントディレクトリや親ディレクトリそのものが返ってきます。

```ruby
require 'pathname'

pathname = Pathname.pwd
#=> #<Pathname:/Users/jnito/dev>

# Dir.globやPathname.globと異なり、インスタンスメソッドのglobは"."や".."ではなく、カレントディレクトリや親ディレクトリが返ってくる
pathname.glob('*', File::FNM_DOTMATCH).sort[0..1]
#=> [#<Pathname:/Users/jnito>, #<Pathname:/Users/jnito/dev>]
```

僕としてはクラスメソッドの`Pathname.glob`を呼びだしたときと同じように`#<Pathname:/Users/jnito/dev/.>`や`#<Pathname:/Users/jnito/dev/..>`が返ってきてほしかったのですが、この挙動の違いはどういう理由で発生するのでしょうか？その理由を以下にまとめます。

## 結果が異なる理由

`Pathname.glob`は`Dir.glob`の結果をそのままPathnameオブジェクトに変換します。イメージとしては以下のような感じです。（実際はCで実装されています）

```ruby
class Pathname
  # クラスメソッドのglobの実装イメージ
  def self.glob(pattern, flags=0)
    Dir.glob(pattern, flags).map do |path|
      Pathname(path)
    end
  end
end
```

一方、インスタンスメソッドの`Pathname#glob`は`Dir.glob`の`base`オプションに自分自身のパスを設定し、`Dir.glob`の結果と自分自身を表すパスを`+`で結合します。イメージとしては以下のような感じです。（こちらも実際はCで実装されています）

```ruby
class Pathname
  # インスタンスメソッドのglobの実装イメージ
  def glob(pattern, flags=0)
    Dir.glob(pattern, flags, base: self).map do |path|
      self + path
    end
  end
end
```

ポイントとなるのは`self + path`の部分です。

`base`オプションを指定すると、`Dir.glob`は`.`や`..`という文字列を返します（＝`base`からの相対パスを返す）。そしてこれらの文字列をPathnameオブジェクトに`+`で結合すると、`.`や`..`が消えて、カレントディレクトリや親ディレクトリのパスが返ります。

```ruby
pathname = Pathname.pwd
#=> #<Pathname:/Users/jnito/dev>

# "."を結合すると、"."が消えてカレントディレクトリのパスになる
pathname + '.'
#=> #<Pathname:/Users/jnito/dev>

# ".."を結合すると、".."が消えて親ディレクトリのパスになる
pathname + '..'
#=> #<Pathname:/Users/jnito>

# "."や".."でなければ、素直にパスが結合される
pathname + 'foo'
#=> #<Pathname:/Users/jnito/dev/foo>
```

インスタンスメソッドの`Pathname#glob`は内部的に以下のような処理が行われているため、`File::FNM_DOTMATCH`オプションを渡しても`.`や`..`が保持されず、カレントディレクトリや親ディレクトリが返ってくる、というわけです。

## 参考文献

- [Bug \#16831: Running \`Pathname\#glob\` with \`File::FNM\_DOTMATCH\` option loses \`\.\` and \`\.\.\` \- Ruby master \- Ruby Issue Tracking System](https://bugs.ruby-lang.org/issues/16831)
- [`Pathname.glob`の実装コード](https://github.com/ruby/ruby/blob/761528e8aa7c54ec92c90335fe26a584b992918b/ext/pathname/pathname.c#L1091-L1113)
- [`Pathname#glob`の実装コード](https://github.com/ruby/ruby/blob/761528e8aa7c54ec92c90335fe26a584b992918b/ext/pathname/pathname.c#L1131-L1161)
enebularでmongodb

#概要

enebularでmongodbやってみた。

#写真

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18104/21899f8c-b833-f5bf-4e2c-adbcad1938a7.png)


#手順　heroku

- mlab mongodbをクリックして

　mongodb://を控える。
　add collectionする。
　add userする。

#手順　enebular

- node-red-contrib-mongodb2をinstall

- mongodbを追加する。
　mongodb://を書く。
　usernameを書く。
　passwordを書く。

以上。
Ruby で数独

# はじめに
@HMMNRST さんが面白そうな記事を投稿されました。
*[NArrayによる数独の解法（総当たり）の実装／数独を4次元配列と見た場合の様子](https://qiita.com/HMMNRST/items/3f8f1613ad46cd414744)*

NArray や numpy に興味はあるものの取り組んだことは無いので、少しずつ学習したいと思います。
# Matrix
まずは、***Ruby*** の標準モジュールの **Matrix** を使用します。

```require.rb
require 'matrix'
```
```new.rb
a = Matrix.zero(r * c)
```
`Matrix.zero(dim)`で、初期値`0` `dim`行`dim`列の行列を生成します。

```row.rb
  b = (1..r * c).to_a - a.row(i).to_a
```
`Matrix.row(index)`で`index`行のベクターを取り出します。
ここでは、配列に変換して使用しています。

```column.rb
    d = b - a.column(j).to_a
```
`Matrix.column(index)`で`index`列のベクターを取り出します。
二次元配列の様に`transpose`する必要がなく便利です。

```minor.rb
    e = d - a.minor((i / r) * r, r, (j / c) * c, c).to_a.flatten
```
`Matrix.minor(rindex, rsize, cindex, csize)`で部分行列を取り出します。
# 試作１号
```ruby.rb
require 'matrix'
r, c = gets.split.map(&:to_i)
a = Matrix.zero(r * c)
(r * c).times do |i|
  b = gets.split.map(&:to_i)
  (r * c).times do |j|
    a[i, j] = b[j]
  end
end
que = []
(r * c).times do |i|
  b = (1..r * c).to_a - a.row(i).to_a
  (r * c).times do |j|
    d = b - a.column(j).to_a
    e = d - a.minor((i / r) * r, r, (j / c) * c, c).to_a.flatten
    if a[i, j] == 0
      if e.size == 1
        a[i, j] = e[0]
      elsif e.size > 1
        que << [i, j, e]
      end
    end
  end
end
while que.size > 0
  p que.size
  i, j, e = que.shift
  f = e - a.row(i).to_a - a.column(j).to_a - a.minor((i / r) * r, r, (j / c) * c, c).to_a.flatten
  if f.size == 1
    a[i, j] = f[0]
  elsif f.size > 1
    que << [i, j, f]
  end
end
(r * c).times do |i|
  puts a.row(i).to_a.join(' ')
end
```
```dif.rb
    b = (1..r * c).to_a - a.row(i).to_a
    d = b - a.column(j).to_a
    e = d - a.minor((i / r) * r, r, (j / c) * c, 
```
順に、行で使用されていない数字、列で使用されていない数字、ブロックで使用されていない数字の差分を取得しています。

@HMMNRST さんの *[例1](https://qiita.com/HMMNRST/items/3f8f1613ad46cd414744#%E4%BE%8B1)* と *[例2](https://qiita.com/HMMNRST/items/3f8f1613ad46cd414744#%E4%BE%8B2)* は正常に動作することを確認しました。

*[例3](https://qiita.com/HMMNRST/items/3f8f1613ad46cd414744#%E4%BE%8B3)* *[例4](https://qiita.com/HMMNRST/items/3f8f1613ad46cd414744#%E4%BE%8B4)* は一向にキューが減らないです。
別のロジックの追加が必要です。
# まとめ
+ 数独の簡単な問題 を解いた
+ Ruby に詳しくなった

参照したサイト
*[NArrayによる数独の解法（総当たり）の実装／数独を4次元配列と見た場合の様子](https://qiita.com/HMMNRST/items/3f8f1613ad46cd414744)*
*[class Matrix](https://docs.ruby-lang.org/ja/latest/class/Matrix.html)*
*[Matrix](https://www.sakalab.org/prog-ruby/ruby-man-html-20080121/Matrix.html)*
サーバーのSATAを　SSDに変更　（自己責任で！）


ラックマウントサーバーが　やかましいので


![1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/211097/ec2959a8-31ba-b8b1-7c33-1634b79b8192.jpeg)


としましたが、
こころもち静かになったか？　です。

ただ　
sas raid card を使用しなくなったので
PCI　express ボードが空きました。
適当なビデオカードがつけれます。

もちろんテスター
と
ハンダ技術
とがないとだめです

##自己責任で！
##猪木名言　at北
##俺のミサイルは常に女性の方を向いている。
https://news.yahoo.co.jp/articles/9600101f44c6f6a88ed3dca364180a27c64c50ed

アメリカの　WWEで活躍してる　**asuka**　です
まるで　野球の野茂みたいです
![1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/211097/5f85fa9e-9b33-0bd0-7793-7cc5f3f05ee0.jpeg)



ラックマウント型は意外と安い場合があります

##2Xeon　なマシンです
[    0.358138] mce: CPU0: Thermal monitoring enabled (TM1)
[    0.358169] MDS: Vulnerable: Clear CPU buffers attempted, no microcode
[    0.359609] smpboot: CPU 0 Converting physical 1 to logical package 0
[    0.466305] smpboot: CPU0: Intel(R) Xeon(R) CPU           E5540  @ 2.53GHz (family: 0x6, model: 0x1a, stepping: 0x5)
[    0.488779] core: CPU erratum AAJ80 worked around
[    0.488781] core: CPUID marked event: 'bus cycles' unavailable
[    0.525430] smp: Bringing up secondary CPUs ...
[    0.565461] .... node  #1, CPUs:        #1
[    0.003569] smpboot: CPU 1 Converting physical 0 to logical package 1
[    0.003569] smpboot: CPU 1 Converting physical 0 to logical die 1


##１６スレッドです

```
top - 13:53:29 up 2 min,  1 user,  load average: 0.87, 0.78, 0.34
Tasks: 341 total,   1 running, 340 sleeping,   0 stopped,   0 zombie
%Cpu0  :  0.0 us,  0.3 sy,  0.0 ni, 96.0 id,  3.7 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu1  :  0.0 us,  0.3 sy,  0.0 ni, 99.3 id,  0.3 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu2  :  0.7 us,  0.3 sy,  0.0 ni, 99.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu3  :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu4  :  0.3 us,  0.3 sy,  0.0 ni, 99.3 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu5  :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu6  :  0.3 us,  0.0 sy,  0.0 ni, 99.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu7  :  7.6 us,  0.0 sy,  0.0 ni, 92.4 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu8  :  1.7 us,  0.3 sy,  0.0 ni, 98.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu9  :  0.3 us,  0.0 sy,  0.0 ni, 99.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu10 :  7.3 us,  0.7 sy,  0.0 ni, 92.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu11 :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu12 :  0.3 us,  0.0 sy,  0.0 ni, 99.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu13 :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu14 :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu15 :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
MiB Mem :   7954.0 total,   6179.7 free,    969.9 used,    804.3 buff/cache
MiB Swap:   9011.2 total,   9011.2 free,      0.0 used.   6555.6 avail Mem 


```


ただしSSDでは

```
 hdparm -t /dev/sda2

/dev/sda2:
 Timing buffered disk reads: 728 MB in  3.00 seconds = 242.28 MB/sec
```

と早くはない。
【Laravel】php artisan optimizeのエラーの対処

# laravelで`php artisanコマンド`を使用した際にエラーが出たのでその備忘録として

## はじめに
laravelで新規にテーブルの作成をしなければいけなかったが、`phpマイグレーション`がうまくいかず、
その対処として`php artisan optimize`を使用したためにエラーがでたので、その対処の方法について記載する

## まずは現状のマイグレーション一覧を取得
`php artisan migrate:status`でマイグレーション状況を取得ができる

```
php artisan migrate:status
```

## `php artisan tinker`で現在使用しているテーブルの確認ができた
まずそもそもチーム内でどのテーブルを使用しているのかがわからなかったので確認した

`php artisan tinker` 実施後に以下のコマンドが使用できる

```
//現在使用しているテーブル一覧の取得ができる
DB::select('SHOW TABLES');

// membersテーブルのデータが取得できる
DB::table('members')->get();
```

##　上記のコマンドでテーブルの一覧を確認できたので、新規でマイグレーションの作成
```
php artisan tinkerから　exitで抜ける
```
```
//このコマンドで/database/migrations/　配下に作成してくれる
php artisan make:migration create_member_table

//こんな感じで生成される
2020_05_02_102134_create_members_table.php
```

`php artisan migrate`をしようとしたが、エラーが発生:thinking:

```
 SQLSTATE[42S01]: Base table or view already exists: 1050 Table 'users' already exists (SQL: create table `users` 
```
usersがすでにあるみたいなことをいわれる。。。。

`php artisan migrate:fresh`をすれば直るという記事が多いが、データの消去はしたくないので他の解決方法を模索

最適化をすれば直るかもしれないと思いコマンドを調べて、

```
composer dump-autoload
php artisan clear-compiled
php artisan optimize
php artisan config:cache
```

`php artisan optimize`を実施したらエラーが発生

# `php artisan optimize`実行時のエラーが消えた方法

`php artisan optimize`実施のエラーは以下で対処可能

```
php artisan cache:clear
php artisan config:clear
php artisan route:clear
php artisan view:clear
```

## 参考URL
[【Laravel】わりとよく使うArtisanコマンド集](https://qiita.com/sola-msr/items/a09b857c5e7f7c88d01d)

[Laravel キャッシュクリア系コマンドなど](https://qiita.com/Ping/items/10ada8d069e13d729701)
[Laravel artisanコマンドメモ](https://qiita.com/zaburo/items/37768b743ed6d0e28bf5)
[[Laravel]デプロイ時の最適化](https://qiita.com/qiita-kurara/items/d37dbc5b67e6b6dfbe1d)
ビットを使って2の累乗を表す

競技プログラミングで役立ちそうだったので備忘録。

```swift
for i in 0...10 {
    var a = 1
    a <<= i
    print("2の\(i)乗は\(a)です")
}
```

`2の0乗は1です
2の1乗は2です
2の2乗は4です
2の3乗は8です
2の4乗は16です
2の5乗は32です
2の6乗は64です
2の7乗は128です
2の8乗は256です
2の9乗は512です
2の10乗は1024です`
VeloCloudのハンズオンラボを使ってみた①～拠点間VPNの張り方～

#はじめに
　昨今話題のSD-WAN。「SD-WANってなに？？」とか「そもそも本当に便利なの？目から鱗的なのはないの？？」みたいなお話は他の記事に譲るとして、この記事ではVMwareのVeloCloudをかんったんに触ってみた体験談を述べます。
#VeloCloud ハンズオンラボとは
　Vmware社の製品を無料で仮想体験できるのが、[こちら](https://www.vmware.com/content/microsites/learn/ja/jphol.html)のVMwareハンズオンラボ。
　VeloCloud Edge（VCE）のzero touch provisioning（ZTP）やDHSP設定、branch拠点とhub拠点のVPN接続などをVeloCloud Orchestrator（VCO）から試すことができます。
　ハンズオンラボ環境内で、当記事に関係する拠点、リンクのみピックアップしたものが、下の図です。Labの本来の設定では、拠点はこれより多く、MPLSも用いられている設定っぽいです。
![structure.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/469705/e60362ac-23cb-9ab2-ed3c-4cb025deae84.png)

#hub拠点とのVPN接続
　Labで解説されているので割愛。。

#branch拠点間VPN接続
　ここまででbranch拠点とhub拠点の疎通がとれるようになりましたが、branch拠点間の疎通はとれていません。ハンズオンラボの内容を一歩踏み出し、branch間のVPN通信を可能にするのが、以下の操作になります。
![cloudVPN2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/469705/4352d793-2bc2-a3bc-b8e7-f86f0695f0d5.png)
　「Branch to Branch VPN」の「Enable」を選択して、「Use VeloCloud Hubs for VPN」の「Select」からhub拠点にあるVCEを選択するだけ。
　これで、hub拠点と個々別々にVPNを張っていた各branch拠点のVCEが、hub拠点で折り返して通信をすることができるようになります。

#Dynamic Branch To Branch VPN
　ここまでで紹介した設定はBranch間VPN通信をhub経由で可能にするものでした。では、Branch間で直接VPNを張れないものでしょうか。
　Branch間のVPN接続を可能にするのが、以下の「Dynamic Branch To Branch VPN」です。
![cloudVPN3.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/469705/719ec7c8-763e-76cb-4097-e5034d192cc0.png)
　Branch間通信の最初のパケットはhub拠点、もしくはVeloCloud Gateway（VCG）を経由して宛先まで到達するものの、それ以降はBranch間に張られたVPNを通じて直接トラフィックが往来するようになります。イメージは↓な感じ。
![dynamic branch to branch VPN.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/469705/56ba3417-c4b1-aaff-46d1-eb3b533ab479.png)
ソースは[こちら](https://docs.vmware.com/en/VMware-SD-WAN-by-VeloCloud/3.3/velocloud-admin-guide-33/GUID-A625C41D-C78E-4416-B2D7-9811554FF07D.html)。
　以上の設定変更をした直後に、Branch②からBranch①へtracerouteを行いました。1回目のtracerouteが、下の写真の①、2回目のtracerouteが②になります。hub拠点のアドレスである16.16.16.16が②では見られず、hubを経由していないことが見て取れます。
![dynamic_branch_to_branch_VPN2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/469705/82ac46fe-5ab1-d394-b773-37cf518aac6a.png)


#おしまい
　以上、講座を通じてVCE間のVPN接続を数パターン試してみました。ハンズオンラボで扱われていない内容もありますが、試してみることはできます。きっと今回紹介したもの以外にも、試し様はあるかと思います。
　何か面白そうな設定変更ができたら、Qiita投稿お願いします！！
open frameworksをAndoroid Studioでビルドするときにつまづいたこと

# はじめに
open frameworksをAndoroid Studioでビルドする際にめちゃくちゃつまづいたので、覚書き

Mac OS: 10.14.6
open frameworks: 11.0
Eset: 6.8.400.0
実機: AQUOS SHV39

# Gradle Sync 終わらない
基本的には[公式マニュアル](https://openframeworks.cc/ja/setup/android-studio/)に従って設定するのですが、適当なexampleをAndroid Studioに読み込んだところで、Gradle Syncが自動で始まって、一向に終わらない。


３時間後に以下のメッセージが

```
Gradle sync failed: The first result from the daemon was empty. Most likely the process died immediately after connection.
Consult IDE log for more details (Help | Show Log) (3 h 20 m 3 s 854 ms)
```

Gradle Syncが終わらないのは、Esetのファイアウォールの設定の影響らしい。
https://qiita.com/kmatae/items/8f898180408bc3a04c9a

これで解決

# ビルドした後、実機でアプリが立ち上がらない。

エラー内容

```
Unable to determine application id: com.android.tools.idea.run.ApkProvisionException: No outputs for the main artifact of variant:'
```

Android Studioの最新版だとエラーするのでバージョン落としたらうまく行きました。
https://forum.openframeworks.cc/t/troubles-with-running-examples/35195/5
Ansible x AWS CLIのリトライ

基本的にAnsilbeの基本モジュールを利用するのですが、たまーにCLI実行しないといけない時。
AWSの「Request Limit Error」などを回避するさいにリトライを入れた時の構文。
Shell Script全般で利用可能。

```Ansible
- name: Tag of Lambda Function
  shell: aws lambda tag-resource --resource foge --tags "Name=foge"
  register: aws_lambda_tag_resource
  until: aws_lambda_tag_resource.rc == 0
  retries: 5
  delay: 2
```