OmniAICreator/Qiita-1.07M huggingface dataset:
【Xcode】iOSエミュレータのアップデート方法

# 概要

macOSのバージョンアップに伴い、Xcodeのアップデートを行いました。その後FlutterアプリをiOSエミュレータ上で起動しようとした際に下の画像のようなエラーが発生したので、その原因と対処法を記します。

環境：
macOS 15.0 (Sequoia)
iOS 17.4（アップデート前）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3908792/189107ff-f0f9-e089-5209-6d9c7b184137.png)

# 原因

エラー文にある通り、iOS 18.0 のエミュレータがインストールされていないことが原因です。
私のPCでは iOS17.4 のエミュレータを使用していました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3908792/964baf32-0664-ac25-4115-5903af02d19b.png)

# 対処法

ということでエミュレータのアップデートをします。
Xcodeを起動して設定画面を開きます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3908792/fcbd5d61-5766-6655-ad6c-924cf19df6b3.png)

右から２番目のComponentsから、iOS18.0の「Get」ボタンをクリックします。
8.39GB !?　そんなにストレージに余裕ないのになあと思いながらしぶしぶクリックしました...

![スクリーンショット 2024-10-20 19.24.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3908792/504639de-046f-54a2-9491-b72cd5bec284.png)


ダウンロード後も少々時間がかかりますが、10分程度あれば終わります。

# インストール完了後

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3908792/94de645c-abec-6911-12b9-57a8a7154b5d.png)

このようになればOKです。一旦エミュレータを閉じて再起動します。
再起動しても以前と同じバージョンで起動します。
再起動後にDockを右クリックしてバージョンを今回インストールした新しいものに変更します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3908792/98ccb9a2-dacf-60d2-89ad-a94d31f67428.png)

無事起動したら終了です。
ついでにiPhone16になっていました。

![スクリーンショット 2024-10-20 19.43.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3908792/e72cb285-8583-e45e-a813-3e1941e901c0.png)


# 補足

ストレージに余裕がない方は古いバージョンのイメージを削除することもできます。
先ほどのXcode設定画面の一番下に古いバージョンが表示されているので、右クリックでRemoveボタンを押します。
これだけで削除可能です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3908792/54144d29-4b3f-854e-e534-fbde7bf616fb.png)
Markdown AIを使ってみて理解した

# はじめに
- この記事は？
    - Qiitaのイベントに参加して書いてみたもの
        - [Markdown AIを使った記事を投稿しよう！](https://qiita.com/official-events/6914e7e898953881ef94)
    - 目的
        - Markdown AIというものを知らなかったのでどんなものか理解する
        - 理解した内容を人にわかりやすく説明する


# Markdown AIとは？
- いろいろ読んでみた
    - [Markdown AI – 必要なのは Markdown だけです!](https://mdown.com/)
        > ウェブサイトを簡単に作成できます。
サーバーや技術的な知識は必要ありません。サイトをすぐに世界と共有できます。
    - [ markdown AI記述方法 #Markdown - Qiita](https://qiita.com/tanaka_yaruo/items/9a8e7542f0c527499ed2)
        > markdown AIではスマートフォンでも記述できるようなカスタマイズを行なっています。
    - [MDown ウェブサイト作成ツール](https://mdown.ai/content?id=335b81b2-bcb0-4dbb-83d0-531aa132181f)
        >  Mark Downを使えば簡単にウェブサイトが作成できます！
        > ウェブサイトを作るにはサーバーを借りる必要がありますが、markdown AIならそのまま公開できます。面倒な手続きなしで世界中にシェアできます！
            
        > Server AI を使用すると、難しい設定なしで簡単に AI モデルを作成できます。
        > Markdown AI にエクスポートすると、Web サイトに AI を組み込むことができます。


:::note warn
- ビフォー
    - AIが代わりにマークダウンを書いてくれたり、
    - CopilotのようにAIが記述をアシストしてくれると思っていた
    - ChatGPTの出力結果がマークダウンに特化しているものだろうか？
    - 公開する前にシークレット情報とか、
    - 個人情報などが含まれてたらAIが警告してくれるとかがあると嬉しい
    - ⬇️
- 気づき
    - 思っていたものとはかなり違っていた
    - AIが記述をアシストしてくれるわけではない
    - Markdown AI用の独自の記述方法がある
    - 書いたものをそのまま公開できる
    - そこに、自分で作ったAIのモデルを埋め込める
:::

# 概要を理解したので実際に使ってみる
- 実際にMarkdown AIで作って公開までしたもの
- Markdown AIについての説明はこちらの中に記述しています
- [Markdown AI を理解するために試す](https://mdown.ai/content/3c69362d-43b8-4597-9584-f0bfa8d5fae8)

# さいごに
- Markdown AIは当初の想像とは違っていたが、実際に試してみて理解が深まった
- 記事に自分で作成したAIを埋め込めるのは非常に魅力的で、今後も活用していきたいと思った
cssのtransparentについて理解する

:::note
## 概要
transparentとは
- 色を決めるプロパティの値に使われるもので設定すると透明になります
- 透明度の調整ができないです
:::

# 背景 🖼️
業務のcssのコードを見ていると`transparent`というものがあり、初めて知りました。
cssのスキルが伸び代しか無い為、今回は`transparent`について勉強します。

# transparentとは 🕵️
色を決めるプロパティの値に使われるもので設定すると透明になります。

# 背景色を`transparent`にする 🎨

<p class="codepen" data-height="300" data-default-tab="js,result" data-slug-hash="bGXrwwX" data-pen-title="Untitled" data-user="uuylkesg-the-styleful" style="height: 300px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;">
  <span>See the Pen <a href="https://codepen.io/uuylkesg-the-styleful/pen/bGXrwwX">
  Untitled</a> by 山根大生 (<a href="https://codepen.io/uuylkesg-the-styleful">@uuylkesg-the-styleful</a>)
  on <a href="https://codepen.io">CodePen</a>.</span>
</p>
<script async src="https://cpwebassets.codepen.io/assets/embed/ei.js"></script>

:::note
以下は同じです。

background-color: transparent;
background-color: none;
:::

# 枠線を`transparent`にする 🎨

<p class="codepen" data-height="300" data-default-tab="js,result" data-slug-hash="WNVEGEv" data-pen-title="Untitled" data-user="uuylkesg-the-styleful" style="height: 300px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;">
  <span>See the Pen <a href="https://codepen.io/uuylkesg-the-styleful/pen/WNVEGEv">
  Untitled</a> by 山根大生 (<a href="https://codepen.io/uuylkesg-the-styleful">@uuylkesg-the-styleful</a>)
  on <a href="https://codepen.io">CodePen</a>.</span>
</p>
<script async src="https://cpwebassets.codepen.io/assets/embed/ei.js"></script>

`border-color: transparent;`は境界線の色のみを透明にします。

:::note
境界線の幅は実際にはあります。
:::

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/405182/c0199780-df63-eed2-9ec0-8b46d1bbbd4f.png)

# 注意点 🚨

こちらの記事にも紹介されていましたが、透明度の調整ができないことです。

https://qiita.com/7note/items/a5975366cef5e169506d

# 参考 ✨

- [MDN background](https://developer.mozilla.org/ja/docs/Web/CSS/background)

- [【初心者でもわかる】cssで使われる透明3種類の使い方](https://qiita.com/7note/items/a5975366cef5e169506d)

- [CSSのtransparent（トランスペアレント）で要素を透明にする](https://lpeg.info/html/css_transparent.html)

# 最後に
transparentについて少しは理解できました。
末尾にスペースを追加するだけのツールを作成

# ツール

これです。
https://wow74.github.io/convert-markdown-to-git/

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/604560/b45c4fbd-dadf-4721-6666-b734f5556222.png)

変更前に現在のmarkdownテキストを貼り付けて、変換ボタンを押すと
変更後に各行の末尾にスペースを追加したテキストが表示されます。
また、変換ボタン押下時に変更後のテキストをコピーします。

# 内容

タイトルの通りです。
文字列の末尾にスペースを追加するだけのツールです。

作成した経緯としてはGithubでのmarkdownのプレビューと
vs codeなどのプレビューに差があり、気になっていました。

見た目が違うところは何か所かありますが、その中でもテキストは改行しているのに
Githubのプレビューでは改行されていないというのがかなり気になっていました。

vscode　　　　　　　　　　　　　　　　　　Github
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/604560/2fdfe04a-1a48-acd7-6a99-2857b32da3df.png)

Githubで改行を認識させるには下記のやり方がありました。
- 末尾にスペースを2つつける
- 文字列と文字列の間を1行空ける
- \<br>をつける

>末尾にスペースを2つつける

毎回末尾にスペース追加するのめんどくさいな
マルチカーソルからのスペース追加をするにしても全行選択するのは行が多いとめんどくさそう

>文字列と文字列の間を1行空ける

意図的に空行を用意するのは問題ないけど、
改行のために空行用意してるとテキスト見づらそう

>\<br>をつける

テキスト見づらそう。めんどくさそう

どれも手作業でやるのはめんどくさそうでした。
テキストの見やすさに影響を与えないという点で末尾に半角スペースを追加するのがよさそうと思い、当ツールを作成しました。

# ツール使用

ツール使用前　　　　　　　　　　　　　　　　ツール使用後

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/604560/c84f8672-4c39-7c6e-162d-e402ce34a946.png)

ツール使用後　　　　　　　　　　　　　　　　　　vscode

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/604560/3e19644a-128c-9239-3cf2-fdd6b0ed1cef.png)

ツール使用前　　　　　　　　　　　　　　　　　　ツール使用後

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/604560/e1511382-d542-356a-1a2b-75c64bfd16ec.png)

ツール使用後　　　　　　　　　　　　　　　　　　　　vscode

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/604560/c2fbcc1c-4c7d-7502-a9ab-2769a1a1c93f.png)
Nursing Schools Near Me: Your Guide to Finding the Best Options

近くの看護学校: 最適な選択肢を見つけるためのガイド
正看護師 (RN) になることや、医療分野でのキャリアを追求することは、高貴でやりがいのある道です。始めたばかりでも、キャリアアップを目指している場合でも、近くの適切な看護学校を見つけることが大きな違いを生みます。選択できるプログラムが非常に多いため、どこから始めればよいか分からない場合があります。この記事では、近くの看護学校の選択肢を探り、最適なプログラムを選択するためのヒントを提供し、看護師になるという目標を達成するために必要な手順を概説します。

地元の看護学校を選ぶ理由
地元の看護学校を選ぶと、いくつかの利点があります。

利便性: 自宅に近いということは、通勤時間が短くなるため、時間とお金を節約できます。これは、学校と仕事や家族などの他の責任のバランスを取っている場合に特に重要になります。

地域とのつながり: 地元の学校に通うと、地元の医療提供者とのつながりを築くことができ、卒業後にインターンシップや就職の機会を探すときに役立ちます。

費用対効果: 州内または地元の授業料は、州外の学校に通うよりも手頃な場合が多いです。さらに、地元の学校に通いながら実家に住むと、生活費を抑えることができます。

臨床の機会: 看護プログラムでは、学生に実地経験を積ませるために臨床ローテーションが必要になることがよくあります。地元の学校は、地元の病院や診療所での実習を提供している場合があり、貴重な地元での経験を得ることができます。

看護プログラムの種類
近くの看護学校を探すときは、利用できるさまざまなタイプのプログラムを理解することが重要です。これらは次のとおりです。

准看護師 (LPN) プログラム:

通常、修了には 1 ～ 2 年かかります。

准看護師と医師の監督下で基本的な患者ケアを行い、准看護師としてのキャリアに向けて学生を準備します。

より高度な看護教育への足がかりになる場合があります。
看護学準学士号 (ADN) :

修了には通常 2 ～ 3 年かかります。

正看護師 (RN) になるための準備になります。

卒業生は NCLEX-RN 試験を受験して、正看護師の資格を取得できます。

看護学理学士 (BSN) :

徹底的なトレーニングと教育を提供する 4 年間の学位です。

高度な臨床スキルとリーダーシップ トレーニングを提供し、医療分野で高給の仕事やリーダーシップの役割への道を開きます。

現在、多くの雇用主が看護師に BSN を希望または要求しています。

RN から BSN へのプログラム :

すでに ADN を取得しており、BSN の学位を取得したい正看護師向けに設計されています。

多くの場合、オンライン プログラムまたはハイブリッド プログラムを通じて、1 ～ 2 年で修了できます。

看護学修士課程および博士課程 :

看護師 (NP)、麻酔科看護師 (CRNA)、または看護教育者の役割などの分野を専門にしたい人向けです。
通常、入学にはBSNが必要で、プログラムと学位に応じて2～5年かかります。
お近くの最高の看護学校の選び方
看護学校を選ぶときは、プログラムが自分に適していることを確認するために、次の要素を考慮してください。

1. 認定
看護学校が、看護教育認定委員会（ACEN）や大学看護教育委員会（CCNE）などの公認機関によって認定されていることを確認してください。これにより、プログラムの質と連邦政府の財政援助の資格が保証されます。

2. NCLEX合格率
NCLEX-RN合格率の高い学校を探してください。NCLEXはRNのライセンス試験であり、合格率が高いということは、プログラムが学生を試験と看護のキャリアに十分に備えさせていることを示しています。

3. 臨床ローテーションの機会
プログラムが地元の病院や医療施設と強力なパートナーシップを結んでいるかどうかを確認してください。実践的な臨床経験は看護教育において重要であり、地元の臨床機会は卒業後の就職につながる可能性があります。
4. プログラムの長さと柔軟性
プログラムの修了にかかる期間と、フルタイムまたはパートタイムの登録に関して柔軟性があるかどうかを確認します。学校によってはオンラインまたはハイブリッドコースを提供している場合があり、学校に通いながら働く必要がある場合に適したオプションです。
5. 授業料と財政援助
さまざまな学校の授業料と料金を比較します。多くの学校が看護学生向けに奨学金、助成金、または財政援助パッケージを提供しています。サービスが行き届いていない地域で働く予定の場合は、ローン免除プログラムなどのオプションを必ず検討してください。
6. サポートサービス
個別指導、カウンセリング、キャリアサービス、メンターシッププログラムなどの学術サポートサービスを提供する学校を探します。これらのリソースは、学習を成功させ、労働力に移行するのに役立ちます。
7. 場所とコミュニティ
学校が、快適に生活し、勉強できるコミュニティにあるかどうかを検討します。また、卒業後に就職の機会があることを確認するために、看護師の地元の雇用市場を調査することも重要です。
お近くのトップ看護学校: 見つけ方
お近くの看護学校を見つけるには.
Windows11でHDD/SSDディスクのフォーマット

# はじめに
TVの録画用に使っていたSSDやHDDをWindowsで使いたい場合、フォーマットが必要。下記サイトより「ディスクの管理」でフォーマットできることはわかったのだが、そもそもの「ディスクの管理」にたどり着かない。

https://www.fff-no1.co.jp/support/2023/09/21/hdd%e3%81%ae%e5%86%8d%e3%83%95%e3%82%a9%e3%83%bc%e3%83%9e%e3%83%83%e3%83%88%e6%89%8b%e9%a0%86windows10-windows11/#:~:text=HDD%E3%81%AE%E5%86%8D%E3%83%95%E3%82%A9%E3%83%BC%E3%83%9E%E3%83%83%E3%83%88%E6%89%8B%E9%A0%86%20%28Windows10%2FWindows11%29%20HDD%E3%82%92%E3%83%91%E3%82%BD%E3%82%B3%E3%83%B3%E3%81%8C%E8%AA%8D%E8%AD%98%E3%81%97%E3%81%AA%E3%81%8B%E3%81%A3%E3%81%9F%E3%82%8A%E3%80%81TV%E3%81%A7%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%A6%E3%81%84%E3%81%9FHDD%E3%82%92%E3%83%91%E3%82%BD%E3%82%B3%E3%83%B3%E3%81%A7%E4%BD%BF%E7%94%A8%E3%81%99%E3%82%8B%E5%A0%B4%E5%90%88%E3%81%AA%E3%81%A9%E3%81%AF%E3%80%81%E5%86%8D%E3%83%95%E3%82%A9%E3%83%BC%E3%83%9E%E3%83%83%E3%83%88%E3%81%8C%E5%BF%85%E8%A6%81%E3%81%AB%E3%81%AA%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82,%E3%81%9D%E3%81%AE%E9%9A%9B%E3%81%AF%E4%B8%8B%E8%A8%98%E3%81%AE%E6%89%8B%E9%A0%86%E3%81%A7%E3%83%95%E3%82%A9%E3%83%BC%E3%83%9E%E3%83%83%E3%83%88%E3%82%92%E8%A1%8C%E3%81%A3%E3%81%A6%E3%81%8F%E3%81%A0%E3%81%95%E3%81%84%E3%80%82%20%E2%91%A0%E3%83%87%E3%82%B9%E3%82%AF%E3%83%88%E3%83%83%E3%83%97%E7%94%BB%E9%9D%A2%E3%82%92%E9%96%8B%E3%81%8D%E3%81%BE%E3%81%99%E3%80%82%20%E2%91%A1%E3%83%87%E3%82%B9%E3%82%AF%E3%83%88%E3%83%83%E3%83%97%E7%94%BB%E9%9D%A2%E3%81%AE%E5%B7%A6%E4%B8%8B%E3%80%81%E3%82%82%E3%81%97%E3%81%8F%E3%81%AF%E3%82%B9%E3%82%BF%E3%83%BC%E3%83%88%E3%83%9C%E3%82%BF%E3%83%B3%E4%B8%8A%EF%BC%88%E7%94%BB%E5%83%8F%E3%81%AE%E4%B8%B8%E4%BB%98%E8%BF%91%EF%BC%89%E3%81%A7%E3%80%81%E5%8F%B3%E3%82%AF%E3%83%AA%E3%83%83%E3%82%AF%E3%83%BB%E9%95%B7%E6%8A%BC%E3%81%97%E3%82%BF%E3%83%83%E3%83%97%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%20%E2%91%A2%E3%83%A1%E3%83%8B%E3%83%A5%E3%83%BC%E3%81%8B%E3%82%89%E3%80%8C%E3%83%87%E3%82%A3%E3%82%B9%E3%82%AF%E3%81%AE%E7%AE%A1%E7%90%86%E3%80%8D%E3%82%92%E9%81%B8%E6%8A%9E%E3%81%97%E3%80%81%E3%80%8C%E3%83%87%E3%82%A3%E3%82%B9%E3%82%AF%E3%81%AE%E7%AE%A1%E7%90%86%E3%80%8D%E7%94%BB%E9%9D%A2%E3%82%92%E8%A1%A8%E7%A4%BA%E3%81%97%E3%81%BE%E3%81%99%E3%80%82

# Windows11でのディスクの管理へのたどり方

1. 「Windowsボタン」→「すべてのアプリ」をクリック
1. 「Windowsツール」
1. 「コンピュータの管理」→「ディスクの管理」

「ディスクの管理」で無事フォーマット完了。
ちなみに、検索画面で「ディスクの管理」と打っても直接たどり着けなかった。

以上
Django モデルからデータを取得したら、QuerySetが返ってくる

## 問題の発生
Djangoにて、Todoアプリを作成している。
モデルに保存してあるデータを取得しようと思い以下のコードを記述した。
```python
def get(self,request): 
    form = TodoForm(request.POST or None) 
    todo_data_list = DataField.objects.order_by('deadline_date') 
    print(todo_data_list)

    #結果
    #<QuerySet [<DataField: DataField object (3)>, <DataField: DataField object (4)>, <DataField: Data...]>
```
このようにQuerySetとして出力される。todo_data_listをそのままテンプレートに渡したいと考えていたので、QuerySetだと厄介だ。（メリットはあるが、初学者には手厳しい・・・）

:::note
Djangoからデータを取得すると、QuerySetとして返ってくる。メリットとしては、QuerySetとして取得すると、QuerySetからデータを必要なときに必要な量で取得できるので非常に効率的となる。また、様々な条件をつけてデータを取得することができる、等が挙げられる。
:::

## 解決策
### for文で回して取得する
QuerySetで取得した後、QuerySetをfor文で回すとデータを取得できる
```python
def get(self,request): 
    form = TodoForm(request.POST or None) 
    todo_list =[]
    Registration_date_list = []
    deadline_date_list = []
    todo_data_list = DataField.objects.order_by('deadline_date') 
    if todo_data_list: 
        for todo_data in todo_data_list:
            todo_list.append(todo_data.task)
            Registration_date_list.append(todo_data.registration_date)
            deadline_date_list.append(todo_data.deadline_date)
    
```

### values()メソッドを使用する
Django特有のメソッドである`values()`メソッドを使用することで、辞書形式で取得できる。

```python
class TodoViews(View):
    def get(self,request):
        form = TodoForm(request.POST or None)
        todo_data_list = DataField.objects.order_by('deadline_date').values('task', 'registration_date', 'deadline_date')
        print(todo_data_list)

# 結果
#<QuerySet [{'task': 'aaaaaaa', 'registration_date': datetime.date(2024, 10, 17), 'deadline_date': datetime.date(2024, 10, 17)}, {'task': '買い物', 'registration_date': datetime.date(2024, 10, 17), 'deadline_date': datetime.date(2024, 10, 30)}]>
```

:::note warn
Pythonの標準メソッドであるdict.values()と混同しないように。Djangoのvalues()メソッドは、指定したフィールドの値を辞書形式で取得するメソッド。また、辞書形式で取得したデータには、モデルのメソッドやカスタムプロパティは使えない。
:::

## 感想
・for文で回すより`values`を使用したほうが効率的に感じる。
・valuesは辞書形式で取得できる

初学者の方の参考になれば幸いです
Lean4のType*で迷ったのでメモ

Lean4とMathlib4の勉強中に```Type*```というワードに出会いました。初歩的な事かもしれませんが、この意味を調べるのに手間取ったので備忘録としてメモを残そうと思います。

# バージョン
leanprover/lean4:v4.13.0-rc3

# ```Type*```について

```Type*```には以下のページで遭遇しました。

https://github.com/leanprover-community/mathlib4/blob/7ca6dfcd941c73f5993541abab8addd016f5208c/Mathlib/NumberTheory/FunctionField.lean#L54-L55

Lean4には```Type 1```や```Type 2```、```Type 3```といった型があるので、```Type*```はこれらを一般化した型だと予想できそうです。
この詳細を調べようと思ったのですが、そのまま```Type*```と検索しても記号の```*```がワイルドカードとして扱われてしまうのでほしい結果が得られません。

一応、"Lean Type star"とか"Lean Type asterisk"で検索してみましたが、見つかりませんでした。

もう少し広く"Lean Type"で検索してみると、ようやくそれらしいドキュメントがありました。

https://leanprover.github.io/theorem_proving_in_lean/dependent_type_theory.html

```Type 1```や```Type 2```の一般化で大体合っているようです。

# ```constant```について

ただ、こちらのドキュメントは内容が古いようで、掲載されているサンプルコードをローカルで試してみてもエラーとなってしまいました。

```lean:サンプルコード
constant α : Type _
#check α

constant β : Type*
#check β
```

```text:Lean Infoview
All Messages (4)
Temp.lean:1:0
unexpected identifier; expected command
Temp.lean:2:7
unknown identifier 'α'
Temp.lean:4:11
unexpected token ':'; expected command
Temp.lean:5:7
unknown identifier 'β'
```

```constant```はLean3のキーワードで、Lean4では削除されたようです。
この辺の違いが、Lean初学者にとっては難しいですね。

代わりに```axiom```を使えと書いてあるので、そのように書き換えてみます。

```Lean:サンプルコード（修正後）
axiom α : Type _
#check α

axiom β : Type*
#check β
```

```text:Lean Infoview
All Messages (3)
Temp.lean:2:0
α.{u_1} : Type u_1
Temp.lean:4:15
unexpected token '#check'; expected term
Temp.lean:5:7
unknown identifier 'β'
```

ダメなんかい。

最初に```Type*```と出会ったコードを参考に確認用のコードを作ってみます。

```Lean
import Mathlib.Topology.Algebra.Valued.ValuedField
variable (Fq F : Type*) [Field Fq] [Field F]
#check Fq
```
```text:Lean Infoview
All Messages (1)
temp.lean:3:0
Fq : Type u_1
```

これはうまく動きました。
```Type*```だけではダメなようです。

# ```Mathlib.Tactic.TypeStar```について

頑張って色々調べてみたところ、```Mathlib.Tactic.TypeStar```がimportされている必要があるようです。

https://leanprover-community.github.io/mathlib4_docs/Mathlib/Tactic/TypeStar.html#%C2%ABtermType*%C2%BB

"Type star"では検索に出ませんでしたが、"TypeStar"だと出ました……。

上の例では```Mathlib.Topology.Algebra.Valued.ValuedField```の中で```Mathlib.Tactic.TypeStar```がimport済みだったので、エラーが出なかったようです。

改めてサンプルコードを修正して確認してみます。

```Lean:サンプルコード（修正後その2）
import Mathlib.Tactic.TypeStar

axiom α : Type _
#check α

axiom β : Type*
#check β
```

```text:Lean Infoview
All Messages (2)
temp.lean:4:0
α.{u_1} : Type u_1
temp.lean:7:0
β.{u_1} : Type u_1
```

エラーは発生せず、無事に```β```の型を確認できました。
SwiftUI　ShareLinkの見た目変更方法

ShareLinkを簡単に実装はできますが、UIを変更したい場合があると思います。

その場合の実装です。


## サンプル実装
```ShareCustomText.swift
struct ShareCustomText: View {
    var body: some View {
        ShareLink(item: "Share Text") {
            HStack {
                Image(systemName: "square.and.arrow.up.circle.fill")
                Text("Share Link")
            }
            .frame(width: 200, height: 200)
            .border(Color.black, width: 2)
        }
    }
}
```

Buttonのような感じでレイアウトを変更することができるみたいです。
レイアウトの変更も簡単にできるので良さそうですね。
Environment Information

[Previous << Built-in Functions](https://qiita.com/flowcadence/items/e1528810ca4a72c8f521)
[Next >> Crypto](https://qiita.com/flowcadence/items/1bdc645b097a5efbb9cf)

https://qiita.com/flowcadence/items/3073d69c6e9895e68b5a#cadenceの言語仕様を学ぶ

<h1 id="Transaction-Information">Transaction Information</h1>

トランザクションの署名者のアドレスを取得するには、トランザクションの`prepare`フェーズに渡される、署名する各`Account`の、`address`フィールドを使用します。

現時点では、その他のトランザクション情報を取得できるAPIはありません。ご要望の場合は、issueでこの機能のリクエストをお願いします。

<h1 id="Block-Information">Block Information</h1>

ブロックに関する情報を取得するには、`getCurrentBlock` および `getBlock` 関数を使用します。

```ruby
view fun getCurrentBlock(): Block
```
  * 現在のブロック、すなわち現在実行中のトランザクションを含むブロックを返します。
```ruby
view fun getBlock(at: UInt64): Block?
```
  * 指定された高さのブロックを返します。ブロックが、`flow.DefaultTransactionExpiry - 10`（`590`ブロック）で定義されたアクセス可能な範囲内に存在する場合、正常に返されます。指定された高さのブロックが存在しない場合、または現在の封印されたブロックから`590`ブロック下というデフォルトのトランザクション有効期限の範囲外にある場合、この関数は`nil`を返します。

`Block`型には、識別子(ID)、高さ、タイムスタンプが含まれます。
```ruby
access(all)
struct Block {
    /** The ID of the block.
     * 
     *  It is essentially the hash of the block.
     */
    access(all)
    let id: [UInt8; 32]

    /** The height of the block.
     * 
     *  If the blockchain is viewed as a tree with the genesis block at the root,
     *  the height of a node is the number of edges between the node and the genesis block
     */
    access(all)
    let height: UInt64

    /** The view of the block.
     * 
     *  It is a detail of the consensus algorithm. It is a monotonically increasing integer
     *  and counts rounds in the consensus algorithm. It is reset to zero at each spork.
     */
    access(all)
    let view: UInt64

    /** The timestamp of the block.
     * 
     *  Unix timestamp of when the proposer claims it constructed the block.
     * 
     *  NOTE: It is included by the proposer, there are no guarantees on how much the time stamp can deviate from the true time the block was published.
     *  Consider observing blocks’ status changes off-chain yourself to get a more reliable value.
     */
    access(all)
    let timestamp: UFix64
}
```

翻訳元

https://cadence-lang.org/docs/language/environment-information

***
<b>[Previous << Built-in Functions](https://qiita.com/flowcadence/items/e1528810ca4a72c8f521)
</b>

[Flow blockchain / Cadence version1.0ドキュメント](https://qiita.com/flowcadence/items/3073d69c6e9895e68b5a) (Environment Information)

<b>[Next >> Crypto](https://qiita.com/flowcadence/items/1bdc645b097a5efbb9cf)</b>
[Rust]エラトステネスの篩を使って素数を生成

エラトステネスのふるいを使って素数を発生するプログラムです。

Rustで書いてみました。

RustはPythonと違って、型にうるさいですね。こうでもしないとバグが取れないのかもしれませんが。

コンパイル：`rustc sieve.rs`
実行:`./sieve N`

```rust:sieve.rs
use std::env;
fn main() {
    let args: Vec<String> = env::args().collect();
    let n=&args[1];
    let n:i32=n.parse().unwrap();
    let f:Vec <i32>=sieve(n);
    let l:i32=f.len() as i32;
    println! ("{:?} : {:?} ",l,f);
}

fn sieve(n:i32)->Vec<i32> {
  let mut tab:Vec<i32>=(2..=n).rev().collect();
  let mut l:Vec<i32>=vec![];
  while !tab.is_empty() {
    let v:i32=match tab.pop() { Some(value)=>value, None=>1 };
    l.push(v);
    tab.retain(|&x| x%v !=0);
    }
  l
}
```
新米プログラマーとしての体験と初心者向けの最初のアドバイス

新米プログラマーとしての体験と初心者向けの最初のアドバイス
こんにちは、Qiitaコミュニティ！私は最近プログラミングを始めたばかりですが、自分の経験や学んだことを同じように学び始めた人たちと共有したいと思います。それでは、始めましょう！

なぜプログラミングを始めたのか
私と同じように、昔からテクノロジーに興味があり、日常的に使うアプリやウェブサイトがどのように作られているのかを知りたかったからです。プログラミングはまさに身につけるべきスキルだと感じたので、飛び込むことにしました！少し調べた後、[あなたが最初に学んでいる言語、例：Python、JavaScriptなど]を選びました。この言語は初心者にも親しみやすく、幅広く使われていることが決め手でした。

初心者として直面した課題
もちろん、プログラミングを学ぶにはいくつかの課題がつきものです。私が苦労した点と、その対処法をいくつか紹介します。

文法エラー: 最初は、なぜコードがうまく動かないのか理解するのが難しかったです。すぐに気づいたのは、セミコロンや括弧が1つ足りないだけで、すべてが壊れてしまうこと。私のアドバイスとしては、焦らずエラーメッセージをしっかり読み解くことです。多くの場合、何が問題なのかをそのまま教えてくれます！

圧倒される感じ: プログラミングには学ぶことが山ほどあり、時々その量に圧倒されることもあります。私にとって役立ったのは、一度に1つのことに集中することでした。大きな課題を小さな部分に分割すると、取り組みやすくなりました。

最初のアドバイス: 基本をしっかりマスターしよう
複雑なプロジェクトにすぐ取り掛かりたい気持ちも分かりますが、まずは基本をしっかりと理解することが非常に重要です。変数やループ、関数といった基本的な概念を理解しておくと、後で他のことがずっと簡単に感じられるはずです。私がループを理解するのに役立った簡単なコード例を紹介します。

python
Copy code
# 1から5までの数字を出力するPythonの簡単なループ
for i in range(1, 6):
    print(i)
ループの仕組みが分かれば、さまざまな場面で応用でき、コードの効率を高めることができます。

私を助けてくれたツール
以下は、私がプログラミングを始めたときにとても役立ったツールです。

VS Code: コードの記述やテストに使える優れたテキストエディタ。
GitHub: プロジェクトを保存し、他の人とコラボレーションできるプラットフォーム。
Stack OverflowとQiita: 行き詰まったときに、すばやく回答や説明を提供してくれるコミュニティ。
最後に
プログラミングを学ぶのは短距離走ではなくマラソンです。進歩が遅いと感じることもありますが、練習を積み重ねることで少しずつ成長します。初心者の皆さんへのアドバイスは、難しいと感じてもあきらめずに続けることです。振り返ってみると、自分がどれほど多くを学んだかに驚くはずです！

ぜひ、コメントであなた自身の経験やアドバイスを共有してください。みんなでこのプログラミングの旅を応援し合いましょう！

読んでくださってありがとうございます！
初めて知ったIT用語 4月〜9月

AP取った時に結構いろんな用語を知ったつもりでしたが、当然まだまだ知らないこと、忘れてしまっていたことがたくさんあるので4月〜9月の間に新しく触れた印象に残っている用語をまとめます。（インフラ関連が特に弱いです）
これを読めば半年を一瞬で復習できてお得というわけです。
具体的なサービス・フレームワーク名というよりも仕組みみたいなところについて書いています。

## 知らなかった用語
##### ベアメタル（クラウド）
仮想化されていない、上に何も載せてないサーバーのこと。要は丸々置いてあるサーバーを丸々借りるようなこと

##### パーティション
テーブルデータを特定のカラムの値等を基準に分割して格納すること。これによりDBのパフォーマンスが上がる。

##### NFS
UNIX系のOSで利用されるファイル共有システム。複数のホストからファイルを共有することができるのでコンテナ・仮想基盤のファイル共有に使われる。

##### ESB(Enterprise Service Bus)
企業内のシステム間のデータ交換・共有のためのアーキテクチャ。これによりサービス指向アーキテクチャ(SOA)が実現される。

##### GSLB(Global Server Load Balancing)
リージョンを跨いだデータセンター間で負荷分散を行うLB

##### LBaaS
クラウド型ロードバランサー、関連に CDN(Content Delivery Network)など

##### BFF(Backend For Frontend) architecture
バックとフロントの間に「フロントのためにデータを加工するサーバ」を用意することで、マイクロサービスにおけるフロントエンドの負担を減らすアーキテクチャ

##### ISAC
特定の業界内の情報共有と分析を行う組織。セキュリティ関連の文脈がメイン。

##### DTO(Data Transfer Object)
DAO(Data Access Object)を拡張したもの。型の異なるデータなどをビジネスロジックでそのまま使えるような単位で管理するクラス。Getter, Setterなどを用意する。

##### インターリーブ(interleave)
データを扱う際にそれを不連続領域に格納したり、不連続に送信したりすることで性能を上げること。

##### SFTP サーバ
SSHを利用して送受信することで安全にファイルを送受信するサーバ

##### PoC(概念実証)
サービスが実現可能かをシステム的に検証する作業

##### .gz, .iso, .tar
UNIX 互換 OS で用いられる GZIP によって圧縮されたファイル
ISO 準拠のファイル
複数のファイル・フォルダをまとめたファイル（アーカイブファイルの一種）

##### スロットル
一定時間内に送信できるリクエスト数を制限するプロセス

##### ポーリング
複数の機器の通信競合等を避けるために「メインシステムが各ノードに一定周期で問い合わせ->それに対して各ノードが応答」する仕組み

##### S-in（サービスイン）
正式なサービスの開始

##### JWT(JSON Web Token)
ヘッダ・ペイロード・署名からなる、改竄を検知するためのトークンベース認証

##### APM(Application Performance Management)
アプリケーションのパフォーマンス監視と関連ツールなどを指す（そのまま）

##### FQDN(Fully Qualified Domain Name)
省略が一切ないドメイン名、ipアドレスと1対1対応する

##### ディープリンク
クリックすることで、特定のアプリの特定のページに遷移するリンク
UXの向上に寄与する

##### HITL(Human In The Loop)
人間の入力がAIの学習・プロセスに影響を持つようにすることでパフォーマンスの向上を図ること



## 厳密には覚えてなかった英語由来のIT単語
##### オフセット
特定の何か（データ等）から目的の何かまでの距離

##### アノマリー
おかしい状態

##### オフショア
海外の開発拠点等を指す

##### ファンアウト
外向きのみの動作等を指す。入力を受け取らない処理の起動など。

##### カーディナリティ
多重度。１対１や１対多など、ER図のあれ。

## 忘れてた用語
##### gof デザインパターン
有名なデザインパターン集的なもの。結構各項目良し悪しある。

##### ORM(Object Relational Mapping)
DBをオブジェクト指向言語のオブジェクトにマッピングする技術。これによりDBの値が扱いやすくなる。
（関連　ActiveRecord, Data Mapper）
bitDPの初歩【競技プログラミング】

# はじめに
- 最近、dpに関して、[貰うdpと配るdp](https://qiita.com/kei_tnk/items/dbe3444b0f1be9b7b7a1)を取り上げたけど、また、AtCoderのDPまとめコンテストの[問題](https://atcoder.jp/contests/dp/tasks/dp_o)の解説を見ていたら、「bitDPを使って解くと良い」という言葉が出てきてしまったので、bitDPをやっつけることにする。
- とりあえず、さっぱり分からないので、qiitaでいくつか読んでみたら、[hiragaさんの投稿](https://qiita.com/karutetto332/items/90fc8186c915afd1e9e8)でなんとなくイメージが掴めた。
- dpのよくある形って、dp[遷移していく状態][何かの状態]だけど、前項の[遷移していく状態]が配列の「i番目」とかを「整数」で代表的に表すところ、[遷移していく状態]が「集合」となっていくことがポイントみたい。
- そして、集合の状態を表すのに、「bit表現」を使うと言うこと。bit表現は[bit全探索](https://qiita.com/kei_tnk/items/8183c62aa95332a38558)の考えと同じ模様。

# 問題例
- わかりやすさの観点から、dp配列が1次元配列になる問題として、[この問題](https://yukicoder.me/problems/no/698)を選びました。AtCoder以外のサイトは初めて使うかも。
    - N人(Nは偶数)の選手が1つのチームを組みます。
    - 選手iの戦闘力はA[i]です。
    - 選手は全員2人1組でペアを組みますが、i,jペアの戦闘力は、A[i]^A[j]になるので、例えば、同じ戦闘力同士で組んでしまうと、ペアの戦闘力は0となります。※ `^`は排他的論理和の演算子。
    - チームの戦闘力は各ペアの戦闘力の合計となります。
    - チームの最大戦闘力を答えなさい。
- 入力例
```
4 // 4人
1 2 3 4 // 各選手の戦闘力が 1 2 3 4
```
- 上記入力例の場合、答えは10となる。その時のペア同士の戦闘力の組は、(1,2)と(3,4)となる。
    - 1(0b001) ^ 2(0b010) = 3(0b011)
    - 3(0b011) ^ 4(0b100) = 7(0b111)

# 解答
- [配るdp](https://qiita.com/kei_tnk/items/dbe3444b0f1be9b7b7a1#%E9%85%8D%E3%82%8Bdp%E3%81%A7%E3%81%AE%E8%A7%A3%E7%AD%94%E4%BE%8B)で作りました。
- 配るdpをやっといて良かった！下記コードのmax関数の処理って、まさに過去投稿の配るdpのまんまだよね。
```swift
let N = Int(readLine()!)!
let A = readLine()!.split(separator:" ").map{Int($0)!}

var dp = [Int](repeating:0,count:1<<N)

for bf in 0..<(1<<N) { // bit全探索のフラグ管理だから、bitFlag ⇒ bf

    //選手a,bの組み合わせを追加(配るdp)
    for a in 0..<N {
        if bf & 1<<a != 0 {continue}
        for b in a+1..<N {
            if bf & 1<<b != 0 {continue} // まだa,bが選ばれていない場合のみ、
                                         // a,bのペアを評価し、チームの戦闘力に反映する
            
            dp[bf + 1<<a + 1<<b] = max( dp[bf + 1<<a + 1<<b] , dp[bf] + (A[a] ^ A[b]) )
            
        }
    }    
}

print(dp[1<<N - 1])
```
- yukicoderに提出してACでした。
- ちなみに、max関数内の`dp[bf] + (A[a] ^ A[b])`で、()を付ける事に注意！
- swiftでは、「+」と「^」の優先順位が同列だから、()を付けないと排他的論理和`^`が後から計算されちゃう！
    - 下表で上にある演算子ほど､優先順位が上
![スクリーンショット 0006-10-20 18.26.21.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2733720/aef3f272-39a9-953a-72d1-9bf5c39a7f4d.jpeg)
- 同じ問題をpythonで解いている人のコードを参考にしたけど、pythonでは、`^`の方が優先順位が上らしく、()なしでコードが書かれてたんだよね。気付くまで30分ほどかかっちゃったよ。

# おわりに
- とりあえず、bitDPの初歩は分かったよ！
- これで、AtCoderのDPまとめコンテストの方に戻ることが出来ます。
aws-auth ConfigMap から アクセスエントリへの移行

## はじめに
セルフマネージドAmazon Linuxノードを作成し、EKSクラスターに参加させる方法として、以下のAWS公式ドキュメントを参考にしていました。

https://docs.aws.amazon.com/ja_jp/eks/latest/userguide/launch-workers.html

手順内でノードを参加させるのに`aws-auth ConfigMap`を使用していますが、`aws-auth ConfigMap`は現在非推奨となっているようです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3570295/87cc6fdf-e8da-6461-81a2-d13f40ca7b00.png)

https://docs.aws.amazon.com/ja_jp/eks/latest/userguide/auth-configmap.html

`アクセスエントリ`を使用したノードの参加方法を記事に残しておきます。


## アクセスエントリとは
- EKS クラスターのバージョンが`1.23`以上で使用可能。
- アクセスエントリを使用する前に、クラスターの認証モードを`EKS API and ConfigMap`または`EKS API`に変更する必要がある。
- 一度`EKS API`に変更すると、`ConfigMap`や`EKS API and ConfigMap`に戻すことが出来ない。`EKS API and ConfigMap`から`ConfigMap`に戻すことも出来ない。

https://docs.aws.amazon.com/ja_jp/eks/latest/userguide/access-entries.html


## 手順
EKSクラスターの作成手順は割愛します。
認証モードを`EKS API and ConfigMap`または `EKS API`に設定する必要がある点だけ注意。

#### 1. AWS Management Consoleを使用してセルフマネージド型のLinuxノードを起動する
公式手順から変更は無いため、割愛します。

https://docs.aws.amazon.com/ja_jp/eks/latest/userguide/launch-workers.html

:::note info
スタックの作成が完了したら、`NodeInstanceRole`の値を控えておきましょう。
次のアクセスエントリの作成で必要になります。
:::

#### 2. アクセスエントリを作成する
###### ①アクセスエントリを作成するクラスターを選択する。

###### ②「アクセス」タブをクリックし(a)、「IAMアクセスエントリ」の「アクセスエントリの作成」をクリックする(b)。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3570295/c0f43703-68ee-112c-ed0b-fbd32942eba7.png)

###### ③アクセスエントリを作成する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3570295/c551b5c6-db6a-3bbc-0770-5df8a3f78f06.png)

| 設定項目 | 設定値 |
|:-:|:-:|
| IAM プリンシパル ARN | メモした「NodeInstanceRole」を入力する |
| タイプ - オプション | EC2 Linux |


###### ④アクセスエントリが作成されたことを確認する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3570295/2f129dab-09b3-e8ef-21e7-6cbe01a0ba96.png)

#### 3. ノードがクラスターに参加されていることを確認する

```bash
$ kubectl get node
NAME                                                STATUS   ROLES    AGE   VERSION
ip-xxx-xx-xxx-xxx.ap-northeast-1.compute.internal   Ready    <none>   XXm   v1.XX.X-eks-XXXXxxX
ip-xxx-xx-xxx-yyy.ap-northeast-1.compute.internal   Ready    <none>   XXm   v1.XX.X-eks-XXXXxxX
ip-xxx-xx-xxx-zzz.ap-northeast-1.compute.internal   Ready    <none>   XXm   v1.XX.X-eks-XXXXxxX
```
:::note info
スタック作成時に指定した「NodeAutoScalingGroupDesiredCapacity」の数だけ Pod が参加されていればOKです。
:::

## 最後に
IAM ユーザ・ロールの権限設定をAWS側だけで行えるようになりました。
設定変更も簡単なので、アクセスエントリへの移行をお勧めします。

本記事が少しでもお役に立てれば幸いです。
Type Hierarchy

[Previous << Crypto](https://qiita.com/flowcadence/items/1bdc645b097a5efbb9cf)
[Next >> Glossary(記号)](https://qiita.com/flowcadence/items/8e3287f9a4cd9b822065)

https://qiita.com/flowcadence/items/3073d69c6e9895e68b5a#cadenceの言語仕様を学ぶ

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3912821/916c78e9-0b5d-881b-6a28-d7c13eeb2ddd.png)

翻訳元

https://cadence-lang.org/docs/language/type-hierarchy

***
<b>[Previous << Crypto](https://qiita.com/flowcadence/items/1bdc645b097a5efbb9cf)
</b>

[Flow blockchain / Cadence version1.0ドキュメント](https://qiita.com/flowcadence/items/3073d69c6e9895e68b5a) (Type Hierarchy)

<b>[Next >> Glossary(記号)](https://qiita.com/flowcadence/items/8e3287f9a4cd9b822065)</b>
イーサネットケーブルとは

# 種類
### 本体との接続に用いる「LANケーブル」
>LANケーブルは、インターネット接続に使うスター型のイーサネットで、社内や家庭内のネットワーク構築に用います。多くの場面で利用されることから、イーサネットとLANケーブルを同義と認識するケースも少なくありません。
>
>他のケーブルと比べて低価格で、素材や長さの違いによる種類が豊富なため、使用環境に適した商品を選びましょう。劣化によりパフォーマンスが低下するため、扱い方や状態に注意が必要です。

#### ツイストペアケーブル
>平衡接続の1つであり、通常の平行線の様に撚り合わせていないものよりノイズの影響を受けにくい。古くからは電話線などに用いられていましたが、最近では`イーサネットLANケーブル等に採用`され、広く普及しています。

https://tohan-denshi.co.jp/technical-information/8291/#:~:text=%E5%B9%B3%E8%A1%A1%E6%8E%A5%E7%B6%9A%E3%81%AE1%E3%81%A4%E3%81%A7%E3%81%82%E3%82%8A%E3%80%81%E9%80%9A%E5%B8%B8%E3%81%AE%E5%B9%B3%E8%A1%8C%E7%B7%9A%E3%81%AE%E6%A7%98%E3%81%AB%E6%92%9A%E3%82%8A%E5%90%88%E3%82%8F%E3%81%9B%E3%81%A6%E3%81%84%E3%81%AA%E3%81%84%E3%82%82%E3%81%AE%E3%82%88%E3%82%8A%E3%83%8E%E3%82%A4%E3%82%BA%E3%81%AE%E5%BD%B1%E9%9F%BF%E3%82%92%E5%8F%97%E3%81%91%E3%81%AB%E3%81%8F%E3%81%84%E3%80%82%E5%8F%A4%E3%81%8F%E3%81%8B%E3%82%89%E3%81%AF%E9%9B%BB%E8%A9%B1%E7%B7%9A%E3%81%AA%E3%81%A9%E3%81%AB%E7%94%A8%E3%81%84%E3%82%89%E3%82%8C%E3%81%A6%E3%81%84%E3%81%BE%E3%81%97%E3%81%9F%E3%81%8C%E3%80%81%E6%9C%80%E8%BF%91%E3%81%A7%E3%81%AF%E3%82%A4%E3%83%BC%E3%82%B5%E3%83%8D%E3%83%83%E3%83%88LAN%E3%82%B1%E3%83%BC%E3%83%96%E3%83%AB%E7%AD%89%E3%81%AB%E6%8E%A1%E7%94%A8%E3%81%95%E3%82%8C%E3%80%81%E5%BA%83%E3%81%8F%E6%99%AE%E5%8F%8A%E3%81%97%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99%E3%80%82

### 高速でデータを送受信できる「光ファイバー」
>光ファイバーとは、インターネット回線で使うスター型イーサネットです。ガラスやプラスチックで作られた細い光の伝送路で、この線を束ねたものを光ファイバーケーブルといいます。
>
>光回線は、光ファイバーケーブルを使用したインターネット通信を指し、大容量データの高速通信が可能です。ケーブルの長さによる信号の劣化がなく、通信品質を下げるノイズの影響も受けにくいため、長距離でも安定した通信が行えます。

### テレビの信号を流す「同軸ケーブル」
>同軸ケーブルとは、イーサネット開発当初に使用されていたバス型のイーサネットです。主に映像や音声の伝達に用いられ、一般的にはアンテナと受信機をつなぐケーブルとして古くから普及しています。
>
>しかし、家庭内ではLANケーブルを使用した接続が主流であるため、日常で目にする機会は多くありません。
>
>銅線を中心に何層も管を重ねた構造で、電磁波の漏れや外部からの影響から守っています。また、ケーブル自体に柔軟性があり、折り曲げた状態でも特性の維持が可能です。

https://www.iodata.jp/column/nas/015/#:~:text=7.%E3%81%BE%E3%81%A8%E3%82%81-,%E3%82%A4%E3%83%BC%E3%82%B5%E3%83%8D%E3%83%83%E3%83%88%E3%81%A8%E3%81%AF%EF%BC%9F%E5%BD%B9%E5%89%B2%E3%81%A8%E7%94%A8%E9%80%94,%E3%82%8A%E6%9B%B2%E3%81%92%E3%81%9F%E7%8A%B6%E6%85%8B%E3%81%A7%E3%82%82%E7%89%B9%E6%80%A7%E3%81%AE%E7%B6%AD%E6%8C%81%E3%81%8C%E5%8F%AF%E8%83%BD%E3%81%A7%E3%81%99%E3%80%82,-%E9%96%A2%E9%80%A3%E8%A8%98%E4%BA%8B

LANケーブルはイーサネットケーブルの１種類

### CATとは
https://qiita.com/masatom86650860/items/e576fed2776626dd0ba4

# 感想
出典の表に出てきた10BASE-TなどとCATの関係性を知らなければならない。
VSコードでPrettierが効かない時の対処法

## はじめに
今回は、VSコードでの開発中にPrettierが効かない問題を解決する方法を備忘録として記録しておきます。開発しているときに、Prettierが正しく動作しているはずなのに、以下のように赤く表示されることはありませんか？

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2749225/1595c1b4-c17b-d707-8117-0e3279e0a4dc.png)

この記事では、その問題の解決方法を紹介します。

## 解決法
まず、VSコードの左下にある歯車アイコンをクリックし、設定を開きます。右上に次のようなアイコンが表示されるので、それをクリックしてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2749225/b1fd72ad-5b75-eb58-aad2-66603debebbc.png)

すると、以下のような settings.json ファイルが表示されるはずです。
```json:setting.json
{
  "[javascriptreact]": {
    "editor.defaultFormatter": "esbenp.prettier-vscode",
    "editor.tabSize": 2,
    "editor.formatOnSave": true
  },
  "[typescript]": {
    "editor.defaultFormatter": "esbenp.prettier-vscode",
    "editor.tabSize": 2,
    "editor.formatOnSave": true
  },
  "[typescriptreact]": {
    "editor.defaultFormatter": "esbenp.prettier-vscode",
    "editor.tabSize": 2,
    "editor.formatOnSave": true
  },
  "[c]": {
    "editor.defaultFormatter": "esbenp.prettier-vscode",
    "editor.tabSize": 2,
    "editor.formatOnSave": true
  },
  "editor.formatOnSave": true,
  "editor.defaultFormatter": "esbenp.prettier-vscode",
  "prettier.printWidth": 1000,
  "files.autoSave": "afterDelay",
  "explorer.compactFolders": false,
  "files.insertFinalNewline": true,
  "javascript.updateImportsOnFileMove.enabled": "always",
  "typescript.updateImportsOnFileMove.enabled": "never",
  "editor.fontSize": 15
}

```
この設定では、"editor.tabSize": 2 の部分がそれぞれの言語におけるタブのサイズを指定しています。今回の場合、私はTypeScriptのコードを書いていて、CSSファイルにコードを書いたときにPrettierが効かなくなりました。上記の設定をよく見ると、CSSファイルの設定がありません。そこで、以下のコードを追加してください。

 ```json
 "[css]": {
    "editor.tabSize": 2, 
    "editor.formatOnSave": true
  },
  ```
ここの変更を行うと、次のように赤い警告が消え、正常に表示されるはずです。
  ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2749225/28b588a6-6a14-ce39-4263-9d49f38135d5.png)

## 終わりに
Prettierが効かないと感じたら、まず settings.json を確認して、その言語の設定が適切に行われているかを見直してください。雑記事でしたがこの記事が役に立てば幸いです。
pip 一括更新

# 結論
以下のコマンドを使う
```
$ pip list -o -l | cut -d " " -f 1 | tail -n +3 | xargs -p
-n 1 pip install --upgrade
```
流れは以下の様になっている．
1. 仮想環境内の更新可能なパッケージのリストを出力
1. 空白区切りで1列目を出力
1. カラム名と区切り線を除くために3行目以降を出力
1. 各行に対して\<pip install -U>を行う

# 説明
一応各コマンドの説明を記載します．
- pip list
    - -o --outdated : 更新可能な(更新していない)パッケージのリストを出力
    - -l --local : 仮想環境内のパッケージのみ出力
- cut <file>
    - -d <hoge> : 区切り文字を指定．デフォルトはtab区切り
    - -f <num> : 取り出す列の指定
- tail
    - -n +<num> : num行目を含む，num行目以降を出力
- xargs <command>
    - -p : ドライラン．実行されるコマンドを出力．1度確認するためにも個人的に推奨(ただし，1つのコマンドごとに確認が入る)
    - -n <num> : <command>に渡す引数の最大値を指定

# 参考
- e8l. 「pipでパッケージ全体をアップデートする」.Github Gist,[https://gist.github.com/e8l/c20ab194091dd02fafe7](https://gist.github.com/e8l/c20ab194091dd02fafe7),(参照 2024/10/20)
- pip documentation v24.2.「pip list」,[https://pip.pypa.io/en/stable/cli/pip_list/](https://pip.pypa.io/en/stable/cli/pip_list/),(参照 2024/10/20)
- Ninton.「cutコマンドでタブ区切りの1列目を取り出すには」,[https://www.ninton.co.jp/archives/1993](https://www.ninton.co.jp/archives/1993),(参照 2024/10/20)
- @sugyan (Yoshihiro Sugi).「ファイルのn行目以降を表示する」.Qiita,[https://qiita.com/dameNingen_ganbaru/items/cc1a0146ec1bc40ce69e](https://qiita.com/dameNingen_ganbaru/items/cc1a0146ec1bc40ce69e),(参照 2024/10/20)
- @P-man_Brown.「【Linux】xargsコマンドの使い方」.Qiita,[https://qiita.com/P-man_Brown/items/c3f2634b7b5e08306c8f](https://qiita.com/P-man_Brown/items/c3f2634b7b5e08306c8f),(参照 2024/10/20)
AI機能を付けたSNSを開発してみました！

このSNSでは、**AI**と共に言葉を交わしながら、皆で会話を楽しむことができます。AIが会話に参加することで、より深く、質の高いコミュニケーションを体験していただけます。

---

ぜひご参加ください！  
**[新しいSNS Avis](https://avis.city/)**

---

## 特徴

- **ユーザー登録不要**：すぐに誰でも利用可能！
- **AIと共に楽しむ会話**：人間同士の会話にAIの分析、回答、解説を織り交ぜることで、深みのあるコミュニケーションが可能。
- **リアルタイム反応**：AIがコメントに反応するまで、少し時間がかかりますが（約5分）、その分、深い分析をしてくれます。

---

## 使い方

1. **コミュニティ作成**  
   コミュニティを作成すると、**自動的にAI分析**がONになります。

2. **コメント投稿**  
   投稿時、AI分析の**ON/OFF**を自由に切り替えることができます。

---

## 今後の展開

現在は**簡単な構造**にしていますが、機能は随時追加中です。  
皆さんのフィードバックを元に、さらに使いやすく、楽しいプラットフォームを目指していきます。今後の機能追加にご期待ください！

---
ExcelVBAの覚え書き

```
'CSVファイルを取り込む
Sub ImportUTF8CSV()
    Dim connection As Object
    Dim resultSet As Object
    Dim filePath As String
    Dim sheetName As String
    Dim query As String
    
    'ファイル選択ダイアログを表示してCSVファイルを選択
    filePath = Application.GetOpenFilename("CSVファイル (*.csv), *.csv", , "CSVファイルを選択してください")
    
    ' ファイル選択がキャンセルされた場合は処理を終了
    If filePath = "False" Then Exit Sub
    
    ' データを貼り付けるシート名を指定
    sheetName = "Sheet1"
    
    ' ADODB.Connectionオブジェクトを作成
    Set connection = CreateObject("ADODB.Connection")
    ' ADODB.Recordsetオブジェクトを作成
    Set resultSet = CreateObject("ADODB.Recordset")
    
    ' CSVファイルへの接続文字列を設定(ヘッダーなし、区切り形式、UTF-8)
    connection.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
                            "Data Source=" & Left(filePath, InStrRev(filePath, "\")) & ";" & _
                            "Extended Properties=""text;HDR=No;FMT=Delimited;CharacterSet=65001;"""
    
    ' 接続を開く
    connection.Open
    
    ' クエリを設定([]のなかでファイルパスからファイル名だけを取ってきている。)
    query = "SELECT * FROM [" & Mid(filePath, InStrRev(filePath, "\") + 1) & "]"
    
    ' クエリを実行してデータを取得（1:(CuresultSetorType)レコードの読み書きが可能で、削除されたレコードは認識できる、3:(LockType)更新が実際に行われるときにだけロックされます。）
    resultSet.Open query, connection, 1, 3
    
    ' データをシートに貼り付け
    ThisWorkbook.Sheets("Sheet1").Cells(1, 1).CopyFromRecordset resultSet
    
    ' 接続とレコードセットを閉じる
    resultSet.Close
    connection.Close
    
    ' オブジェクトを解放
    Set resultSet = Nothing
    Set connection = Nothing
    
    ThisWorkbook.Save  ' 現在のファイル名で保存
    
End Sub
‘‘‘
VueFesでpiniaについて得た学び（分割代入・ライブラリー）

## はじめに
昨日はVueFes 2024に参加してきました！
面白いテーマも多く、面白いスポンサーブースも多かったです。トークセッションの中では、「Piniaの現状と今後」というものがありました。

そのセッションで、今までpiniaについて知らなかったところが何点かあったためまとめてみました。

## 1. stateとactionをまとめて分割代入

piniaのsetup storeで開発をしていると、以下のような場面に出会うことがあります。
state要素（storeで定義したref, computedなど）は`storeToRefs`を使って分割代入ができますが、actions要素（メソッド）はstoreのインスタンスから直接分割代入を行う必要がありました。

そのため、毎回vueファイルには分割代入のために二つの記述が必要でした。

``` vue
<script lang="ts" setup>
import { useHomeStore } from '@store/homeStore.ts';
import { storeToRefs } from 'pinia';

const homeStore = useHomeStore();

// state分割代入
const { clickedPhoto, clickedImage, isOpened, photoIndex } = storeToRefs(homeStore);

// actions分割代入
const { getPhoto, setPhoto } = homestore;
</script>
```

少し不便だと思いつつ、特に対応策は見つかっていなかったところ、今回のセッションで以下の記事を元にした対応策について知ることができました。

https://zenn.dev/ytr0903/articles/18fe28b963a07c

要するに以下のような記述をすることで分割代入をまとめることができます。

``` ts
export const useProcessedHomeStore = () => {
  const store = useHomeStore()
  return { ...store, ...storeToRefs(store) }
}
```

こうすることで毎回vueファイルに`storeToRefs`のimportを記述しなくても良くなりました。
``` vue
<script lang="ts" setup>
import { useProcessedHomeStore } from '@store/processedHomeStore.ts';

const homeStore = useProcessedHomeStore();

// まとめて分割代入
const { clickedPhoto, clickedImage, isOpened, photoIndex, getPhoto, setPhoto } = homestore;
</script>
```

## 2. 更なるライブラリーの発見

### Pinia Plugin Persistedstate
piniaを使ってlocalstorageの管理を簡単に行うことができるライブラリーです。
piniaとlocalstorageの管理が別々になって管理が難しいと思っていたため、ぜひ使ってみたいです。

https://prazdevs.github.io/pinia-plugin-persistedstate/

### Pinia Colada
似たような名前のカクテルがあるらしいです。

このライブラリーを使うことで、tanstack queryのようにキャッシュの管理ができるらしいです。
現在やっているプロジェクトでpiniaとtanstack queryを両方使っていますが、状態管理がバラバラになっているとlocalstorageと同じく何が何を持っているかよくわからなくなることがあります。

https://pinia-colada.esm.dev/

このように、piniaを使って状態管理を一元化できるライブラリーも揃っていることがわかりました。

## おわりに
今回はスポンサーブースが楽しくてあまり多くのセッションは聞けていないのですが、その中でもいろいろな学びを得ることができました。
来年もまたVueFesいきたいな！
Windowsバッチにおける関数の使用方法

初めてバッチファイルを作成する中で、同じ処理を何度も実行する必要があり、他の言語でいうところの関数を使いたいと思い調べたのでメモしておきます。

### Windowsバッチにおける関数（的な存在）

#### 1.基本的な使い方
Windowsバッチで関数的なものを使用するためには、正確には「ラベル」というもの使用します。以下のようにラベルを定義し、
```
:ラベル名
実行したい処理を書く
```

「call :ラベル名」と呼び出すことでラベルの場所に処理が**ジャンプ**します。
```bat:aisatsu.bat
call :OHAYO
echo KONNITIHA
exit /b

:OHAYO
echo OHAYO
exit /b
```
実行結果
```
OHAYO
KONNITIHA
```
処理の流れは以下の通りです。ラベルで関数的な使い方ができていることがわかります。

①処理開始
②OHAYOラベルを呼び出す
③OHAYOを出力
**④exit /bにぶち当たるので呼び出し元に実行権が返る**
⑤②の次の処理のKONNITIHA出力処理を実行
⑥exit /bにぶち当たるので処理終了

ただし「call :ラベル」はあくまでラベルの場所に処理が移るだけなので、ラベル内処理の最後にexit /bを書かないとそのまま処理が下に抜けていってしまうため注意が必要です。（上で「ジャンプ」を強調したのはこのためです）
```bat:aisatsu.bat
call :OHAYO
echo KONNITIHA
exit /b

:OHAYO
echo OHAYO
REM exit /bがないので下のKONBANHAラベルが実行されてしまう

:KONBANHA
echo KONBANHA
```
実行結果
```
OHAYO
KONBANHA
KONNITIHA
```

#### 2.引数の渡し方
関数には当然引数も渡したくなると思います。
引数を渡す時は、ラベル名の後ろに書くだけです。
受け取る時は、ラベル内で「%1」、「%2」...を使用します。（数字は引数を渡す順番に対応します）

```bat:aisatsu.bat
set name=Qiita
echo OHAYO %name%
echo KONNITIHA
exit /b

:OHAYO
set name=%1
echo %name% OHAYO
exit /b
```
実行結果
```
Qiita OHAYO
KONNITIHA
```

#### 3.戻り値の受け取り方
関数なので戻り値も受け取りたくなると思います。
ラベル内のexit /b の後ろに戻り値を書き、呼び出し元のcall文の次で%errorlevel%を受け取ってあげると戻り値を取得できます。
```bat:tashizan.bat
@echo off
 
set number1=1
set number2=2
call :TASHIZAN %number1% %number2%
set result=%errorlevel%
echo result is %result%
exit /b
 
:TASHIZAN
set number1=%1
set number2=%2
set /a result=%number1%+%number2%
exit /b %result%
```
実行結果
```
result is 3
```

errorlevelという名前から、本来は以下のように処理の成功/失敗を判定する用途のようですが、関数の戻り値的に利用することができます。
```example.bat
@echo off

call :CHECK
set result=%errorlevel%

REM 戻り値で成功/失敗を判定して処理を分岐する
if %errorlevel%==1 (
 echo error
 exit /b
)

if %errorlevel%==0 (
 echo success
)
exit /b

:CHECK
set file=%~dp0file1

if not exist %file% (
 REM ファイルが存在しなかったら1を返す
 exit /b 1
) else (
 REM ファイルが存在したら0を返す
 exit /b 0
)
```
:::note warn
注意
errorlevelに設定できる値について
:::
errorlevelに設定できるのは数値だけで、文字列を設定することはできません。以下例では:GET_FULL_NAMEに姓名を渡してフルネームを取得しようとしていますが、errorlevelとして0が返ってきてしまいます。

```bat:getFullName.bat
@echo off
 
set familyName=Qiita
set firstName=Taro
call :GET_FULL_NAME %familyName% %firstName%
set fullName=%errorlevel%
echo fullName is %fullName%
exit /b
 
:GET_FULL_NAME
set fullName=%1 %2
REM フルネームを返したいが、、、
exit /b %fullName%
```
実行結果
→0が出力されています。
```
fullName is 0
```
処理結果で文字列がほしい時は、errorlevelとして返すのではなくラベル処理内で変数に設定してあげる等の対応が必要になります。

```bat:getFullName.bat
@echo off
 
set familyName=Qiita
set firstName=Taro
call :GET_FULL_NAME %familyName% %firstName%
echo fullName is %fullName%
exit /b
 
:GET_FULL_NAME
REM ここで変数fullNameに設定する
set fullName=%1 %2
REM exit /bの後ろには何も書かない
exit /b
```
実行結果
```
fullName is Qiita Taro
```

#### 補足　「call: ラベル名」と「goto :ラベル名」の違いについて
ラベルを呼び出す方法には、「call」の他に「goto」もあります。両者の違いは呼び出し元に処理が戻るか戻らないかです。「goto」を使用するとジャンプ先に行ったっきりで呼び出し元に戻ってきません。
先ほどのバッチのcallをgotoに変えて実行すると何も出力がされません。

```bat:getFullName.bat
@echo off
 
set familyName=Qiita
set firstName=Taro
REM callをgotoに変更
goto :GET_FULL_NAME %familyName% %firstName%
echo fullName is %fullName%
exit /b
 
:GET_FULL_NAME
set fullName=%1 %2
exit /b
```
実行結果
→呼び出し元に処理が戻らず「echo fullName is ~」が実行されないので、何も出力されない
```
```
今日Excelが死んだ。操作誤りでバックアップが飛んだ。

Qiita(0)記事一覧（自己）
https://qiita.com/kaizen_nagoya/items/58db5fbf036b28e9dfa6

記事の集計をしていた。
Vies準のならびかえを記録した後、
いいね準の並べ替えをした後に起こった。

順番を１から連続データにするために１というキーを押したときに、他にコントロールキーをおしていたらしく、Excelが死んだ。

作業途中のファイルが残っているはずなのだが、次の操作をあやまり、１週間前のデータに戻った。

# Recover 1
幸い、記事は保存してあり、Vies順のMarkdowwn記述から、該当するシートは復活した。

残念なのは、coding, 品質、仮説などに登録した項目がすべて消えた。

疲れているときは、保存して休憩をとらなきゃってなった。

疲れているときほど操作誤りが多い。

なにしてるんだか。



# Recover 2
新しい記事は、X(Twitter）で投稿している。
今日の投稿をさかのぼっていく。

5つの表の6つの記事が回復できた。

AUTOSAR, coding, 品質, 新人、docker

その前の日集計をしていたのは、

水の資料集(0)　方針と成果
https://qiita.com/kaizen_nagoya/items/f5dbb30087ea732b52aa

は、最新のデータを記事にはりつけてなかった。残念。
項目はQiitaとX(Twitter)の両方で検索してみる。

官公庁・学校・公的団体（NPOを含む）システムの課題、官（０）
https://qiita.com/kaizen_nagoya/items/04ee6eaf7ec13d3af4c3

も同様。泣）

# Recover 3

今日の昼から、変更しただけの記事は、X(Twiter）で投稿していない。泣）

修復方法としては、ブラウザの履歴をたどるしかないかも。
オブジェクト指向について

■オブジェクト指向とは
工場のようにパーツ化して、完成品を組み立てるイメージ
同じパースは複製して使いまわしていく

■三大原則
①カプセル化
②継承
③多態性（ポリモーフィズム）

■オブジェクト、クラス、インスタンスの関係
オブジェクト⇒クラス、インスタンス合わせたもの。
クラス⇒オブジェクト（インスタンス）の金型。人が定義するが、実際にこれが動くわけではない。
インスタンス⇒クラスからPCに指示を出せるようにコンパイル化したもの
【Git】ブランチ操作 まとめ

備忘録です。

## ローカルブランチへの操作
・ブランチ名変更
```
$ git branch -m 古いブランチ名 新しいブランチ名
```


■ブランチの切り方
ブランチを切りたい親ブランチに移動する
```$ git branch [branch_name]```

プッシュする
```$ git push origin [branch_name]```
※origin:リモートリポジトリ名のデフォルト設定

■ブランチの削除
リモートリポジトリのブランチ削除
```$ git push origin --delete [branch_name] ```

ローカルリポジトリのブランチ削除
```$ git branch -d [branch_name]```

■直前のコミット取り消し
```$ git reset --soft HEAD^```

■addの取り消し（特定ファイル）
```git rm --cached -r [file_name]```
※「r」はリモート追跡ブランチ一覧表示

■コミットを結合させる
```$ git rebase -i HEAD~~~```
または
```$ git rebase -i HEAD~3```
※コミット頭から統合させたい分「~」をつける
※「i」はincluedの略

するとテキストエディタが開く
```
pick 8f45q2c test1
pick c12dr5b test2
pick 526yt82 test3

# Rebase ed7420a..71a6940 onto ed7420a
#
....
```
統合したいコミットを「pick→s」に変更する
※エディタの編集コマンド（「i」:編集, 「escボタン」→「:wq」:エディタを閉じる）
```
pick 8f45q2c test1
s c12dr5b test2
s 526yt82 test3
```
あとはコミットメッセージを統合するためのエディタが開くので、修正して完了

### コミット間の差分ファイル名をちゅうしゅつ
```
git diff --name-only <コミットA> <コミットB> >> <出力先ファイル>
```
ローカルからリモートの作業ディレクトリにgitで自動更新かける方法

# 概要
AWS EC2のLinuxへファイル編集を行う際、VScodeのremote-sshを使用していたのですが、
このremote-sshがリソースをバカバカ食ってサーバーを落とすことが多々ありました。

そこで別の方法を模索した際に、VScodeでローカル環境を編集して、
そのままVScodeからリモート環境にpushする方法がうまくいきました。
その際問題点などがあったので、備忘録として記載していきます。

前提条件
・ローカルPCからリモートに対してssh接続できる
・ローカル/リモートにgit環境を構築している
・webapplicationの作成で/var/www/test 配下を使用

## ①リモート環境にベアリポジトリを作成
:::note info
ベアリポジトリ(bare repository):
gitの変更記録を保持するリポジトリ。基本的にpushするリポジトリはベアリポジトリである必要がある。対するノンベアリポジトリと違い作業ディレクトリがない。
:::
```
$ cd ~/var/www/test/repo/remote.git　※フォルダなかったのでmkdirで作成
$ git init --bare
```

一応ベアリポジトリとなっているか確認
```
$ git config --get-all core.bare
true　※trueとなっていればベアリポジトリ
```
もしノンベアリポジトリであれば下記で変更
```
$ git config core.bare true
```

## ② リモート環境にノンベアリポジトリを作成
```
$ cd ~/var/www/test
$ git init
$ git pull repo/remote.git
```

## ③ ベアリポジトリに更新があった際、ノンベアリポジトリを自動更新させる
:::note info
gitのhookという仕組みで自動更新をおこなうことができます
（pushが行われた際、/.git/hooks/post-receive のスクリプトが実行される）
:::
```
$ cd ~/var/www/test/repo/remote.git/.git/hooks
$ mkdir post-receive
$ vi post-receive
```
以下内容を追記
```
#!/bin/sh

cd ~/var/www/test || exit
unset GIT_DIR
git pull repo/remote.git
```
:::note warn
パーミッションも変更しておくこと！
:::
```
$ chmod 755 post-receive
```
## ④ローカル環境からpush 
ローカル環境にリモートリポジトリを落としてくる(任意の作業場所）
```
$ git init
$ git clone ssh://ec2-aws/var/www/test/repo/remote.git
※ssh接続のconfig設定で"ec2-aws"をhostとして登録してます
```
適当にpushをしてみる
```
$ git remote add ec2 ssh://ec2-aws/var/www/test/repo/remote.git
$ git push ec2 master
```
無事ノンベアリポジトリの作業ディレクトリも自動更新されました

## 参考資料
・基本指針
https://www.nekotricolor.com/entry/practice-of-bare-and-non-bare-repository-manage-wordpress-themes-with-git

・gitのノンベアリポジトリについて
https://qiita.com/devzooiiooz/items/56a02342d9d65d79f6c3
Ubuntu 20.04で再起動後に有線接続が切れる問題を解決するために

# 初めに
ubuntu20.04をrebootすると、有線接続が切れるという問題を解決するための方法をご紹介します。

# 自動接続の有効化の手順
#### ネットワーク設定を確認
 ターミナルを開いて、以下のコマンドを実行し、ネットワーク接続の状態を確認します。
 ```
 nmcli connection show
```
これにより、現在のネットワーク設定が表示されます。
有線接続の名前を確認して、次に進みます。

#### 自動接続の有効化
再起動後に自動的に接続されるよう設定されているか確認するため、次のコマンドを実行します。
```
nmcli connection modify "<接続名>" connection.autoconnect yes
```
<接続名> には nmcli connection show で表示された有線接続名を入れてください。

#### 設定を適用
設定を適用するため、次のコマンドでネットワークマネージャを再起動します。
```
sudo systemctl restart NetworkManager
```

# 自動接続の確認の手順
#### 自動接続の確認
特定の接続が自動接続されるかどうかを確認します。
以下のコマンドを実行して、指定した接続の自動接続の状態を確認します。
```
nmcli connection show "<接続名>" | grep autoconnect
```
例として、接続名が「有線接続 1」の場合は次のようになります。
```
nmcli connection show "有線接続 1" | grep autoconnect
```
出力例:
```
connection.autoconnect:                 yes
connection.autoconnect-priority:        -999
connection.autoconnect-retries:         -1 (default)
connection.autoconnect-slaves:          -1 (default)
```
この出力の`connection.autoconnect: yes`が表示されていれば、自動接続が有効になっています。
`no`と表示されていれば、自動接続は無効です。

# 番外編：自動接続の優先度について
`autoconnect-priority`は、自動接続時の接続の優先順位を示します。
数値が高いほど優先され、数値が低いほど優先度が下がります。
`-999`というのは非常に低い優先順位なので、他に高い優先度の接続があると、それが優先される可能性があります。
#### 対策: 自動接続の優先度を上げる
もしこの接続を最優先にしたい場合は、優先度を高く設定することをお勧めします。
例えば、優先度を最大に設定するには、以下のコマンドを実行します。
```
nmcli connection modify "有線接続 1" connection.autoconnect-priority 999
```
ただし，`nmcli`では、具体的な上限はありませんが、他の接続より明らかに高い値を設定すれば、その接続が最優先になります。
例えば、`999`という値を設定することができます。

#### 設定の確認
設定が適用されたかを確認するため、再度接続の詳細を確認します。
```
nmcli connection show "有線接続 1" | grep autoconnect
```
出力例:
```
connection.autoconnect:                 yes
connection.autoconnect-priority:        999
connection.autoconnect-retries:         -1 (default)
connection.autoconnect-slaves:          -1 (default)
```
これで、有線接続「有線接続 1」が他の接続よりも優先されて、自動的に接続されるはずです。

# 終わりに
以上で、ubuntu20.04をrebootすると、有線接続が切れるという問題を解決できると思います。
puam-devって何?

新案件に参画するにあたり、puam-devインストールしておいてねって言われました。が、よく知らないのでまとめてみます。

## puam-devとは
ローカルで開発中のWebアプリケーションを簡単にホストするための開発用ツールです。
特に、複数のローカルアプリケーションを同時に管理し、カスタムドメインを使ってアクセスできるようにすることを目的としています。

### 導入して得られるメリット
#### カスタムドメインでアクセスできる
通常、ローカル環境では localhost:3000 のようにポート番号でアプリケーションにアクセスしますが、puma-dev を使うと myapp.test のようなカスタムドメインを使ってアプリにアクセスできます。本番環境と同様にカスタムドメインでアクセスできるため、URL構造やクッキーの取り扱いなど、本番環境により近い形で開発・テストを行うことができます。

#### SSL（HTTPS）サポート
puma-dev はローカルでHTTPS（SSL）をサポートしており、ローカル環境でもHTTPSでアプリケーションを動かせます。本番環境で必須となるSSLをローカルでも使えるため、セキュリティやHTTPS特有の挙動（ブラウザのセキュリティ制限など）を確認しやすくなります。

### Puma-dev の使用方法
インストール: Puma-dev は macOS と Linux 用に提供されています。
以下のコマンドでインストールします。

``
brew install puma/puma/puma-dev
``

インストール後、次のコマンドで Puma-dev をセットアップします。
``
puma-dev -setup
``

アプリケーションのリンク: Puma-dev の設定にアプリケーションをリンクします。

``
puma-dev link ~/path/to/myapp
``
このリンクにより、myapp.test ドメインでアクセスできるようになります。

アプリケーションの起動: Puma-dev が自動的にアプリケーションを管理します。ブラウザで http://myapp.test にアクセスすると、そのアプリケーションが動作していることを確認できます。

### Puma-dev の設定ファイルと挙動
Puma-dev は通常、~/.puma-dev/ ディレクトリを監視し、このディレクトリ内にあるファイル名（ドメイン名）と、ファイルの中身（アプリケーションのポート番号やURL）に基づいてアプリケーションを管理します。

例えば、次のようなファイルを作成することで設定を行います：

``
echo 'http://localhost:3000' > ~/.puma-dev/myapp
``
これにより、http://myapp.test にアクセスすると、ローカルホストのポート 3000 に接続されます。