OmniAICreator/Qiita-1.07M huggingface dataset:
TortoiseGitをコマンドラインから呼び出す

# 発端
弊社ではTortoiseGitを利用してGitによるバージョン管理を行っているのですが、

* フェッチするのにワークディレクトリまで移動して、右クリック＞フェッチ　という操作が毎回面倒くさい！！
* コミットログを確認するのにワークディレクトリまで(ry

とにかくこのオペレーションを簡略化したかったというのが発端になります。

# 解決策
ほぼほぼ、[参考ページ](#参考ページ)に記載の通りです。
オリジナリティは特にありません。

### フェッチしたい場合

```sh
"C:\Program Files\TortoiseGit\bin\TortoiseGitProc.exe" /command:fetch /path:"{dir}"
```

### コミットログを確認した場合

```sh
"C:\Program Files\TortoiseGit\bin\TortoiseGitProc.exe" /command:log /path:"{dir}"
```

# 最後に
作成したスクリプトはマクロやランチャーに登録して使用してください。
私はエクスプローラ（QTTabBar）と組み合わせて使ってます。

# 参考ページ
https://matsuoshi.hatenablog.com/entry/20110502/1304327645
Ruby 2.7でRailsがインストールできない (Windows 10 x64)

### Windows 10環境のruby 2.7でrailsがインストールできない

@miu200521358 さんの

[Windows10 + heroku + github + Ruby on Rails 事始め（2020/02版）](https://qiita.com/miu200521358/items/c65c19e26bd4f99af1cf)

という記事をみかけRubyを最新版の2.7にアップデートするとともにRailsも最新化させようと試みるもRailsがnokogiriのエラーでインストールできません。

```
ERROR:  Error installing nokogiri:                                                       
        The last version of nokogiri (>= 0) to support your Ruby & RubyGems was 1.10.7. Try installing it with `gem install nokogiri -v 1.10.7`                    
        nokogiri requires Ruby version >= 2.3, < 2.7.dev. The current ruby version is 2.7.0.0.                                                                                     
```

エラーメッセージ通りに `gem install nokogiri -v 1.10.7` を指定しても2020-02-02版のプレリリース版を指定 `gem inst nokogiri --pre` しても同様にインストールができませんでした。

用いたRubyはrubyinstaller2 (RubyInstaller-2.7.0-1 - 2020-01-05)

つまり**Windows 10 x64** + **Ruby 2.7.0p0 (2019-12-25 revision 647ee6f091) [x64-mingw32]**での話なのでレアケースとも思えないのですが検索して見つけた

@tsubasaman さんの記事

[(Ruby2.7.0 )Ruby on Railsをうまくインストール出来ないとき(Windows)](https://qiita.com/tsubasaman/items/e126414e63ff7ed101cf)

こちらのコメント欄

> @taichi-ishitani 
> https://github.com/sparklemotion/nokogiri/issues/1961#issuecomment-570071464
> このコメントを参考に、
> - 必要なライブラリを事前にインストール
> - そのライブラリを見るように、nokogiri をインストール
> したら、Ruby 2.7 + Windows 環境でも、最新の nokogiri が使えました。

での方法（[nokogiri本家のissuesを試したところ](https://github.com/sparklemotion/nokogiri/issues/1961#issuecomment-570071464)）にてようやくインストールできたので手順を記しておきます。

### libxsltなどを別途インストールして`--use-system-libraries` で参照させる

以下のいずれかでインストール。当環境では後者の方法でインストールすることができました。

```ruby
gem install nokogiri --platform=ruby // コンパイル失敗
```


```ruby
ridk exec pacman -S mingw-w64-x86_64-libxslt
gem install nokogiri --platform=ruby -- --use-system-libraries
// 成功
```

nokogiriの開発者さんもイシューは把握しているようなので一両日中にはアップデートされるでしょうが`--use-system-libraries`はbundleなどでも使えるオプションなので知ることができてよかったです。

取り急ぎの対応でしたがgemを編集したりRubyのダウングレードをするよりはオプションを使ってできる方法があるならそちらがベターかな。と思った次第でした。
【React】Font Awesomeを導入するメモ

React.jsのアプリケーションにFont Awesomeを導入する際にいつも忘れて一から調べているので備忘録を残します。
言語はTypeScriptを使ってますのでJavaScriptの方は適宜読み替えてください。

# 対象

- Reactアプリ(not React Native)
- Font Awesome無料版(有料版は使ったことないのでわからない)

# パッケージ

### インストール必須なもの

```
npm install @fortawesome/react-fontawesome
npm install @fortawesome/fontawesome-svg-core
```


### 使用するアイコンによってインストールするもの

```
npm install @fortawesome/free-brands-svg-icons
npm install @fortawesome/free-regular-svg-icons
npm install @fortawesome/free-solid-svg-icons
```

どのパッケージをインストールするかは、下の画像の赤枠で判断できます。
使いたいアイコンを[Font Awesome](https://fontawesome.com/icons?d=gallery)で調べてください。
![twitterIcon.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/299625/48c490a9-c728-37d7-d4e3-a068ee79fea0.png)

# 使い方
`@fortawesome/react-fontawesome`から`FontAwesomeIcon`を`import`。
使いたいアイコンの定義を`@fortawesome/free-brands-svg-icons`などから`import`して、`FontAwesomeIcon`の`icon`プロパティに渡します。

```tsx
import React from 'react';
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
import { faTwitter } from "@fortawesome/free-brands-svg-icons";
import { faCalendar } from "@fortawesome/free-regular-svg-icons";
import { faCoffee } from "@fortawesome/free-solid-svg-icons";

const App: React.FC = () => {
  const iconStyle: React.CSSProperties = { padding: 10, fontSize: 50 };

  return (
    <div style={{ textAlign: "center", padding: 50 }}>
      <FontAwesomeIcon style={iconStyle} icon={faTwitter} />
      <FontAwesomeIcon style={iconStyle} icon={faCalendar} />
      <FontAwesomeIcon style={iconStyle} icon={faCoffee} />
    </div>
  );
}
```

![result.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/299625/19cce53b-3186-aac0-aea1-5d46ab3eef9f.png)

おしまい。

# 追記(2022-01-05)

react-icons を使うことをおすすめします。

https://react-icons.github.io/react-icons/
vueのstorybookにobjectのpropsを入れるメモ

よく見るやつ

```ts

import { storiesOf } from '@storybook/vue'
import ItemComponent from './ItemComponent.vue'

storiesOf('ItemComponent', module).add('default', () => {
  const title = 'test'
  return {
    components: { ItemComponent },
    template: `
      <item-component title='${title}' />`
  }
})

```
いや、そうじゃないんだよな…
Objectとか型付けたデータを渡したい…


…よく見たらこれ、.vueの中身を返してるだけじゃね？


```ts

import { storiesOf } from '@storybook/vue'
import ItemComponent from './ItemComponent.vue'
import Item from '@/types/Item'

storiesOf('ItemComponent', module).add('default', () => {
  const item: Item = {
    id: 'ddd',
    title: 'test',
    body: 'test'
  }
  return {
    components: { ItemComponent },
    data: () => {
      return {
        item
      }
    },
    template: `
      <item-component :item='item' />`
  }
})

```

こうじゃ！！！！！！！！！


めでたしめでたし。
ServiceNow 便利技集

ServiceNow で開発をしているときに困ったことと解決策をまとめています。見つけ次第随時更新

## 複数参照されている Script Include の関数を探したい

### 利用ケース
複数の Business rule や Client script などから参照されている Script include の関数 SomeScriptInclude.someFunction() を修正する際に、どこから呼び出されているのか影響範囲を確認したい。（Call hierarchy 的なことをしたい。）

### 解決策
sys_metadata.list を for text = someFunction で検索する。

## 実行されている Job を Kill したい
### 利用ケース
Scheduled job で、実行時間が長い処理を実行中に不具合を見つける。Job を Kill して修正後に再実行したいが、Kill の仕方がわからなかった。

### 解決策
System Diagnostics > Active Transactions (All Nodes) から実行されている Job の一覧がみられるので、そこで該当の Job にチェックを付け、kill を選択する。
Chromeがsourcemapをリクエストするタイミング

jsとかのsourcemapがどのタイミングでリクエストされるか気になったので挙動を確認した。
chrome devtoolsを開いてるかどうかを変えて挙動を見る。

## 前提
- chrome version: 80.0.3987.87
- bundler: webpack
    - version: 4系
    - devtool option: source-map（コンパイルされたコードとは別ファイルでsourcemapを用意するやつ）

## 結果
- chrome devtoolsのパネルを開かないで（画面に含まれる\<script\>経由で）jsをリクエストした場合
    - js.mapはリクエストされない
    - その後、chrome devtoolsを開くとjs.mapがリクエストされる。画面のリロードは必要ない。
- chrome devtoolsを開いた状態でjsをリクエストした場合
    - js.mapはリクエストされる
[Swift] UserDefaults#synchronize()について

# 使うなって言ってるだろ！！！

`synchronize()`はLegacyで不要なメソッドのため使用しないよう求められています。
[Appleのドキュメント](https://developer.apple.com/documentation/foundation/userdefaults/1414005-synchronize)を参照してください。

# 今すぐ消せ！

以上です
【Unity ARFoundation】Sample Sceneの人体検知がやっと触れた、、！（HumanSegmentationImages）

2019年末にARFoundationを触り始めてから、ずっと同じエラーに悩まされていたがようやく解決ができた。
QAプラットフォームの『teratail』に投稿した質問内容を以下に貼り付ける。
リンク：https://teratail.com/questions/239151
____________________
UnityのARFoundationを触りたく、Unity公式のGitHubからarfoundtion-samplesをダウンロードして、Unityにアップロードしたら下記のようなエラーが出ました。
Failed to load ‘/Users/user/UnityARFoundation/Assets/arfoundation-samples/ProjectSettings/XRSettings.asset’ because it was serialized with a newer version of Unity. (Has a higher SerializedFile version)
UnityEditorInternal.InternalEditorUtility:ProjectWindowDrag(HierarchyProperty, Boolean)
UnityEngine.GUIUtility:ProcessEvent(Int32, IntPtr)
上のエラーコードでは「より新しいバージョンのUnityでシリアル化されているため」と書かれているので、Unityのバージョンをダウングレードすれば良いということでしょうか。

このエラーに至った手順を記載します。
①ターミナルにて下記URLを「git clone」
https://github.com/Unity-Technologies/arfoundation-samples.git
②arfoundation-samples.gitフォルダをUnityのProjectのAssetsにドラッグ&ドロップ

○環境
macOS Catalina 10.15.2
Unityバージョン 2019.2.19f1
AR Foundation 3.0.1
AR Subsystems 3.0.0
ARKit XR Plugin 3.0.1
ARKit Face Tracking 3.0.1
____________


いただいた回答にある通り、リンク先に公開されているフォルダはプロジェクトそのものなため、
UnityHubで「リストに追加」しプロジェクトを開けば全て解決した。


この１ヶ月間あまりにも解決できず、上記のエラーを一度無視してサンプルシーンを端末にビルドして遊んでいた。
サンプルシーンの中でも、SimpleARはなぜか問題なく動作して、お目当てのHumanSegmentationImagesやHumanBodyTracking3Dが動作しなかったので、「動作しないサンプルシーンのコードに問題がある！（アホ）」と思っていた笑

※下記画像が、上記エラーを無視してHumanSegmentationImagesを動かしている様子。
※画面中央上部に「Human Segmentation not supported.」とメッセージが出ているので、このメッセージを出しているコードを特定 & 条件分岐・参照を遡り、原因を特定しようとしていた。
（この遡りをしているときにも知らないことが出てきたので、またわかったらQiitaに投稿する）
![IMG_0118.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/577878/f174aece-a737-f58c-5292-f6a56e200820.jpeg)

ちなみに、正常な動作をしているのがこちら。（iPhone 11Pro）
画面左上に検知した手・腕の形が赤く表示されている。
![IMG_0120.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/577878/e1cd8896-f3de-cadb-ed8f-8fef64bf2fac.jpeg)

この検知スピードがめちゃくちゃ早くて正確で、驚いたしワクワクした！！（本当に0.1秒くらい）
この検知のコードを使えば、人間とUnityで作ったオブジェクトのオクルージョンができるっぽい。
未来きてるわ。

【学び】
・エラーは絶対に無視しない（トンチンカンな所を調べて無駄に時間かかるだけ）
・考えて調べて解決できなかったらすぐに質問する（あっという間に解決した）

【関連して知りたい事】
・実際の開発現場では、例えばARFoundationのサンプルシーンのコードをコピペして利用しているのか。
mosquittoのDockerImageを動かしてみる

#Mosquittoをwindows10上でDockerで動かしてみる
MosquittoはOpenSourceのMQTTブローカーです。この記事ではwindows10上でMosqiuttoのDockerイメージを動かすまでの手順について説明します。

##MosquittoをDockerで動かす理由
Mosquitto自体はWindows上に簡単にインストールして動かすことが出来ます。しかしながらWindows版でWebSocketをサポートするには自分でソースからビルドしないといけないようです。(Macならそのまま使えます)
そこで、Docker Hubで検索してみたところ以下のイメージがあったので、使ってみることにしました。

https://hub.docker.com/_/eclipse-mosquitto
##eclipse-mosquittoの実行
実行に関しては非常に簡単です。以下のコマンドでイメージを取得して実行します。
デフォルトの構成ファイルでは1883ポートでMQTTのポートがオープンします。
`docker run -it -p 1883:1883 eclipse-mosquitto`
##構成ファイルの指定
デフォルトの構成ではMQTTのみのサポートのため、構成ファイルを指定してwebsocketのリスナーも起動します。今回はローカルにインストールしたMosquittoの構成ファイルの以下の記述を追加しました。

```mqtt.conf
listener 1883
listener 9001
protocol websockets
```
以上の設定で、MQTTは1883、websocketsは9001のポートを使用するようになります。
起動時に-vオプションで構成ファイルを明示的に指定します。
なお、ファイルの場所は絶対パスで指定しないと駄目なようです。

`$ docker run -it -p 1883:1883 -p 9001:9001 -v C:\mosquitto\mosquitto.conf:/mosquitto/config/mosquitto.conf eclipse-mosquitto`

実行結果
>C:\mosquitto>docker run -it -p 1883:1883 -p 9001:9001 -v C:\mosquitto\mosquitto.conf:/mosquitto/config/mosquitto.conf eclipse-mosquitto
1580886921: mosquitto version 1.6.8 starting
1580886921: Config loaded from /mosquitto/config/mosquitto.conf.
1580886921: Opening websockets listen socket on port 9001.
1580886921: Opening ipv4 listen socket on port 1883.
1580886921: Opening ipv6 listen socket on port 1883.

##まとめ
Dockerを用いることで簡単にローカルでMosquittoを起動することができました。
次のステップとしてDockerイメージをビルドしてIBM Cloud上で動作させたいと思っています。
Statspackのインストール方法とか

下級エンジニアなのでStandard Editionを使用しています。
Enterprise EditionかつDiagnostics Packとかないので
AWRとかは使えません。ということで仕方なくStatspackをインストールしました。

また別のDB構築時に使うと思うのでメモみたいな感じで残します。

## 環境
Azure

Windows Server 2016

Oracle Database 12c Standard Edition 12.2.0.1.0 - 64bit Production

30150416パッチと30268021パッチを適用しています。

## インストール準備

sysdbaでログイン

`sqlplus / as sysdba`

Statspack用の表領域を作成する。サイズはとりあえず300Mで作成しました。
※デフォルトだとSYSAUX表領域へ書き込まれてしまうため

`create tablespace STATSPACK datafile 'V:\oracle\hoge\statspack.dbf' size 300M autoextend on next 100M segment space management auto;`


##インストール

sysユーザーでログインします。

`sqlplus sys/pass as sysdba`

Statspackのインストールはsysdbaでログインした状態で以下のコマンドを実行する。
`@?`は自動で{ORACLE_HOME}に変換されます。

`@?/adbms/admin/spcreate.sql`

コマンドを打った後、パスワード、デフォルト表領域、一時表領域を聞かれますので入力します。

`perfstat_passwordに値を入力してください:` 
 PERFSTATユーザーが作成されるので、パスワードは適当に入力します。

`default_tablespaceに値を入力してください:` 
 インストール準備で作成したSTATSPACK表領域を割り当てるのでSTATSPACKと入力します。

`temporary_tablespaceに値を入力してください:` 
 一時表領域はTEMPのままなのでそのままTEMPと入力します。

ずらーっと実行されてエラーはありませんと表示されるとStatspackのインストールは完了です。

## Statspackのインストール後設定

DBMS_SHARED_POOLをインストール

`@?/rdbms/admin/dbmspool.sql`

`@?/rdbms/admin/prvtpool.plb`

有効になっているか確認
DBMS_SHARED_POOLがVALIDなっていればOK。

`select object_name,status from dba_objects where object_name='DBMS_SHARED_POOL';`

## スナップショットの取得

### 手動で取得

スナップショット取得は以下のコマンドで取得出来ます。
`execute statspack.snap`

レベルを指定していないので、レベル5で取得されます。

レベルを指定する場合は以下のコマンドを実行します（推奨は7）
`execute statspack.snap(i_snap_level => 7)`

PL/SQLプロシージャが正常に完了しました。と表示されると取得が正常に出来ています。

### 間隔を指定して自動取得する

自動取得用のSQLを実行する。
`@?/rdbms/admin/spauto.sql`

ジョブIDを確認する。
インストールしたばかりならジョブIDは1のはず。
`select job, what from dba_jobs;`

2時間毎
`execute dbms_job.interval(＜ジョブID＞, 'sysdate+(1/12)');`

1時間毎（デフォルト）
`execute dbms_job.interval(＜ジョブID＞, 'sysdate+(1/24)');`

30分毎
`execute dbms_job.interval(＜ジョブID＞, 'sysdate+(1/48)');`


#### 自動取得を停止する

`execute dbms_job.remove（＜ジョブID＞）; `

## レポートの出力

`@?/rdbms/admin/spreport.sql`

begin_snapとend_snapが聞かれるのでリストから選択して番号を入力する。

begin_snapとend_snapの入力後、出力ファイル名を入力する。
ファイルはカレントディレクトリに出力されます。
※コマンドプロンプトを開いてすぐにログインしていた場合はC:\Users\hoge みたいな感じ

## 参考URL
Statspackのレポートの見方は以下のサイトを参考にして見ています。
[Oracle｜Statspackの見方（解析方法](https://kita-note.com/oracle-statspack)
Blackmagic Design の TICO を検証してきました

#はじめに
先日 Blackmagic Design の東京オフィスで Teranex Mini IP Video 12G を見させてもらったので簡単にまとめておきます。

![teranex-mini-ip-video-12g-sm.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/308950/a42ff6fb-d36a-35c6-d536-d5b21e1221c4.jpeg)

[オフィシャルサイトはこちら](https://www.blackmagicdesign.com/jp/products/teranexmini/techspecs/W-TERAMIN-30)

#TICOとは
この製品で使われている TICO とは、intoPIX 社が開発＆ライセンスしている映像ネットワーク伝送用のプロトコルのようです。詳しくは[こちら](https://www.intopix.com/TICO)から。

Teranex Mini IP Video 12G は TICO を伝送プロトコルとして使いつつ、コーデックはオリジナルのものを使っているらしいです。なので、TICO だから他の製品と互換性があるかというと、そうではないとのこと。NDI のようにはいかないのね。ちょっと残念。

#性能
この製品のスゴイところは、遅延と画質のクオリティが優れている点です。
遅延はモードによって変わりますが、モードによる画質の違いはありません。

####遅延
遅延は使うモードによって変わります。

|モード|遅延|
|---|---|
|Low Latency| 12 Lines |
|Clean Switch| 2 Frames |

Low Latency モードだと僅か 12 Lines！　1フレも遅れない！？
公式HPに "0.00094 sec - Can we say ZERO latency?" と書くだけのことはあるね。

Clean Switch モードでは2フレの遅延があるけど、画質を落として高速にしているとかではなく、<font color="Fuchsia">画質（ビットレート）は同じだけど、受信側でバッファリングするかしないか</font>の違いだけのようですね。
映像ソースを切り替えた時に Low Latency モードは一瞬黒味が表示されるけど、Clean Switch モードはそういうのが発生しない。それだけの違い。
なので、垂れ流し系でよければ Low Latency、スイッチングするなら Clean Switch といった使い分けになるのだと思います。

####画質
ビジュアリーロスレスを謳っているだけあって、ソース映像との差はほとんど感じられません。
422 10bit 4:1圧縮の固定ビットレート(CBR)です。例えるなら ProRes 422 HQ とか DNxHD 440 がストリーミングされてくるような感じ。画質は NDI と比べるとかなり綺麗。その代わりアルファがないので、NDI のようにそのままキーイングして使う事はできません。

####オーディオ
~~これ、すっかり聞くの忘れてました。
仕様をみると 48KHz/24-bit と書いてあります。オーディオの情報量は映像にくらべて圧倒的にすくないので、非圧縮PCMか可逆圧縮じゃなかと思います。~~
確認しました。やはり非圧縮のリニアPCM(48KHz/24bit)との事です。業務用として全く問題ないですね。

#ネットワークインターフェイス
1Gbps 用と 10Gbps 用の2つのネットワークインターフェイスがあります。1Gbps でカバーできる範囲、つまり HD 3G の範囲までであれば 1G のイーサネットケーブルで問題なし。
4K 30p/60p はそれぞれ 6G, 12G となるので 1/4 圧縮しても 1G を超えるので、別売の SFP モジュールを使って 10Gbps のポートから伝送することになります。

#電源
電源はAC 100Vです。PoE（DC 48V）を使う事もできます。内部ではインバータを使い DC 12V に変換してるらしいので、解体すればバッテリー運用の可能性もありあそうですね。（解体するとメーカー保証がなくなりますので、自己責任でお願いします）

#API
ネットワークAPIを使って設定を切り替えることができるようです。受信側でソースをスイッチする場合はターゲットの IP アドレスを変更する必要がありますが、それをリモートから設定できるようです。
~~ただ、どのSDKを使うのか聞き忘れた & 調べても直ぐには出てこなかったので、これも分かり次第ご報告します。~~

これも確認しました。Videohub SDK を使うことで API アクセスが可能になるようですね。Windows or Mac に Videohub をインストールし、コントロールサーバー上で IP Videohub を作り SDK を介してコマンドを送ると、コントロールサーバー経由で IP Video 12G を制御できるようです。
この辺の詳細は、実際に動かしてから改めてレポートします。必要なアプリとドキュメントは以下の通り。

[Videohub 及び Videohub SDK のダウンロード](https://www.blackmagicdesign.com/jp/support/family/routing-and-distribution)
[Teranex IP Video 12G のドキュメント](https://documents.blackmagicdesign.com/UserManuals/TeranexMiniIPVideo12G.pdf)

#まとめ
画質、遅延は NDI と比べると圧倒的にアドバンテージがあり、ライブ映像制作の本線として十分なポテンシャルがあると感じました。
ただ、PCから直接送受信することができないので、システムとして組み込むことはできても、アプリケーションとして実装するのは難しいのが残念なところ。

TICO が NDI のような立ち位置になって、色んなアプリケーションから使えると良いですね。TouchDesigner 的には TICO In/Out TOP とかあると嬉しい。Unity, Unreal でもプラグインとかで GPU Encode/Decode できるといいな。

#最後に
検証の場を頂いた Blackmagic Design 東京オフィスの皆さん、ありがとうございました。
検証時に録画した映像について許可を得ていないのでここでアップすることはできませんが、暫くは iPhone に保存しておきますので興味がある方は会った時にでもお声がけ下さい。

GlassValley の TICO に関するドキュメントも見つけたので、こちらもご参考までにどうぞ。
[GV Node Datasheet](https://www.grassvalley.jp/kgv/wp-content/uploads/GVB-1-0336F-JP-DS_GV_Node.pdf)
LaravelでAWS認証エラーが起きる？恐らくそれはconfig_cacheの影響です

約６年ぶりくらいにPHP（初Laravel）を触ってるのですがプチハマりしました。残存cacheの影響でハマるとか、物凄く良くありそうなシチュエーションなのに具体的な解決策を見つけられなかったので書いておきます。

LaravelでAWSソリューションを使ってるとこんなエラーレスポンスにめぐりあうかもしれません。

```
{
  "code": "400",
  "message": "Client error: `GET http://169.254.xxx.xxx/latest/meta-data/iam/security-credentials/` resulted in a `404 Not Found` response:\n<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>\n<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\"\n\t\"http://www. (truncated...)\n",
  "exception": "GuzzleHttp\\Exception\\ClientException"
}
```

このエラーはAWSの認証情報であるCredentialsが何かダメですよ！という内容です。
いやいや.envにちゃんとAWS_ACCESS_KEY_IDとAWS_SECRET_ACCESS_KEY書いてあるYO！という時には、恐らくconfigファイルがキャッシュされているせいで正常にAWSのCredentialsが読み込めておらずエラーレスポンスになってる事があります。
ちなみに稼働環境で `php artisan config:clear` を叩けば最新の.envを読み込み（キャッシュもします）するので解消すると思います。

ただし私の環境ではデプロイにDeployerを使っています。なのでデプロイ時に自動実行してもらう為にtaskへ入れておこうと思ったのですが、どうやら標準のタスクには無いようです。なので自分でdeploy.phpにカスタマイズタスクを記載して呼び出します。

```php

task('artisan:config:clear', function () {
    run('php {{release_path}}/artisan config:clear');
});
/**
 * Main task
 */

desc('Deploy your project');
task('deploy:laravel', [
    'deploy:info',
    'deploy:prepare',
    'deploy:lock',
    'deploy:release',
    'deploy:update_code',
    'deploy:shared',
    'deploy:vendors',
    'deploy:writable',
    'artisan:storage:link',
    'artisan:view:clear',
    'artisan:cache:clear',
    'artisan:config:cache',
    'artisan:optimize',
    // optimizeで何かやってるらしく、ここに書かないとうまく機能しません（面倒なのでちゃんと調べてない）
    'artisan:config:clear',
    'deploy:symlink',
    'deploy:unlock',
    'cleanup',
]);
```

ぶっちゃけconfig:clearタスクは省いても良い気がするのですがオーバーヘッドも対してなさそうなので放置しています。
rails Carrierwave urlメソッドで画像ファイル保存先を呼ぶときにURLに%5B%22などが含まれてしまう

# 症状例
`[GET] "/uploads/product/avatars/1/%5B%22image_1.jpg%22%")`

# 望まれる結果
`[GET] "/uploads/product/avatars/1/image_1.jpg")`


#解決法
uploderをマウントした`model`にシリアライズを追加する
もしくはシリアライズの記述を正しくする(タイポをしている場合でもおきる

```:User.rb
class User < ActiveRecord::Base
  mount_uploaders :avatars, AvatarUploader
  serialize :avatars
end
```
もしsqliteを使用しているなら
`serialize :avatars`を
`serialize :avatars, JSON`にする
【MacBook Pro】トラックパッドとキーボードが同時に反応しなくなったときは

## はじめに
この記事は，MacBook Proのトラックパッドとキーボードが同時に反応しなくなったときに，私がどのように直したかをまとめたものです．

注意点として，**パソコンを分解するため公式の保証が(おそらく)受けられなくなります．**
そのため，壊れてもいいという覚悟の方のみ参考にしてください．
この記事を参考にして，不利益が発生しても一切の責任を負いかねます．

## 環境
- MacBook Pro (Retina, 13-inch, Early 2015)
- OS:Catalina(バージョン10.15.3)

## 症状
以前より，スリープからの復帰時にトラックパッドやキーボードが反応しなくなり，ログインができなくなるという不具合に悩まされていました．
その時は強制シャットダウンをして再度立ち上げると反応したため，それで対処していました．
しかし，先日ついに再起動してもトラックパッドとキーボードが反応しなくなってしまいました．

Genius Barに連絡して症状を伝えると，PC内部の状況次第だが修理費として2万円か5万円ほどかかると言われ，自分で直すことにしました．

## 対処
上記の症状が[こちらの方](https://qiita.com/dynamonda/items/e499b9475021390ddfd2)と全く同じであったため，この記事の対処法を試しましたが改善しませんでした．
この方も改善しなかったようで，Genius Barに持ち込んで直してもらったそうです．
当たり前のことですが，**お金はかかりますがGenius Barで直してもらうのが安心です．**

次に見つけたのが[こちらのブログ](https://edvakf.hatenadiary.org/entry/20090329/1238304996)でした．
かなり昔のモデルのMacBookの話でしたが，この記事では配線の接続不良が原因だからそれを改善すれば直ると記載されていました．

そこで以下の流れで配線の接続不良の改善を試みました．
以下で使用している画像は[Gigazine](https://gigazine.net/news/20150313-13inch-macbook-teardown/)さんのものを利用させていただいております．

1. MacBook Proの裏蓋をはずす．
ネジが10箇所あり，2種類の長さのネジで構成されているので混ざらないように気をつけましょう．
ドライバーは[アネックス(ANEX) 特殊精密ドライバー 5溝 1.2 No.3470-G](https://www.amazon.co.jp/gp/product/B00MVBC4HS/ref=ppx_yo_dt_b_asin_title_o00_s00?ie=UTF8&psc=1)を利用しました．
![mac_uramen.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214163/c83fd8f6-1f75-7567-27eb-1a8022ea2da4.jpeg)

2. 基盤とトラックパッド・キーボードの接続部分を覆っている部品をはずす．
緑枠部分がトラックパッド・キーボードと基盤をつなぐケーブルです．
赤枠に2つのネジで止められた板があるので，それをはずします．
ネジは6角の星型のT5という種類のドライバーではずせました．
![mac_nakami.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214163/e34a710d-dc8d-678f-287d-e248017769f8.jpeg)

3. 接続部分を押し込む．
板が外れると接続部分が見えるので軽く押し込みます．
私の場合はケーブルがかなり抜けていたようで，差し込んだ感触がありました．

4. 逆の手順でもとに戻す．

以上の処置によって，私の場合は無事トラックパッドとキーボードが反応するようになりました．

※2020/3/9追記
同じ症状が再発しました．
赤枠のカバーと接続部分に少し隙間があったので，適当な紙を挟んで接続部が抜けにくくなるようにしてみました．
現状は問題なく動いています．

## 参考記事
- [MacBook Proでスリープからの復帰時にキーボードやトラックパッドが反応しない不具合](https://qiita.com/dynamonda/items/e499b9475021390ddfd2)
- [MacBook(Pro)のキーボードとトラックパッドが同時に反応しなくなったときにやってみること](https://edvakf.hatenadiary.org/entry/20090329/1238304996)
- [MacBook Pro 13インチとMacBook Air 13インチのバラバラ分解レポート](https://gigazine.net/news/20150313-13inch-macbook-teardown/)
link_to の復習

#link_toの基本形

```erb
<%= link_to "テキスト", "リンク先のパス" %>
<!-- 例 -->
<%= link_to "Yahoo!", "https://www.yahoo.co.jp/" %>
```

#link_toのmethodオプション

```erb
<!-- 例 -->
<%= link_to "削除", "/users/1", method: :delete %>
```
何も指定しないとGETが指定される。

#link_toのtargetオプション
_blankで新規のウィンドウを開いて表示させる。
_selfで現在のウィンドウで表示させる

```erb
<%= link_to 'link_toリファレンス', yokota_path , { :class => "outer", :target => "_blank"} %>
```
#link_toのclassオプション

```erb
<%= link_to "トップページ", "/", class: "hoge" %>
```

#link_toとhtmlの合わせ技

```erb
<%= link_to "/" do %>
  <i class="fas fa-home"></i> トップページ
<% end %>
```
#画像のリンクを作成しよう

```erb
<%= link_to image_tag('test.jpg', class: "クラス名"), 'パス' %>
```

#dataオプションを使う

```erb
<%= link_to "削除", user_path(user), method: :delete, data: { confirm: "本当に削除しますか？" } %>
```
【正規表現】自分備忘録

<h2>AまたはBに当てはまる文字を削除し、キュッとさせる（上詰めする）。</h2>
```正規表現:置換前
^(!?.**(A|B)).*$\r\n
```

```正規表現:置換後
(Blank)
```


<h2>AまたはBに当てはまる文字 -以外-  を削除し、キュッとさせる（上詰めする）。</h2>
```正規表現:置換前
^(?!.**(A|B)).*$\r\n
```

```正規表現:置換後
(Blank)
```

<h2>'(Single Quotation)を見つけて''(SQ*2)のようにエスケープしたいときに使う。</h2>
```正規表現:置換前
([^,'(])'([^,')])
```

```正規表現:置換後
$1''$2
```


<br/><br/><br/>
時短ツールEmmetの使い方

#わかること
Emmetの使い方

#目的
作業時間短縮・タイプミス削減

#使い方

##導入方法
[Emmet](https://emmet.io/)←こちらのリンクからダウンロードする

##使い方具体例
例えば下記のコードを展開したい場合

```html:qiita.html
<div>
    <ul id="list">
        <li class="list-01"><a href="#"></a></li>
        <li class="list-02"><a href="#"></a></li>
        <li class="list-03"><a href="#"></a></li>
        <li class="list-04"><a href="#"></a></li>
    </ul>
</div>
```

Emmetをダウンロードしていれば

```
div>ul#list>li.list-$$*5>a[href=#]
```

と書いてtabキーを押せば展開される。

```
!
```
を展開すると

```html:qiita.html
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
</head>
<body>
  
</body>
</html>
```
ここまで展開することができる。

##まとめ
Emmetを使い始めてから作業効率が圧倒的に上がり、自動で展開されるのでタイプミスも大幅に減った。
Emmetの記法は他にもたくさんあるのでより詳しく知りたい方は下記の記事を参考にしてみてください！

[「はじめて」でも簡単！Emmetの使い方とよく使うパターン集](https://haniwaman.com/emmet/)
[Emmetチートシート](https://docs.emmet.io/cheat-sheet/)
Jenkins FATAL: Cannot run program "Xvfb": error=2, No such file or directory



Centos7

## job設定で下記をチェックしたときにエラーが発生
Start Xvfb before the build, and shut it down after.

Xvfb starting$ Xvfb :1 -screen 0 1024x768x24 -fbdir /var/lib/jenkins/xvfb-2-..fbdir3866416871658583222
FATAL: Cannot run program "Xvfb": error=2, No such file or directory
java.io.IOException: error=2, No such file or directory

## ディスプレイをインストールする

```bash
yum install -y xorg-x11-server-Xvfb
```
flutter_blueがiOSでヘッダーファイルを見つけられなくてbuildできない問題

# エラーメッセージ

```
fatal error: could not build module 'flutter_blue'
```

あるいは

```
'FlutterBluePlugin.h' file not found
```

というエラーが出てビルドできない。

# 環境
- Flutter 1.14.6
- flutter_blue 0.6.3+1
- cocoapods 1.8.4
- Xcode 11.3.1

# 対策
Flutter Pluginsにある`flutter_blue-0.6.3+1/ios/flutter_blue.podspec`ファイルの一部を下記のように編集する
(Android Studioで作業しているとプロジェクト外のファイルを触ることで警告が出るかもです。)

```podspec
  ~ 略 ~
  
  s.subspec 'Protos' do |ss|
    ss.source_files = 'gen/**/*.pbobjc.{h,m}'
    # ss.header_mappings_dir = '.'  <- コメントアウト
    ss.requires_arc = false
    ss.dependency 'Protobuf'
  end
  
  ~ 略 ~
```

iOSのプロジェクトディレクトリにあるPodsやPodfile.lockを削除し、インストールをやり直す。

```bash
rm -fr Pods Podfile.lock
pod install
```

# 参考
- [[iOS] fatal error: 'flutter_blue/FlutterBluePlugin.h' file not found · Issue #386 · pauldemarco/flutter_blue](https://github.com/pauldemarco/flutter_blue/issues/386)
- [ios - flutter_blue^0.6.3 file not found #import "google/protobuf/Any.pbobjc.h" Flutter - Stack Overflow](https://stackoverflow.com/questions/58492568/flutter-blue0-6-3-file-not-found-import-google-protobuf-any-pbobjc-h-flutter)
tensorflow.kerasにおけるtf.function-decorated function tried to create variables on non-first call.のエラー

たまに詰まりがちなので備忘録で

#エラー部分
```python
class ResNet50(Model):
    def __init__(self, stride: int = 1, *args, **kwargs):
        super(ResNet50, self).__init__(*args, **kwargs)
        self.stride = stride
        self.avgpool = AveragePooling2D()
        self.maxpool = MaxPool2D(padding='same')
        self.ResBlocks: List[Layers] = [] 
        
        self.softmax = Softmax()
        self.dense = Dense(1, activation='sigmoid')

    def call(self, inputs):
        conv_1 = self.conv(inputs)
        maxpooled = self.maxpool(conv_1)
        layers_num = [3, 4, 6, 3]
        for i in range(len(layers_num)):
            for _ in range(layers_num[i]):
                if i==0 and u==0:
                   self.ResBlocks.append(Residual_Block(filters_num=4 * 2 ** (i))(maxpooled))
                else:
                self.ResBlocks.append(Residual_Block(filters_num=4 * 2 ** (i))(self.ResBlocks[-1])))
        
        avgpooled = self.avgpool(maxpooled)
        value = self.dense(avgpooled)
        return avgpooled, value
```

的なことをしてtf.function-decorated function tried to create variables on non-first callが出ていました。
調べるとtensorflowの宣言ずみvariableが新しく宣言されてしまうため、ということですが

#解決後
```python
class ResNet50(Model):
    def __init__(self, stride: int = 1, *args, **kwargs):
        super(ResNet50, self).__init__(*args, **kwargs)
        self.stride = stride
        self.avgpool = AveragePooling2D()
        self.maxpool = MaxPool2D(padding='same')
        self.ResBlocks: List[Layers] = [] 
        layers_num = [3, 4, 6, 3]
        for i in range(len(layers_num)):
            for _ in range(layers_num[i]):
                self.ResBlocks.append(Residual_Block(filters_num=4 * 2 ** (i)))
        self.conv = Conv2D(filters=16, kernel_size=7, strides=self.stride, padding='same')
        self.softmax = Softmax()
        self.dense = Dense(1, activation='sigmoid')
    def call(self, inputs):
        conv_1 = self.conv(inputs)
        maxpooled = self.maxpool(conv_1)
        for layer in self.ResBlocks:
            maxpooled = layer(maxpooled)
        avgpooled = self.avgpool(maxpooled)
        value = self.dense(avgpooled)
        return avgpooled, value
```
とすれば直りました。原因としては、tensorflow.kerasのModelの仕様でLayerを宣言する時にはinitの部分にしなければいけないということでした。
完全に忘れてました。そこらへんと変数の宣言が関係しているのでしょうか。今度時間がある時にでも調べてみたいです。
【Qiita】バックアップのために記事と画像をエクスポート

明日Qiitaに隕石が衝突するかもしれない, もしものために.

#環境
- Windows 10

記事バックアップ

- Python 3.8.1
- Git for Windows 2.5.3(Command Lineで実行)

画像取得

- サクラエディタ Ver2.2.0.1
- DS Downloader Ver2.12.0

Mac環境でもできると思います. 試していないため, あくまで提案です.
- Boot Camp
- Wineで実行.
- (仮想化ソフトウェア(VirtualBox等))
- <a href="https://qiita.com/pe-suke/items/ec59569356467976e1a5">Macでサクラエディタ</a>
- grep機能があるエディタ
- [SiteSucker for MacOS](https://ricks-apps.com/osx/sitesucker/index.html)

#記事エクスポート
@i-tanaka730さんの<a href="https://qiita.com/i-tanaka730/items/6ba423abbcddde62c187">みんな大好きQiitaのバックアップツールを作ったので公開</a>
の力を借ります. 

Qiitaのバックアップツール

[qiita_backupper](https://github.com/i-tanaka730/qiita_backupper)

Gitインストール

-  Git-2.5.3-64-bit.exeをダウンロード、実行する.
<a href="https://github.com/git-for-windows/git/releases/tag/v2.5.3.windows.1">Git for Windows 2.5.3<a>
- Command Lineを選択する.（参考[1]:<a href="https://qiita.com/toshi-click/items/dcf3dd48fdc74c91b409">自分用 Git For Windowsのインストール手順</a>）

バージョンは合わせました.

Pythonインストール

- python-3.8.1-amd64-webinstall.exeをダウンロード、実行する.
<a href="https://www.python.org/downloads/release/python-381/">Python 3.8.1</a>

あとはREADME.mdをよく読んで、記事のエクスポートを実行する. 

#画像エクスポート
[3]を参考にしました.

1. 〇〇.mdをサクラエディタで開く
2. Ctrl + G (検索メニューの中にあるGrep(G))
3. 条件を入力する.(コピペ)

```grep.txt
https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/.*png|https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/.*jpg|https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/.*gif
```

|![コメント 2020-02-05 145122.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/362315/f9408688-1380-172c-c45b-ce39bb7322b0.png)|<img width="250px" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/362315/702e6ab8-9bba-7158-ceb8-2b68a43fb839.png">|
|:---:|:---:|
|Grep条件入力|実行結果|

4.赤枠をコピーし, DS Downloaderに貼り付ける.


5.オプションで保存先, 最大登録数を設定する.
![コメント 2020-02-05 150652.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/362315/9400f85a-4e31-3a0a-ccf8-728463a5057f.png)

6.Downloadを押せば、保存先に画像をダウンロードしてきます.
![コメント 2020-02-05 151333.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/362315/15c4137b-c900-9f72-46ac-3d3d7f164d5e.png)

#補足
- メリット：画像が多い場合は, 効率良い.
- デメリット：`camo.qiitausercontent.com` (参考[4])


#参考文献
[1] <a href="https://qiita.com/i-tanaka730/items/6ba423abbcddde62c187">みんな大好きQiitaのバックアップツールを作ったので公開</a>
[2] <a href="https://qiita.com/toshi-click/items/dcf3dd48fdc74c91b409">自分用 Git For Windowsのインストール手順</a>
[3] <a href="https://www.zbuffer3dp.com/seo/hatenablog-image-download/">はてなブログ内の画像を一括でダウンロードする簡単な方法</a>
[4] [Camoでプロキシした画像の元URLを展開するワンライナー](https://qiita.com/tomoasleep/items/c5cfa16e9ea9e9306e23)
Apache環境でLaravelの環境構築の時に重要だったコマンド（備忘録）

# Apach環境下でLaravelのAPI認証回りの設定を行った
・Passportのインストール

```Console:Console
conposer require laravel/passport
```

・PassportをLaravelに登録する

```Console:Console
'providers' => [
                  :
        Laravel\Passport\PassportServiceProvider::class,
    ],
```

・キーの生成とレコード挿入

```Console:Console
php artisan passport:install
```

・全部のデータベースマイグレーションを最初にロールバックし、それからmigrateコマンドを実行

```Console:Console
php artisan migration:reflesh
```

・シードの実行

```Console:Console
php artisan db:seed
```

・「Personal Access Client」の生成

```Console:Console
php artisan passport:client --personal

->クライアント名を入力
```

# よく訪れたディレクトリ
・このディレクトリの所有者権限をLaravelアプリの所有者に変更しないと、「Service Unavailable」エラーに陥ってた

```Console:Console
$ ls -l /run/php-fpm/www.sock #権限の確認
$ chown www:www /run/php-fpm/www.sock  #権限の変更
```

・Laravel環境のエラーログを見たい！ここで代替エラーの原因がわかる（かも）

```Console:Console
#アプリのRootディレクトリにて
$ vi storage/logs/laravel
```

・ここでよくApache環境のエラーを確認した

```Console:Console
$ cd /
$ vi /var/log/httpd/error_log
```


# 参考サイト
https://www.wakuwakubank.com/posts/457-laravel-passport/
auth0第三方认证认可服务学习

auth0第三方认证认可服务学习
https://auth0.com/

官方github提供的例子
Auth0 Python Web App Login
https://github.com/auth0-samples/auth0-python-web-app/tree/master/01-Login

Auth0 + Python + Flask API Seed
https://github.com/auth0-samples/auth0-python-api-samples/tree/master/00-Starter-Seed

api client + test
https://github.com/auth0/auth0-python/blob/master/auth0/v3/test/management/test_rest.py

官访文档提供的解决方案
Python + Flask + RESTful API 开发
https://auth0.com/blog/jp-developing-restful-apis-with-python-and-flask/

如何应用Auth0的Rules，在Access Token中增加[Role]
https://dev.classmethod.jp/server-side/auth0/add-roles-to-access-token/
【Rails】ActiveRecordの`find_by`で大文字と小文字を区別しないで取得する方法

## 下記URLへ記事を移設しました
[【Rails】ActiveRecordの`find_by`で大文字と小文字を区別しないで取得する方法](https://bamboo-note.tokyo/Ruby%20on%20Rails/rails-activerecord-find-by-get/)
【Crashlytics】開発中のクラッシュログで埋もれるのを防ぐ（Android版）

[Firebase Crashlytics](https://firebase.google.com/docs/crashlytics) を使うと、クラッシュログを自動的に収集でき、ユーザーの環境で起こったクラッシュの把握や原因の分析に役立つ。もはやこれなしでは不安になってしまうくらい、イマドキのアプリ開発には欠かせないツールになっていると感じる。

AndroidでCrashlyticsを使っていたところ、デフォルトだとデバッグビルド時でもお構いなしにクラッシュログを収集してしまうようだった。開発中はクラッシュはそれなりに起こるので、そのままだと本当に本番環境でクラッシュしたログが埋もれてしまう。リリースビルドでは有効にしつつ、デバッグビルドでだけCrashlyticsを無効にする方法を説明する。

# 方法

[The Firebase Blog: Firebase Crashlytics, builds and you](http://firebase.googleblog.com/2019/03/crashlytics-versions.html)

↑のブログポストの末尾の「Apps that are auto initialized」の手順でできる（タイトルの通り、Crashlyticsを自動的に初期化している場合）。

ただ、記事のXMLをそのまま記載すると、実行時に`Key firebase_crashlytics_collection_enabled expected Boolean but value was a java.lang.String.  The default value false was returned.`という警告が出るので、少し書き換える。

最終的には、以下の内容を`app/src/debug/AndroidManifest.xml`に書けばOK。

```xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
  <application>
    <meta-data
        android:name="firebase_crashlytics_collection_enabled"
        android:value="false" />
  </application>
</manifest>
```

ちなみに、`src/debug`に`AndroidManifest.xml`を置くと、debugビルド時にのみ、その内容が`src/AndroidManifest.xml`にマージされる。Crashlyticsに限らず使えるテクニック。

これだけで、デバッグビルド (`./gradlew assembleDebug`) したときはクラッシュログを送らず、リリースビルド (`./gradlew assembleRelease`) のときはクラッシュログを記録するようにできる。ビルド時に追加でなんらかの設定などをする必要はない。


# まとめ

これで開発時はクラッシュログが送られなくなるので、本番環境で発生したクラッシュの解析に集中することができる:+1:
ProgressDialogが非推奨のため、ProgressBarで代替する

ProgressDialog が API 26 (Android 8.0) から非推奨となったため、代わりに ProgressBar などを用いて実装を行う必要があります。

Referenceには ProgressDialog クラスがありますが、DialogFragment クラスを継承しただけの独自クラスです。

シンプルに実装できるものがありましたので紹介します。

以下、Kotlinのサンプルコードです。

```Kotlin:MainActivity.kt
class MainActivity : AppCompatActivity() {

    // ProgressDialog クラスはこのあと実装します
    private val progressDialog = ProgressDialog.newInstance("表示するメッセージ")
 
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        // ここでProgressDialogを表示させます
        progressDialog.show(supportFragmentManager,"TAG")
    }
}
```

```Kotlin:ProgressDialog.kt
class ProgressDialog : DialogFragment() {
 
    companion object {
        fun newInstance(message: String): ProgressDialog {
            val instance = ProgressDialog()
            val arguments = Bundle()
            arguments.putString("message", message)
            instance.arguments = arguments
            return instance
        }
    }
 
    override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
        val mMessage = arguments!!.getString("message")
 
        val builder = AlertDialog.Builder(activity!!)
        val inflater = activity!!.layoutInflater
        val view = inflater.inflate(R.layout.dialog_progress, null)
        val mMessageTextView = view.findViewById(R.id.progress_message) as TextView
        mMessageTextView.text = mMessage
        builder.setView(view)
        return builder.create()
    }
}
```

```XML:dialog_progress.xml
<!-- ルートタグを変更しています。 -->
<!-- エラーが出ましたので、AndroidX を使うようにしました。 -->

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">

    <ProgressBar
        android:id="@+id/progress"
        android:layout_width="80dp"
        android:layout_height="80dp"
        android:layout_gravity="center"
        android:layout_marginStart="16dp"
        android:layout_marginTop="16dp"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintBottom_toBottomOf="parent"
        android:layout_marginBottom="16dp" />

    <TextView
        android:id="@+id/progress_message"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="16dp"
        app:layout_constraintBottom_toBottomOf="@id/progress"
        app:layout_constraintLeft_toRightOf="@id/progress"
        app:layout_constraintTop_toTopOf="@id/progress"
        app:layout_constraintVertical_bias="0.5" />

</androidx.constraintlayout.widget.ConstraintLayout>
```


## Reference
ProgressDialogの独自実装
https://wiki.toridge.com/index.php?android-kotlin-DialogFragment
Salesforceで全レコードを簡単に一発で消す【Tips】

# これはなに

Salesforce Lightning Platformで全レコードを簡単に一発で消す方法を紹介します。


# やりかた

開発者コンソールを開きます。
![スクリーンショット 2020-02-05 14.56.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/268801/f81d8182-3784-47d5-1f68-800941720cd8.png)


`Debug > Open Execute Annonimous Window`をクリックします。

![スクリーンショット 2020-02-05 14.57.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/268801/982fcfac-85a8-7629-a232-bb4a324b004e.png)

開いたウィンドウでDML(?)を実行できます。

![スクリーンショット 2020-02-05 14.58.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/268801/16adb536-8d04-b652-1c78-643daca6ac5c.png)

以下の様に入力します。
SELECTで合致するIDのオブジェクトを消してくれます。

```
delete [SELECT ID FROM TARGET_OBJECT_API_REFERENCE_NAME ];
```

- `TARGET_OBJECT_API_REFERENCE_NAME`にはオブジェクトの入れる。
  (`Accout`とか`MyCustomObject__c`のような）

- 一部だけ消したいならSELECT文の後ろにWHERE COLUMN=123みたいに条件指定できます。 

`Execute`すると レコードを全部消すことができます。

本番環境での実施には十分にご注意ください🙏

以上、参考になりましたら幸いです。

## 参考
http://mnakayama.hatenablog.com/entry/SOQL_Sample_Delete
【Java】Eclipseで"1.Xより下のソース・レベルで許可されていません"とエラーが出た際の対処方法

##ブランチを切ると稀に起きる現象
職場でブランチを切って作業しようとした際に、ビルドすると何故かエラーが下の画像のように大量に発生するときがあります。備忘録も兼ねて解決方法を書きます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/424307/a7eff3fe-3ba1-87f2-6f59-6a86f992dafd.png)
よく見てみると
> '<>'オペレーターは1.7より下のソース・レベルでは許可されていません

とのこと。
エラー表示されている箇所にマウスオーバーしてみると、どうやらJREのバージョンの問題のようです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/424307/209ce98a-f016-8e1b-a345-cddfe951c91b.png)

##解決方法
解決方法はとっても簡単です。まずはEclipseのナビゲーターに表示されているプロジェクトを右クリックします。その中で**プロパティ**をクリックします(赤枠)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/424307/5833443f-5315-e7a3-e2e5-6d439987af72.png)
プロパティ画面で左のリストの中にある**Javaのコンパイラー**をクリックしてみるとあら不思議、実行環境は1.8の筈なのに何故か1.5になっています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/424307/0bcca022-6606-4c0a-023a-854f1192a0c8.png)
なのでコンパイラー準拠レベルを実行環境の1.8に戻してから**適用して閉じる**をクリックしましょう。その際にビルドを行う旨のインフォメーションが出ますのでそのままOKを押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/424307/b28969bf-8cd8-9201-0abc-f70d112fd708.png)
ビルドが完了したら先程出ていたエラーは消えていると思います。これで以上です
AWS LightsailのLAMP環境でSSIインクルード

あるとおもうんです。
受託の制作をしててステージング環境とかない場合とか。

あるとおもうんです。
先方のサーバーがレンタルサーバーでApacheなことが。

あると思うんです。
自社の環境がAWSでLightsailって1ヶ月無料だしここでプレビューしちゃえばよくね？ってことが。


普通にやってたら特に何にも気にすることなく進行できると思うんですけど、
あるとおもうんです。
SSIインクルードしてるHTMLがあることが！！


同じ境遇の方の一助になればという思いで残しておきます。


## まず調べたこと
SSIがhtmlで動くようにするっていうのをググると大抵.htaccessに書く〜とかhttpd.confに書く〜というのがヒットするかと思います。
しかしLightsailなどのキーワードを入れると全くと言っていいほどヒットしない。
（キーワード選定がおかしいのかもしれない）

.htaccessに書いてもうんともすんともしない。
これはhttpd.confで設定しないと動かなそうだな〜とあたりをつけて設定を書いては再起動を繰り返しました。


## 持つべきものは同僚だな！
しかしなかなか動かないのでslackで「LightsailでSSIが動かない・・・。」とチャットしたら
「SSIは脆弱性になりうるんで、デフォルトで使えないようになってたりしそうっすね。そもそもモジュールが入ってなかったりして。」と返信がきた。

ん？神か？


## httpd.confの設定と.htaccessの記述
httpd.confを覗いてみたらモジュールがコメントアウトされていたので
105行目あたりのコメントを外して再起動！

```shell
- #LoadModule include_module modules/mod_include.so
+ LoadModule include_module modules/mod_include.so
```

あとは.htaccessにこんな感じで書いたらインクルードできると思います。

```
Options +Includes
AddHandler server-parsed .html
```

### おまけ
LightsailはBitnamiなので、httpd.confの他にも

`/opt/bitnami/apache2/conf/ssi.conf`
`/opt/bitnami/apache2/conf/bitnami/bitnami.conf`

と設定ファイルがあります。
SSIインクルード以外の機能は試してないですが、これらのファイルで設定すれば動くようになるかもしれません。


## さいごに
SSIのセキュリティに関しては詳しくはないですがあまりよろしくないと思うので、
タスクランナーなどで静的にHTMLに書き出しできないかなど検討をしてみてください。

それと持つべきものは同僚だな！
Laradockを使用して Laravel の開発環境構築



## ディレクトリの作成
```
mkdir myapp
cd myapp
```


## Laradockの導入
```
git clone https://github.com/Laradock/laradock.git [名前を指定したい場合は入力]
```

## Laradockの`.env`を編集
```
cd laradock
cp env-example .env
```
## .envを開いて以下の通りに編集する
`APP_CODE_PATH_HOST=../` を `APP_CODE_PATH_HOST=../src/` に変更し、保存します。

## Dockerコンテナの起動 & ビルド
```
docker-compose up -d nginx mysql
// ワークスペースに入る
docker-compose exec workspace bash
```
Laravelのコマンドはworkspace内で実行できる

## Laravelのインストール
```
composer create-project --prefer-dist laravel/laravel ./
```


src/.env (変更後)

```
DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=default
DB_USERNAME=default
DB_PASSWORD=secret
```

ここで`php artisan migrate`してみる

```
root@c137d5c70b48:/var/www# php artisan migrate

   Illuminate\Database\QueryException  : SQLSTATE[HY000] [2002] Connection refused (SQL: select * from information_schema.tables where table_schema = default and table_name = migrations and table_type = 'BASE TABLE')
```

このままだとエラーが発生する
原因：MySQLコンテナに入ってMySQLにログインしてuserの認証方式を変更する必要がある。

別タブで
`docker-compose exec mysql bash`
を実行してMySQLコンテナに入る。

```
mysql -u root -p
```
パスワードは`root`

以下のコマンドで認証方式を変更

```
mysql> ALTER USER 'default'@'%' IDENTIFIED WITH mysql_native_password BY 'secret';
mysql> ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'secret';
```

workspaceコンテナで
`php artisan migrate`
AWS SDKやCLIでS3に対するアカウントレベルの操作を行う場合はS3 Controlを利用する

## はじめに
AWS SDKからアカウントレベルでブロックパブリックアクセスの設定を行いたかったのですが
SDKドキュメントのs3の項目にはバケット単位で設定を行う項目はあるものの、
アカウントレベルで設定を行う項目が見当たりません。
アカウントレベルで設定を行うには AWS S3 Control に対してAPIリクエストを行う必要がありました。

## AWS S3 Control
AWS S3 Controlは、アカウントレベルのブロックパブリックアクセス設定や
バッチオペレーション、アクセスポイントの管理など、
Amazon S3 コントロールプレーンに対するオペレーションのアクセスを提供します。

提供されているアクションは以下のドキュメントを参照

**Amazon S3 API Reference - AWS S3 Control**
https://docs.aws.amazon.com/AmazonS3/latest/API/API_Operations_AWS_S3_Control.html

## 例
アカウントレベルのブロックパブリックアクセスを設定する場合の例です。
### Boto3
以下のように実行します。

```python
import boto3

client = boto3.client('s3control')

response = client.put_public_access_block(
    PublicAccessBlockConfiguration={
        'BlockPublicAcls': True,
        'IgnorePublicAcls': True,
        'BlockPublicPolicy': True,
        'RestrictPublicBuckets': True
    },
    AccountId='123456789012'
)
```

ドキュメントは以下です。

**Boto3 Docs / Available Services / S3Control**
https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/s3control.html

### AWS CLI
以下のように実行します。

```shell-session
$ aws s3control put-public-access-block --account-id 123456789012 \
--public-access-block-configuration "BlockPublicAcls=true,IgnorePublicAcls=true,BlockPublicPolicy=true,RestrictPublicBuckets=true"
```

コマンドリファレンスは以下です。

**AWS CLI Command Reference - S3 Control**
https://docs.aws.amazon.com/cli/latest/reference/s3control/index.html


その他の言語の例やリンクについては割愛させていただきます。
以上です。
firebase + next.js + expressで、動的サイトの雛形を作る。

## やりたいこと
 - firebase上でnext.jsを使ってSSRしたい。
 - expressも一緒に使って、apiも一緒に作って、express内でDBアクセスとかできるようにしたい。アプリの初期化とかもexpressで完結できるようにしたい。（api用のエンドポイントを作りたい。）
 - nodemonを使って、watchして自動的にビルドさせたい。

## やったこと(成果物)
https://github.com/keenjoe007/firebase-ts-next-express-template

ベースになっているのはこのtemplate
https://github.com/zeit/next.js/blob/canary/examples/with-firebase-hosting-and-typescript
こっちで実装した一番の肝はここ。
https://github.com/keenjoe007/firebase-ts-next-express-template/blob/e2775ba656e0a1e11996ac49b3a5776e10cc8c11/src/functions/index.ts

## ハマリポイント
- devのときと、buildを走らせた際の`dist`内のディレクトリ構成が変わってしまって、next側で`pages`ディレクトリがないよ、とエラーが出る。-> nextAppの初期化段階でのconfの設定が大事。（https://github.com/keenjoe007/firebase-ts-next-express-template/blob/e2775ba656e0a1e11996ac49b3a5776e10cc8c11/src/functions/index.ts#L8-L11）
 
- firebase serveしたときに、ローカルだからと、`NODE_ENV`を`development`に指定するとエ ラーが出る。 -> `production`で起動しましょう。(https://github.com/keenjoe007/firebase-ts-next-express-template/blob/e2775ba656e0a1e11996ac49b3a5776e10cc8c11/package.json#L11)

- react hooks使えない！ -> 開発環境の`node_modules`にも、`dist`配下にも`react`があることが原因だと思われます。（憶測）
https://github.com/CSFrequency/react-firebase-hooks
これで解決するのかな？試してないのでわかりません。今回の本題はそこじゃない感あるので。（無責任）

## このテンプレートで開発するには？
現状スマートな方法を知りません。
申し訳ないんですが、`git clone`して`remote origin`変えてもらうか、

```
npm init next-app --example with-firebase-hosting-and-typescript with-firebase-hosting-and-typescript-app
# or
yarn create next-app --example with-firebase-hosting-and-typescript with-firebase-hosting-and-typescript-app
```
baseのtemplateでnextappを作って、レポジトリを参考にしてもらいつつ、改良するしかなさそう。カスタムテンプレート指定できる方法があればそうしたいので教えて下さい。

## firebase authとか、firestore使えるの？
expressから、`firebase-admin-tools`を使うことで使えます。
今色々試してるところです。

## 所感
firebaseはほぼ初触りだったが、思ったより簡単じゃなかった。むしろかなり悩まされた。
react or vue + firebaseで〇〇作りました！みたいなものと、今回やったのは結構別物だった。
nuxt.jsの方が簡単にできそうだった。
結局こういうことをする理由があるかは、今考えてみるとない気もしているが、達成感はある。
フロントエンドから直接DBアクセスしたりとかどうよ？って考えてたので、それをexpressでやりたかったので、そこはクリアできたかな、と思っている。
自動ビルドめっちゃ遅い。死ぬほど遅い。buildしないといけないので当たり前なんだけど、現代のサクサクweb開発みたいなの期待してるとガッカリするので、改善したいけど、アイデアはない。
【Swift】Color指定の方法まとめ

# SwiftにおけるColor Chooser
色の指定を行う方法としていくつか考えられるので，メモがわりに残しておきます．

## 開発環境
Swift 4
Xcode 11.1

## UIColorのプロパティ指定
Swift初心者用の参考書などにもよく載っている方法がこちらです．

```swift
// 背景を赤色に変更
view.backgroundColor = UIColor.red
view.backgroundColor = .red
```

UIColorの後ろにredやblueなどを指定することでそれに対応する色を指定することができます．
UIColorを省略することもでき，その場合には2行目の書き方になります．

しかし，この書き方では，プロパティに設定されているデフォルトの色を指定することが基本になるため，開発者が意図するような色を指定できない場合もあります．

## UIColorでRGB指定
やはり，開発者として嬉しいのはRGBで色を指定できることでしょう．
UIColorでも次のようにRGBを指定できます．

```swift
// RGBを指定
view.backgroundColor = UIColor(red: 0.1, green: 0.5, blue: 1.0, alpha: 1.0)
```

しかし，この方法では，RGBとalpha値は全て`CGFloat`型で指定しなければならず，色の指定が難しくなります．

そこで，次のように分数表記にし，分子に任意のRGB値を指定することで，RGBの設定値をわかりやすくすることができます．

```swift
// 分数表記にすることでRGBを指定
view.backgroundColor = UIColor(red: 30/255, green: 144/255, blue: 255/255, alpha: 1.0)
```

この指定の方が，メンテナンスなどもしやすいと思います．

## Color Literal
Color Literalを使用することで，コードで色を指定する際にColor Pickerで指定することができます．
この指定方法はXcode8で追加されましたが，Xcode11でも使用することができます．

使い方としてはまず，カラー指定の際に`Color`と入力することでColor Literalがsuggestされるのでこちらを選択します．

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/251019/e58bd74e-c769-0b50-36d8-6683fd19720f.png)

すると，以下のように指定した色が可視化されるようになります．
（以下は白を指定している状態）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/251019/0d93e80e-37eb-ca9d-54bf-eead1fd5130f.png)

この白くなっている部分をダブルクリックすることでColor Pickerをコード内に表示することができます．
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/251019/4e24a66e-7d92-e7cb-f65d-dc548b465be7.png)

このまま色を指定することもできますが，Other...をクリックすると，見慣れたColor Pickerを開くことができます．

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/251019/8a01fdef-fc91-3e01-7d89-049595d86a55.png)

この方法が見やすいと思う人も，そうでない人もいると思います．
自分はRGBの方が扱いやすいと思ってしまいますが，Color Literalの方が子供とかは喜びそうだなとか思ったりもしました．

## まとめ
今回は色の指定の仕方をまとめてみましたが，実際にはデザイナーから指定された画像をペタッと貼る場合も多いかと思いますのでどれほど参考になるかわかりませんが，Swiftでの色指定の際に少しでも力に慣れれば幸いです．
nuxt.js(v2)でesLintの設定をする。ついでにVScodeで自動整形させる。

■動作確認済みバージョン

- nuxt(2.11.0)
- create-nuxt-app(v2.12.0)

■更新履歴

- 2020/2/5 初稿

---

## 目標

- create-nuxt-appでstyleLintのエラーが出ても驚かない
- 各種動作を確認する
- VScodeで保存時に自動整形する

## nuxt.jsインストール時の設定

公式ドキュメントの[`create-nuxt-app`を利用する](https://ja.nuxtjs.org/guide/installation/)を参考に、各種設定をしつつ選んでNuxt.jsをインストールします。ポイントのみ記載します。

↓

```Console:terminal
% cd <インストール先のディレクトリ>
% npx create-nuxt-app
```

### リンティングツールをチェック時に…

```terminal
? Choose linting tools 
 ◉ ESLint
 ◯ Prettier
 ◉ Lint staged files
❯◉ StyleLint
```

ESLint、Lint staged files、StyleLintをチェックします。Prettierは改行強制で好みが分かれるため、プロジェクトメンバーで検討の上で別途追加します。

### インストール完了後…stylelintの設定

インスストール完了後に、`npm run dev`をするとStyleLintErrorが出ます。

↓

```Console:terminal
ERROR  StylelintError

No rules found within configuration. Have you provided a "rules" property?
```

焦らずに…自動生成されている`stylelint.config.js`に空のルールを追加します。

↓

```javascript:stylelint.config.js
module.exports = {
  // add your custom config here
  // https://stylelint.io/user-guide/configuration
  'rules': {} // ←追加
}
```

修正し保存して、エラーが出なければ動作確認完了です。styleLintの設定は以下を参照してください。

参考：[nuxt.js(v2)でstyleLintの設定をする。ついでにVScodeで自動整形させる。](https://qiita.com/amishiro/items/50b8abf935756ba15406)

## 動作確認

確認のために、`% npm run dev`後に適当にjavascriptを打ってください。エラーが出たら成功です。

↓

```Console:terminal
// エラー例

ERROR  StylelintError

/xxx/test-app/pages/test.vue
  24:4  error  Unexpected trailing comma  comma-dangle

✖ 1 problem (1 error, 0 warnings)
  1 error and 0 warnings potentially fixable with the `--fix` option.
```

さらに、`--fix`の動作確認をします。`% npm run lint -- --fix`を入力してエラー箇所が修正されれば成功です。

↓

```Console:terminal
% npm run lint -- --fix

↓
//エラーが出なければ成功
```

commit時のesLintErrorを確認します。適当なjavascriptを打ってcommitします。同様のエラーが出たら成功です。

↓

```Console:terminal
% git add ./pages/test.vue
% git commit -m 'commit test'

↓
// エラー結果抜粋
✖ eslint found some errors. Please fix them and try committing again.

/xxx/test-app/pages/test.vue
  24:4  error  Unexpected trailing comma  comma-dangle

✖ 1 problem (1 error, 0 warnings)
  1 error and 0 warnings potentially fixable with the `--fix` option.
```

修正（`--fix`）して、再度動作確認をします。エラーが出力されずにcommitできたら成功です。

↓

```Console:terminal
% npm run lint -- --fix
% git add ./pages/test.vue
% git commit -m 'commit test'

↓
//エラーが出なければ成功
```

## VScodeで保存時に自動整形する

[eslint](https://marketplace.visualstudio.com/items?itemName=dbaeumer.vscode-eslint)をインストールします。.eslintrc.jsファイルの設定が反映されます。また、自動整形機能（editor.codeActionsOnSave）を有効にするためには、settings.jsonの書き換えが必要です。

#### 自動整形機能の有効化

0. VScodeのprefarence（機能拡張）からSettingsを開きます
1. 検索窓で「settings.json」を検索します
2. **[json]**下の「Edit in settings.json」をクリックしてsettings.jsonを開きます
3. 以下を追記します。

↓

```json:settings.json
{
    ...
    "editor.codeActionsOnSave": {
        "source.fixAll": true
    }
}
```

動作確認をします。先ほどと同じように適当にjavascriptを打ってください。保存時に自動で整形されれば成功です。

以上で目標達成です。

## おまけ

相変わらずほとんど設定をせずにesLintの恩恵を得られます。cool!

すでにシンプル。
IFrameのページで、親フレームで読み込んだJQueryを子フレームでも使う

# やりたいこと
タイトルの通りです。
IFrameを使用したページで親フレームでJQueryをロードしている状況で、同じJQueryを子フレームでも利用したい。
もちろん、子フレームのページ内で`<script>`タグを記述して同じJQueryを読み込めばいいのですが、フレームワークでJQueryが自動読み込みされている状況だったため、あまりやりたくないなあと思って調べました。

# ソース
```html:子フレーム.html
<script type="text/javascript">
    var $ = parent.jQuery;
</script>
```

## 注意点
当然ですが、`<script>`タグを使用した外部JavaScriptの読み込みを含め、JQueryを使用している部分より前に記述する必要があります。

```html:子フレーム.html
<script type="text/javascript">
    var $ = parent.jQuery;
</script>

<script type="text/javascript" src="use_jquery.js"></script>

<script type="text/javascript">
    alert($("#hogehoge"));
</script>
```