OmniAICreator/Qiita-1.07M huggingface dataset:
[UE4] Android Build-tool 31.0.0 でパッケージが出来ない件

公式ドキュメント通りAndroid向けのパッケージ作成のためのセットアップを行って、いざビルドするとこんな感じのエラーがでることがあります。

```c++
UATHelper: パッケージ化 (Android (ASTC)):   Build-tool 31.0.0 is missing DX at C:\Users\wanko\AppData\Local\Android\Sdk\build-tools\31.0.0\dx.bat
UATHelper: パッケージ化 (Android (ASTC)):   
UATHelper: パッケージ化 (Android (ASTC)):   FAILURE: Build failed with an exception.
UATHelper: パッケージ化 (Android (ASTC)):   
UATHelper: パッケージ化 (Android (ASTC)):   * What went wrong:
UATHelper: パッケージ化 (Android (ASTC)):   Could not determine the dependencies of task ':app:compileDebugJavaWithJavac'.
UATHelper: パッケージ化 (Android (ASTC)):   > Installed Build Tools revision 31.0.0 is corrupted. Remove and install again using the SDK Manager.
```

Android Build-tool 31.0.0が壊れているようです。。。:crying_cat_face:


# 修正方法
この問題を修正するには**Build-Tool 31.0.0をアンインストールして正しく利用できるバージョンをインストールする**のが簡単です。

## Android Studioを立ち上げてSDKManagerを開く
<img width="800" alt="android studio startup" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/464248/4536df43-ab75-4a60-c980-086ef80aa593.png">

## Build-Tool 31.0.0をアンインストールし適切なバージョンをインストール
SDK Tools > 右下の Show Package Details にチェック > 中央のリストから 31.0.0 を削除し、お好みのバージョンを選択する > OKを押してインストール

<img width="800" alt="android studio sdk manager" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/464248/d66e08c0-28e6-421d-9f65-add7750e2d0b.png">


## リンク
answerhub内の同じ問題に関するスレッド
https://answers.unrealengine.com/questions/867231/error-cmdexe-failed-with-args-1.html
キー入力、マウス入力をIUniTaskAsyncEnumerable<T>に変換して使う

#はじめに

この記事は [キー入力、マウス入力をIObservable<T>に変換して使う](https://qiita.com/Euglenach/items/29833548294a8b822b79) の続編みたいなものです。
今回はUniTaskの新しい機能 `IUniTaskAsyncEnumerable` に変換して使えるようにしてみました。

# 導入方法

PackageManagerを使用して **git** / **OpenUMP** / **OpenUMP CLI** からインストールできます。

詳しくは[GitHub](https://github.com/euglenach/InputAsAsyncEnumerable)からどうぞ

https://github.com/euglenach/InputAsAsyncEnumerable

# 実行環境

- Unity 2020.3.2f1
- [UniTask 2.2.5](https://github.com/Cysharp/UniTask)
- [InputAsAsyncEnumerable 1.0.0](https://github.com/euglenach/InputAsAsyncEnumerable)

# 概要

Unity の InputManager による入力の一部を `IUniTaskAsynEnumerable` に変換して使うことができます。

```CSharp:例
using InputAsAE; // 名前空間の参照はコレ

InputAsAsyncEnumerable
    .GetKey(KeyCode.Space) // Input.GetKey(KeyCode)に相当する
    .ForEachAwaitWithCancellationAsync(async (_, ct) => {
        Debug.Log("Space");
        await UniTask.DelayFrame(100, cancellationToken : ct);
    }, this.GetCancellationTokenOnDestroy());

InputAsAsyncEnumerable.AnyKeyDown.ForEachAsync(_ => Debug.Log("AnyKeyDown")); // anyKeyDown

InputAsAsyncEnumerable
    .AxisRaw("Vertical")  //AxisRaw
    .Subscribe(async (y, ct) => {
        await UniTask.Yield(ct);
        Debug.Log("AxisRaw:" + y);
    }, this.GetCancellationTokenOnDestroy());
```

対応しているメソッドは以下の通りです。

- GetKey, GetKeyDown, GetKeyUp
- anyKey, anyKeyDown
- Axis, AxisRaw
- GetMouseButton, GetMouseButtonDown, GetMouseButtonUp
- GetButton, GetButtonDown, GetButtonUp

# おわりに

ここからはただの感想です。

UniTask が進化して v2 になり `UniTask.Linq` が追加されました。
しかし使う機会があまり無いように思えます。実際素晴らしい機能なのですが、かなりマニア向けです。
私は `ForEachAwaitAsync` の**取りこぼし**をする性質が好きでよく使っています。

取りこぼしとは、非同期なデリゲートを実行している間は流れてくるメッセージを無視する機能です。
`UniTaskAsyncEnumerable.EveryUpdate()` や uGUIのイベントを UniTaskAsyncEnumerable に変換したとき等に発生します。
上記の例では、いくら高速でスペースキーを連打しても100フレームに1回しか入力を検知しません。

使いどころはまぁほぼ無いと言っていいかもしれないですが、任意のタイミングでささっと非同期処理をテストしたいときに少し使えるかもしれません。

最近は `InputSystem` が出てきて、使ってる人はそもそも このライブラリを使うことすらできません。
**InputManager を使ってて UniTaskAsyncEnumerable を好んで使う人**。。。この世に何人いるでしょうか。。。。。

モノ好きは使ってみてはいかがでしょうか。
gitコンフリクトの対処

# コンフリクトが起きた際の対処方法
## 状態を確認
```
git status
```
## 方法１　マージをしないで前の状態に戻す
```
git merge --abort
```
## 方法２　修正内容を取り込んで解決
```
1,発生したファイルを開く
2,ファイルを修正
3,git add
4,git commit
5,git logでマージされてるか確認
```
寝苦しかったから、エアコンとセラミックファインヒータで再熱除湿を疑似再現してみた

#はじめに
エアコンをつけて寝ても寝苦しい夜がある
設定温度は適切なのに
明け方近く、エアコンがサボってムワッとしたり、凍えるように寒かったり
データを取って分析し、エアコンとセラミックファンヒータ制御する事で解決できた
#使用機器と前提

https://soracom.jp/store/5235/

- エアコン (タイマー４つ設定できる、再熱除湿<font color="Red"><b>非</b></font>対応機）
- スマートコンセント TPlink HS105＋KasaSmart（スマホアプリ）
- セラミックファンヒータ(ハードスイッチ機）
- 家族４人で就寝 (内　幼児２）

#寝苦しかった夜のデータ
温度は一定のまま、湿度だけ徐々にあがっていく
生ぬるい湿った風がエアコンから出続け朝を迎える
![温度一定で湿度上がっていく.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/436645/9c0d1dbe-bdb6-c8ed-c605-5204d7f43696.jpeg)
放射冷却、雨の日、秋ぐちなど、明け方の外気温が低いと、戸外から熱が供給されず
エアコンは、ほぼ送風で目標温度が維持できてしまう。
この状況で、500ml/人 の水分[^1]が空気中と布団に供給される為

※1分毎 移動平均6 SoracomHarvestからダウンロードしてグラフ化
※湿度80%に達する日もあるが、無料レンタル期間中には計測できず

#除湿で寝るとどうなるか

除湿は弱・標準・強　で運転し続けるシンプル制御のようだった
- 弱　→　生ぬるい、暑い
- 標準→　寒すぎ
- 強　→　身の危険を感じるため欠測

#冷房と除湿とセラミックファンヒータを制御してみた
除湿・冷房と同時にセラミックファンヒータで暖房は無駄に思うかもしれないが、
高級なエアコンはこれを行っているとのことで再現してみた（再熱除湿機能）
（※以下、湿度65%を維持しようと頑張ったあと４時に力尽きて冷房放置→湿度上昇の図）
![4時まで頑張った.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/436645/f517b84f-7b22-b015-3e40-2379800f0b06.jpeg)
#PoC結果
- セラミックファンヒータ制御に加えると爽やかな空気維持可
- 後はBME280＋ラズパイ等でやれるが、エアコン操作時のピー音大が課題
- セラミックファンヒータ制御しっぱなし就寝は要注意

#おまけ
他にも実験した結果
- 布団、夏なら昼2時間も干せば十分かと　(取り込んだ後部屋を閉じ空気中水分量推移計算)
- 掃き出し窓解放と、換気扇＋せり出し窓15cm開で湿度換気の効果に差はない

#使ったアプリ
SORACOM Harvest Data画面をスマホブラウザのPCモードで。傾向見るときは1分更新。テントでキャンプ時とかに持っていくと寝る時の暑い・寒いの予測がつきそう
<img width="200" alt="Screenshot_20210815-080616.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/436645/b0d3b9e6-5c39-9ee6-d881-1d44da7de3dd.png">
Kasa smart　　セラミックファンヒータ暫定制御。600w 15分の数で調整
<img width="200" alt="Screenshot_20210819-233829.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/436645/ebcace82-506d-f2a8-6f33-42653ac2f018.png">
霧ヶ峰リモート エアコン運転切り替え
<img width="200" alt="Screenshot_20210824-234624.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/436645/4958690e-68d6-f39d-1de6-b853af89e028.png">

# 参考サイト
[^1]

https://pocarisweat.jp/scene/sleep/
[OutSystems]Integration Builderで生成したモジュールの構成を確認する

[Integration BuilderをSalesforce Developer Editionで試してみる](https://qiita.com/jyunji_watanabe/items/5a7992935ef21e0e7af7)で試しに作ってみたモジュールの構成を確認してみます。

# 確認環境
Personal Environment(Version 11.13.0 (Build 31107))
Service Studio (Version 11.11.12)
Integration BuilderはSaaS：https://integrationbuilder.outsystems.com/

# ドキュメント
[Structure of generated integrations](https://success.outsystems.com/Documentation/11/Extensibility_and_Integration/Integration_Builder/Structure_of_generated_integrations)

# アーキテクチャ
Salesforceで試しに作ってみたConnectorの構造をまとめてみました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/332987/c074a932-488e-03ce-5ba5-aa5ecbf44a1a.png)

## Integration Manager
最初にIntegration Builderをセットアップするときにインストールする、標準部品。
認証関係を処理する仕組みを提供する。
図中では、IM_SalesforceConnection_CSしか表示していないが、他の種類のコネクタ用の認証処理用モジュールも含んでいる。

## Salesforce Connector
IntegrationBuilderで作ってみたSalesforce用コネクター部品のアプリケーション。
Salesforceに直接接続する機能を提供するDRVモジュール（Library）と、DRVが提供するActionをラップして内部接続先への認証も処理するActionをユーザーアプリケーションに提供するISモジュール（Service）で構成される。

## ユーザーモジュール
利用側アプリケーション・モジュールのこと。
このモジュールが利用するのはISモジュールのActionだけにする。

# アーキテクチャ設計の資料から
まず、モジュール名のDRVやISというサフィックスについて。
アーキテクチャ設計の資料（[Naming Conventions for Modules](https://www.outsystems.com/training/lesson/2301/naming-conventions-for-modules)）に該当する部分があります。

DRV（Driver）「Integration with different systems that perform the same type of operation」。同じ種類の処理をする異なるシステムに接続する部品。
IS（Integration Services）「Technical wrapper to consume and normalize an external service」。外部サービスを利用し、標準化するための技術的なラッパー部品という意味ですね。

この構成については、[Transparency Service](https://success.outsystems.com/Support/Enterprise_Customers/Maintenance_and_Operations/Designing_the_Architecture_of_Your_OutSystems_Applications/05_Integration_Patterns_for_Core_Services_Abstraction#Transparency_Service)というアーキテクチャ設計パターンがあります。
リンク先の図を確認してみてください。
例として、顧客情報が2種類のERPと1種類のSaaSに分散しているときに、DRVを3種類それぞれに用意し、ISを1つ用意する。そしてISが統一したインターフェースを提供、受け取った値をチェックして適切なDRVに処理をルーティングする、というパターン。

パターンの構成が同じなので、この設計パターンを参照して、IntegrationBuilderで生成されるモジュールの役割と名前が決められているように見えます。
IntegrationBuilderの場合、コネクターアプリケーションが自動生成されるので2階層にする必要性は薄そうに見えますが……。
設定によっては、生成されたモジュールを手動でメンテナンスできるので、そのためかもしれません。

# 提供される操作
CRUDと検索条件を渡して合致するデータの件数を返すCount、及び検索条件を渡して合致するデータを返すSearchの操作が提供されている。

[Available Server Actions in an integration](https://success.outsystems.com/Documentation/11/Extensibility_and_Integration/Integration_Builder/Structure_of_generated_integrations#Available_Server_Actions_in_an_integration)によると、以下の6つの操作が、とりこんだデータの種別ごとに作成される（データソースによっては一部操作に対応しないこともある）。

- Create
- Get
- Update
- Delete
- Count
- Search
【Rails】favicon設定手順メモ〜

## 目標
faviconの設定
## 環境
rails: 6.1.3
ruby: 3.0.0
mac: os
## 準備
### 1.favicon用の画像を準備します。

自分が使用した、サイトを貼り付けておきます。
[Faviconアイコン -無料ダウンロード](https://icons8.jp/icons/set/favicon)
## 実装


### １.　ダウンロードしたfavicon画像をassets/images配下にファイルを設置します。

```
app/assets/images/favicon.png
````

### ２.layouts/application.html.erbに記述
```erb:app/views/layouts/application.html.erb
<!DOCTYPE html>
<html>
  <head>
    <title>SAMPLE</title>
    <%= favicon_link_tag('favicon.png') %>
  </head>
</html>
```
`favicon_link_tag`で記述します。
ローカルサーバーを起動して確認、タブが指定したfaviconで表示されます。
### まとめ 
簡単な作業ですがFavarit iconはユーザーの印象に残る大事なアイコンなので備忘録として残しておきます。

# 参考

[favicon設定　Rails](https://qiita.com/ntkgcj/items/6643a07a43a36029dc9b)
Docker チートシート

#イメージ一覧表示
```
$ docker image ls
REPOSITORY            TAG       IMAGE ID       CREATED        SIZE
ubuntu                latest    1318b700e415   4 weeks ago    72.8MB
```

#イメージ削除
```
$ docker rmi $imageid -f
```

#dockerイメージにタグをつけるコマンド
```
docker tag $元のイメージ名:$タグ名 $ユーザー名/$イメージ名:$タグ名
```

#イメージからコンテナを作成し実行
```
$ docker run --name $container_name -it $image_name /bin/bash
```

#コンテナ確認
```
$ docker ps

CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
```

#コンテナ削除
```
$ docker rm $containerid
```
-fオプションで強制削除。IDの複数選択も可能。

#コンテナ起動
```
$ docker start $containername
```

#コンテナ停止
```
$ docker stop $containername
```

#コンテナに入る
```
$ docker exec -it $containername bash
```

#DockerコンテナからDockerイメージを更新する
```
$ docker commmit $containername $imagename:$tagname
```

#docker hubにログイン
```
$ docker login
```

#docker hubに指定したイメージをアップロードするコマンド
```
$ docker push user/server01:0.1
```
クライアントサイドレンダリング vs. サーバーサイドレンダリング vs. プレレンダリング

##はじめに
最近フロントエンドのフレームワークについていろいろ調べることや周りの人から知見を聞くことが多くなってきました。その中でちょいちょい出てくるレンダリング技術に関するクライアントサイドやサーバーサイドなどのワードについて全くの知識が無かったので調べてみるとそれぞれの特徴などについて備忘録として記載したいと思います。

##フロントエンドの動向と考え方
近年フロントエンド技術に関するコミュニティが大いに盛り上がりを見せています。
その背景にあるのはNode.jsやブラウザ技術の著しい成長にともない、バックエンドのみならずクライアント含めて多種多様なフレームワークや技術が発明されてきました。その一例としてサーバーサイドレンダリング技術はReactやその他組み込みサーバーなどのハイドレーション機能によりますます勢いを増してきました。
ではクライアントサイドレンダリングやプレレンダリングも含めてどのレンダリング技術がどのようなものなのかそれぞれを概要を見ていきましょう。

##Client Side Rendering (CSR)
AngularやEmber.jsなどのフレームワークの登場により、フロントエンド技術者はクライアントサイドでレンダリングする傾向が生まれました。これはJavascriptがブラウザ側で解釈できるようになったことで実現できるようになり、SEO対策に関してもしっかりと対応ができました。
単一のHTMLファイルにリダイレクトすると、コンテンツをレンダリングする前に全てのJavascriptを取得しブラウザに全てをコンパイルさせるまで、サーバーとコンテンツなしで（またはロード画面を使用して）リクエストを配信できます。

##Server Side Rendering (SSR)
SSR技術は何年も前からおおくのところで利用されています。しかしクライアントサイドレンダリング技術の登場により忘れられつつありました。
###MVCアーキテクチャ (2000年代初頭)
2000年代初頭にSSRとしてPHPやJava PageなどのサーバーサイドでHTMLやデータ全てをコンパイルしクライアントにHTMLを配信していました。もちろんこれは高速で有効的でした。
しかしながら別ページに遷移するたびにサーバー側ですべての処理（ファイルの取得からコンパイル、HTML配信からCSS,JSの取得まで）をやり直す必要があり、ユーザー側は毎回数秒程度の待ちが発生しUXとしてはあまり良いものではありませんでした。
###Ajax (2000年代中旬)
JavaScriptで非同期にサーバからデータを取得し、それをもとにクライアントサイドでHTMLを部分的に動的編集するような技術に、Ajaxという名前が付いた。
Ajaxは「Asynchronous JavaScript + XML」の略で、XMLHttpRequest (略してXHR)というJavaScriptのAPIで 、サーバにHTTPリクエストを送り、そのレスポンスを非同期に処理する技術。
### Modern SSR (2010年代)
React（Facebook社）は**_RenderToString_**という方法によってだれでも簡単にサーバーサイドレンダリングを利用できるように実現し、SSR技術はフロントエンド界隈でますます盛り上がりを見せていきました。
Next.jsや、Vue.jsのNuxt.jsなどのフレームワークにより実現が容易になったのも、普及の要因の１つです。

##Pre-Rendering
大まかにいうと事前にHTML,CSS,JSを構築（バンドル化）しておき、ユーザーからのリクエストが来たらそれを配信しましょうといった技術になります。
（今考えればSSRもプレレンダリングの一部かもしれません。逆もしかりか・・・）
定義は様々でこれといった断言はないようですが（私の中だけかも・・・）一般的に言われている代表的な2つを載せておきます。
どちらもクローラーの影響を考えたうえでのアーキテクトとなっており、規模感によっても向き不向きが分かれます。
###Static Side Generation (SSG) 
Pre-Renderingの概要そのもので事前（Build時）にHTML,CSS,JSを構築（バンドル化）しておき、CDNなどのホスティングサービスを利用してユーザーリクエスト時にそれを配信する動きになります。
一番シンプルで且つ、スピードもSSRよりもあり安定した配信が可能です！！
ただ、ビルド時にデータ量が多かったりするとビルド時間が長くなったり、変化の激しいコンテンツなどは再度ビルドが必要なるため不向きなどといったとデメリットもあります。
###Incremental Static Regeneration (ISR)
最新のレンダリング技法で主にNext.js 9.5より広まりを見せてきています。
SSGと違って事前ビルドだけでなくユーザーリクエスト起因で更新/追加部分(ページ)だけを再ビルドを実行させます。
もちろん更新/追加がなければ前ユーザーがビルドしてくれた内容をそのまま配信し続けます。
このように変化にビルド時のデータ量問題や変化への対応といった部分でSSGよりも優れたアーキテクトへと進化した次世代のレンダリング方法と確立しました。

##まとめ
もともとReactしかフロントエンド技術を使っておらずクライアントサイドレンダリングが有効で一般的と思っていましたが、あらたなフレームワークを調べるうちにレンダリングもここまで進化しているのかということに驚かされました。
進化がとまらないフロント技術が数年後どうなっているかは誰も予測できないですが、今を知り必死に食らいついていくしかないのかなと感じました。

##参考/引用文献
・[Client-side vs. Server-side vs. Pre-rendering for Web Apps](https://www.toptal.com/front-end/client-side-vs-server-side-pre-rendering#:~:text=Client%2Dside%20rendering%20manages%20the,displays%20a%20blank%20page%20first.)
・[Webアプリパターンの歴史 - SST、AJAX、CSR、SSR、SSG、そしてISR](https://qiita.com/kimizuy/items/d33420330479f8c85449#%E3%81%9D%E3%81%97%E3%81%A6-isr-%E3%81%B8-16)
・[CSR,SSR,SSG,ISRのまとめ](https://qiita.com/souhei-etou/items/4c3320471d23a08510e1)
Next.jsがSIGSEGVで落ちる

原因は分からんがなおったのでメモ．

# エラー内容

`next dev`で下記エラーメッセージを吐いて落ちてた．

```:エラーメッセージ
error Command failed with signal "SIGSEGV".
```

### 環境・技術等
- Next.js
- TailwindCSS
- TypeScript
- M1 Mac

# 解決方法

色々試してるうちに`next/image`とM1 Macの相性が悪いのかなあという結論になって放置してたが，あるときTailwindCSSを無駄にimportしてることに気付き，修正したらなおった．

```tsx:_app.tsx(修正前)
import "~/styles/style.css";
import "tailwindcss/tailwind.css";
```

```tsx:_app.tsx(修正後)
import "~/styles/style.css";
```

詳細な原因はまだあまり調査できてないです．
分かる方いれば教えていただけると助かります…

# 追記
別のプロダクトで試したらなおりませんでした…
他にも原因ありそう
【TypeScript入門】オプションパラメーターとデフォルトパラメーター

# はじめに
オプションパラメーターとデフォルトパラメーターを勉強したので、簡単にまとめてみました。

## オプションパラメーター
* パラメータの最後に記述する
* オプショナルを表す？をつける

```typescript
const isUserSignedIn = (userId: string, username?: string): boolean => {
  if (userId === 'ABC') {
    console.log('sample 1: User is signed in! Username is', username)
    return true
  } else {
    console.log('sample 2: User is not signed in')
    return false
  }
}

isUserSignedIn('ABC', 'YSasago')
isUserSignedIn('DDD')//第２引数は、オプショナルなのでエラーにはならない

//sample 1: User is signed in! Username is YSasago
//sample 2: User is not signed in
```

## デフォルトパラメーター
* パラメーターの順序は関係なく記述できる
* =で指定する

```typescript
const isUserSignedIn2 = (userId: string, username = 'NO NAME'): boolean => {
  if (userId === 'ABC') {
    console.log('sample 3: User is signed in! Username is', username)
    return true
  } else {
    console.log('sample 4: User is not signed in')
    return false
  }
isUserSignedIn2('ABC')

//sample 3: User is signed in! Username is NO NAME
```
基本情報技術者試験勉強0824

本日の積み上げ結果
基本情報技術者試験勉強
平成27年秋過去問
平成28年春過去問
間違えた問題の復習
AWSの本を読む

サイバーセキュリティ基本法　国民に対し，サイバーセキュリティの重要性につき関心と理解を深め，その確保に必要な注意を払うよう努めることを求める規定がある。

アナログ電圧をディジタル化した後に演算処理することの利点として，適切なもの　演算結果が部品精度，温度変化及び外来雑音の影響を受けにくい。

パンくずリスト　利用者が現在閲覧しているWebページに表示する，Webサイトのトップページからそのページまでの経路情報。


キャッシュメモリをもつメモリシステムにおいて，平均メモリアクセス時間が増加する原因　ヒット率の低下。

フェールセーフ　システムを構成している機器が故障したときは，システムが安全に停止するようにして，被害を最小限に抑える。

ワームの検知方式の一つとして，検査対象のファイルからSHA-256を使ってハッシュ値を求め，既知のワーム検体ファイルのハッシュ値のデータベースと照合することによって，検知できるもの　ワーム検体と同一のワーム。

CIOが経営から求められる役割　ビジネス価値を最大化させるITサービス活用の促進。

システム企画段階において業務プロセスを抜本的に再設計する際の留意点　新たな視点から高い目標を設定し，将来的に必要となる最上位の業務機能と業務組織のモデルを検討する。

レビュー技法の一つであるインスペクションにおけるモデレータの役割　レビューを主導し，参加者にそれぞれの役割を果たさせるようにする。

通信機能及び他の機器の管理機能をもつ高機能型の電力メータであるスマートメータを導入する目的として，適切でないもの　停電時に補助電源によって，一定時間電力を供給し続ける。

ポインタを用いた線形リストの特徴　ポインタによって指定されている要素の後ろに，新たな要素を追加する計算量は，要素の個数や位置によらず一定である。

デバイスドライバの役割　アプリケーションプログラムの要求に従って，ハードウェアを直接制御する。

キャッシュメモリの効果　主記憶から読み出したデータをキャッシュメモリに保持し，CPUが後で同じデータを読み出すときのデータ転送を高速に行う。

システム結合テストにおける状態遷移テストに関する記述として，適切なもの　設計されたイベントと内部状態の組合せどおりにシステムが動作することを確認する手法。

PCのクロック周波数に関する記述のうち，適切なもの　CPUのクロック周波数と，主記憶を接続するシステムバスのクロック周波数は同一でなくてもよい。

NAPT プライベートIPアドレスの複数の端末が，一つのグローバルIPアドレスを使ってインターネット接続を利用する仕組みを実現するもの。

コーポレートガバナンス　企業経営の透明性を確保するために，企業は誰のために経営を行っているか，トップマネジメントの構造はどうなっているか，組織内部に自浄能力をもっているかなどの視点で，企業活動を監督・監視する仕組み。

リンカ　相互参照の解決などを行い，複数の目的モジュールなどから一つのロードモジュールを生成する。

MRP  日本語では資材所要量計画と呼ばれ、部品表と生産計画をもとに必要な資材の所要量を求め、これを基準に在庫，発注，納入の管理を支援するシステムです。

ミッションクリティカルシステムの意味　	障害が起きると，企業活動に重大な影響を及ぼすシステム。

ITサービスマネジメントにおけるインシデントの記録と問題の記録の関係についての記述のうち，適切なもの　問題の記録には，問題の記録の発端となったインシデントの相互参照情報を含める。

スループット　システムが単位時間内にジョブを処理する能力の評価尺度。

システム監査基準における，組織体がシステム監査を実施する目的　情報システムにまつわるリスクに対するコントロールの整備・運用状況を評価し，改善につなげることによって，ITガバナンスの実現に寄与する。

業務プロセスを可視化する手法としてUMLを採用した場合の活用シーン　複数の観点でプロセスを表現するために，目的に応じたモデル図法を使用し，オブジェクトモデリングのために標準化された記述ルールで表現する。

入出力管理におけるバッファの機能として，適切なもの　入出力装置と処理装置との間に特別な記憶域を設け，処理速度の違いを緩和する。

ディジタルフォレンジックスでハッシュ値を利用する目的　証拠となり得るデータについて，原本と複製の同一性を証明する。

パイプ　UNIXにおいて，あるコマンドの標準出力を，直接別のコマンドの標準入力につなげる機能。

EMS  他メーカから受注した電子機器などの受託生産を行う。

IoT(Internet of Things) コンピュータなどの情報通信機器だけでなく様々なものに通信機能をもたせ，インターネットに接続することによって自動認識や遠隔計測を可能にし，大量のデータを収集・分析して高度な判断サービスや自動制御を実現することである。

システムの稼働率　MTBFを変えずにMTTRを短くできれば，システムの稼働率は向上する。

開発プロセスにおいて，ソフトウェア方式設計で行うべき作業　ソフトウェア品目に対する要件を，最上位レベルの構造を表現する方式で，かつ，ソフトウェアコンポーネントを識別する方式に変換する。
ServiceNowで”New”ボタンを非表示&リンク非活性の方法。

# 以下赤枠部について表題の通り変更してみる。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287651/9e2cfa8c-93a4-1368-bbcb-be41838e52e5.png)

# 各項目のどれでもいいので三本線部分をクリック。
その後、ConfigureのListControlをクリックする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287651/48778c1e-e7cb-588d-5207-f8ebf2564316.png)

# Omit new buttonとOmit linksにチェック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287651/341b25b2-d02e-1e8c-7ad4-56ec6c3c055f.png)

#設定を保存して結果を確認。
Newボタンが非表示となり、リンクが非活性になっていることを確認。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287651/bd2ead67-ee8e-258b-a0bf-12ecb1c10257.png)
MICROCADAM VB6实现文本查找替换，霓虹限定版

[TOC]
## API介绍
名称： HD API ，用的语言是VB6，没有VB6环境的可以使用excel的VBA代替
安装商业付费版的MICROCADAM可以在安装目录里找到chm的说明文档，网上的说明文档根本找不到，好不容易找到一个还看着累（都tm2021年了，还在用VB6，是可谓朽木不可雕也，及至于不可理喻，你tm用个c语言也比这个强啊）
https://d280e234-e0ae-4dcd-8b13-5f10f27f4d70.filesusr.com/ugd/0e87f4_57c054cfdccd479281dcd6aeeac2948b.pdf
https://www.autotex.org/documents

>爸爸要睡觉了，困死了，明天再弄♂
AtCoderログ：0091 - ABC 215 B

# 問題

https://atcoder.jp/contests/abc215/tasks/abc215_b

## 問題文
> 正整数 $N$ が与えられるので、 $2^k \le N$ となる最大の整数 $k$ を求めてください。

## 制約
> ・$N$ は $1 \le N \le 10^{18}$ を満たす整数である

# 回答
## 回答1 (AC)
入力された $N$ に対し $2^1, 2,2,...$ を計算していき、はじめて $N < 2^i$ となる $i$ が見つかるまで繰り返すことにしました。コードは以下のようになりました。

```C++:abc215b-1.cpp
#include <bits/stdc++.h>
using namespace std;
 
int main() {
  int64_t n;
  cin >> n;

  int i = 0;
  int64_t p = 1;
  while ( p<=n ) {
    p *= 2;
    i++;
  }
  
  cout << i-1 << endl;
}
```

## 回答2 (WA)
設問の式の両辺の対数をとると $\log_2{2^k} \le \log_2{N}$ つまり $k \le \log_2{N}$ となるので、$\log_2$ の整数部分が求める $k$ の値となります。コードは以下のようになりますが、残念ながら WA となります。これは、$\log_2$ の計算精度が低いことが原因です。

```C++:abc215b-2.cpp
#include <bits/stdc++.h>
using namespace std;
 
int main() {
  int64_t n;
  cin >> n;
  
  cout << floor(log2(n)) << endl;
}
```

## 回答3 (AC)
回答2において、$\log_2$ への入力値を double にすると出力値も double となり、精度問題が解決できます。コードは以下のようになりました。

```C++:abc215b-3.cpp
#include <bits/stdc++.h>
using namespace std;
 
int main() {
  int64_t n;
  cin >> n;
  
  cout << floor(log2((long double)n)) << endl;
}
```

# 調べたこと
## [AtCoder の解説](https://atcoder.jp/contests/abc215/tasks/abc215_b/editorial) → [公式解説](https://atcoder.jp/contests/abc215/editorial/2480)
3種類の回答が紹介され、最初の2つは回答1、回答3と同じ方針、3つ目は $N$ の2進展開を利用していました。

## [AtCoder の解説](https://atcoder.jp/contests/abc215/tasks/abc215_b/editorial) → [ユーザ解説](https://atcoder.jp/contests/abc215/editorial/2528)
公式解説の3つ目の解法が、言語によってはライブラリにヨウイされているそうです。

# リンク
## 前後の記事
- 前の記事 → [AtCoderログ：0090 - ABC 215 A](https://qiita.com/RoadLynton/items/c9a4f2ee5f2ea01dba66)
【初心者向け】アプリを作る前に知っていて良かったRESTという考え方 

#はじめに
私は、現在LaravelでWebアプリを制作中なのですが、その際に非常に役に立ったRESTという設計（考え方）と、それがどのように役に立ったのかについて説明してきます。

#RESTとは
REST（Representational State Transfer）とは、適切なHTTPメソッド（GETやPOSTなど）を用いて固有のURIを持ったリソース（テキストや画像などのプログラムが使用するデータ）にアクセスし、操作が可能となるという設計モデル（考え方）のことです。
文章だけでは、この考え方を知っていて何が良かったのかが伝わらないと思うので、次項で表を基に説明します。

#役に立った点
以下の表は、RESTという考え方をベースに、私が実際にWebアプリを作る前に作成した表の一部です。

| HTTPメソッド | URI | 動作 | 処理名 |
|:-:|:-:|:-:|:-:|
| GET | /menus/create | メニュー新規登録画面確認 | create |
| POST | /menus | メニュー新規登録 | store |
| GET | /menus | メニュー一覧 | index |
| PUT | /menus/{menu} | メニュー更新 | update |
| DELETE | /menus/{menu} | メニュー削除 | destroy |

1番上のメニュー新規登録画面確認を例に見ると、GETを用いて、/menus/createというURIを持った画面にアクセスし、メニュー新規登録画面を表示しようとしているということが一見して分かります。
この一行一行に処理名を付記（Laravelのコントローラーのテンプレートに合わせて記載）してあげることで、ルーティングの記述が非常に楽になります。
今回はメニュー関連の機能を作っているので、MenuモデルやMenuControllerを作成していることを前提に以下のルーティングを見てみましょう。

```php:web.php
Route::get('/menus/create', 'MenuController@create');
Route::post('/menus', 'MenuController@store');
Route::get('/menus', 'MenuController@index');
Route::put('/menus/{menu}', 'MenuController@update');
Route::delete('/menus/{menu}', 'MenuController@destroy');
```
先ほどの表とほとんど同じような記述がなされていますね。

Webアプリを作り始める前にこのような表を作っておくと、機能についての整理もできて、実際に記述していくときにはミスも減らせる上、スムーズに書いていけるのではないでしょうか。
ABC121メモ

# ABC121 メモ
## [A - White Cells](https://atcoder.jp/contests/abc121/tasks/abc121_a)

答えは$(H-h)(W-w)$ 
 
```python:121A.py
H, W = map(int, input().split())
h, w = map(int, input().split())

ans = (H-h)*(W-w)
print(ans)
```

## [B - Can you solve this?](https://atcoder.jp/contests/abc121/tasks/abc121_b)

問題文通り愚直に判定を行う。<br>
計算量は$O(NM)$より問題なし。  

```python:121B.py
N, M, C = map(int, input().split())
Blst = list(map(int, input().split()))

ans = 0
for i in range(N):
    Alst = list(map(int, input().split()))
    tmp = C
    for j in range(M):
        tmp += Alst[j]*Blst[j]

    if tmp > 0:
        ans += 1

print(ans)
```

## [C - Energy Drink Collector](https://atcoder.jp/contests/abc121/tasks/abc121_c)

栄養ドリンクを買う順番によらず、安い店で買えるだけ買うのが最善。<br>
実装上は、値段と本数を組にしたリストをソートし、安い方からM本超えるまで足し上げていく。<br>
計算量は、ソート部が$O(N\log{N})$、足し上げ部が$O(N)$より、全体では$O(N\log{N})$。  

```python:121C.py
N, M = map(int, input().split())

lst = []
for i in range(N):
    A, B = map(int, input().split())
    lst.append([A, B])

cnt = 0
ans = 0
lst.sort()

for i in range(N):
    A, B = lst[i]
    if cnt + B < M:
        cnt += B
        ans += A*B

    else:
        ans += A*(M-cnt)
        break

print(ans)
```


## [D - XOR World](https://atcoder.jp/contests/abc121/tasks/abc121_d)

今回の問題ではA, Bが十分大きいため、そのままAからBまでXORを計算しては間に合いません。

このような場合、XORをとる数字を二進数に変換した際に各位の1の個数の偶奇を計算することを考えた（偶数子ならその位は1、そうでなければ0）。

また、XORの性質として、A xor A = 0であるから、AからBまでのXORは、1からBまでのXORと、1からA-1までのXORでXORを計算することで、求まることが分かる。

よって、1からNまでのXORを計算する関数を作れば解けることが分かった。

ここで、二進数を列挙していくと、

|十進数|二進数 |
| --- | --- |
| 0 | 0000 |
| 1 | 0001 |
| 2 | 0010 |
| 3 | 0011 |
| 4 | 0100 |
| 5 | 0101 |
| 6 | 0110 |
| 7 | 0111 |
| 8 | 1000 |
| 9 | 1001 |
| 10| 1010 |
| 11| 1011 |
| 12| 1100 |
| 13| 1101 |

のようになり、各位が周期的に変化していることが分かる。右からi番目の位は、$2^{i}$個で一周するので、これを利用して、Nの各位の周期の中で1が何個現れている部分かを判別して計算を行うことができた。

計算量については、$10^{12}<2^{40}$なので、高々40回程度の計算でいいことがわかる。よって$O(\log{max(A, B)})$である。

公式の解説の方がより単純で実装も楽だった。

```python:121D.py
def xor_sigma(N):
    n = 0
    for i in range(40):
        if i == 0:
            if N%4 == 1 or N%4 == 2:
                m = 1
            else:
                m = 0

        else:
            d = N%(2**(i+1))
            if d%2 == 1 or d < 2**i:
                m = 0
            else:
                m = 1 << i

        n = n|m

    return n

A, B = map(int, input().split())

ans = xor_sigma(A-1)^xor_sigma(B)
print(ans)
```
magento 2.4.2 registration.php変更点

# はじめに

magento 2.4.2をインストールして、
Magentoのエクステンションを作ってみよう〜初級編〜
に従って行いましたが、エクステンションが表示されませんでした。
詰まったところを記載致します。


# リンクはこちら
https://knowledge.sakura.ad.jp/17953/

https://devdocs.magento.com/

https://devdocs.magento.com/guides/v2.4/install-gde/tutorials/change-docroot-to-pub.html



# 最終更新日
2021年8月24日


# 環境の情報
OS
ubuntu 20.04


# 変更点

```
<?php
\Magento\Framework\Component\ComponentRegistrar::register(
    \Magento\Framework\Component\ComponentRegistrar::MODULE,
    'My_Example',
    __DIR__
);
```

↓

```
<?php

use Magento\Framework\Component\ComponentRegistrar;

ComponentRegistrar::register(
    ComponentRegistrar::MODULE,
    'My_Example',
    __DIR__);

```

registration.phpは、
エクステンションを、読み込みするファイルですが、このように記述が変更する必要がありました。

認識出来ていなかったら確認してみて下さい。
フォールトトレランス とは

## 勉強前イメージ

あまりイメージつかない・・・
AWS系のやつなんかな、、、

## 調査

### フォールトトレランスとは

fault(障害)のtolerance(耐性)についての状態で、
システムや機器の一部が故障・停止しても
予備系統に切り替える等で正常に稼働させ続ける仕組みのことです。
システムを止められないものに対して使用され、
システムだけでなく飛行機のエンジンや自動車の制御系に関しても使用されます。

ITでは、HDDのRAID化や冷却ファンの多重化、
無停電装置の導入などが挙げられます。

### フェイルセーフ

似たような言葉で、フェイルセーフ(フェイルソフトとも言う)があります。
これも機器やシステムについての考え方で、
故障や誤作動が発生した際になるべく安全な状態にするように仕組みにすること。

もし、システムが誤作動したりハードのものが故障したりしたとしても
自動的に安全に導くような制御方式や原理を構築時に組み込みます。

### フォールトトレランスとフェイルセーフ

- フォールトトレランス : 全体の機能や性能を落とさずに稼働を続行するような仕組み
- フェイルセーフ : 故障や誤作動が発生したとしても安全な状態になるような仕組み

## 勉強後イメージ

考え方ってことね。
壊れたときにどうなるようにするか、
二重化するとかRAID化するとか。。。

## 参考

- [フォールトトレランス](https://www.otsuka-shokai.co.jp/words/fault-tolerance.html)
- [フェイルセーフ 【fail safe】 フェールセーフ](https://e-words.jp/w/%E3%83%95%E3%82%A7%E3%82%A4%E3%83%AB%E3%82%BB%E3%83%BC%E3%83%95.html)
is not authorized to perform: ecr:InitiateLayerUpload on resource: って怒られたら

```
[ecs_test]$ docker push XXXXXXXXXXXX.dkr.ecr.ap-northeast-1.amazonaws.com/hello-world-ecs-test-2:latest
The push refers to repository [XXXXXXXXXXXX.dkr.ecr.ap-northeast-1.amazonaws.com/hello-world-ecs-test-2]
62fa8530d588: Preparing 
fb04ab8effa8: Preparing 
8f736d52032f: Preparing 
009f1d338b57: Preparing 
678bbd796838: Preparing 
d1279c519351: Waiting 
f68ef921efae: Waiting 
denied: User: arn:aws:iam::YYYYYYYYYYYY:user/your_name is not authorized to perform: ecr:InitiateLayerUpload on resource: arn:aws:ecr:ap-northeast-1:XXXXXXXXXXXX:repository/hello-world-ecs-test-2
```

keyを追加して

```~/.aws/credentials
  1 [default]                                                                                                                                             
  2 aws_access_key_id = aaaaaaaaaaaaaaaaaaa
  3 aws_secret_access_key = bbbbbbbbbbbbbbbbbbbb
  4 
  5 [ecs-user]
  6 aws_access_key_id = ccccccccccccccccccc
  7 aws_secret_access_key = ddddddddddddddddddddddd
```

-- profile ecs-user ってオプションを追加

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/645146/865dde30-92eb-7763-dab7-4609eadcafd2.png)
【Laravel】フォームのバリデーションエラー時に入力された値を保持する


# バリデーションエラー時に入力された値を保持する

グローバルに定義されており、どこからでも呼び出せる`old`ヘルパをinput要素のvalueに設定します。

バリデーションを行っていないときは何も表示されず、エラーが発生したときのみ値を表示することができます。

参考：

>old関数はセッションにフラッシュデーターとして保存されている直前の入力値を取得します。

https://readouble.com/laravel/6.x/ja/helpers.html#method-old

```php:hoge.blade.php
// テキストの内容を保持（type="date"なども同様）
<input type="text" name="freeWord" value="{{ old('freeWord') }}">

// チェックされたチェックボックスを保持
<input type="checkbox" name="checkBox" value="0" {{ old('checkBox') == '0' ? 'checked' : '' }}>
<input type="checkbox" name="checkBox" value="1" {{ old('checkBox') == '1' ? 'checked' : '' }}>
<input type="checkbox" name="checkBox" value="2" {{ old('checkBox') == '2' ? 'checked' : '' }}>

// チェックされたラジオボタンを保持
<input type="radio" name="radioButton" value="0" {{ old('radioButton') == '0' ? 'checked' : '' }}>
<input type="radio" name="radioButton" value="1" {{ old('radioButton') == '1' ? 'checked' : '' }}>
<input type="radio" name="radioButton" value="2" {{ old('radioButton') == '2' ? 'checked' : '' }}>
```

# バリデーション成功時にも入力された値を保持する

バリデーションに成功後に遷移する画面が同じ画面であれば、その場合も値を保持する必要があります（画面に埋め込まれた検索フォームで検索後に同じ画面に戻ってくる場合など）。

`old`ヘルパは第二引数にデフォルトで表示する値を設定できるので、コントローラから受け取った検索条件を第二引数に設定してあげれば、バリデーションの成功時にも値を保持することができます。

```php:hogeController.php
 public function index(Request $request)
    {
        // バリデーション処理など...

        // リクエストから検索条件を取得する
        $searchConditions['freeWord'] = $request->input('freeWord');
        $searchConditions['checkBox'] = $request->input('checkBox');
        $searchConditions['radioButton'] = $request->input('radioButton');
        
        // 実際の検索処理など...

        // 再度inputに表示するため、検索条件をコントローラからビューに渡してあげる
        return view('hoge', ['searchConditions' => $searchConditions,]);
    }
```

```php:hoge.blade.php
// 第二引数（$searchConditions）に値が設定されており、エラーが発生していない場合、第二引数の値が表示される
<input type="text" name="freeWord" value="{{ old('freeWord', $searchConditions['freeWord'])) }}">

<input type="checkbox" name="checkBox" value="0" {{ old('checkBox', $searchConditions['checkBox']) == '0' ? 'checked' : '' }}>
<input type="checkbox" name="checkBox" value="1" {{ old('checkBox', $searchConditions['checkBox']) == '1' ? 'checked' : '' }}>
<input type="checkbox" name="checkBox" value="2" {{ old('checkBox', $searchConditions['checkBox']) == '2' ? 'checked' : '' }}>

<input type="radio" name="radioButton" value="0" {{ old('radioButton', $searchConditions['radioButton']) == '0' ? 'checked' : '' }}>
<input type="radio" name="radioButton" value="1" {{ old('radioButton', $searchConditions['radioButton']) == '1' ? 'checked' : '' }}>
<input type="radio" name="radioButton" value="2" {{ old('radioButton', $searchConditions['radioButton']) == '2' ? 'checked' : '' }}>
```
Kiwis2 API Mock Server(簡単にJSONサーバできる)

##### What is Kiwis2 API Mock Server

Kiwis2 API Mock Serverは、簡単に設定でき、javascriptで応答電文作成できるのAPI MockServerです。

[こちら](https://kiwis2.github.io/download/download.html) て、kiwis2-mockserverをダウンロードします。

GitHub: https://github.com/kiwis2/mockserver

HomePage: https://kiwis2.github.io/

##### 1.簡単な操作

```
APIを作成するための単純なファイルブラウザを提供します。
javascriptを直接使用して、リクエスト情報を読み取り、オンラインでレスポンス内容を編集できます。
```

![img](https://kiwis2.github.io/images/1.gif)

##### 2.動的URLをサポートし、コンソールでデバッグ情報を出力できますし、アクセスログをオンラインで表示できます。

```
APIを動的URL /xxx/{varible}として定義でき、JavaScriptでURLの変数を取得できます。
console.log（）を使用してデバッグ情報を出力でき、出力情報を[Console]タブで表示できます。
```

![img](https://kiwis2.github.io/images/2.gif)

##### 3.キャッシュ/ファイル/データベース操作をサポートします。

```
キャッシュ、ファイル、データベースオブジェクトを使用して、キャッシュ、ファイル、およびデータベースの操作を実行できます。
キャッシュされた内容は、[TERMINAL]タブで表示およびクリアできます。
```

![img](https://kiwis2.github.io/images/3.gif)
Talend Pythonスクリプトを実行する

## はじめに
talendでpythonや別のプログラムを実行する方法を記載。
CMDにPython環境の構築とライブラリのインストールが必要です。


## ディレクトリ
.
├── iris.csv
├── sample.py
├── TOS_DI-Win32-20200219_1130-V7.3.1

## 実行するPythonコード
Pandasライブラリを利用してiris.csvを読み込みdummy.csvを出力するのみ。
用途に合わせてPandasの実装が入る想定です。

```sample.py
import pandas as pd

# input
df = pd.read_csv("C:\\talend\\iris.csv")

# ここで用途に合わせてpandasでデータの整形を実装

# output
df.to_csv("C:\\talend\\dummy.csv",header=True,index=False, encoding='utf-8')

```

## 使用コンポーネント
tFileExist
事前に使用するファイルがあるかを確認しています。
今回はContextsに確認するファイルを定義しています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/135147/3b27d600-0974-5291-df80-9f1fd1f33f7b.png)



[tSystem](https://help.talend.com/r/ja-JP/7.3/system/tsystem-standard-properties)
単独コマンドを使用にチェック
コマンドに実行するコマンドを入力

```
"Python \"C:\\talend\\sample.py"
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/135147/708ced7c-53ed-a0b9-62c0-0b1915613155.png)

## ジョブ実行
Pythonでprint等を記述するとtalendのコンソールに表示されるはずです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/135147/ecfcd563-b9bd-6e0f-a475-ce9cf8ec7b70.png)
Mysql2::Error::ConnectionError: Access denied for user 'root'@'172.20.0.4' (using password: YES)

##はじめに
dockerでローカルの環境構築してdocker-compose up した後、ブラウザで確認したらタイトルのエラーが発生しました。

解決できたので解決の手順を記事に残しておきます。よろしくお願いします。

##解決までの手順
まず前提として、以前もローカルでdockerを使用して動かしていましたが、本番環境との兼ね合いでいろいろソースで設定をいじくった後のエラーでした。

①volumeの削除

```
docker-compose down --volumes
```

上記のコマンドでvolumeを削除します。

②db:create
volumeを削除してupすると次はdatabase見つかりません的なエラーが出たので下記コマンドでcreateしました。

```
docker-compose run web bundle exec rails db:create 

docker-compose run web bundle exec rails db:migrate
```

③docker-compose up

最後にupしたらうまいこといきました！


##仮説の原因

Mysqlにうまく繋げられていなかったのはエラー文から明らかですね。

このエラーについて調べていると、「volumeを削除することで解決する」といった記事がいくつか見かけたのでvolume削除しましたが、原因については詳しく書かれている方は見かけませんでした。。。

おそらくですが、以前にもdockerを使ってローカル環境で動かしていたこともあり、volumeに何かしらの情報が残っていてそれが邪魔していたのでは？と考えています。
例えばパスワード情報とか。。。（このときパスワード情報もソースで変更したりしていたので）

ですのでvolumeを一度削除しないとパスワードが書き換えられていないとか！？
そのための「①volumeの削除」だと考えています。


そして、②ですが、基本的にコンテナをdownさせるとその中の記録も削除されてしまいますが、DBの情報は削除されてしまうと困るのでvolumeとしてキャッシュさせています。

しかしながら先ほどvolumeを削除したのでDBもなくなったのでは！？と考えます。
ですので②でもう一度DBを作成してマイグレートしました。


##最後に
これらは私の見解ですので、もし、いやいや多分こうじゃね？とか似たような経験をされた方がいましたら教えていただけると幸いです。

参考: 
https://qiita.com/fumi_042/items/7d1c14e335ab1c226e0f
https://qiita.com/muzou/items/c2f862b6f0ebfd1b22ae
Laravelにvuetifyを導入する方法

# :warning:注意
vuetifyをalpha版で行うとうまくvuetifyコンポーネントを読み込めない問題が発生したため、vuetifyそのものを断念しました。
今回の記事ではvue3で行いましたが、vue2でインストールを行えば問題が解決するかと思います。

# 経緯

laravelにvuetifyを導入しようとしたとき、
vuetifyの公式からインストール行おうとすると途中でよくわからなくなってしまったのでまとめておきます。

# バージョンの確認

2021/08/24現在ですが、laravelのjetstreamから導入したvue.jsがversion3で
vuetifyの公式リリースがversion3に対応していません。
そのため、jetstreamのバージョンを落としてvue.jsのversion2を導入しなおすか、
vuetifyのalpha版をインストールするかの2つを迫られました。
すでにlaravelで環境などベースは作っていたので再インストールは嫌だと思い、
vuetifyのalpha版をインストールしました。
現在開発中のものも時間かかるので、そのうち正式リリースされるだろうと思い...

以下、alpha版のインストールで手順開設いたします。
laravelとの連携部分は同じかと思います。

バージョン

```json
"laravel-mix": "^6.0.3"
"vue": "^3.2.8"
"vuetify": "^3.0.0-alpha.11"
```

# vuetifyのインストール

vuetifyのalpha版はvue-cliからのインストールなので、まずはvue-cliのインストールを行います。
https://cli.vuejs.org/guide/installation.html

コマンド一発なので楽勝です。

```bash
npm install -g @vue/cli
# OR
yarn global add @vue/cli
```

こちらもコマンド一発です。
あとは、vuetifyをインストールするのですが、package.jsonのあるディレクトリで行うよう注意してください。Laravelの場合はプロジェクトルートですね。

```bash
vue add vuetify
```

# laravelとの連携

laravelの場合はlaravel-mixを用いてvueのコンパイルを行うので、vuetify公式に記述してあるwebpack.config.jsの変更だったり、src/plugins/vuetify.jsの作成だったりは適応できません。
laravel-mixの中にうまくvuetifyをコンパイルするように組み込まないといけません。

~~といっても手順は簡単でして、vuetify向けのlaravel-mix拡張ライブラリを入れるだけです。~~
https://laravel-mix.com/extensions/vuetifyjs

もうちょっと手順があって、若干複雑なステップになってしまいました...

まずはlaravel-mixの拡張機能のインストール

```bash
npm i vuetifyjs-mix-extension
```

そのあとlaravelのプロジェクトルートにあるwebpack.mix.jsに追記します。

```javascript
const mix = require('laravel-mix');

require('vuetifyjs-mix-extension') //これを追加
```

そのあとすぐ下のメソッドチェーンの中に**vuetify()**を挟みます。

```javascript
mix.js('resources/js/app.js', 'public/js').vuetify().vue()
    .postCss('resources/css/app.css', 'public/css', [
        require('postcss-import'),
        require('tailwindcss'),
    ])
    .webpackConfig(require('./webpack.config'));
```

また同ファイルの下にオプションの設定をしてください。
詳しくは以下を参照
https://github.com/laravel-mix/laravel-mix/issues/2737

```js
mix.options({
    legacyNodePolyfills: false
});
```

上はコンパイルの設定なので、laravelのjsローディングファイルにて、Vuetifyを組み込まないといけません。
laravelではresources/js以下のapp.jsになります。

```js
require('./bootstrap');

// Import modules...
import { createApp, h } from 'vue';
import { App as InertiaApp, plugin as InertiaPlugin } from '@inertiajs/inertia-vue3';
import { InertiaProgress } from '@inertiajs/progress';
import { createVuetify } from 'vuetify'; //ここを追加

const el = document.getElementById('app');
const vuetify = createVuetify(); //ここを追加

createApp({
    render: () =>
        h(InertiaApp, {
            initialPage: JSON.parse(el.dataset.page),
            resolveComponent: (name) => require(`./Pages/${name}`).default,
        }),
})
    .mixin({ methods: { route } })
    .use(InertiaPlugin)
    .use(vuetify) //ここを追加
    .mount(el);

InertiaProgress.init({ color: '#4B5563' });
```

3行追加箇所があります。

これでOKです！

```bash
npm run dev
```



上記コマンドで正しくコンパイルされることを確認してください。

お付き合いいただきありがとうございました！
Windows 10 以降の OS で同じ削除の拒否権限を付与しているのにアクセス時に動作が異なる

すべてはここに書いている通りなんだけど、備忘として残す

尚、タイトルで Windows 10 に言及したのは 10 でしか確認してないから

https://social.technet.microsoft.com/Forums/ja-JP/a7483ef5-5435-4d28-ad5a-b2a2db7faabf/icacls-124671251012531124891239112289822121066385008221?forum=Wcsupportja

GUI から削除の拒否権限を設定した場合と、icacls で削除の拒否権限を設定した場合に動作に差が生じる

今回は GUI と CUI で Everyone に対する削除の拒否権限を追加

```
c:\Users\local01\Desktop>icacls test_gui
test_gui Everyone:(OI)(CI)(DENY)(D)
         NT AUTHORITY\SYSTEM:(I)(OI)(CI)(F)
         BUILTIN\Administrators:(I)(OI)(CI)(F)
         DESKTOP-U5VG2PL\local01:(I)(OI)(CI)(F)

1 個のファイルが正常に処理されました。0 個のファイルを処理できませんでした

c:\Users\local01\Desktop>icacls test_cui /deny Everyone:(OI)(CI)(D)
処理ファイル: test_cui
1 個のファイルが正常に処理されました。0 個のファイルを処理できませんでした

c:\Users\local01\Desktop>icacls test_cui
test_cui Everyone:(OI)(CI)(DENY)(D)
         NT AUTHORITY\SYSTEM:(I)(OI)(CI)(F)
         BUILTIN\Administrators:(I)(OI)(CI)(F)
         DESKTOP-U5VG2PL\local01:(I)(OI)(CI)(F)

1 個のファイルが正常に処理されました。0 個のファイルを処理できませんでした
```

どっちも "Everyone:(OI)(CI)(DENY)(D)" になってる

でも CUI からアクセスした場合には拒否になる

ちょっと見にくいけど、右が GUI で設定したほうで正常にアクセスできて、左が CUI で設定したほうでアクセス拒否になる

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60220/b3281443-aa82-2735-5c80-51829456b3ea.png)


この原因は冒頭に記載した技術情報のこれ
--
– 注意点
icacls コマンドのヘルプでは、"D -削除のアクセス権" と記載されておりますが、下記コマンド例のように、"削除 (DELETE)" の権限を拒否設定する場合に、(D) を使用すると、/deny <ユーザー名> に指定したユーザーが、コマンド実行対象のファイルやフォルダーにアクセスできなくなります｡
これは、“(拒否対象の権限)” に (D) を指定することで、"削除 (DELETE)" の権限だけで無く、"同期 (SYNCHRONIZE)" の権限も拒否されることによる動作となります。
--

なので権限付与するときは (DE) で付与すること

```
c:\Users\local01\Desktop>icacls test_cui /deny Everyone:(OI)(CI)(DE)
処理ファイル: test_cui
1 個のファイルが正常に処理されました。0 個のファイルを処理できませんでした

c:\Users\local01\Desktop>icacls test_cui
test_cui Everyone:(OI)(CI)(DENY)(D)
         NT AUTHORITY\SYSTEM:(I)(OI)(CI)(F)
         BUILTIN\Administrators:(I)(OI)(CI)(F)
         DESKTOP-U5VG2PL\local01:(I)(OI)(CI)(F)

1 個のファイルが正常に処理されました。0 個のファイルを処理できませんでした
```

アクセスもちゃんとできる

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60220/4124aec9-27a5-823b-970b-12f8ff61a282.png)
Laravel8 ソートとページネーションを組み合わせる

## 前提
下記記事に沿って、投稿記事の並べ替え機能を設定済みであること。

https://qiita.com/apprentice123/items/ac0645f79d877a0bd33d

## 困ったこと
追加でページネーションを設定したところ、並べ替えが維持されるのは1ページ目のみで、2ページ目以降では順番が維持されない。

## やりたいこと
ページネーションを設定し、1ページ目で並べ替えた通りに2ページ目以降も表示させる。

## コントローラーの変更

すでに`kyslik/column-sortable`をインストールして`sortable`メソッドを使用している。その上でページネーションと組み合わせる場合は、`クラス名::sortable()->paginate(数字)`とする。

もともと

```app/Http/Controllers/RecordController.php
    public function index(){
        $records = Record::sortable()->get(); //変更前
       　return view('record.list',['records' => $records]);
    }
```

変更後（1ページにつき記事を5つ表示する）

```app/Http/Controllers/RecordController.php
    public function index(){
        $records = Record::sortable()->paginate(5); //変更後
       
        return view('record.list',['records' => $records]);
    }
```

## ビューの変更
```resources/views/record/list.blade.php
@foreach($records as $record)
    <tr class='text-lg container mx-auto leading-10'>
.
.
.
    
    </tr>
@endforeach
      </table>
      <div class="inline-flex items-center">
      {{ $records->appends(request()->query())->links() }}
      </div>
```

単にページネーションを設定するときは`{{ $変数名->links() }}`とするところを、`{{ $変数名->appends(request()->query())->links() }}`とすることで、並べ替え内容を2ページ目まで維持することができる。

## 大いに参考にした記事
https://qiita.com/C_HERO/items/bad46a41d8a883704a14
batoid A c++ backed python optical raytracer のコンパイルメモ

A c++ backed python optical raytracer.
https://github.com/jmeyers314/batoid

gcc 9(Ubuntu 20.04 default), gcc 10 だと internal compile error でコンパイルできません :cry:

OpenMP を利用しているため, clang(Linux) だと, python 本体あたりとの兼ね合いで libomp まわりの違いで実行時エラーが出てしまいます.

gcc 8 ですと OK でした.

```
$ CXX=g++-8 CC=gcc-8 python -m pip install batoid
```

として CXX 指定して pip install しましょう.
【python】pandasの活用～3回目：Excelのデータ取り込み～

### はじめに

- バージョン
  - Python: 3.6.8
  - pandas: 1.1.5
  - xlrd: 1.2.0
- 概要 
  - pandasのread_excelを使うと、簡単にエクセルからのデータ取り込みが出来るので試してみます。

今回はエクセルファイル（sample.xlsx）の以下、2つのシートからデータを抽出します。
このデータをもとに、名前と年齢を表示させるコードを作ってみます。（ex: Taro is 20 years old）

- Sheet1
![sheet1.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/554812/06ca1b18-8d84-c95f-b139-d99d72850ad0.png)

- Sheet2
![sheet2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/554812/e2a28018-d584-92d2-ce98-c4ce41d6fa78.png)



### 1. サンプルコード

　実際に作成したコードは以下です。案外シンプルなコードで書けます。

```python:
import pandas as pd


def main():

    # データを取得するシート名一覧
    sheet_list = ["Sheet1", "Sheet2"]

    # エクセルからデータを抽出する
    df = pd.read_excel("sample.xlsx", sheet_name=sheet_list)    # point-1

    for sheet_name in sheet_list:

        print(sheet_name)
        # シート名に該当するDataFrameを抽出
        user_list = df[sheet_name].to_dict(orient="records")    # point-2

        for user in user_list:
            print("  {} is {} years old".format(user["name"], user["age"]))


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

- ポイント
  - 1. エクセルからデータを抽出する
     - 以下のように、``sheet_name=``の部分で読み込むシート名一覧を指定することが可能です。
      
       ```python
       pd.read_excel(読み込むExcelファイル, sheet_name=シート名一覧)
       ```

  - 2. DataFrameをdictに変換する
     - 個人的にDataFrameよりdictの方がデータとして扱いやすいので、dictに変換します。
     - df[sheet_name]でシート名に該当するDataFrameを抽出し、to_dictで変換します。  
     その際、``orient="records"``を入れることで、DataFrameの列名（name/age）がkeyになります。
      
       ```python
       df[sheet_name].to_dict(orient="records")
       ```

### 2. 実行結果

　想定通りの結果を得ることが出来ました。

```text
Sheet1
  Taro is 20 years old
  Kei is 19 years old
Sheet2
  Keiko is 22 years old
  Hanako is 25 years old
```

### まとめ

　エクセルを含め、表の扱いはpandasに任せるとコードがシンプルになるということがわかると思います。

### 参考記事

[pandas.read_excel — pandas 1.3.2 documentation](https://pandas.pydata.org/docs/reference/api/pandas.read_excel.html)
[pandas.DataFrame.to_dict — pandas 1.3.2 documentation](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.to_dict.html)
Excel VBA 選択した写真を指定セルに合わせてペースト


```
Sub ChangeImageSizeBySelectCell()
Dim targetCellName As String
Dim targetRange As Range
Dim targetTop As Variant
Dim targetLeft As Variant
Dim targetHeight As Double
Dim targetWidth As Double
Dim objType As Object
Dim objName As String

On Error Resume Next
objName = Application.Selection.Name
If Not objName Like "Pic*" Then
MsgBox ("写真を選択して下さい。")
End
End If


targetCellName = InputBox("", "セルを選択")
    If checkCellValue(targetCellName) = False Then
        MsgBox "無効なセル範囲"
        End
    End If

Set targetRange = Range(targetCellName)
targetTop = targetRange.Top
targetLeft = targetRange.Left
targetWidth = targetRange.Width
targetHeight = targetRange.Height

  With Selection.ShapeRange
    .LockAspectRatio = msoFalse
    .Top = targetTop
    .Left = targetLeft
    .Width = targetWidth
    .Height = targetHeight
  End With
End Sub
```
```
Function checkCellValue(str As String) As Boolean
'要参照設定 Microsoft VBScript Regular Expressions 5.5
Dim reg As New regExp
  With reg
    .IgnoreCase = False
    .Pattern = "[A-Z]+[1-9]+\d*"
  End With
checkCellValue = reg.Test(str)
End Function
```
##解説
|ポイント|解説|
|----|----|
|RegExpオブジェクト|VBAで正規表現を使用できる|
|RegExpオブジェクト|Microsoft VBScript Regular Expressions 5.5を参照設定すること|
|.IgnoreCase = False|大文字小文字を区別する|
|[A-Z]+|A-Zを１回以上繰り返し|
|[1-9]+|1-9を１回以上繰り返し|
|\d*|d(=digit=0-9)を0回以上繰り返し|

参考
https://excel-ubara.com/excelvba4/EXCEL232.html
https://www.officepro.jp/excelvba/sub/index6.html
多能工について考えてみる

# はじめに
あくまで個人の見解です。所属している組織、従事している業務とは無関係です。

IT人材の多能工化と言われて久しいですが、組織に所属するとどうしても視野が狭くなるので
この件に関して少し調べて現在の動向、この先を考えたいと思います。

# いつぐらいから多能工が必要と言われているのか？
おそらくなんですが、IT業界だけでなく製造業や建設業も含めて多能工化が提唱されています。
多能工の対義語として「単能工」がありますが、みなさん初めから「多能工」はムリですよね？
軽く調べましたが、明確にいつからというのはないですが、2000年以降から言われているんではないでしょうか。
「少子高齢化」が背景にあるようです。

IT業界は歴史の浅い業界ですが、例外ではないですが、「少子高齢化」に加えて、
DXが提唱され、アジャイル型開発へのシフトも大きな背景にあると思います。

# どの程度の技術スタックを指しているのか？
検索すると色々出てくる。カテゴリも様々な感じ。
ツール名や環境名を列挙している企業もありこの辺はカオス状態・・・
自分で保有スキルを整理して図にできればいいのかな？

# どうすれば多能工になれる（と呼ばれるのか）？
これは経験でしかないと思う。
当初は誰でも「単能工」だと思うし、手品師と同じでレパートリーを増やして引き出しがある程度多くなると
応用が効いてきて未経験分野でもある程度知識習得に時間がかからなくなる。
私も最初「オブジェクト指向」が理解できなくて「オブ脳」なる書籍等を読んである時ブレイクスルーが来た経験があります。

### 資格からのアプローチ
これがわかりやすいのではないでしょうか？
国家資格やベンダ資格がありますが、多能工の証として実務＋資格が定石ではないでしょうか？
国家資格はベース技術でベンダニュートラルなので屋台骨
ベンダ資格は自身の業務経験を証明する部分として補ってくれる部分（対外的なアピール）。
そして頂点として「技術士」があり、自身の経験等を通じてコンサルティングできるスキルではないでしょうか？
あとはプライベートでやるQuita執筆やGithubですかね？
これくらいのものをこうやってどれくらいで作れたかなんてのも多能工で生産性がある程度ないと、
多能工のメリット薄いですよね。

# 多能工化のメリット／デメリット
これ重要ですよね。色々あると思いますが、自分が感じたことを中心に書きます。

メリット：仕事が途切れない
　常に何かやらないとという衝動にかられます。改善点は沢山ありますしね

デメリット：知識がごっちゃになる場合がある（キーワードが混ざる、自分で造語を作ってしまう）
　本来は行程毎に集中して考えればいいことが常に開発～運用に関わるため知識、キーワードが混ざってしまいます。
　この辺は自分の知識をちゃんと棚卸しして文書にまとめる（技術士試験対策にもなる）ことが重要ですね。

# まとめ
　全然まとまりませんが、機会あれば多能工についてもう少し具体的に自分に置き換えて整理してみたい！
WordPress + Lightsailの改修時、FileZillaからssh接続するとタイムアウトした原因

HPの改修を引き受けた時の話です。

## 原因
<b>ファイアウォールでIPアドレス制限されていた</b>

## 解決方法
<b>IPアドレスを追加する</b>

画像の赤枠のところにIPアドレスを登録すれば、ssh接続出来ました。
自分の環境のIPの調べ方はターミナルで「ipconfig」です。

![スクリーンショット 2021-08-24 20.24.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/485388/66337eea-16df-104f-988b-6757630f1259.png)

多分ですが、画像の赤枠にIPアドレスが1つでも登録されているとIP制限がかかるのではないかと思ってます。
ファイアウォールに何個かIPアドレスが登録されていたので、自分のwi-fiのIPアドレスを登録すればssh接続出来ました。

## 学んだ事等
・LightsailにはIPアドレス制限機能がある
・pemやppk等の鍵の形式の種類を知る
・形式によっては対応OSがあるようですが、pemはwindows, Macの両対応っぽい
・鍵の形式の変換ソフトがあるのも知る
・FileZilla以外のFTPソフトの触り方
原因が鍵にあるのではないかと考え鍵関係をあれこれ試してみたので、その学びがありました。
【QGIS】絶対パス⇔相対パスの切り替え

#生じた問題

QGISのプロジェクトの位置を変えてしまうと、ファイルの参照が切れてしまう問題です。
変更するボタンの位置を毎回忘れてしまうので、備忘録です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/571675/a1bb6669-1238-5613-2bf9-7494f0493183.png)


#絶対パスと相対パスとは

https://techacademy.jp/magazine/5801

知らない人はこの記事を読んでおけば良いと思います。

#QGISにおける絶対パスと相対パスの切り替え

①上部にある「プロジェクト(J)」をクリック

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/571675/e9453bcf-e521-94bf-ab8c-653007b2677f.png)

②「Properties」をクリック

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/571675/fba8c1e2-8a5e-f0ae-afd8-554bba9a4bd1.png)

③一般情報、一般設定、保存パスの切り替えで指定！！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/571675/898f3a34-ba16-cf49-7b37-de54eeb91d21.png)
Gridsomeを使って爆速でwebサイトを作成してみた。

## Gridsomeを使って爆速でwebサイトを作成してみた。
「Vue.js 急成長スタートアップを支えるフロントエンド戦略」というFinatextホールディングスさんが開催するwebinerに参加しました。

その際、登壇された方が[Gridsome](https://gridsome.org/)を使って、League of Legendのアイテムを表示するサイトを簡単に作っていたんです。

めちゃすご！と思ったので、僕も簡易的なサイトを作ってみました。

## 開発環境
> macOS:  Big Sur 11.5.2
MacBook Pro:  (Retina, 13-inch, Early 2015)


## 簡易サイト作成の手順
1  Gridsome CLI toolをインストールします。

```
$ yarn global add @gridsome/cli
もしくは
$ npm install --global @gridsome/cli
```

次に、下記コマンドを打ちます。

```
新しいプロジェクトを作成。
 $ gridsome create first-gridsome-site
```
 
```
作成したプロジェクトディレクトリに移動。
 $ cd first-gridsome-site
```


```
http://localhost:8080でサーバーを立ち上げるために実行。
 $ gridsome develop
```
そして、ブラウザでlocalhost:8080を入力。
すると、下記画像のようにサイトが立ち上がります。
これでサイトが立ち上がるなんて、驚きですよね、、

![スクリーンショット 2021-08-24 20.51.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1466226/cb492cff-0561-c6fd-6a0e-85f5da6d27b2.png)


## 簡易ブログも立ち上げることもできる。
[記事](https://gridsome.org/starters/gridsome-word-press-and-bootstrap-starter/)を参考にして、ブログサイトを簡単に立ち上げてみたいと思います！

```
まずはプロジェクトを作成します。
 $ gridsome create my-blog https://github.com/gridsome/gridsome-starter-blog.git
```
```
ディレクトリを移動します。
$ cd my-blog to move into the project directory
```

```
http://localhost:8080でサーバーを立ち上げるために実行。
$ gridsome develop 
```
下記のような画面がターミナル上で出てくるかと思います。
![スクリーンショット 2021-08-24 20.47.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1466226/a68df73b-eea9-9474-2d73-d95772ae8827.png)

ブラウザでlocalhost:8080を入力すると、サーバーが立ち上がって下記の写真のような画面が出ると思います！（少し改良しました。笑）
![スクリーンショット 2021-08-24 20.39.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1466226/5801e2de-10f6-29ed-1c30-f4ec9e643ea3.png)


## 参考記事
https://blog.logrocket.com/getting-started-with-gridsome/