OmniAICreator/Qiita-1.07M huggingface dataset:
React Ariaを使ってアクセス可能なUIコンポーネントを作成しよう


## はじめに

Webアプリケーションのアクセシビリティは、ユーザーが利用しやすいかどうかを左右する重要な要素です。障害のあるユーザーやアシストテクノロジーを利用するユーザーにも良好なユーザーエクスペリエンスを提供するために、アクセシビリティを考慮したコンポーネントを開発することが必要です。そこで登場するのが「React Aria」です。

## React Ariaとは？

React Ariaは、アクセス可能なUIプリミティブを提供するReact Hooksのライブラリです。WAI-ARIA Authoring Practicesに従い、スクリーンリーダーやキーボードナビゲーションのサポートを提供します。これにより、ユーザーがアプリケーションをより簡単に操作できるようになります。

## WAI-ARIA Authoring Practicesとは？

WAI-ARIA Authoring Practices（以下、Authoring Practicesと略します）は、Web Accessibility Initiative（WAI）によって提供されるアクセシビリティに関するガイドラインの1つです。Authoring Practicesは、開発者やコンテンツ作成者に対して、アクセシビリティに配慮したWebコンテンツを作成するためのベストプラクティスや方法論を提供します。特に、WAI-ARIA（Accessible Rich Internet Applications）仕様の実装に関する具体的な指針を含んでおり、ユーザーにとってよりアクセス可能なWebアプリケーションを作成するための支援を行っています。

## React Ariaコンポーネント一覧

以下は、React Ariaが提供するアクセス可能なUIコンポーネントの一覧です。

1. Button
   - マウス、タッチ、キーボードでアクションを実行するボタンを提供します。

2. ToggleButton
   - 二つの状態を切り替えるトグルボタンを提供します。

3. ComboBox
   - テキスト入力とリストボックスを組み合わせたコンボボックスを提供します。リストのオプションをフィルタリングして選択することができます。

4. Select
   - 折りたたみ可能なオプションのリストを表示し、ユーザーが一つを選択できるセレクトボックスを提供します。

5. Menu
   - アクションやオプションのリストを表示し、ユーザーが選択できるメニューを提供します。

6. ListBox
   - 選択可能なオプションのリストを表示し、ユーザーが一つまたは複数を選択できるリストボックスを提供します。

7. GridList
   - キーボードナビゲーションや行の選択、アクションを含む対話型アイテムのリストを表示します。

8. Table
   - 行と列でデータを表示し、行の選択やソートを行うテーブルを提供します。

9. TagGroup
   - アイテムのリストを表示し、キーボードナビゲーション、選択、削除をサポートするタググループを提供します。

10. DatePicker
    - 日付フィールドとカレンダーのポップオーバーを組み合わせた日付ピッカーを提供します。

11. DateRangePicker
    - 二つの日付フィールドとレンジカレンダーのポップオーバーを組み合わせた日付範囲ピッカーを提供します。

12. DateField
    - キーボードで日付の値を入力・編集できる日付フィールドを提供します。

13. TimeField
    - キーボードで時刻の値を

入力・編集できる時刻フィールドを提供します。

14. Calendar
    - 日付のグリッドから単一の日付を選択できるカレンダーを提供します。

15. RangeCalendar
    - 日付のグリッドから連続した範囲の日付を選択できるレンジカレンダーを提供します。

16. Dialog
    - 他のコンテンツの上にオーバーレイ表示されるダイアログを提供します。

17. Popover
    - トリガー要素に対してポップオーバーでインタラクティブなコンテンツを表示します。

18. Tooltip
    - 要素にホバーまたはフォーカスした際に説明を表示するツールチップを提供します。

19. Checkbox
    - 単一のオプションを選択するためのチェックボックスを提供します。

20. CheckboxGroup
    - 複数のオプションのリストから一つ以上のオプションを選択するためのチェックボックスグループを提供します。

21. RadioGroup
    - 複数のオプションのリストから一つだけを選択するためのラジオボタングループを提供します。

22. Switch
    - オンとオフの状態を切り替えるためのスイッチを提供します。

23. TextField
    - キーボードでプレーンテキストを入力・編集できるテキストフィールドを提供します。

24. SearchField
    - 検索クエリの入力とクリアが可能な検索フィールドを提供します。

25. NumberField
    - 数値の入力、増減が可能な数値フィールドを提供します。

26. Slider
    - 指定された範囲内で値を選択できるスライダーを提供します。

27. Tabs
    - 複数のセクションにコンテンツを整理し、ユーザーが1つを表示できるタブを提供します。

28. Link
    - 他のページに遷移するためのリンクを提供します。

29. Breadcrumbs
    - 現在のページやリソースへの階層を表示するためのパンくずリストを提供します。

30. ProgressBar
    - 操作の進捗状況を時間の経過とともに表示するプログレスバーを提供します。

31. Meter
    - 既知の範囲内の数量や割合を表現するメーターを提供します。

## まとめ

React Ariaは、アクセス可能なUIコンポーネントを簡単に作成できる強力なライブラリです。WAI-ARIA Authoring Practicesに従い、国際化対応もされているため、多様なユーザーに対して高品質なユーザーエクスペリエンスを提供することができます。ぜひReact Ariaを使って、アクセス可能なWebアプリケーションを開発してみてください！

公式URL: [React Aria](https://react-spectrum.adobe.com/react-aria/)

---

以上が、React Ariaについてのテックブログ記事となります。アクセシビリティに配慮したWebアプリケーションの開発に役立てていただけると幸いです。ご確認ください。
ssh

```
[linuxstudy@xxxx ~]$ ls /etc/ssh/
moduli                    ssh_host_ecdsa_key        ssh_host_ed25519_key.pub  
ssh_config                ssh_host_ecdsa_key.pub    ssh_host_rsa_key          
sshd_config               ssh_host_ed25519_key      ssh_host_rsa_key.pub 
```
xinetd

/etc/services
ポート番号からサービス名へ変換
```
ssh             22/tcp                          # The Secure Shell (SSH) Protocol
ssh             22/udp                          # The Secure Shell (SSH) Protocol
telnet          23/tcp
telnet          23/udp
```
サービス名からデーモンへ読みかえは/etc/xinetd.d/telnetのファイルを読み込んで中に記載されたデーモンを起動する
/etc/xinetd.confに設定しているケースもあるようだがcentos6,7にファイルは格納されていなかった
キャプチャーしてコメント入れる便利ツールPasston

------------------------------------------------------

▼Passtonの基本的な使い方

https://youtu.be/7eWxiKGAuEo

 

▼Passton 応用編

https://youtu.be/jnyd-qBY-v0

------------------------------------------------------

 

ちなみに、修正指示以外にもこんな使い方もできます♪

操作方法をまとめたマニュアルのような使い方です。

------------------------------------------------------

▼Passtonの使い方

https://passton.jp/marker/#/marker?group_id=66ea0a7689be1cf3d981b67829f1da19

------------------------------------------------------

 

尚、Passtonの使用感の感想や、不具合の報告などは以下よりご連絡いただければと思います。

------------------------------------------------------

▼Passtonの使用アンケート

https://forms.gle/WqfBpm82nnyxricS8

 

▼バグ報告

https://forms.gle/2YqWH6AJ8YqE96QT6

------------------------------------------------------

 

「Passton」のマイページからも、いつでもアクセスできるようになっています♪

https://passton.jp/marker/#/marker?group_id=ff5b766a09012cfce4fa1a0f6475de1c
sudo

sudoはユーザー指定しない場合、root権限となる
sudoersに記載されているユーザ、グループに対してroot権限を与える
/etc/sudoers
```
## Allow root to run any commands anywhere 
root    ALL=(ALL)       ALL
linuxstudy      ALL=(ALL)       ALL        //ユーザ単位

## Allows people in group wheel to run all commands
%wheel  ALL=(ALL)       ALL           //グループ単位

## Same thing without a password
# %wheel        ALL=(ALL)       NOPASSWD: ALL

## Allows members of the users group to mount and unmount the 
## cdrom as root
# %users  ALL=/sbin/mount /mnt/cdrom, /sbin/umount /mnt/cdrom

## Allows members of the users group to shutdown this system
# %users  localhost=/sbin/shutdown -h now
```
せんせー、3Dプリンターってなに？

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3194265/17daf2a0-cdb0-ffbb-ddef-3fc890502fbd.png)

キーンコーンカーンコーン...
授業が始まります

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3194265/8beb8d8a-1cad-3a39-9462-a6d1cf30987f.png)


せんせー、3Dプリンターってなに？

# 3Dプリンターとは

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3194265/19060ce6-1631-39c2-59bd-3dea51481ad4.png)


3Dプリンターっていうのは、お絵かきを立体にする魔法のマシンです。
普通のプリンターは紙にインクで絵を描くけど、3Dプリンターは特別な素材を使って物を作ることができます。

例えば、
おもちゃの車を作りたいと思ったら、パソコンでその車の形を設計します。
それを3Dプリンターに送ると、3Dプリンターはその指示通りに、
薄い層から薄い層へと積み上げて、おもちゃの車を作ってくれるんです。

3Dプリンターは特別なプラスチックを溶かして、
細い糸みたいに出すことで形を作り出すんです。
そのプラスチックが冷えて固まると、作りたかったものが完成します。

だから、
3Dプリンターはお絵かきを立体にする魔法のマシンみたいなものです。
でも、大人が操作することが必要だから、大人と一緒に楽しく使ってみてくださいね

# まとめ

3Dプリンターっていうのは、お絵かきを立体にする魔法のマシンです。
Redshiftのテーブルを見るにはスキーマの設定が必要

ユーザーの行動ログの保存などに利用しているのだが、
たまにしかRedshiftのデータを見なく、見たいスキーマのオブジェクトを見るのに、
スキーマの設定をよく忘れてて見れないと焦るので。

## 手順

接続

```shell
$ psql -h localhost -U user -d db -p 1111
```

デフォルトではpublicになっている、現在のスキーマから。

```sql
> select current_schema();
 current_schema
----------------
 public
```

見たいスキーマに変える。

```sql
> SET search_path = raw_data;
SET
 current_schema
----------------
 raw_data
```
rails ルーティング対応表

### ルーティングの早見表

※ ルーティングの設定についての対応表

- index→ 一覧表 [全タスクを表示する]
- show→ 詳細表示 [特定のidのタスクを表示する]
- new→ 新規画面登録 [新規登録画面を表示する]
- create→ 登録 [登録処理を行う]
- edit→ 編集画面 [編集画面を表示する]
- update→ 更新 [更新処理を行う]
- destroy→ 削除 [削除処理を行う]


```ruby
例

class BoardsController < ApplicationController
  def index
     #Boardの一覧画面では全ての掲示板情報を一覧で表示したい
    @boards = Board.all
  end

  def new
     #Boardの新規作成画面ではboardの空のインスタンスをviewに渡したい
    @board = Board.new
  end

  def show
     #Boardの詳細画面ではURLパラメータから取得したBoardのインスタンスが必要
    @board = Board.find(params[:id])
  end

  def edit
     #Boardの編集画面ではURLパラメータから取得したBoardのインスタンスが必要
    @board = Board.find(params[:id])
  end
end

```
GitHub Actions の最新のアーチファクトのURLを提供する nightly.link が便利な件

## はじめに

GitHub Actionsを利用してOSSの開発を行う際、最新のビルドアーキテクチャのURLがほしいと思うことはありませんか？

より具体的には、masterブランチの最新ビルドなどを常に同じURLから取得できるようにしたい（自分がアクセスしたい、あるいは配布したい）といったケースです。

## 結論：Nightly.linkを使えばよい

Nightly.linkはGitHubのリポジトリから最新のビルドアーティファクトをダウンロードするための共有可能なリンクを提供するサービスです。使い方は簡単で、下記のサイトから自分のリポジトリにnightly.linkを許可して、URLを打ち込むだけです。

サイト：

https://nightly.link/

GitHub：

https://github.com/oprypin/nightly.link

無料でユーザー登録も必要ありません。OSS本家ではなく、forkしたリポジトリでも大丈夫です。したがって、本家に少しだけ改造を加えたビルドをしているようなケースでも使用できます。ソースコードも公開されており、Crystalで実装されているようです。

かなり便利なサービスですが、知名度が高くないため、日本語での検索で見つけることが難しいかもしれません。そのため、日本語ググラビリティの向上のために記事を書きました。かゆいところに手が届くありがたいサービスなので、ぜひ使ってみてください。

この記事は以上です。
動的に複数の曖昧条件でSELECTを行う

サンプルSQL
```
with dynamicLikeCondition AS (
	select 'A%' AS VALUE from dual
	union all
	select '%B1' AS VALUE from dual
	union all
	select '%C%' AS VALUE from dual
)
SELECT
	M.*
FROM MyTable M
WHERE EXISTS(SELECT * FROM dynamicLikeCondition COND WHERE M.KEY like COND.VALUE)
```
Google Tag Manager and Enhanced Landing Pages


+ [Google Tag Manager and Enhanced Landing Pages](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007Ai4g3SAB)

:::note
```
Enhanced landing pages now support script code, such as the JavaScript used to support Google Analytics tracking. You can add code to the header or footer of an individual landing page, using <link>, <script>, and <style> tags.
```

Where: This change applies to all Pardot editions with Salesforce Professional, Enterprise, and Unlimited editions.

How: From a landing page record, open the Settings tab and edit the header or footer code block. When the landing page is published, the code blocks are pulled into the landing page source. Be sure to test the landing page before you share it with prospects.

Ref:-
https://help.salesforce.com/s/articleView?id=sf.pardot_lps_use_custom_code.htm&type=5

https://help.salesforce.com/s/articleView?id=release-notes.rn_pardot_landing_pages_page_scripts.htm&release=236&type=5
:::

```
強化されたランディング ページでは、Google Analytics のトラッキングをサポートするために使用される JavaScript などのスクリプト コードがサポートされるようになりました。 <link>、<script>、<style> タグを使用して、個々のランディング ページのヘッダーまたはフッターにコードを追加できます。
```

対象: この変更は、Salesforce Professional、Enterprise、および Unlimited Edition を含むすべての Pardot エディションに適用されます。

方法: ランディング ページ レコードから [設定] タブを開き、ヘッダーまたはフッターのコード ブロックを編集します。ランディング ページが公開されると、コード ブロックがランディング ページのソースに取り込まれます。ランディング ページを見込み客と共有する前に、必ずテストしてください。


+ [拡張ランディングページ環境](https://help.salesforce.com/s/articleView?id=sf.pardot_lps_parent.htm&type=5)

Winter ’22 から、Account Engagement Lightning アプリケーションのユーザーは、ランディングページを作成するときに使用する環境を選択できるようになります。拡張ランディングページ環境はドラッグアンドドロップエディターを使用し、Account Engagement Lightning アプリケーションからのみアクセスできます。Salesforce 上に構築され、リストビュー、アクション、レポート、およびその他の Salesforce Lightning Experience の機能をサポートします。

+ [Salesforceの拡張ランディングページにGTMのインストールはできないのでしょうか？](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007bLbUq)

:::note
従来のランディングページを使うようなことが回答されています。

That being said, if you add the GTM code without the <noscript> tag, you will loose the injection of scripts for users with JS deactivated only, which, IMHO should not be a big issue.

If you wish to integrate the full code, you need to switch back to Classic Landing Pages, those using Layout Templates.

https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007Ai4g3SAB
:::
【Flutter】タスクスイッチャーのアプリ名を変更する

# はじめに
下記の画像のようなアプリを切り替える画面で、名称がアイコンの横に表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2475427/b2ef7aa6-ff08-c174-473c-7984fbb2e17c.png)


この名称を変更する方法がわからなかったのですが解決したので記事にしたいと思います。

# 変更方法
先に解決方法だけ示すと、下記のタイトルを変えるといいみたいです。

```dart
MaterialApp(
      title: 'Flutter Demo'
```

下記の記事のように、アプリ名の変更方法はたくさん出てくるのですが、アプリを切り替える画面での名称変更が出てきませんでした。

https://zenn.dev/tatukane/articles/cebabb5e0fd932

そこで、表示されている文字列で検索をかけたところ、MaterialAppのタイトルに同じ文字列が使われていて判明しました。

また、後で調べると、Stackoverflowにも質問があり、回答がわかりやすかったので載せておきます。
https://stackoverflow.com/questions/50615006/flutter-where-is-the-title-of-material-app-used
せんせー、ニューロモルフィックコンピューティングってなに？

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3194265/db5ddb7d-f25e-43c7-7fef-3a3fcf514aac.png)

キーンコーンカーンコーン...
授業が始まります

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3194265/3fcd9eed-24a8-ea55-25da-96e544fc357b.png)

せんせー、ニューロモルフィック・コンピューティングってなに？

# ニューロモルフィック・コンピューティングとは

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3194265/b2cce2dd-05d3-31ab-902f-ad2ba2a29e07.png)


「ニューロモルフィック・コンピューティング」とは難しい言葉だけど、
これは「人間の脳みたいに考えるコンピュータ」を作るための特別な技術のことを指しています。

君がお友達と遊んでいて、ボールを投げられたら、
それをすぐにキャッチできるよね？それは君の脳がボールの速さや方向をすごく速く計算して、
手をどこに動かせばボールをキャッチできるかを教えてくれるからなんです。

でも、普通のコンピュータはその計算をするのがとても時間がかかります。
だから、人間の脳のように早く、効率よく考えるコンピュータを作ろうと、
科学者たちは「ニューロモルフィック・コンピューティング」を開発しています。

人間の脳は、特別な部品（これを「ニューロン」と呼ぶよ）がたくさんつながって作られていて、
それが一緒に働いて色々なことを考えることができます。

ニューロモルフィック・コンピューティングも、
そのニューロンを真似て、コンピュータが人間の脳のように考えられるようにしようとしています。

でも、まだまだ研究中の技術なので、
これからどんなすごいコンピュータが作られるかは、科学者たちもわくわくして待っているところなんです。

# まとめ

「人間の脳みたいに考えるコンピュータ」を作るための特別な技術のこと
No version is set for command npm Consider adding one of the following versions in your config file at  nodejs <version>

## 概要

'npm install'コマンドを行おうとした際、下記のエラーが起きたので、自分の備忘録としても記載
「No version is set for command npm Consider adding one of the following versions in your config file at  nodejs ~version~」

### 結論
インストールしたnode.jsをグローバルに設定できていなかったため。


### 解決策
```
asdf global nodejs <バージョン>
```

これにより、Node.jsの指定のバージョンに設定され、プロジェクトを作成する際にデフォルトでこのバージョンが使用されるようになる。
### 補足
**asdf**
複数のプログラミング言語のバージョンを管理するツールの1つ。
asdfを使用することで、異なるバージョンのプログラミング言語を簡単に切り替えることが可能。
asdfは、Node.js、Ruby、Python、Javaなどのプログラミング言語のバージョン管理に広く使用されている。
asdfを使用するには、まずasdfをインストールし、対象の言語（この場合はNode.js）のプラグインをインストールしておくことが必要。
【SQL】LIKEとNOT LIKEの使い方

SQLコマンドの基礎的な知識、技術について学習しています。

今回は、検索条件に指定するLIKE句についてまとめておきます。
また、そのほかによく使用するコマンドについてもメモとして記述しておきます。



# 特定のキーワードを条件にする LIKE

```sql
SELECT *
FROM member
WHERE name LIKE '%田%';
```

### ワイルドカード文字
- ワイルドカード文字とは、whereなどの条件検索において、あいまい検索を指示する記号のことです。

```
%    0文字以上の任意の文字列
_    任意の1文字
```

二つのパーセント`% %`で囲んだ場合、その文字がどこかに含まれていればOKです。
```
'%田%'　=> 山田⭕️ , 田中⭕️
```


アンダーバーを先にして、後にパーセントをつけた`_ % `の場合、何かしらの1文字が最初についた`田`を検索条件にします。

```
'_田%'　=> 山田⭕️ , 田中❌(田が先にきているので、検索条件には当てはまらない)
```

# LIKEの逆の使い方 NOT LIKE

```sql
SELECT *
FROM member
WHERE name NOT LIKE '%田%';
```
```mysql
# 取得結果
+------+--------+
| id   | name   |
+------+--------+
| 3    | 渡部   |
+------+--------+
| 5    | 佐藤   |
+------+--------+
| 7    | 藤井   |
+------+--------+
| 10   | 斉藤   |
+------+--------+


```
このように`NOT LIKE`を使用すると、`田`のつく名前のメンバーを除外して検索結果を取得します。



# その他、よく使うSQLコマンド
その他、よく使うSQLコマンドについて記載しておきます。


### 指定した数だけ取得する LIMIT

```sql
SELECT *
FROM songs
WHERE type = 'hip_hop'
LIMIT 3;
```

### 条件で空白を除外する IS NOT NULL
```sql
SELECT *
FROM songs
WHERE release_year is not null;
```

# 参考サイト

https://www.sejuku.net/blog/73619#index_id1


https://medium-company.com/select-like/
2023.7.23 Flutter TODOアプリ進捗

FlutterでTODOアプリ作成進捗メモ

⚫︎追加ボタン（ElevatedButton）を押すと
　TextFieldに入力した文字がTODOの項目として追加される。
ゴミ箱のアイコンを押すとTODOが削除される


![スクリーンショット 2023-07-27 10.22.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3388746/0874640d-e1dd-8c96-0a0a-e5ac458ebc94.png)
![スクリーンショット 2023-07-27 10.25.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3388746/f4471086-80c1-e08f-5965-8cfdc28471ba.png)

⚫︎ソースコード

import 'package:flutter/material.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: MyHomePage(),
    );
  }
}
class MyHomePage extends StatefulWidget {
  @override
  State<MyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
List<String> todoList = []; //予め// リストを作っておいて追加画面で入力された文字を追加していく

@override
Widget build(BuildContext context) {


final myController = TextEditingController();

  return Scaffold(
      appBar: AppBar(
        title: const Text('リスト画面一覧'),
      ),

    body:Column(
      mainAxisAlignment: MainAxisAlignment.center,//中央揃え
      children: <Widget>[
      Row(
        children: <Widget>[
          Flexible(
            child: TextFormField (
              controller: myController,
              decoration: const InputDecoration(
                labelText: 'TODO',
              ),
                style: const TextStyle(fontSize: 18),
            ),
          ),
          ElevatedButton(
            onPressed: ()  {
              final newListText = myController.text;
              if ( myController.text.length > 0 ) {//文字数が０より大きい時
                setState(() {
                todoList.add(newListText); //その文字をtodoListに追加する
                }
                );
                }else{
                print("失敗");
              }
            },
            child: const Text("追加"
            )
          ),
        ]
      ),
        Row(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Expanded(
              child :SizedBox(
                height: 350,
                  child: ListView.builder(
                    //動的にListViewを作る
                    itemCount: todoList.length, //渡された数だけ作成
                    itemBuilder: (context, index) {
                      return Card(
                          child: ListTile(
                            title: Text(todoList[index]
                            ),
                            trailing: IconButton(
                              icon: const Icon(Icons.delete),
                              onPressed: () {
                                setState(() {
                                  // indexを指定して削除
                                  todoList.removeAt(index);
                                });
                              }
                            )
                          )
                      );
                    },
                  ),

              ),
            )
          ],
        )
      ]
    )
  );
}}
【Swift】カスタムのPrefixOperatorを作成する

# はじめに
デバッグを楽にするためにPrefixをカスタムします

# 実装
```swift
prefix operator ~~ // ここは記号のみ

extension String {
    static prefix func ~~(_ str: String) -> String {
        return "✅: \(str)"
    }
}
```

# 使い方
```swift
import SwiftUI

struct ContentView: View {
    var body: some View {
        Button {
            print(~~"テスト")
        } label: {
            Text("プリント")
        }
    }
}
```

# 出力
```
✅: テスト
```

# おわり
`prefix operator`なんて初めて知りました
java勉強メモ1

Javaのプログラムの構造
---

Javaのプログラムは次のような構造になっています：

大括りにクラスがあって、その中に
フィールド、コンストラクタ、メソッドを配置する。
## Javaのデータ型
Javaのデータ型は大きく2つに分けられます

基本データ型 (プリミティブ型)
---
整数型:

byte: 8ビット符号付き整数 (-128 から 127 までの範囲)
short: 16ビット符号付き整数 (-32,768 から 32,767 までの範囲)
int: 32ビット符号付き整数 (-2,147,483,648 から 2,147,483,647 までの範囲)
long: 64ビット符号付き整数 (-9,223,372,036,854,775,808 から 9,223,372,036,854,775,807 までの範囲)
小数型:

float: 32ビット単精度浮動小数点数 (約 7桁の有効数字を持つ)
double: 64ビット倍精度浮動小数点数 (約 15桁の有効数字を持つ)
真偽型:

boolean: 真 (true) または 偽 (false) の2つの値を持つ。
文字型:

char: 16ビットのUnicode文字 (例: 'A', 'b', '1', '@' など)

クラス型 (参照型)
---
クラス型は、Javaのクラスやインターフェースから派生したオブジェクトの参照を格納します。これには多くの組み込みクラスが含まれます。例として、String クラスはテキスト文字列を表すために使用されますが、他にも様々なクラスが存在します。
※るーるとして一文字目が大文字なので、そこで見分けることができる。

Javaでは、基本データ型は値そのものを格納しますが、クラス型はオブジェクトの参照を格納します。これにより、より複雑なデータ構造を表現することが可能になります。

Javaのデータ型はプログラムを組む上で非常に重要であり、適切なデータ型の選択はプログラムのパフォーマンスや挙動に影響を与えることがあります。プリミティブ型は**基本的なデータを格納**するために使用され、参照型は**より高度な機能やデータを扱う**ために使用されます。

### 参照型のイメージ
1.オブジェクトの作成:

参照型の変数を宣言すると、その変数はまだオブジェクトを指していません。参照型の変数は、オブジェクトが格納されるメモリの場所（アドレス）を格納するためのスロットを持っているイメージです。

2.オブジェクトのインスタンス化:

実際にオブジェクトを作成（インスタンス化）すると、Javaは新しいメモリ領域を確保し、そのオブジェクトのデータを格納します。
アドレスの割り当て:
オブジェクトがインスタンス化されると、Java仮想マシン（JVM）はそのオブジェクトがメモリ上のどこに配置されるか、一意のアドレスを割り当てます。このアドレスは通常、16進数で表される一意の数値です。

3.参照の割り当て:

インスタンス化されたオブジェクトのアドレスが、参照型の変数に割り当てられます。この時、参照型の変数にはオブジェクトそのものではなく、そのオブジェクトのメモリ上のアドレス（参照）が格納されます。

4.オブジェクトへのアクセス:

以降、参照型の変数を介してオブジェクトにアクセスする場合、変数に格納されているアドレスを辿って、実際のオブジェクトのメモリ領域にアクセスします。このプロセスは、オブジェクトの内容やデータにアクセスするための手段となります。
参照の転送:

参照型の変数を別の変数に代入した場合、アドレス（参照）が転送されるだけで、オブジェクト自体はコピーされません。つまり、2つの変数が同じオブジェクトを参照している状態となります。

### 参考書籍
・すっきりわかるJava入門第3版
・オラクル(https://docs.oracle.com/javase/jp/8/docs/api/java/lang/String.html)
文系未経験のぼくがエンジニアを目指した理由

## はじめに
こんにちは。文系未経験からエンジニアになりました牛田です🐮
今回、記念すべき初投稿ということで、**現在の目標**を公開したいとおもいます！


## 「目標」
**私はエンジニアとバリスタ、二足の草鞋を履いて生活するのが目標です**。


そして、日常のなかでふと誰かの心を豊かにできる人物でありたいと考えています。
また、家族を持つことにも憧れています。

そのため、フレキシブルに働くことができるエンジニアと、
多種多様な人の日常に関わることができるバリスタの両立を目指しています。

## 「実体験」
これを聞いて、「**カフェだけ頑張ればいいじゃん。**」というふうに思った方もいるでしょう。

エンジニアを目指す理由は、
**カフェの収入だけで生活していくのは厳しい**と感じたからです。

大学時代、私は何度かカフェのイベント出店をしていました。当時オープンからクローズまでずっとコーヒーを淹れ続けて、売上が５万円のときもあれば、天候が悪い日だと１万円いかないこともあり、天候や季節などで売上が大きく左右することを肌で実感しました。

一日の平均売上はおよそ３万円。１か月（２０営業日）の総売上を計算すると、６０万円になります。そこから固定費、変動費などもろもろ差し引くと、手元に残るのは半分くらいでした。　

**コーヒーをサーブしながらお客さんとの会話は、色んな気づきや学びがあって楽しい**。
しかし自分の理想を追求すると、**家族を養えるくらいの収入を得るのは難しい**と感じました。

なので、「**生活基盤を整えるための別手段を模索し始めた**」がタイトルの答えになります。
<img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2981764/3c45b28f-b0b4-1f63-7e3b-0043ce34868f.jpeg">
## 「エンジニアに興味を持ったきっかけ」
その当時、今働いているWHIのサマーインターンに参加し、内々定をいただいていました。WHIの新卒総合職は、研修後に配属が決まるため、開発経験がない人でも適性があれば開発部署に配属されます。

そこで「**エンジニアとバリスタ、二足の草鞋を履く**」というビジョンが浮かんだので、
いまの会社で働く意思を固め、エンジニアを目指し始めました。

それから入社まで、何から始めるべきかとても悩みましたが、YouTubeなどを参考にして、ITパスポート、基本情報技術者試験をまずは取得しました。それから、ProgeteでHTML、CSS、Javaを書いてみたり、UdemyでAWSの資格勉強をしていました。

入社までに基本情報を勉強していてよかったのと、Progeteは**コードを書いてみる**という体験が気軽にできるので、ゼロからエンジニアを目指している人におすすめです。

## 「スタート地点」
２か月の研修を終え、無事希望していた開発部署に配属されました。

今の気持ちは、**「やっとスタート地点に立てた！」** が相応しいかと思います。
同期の中には、もちろん経験者もたくさんいる。

だけど、**戦う相手は自分自身**だと思っています。
毎日コツコツと努力を積み上げ、必ずや目標を達成したいとおもいます🔥🔥

最後まで読んでいただきありがとうございました。
これからも気晴らしに投稿していきますので、どうぞよろしくお願いします。
CustoElementsで同じ名前のSlotを何度も利用したい

# はじめに

WebComponentsを作っているとShadowDom側にデザイン要素を持たないように作ると思います
そんな中で利用する`slot`で困ったことがあったのでまとめます

# 問題

WebComponentsで`slot`を何度も使いまわしたいと考えました

```html:inde.html
<SampleElement>
  <div slot="test-msg">Hello</slot>
</SmapleElement>
```

```tsx:index.tsx
return (
  <div>
    <slot name="test-msg"></slot>
    <slot name="test-msg"></slot>
    <slot name="test-msg"></slot>
  </div>
)
```

しかしこのときに`Hello`が表示されるのは最初のスロットのみでした
すべて表示させるにはどうすればよいのでしょうか？

# 原因

slotでは同じものをCustomElement側で何度もしようすることはできません
slot名を別名にしてhtmlにかけば利用することができます

```html:index.html
<SampleElement>
  <div slot="test-msg-0">Hello</slot>
  <div slot="test-msg-1">Hello</slot>
  <div slot="test-msg-2">Hello</slot>
</SmapleElement>
```

```tsx:index.tsx
return (
  <div>
    <slot name="test-msg-0"></slot>
    <slot name="test-msg-1"></slot>
    <slot name="test-msg-2"></slot>
  </div>
)
```

また、slotを同じ名前にすると最初にヒットした位置にすべてのスロットが表示されてしまいます

```html:index.html
<SampleElement>
  <div slot="test-msg">Hello</slot>
  <div slot="test-msg">Hello</slot>
  <div slot="test-msg">Hello</slot>
</SmapleElement>
```

```tsx:index.tsx
return (
  <div>
    <slot name="test-msg"></slot>
    <slot name="test-msg"></slot>
    <slot name="test-msg"></slot>
  </div>
)
```

このようにすると画面には`HelloHelloHello`と1つ目のスロット位置にでます

# 解決方法

この仕様を考えると`Slot`のノードをクローンして使うほうが良いのかなと思い以下のように行いました

```index.html
  <body>
    <script src="./src/index.tsx" type="module"></script>
    <div>
      <sample-element></sample-element>
    </div>
    <script>
      const sampleTag = document.getElementsByTagName("sample-element")[0];
      Array.from(new Array(5)).map((v, i) => {
        divElement = document.createElement("div")
        divElement.setAttribute("slot", `test-msg-${i}`)
        divElement.innerHTML = "Hello"
        sampleTag.appendChild(divElement)
      });
    </script>
  </body>
```

```tsx:index.tsx
  return (
    <>
      <div>Hello</div>
      {Array.from(new Array(3)).map((v, i) => {
        return <slot name={`test-msg-${i}`}></slot>;
      })}
    </>
  );
```

手動でHTMLにSlotを3行書いてもよいですが、拡張性を考えてスクリプトで行いまいした
すこし強引ではありますが、これが考えた中では良いのかなと思います

# おわりに

もっといい方法がある方はぜひとも教えてほしいです
WebComponent難しいなと改めて感じました

# 参考

https://developer.mozilla.org/ja/docs/Web/API/Web_components/Using_templates_and_slots
Go言語でHTTPSサーバーを作成する

## はじめに

Go言語はシンプルさと効率性を重視して設計されており、その強力な標準ライブラリのおかげで、HTTP/HTTPSサーバーを短時間で立ち上げることができます。
今回は、Goの `net/http` パッケージを使って、HTTPSサーバーを作成します。

## 必要なもの

- Go言語の開発環境
- SSL/TLS証明書と秘密鍵

SSL/TLS証明書は、通信の安全性を保証するためにHTTPS接続で必要となります。証明書は信頼された認証局から購入することも、自己署名証明書を作成することも可能です。今回は、証明書と鍵のファイル名をそれぞれ `cert.pem` と `key.pem` とします。

## コード

以下が、基本的なHTTPSサーバーのコードです。

```go
// mainパッケージを宣言します
package main

// 必要なパッケージをインポートします
import (
	"fmt"
	"log"
	"net/http"
)

// handler関数はHTTPリクエストを処理し、"Hello, HTTPS!"というレスポンスを返します
func handler(w http.ResponseWriter, r *http.Request) {
	fmt.Fprintf(w, "Hello, HTTPS!")
}

// main関数はプログラムのエントリーポイントです
func main() {
	// ルートパスへの全てのリクエストをhandler関数で処理するよう設定します
	http.HandleFunc("/", handler)

	// HTTPSサーバーを立ち上げます
	// サーバーのポートは443、SSL/TLS証明書のファイル名は "cert.pem"、鍵のファイル名は "key.pem" です
	// サーバーの立ち上げに失敗した場合は、エラーメッセージをログ出力します
	err := http.ListenAndServeTLS(":443", "cert.pem", "key.pem", nil)
	if err != nil {
		log.Fatal("ListenAndServe: ", err)
	}
}
```

## 注意点

このコードを実行するには、適切なSSL/TLS証明書と秘密鍵が必要です。
また、通常、ポート443を開くにはroot権限が必要なため、適切な権限でコードを実行するか、1024以上のポートを使用してください。

## まとめ

Go言語を使ってHTTPSサーバーを作成する方法を解説しました。
Goの標準ライブラリを使用すれば、短時間で安全なHTTPSサーバーを立ち上げることが可能です。
この知識を活用して、安全なWebアプリケーションの開発に役立ててください。
メール to Salesforce


[まとめページに戻る](https://qiita.com/Keiji_otsubo/items/60afc2a8d211b6f7d89f)
[まとめA～M](https://qiita.com/Keiji_otsubo/items/f3ddedee6793bf1576f8)

+ [メールtoケース](https://qiita.com/Keiji_otsubo/items/fb6fa038807750a5fc4c#%E3%83%A1%E3%83%BC%E3%83%ABto%E3%82%B1%E3%83%BC%E3%82%B9)
+ [メール-to-ケース 新しいスレッドの動作](https://qiita.com/Keiji_otsubo/items/4aaa2a1f5550d2d27f92)
+ [[メール to Salesforce] のしくみ](https://help.salesforce.com/s/articleView?id=sf.email_my_email_2_sfdc.htm&type=5)
+ [メール-To-ケースでメール参照 ID の代わりにメールスレッドトークンを有効にしました。](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007CIPlC)

:::note
 メール-to-ケースの統合は、件名に対してのみ有効になっているスレッド トークンを使用してシームレスに機能します。両方のオプションを有効にすると、トークンが削除された場合でも、Salesforce にメール-to-ケースインスタンスを見つける追加の手段が提供されます。
:::

+ [CC/BCCの自動応答を無効にする場合](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007H9znS)

:::note
Please check this article.

https://developer.salesforce.com/forums/?id=9062I000000bmd1QAA
:::



# 利用例

+ [発注情報（発注番号など）を埋め込んだ、納品物確認フォームをクライアント向けに作りたい](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007A2RdQ)
+ [Salesforceはアウトバウンドメッセージを送ることができますが、他システムからのアウトバウンドメッセージ受信するなどして指定した項目を入力・変更することはできますでしょうか。](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007DgHN6)

# 文字数の制限

+ [CANNOT_INSERT_UPDATE_ACTIVATE_ENTITY : このレコードを保存するとき、ワークフローまたは承認プロセスの項目自動更新によるエラーが発生しました。](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007ZBZMM)

:::note
エラーメッセージですが、特定の項目とかの情報はありますか？
無かったら、ケースオブジェクトの制限かもしれませんね。
この場合は領域を拡張するオプションがないみたいです。

https://help.salesforce.com/s/articleView?id=000386646&type=1

この制限は、ケースオブジェクトの標準の [説明] 項目には適用されません。この項目は 32,000 文字に制限されており、増やすことはできません。これを増加させるアイデアにこちらからプラス投票することはできます。 
Email-to-Case: Error(s) encountered while processing

The following errors were encountered while processing an incoming email:

STRING_TOO_LONG : To Address: data value too large:
(bunch of email contact's list)
dgafo... (max length=4000)

https://trailhead.salesforce.com/trailblazer-community/feed/0D53A00004OnhSfSAJ
:::
PHPでCSVデータを取得する方法

CSVファイルはデータを保存し、転送するのに非常に便利な形式です。
PHPはこのようなファイルの処理を簡単にします。
この記事では、PHPでCSVデータを取得する方法を記載します。

## 完全なコード

以下に、CSVファイルからデータを取得するための完全なPHPコードを示します。

```php
$file = fopen('your_file.csv', 'r');

while (($data = fgetcsv($file)) !== FALSE) {
    var_dump($data);
}

fclose($file);
```

このコードを実行すると、CSVファイルの各行が配列として出力されます。では、このコードがどのように動作するのか詳しく見てみましょう。

## コードの解説

### ファイルを開く

まず、PHPの`fopen`関数を使用してCSVファイルを開きます。この関数はファイルのハンドルを返します。

```php
$file = fopen('your_file.csv', 'r');
```

### データを取得する

次に、`fgetcsv`関数を使用してCSVデータを取得します。この関数は行を配列として返します。この配列の各要素は、CSVファイルの各フィールドに対応します。例えば、CSVファイルの一行が"John,Doe,30"の場合、`fgetcsv`から返される配列は`["John", "Doe", "30"]`となります。

```php
while (($data = fgetcsv($file)) !== FALSE) {
    var_dump($data);
}
```

### ファイルを閉じる

最後に、`fclose`関数を使用してファイルを閉じます。

```php
fclose($file);
```

## まとめ

PHPはCSVファイルの取り扱いに非常に便利な言語であり、上記のコードを使用すれば簡単にデータを取得できます。さまざまなデータ分析やデータマイニングのタスクに役立ててみてください。
Zuora との連携

[まとめページに戻る](https://qiita.com/Keiji_otsubo/items/60afc2a8d211b6f7d89f)
[まとめN～Z](https://qiita.com/Keiji_otsubo/items/92f92bb9f668ca9688be)



+ [質問:Cannot perform DML instruction, while prepare](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007AhcYQ)

:::note alert
Cannot perform DML instruction, while prepare
:::

:::note

**Check out custom validation rules that fire on cancellation quotes.**

Enhancement to error messages for custom validation rules in cancellation quotes in CPQ 9

In Quotes version 10.19, an improvement has been made regarding error messages in cancellation quotes with Custom Validation Rules. 

Previously, if you created a cancellation quote and encountered an error triggered by a Custom Validation Rule, the error message displayed was not specific to that Validation Rule. Instead, a generic error message such as "Cannot perform DML instruction, while prepare" was shown. 

With the latest update, when creating a cancellation quote and a Custom Validation Rule is triggered, you will now receive the specific error message defined by the Custom Validation Rule itself. This enhancement allows for more accurate and informative error messages in cancellation quotes.

https://knowledgecenter.zuora.com/Zuora_CPQ/Zuora_CPQ_Release_Notes/Zuora_Quotes_Version_10_Release_Notes#Zuora.E2.80.99s_response_to_Salesforce_Platform_API_Version_Deprecations
:::

:::note alert
The operation failed from a lock competition.
:::

:::note
This time it failed due to max chars limitation of the opp name and we reduced the length and it fixed the issue
:::


The operation failed from a lock competition. For example, a lock can occur when multiple client operations try to update an object at the same time. Retry later.

WSDL Version: 60.0+

https://knowledgecenter.zuora.com/Zuora_Central_Platform/API/G_SOAP_API/L_Error_Handling/Errors
OmniStudio and Custom Lightning Web Components


+ [OmniStudio and Custom Lightning Web Components](https://trailhead.salesforce.com/content/learn/modules/omnistudio-and-custom-lightning-web-components)

+ [Can't activate OmniScript for OmniStudio and Custom LWC module](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V000079SSiq)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/435b16de-bc58-3f72-7a72-e960f0ff1140.png)

:::note
To resolve this, I had to ignore the instructions in the exercise guide and wait until I had completed all the work before I tried activating the OmniScript.
:::
Z80

# Z80 学習

## 参考

- [講師ヤザワのセミナー日記[14] 半日でマイコン作成を体験](https://xtech.nikkei.com/it/article/Watcher/20070515/271113/)
- [8ビット CPU Z80](http://www.yamamo10.jp/yamamoto/comp/Z80/index.php)
- [Ｎの電子講座・電気屋養成編](https://www.apony.com/elec/elec8/elec8.html)
- [Ｚ８０マイコンボード・中日電工のホームページにようこそ！](https://userweb.alles.or.jp/chunichidenko/)
- [お気楽古典電子工作-Z80](https://kimoan.com/category/z80/page/3/)

## 基本

- 端子配置

<img width="30%" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4641/77272d8a-b2b2-8048-5940-dfa5dac1441b.png">
※端子の上付きバーはローでアクティブになる（Active Low）ことを表す

1. アドレスバス（出力）
    - 端子: $A_0 ～ A_{15}$
        - 16ビットあるので、$2^{16}=65536$ 個のアドレスが扱える
    - メモリのアドレスを指定する
        - $2^{16}=65536$ => 64kバイトアドレスを指定できる
    - 外部デバイスI/Oポートのアドレスを指定する
        - 下位8ビットで指定 => $2^{8}=256$ => 256 個の外部デバイスを扱える
    - DRAM のリフレッシュアドレスを指定する
1. データバス（入出力）
    - 端子: $D_0 ～ D_7$
    - メモリとデータを受け渡す
    - 外部デバイスI/Oポートとデータを受け渡す
        - 1バイト(8ビット)単位で
1. システム制御
    - 端子
        - $\overline{M1}$   : （出力）マシンサイクル
        - $\overline{MREQ}$ : （出力）メモリ要求（アクティブのとき、アドレスバスはメモリのアドレスを表す）
        - $\overline{IORQ}$ : （出力）I/O要求（アクティブのとき、アドレスバスは外部I/Oのアドレスを表す）
        - $\overline{RD}$   : （出力）メモリ読み出し
        - $\overline{WD}$   : （出力）メモリ書き込み
        - $\overline{RFSH}$ : （出力）アクティブのとき、アドレスバスはDRAMのリフレッシュアドレスを表す
1. CPU制御
    - 端子
        - $\overline{HALT}$ : （出力）HALT命令が実行？
        - $\overline{WAIT}$ : （入力）ウェイト状態にする
        - $\overline{INT}$ : （入力）割り込み要求
        - $\overline{NMI}$  : （入力）ノンマスカラブル割り込み要求
1. CPUバス制御
    - 端子
        - $\overline{BUSRQ}$ : （入力）バス要求
        - $\overline{BUSACK}$ : （出力）バスアクノリッジ
1. その他 
    - 端子
        - $\overline{CLK}$ : （入力）クロック信号
        - +5V              : （入力）電源 
        - GND              : グランド

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4641/1e3e4aba-95c8-8ce9-0989-4b94092acd03.png">
wslのtensorflowでkerasのbackend その8

# 概要
wslのtensorflowでkerasのbackendを試す。
練習問題、やってみた。

# 練習問題
kerasのbackendでxorを学習したウェイトとバイアスを使って、c#で再現せよ。

# サンプルコード

```


using System;

class program {
	private static double tanh(double x) {
		double a = Math.Exp(x);
		double b = Math.Exp(-x);
		return (a - b) / (a + b);
	}
	private static double sigmoid(double x) {
		return 1.0 / (1.0 + Math.Exp(-x));
	}
	public static void Main() {
		double[][] w1 = {
			new double[] {1.6427742,   1.292738,    0.13679211,  0.09276549,  0.31930393,  0.18661255,   1.0932094,  -0.7801719},
			new double[] {1.4525393,   1.1745324,   0.20021456,  0.497589,    0.11109181,  0.33417672,  -0.44360426, -1.1322144}
		};
		double[] b1 = {-0.20589589,  0.09548836,  0.54812616,  0.60974604,  0.15801114,  0.30214155,  0.38613093,  1.4007448};
		double[][] w2 = {
			new double[] {1.6341141},
			new double[] {1.1821091},
			new double[] {-0.24378781},
			new double[] {-0.2940346},
			new double[] {-0.22311434},
			new double[] {-0.34191525},
			new double[] {-0.79992425},
			new double[] {1.717806}
		};
		double[] b2 = {-0.5830822};
		string res = "";
		for (int i = 0; i < 4; i++)
		{
			int k;
			int l;
			double[] x = {0, 0};
			double[] y = {0};
			double[] h = {0, 0, 0, 0, 0, 0, 0, 0};
			if (i == 0)
			{
				x[0] = 0;
				x[1] = 0;
				res += "0, 0 = ";
			}
			if (i == 1)
			{
				x[0] = 1.0;
				x[1] = 0;
				res += "1, 0 = ";
			}
			if (i == 2)
			{
				x[0] = 0;
				x[1] = 1.0;
				res += "0, 1 = ";
			}
			if (i == 3)
			{
				x[0] = 1.0;
				x[1] = 1.0;
				res += "1, 1 = ";
			}
			for (k = 0; k < 2; k++)
			{
				for (l = 0; l < 8; l++)
				{
					h[l] += x[k] * w1[k][l];
				}
			}
			for (l = 0; l < 8; l++)
			{
				h[l] += b1[l];
				h[l] = tanh(h[l]);
			}
			for (k = 0; k < 8; k++)
			{
				for (l = 0; l < 1; l++)
				{
					y[l] += h[k] * w2[k][l];
				}
			}
			for (k = 0; k < 1; k++)
			{
				y[k] += b2[k];
				y[k] = tanh(y[k]);
			}
			res += y[0].ToString() + "\r\n";
		}
		Console.WriteLine(res);
	}
}


```

# 実行結果

```
>xor1
0, 0 = 0.00756640487444222
1, 0 = 0.916872851383098
0, 1 = 0.930970323270665
1, 1 = 0.0114214059400282

```

以上。
XAMPPで起動してるMySQLにターミナルから接続するときに詰まった話

# まえがき
PHPの勉強をするために、Mac用のXAMPPをインストールして
ターミナルからMySQLに接続しようとしたら詰まったので原因とその解決方法について備忘をかねて記録しておく。

## 根本原因
MySQL接続時に、XAMPPで用意されてるコマンドが実行されてるかと思ったら
homebrewでインストールしたmysql-clientが実行されていた。

## 解決方法
.zshrc内に記述している環境変数$PATHの設定値を見直して
XAMPP側で提供してるコマンドが実行されるように設定した。
事前にパスのチェックはちゃんとしましょうと反省。

## 解決までにやったこと
***※ここからは解決までに自分がやったことを殴り書きしてるので、同じような事象に悩まされてる方は
読んでみてもらえればいいかなと思います。***

ターミナルからXAMPPで起動してるMySQLに接続しようとしたら
エラー1
Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
mysql.sockがないと言われたから作成して、DBサーバーをXAMPPから再起動して
再度接続を試みる。

エラー2
mysqladmin: connect to server at 'localhost' failed error: 'can't connect to local mysql server through socket '/tmp/mysql.sock' (38)' 
また接続できないと返ってくる。
(38)はmysql.sockが配置されているディレクトリに対してアクセス権限がないときに
発生するエラーとのことなので、アクセス権限を修正してみた。
参考記事
https://feeld-uni.com/?p=314

しかし、それでも同じエラーが返ってきた。

XAMPPでMySQLの設定ファイルを開いて、sockのパスを変更してみた。
そして再度接続してみるもののまた(38)のエラーが返ってくる。
そしてパスを変えたはずなのに、返ってきたエラーに表示されてるパスが変わってないので
何かおかしいことに気づく。

.zshrcの$PATHにXAMPPのbinまでのパスを追加したのにうまくいってないので
環境変数$PATHを見直してみた。
そしたら、いつだかhomebrewでインストールしたmysql-clientが
$PATHの先頭に記述されてる・・・
XAMPPのbinを先頭に持ってきて、.zshrcを読み込み直し
サーバーも再起動して再チャレンジ！

うまくいった！！
Vue3でVuetify3を使えるようにする

# はじめに
既存のVueプロジェクトにVuetifyをインストールして使ってみる。

下記記事の続きです。
https://qiita.com/dbd_fish/items/d2502651b3fa146a200b

Vuetify3の公式サイト↓
https://vuetifyjs.com/en/getting-started/installation/#manual-steps

# 実施内容
# インストール

## インストール
Vuetifyを使用するために`$ npm add vuetify@^3.3.9`を実行します。
mdiを使用するために`$ npm install @mdi/font`を実行します。

mdiとは下記のようなアイコンのこと。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691111/09c9a920-ace9-9a9b-6710-9c8eca0b969e.png)

下記のvuetify.jsを作成します。
```vuetify.js
import "vuetify/styles";
import { createVuetify } from "vuetify";
import * as components from "vuetify/components";
import * as directives from "vuetify/directives";
import '@mdi/font/css/materialdesignicons.css' 


const vuetify = createVuetify({
  components,
  directives,
  icons: {
    iconfont: 'mdi',
  }
});

export default vuetify;
```

main.jsでvuetifyを読み込むように修正
```main.js
import './assets/main.css'

import { createApp } from 'vue'
import App from '@/App.vue'
import router from '@/router'
import vuetify from "./vuetify";

const app = createApp(App)
app.use(router)
app.use(vuetify)
app.mount('#app')
```

起動時の画面にカードが表示されるように修正してみる。
今回は起動時にhome.jsが表示されるため、home.jsを変更する。
```home.js
<template>
  <v-card class="mx-auto" width="400" prepend-icon="mdi-home">
    <template v-slot:title>
      This is a title
    </template>

    <v-card-text>
      This is content
    </v-card-text>
  </v-card>
</template>
```

`$ npm run dev`でサーバ実行すると、下記のような画面表示になる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691111/f2c22be1-0c3a-c733-fcec-a3fe576c7b5f.png)

## ホーム画面を作る
ここまでの操作でVuetify3を使う手順が完了したため、
下記のようなホーム画面を作ってみる。

```home.js

<template>
  <v-layout>
    <v-app-bar color="teal-darken-4" image="https://picsum.photos/1920/1080?random">
      <template v-slot:image>
        <v-img gradient="to top right, rgba(19,84,122,.8), rgba(128,208,199,.8)"></v-img>
      </template>
      <template v-slot:prepend>

        <v-btn :to="{ path: 'home' }">
          私のブログ
        </v-btn>

      </template>
      <v-app-bar-title>ホーム</v-app-bar-title>
      <v-spacer></v-spacer>
      <template v-slot:extension>
        <v-btns v-model="tab" align-tabs="title">
          <v-btn v-for="tab in tab_list" :key="tab.tab_name" :value="tab.tab_name" :to="{ path: tab.tab_path }">
            {{ tab.tab_name }}
          </v-btn>
        </v-btns>
      </template>
    </v-app-bar>
    <v-main>
      ホーム
    </v-main>
  </v-layout>
</template>

<script>
export default {
  data() {
    return {
      tab: null,
      tab_list: [
        { tab_name: 'プロフィール', tab_path: 'profile' },
        { tab_name: '経歴', tab_path: 'resume' },
        { tab_name: `事業内容`, tab_path: 'service' },
        { tab_name: '仕事関連の記事', tab_path: 'job_article_list' },
        { tab_name: '趣味の記事', tab_path: 'private_article_list' },
        { tab_name: 'お問い合わせ', tab_path: 'request' },
      ],
    }
  },
}

</script>
```

表示は下記のようされる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691111/ceb0e695-9089-5c17-8b1f-fe498c9b8be1.png)

# おわりに
今度はVuexを使ってみようと思います。
wslのtensorflowでkerasのbackend その7

# 概要
wslのtensorflowでkerasのbackendを試す。
練習問題、やってみた。

# 練習問題
kerasのbackendでxorを学習したウェイトとバイアスを使って、elixirで再現せよ。

# サンプルコード

```
defmodule Nn do
	def mul(a, b) do
		Enum.map(a, fn i ->
			i * b
		end)
	end
	def add(a, b) do
		for x <- 0..7 do
			Enum.at(a, x) + Enum.at(b, x)
		end
	end
	def sum(a, b) do
		for x <- 0..7 do
			Enum.at(a, x) * Enum.at(b, x)
		end
		|> Enum.sum
	end
	def tanh(v) do
		Enum.map(v, fn i ->
			a = :math.exp(i)
			b = :math.exp(-1 * i)
			(a - b) / (a + b)
		end)
	end
	def sigmoid(a) do
		Enum.map(a, fn i ->
			(1 / (1 + :math.exp(-1 * i)))
		end)
	end
end

w10 = [ 1.6427742,   1.292738,    0.13679211,  0.09276549,  0.31930393,  0.18661255,   1.0932094,  -0.7801719 ]
w11 = [ 1.4525393,   1.1745324,   0.20021456,  0.497589,    0.11109181,  0.33417672,  -0.44360426, -1.1322144 ]
b1 = [-0.20589589,  0.09548836,  0.54812616,  0.60974604,  0.15801114,  0.30214155,  0.38613093,  1.4007448 ]
w2 = [ 1.6341141,  1.1821091, -0.24378781, -0.2940346, -0.22311434, -0.34191525, -0.79992425,  1.717806  ]
b2 = -0.5830822

for i <- 0..1, j <- 0..1 do
	h = Nn.mul(w10, i)
	l = Nn.mul(w11, j)
	h = Nn.add(h, l)
	h = Nn.add(h, b1)
	h = Nn.tanh(h)
	y = Nn.sum(h, w2)
	y = y + b2
	y = Nn.tanh([y])
	y = Enum.at(y, 0)
	IO.puts "#{i} #{j} #{y}"
end



```

# 実行結果

```
0 0 0.007566404874442216
0 1 0.9309703232706648
1 0 0.9168728513830984
1 1 0.011421405940028202


```

# 成果物

https://paiza.io/projects/fauKj992m6YDhmqpJUxewQ

以上。
wslのtensorflowでkerasのbackend その6

# 概要
wslのtensorflowでkerasのbackendを試す。
練習問題、やってみた。

# 練習問題
kerasのbackendでxorを学習したウェイトとバイアスを取り出せ。

# サンプルコード

```

from tensorflow.python.keras import backend as K
from tensorflow.python.keras.optimizers import SGD

dx, dy = [], []
dx.append([0.0, 0.0])
dx.append([0.0, 1.0])
dx.append([1.0, 0.0])
dx.append([1.0, 1.0])
dy.append(0.0)
dy.append(1.0)
dy.append(1.0)
dy.append(0.0)
input_dim = 2
hidden_dim = 8
output_dim = 1
x = K.placeholder(shape = (None, input_dim), name = "x")
ytrue = K.placeholder(shape = (None, output_dim), name = "y")
W1 = K.random_uniform_variable((input_dim, hidden_dim), 0, 1, name = "W1")
b1 = K.random_uniform_variable((hidden_dim, ), 0, 1, name = "b1")
W2 = K.random_uniform_variable((hidden_dim, output_dim), 0, 1, name = "W2")
b2 = K.random_uniform_variable((output_dim, ), 0, 1, name = "b2")
params = [W1, b1, W2, b2]
hidden = K.tanh(K.dot(x, W1) + b1)
ypred = K.tanh(K.dot(hidden, W2) + b2)
loss = K.mean(K.square(ypred - ytrue), axis = -1)
optimizer = SGD()
updates = optimizer.get_updates(params = params, loss = loss)
train = K.function(inputs = [x, ytrue], outputs = [loss], updates = updates)
test = K.function(inputs = [x], outputs = [ypred])
print ("train loss")
for ep in range(2201):
	for i in range(4):
		st = train([[dx[i]], [[dy[i]]]])
	if ep % 100 == 0:
		print (ep, st[0])
print ("test value")
for i in range(4):
	st = test([[dx[i]]])
	print (dx[i], st[0])
print (K.eval(W1))
print (K.eval(b1))
print (K.eval(W2))
print (K.eval(b2))


```

# 実行結果

```
[[ 1.6427742   1.292738    0.13679211  0.09276549  0.31930393  0.18661255   1.0932094  -0.7801719 ]
 [ 1.4525393   1.1745324   0.20021456  0.497589    0.11109181  0.33417672  -0.44360426 -1.1322144 ]]
[-0.20589589  0.09548836  0.54812616  0.60974604  0.15801114  0.30214155  0.38613093  1.4007448 ]
[[ 1.6341141 ]
 [ 1.1821091 ]
 [-0.24378781]
 [-0.2940346 ]
 [-0.22311434]
 [-0.34191525]
 [-0.79992425]
 [ 1.717806  ]]
[-0.5830822]
```

以上。
wslのtensorflowでkerasのbackend その5

# 概要
wslのtensorflowでkerasのbackendを試す。
練習問題、やってみた。

# 練習問題
違う違うkerasのbackendでxorを回帰せよ。

# サンプルコード

```
from tensorflow.python.keras import backend as K
from tensorflow.python.keras.optimizers import SGD

dx, dy = [], []
dx.append([0.0, 0.0])
dx.append([0.0, 1.0])
dx.append([1.0, 0.0])
dx.append([1.0, 1.0])
dy.append(0.0)
dy.append(1.0)
dy.append(1.0)
dy.append(0.0)
input_dim = 2
hidden_dim = 8
output_dim = 1
x = K.placeholder(shape = (None, input_dim), name = "x")
ytrue = K.placeholder(shape = (None, output_dim), name = "y")
W1 = K.random_uniform_variable((input_dim, hidden_dim), 0, 1, name = "W1")
b1 = K.random_uniform_variable((hidden_dim, ), 0, 1, name = "b1")
W2 = K.random_uniform_variable((hidden_dim, output_dim), 0, 1, name = "W2")
b2 = K.random_uniform_variable((output_dim, ), 0, 1, name = "b2")
params = [W1, b1, W2, b2]
hidden = K.tanh(K.dot(x, W1) + b1)
ypred = K.tanh(K.dot(hidden, W2) + b2)
loss = K.mean(K.square(ypred - ytrue), axis = -1)
optimizer = SGD()
updates = optimizer.get_updates(params = params, loss = loss)
train = K.function(inputs = [x, ytrue], outputs = [loss], updates = updates)
test = K.function(inputs = [x], outputs = [ypred])
print ("train loss")
for ep in range(2201):
	for i in range(4):
		st = train([[dx[i]], [[dy[i]]]])
	if ep % 100 == 0:
		print (ep, st[0])
print ("test value")
for i in range(4):
	st = test([[dx[i]]])
	print (dx[i], st[0])

```

# 実行結果

```
0 [0.99947804]
100 [0.99927306]
200 [0.9988326]
300 [0.9973389]
400 [0.9603729]
500 [0.89452595]
600 [0.88743246]
700 [0.8699967]
800 [0.8361633]
900 [0.77162397]
1000 [0.6578545]
1100 [0.5131661]
1200 [0.38491297]
1300 [0.2743435]
1400 [0.1735898]
1500 [0.093261]
1600 [0.04356799]
1700 [0.01939974]
1800 [0.00904248]
1900 [0.00460647]
2000 [0.00257499]
2100 [0.00156133]
2200 [0.00101197]
test value
[0.0, 0.0] [[0.01334524]]
[0.0, 1.0] [[0.8870487]]
[1.0, 0.0] [[0.890763]]
[1.0, 1.0] [[0.0255334]]
```
以上。
wslのtensorflowでkerasのbackend その4

# 概要
wslのtensorflowでkerasのbackendを試す。
練習問題、やってみた。

# 練習問題
kerasでxorを回帰せよ。

# 写真

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18104/365f2491-ba43-6939-a03a-ef678325a859.png)


# サンプルコード

```



import numpy as np
from tensorflow.python.keras.models import Sequential
from tensorflow.python.keras.layers import Dense, Activation
from tensorflow.python.keras.optimizers import SGD

X = np.array([[0, 0], [0, 1.0], [1.0, 0], [1.0, 1.0]])
y = np.array([[0.0], [1.0], [1.0], [0.0]])
model = Sequential()
model.add(Dense(4, input_dim = 2))
model.add(Activation('tanh'))
model.add(Dense(1))
model.add(Activation('sigmoid'))
sgd = SGD(lr = 0.1)
model.compile(loss = 'binary_crossentropy', optimizer = sgd)
model.fit(X, y, batch_size = 1, epochs = 200)
model.summary();
print (model.predict_proba(X))





```

# 実行結果

```
Epoch 198/200
4/4 [==============================]4/4 [==============================] - 0s 3ms/step - loss: 0.0710

Epoch 199/200
4/4 [==============================]4/4 [==============================] - 0s 3ms/step - loss: 0.0703

Epoch 200/200
4/4 [==============================]4/4 [==============================] - 0s 3ms/step - loss: 0.0696

_________________________________________________________________
Layer (type)                 Output Shape              Param #
=================================================================
dense_1 (Dense)              (None, 4)                 12
_________________________________________________________________
activation_1 (Activation)    (None, 4)                 0
_________________________________________________________________
dense_2 (Dense)              (None, 1)                 5
_________________________________________________________________
activation_2 (Activation)    (None, 1)                 0
=================================================================
Total params: 17
Trainable params: 17
Non-trainable params: 0
_________________________________________________________________
[[0.01989261]
 [0.92919046]
 [0.9272215 ]
 [0.09625241]]
```

以上。
限界ド文系大学生がプログラミングをやってみて思ったこと

こんにちは、初めまして。堕罪ｵｻﾑです。
某文豪みたいな顔をしていますが、大学生で**国語学・日本語学**を専攻しています。
今日はざっとですが、初学者のｵｻﾑがつまずいているところをほんの少し掘り下げて記事を書いてみました。共感していただけたり、こんなところがわからないのか！と発見になればいいなと思います。よろしくお願いします！

<h2>ド文系の私がなぜプログラミングを始めたのか?</h2>

プログラミングとの出会いは唐突でした——。

というのも、当方限界大学生であるため就活云々で問題を抱えていまして、お付き合いをしている方にウワ～！と相談したところ、

「俺エンジニアだからプログラミング教えられるよ～」

という返事だったので私も、

「ほな、やってみるかあ」(プログラミングってJavaScriptとか、ぱいそん？とかそういうのだよね？)

という、ざっとこんな感じでした。

<h2>実際やってみて難しかったこと</h2>
<h3>1．HTML&CSSについて</h3>

まずはHTMLとCSSから始めました。引っかかった部分としては

**「閉じタグを忘れる」**
**「aタグとhタグがよくわかんなくなる」**
**「inputとかtextboxあたりの使い分けがよくわからない」**

辺りでした。本音を言うとこの記事を書くときも閉じタグを忘れたりしてます。(笑)

CSSは調べたりして頑張れば自分のやりたいようにできました。でも映画などのWebサイトを見せられて思わずギョエ～～！？となりました。あれはやばい。


<h3>2．JavaScriptについて</h3>

今現在も学習中なのでそれも踏まえて難しかった・難しいと思うことを挙げていきます。

主に引っかかっているのは
**「for文」**
です。

これは本当にうまくいかないですね……。

・初期化式で、例えば入力されたものの2行目以降から回したいときに**i=3**みたいに書いてしまう

・条件式がlines.lengthでいいものを**splitした行が含まれている(と思っている)変数**をいれようとする

・for文の中でfor文を書くのが異常にむずい。if文が関わってくると**どこにif文を入れればいいかわからなくなる**

・**結果の出力をfor文の中の{}に入れてしまう**

このあたりがとっても理解が難しいです。初学者というより、私が、になってしまうかもですが、for文はかなり苦手意識があります。もしfor文で困っている人を見かけたら優しくしてください。(？)

<h3>3．変数名</h3>

パッと見で非常にわかりにくい名前つけがち問題です。この辺は最近Qiitaの変数名の記事を見たりして勉強中ですが、今でもたまに変数名をディスられるので気を付けるようにしています。

<h2>そもそもの話</h2>

そもそも**アルゴリズムを理解できていない、またはどのように書けばいいのか理解できていない**ことが多いです。主にfor文で引っかかるものはほぼこれです。
どの手順でコードを書けばいいのか、**自分はどういった手順で書きたいと思っているのか。**

自分はノートを使って手順を考えてみたり、この難しいfor文をどうすればいいかわからなくなってごちゃごちゃになっている頭の中を整理したりしてます。実際ノートに書いてみるのっていいらしいです。理数系の母親も言ってたし。

もしド文系で数学から怪しいという方がいらっしゃったら、一回小学校高学年の算数まで戻ってみるといいかもしれないです。私は受験科目や高校で取得した単位の関係で5年近く数学から離れていました。もともと算数や数学が特に苦手だったので基礎的な部分が抜けていることにプログラミングを経て気づかされました。私も小5のワークからやり直します。(泣)
**※文系大学生の多くが数学や算数ができないというわけではないのでご理解のほどよろしくお願いします。**


はじめての記事で拙い部分などたくさんありますが、またなにか書けそうになったら更新したいと思っています！
ここまで読んでいただきありがとうございました！
【Dart】相対パスでimportしないようにと言われていた理由がわかった

## 今日のできごと
社内で開発している際、「import文は自動補完で相対パスになってしまうけど、絶対パスに直してからコミットするように。」と言われていました。社内ではルールを守っていましたが、個人開発では、AndroidStudioの自動補完に頼っておりました。（クラス名を記載後、importがないためエラーとなったら、エラークリック時に表示されるオプションで、importを補完しておりました。）
今日、ファイルが増えてきたため、機能ごとにフォルダを分け、ファイルを移動しました。「Refactor」を使って移動したため、手動でのソース修正は不要だと思っていましたが、移動後に起動するとエラーが・・・。

```
lib/view/login_sign_up//input_list_id_view.dart:9:8: Error: Error when reading 'lib/view/main.dart': No such file or directory
import '../../main.dart';
```
そうです。フォルダ構成を変更してしまったため、相対パスでimportされていた部分で、ファイルを正しく認識できなくなってしまっていたのです。社内で注意いただいた時は、記載を統一するためかな？と思っておりましたが、このために相対パスで記載しないルールとなっていたのですね。身をもって実感しました。

## 補足
その後、Android Studioで以下の設定をしたところ、自動で絶対パスでimportされるようになったように思われます。（先ほど設定して何度か試しただけのため、違ったら申し訳ありません。）

・Editor > General > Auto import > Dart で　「Update imports on paste」を 'Always'

![スクリーンショット 2023-07-27 0.34.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/661656/74fee636-dcab-49ae-37e1-389885d10a57.png)

・Language & Frameworks > Flutter > Editor で「Organize imports on save」にチェック

![スクリーンショット 2023-07-27 0.37.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/661656/e927479c-4ac8-36e6-6767-d27443429e5a.png)




## 参考URL

https://zuma-lab.com/posts/flutter-initial-settings

https://www.youfit.co.jp/archives/817

https://zenn.dev/flutteruniv_dev/articles/9168c156e28105