OmniAICreator/Qiita-1.07M huggingface dataset:
As a web engineer intern at ielove GROUP

# Summary
web開発インターン＠いえらぶGroup
インターンを通して、実際のプロダクトの環境での開発から学びの記録です:)
**フロントエンドとバックエンド合計12個のプロジェクト**に取り組みました。

開発ページ：https://cloud.ielove.jp/
期間：2021.02-2021.09(7か月)
開発環境：JavaScript, PHP, Zend Framework, MySQL, HTML, CSS, Gitlab, phpstorm
![img_reason2_input.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1714363/093411d2-cacd-5d62-e152-a87cfa021ae9.gif)

# 大規模なシステムでの開発
情報科学科でも授業で扱うものは基本的な理論であったり、演習問題も数個のファイルで完結するものが多いです。そこで規模というものが、実際のプロダクトとの違いの一つであり、着目してみました。
### 該当部分探しの旅
開発要件が決まり、開発に取り掛かる際に最初に行うことは、改修箇所を数千(数万？)個のファイルと数百から数千行のコードから探し出すことでした。ファイルを探す際は、web開発のMVCモデルの理解度によって、発見するまでの時間や、新しいファイルの作成場所を決定するまでの時間の違いを痛感しました。ファイルが見つかった後、扱いたいコードの箇所を見つける必要があり、オブジェクト指向の理解度の重要性を感じました。

### 影響範囲
特に、複数の箇所に影響するCSSのファイルやcommonファイルの内容を変更するときに注意が必要です。

# MVCモデル
Model：データベース
Controller：データベースにリクエストしてviewに返す
view：見た目に関わる部分
の3つの役割に分けて実装する方式を用いていました。


# Git
tipsを[こちら]("")にまとめました！

# 開発例
### モバイル版のデータ表示
要件定義を詰めるところから参加しました。現状表示されているデータが足りなく、改良が必要だったのですが、表示するだけでなくせっかくならUIもモバイルで見やすいように改善しました。
- データを持ってくる
- viewの記述

### パンくずの改修
パンくずが違うページに遷移していたので直しました。改修しながらこんがらがりましたが、技術的には、埋め込まれているurlを修正してUI少し直すくらいなので難しくないです。ユーザー体験が上がったはず！
- ページ構造の把握
- 遷移先の一致
- UI ：アイコンの改修

### 文字化けの改修
＆が文字コードのまま表示されていたのを直しました。一見関係なさそうなところのコードが影響するのを目の当たりにしたプロジェクトでした。
- 文字コードを指定している部分を探し修正

### 検索を複数選択化
住所1つずつしか検索できなかったものを複数選択して検索できるようにしました。大量の住所データがどう格納されているのか明確にすることから、リクエストするControllerの作成と新しいUIまで一気に学べた(難しかった)プロジェクトでした。かなり便利になるアップデートに関われて良い経験になりました！
- SQLによるデータ取得
- データ保持：中身を都度確認することが大事
- viewの記述

### エラーメッセージの改修
ページ上部に一気にエラーメッセージが表示されていたものを、該当箇所に表示するようにしました。
- JSの発火タイミングを把握
- パターンに合わせてエラーメッセージを該当箇所に表示するように修正

# まとめ
- 要件定義
    - そのまま開発するのではなく、目的とユーザー目線で考える(わかりやすいか使っていて迷わないか、など)
    - 先に開発の概要を書く(基本的なことですが、コードを書きながら実験するのも面白いですが、その前に全体像を把握するの大事でした)
- 開発
    - Docを見つける、読む力(わからなくなったら公式ドキュメントに戻る＋わかりやすい記事はたくさんあるので活用)
    - デバッグの効率
    - 同じサービス内で似たページがすでにある場合は参考にできる
- その他
    - 情報科学を勉強し始めて10か月ほどの時期での初！！！実務経験でした。初めて学ぶことだらけで、**技術関連の勉強し続けたい**というモチベーションと、**開発して終わりではなく、ユーザーにとってのプロダクトの価値やプロダクト自体の成長の重視したい**という思いが強まった経験でもありました！いえらぶでお世話になったみなさんありがとうございました！

# Thank you for reading:)
社員の方が書いてくださった記事も見てみてください～：https://note.com/kuroneko22/n/nccbb30ee724f
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1714363/33bdda7c-7d2d-0b99-0b5d-d0956febc9d0.png)
LAMP環境ってなに？

## 勉強前イメージ

windowsに入れるソフト的な感じ？

## 調査

### LAMP環境 とは

LAMPはランプと読み、linux・apache・mysql・php(perl,python)の頭文字を取って組み合わせた開発環境のことを指します。
webアプリケーションを開発する環境として使用されているものになります。

### LAMP環境の構築方法

LAMP環境と言われるとパッケージ化されているのでは？と思いましたが
パッケージ化されておらず、独自にlinuxの環境にapache,mysql,php(perl,python)を入れることで完成します。
linuxの環境を手に入れづらいという人はEC2で簡単に作成できます。

### LAMP環境と似たようなもの

- XAMPP環境

ザンプと読み、webアプリケーションの開発に必要なオープンソース系のソフトをパッケージにしたものです。
apache,mysql,php,perlはそのままに、windows,linux,solarisをXと表したものになります。
こちらはLAMP環境とは違い、パッケージ化されているためてすぐに準備ができます。

- WISP環境

ウィサプ環境といい、マイクロソフトが提唱したLAMP環境に対抗するwebアプリケーションの開発のための環境になります。
Windows,IIS,SQLServer,phpの頭文字を取って作られました。

## 勉強後イメージ

聞いたことあるレベルだったから全然違うかった
LAMP環境は自分で作らないといけないのね。

## 参考

- [LAMP環境を理解する！各頭文字の意味や特徴、LAMPの類似環境などを簡単に解説！](https://anken-hyouban.com/blog/2020/03/01/lamp/#the_post_21)
【VBAによる業務効率化】　～基本データからExcelシートを自動生成～

# はじめに
このシリーズからExcelでの単純作業を少しでも楽にするためのアイデアを発信していきます。Excel自動化にはpythonライブラリのopenpyxl等を使用することも可能ですが、基本的にはVBAによる自動化について書いていきます。
また、より業務効率化のイメージを持ってもらうためにシチュエーションを想定して説明したいと思います。

# 置かれている状況と今回やること
あなたはとあるクラスの先生です。
全員の成績を集約したExcelシート（基本データ）をもとに、生徒の氏名が入ったシートを作成し各シートに成績を転記したいと考えています。
しかし、生徒が50人いるので（画像では25人までしか見えていないですが）手作業で入力するのは時間がかかりそうです。
![基本データ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2242763/159892e6-aa53-fc3d-a337-b1f8a8a5bf5c.png)
そこで、まずは生徒の氏名が入ったシートを自動で作成していきます。



# コードの記述
以下のようにコードを記述します。
```vb:氏名シートの作成
Sub create_newsheet()
    
    '変数の定義
    Dim i As Long
    Dim lastRow As Long
    
    '氏名列の最終行を取得して変数に代入
    lastRow = Sheets("基本データ").Range("B2").End(xlDown).Row
    
    '基本データから氏名を取得してi番目のシート名にする
    For i = 1 To lastRow - 1
        Sheets.Add(after:=Sheets(i)).Name = Sheets("基本データ").Cells(i + 1, "B").Value
    Next i
    
   '基本データに戻る
    Sheets("基本データ").Activate

End Sub
```
# 実行結果
今回は「シート作成」というボタンを作成し実行してみます。（F5キー等で実行しても大丈夫です）
![実行前.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2242763/6f056ead-4121-63f9-972c-b372a2216075.png)![後.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2242763/551f0a5e-2bf6-8c9f-8637-07b6a391af09.png)
全員分の氏名が入ったシートを作成することができました！
今の段階では各シートには何も書かれていないので、次の記事で成績の転記方法について説明したいと思います。

# 次の記事はこちら
https://qiita.com/toneriver_py/items/ebac4091da95ba95c48f

# 参考文献
本記事を書くにあたっては以下の情報を参考にしました。

* [2022年ExcelVBA・マクロ・初心者入門講座【完全版】](https://www.youtube.com/watch?v=WCrOcq08bwY&t=4774s)
* [Excelの神髄　第65回シートの挿入、名前の変更](https://excel-ubara.com/excelvba1/EXCELVBA365.html)
【mac】　docker + rails + mysql で環境構築

# 【mac】　docker + rails + mysql で環境構築
【rails環境構築】docker + rails + mysql で環境構築（初心者でも30分で完了！）https://www.youtube.com/watch?v=Fq1PH0Gwi8I
の動画を見て環境構築の必要コードとエラー対処をまとめてみました。

## 作業フォルダを作成移動
mkdir sample_app
cd sample_app
## ファイルを作成　中身はテキストエディタを開いてコピペ
https://hackmd.io/RkiiOvQZRii8qdlzoQwaRg?view

touch Dockerfile
touch Gemfile　
touch Gemfile.lock　
touch docker-compose.yml　
## imageの構築とコンテナの構築・起動

docker-compose run web rails new . --force --database=mysql --skip-bundle
docker-compose build

## config/database.ymlのpasswordをpasswordにとhostをdbに変更
![BC59CC20-55C5-4F23-B71A-43A0244321CB_1_201_a.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2603514/18615c44-2252-0b9e-bc3b-1f19755967ad.jpeg)


## 上の変更を反映させる
docker-compose build
docker-compose up

## 画面を開く
http://localhost:3000/

## Could not find gem ‘mysql2 (>= 0.4.4, < 0.6.0)’ in any of the gem sources listed in your Gemfile.への対処
docker-compose run web bundle install  
docker-compose up

## Unknown MySQL server host 'db' (-2)への対処
名前を適当に変更MYSQL_USER: app_ppに変更
![067DB6F7-5053-42E0-8867-12520632C136_1_201_a.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2603514/627e7890-2ff7-275a-30bd-5f4d785199b1.jpeg)

## dbの作成
docker-compose run web rails db:create
docker-compose run web rails db:migrate

## 完成
Yay! You’re on Rails!が画面に表示されれば完成です。

## 今回ターミナルに打ったコードまとめ
mkdir sample_app
cd sample_app
touch Dockerfile
touch Gemfile　
touch Gemfile.lock
touch docker-compose.yml
docker-compose run web rails new . --force --database=mysql --skip-bundle
docker-compose build
docker-compose up
docker-compose run web bundle install  
docker-compose up
docker-compose run web rails db:create
docker-compose run web rails db:migrate



## 参考
【rails環境構築】docker + rails + mysql で環境構築（初心者でも30分で完了！）
https://www.youtube.com/watch?v=Fq1PH0Gwi8I

https://hackmd.io/RkiiOvQZRii8qdlzoQwaRg?view

https://qiita.com/syo19961113/items/aaceb2598e7a31a28934

https://qiita.com/satto0303/items/c135c2279a1646921fc2
Vue.js 3 非同期処理待ちで使えるsuspense要素

Vue.js 3 非同期処理待ちで使えるsuspense要素

## suspense要素とは

vue.jsを使っていて外部サービスからデータを取ってくる時の非同期処理で待ち時間が発生し、表示が遅くなってしまうことがあります。そのようなときにデータが揃うまで待ち受け画像を表示してくれる機能がsuspense要素です。

## suspence要素を使ってみる

非同期処理の待ち時間を擬似的に再現するコードを書き、待ち時間が発生しているときは用意した待受要素が表示されるようにする。

表示側

```html
<div id="app">
  <suspense>
    <template #default>  <!-- データ取得後に表示されるtemplate -->
      <my-component />
    </template>
    <template #fallback> <!--  待受用template -->
      データ取得中...
    </template>
  </suspense>
</div>
```

表示側は2つのスロットを用意する。

default = 本来表示されるべきtemplate

fallback = 非同期処理待ちの時に表示されるtemplate

vue側

```jsx
Vue.createApp({})
  .component('my-component', {
    template: '<div>非同期処理が終わりました！</div>',
    setup() {
      return new Promise(resolve => {
        setTimeout(()=> {
          resolve();
        }, 5000); {//　ただ5秒待つだけの処理　}
      })
    },
  }).mount('#app')
```

 

Vue側の処理では通常通りtemplateを用意します。そして非同期処理をするsetupメソッドを準備しその中でPromiseオブジェクトを返します（実験のため5秒間　待つだけの処理をしています）。これだけで、vueアプリがマウントされた時、#fallbackスロットが表示され、5秒間の処理待ち後、#defaultスロットの配下にあるmy-conponentが表示されます。

suspense機能自体はまだ「実験的」な要素のためこれから変更がかかる可能性があるため本番環境での使用は推奨されていないようですが、便利な機能なため覚えておきたい要素です。
出社時に特定のファイルを開く方法

出社時にエクセルファイルを毎回開いて体温入力するのがめんどくさい。
入力を忘れてしまうことも多いので、出社してパソコンを開いたときに毎回
エクセルファイルを自動で開けるようにした。

この記事を参考にしました。

https://qwerty.work/blog/2017/10/if-date-time-command-batchfile.php

作成したプログラムは以下のとおりである。

``` start.bat
set worktime=7:30:00.00
if %worktime% geq %time% start excel.exe
```

現在の時間と出社時間を比較して現在の時間＜出社時間だったら
エクセルファイルを開くという簡単なプログラムである。

このファイルをスタートアップフォルダに入れておくと、出社時（7:30）より前にパソコンを起動したとき、実行される。

:::note info
インフォメーション
set worktime=7:30:00.00の最後は"コンマ"（小数）
:::

スタートアップフォルダはWindows+Rで"ファイル名を指定して実行"を開き、
shell:startup
のコマンドを打つと開く。

このフォルダに作成したバッチファイルを入れると、パソコンを起動したときに
このバッチファイルが実行される。
iOSのAR周辺技術でできることをアプリにまとめていく（1）


## はじめに

iOSのARKitなどを使ってできる機能一覧をオープンソースとして公開しました。
今後も機能を追加し、誰でも気軽にARを試せるサンプル集としての価値を高めていきます。

![tavia_experiments_0.1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2634872/62b9c74c-b7ee-695d-dea0-db8305255c12.png)


## 背景

ARを使ったアプリの開発を始めました。
アプリ(システム)の開発において、通常はユーザーの課題とそれに対する解決策の定義をした後、デザイン、実装となります。
そこにARが含まれる場合、実際に実装してみると、やっぱり違うなーとなって結局不採用となることが何度かありました。通常のUIUX開発であれば、Figmaなどのデザインツールなどで、その「やっぱり違う」を早く安く突き止めたり、そもそもベストプラクティスやガイドラインが揃っていたりするのですがARはまだまだそうではない状況です。
その結果、実装したものの本番環境には不採用となると、担当者のモチベーションが下がったり、知見が溜まらないなどの影響がありました。
なので、「ARでできること」を一覧でざっくり理解し、それを試したり、少し変更を加えたりして、検証してみることができるといいなということで、機能一覧のようなものを作ることにしました。

## コード

GitHubに公開しています。

https://github.com/tavia-oss/TaviaExperiments

## 実行環境

- Xcode: Version 13.3
- iOS: 15.4.1 (ビルドにはiOS15.0以上が必要です)
- 機種: iPhone XS Max, 12 Pro


## 機能一覧

まずは基本的な機能を7つ。

### 1. 画像を画面の真ん中に配置する
![1.GIF](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2634872/6b67650f-1d12-e4d1-713f-28875340f73f.gif)

### 2. 動画を画面の真ん中に配置する
![2.GIF](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2634872/aff886c0-15c4-ece9-2cf1-b88beb0fc11a.gif)

### 3. 3Dオブジェクトを画面の真ん中に配置する
![3.GIF](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2634872/dd331dbf-27ea-bb75-2b92-ba95e44666d8.gif)

### 4. GIFを画面の真ん中に配置する
![4.GIF](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2634872/a1e4bd9b-8488-f2fb-a306-df1ccbf8c8dc.gif)

### 5. 画像をタップした場所に配置する
![5.GIF](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2634872/4b661ef2-1ed5-734f-942e-c7bc4a2819a1.gif)

### 6. テキストを検出し、配置する
![6.GIF](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2634872/64a3243f-1f5e-4f97-31c6-35720e688aad.gif)

### 7. 色を検出し、配置する
![7.GIF](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2634872/0b02228d-0b5f-7219-4796-e2df815fbe79.gif)


## まとめ

まずはARKitを使った基本的な検出、配置を公開しました。
コードはこちら↓

https://github.com/tavia-oss/TaviaExperiments
[GitHub Actions] secrets.GITHUB_TOKENでプルリクが作れなくなったときの対応

## 結論
Personal Access Token代わりに突っ込めば良い

## 経緯
https://github.com/x-motemen/git-pr-release

をGitHub Actionsで以下のようにしていたが、突然使えなくなった。

```.yml
    - name: Create a release pull request
      env:
        GIT_PR_RELEASE_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        GIT_PR_RELEASE_BRANCH_PRODUCTION: main
        GIT_PR_RELEASE_BRANCH_STAGING: develop
        GIT_PR_RELEASE_LABELS: release
        GIT_PR_RELEASE_TEMPLATE: .github/git_pr_release_template
      run: |
        gem install -N git-pr-release -v "2.1.1"
        git-pr-release --no-fetch
```

```
/opt/hostedtoolcache/Ruby/3.1.1/x64/lib/ruby/gems/3.1.0/gems/octokit-4.22.0/lib/octokit/response/raise_error.rb:14:in `on_complete': 
POST https://api.github.com/repos/(リポジトリ名)/pulls: 
403 - GitHub Actions is not permitted to create or approve pull requests. 
// See: https://docs.github.com/rest/reference/pulls#create-a-pull-request (Octokit::Forbidden)
```

GITHUB_TOKENの権限はSettingsでreadもwriteもOKにしてあった。
permissionsでwrite-allしてもダメだった。

## 対応

しかたがないので、Personal Access Token を発行。

https://docs.github.com/ja/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token

secretsにつっこんだら動いた。

```.yml
GIT_PR_RELEASE_TOKEN: ${{ secrets.GIT_PR_RELEASE_TOKEN }}
```
ネットワーク方式

## LAN
<b>建物内など比較的狭い範囲で設置されたネットワークのこと
### 有線LAN
<b>最も普及している有線LANはイーサネットとよばれ、IEEE802.3として規格化されている。
イーサネットで採用されているアクセス制御方式の一つに<font color =blue>CSMA/CD</font>がある。
伝送路上で、データの衝突（<font color =blue>コリジョン</font>）を検知したらランダムな時間を待って再送する方式。
### 無線LAN
<b>IEEE802.11として規格化されている。
MACアドレスフィルタリングやWPA2やWPA3などで暗号化、アクセスポイントのステルス化などのセキュリティ対策が必要になる。<br>
<font color =blue>Wi-Fi</font>は、相互接続性が保証されることを示すブランド名のこと。
これは、アクセスポイントという無線LANルータと端末間の通信。
2台の端末間で直接通信させるモードもあり、<font color =blue>Wi-Fiダイレクト</font>と言われている。<br>
<font color =blue>ESSID</font>とは、無線のネットワークを識別する文字列。<br>
無線LANで採用されているアクセス制御方式に<font color =blue>CSMA/CA</font>がある。
これは、通信開始時に他のデータを検出した場合、その通信が終了後、ランダムな時間を待ってから通信を開始する。
## WAN
<b>遠隔地にあるLAN同士などを接続する広域ネットワークのこと。
専用線・回線交換・パケット交換サービスがある。

### VPN
<b>多くの利用者で共有される公衆回線を、専用線のように使える仮想的なネットワーク。
## モバイル通信サービス
<b>通信事業者の電波を使って、スマホやタブレット端末などでインターネットに接続するサービスのこと。
<font color =blue>SIMカード</font>を端末に挿入し、通信する。
最近は、3Gからより高速な<font color =blue>LTE(4G)</font>に方式が変わり、5Gも登場している。
スマホなどをアクセスポイントにして、インターネットを利用する、<font color =blue>デザリング</font>機能が使えるものもある。
自前の回線網を持つ、回線事業者の移動体通信網を借用して、自社ブランドで通信サービスを提供する<font color =blue>MVNO</font>もある。
### キャリアアグリゲーション
<b>複数の異なる周波数帯を束ねて、より広い帯域を使うことで無線通信の高速化や安定化を図る手法。
### 5G
<b>第5世代移動通信システム。「超高速」「超低遅延」「多数同時接続」の特徴をもつ。

<b><font color =blue>輻輳</font>とは、通信が急増することで、ネットワークの許容量を超えて、繋がりにくくなること。

## IoTネットワーク
低速で最大数10キロの広域をカバーする<font color =blue>LPWA</font>というネットワークの整備が進められている
今週の学び　第5回

# 今週の学び

JavaScriptなど

- 分割代入
    - 配列を書く時[]大カッコのみ使う、spritなど

- reverse()
    - 配列の要素を逆順にする

- join()
    - 配列の要素をすべて連結して文字列にする

- 単純にスペースを開けたい時
    - spritではなく「+ ' ' +」と書いて、2つの要素を並べる時に使ったりする

- 代入は右から左へ対して書く
    - プログラミングの大原則

- メソッドは結合できる

- 小数を切り捨て、切り上げする方法
    - 切り捨てはvar a = Math.floor( 1.5 ) ;
      切り上げはvar b = Math.ceil( 1.5 ) ;

- 再定義はできない

- .trim();
    - 文字列の両端の空白を削除

- mapメソッドのNumberはNumber型にするという意味
    - mapメソッドの(Number)はNumber型にするという意味

- length
    - lengthは配列の数がその時によって変わるからつける

- sort
    - const無しでfunctionを使えるのはコールバック関数を定義してかどうか

- trim
    - 基本は全てに付ける

- console.log
    - for文の外で使うのは、中だとループの数だけ表示されるから

- console.log
    - console.logのカッコ内はメソッドも入る

- 変数
    - 変数は定義1回のみ

- join
    - joinは配列に使える

- split
    - splitは文字列にしか使えない

- アロー関数
    - アロー関数とはfunctionの定義をより短く記述できる記法

- 文字列を大文字・小文字に変換
    - toLowerCase, toUpperCaseを使う

- 分割代入の右辺
    - 型が同じメソッドなら入れれる、splitとsortなど

- split(\n)
    - 代入されるデータセットが縦並びなら「split(\n)」を使う

- array.string
    - それぞれ配列と文字という意味

- == 等価演算子
    - ==は、文字列と数値の比較の場合、文字列を数値に変換してくれる

- === 厳密等価演算子
    - 文字列は数値に変換されないのでfalseが返る


jQueryなど

- jQueryオブジェクト
    - $('セレクタ')とするだけで作成できる
      セレクタにはHTMLのタグ名やclass名などを指定する

- hideメソッド
    - 要素を隠すメソッド

- fadeOutメソッド
    - 要素を隠す際に、アニメーションを付ける

- slideUpメソッド
    - アニメーション付きで要素を隠すことができ、fadeOutと異なるアニメーションになる

- clickイベント
    - WEBページ内でユーザーによってクリックなどの操作が行われた時、あらかじめイベント内に指定した処理を実行する
    イベントの構文は$('セレクタ').イベント名(function(){ });のように書く

- CSSメソッド
    - CSSを変更できるメソッド
    1つ目の引数にCSSのプロパティを、2つ目の引数にプロパティの値をいれる


ITパスポートなど

- CPUのビット
    - 一回の演算で処理できるビット長を表す

- USBのクロック
    - 一定の周期で発生し、コンピューターの各回路が処理動作を行う基準となる信号

- GPU
    - PCなどで画像処理を専門とするハードウェア部品

- ターボブースト
    - 米インテル（Intel）社のマイクロプロセッサ（CPU/MPU）製品に組み込まれた高速化機能の一つで、発熱量に応じて動的に動作周波数を変動させる技術
    動作環境や処理内容によって定格よりも高速に動作させることができる

- デュアルコアプロセッサー
    - 一つの半導体パッケージにマイクロプロセッサ（MPU/CPU）の演算・処理回路であるプロセッサコアを2つ集積し、それぞれ独立に稼働させることができるもの

- マルチコアプロセッサ
    - 複数のプロセッサコアで処理を分担し、その分だけ性能が上がる

- プログラムカウンタ
    - 次に実行すべき命令が格納されているメモリ上の番地（アドレス）を保存しているもの

- テレマティクス
    - Telecommunication（通信）とInformatics（情報科学）を組み合わせた造語
    分かりやすく言えば、カーナビのようなもの

- アクチュエーター
    - 入力されたエネルギーもしくはコンピュータが出力した電気信号を物理的運動に変換する、機械・電気回路を構成する機械要素のこと

- GPS
    - アメリカ合衆国によって運用される衛星測位システム（地球上の現在位置を測定するためのシステムのこと）を指す

- NFC
    - かざすだけで周辺機器との無線通信を可能にする技術・規格
    「Near field communication」の略称であり、日本語では「近距離無線通信」と訳されている

- デバイスドライバ
    - コンピュータ内部に装着された装置や、外部に接続した機器などのハードウェアを制御・操作するためのソフトウェア

- プラグ・アンド・プレイ
    - 「差し込んで使う」という意味、パソコンに周辺機器や拡張カードを接続するとOSが自動的に必要な設定を行う仕組みのこと



# まとめ

ようやくjQueryに取り掛かることができたので
さらに難しくなってくると思うが、1つづつ忘れないようにしっかり覚えていきたい
authenticate_user!メソッドの使い方

## どんなメソッドか？
ログイン状態によって表示するページを切り替えるメソッドです。
ログインしていないユーザーを、ログイン画面に遷移したい場合に使います。
before actionで呼び出すことにより、コントローラーのアクションを実行する前に、ユーザーがログインしていなければログイン画面に遷移することができます。

```ruby
before action authenticate user!
```

## onlyの後にアクションを指定した場合の例
```ruby
before action authenticate user!, only: [:new, :edit]
```
上記の場合、ログインしていないユーザーがnewアクションとeditアクションを実行した場合のみ、ログイン画面に遷移することができます。
only以外にもexpectの後にアクションを指定することで、ログインしていないユーザーが指定したアクション以外を実行した場合に、ログイン画面へ遷移させることもできます。
Android Studio Chipmunk 2021.2.1 M1 Mac で起動しない時の対応

2021/05/16

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/685319/f10b2227-5fe8-0844-89c3-f4cbe2c5346c.png)

Flutterの開発で使用しているAndroid Studioが起動しなくなりました。
Pleiadesで日本語化してる場合によく起こるのですが、今回は入れ直しても起動しない。
うんともすんとも言わない。

https://mergedoc.osdn.jp/

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/685319/50e3bbf9-8cd5-8218-4c09-62d7174af8a5.png)

ちょっと古い記事ですが、
[MacでAndroidStudioを完全アンインストール](https://qiita.com/nagaoyuriko/items/f310b595ff16061e1186)

この作業で起動はOK

日本語化対応としては、PleiadesのリンクにあるJava8対応版をダウンロードしてインストールすることで、起動しました。
FastAPI  メモ

# FastAPIメモ
FastAPIの自分用メモです。

## 複数ファイルのアップロード方法
- FastAPIで一つのファイルをアップロードする場合、　例として以下のように記述する。
```
app = FastAPI()

@app.post("/api/")
async def upload(
    students:UploadFile = File(...)
    ):
    ...
```



- 呼び出し側から2つ以上のファイルをアップロードする場合
    - 下記は名前がstudentsとteachersに分かれている。

```
curl -X POST -F students=@students.csv -F teachers=@teachers.csv http://localhost:8000/api
```

以下のように記述することでそれぞれ別に取得できる。

```
app = FastAPI()

@app.post("/api/")
async def upload(
    students:UploadFile = File(...), 
    teachers:UploadFile = File(...)
    ):
    ...
```

(とりあえずなんでも受け取れるようにして、後から一致する名前で取り出したいが方法を調査中）


## 変数に格納されているCSVをファイル形式で出力する方法
- PandasのDataframeをCSVに変換して、それを返す。
    - FileResponseを使用するとファイルパスが必要になるので、Responseで記述
```
data_csv = data_df.to_csv(index=False)
response = Response(content=data_csv, media_type="text/csv")
return response
```
npm のグローバルインストールとローカルインストールの違い

## npm のグローバルインストールとローカルインストールの違いについて

### npm のグローバルインストール

- グローバルインストールの仕方
  - `npm install -g {パッケージ}`
  - `yarn global add {パッケージ}`

- `which npm`
  - npmが格納されている場所を確認してみよう
  - ユーザーの`bin`ディレクトリ配下に存在した

- しかし、チーム開発を行うとき、全てのユーザーが同じ npm や yarn をインストールしているわけでは

### ローカルインストール

- ローカルインストール…特定のディレクトリにインストールをしてもらう方法
  - package.json に従って必要なパッケージをダウンロードしてもらう

- ローカルインストールの仕方
  - インストールを行いたいディレクトリ配下に移動する
  - `npm install {パッケージ}`
  - `yarn global {パッケージ}`

- node_module ディレクトリと package.json、package-lock.jsonがインストールされる

- パッケージは`node_module`の`bin`配下にあるので、それを呼び出して実行される
  - 例 `node_modules/bin/パッケージ名 コマンド`

- `node_modules`は膨大なファイルなので、Githubで共有するのには向いていない
  - 他の人に共有するのには,`package.json`を共有してインストールをしてもらう作業をする形で行う

### ちなみに、、パッケージのアンインストール方法

- `npm uninstall -g パッケージ名`
- `yarn global remove パッケージ名`
  - ローカルインストールの場合は`-g`や`global`を省略する
C言語学んで1ヶ月で爆弾探すゲーム作ってみた

学校に通い始めて1ヶ月と少し。
配列位まで使えるようになって、今は思いついたゲームを作るのが楽しく、普段からc言語のことばかり考えるほどです。

そんな中普通にプレイしてて楽しいと思えるくらいのゲームが作れたので、投稿してみます。

指摘やアドバイスなどなんでもお待ちしております。

ルールはコード内に書いてあります。

```c
#include<stdio.h>
#include<stdlib.h>
#include<time.h>

int main(void){

	int a, b, n, i, j, rx, ry, bx, by;
	int rfield[7][7];
	int bfield[7][7];

	printf("\n"
			"5×5マスのどこかに赤い爆弾と青い爆弾が設置されています！！\n\n"
			"5手で得た情報をヒントに爆弾の位置を特定してください。\n"
			"片方でも爆弾の位置を間違えた場合爆発してしまいます。\n"
			"頑張って探し当ててください；；\n\n"

			"～ルール説明～\n\n"

			"何行目、何列目の順に数値を入力してください。\n\n"
			"・ そのマスに爆弾が設置されていた場合、「2」、\n"
			"・ そのマスの周囲8マスに爆弾が設置されていた場合、「1」、\n"
			"・ 上記の範囲に爆弾が存在しない場合、「0」と出力されます。\n"
			"\n\n"
			"5回この作業を繰り返した後、2つの爆弾の位置を聞きます。"
			"どちらか片方でも外れた場合、爆発し、GAME OVERとなります。"
			"情報をたよりに爆弾を2つとも探し当ててください。\n\n"

			"では、Enterを押してGAME START!!!\n\n");

	getchar();

	srand((unsigned int)time(NULL));

	rx = rand()%5+1;
	ry = rand()%5+1;
	bx = rand()%5+1;
	by = rand()%5+1;

	//red[rx][ry];
	//blue[bx][by];

	for(j=1;j<=5;j++){//field作成
		for(i=1;i<=5;i++){
			rfield[i][j]=0;
			bfield[i][j]=0;
		}
	}

	for(n=1;n<=5;n++){
		printf("%d 回目\n", n);
		printf("何行目？： "); scanf("%d", &a);
		printf("何列目？： "); scanf("%d", &b);

		if(a==rx && b==ry){//redbombの処理
			rfield[b][a]=2;
			printf("2");
		}
		else if((a-1<=rx && rx<=a+1) && (b-1<=ry && ry<=b+1)){
			printf("1");
			for(j=a-1;j<=a+1;j++){
				for(i=b-1;i<=b+1;i++){
					rfield[i][j]=1;
				}
			}
			rfield[b][a]=0;
		}
		else printf("0");

		if(a==bx && b==by){//bluebombの処理
			printf("2");
			bfield[b][a]=2;
		}
		else if((a-1<=bx && bx<=a+1) && (b-1<=by && by<=b+1)){
			printf("1");
			for(j=a-1;j<=a+1;j++){
				for(i=b-1;i<=b+1;i++){
					bfield[i][j]=1;
				}
			}
			bfield[b][a]=0;
		}
		else printf("0");

		printf("\n\n");

		printf("赤い爆弾の検知結果\t青い爆弾の検知結果\n");

		for(j=1;j<=5;j++){//field作成
			for(i=1;i<=5;i++){
				printf("%d", rfield[i][j]);
			}
			printf("\t\t\t");
			for(i=1;i<=5;i++){
				printf("%d", bfield[i][j]);
			}
			printf("\n");
		}

		for(j=1;j<=5;j++){//field作成
			for(i=1;i<=5;i++){
				rfield[i][j]=0;
				bfield[i][j]=0;
			}
		}
		printf("\n\n");
	}

	printf("5回の動作を終えました。\n\n"
			"いよいよ運命の時です。\n"
			"あなたが予\想する爆弾の位置を、赤い爆弾、青い爆弾の順に入力してください。\n\n");

	int arx, ary, abx, aby;

	printf("赤い爆弾：\t何行目？： "); scanf("%d", &arx);
	printf("\t	何列目？： "); scanf("%d", &ary);

	printf("青い爆弾：\t何行目？： "); scanf("%d", &abx);
	printf("\t	何列目？： "); scanf("%d", &aby);

	printf("\n\n");

	if((arx==rx && ary==ry) && (abx==bx && aby==by)){
		printf("おめでとうございます！！！\n爆弾は両方とも爆発しませんでした！！！\n\n");
	}
	if((arx==rx && ary==ry) && (abx!=bx || aby!=by)){
		printf("ドカン！青い爆弾が爆発してしまいました。。\nもう一度挑戦してみてね！\n\n");
	}
	if((arx!=rx || ary!=ry) && (abx==bx && aby==by)){
		printf("ドカン！赤い爆弾が爆発してしまいました。。\nもう一度挑戦してみてね！\n\n");
	}
	if((arx!=rx || ary!=ry) && (abx!=bx || aby!=by)){
		printf("どっかーーーん！！！！！\n爆弾が両方とも爆発してしまいました！！！\nもう二度とプレイするな！！\n\n");
	}

	printf("正解は、\n\n"
			"赤い爆弾は%d行目の%d列目、\n"
			"青い爆弾は%d行目の%d列目でした！\n\n"
			"また遊んでね！", rx, ry, bx, by);

	getchar();
	getchar();
	return 0;
}
```
VSCode devcontainerでGinの開発環境を構築するテンプレートを作りました

# 概要
今回作成したテンプレートを使うと、ローカル環境を汚すことなく、コード補完、静的解析、デバッグ等のGoの開発ツールの恩恵を受けつつGinアプリケーションを開発できる環境を構築できます。
コード内容は以下のリポジトリより確認できます。

https://github.com/rootsuke/gin-devcontainer-template/tree/master

# 構築される環境
* Go 1.18
* Gin
* air
* gopls, staticcheck, dlv等のGo開発ツール

# 動作環境
* Docker
* VSCode
* Remote - Conatainers (VSCodeの拡張機能)

# 使用方法
1. Open Folder in Conatainerをクリック
2. コンテナのビルドが完了したらターミナルを開いて `air` と入力

上記手順が完了すると `localhost:8080` にてサンプルコードのJSONが表示されます。
以降はairがホットリロードを行ってくれますので、変更内容が自動で反映されます。

実際のアプリケーションのテンプレートとして使う場合はパッケージのネームスペースを変えるなりしてお好きに使っていただければ。
devcontainerで使用することを前提としておりますが、手動でイメージをビルドしてコンテナを立ち上げて使うこともできます。

※alpineベースだと `glibc` の仕様が異なり動作しない拡張機能が存在するようですのでイメージ軽量化を行う場合はご注意を。
> Note: When using Alpine Linux containers, some extensions may not work due to glibc dependencies in native code inside the extension.

https://code.visualstudio.com/docs/remote/containers#_quick-start-try-a-development-container
flutter doctor コマンド時の Android toolchain に関するエラー

-環境
Flutter 3.0.0
Android Studio Chipmunk | 2021.2.1

-エラー
[!] Android toolchain - develop for Android devices (Android SDK version 32.1.0-rc1)
    X cmdline-tools component is missing
      Run `path/to/sdkmanager --install "cmdline-tools;latest"`
      See https://developer.android.com/studio/command-line for more details.
    X Android license status unknown.
      Run `flutter doctor --android-licenses` to accept the SDK licenses.
      See https://flutter.dev/docs/get-started/install/windows#android-setup for more details.
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60220/b8010963-5c58-491d-24c0-c10aa103483f.png)

-対応
Android Studio から Command-line tool をインストールする

1. Android Studio から SDK manager 起動
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60220/61a84bf6-4547-0fc5-9e0b-273f27c82e47.png)

2. SDK Tools から Android SDK Command-line tool を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60220/b53ffe44-944a-1755-b58f-f68f89716fa5.png)

3. apply
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60220/b7d285de-2f68-53a8-2adc-c097dbebb52d.png)

4. エラーが出ていなければ解消
※ license のエラーは別途対応要
[!] Android toolchain - develop for Android devices (Android SDK version 32.1.0-rc1)
    ! Some Android licenses not accepted.  To resolve this, run: flutter doctor --android-licenses
 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60220/04da9942-efe2-5b86-59b9-15c76a4d90c7.png)
100日後くらいに個人開発するぞ！day026

## 今日もHTML＆CSS中級編を復習してみた！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2632394/a0a0c02c-a572-1038-b381-0ce60d6a34d4.png)

## 今日の備忘録


### 文字の太さを指定する方法
- font-weightプロパティを用いることで文字の太さを変更できる
    - 例：文字を細くしたい場合
        - `font-weight:normal;`
    - 例：文字を太くしたい場合
        - `font-weight:bold;`

### 相対的な大きさを指定する方法
- widthやheightを%で指定すると親要素の幅や高さに対する相対的な大きさを指定できる
    - 例：親要素の幅の40%にしたい場合
        - `width:40%;`


### 要素同士を重ねて表示させる方法
 - `position:absolute;`を用いると要素を重ねて表示できる
    - 例
        - `.box{position:absolute;}`

### 要素の位置を指定する方法
- サイト全体の左上部分を基準として位置を指定する場合
    - 例：サイト全体の左上部分から50px下の位置を指定する場合
        - `top:50px`
    - 例：サイト全体の左上部分から50px左の位置を指定する場合
        - `left:50px`
- `position:relative`を親要素に指定するとその親要素の左上部を基準位置にすることができる
JavaScriptで改行前後の文字列をそれぞれ抽出したい


## 結論
`substr`と`indexOf`を組み合わせれば良い

## 改行前の文字列を抽出する

```javascript
// 改行前の文字が欲しい
const text = "test1\ntest2";
const text_first_line = text.substr(0, text.indexOf(`\n`));
console.log(`text_first_line=${text_first_line}`);

// 結果
test1
```

## 改行後の文字列を抽出する

```javascript
// 改行後の文字が欲しい
const text = "test1\ntest2";
const text_second_line = text.substr(text.indexOf(`\n`) + 1);
console.log(`text_second_line=${text_second_line}`);

// 結果
test2
```

## 参考
https://qiita.com/pyon141/items/b8ebbbcc0786c0d899ba
【SwiftUI】Listで選択行の背景色を変える

まずはコードを見てください。
```swift
import SwiftUI

struct Collection: Identifiable {
    let id = UUID()
    let name: String
}

struct ContentView: View {
    @State var collections = [
        Collection(name: "木﨑太郎"),
        Collection(name: "空道太郎"),
        Collection(name: "松本直也"),
        Collection(name: "子安裕樹"),
    ]
    @State var selectionIndex: Int? =  2
    
    var body: some View {
        List() {
            ForEach(0..<collections.count, id: \.self) { index in
                HStack {
                    Text(collections[index].name)
                    Spacer()
                }
                .listRowBackground(selectionIndex == index ? Color(UIColor.systemGray4) : nil)
                .contentShape(Rectangle())
                .onTapGesture {
                    selectionIndex = index
                }
            }
        }
    }
}
```
結果はこうなります。
![01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1772485/f632ea82-de61-9f6e-cddd-cb71ebfa6efa.png)
この行で背景色を指定しています。
```swift
.listRowBackground(selectionIndex == index ? Color(UIColor.systemGray4) : nil)
```
色はUIColor.systemGrayで指定するとダークモードでもいい感じにしてくれます。
![02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1772485/eaea80bf-9487-2089-aa2c-606f7ac7d8bb.png)
好きな色を指定したい場合はAsset Catalogを作るといいでしょう。
Ubuntuでスクリーンショットの保存先を変更してショートカットを設定する

Ubuntu 20.04 LTSでスクリーンショットのデフォルト保存先を変更して、ショートカットを設定する方法。

# デフォルトの保存先を変更する方法

## 端末で設定する方法

以下のコマンドで設定する。`file:///`と、スラッシュが3つなのに注意する。

```
gsettings set org.gnome.gnome-screenshot \
auto-save-directory "file:///path/to/screenshot/"
```

`path/to/screenshot`は保存したいパスで書き換える。

# GUIで設定する方法

dconf-editorで設定する。
コマンドラインで以下を実行してdconf-editorをインストールする。

```
sudo apt install dconf-editor
```

dconf-editorを起動してorg > gnome > gnome-screenshotと辿っていき、「カスタム値」の欄に`file:///path/to/screenshot/`とする。

# ショートカットを変更する

デフォルトではデフォルトの保存先のままなので、変更する。
まずデフォルトのショートカットをすべて無効にする。
設定からキーボードショートカットを開き、`Backspace`で無効にする。
つぎに、一番下にある「＋」マークをクリックして新しいショートカットを設定する。
名前とコマンドとショートカットを入力するダイアログが開く。
名前は元々あったショートカット名を参考にすればいいだろう。
コマンドは端末で`gnome-screenshot --help`を参考にするとわかりやすい。
ショートカットは元々あったものと同じでいいと思うがお好みで。
下に自分の設定をまとめておく。

| スクショの動作と範囲 | コマンド | ショートカット |
|---|---|---|
| 全体＋画像 | `gnome-screenshot` | `Print` |
| 全体＋クリップ | `gnome-screenshot  -c` | `Ctrl` + `Print` |
| ウィンドウ＋画像 | `gnome-screenshot -w` | `Alt` + `Print` |
| ウィンドウ＋クリップ | `gnome-screenshot  -wc` | `Alt` + `Ctrl` + `Print` |
| 領域＋画像 | `gnome-screenshot -a` | `Shift` + `Print` |
| 領域＋クリップ | `gnome-screenshot  -ac` | `Shift` + `Ctrl` + `Print` |

# 参考

以下のリンクの内容を総合してまとめた。

- [スクリーンショットの保存先を変更するだけ | otacon's blog](https://ameblo.jp/tatsu54321/entry-12404042647.html)
- [linux_mint:スクリーンショットのデフォルトの保存先を変更する [無銘闇人の備忘録]](https://mumeiyamibito.0am.jp/linux_mint/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%E3%81%AE%E3%83%87%E3%83%95%E3%82%A9%E3%83%AB%E3%83%88%E3%81%AE%E4%BF%9D%E5%AD%98%E5%85%88%E3%82%92%E5%A4%89%E6%9B%B4%E3%81%99%E3%82%8B)
- [Ubuntuで端末からスクリーンショットを撮る方法まとめ - Qiita](https://qiita.com/yas-nyan/items/80f2db8c4bdf4c8e87b8)
- [Ubuntu標準スクリーンショットの保存先変更 – 回れ右の内輪差](https://lookbackmargin.blog/2016/04/01/52160145/)
Slack AppでリクエストURLにLambda(Node.js)の関数URLを指定してYour URL didn't respond with the value of the challenge parameterが出た時の対応


## はじめに

Slackアプリの Event Subscriptions -> Enable Events -> Request URLでURL設定時にタイトルのエラーが出た場合の対応方法を整理します。

## エラー内容

```
Your URL didn't respond with the value of the challenge parameter.
```

- 内容としては`challenge` パラメータを指定してレスポンスを返していない、という意味です。

## 結論

Lambda(Node.js)の場合、以下のようなコードを書けばOKです。
`challenge` のみを含むレスポンスを返却するのがポイントです。

```index.js
exports.handler = async (event) => {
    // TODO implement
    console.log(`event=${JSON.stringify(event)}`);
    const event_body_json = JSON.parse(event.body);
    console.log(`challenge=${event_body_json.challenge}`);
    const response = {
        challenge: event_body_json.challenge
    };
    return response;
};
```

## 注意点
- Lambdaで関数生成時にresponseに`statusCode: 200`が含まれていますが、外しましょう。
- `statusCode: 200`を含めていたために、私の場合はエラーがでてしまい、少し詰まりました。
88 解答

# Aceptedされたがダメそうな解答
問題文にソートされた配列はnums1に入れとかなくてはいけないと書いていたので、わざわざソートした combinedArray　をnums1 にもういちど入れなおしている。
しかし、そもそもソートされた配列を関数で返してはいけないと書いてあるので間違いだと思う。
```Java
public void merge(int[] nums1, int m, int[] nums2, int n) {
		int[] combinedArray = new int[m + n];
		int index = 0;
		for (int i = 0; i < m; i++) {
			combinedArray[i] = nums1[i];
			index++;
			
		}
		for (int i = 0; i < n; i++) {
			combinedArray[index] = nums2[i];
			index++;
			
		}
		Arrays.sort(combinedArray);
		for(int i = 0; i < m+n; i++) {
			nums1[i] = combinedArray[i];
		}
		
		System.out.println(Arrays.toString(nums1));

	}
```

# 正攻法

もともとsortedされた二つの配列なので、nums1 の最後（０以外の）要素とnums2の最後の要素を比べて大きいほうをnums2の最後に入れる。
これを繰り返す。
```Java

public void merge(int[] nums1, int m, int[] nums2, int n) {
		int nums1Length = m - 1; // 配列nums1の要素数
		int nums2Length = n - 1; //　配列nums2の要素数
		int index = m + n - 1; //　nums1, nums2を合わせた配列の要素数

		while (nums2Length >= 0) {
			if (nums1Length >= 0 && nums1[nums1Length] > nums2[nums2Length]) {
				nums1[index--] = nums1[nums1Length--];
				//index--;
				
			} else {
				nums1[index--] = nums2[nums2Length--];
				//index--;
			}
		}
	}
```

```Java
nums1[index--];
```
上記の場合、nums1[index]　が起こってから index-- が起こる。

[参考](https://www.programcreek.com/2012/12/leetcode-merge-sorted-array-java/)


学んだことを簡単にまとめているだけなので悪しからず。
Power Query workout - Item access

テーブルやリストなど構造化された値は`{}`演算子により、アイテムにアクセスすることができる。ここまでは難しくないので触れない。 
では、

https://docs.microsoft.com/en-us/powerquery-m/m-spec-operators#item-access

>Item access does not force the evaluation of list or table items other than the one being accessed. 
No items in x other than that at position y is evaluated during the process of item selection. (For streaming lists or tables, the items or rows preceding that at position y are skipped over, which may cause their evaluation, depending on the source of the list or table.)

これをどのように理解するか。

>Item access では、アクセスされているものを除き、リストまたはテーブルの項目の評価は強制されません。
位置 y にあるもの以外の x 内の項目は、項目の選択の処理中に評価されません (ストリーミング リストまたはテーブルの場合、位置 y より前にある項目または行はスキップされます。これにより、リストまたはテーブルのソースに応じて評価が発生する可能性があります)。

# 動作
```text:Power&#x20;Query
{ value_1, value_2, value_3, value_4, ... value_n }{2} = value_3    // true
```

先頭から3番目のリストアイテムにアクセスするとき、
- value_1, value_2 の評価をしない。リストアイテムとして存在していることだけでこと足りるから
- なので value_3 が 評価できない値(`error`)にならない限り List_1 の評価結果は `error` にならない 
- 先頭から4番目以降のリストアイテムは無視される
- 先頭から3番目のリストアイテム存在しないとき、リストの評価結果は`Expression.Error`

```text:Power&#x20;Query
{ 1, 2, 3, 4, 5 }{2} = 3    // true
```
先頭から3番目のリストアイテムにアクセスするとき、
- 3番目のリストアイテムである式以外は評価されない

```text:Power&#x20;Query
List.Generate(()=>1, each _ <=5, each _ + 1){2} = 3    // true
```
先頭から3番目のリストアイテムにアクセスするとき、
- 1~2番目のリストアイテムになる式はリストを出力するための評価はされる(ストリーミング)
- 1~2番目のリストアイテムである式は Item access による評価はされない
- 4番目以降のリストアイテムは無視される
# 確認
```text:Query1&#x20;:&#x20;ストリーミング&#x20;(Power&#x20;Query)
List.Numbers(1, 1000000, 0)
```

```text:Query1&#x20;:&#x20;非ストリーミング&#x20;(Power&#x20;Query)
{1, 1, 1, 1, 1, 1, 1, 1 ..........}    // 1,000,000 アイテム
```

```text:TestA&#x20;(Power&#x20;Query)
let
    Source = Table.FromColumns(
        {List.Repeat({0}, Rows)},
        type table [Column1 = Int64.Type]
    ),
    AddedColumn2 = Table.AddColumn(
        Source,
        "Column2",
        each Query1{[Column1]},
        type number
    )
in
    AddedColumn2
```

```text:TestB&#x20;(Power&#x20;Query)
let
    Source = Table.FromColumns(
        {List.Repeat({999999}, Rows)},
        type table [Column1 = Int64.Type]
    ),
    AddedColumn2 = Table.AddColumn(
        Source,
        "Column2",
        each Query1{[Column1]},
        type number
    )
in
    AddedColumn2
```

ストリーミングされるリストではリストアイテムの位置によってパフォーマンスは変わってしまう。先頭であるほど速やかで後方にあるほど遅くなる。ストリーミングされないリストではリストアイテムの位置によるパフォーマンスの違いはほぼない。

# 思ったこと🙄

Item access は多くの場合でシーケンシャルアクセスになるはず。結果、過剰なファイルアクセスなどデータソースに対して必要以上のアクセスが発生することがある。要はクエリの評価が遅くなるかもだから、都度適切な手段を考えておく。


# その他
https://powerbi.connpass.com/

- [Power BI 勉強会 - connpass](https://powerbi.connpass.com/)
- [Power BI Desktop を使い始めるには](http://qiita.com/PowerBIxyz/items/6c4735cb5b5712e70981)
- [Excel で Power Query を使い始めるには](http://qiita.com/PowerBIxyz/items/52e563037b855a099ca9)
STM32G031でぞくに言うアナログサーボのデジタルシリアル化(送信編)(RS-485)(その2)(数珠繋)


x RS485は、ICは、買ってあるけどハードを組んでいない
x アナログサーボーは、どこかになくして、今は、ない
x OBでリセットをリセットオンリーにするがわかる人むけ
x なぜか読者の半分は、英語圏の外人だからな　コメントに一部英語
x 作って思ったけどサーボ側は、RS485の切り替えは、いらないんだ。

目的
タイトルは、変わったけど前回の続き
ぷち人気があった記事だったので続編狙い





仕様

20個程度のアナログサーボーを数珠繋ぎでデジタルシリアル化
コスト削減と軽量コンパクト化と簡易化を狙う

アドレスは、RS485が電気的に約32個しか繋がらないので256個で1バイト
データは、今時、32ビットなので4バイト
チェックサムは、すべてのパケットを足す、チェックサム自身は、0x00
ヘッダー0x00、フッター0xFF
8バイト固定のショートパケット


関数化

servo(0,123); //ID 0   DATA 123

ローレベル関数の共通化

rs485packet_send(0x10,123); //ADD 0x10    DATA (int)123


32ビット
data = rs485packet_receive(0xc0); //ADD 0xc0  re(0x40)  

下位8ビット有効　シンクロ(同期)が速い　戻りは、int
data = rs485packet_receive8(0xc0); //ADD 0xc0  re(0x40)  

さらに下位関数 0が32ビット　1が下位8ビット
data = rs485packet_receive_io(0xc0,1); //ADD 0xc0  re(0x40)  



![o_con442.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/8e5fe390-0750-512c-9264-77465dcb39e8.jpeg)


![o_con435.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/a54187a4-e453-bdd4-bb70-cfe15897a6d0.jpeg)


![o_con443.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/35522a2d-d386-a006-36db-e750fd861ed0.jpeg)




https://qiita.com/caa45040/items/c6ab29b730141ad8a139



プログラム


```c++

//ser_500kbps_servo_M_031_v2

// tx PA14(PB6) 8PIN
// rx PC14(PB7) 1PIN

#include <Arduino.h>


//プロトタイプ宣言
//prototype declaration
//
void servo(int id,int data);
void rs485packet_send(int id,int data);


//初期化処理
void setup() {

  delay(3000); //not Delete!!

  // シリアル通信の速度を500000bpsにする。
  //Serial set 500kbps
  Serial.begin( 500000 );

} //setup


//メインループ
void loop() {

  //サーボに値の設定
  //The servo set value
  servo(0,123); //ID 0  DATA 123 (0x7B)

  delay(1000); //1秒待つ

}//loop


void servo(int id,int data){

  //パケットの送信
  //send packet
  rs485packet_send(0x10 + id, data );
  

}//servo


void rs485packet_send(int id,int data){

  int ii;           //カウンター counter
  char out_buff[8]; //バッファー buffer

  //バケットに値を設定
  // packet move
  out_buff[1 - 1] = 0x00;                  //header
  out_buff[2 - 1] = id;                    //address
  out_buff[3 - 1] = ((data >> 24) & 0xff); //data1
  out_buff[4 - 1] = ((data >> 16) & 0xff); //data2

  out_buff[5 - 1] = ((data >>  8) & 0xff); //data3
  out_buff[6 - 1] = ( data        & 0xff); //data4
  out_buff[7 - 1] = 0x00;                  //Checksum
  out_buff[8 - 1] = 0xff;                  //footer

  //チェックサムの計算
  //Checksum Calculation
  int chk = 0;
  for (ii = 0; ii < 8; ii++) {
    chk = chk + out_buff[ii];
  }//for
  out_buff[7 - 1] = chk & 0xff;

  //送信処理
  //send 8 byte
  delay(1);
  for (ii = 0; ii < 8; ii++) {
    Serial.write(out_buff[ii]);
  }//for
  delay(1);

} //rs485packet_send


```
neosでlogix その79

# 概要
neosでlogixやってみる。
練習問題、やってみた。

# 練習問題

キーで、動く、箱を作れ。

# 写真

![2022-05-14 22.13.20.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18104/5a61b58b-f174-dafa-92c7-ce33c4525dd1.jpeg)

# 手順

- devtooltipを装着。
- 新規->3d->box
- インスペクターを開き、コンポーネントを追加
- Physics>CharacterController
- logixtooltipを装着。
- インターフェースを取り出す。
- ノードブラウザを表示。
- Actions>Write Refをスポーン。
- Users>Local Userをスポーン。
- Input Devices>Keyboard>Key Heldをスポーン。
- Flow>Fire On Trueをスポーン。
- Physics>Set Character Velocityをスポーン。
- つなぐ
- インスペクターを表示。
- ☆を使って子スロットを作り、それをlogixという名前にする。
- logixtooltipを装着
- logixスロットをグラブして、リングメニューからSet Packing Rootを選ぶ
- ノードをクリックして、rでパッキング
- Unpack children & connected nodesで アンパック
- 親のスロット名を変更
- それをグラブして、ctrl + sで、インベントリーに保存

# 注意

Write Refは、Targetに入力を接続する前に、まずReference出力をターゲットフィールドに接続する。

# 成果物

```
neosrec:///U-ohisama/R-0ee1ec21-db19-425b-ba63-9a699caff48e
```

以上。
【SwiftUI】コンソールにCSVファイルの中身を表示する。

# csvファイルを作成する。
まず対象のプロジェクトまで移動して、csvファイルを作成する。
```bash
$touch ファイル名.csv
$vi ファイル名.csv
```
touchはファイルを作成するコマンド。 
viで開く。

「i」と打ち込むと編集できるようになるのでいい感じに編集する。
私は下記のように編集した。
![スクリーンショット 2022-05-15 6.28.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1450941/6df93f07-489c-d7a6-f36a-1c629ffce967.png)
# プロジェクト内にCSVファイルを設置。
![スクリーンショット 2022-05-15 7.09.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1450941/fb38263a-14c9-6329-9901-9bcfc7052012.png)

# ファイルの読み込み
- まずはコンソールに出力する事を目指す。
- ContentViewファイルに以下つけたし。
```swift
import SwiftUI

struct ContentView: View {
    var body: some View {
        Text("Hello, world!")
            .padding()
        /// 1.ファイルにアクセスする。
        /*Xcodeでビルドされたアプリでは「バンドル（Bundle）」と呼ばれるものが作成され、
         プロジェクトに追加したファイルはこのBundle内に配置される。
         Bundle.main.url()を使って、このBundle内に格納された対象ファイルのパスを取得する。*/
            .onAppear {guard let fileURL = Bundle.main.url(forResource: "AccountantWordsList", withExtension: "csv") else {
                fatalError("ファイルが見つからない")
            }
                /// 2.ファイルの読み込み
                guard let fileContents = try? String(contentsOf: fileURL) else {
                    fatalError("ファイルの読み込みができません")
                }
                /// 3.ファイルの出力
                print(fileContents)
            }
    }
}


struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

```
![スクリーンショット 2022-05-15 13.16.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1450941/6e9924e1-9885-f629-7d8d-5cb281adf153.png)
2022/5/15主にITとかセキュリティの記事

クレジットカード番号が流出したときの対応方法　不正利用でも補償してもらえない場合があるぞ
クレカの会社から急に電話くると本当にドキドキします。(5/13)
https://nlab.itmedia.co.jp/nl/spv/2205/11/news152.html

「ざんねんなセキュリティ」がなくならない理由(5/13)
https://japan.zdnet.com/article/35187256/

SOMPOグループが脆弱性対策に本腰、リスクの実態を経営陣と早期共有するわけ(5/13)
https://xtech.nikkei.com/atcl/nxt/column/18/00001/06819/

攻撃にさらされるマネージドサービスを安全に使うため、各国当局が勧告(5/13)
https://news.mynavi.jp/techplus/article/20220513-2344217/

コスタリカで緊急事態宣言　政府機関にサイバー攻撃で(5/13)
https://www.nikkei.com/article/DGXZQOGN130E00T10C22A5000000/

サイバー攻撃とは｜サイバー攻撃の種類と個人でも行っておくべき対策を紹介(5/12)
https://news.nifty.com/article/technology/techall/12276-1627061/

「フィッシング対策協議会」を騙ってクレカ情報を聞き出す怪しいメール、内容や注意すべきポイントは？(5/13)
https://internet.watch.impress.co.jp/docs/column/dlis/1408458.html

日本へのEmotetによる攻撃は世界平均の7倍　Vadeによる調査結果(5/13)
https://enterprisezine.jp/news/detail/15972

警視庁が医師らに“サイバーセキュリティ”セミナー(5/13)
https://news.tv-asahi.co.jp/news_society/articles/000254525.html

「脱PPAPには受信側に立ったツールが必要」サービス開発者が語る本当のリスクと対処法(5/13)
https://techable.jp/archives/178554

ランサムウェアの被害総額は身代金の7倍に　チェック・ポイント・リサーチが調査レポートを発表(5/13)
https://enterprisezine.jp/news/detail/15973

ボバネットワーク、ガス代をBOBAトークン支払いで割引適用へ(5/11)
https://coinpost.jp/?p=349178

グーグル、2021年に34億の広告をブロックし、560万のアカウントを停止(5/13)
https://www.campaignjapan.com/article/%E3%82%B0%E3%83%BC%E3%82%B0%E3%83%AB-2021%E5%B9%B4%E3%81%AB34%E5%84%84%E3%81%AE%E5%BA%83%E5%91%8A%E3%82%92%E3%83%96%E3%83%AD%E3%83%83%E3%82%AF%E3%81%97-560%E4%B8%87%E3%81%AE%E3%82%A2%E3%82%AB%E3%82%A6%E3%83%B3%E3%83%88%E3%82%92%E5%81%9C%E6%AD%A2/477835

Windows LSAの活発な悪用を確認、確認と更新を(5/13)
https://news.mynavi.jp/techplus/article/20220513-2343864/

InDesignなどAdobeの複数製品に脆弱性、セキュリティアップデートをリリース(5/13)
https://news.mynavi.jp/techplus/article/20220513-2344028/

DAO（分散型自律組織）は働き方をどのように変えるのかWeb3がもたらす5つの変化(5/13)
https://www.dhbr.net/articles/-/8598

スプツニ子！Web3、NFT…次なる革命見逃さないで
インターネット革命に次ぐ革命が起きている(5/13)
https://doors.nikkei.com/atcl/column/19/111100138/042700018/?n_cid=nbpxwom_sied_top_new_pc

IBM、量子コンピューティングの新ロードマップ - 25年に4000量子ビットのシステム(5/13)
https://news.mynavi.jp/techplus/article/20220513-2344676/

NVIDIA、Linux向けGPUカーネルモジュールをオープンソース化(5/13)
https://news.mynavi.jp/article/20220513-2344543/

「決済の未来フォーラム デジタル通貨分科会：中央銀行デジタル通貨を支える技術（第4回会合）」傍聴者の募集について(6/2開催)
https://www.boj.or.jp/announcements/release_2022/rel220513g.htm/

IT-BCPを妨げる総務と情シスの仲の悪さ第14回：IT を BCP に取り込む方法(5/13)
https://www.risktaisaku.com/articles/-/68172

JBoss EAP 6のセキュリティフィックスが行われなくなるのでEAP 7への移行を検討する(5/13)
https://rheb.hatenablog.com/entry/2022/05/13/JBoss_EAP_6%E3%81%AE%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3%E3%83%95%E3%82%A3%E3%83%83%E3%82%AF%E3%82%B9%E3%81%8C%E8%A1%8C%E3%82%8F%E3%82%8C%E3%81%AA%E3%81%8F%E3%81%AA%E3%82%8B%E3%81%AE

今話題の「NFT」は、農業をどう変えていくのか？(5/13)
https://agrijournal.jp/aj-market/66437/
Linuxコマンド一覧

# Linuxについて
LinuxとはOSの一種であり、『OS』とはオペレーティングシステムの略である。
OSはソフトウェア（アプリなど）とハードウェア（記録・保管装置）を繋ぐ役割があり、OSが機能しているからこそ閲覧や保存が正常に行われる。

MacやWindowsのOSと違い、無料のオープンソースとして扱えることができ、Linuxをベースとして誰でも開発・改良が行えるのが特徴としてある。
ユーザー権限が厳しく管理されているので、安全性の高いサーバとして活用できる。

# Linuxコマンド一覧
| コマンド|内容| 
|:-----------:|:------------:|
| pwd| カレントディレクトリのパスを表示するコマンド |
|ls|ディレクトリやファイルの一覧を表示するコマンド|
|cd|カレントディレクトリから別のディレクトリに移動するコマンド|


### Rubyで使うコマンド一覧
| コマンド|内容| 
|:-----------:|:------------:|
|rails ```_6.0.0_``` new アプリケーション名|Railsで新規アプリケーションを作成。バージョン指定しない場合は、```_6.0.0_```を無くし入力をする。バージョン指定がなければ最新のバージョンで作成される。|
|rails db:create|新しくデータベースを作成|
|rails db:drop|データベースを削除する場合|
|rails s|アプリケーションのディレクトリで実行すると、アプリケーションを動かすためのサーバーが起動|
1 解答


# n^2の解法


```Java
 public int[] twoSum(int[] nums, int target) {
		long targetLong = target;
		
		int[] ans = new int[2];

		for (int i = 0; i < nums.length-1; i++) {
			for (int j = i + 1; j < nums.length; j++) {
				if(nums[i] + nums[j] == targetLong) {
					ans[0] = i;
					ans[1] = j;
				}
			}
		}
		return ans;

	}

```

# nの解法
今回のように（同一配列の）二つの要素を組み合わせるにはHashMapがいいのかもしれない。
```Java
public int[] twoSum(int[] nums, int target) {
		Map<Integer, Integer> hash = new HashMap<>();
		
		for (int i = 0 ; i < nums.length; i++) {
			int complement = target - nums[i];
			
			if(hash.containsKey(complement)) {
				return new int[] {hash.get(complement), i};
			}
			
			hash.put(nums[i], i);
		}
		throw new IllegalArgumentException();
	}
```

[参考](https://www.youtube.com/watch?v=BoHO04xVeU0)

学んだことを簡単にまとめているだけなので悪しからず。
TableViewのtextLabelの高さを可変にしたい!!

# はじめに
TableViewのCellの高さを可変にしたい時、調べるとCustomCellを使ったやり方がほぼ紹介されていて、デフォルトでのTableViewを使ったものが見つからなかったので、備忘録的なメモです。

### 高さ可変前
前提として、
```swift:ViewController
let LabelArray = ["LabelLabelLabelLabelLabelLabelLabelLabelLabelLabelLabelLabel","Label","Label"]
```
を定義します。
```swift:ViewController
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = UITableViewCell(style: .default, reuseIdentifier: "cell")
        cell.textLabel?.text = LabelArray[indexPath.row]
        return cell
    }
}
```
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2428088/f11289de-0a99-9c15-cfa7-6509cb589430.png" width=40%>

このままでは1番目の配列の最後尾が...で省略されてしまいます。

### 高さ可変する!!
```swift:ViewController
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = UITableViewCell(style: .default, reuseIdentifier: "cell")
        cell.textLabel?.text = LabelArray[indexPath.row]
        //この一行を入れるだけ!!
        cell.textLabel?.numberOfLines = 0
        return cell
    }
}
```
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2428088/05771d67-d5cf-1e36-dd63-d429941dc4cc.png" width=40%>

これで高さが可変になり、文字も最後まで表示する事が出来ました!!
DDDの各層について

# はじめに
この記事は正しくは「DDDで採用されることの多いアーキテクチャが持つ層について」です。
#### 対象読者
DDDについて軽く勉強した人
DDDを採用していて、アーキテクチャについて調べ直したくなる時がある人

#### 記事で論じないこと
そもそもDDDとは何か
DI、DIPといったアーキテクチャの話

#### 記事で論じること
DDDで採用されるアーキテクチャの各層について


# 概要
DDD（ドメイン駆動設計）で採用されることが多い、レイヤードアーキテクチャ、クリーンアーキテクチャ、オニオンアーキテクチャ、etc..が持つ**層**について理解を深める

#### 層とは
本記事で指す層とは、プレゼンテーション層、アプリケーション/ユースケース層、ドメイン層、インフラストラクチャ層である

#### 備考
本記事では主にアプリケーション/ユースケース層、ドメイン層について記載
内容の不備/間違いはご指摘ください
Go的な観点で書いています

# ドメイン層
#### 役割
ドメインモデルを表現すること
※DDDにおけるドメインとは、ソフトウェアによって解決したい対象領域(課題)のこと／ソフトウェアで解決したい対象領域（課題）をコードに落とし込むためにモデリングを行い、それを表現する

#### ドメイン層に書かれるもの
- ドメインオブジェクト（ドメインモデルを**表現**するもの） 
    - エンティティ
    - 値オブジェクト
    - ドメインイベント
- ドメインオブジェクトを**使用**するもの
    - リポジトリ
    - ファクトリー
    - ドメインサービス

## ドメインモデルを表現するもの
ドメインオブジェクト：ドメインモデルをコードに落とし込むことで作成したもの全てをまとめた際の呼び名

#### ドメインオブジェクト
エンティティ　　：値オブジェクトを複数もつストラクト（社員、記事、商品など）
値オブジェクト　：ストラクトの中の要素（名前、誕生日、体重など）
ドメインイベント：ストラクトの値が変更されるイベント（年をとる、部署を移動するなど）

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/416512/fb00407d-3189-267d-f0c7-072ea417dcf1.png" width="700px">

**エンティティと値オブジェクトの違い**
エンティティ　：同一判定を識別子で行う
値オブジェクト：同一判定を保持している値で行う

## ドメインオブジェクトを使用するもの
リポジトリ　　　：永続化層へのアクセスを提供するもの
ドメインサービス：モデルをオブジェクトとして表現すると無理があるもの
ファクトリー　　：ドメインサービスの一種

**リポジトリ**
実装する場合はインターフェースをドメイン層に実装し、処理本体はインフラ層に書く

永続化層とは？
永続性　：プログラムの終了／PCの電源断後もデータが存続する性質
永続化　：データに永続性を持たせること
永続化層：データを永続化する処理がある層（DB処理など）

**ドメインサービス**
モデルをオブジェクトとして表現すると無理があるものの中で、主に集合に対する操作を提供する場合に使用する
極力ドメインサービスを設けないことが推奨されているっぽい

**ファクトリー**
ドメインサービスの一種で、モデルをオブジェクトとして表現すると無理があるものの中で生成に関する部分を提供する
例：生成するドメインオブジェクトに生成する状況によって変化がある場合の生成ロジック（対象のファイルのタイプによってオブジェクトが異なるなど）

# アプリケーション/ユースケース層
#### 役割
ドメインオブジェクトが提供するメソッドを組み合わせて、一連のドメインオブジェクトに対する処理を実装する  

#### アプリケーション層への値の渡し方
1. 専用のストラクトに入れて返す（専用のストラクトを_____Dtoとして設ける）
1. ドメインオブジェクトが提供するメソッドから受け取った値をそのまま返す

1が推奨
理由：2の場合、アプリケーション層からドメイン層への参照が発生する可能性、不必要な値までアプリケーション層に届ける可能性がある

# プレゼンテーション層
#### 役割
リクエストのバインディングとチェック、レスポンスを請け負う

# インフラストラクチャ層
#### 役割
ストレージなど外部に依存する処理を請け負う

# 終わりに
プレゼンテーション層、インフラストラクチャ層について内容が薄くなってしまいましたが、この記事を通してみなさんのお役にたてれば幸いです。
また、内容に不備がありましたらご指摘お願いします。
CodeConnectionが使えなくなった話と個人的対処法

:::note warn
警告
注意をご確認のうえ、自己責任でお願い致します。
:::
# いきさつ
- 久しぶりにメイクコードでプログラムを作るぞーとなった矢先<br>サーバーに接続できませんとでてきてしまったCodeConnection
- ままあることなので、再起動や再インストールを試すも一向に解決しない
- 統合版にアプデ来てるやん！！（1.18.31）←これが原因ぽい？
# やったこと
1. CodeConnectionのアンインストールと再インストール<br>[窓の杜](https://forest.watch.impress.co.jp/library/software/make_micra/)または[MicrosoftSrore](https://apps.microsoft.com/store/detail/code-connection-for-minecraft/9PPFPG2FG2QB?hl=ja-jp&gl=JP)から
2. セットアップのやり方を改めて[Microsoftの公式サイト](https://minecraft.makecode.com/setup)の確認
3. マインクラフト統合版のバージョンを調べる
4. マインクラフトの統合版のダウングレードのやり方を調べる

# #1　アンインストールと再インストール

https://miraino-manabi.net/code-connection/

こちらのサイトがわかりやすかったです<br>
再インストール後のCodeConnectionのバージョンはv.1.50でした

これで解決できたらよかったんですけど。。。
# #2　セットアップのやり方を再確認

https://minecraft.makecode.com/setup/minecraft-windows10

自分はEducation Editionではなかったので改めて、やり方を確認してみました。。。<br>
うん。英語だけどあってる。。。
# #3　統合版のバージョンを確認
直近の統合版(Bebrock Edition)のリリースはこんな感じ。。。<br>
1.17系では確実に動いていた記憶があったので、私は***v1.17.41***を目指しました
<追記> [1.18.12.1]でも接続確認しました。[1.18.31]<=こいつが悪さしてるぽい

|version| リリース  |
|:-----:|:-------:|
|1.18.31|2022/04/27|
|1.18.12|2022/02/16|
|1.18.10|2022/02/08|
|1.18.2|2021/12/09|
|1.18.1|2021/12/06|
|1.18.0|2021/11/30|
|1.17.41|2021/10/27|
|1.17.40|2021/10/19|

https://minecraft.fandom.com/ja/wiki/%E6%9B%B4%E6%96%B0%E5%B1%A5%E6%AD%B4/Bedrock_Edition

# #4 ワールドのバージョンダウン
ダウングレードには二つのソフトが必要みたいです。<br>

:::note warn
警告
***ここからは自己責任でお願いします***
:::

- [MCLauncher](https://github.com/MCMrARM/mc-w10-version-launcher/releases)

1. 1番下までスクロールして、0.1.0のAssetsからMCLauncher.zipをクリックしてダウンロードし展開してください。
2. MCLauncher.exeを実行すると確認メッセージが表示されますが許可で続行。
3. 希望するバージョンを探してDownloadを押下してください。
4. ダウンロードが完了するとMinecraft-1.1X.XX.Xのようなフォルダが現れますのでフォルダごとコピーまたは切り取りしてください
- [MCBESwitcher](https://foxynotail.com/software/mcbe-switcher/)
1. Download Latest Version:下のmcbe-switcher-v0.1.4.zipをクリックしてダウンロードし展開てください
2. mcbe-switcher-v0.1.4/MCBE-switcher-v0.1.4/Versionsフォルダの配下にコピーしたフォルダを張り付けしてください
3. mcbe-switcher-v0.1.4/MCBE-switcher-v0.1.4/MCBESwitcher.exeを実行すると確認メッセージが表示されますが許可で続行
4. 立ち上がったMCBESwitcherのChoose Version:のリストボックスに先ほど張り付けたバージョンがあれば成功です。
5. Load and Launchで希望のバージョンで立ち上がったのではないでしょうか。

# 注意
- 最新版への戻し方がわかりません。。。
- 自動アップデートでバージョンが元に戻る（最新版になる可能性がある）
- 使っていたワールドデータやコードデータが消えたり読み込めなくなる可能性があるので遊ぶ前にバックアップを取っておくこと
- 新しいバージョンで保存すると古いバージョンでワールドが読み込めなくなるので注意すること
- うまくいかないバージョンもある（らしい）
- 2度目以降はMCLauncher/Minecraft-1.XX.XX.X.Appxファイルを実行して再インストールでいい（とおもう）
[^1]: aaaa

# 追記1
バージョン[1.18.31]で不具合がある模様です。
# 追記2
どうやらBE版では1.18でアプデが止まっており
EE版に機能が統合されてしまったため今後CodeConectionを使うためには上のやり方または
新たにBE版のダウンロードが必要になりそうです

---