OmniAICreator/Qiita-1.07M huggingface dataset:
Webサイト刷新(メインビジュアル編)

こんにちは！
第二回目は、メインビジュアルを進めていきます。

前回はこちら

https://qiita.com/penta-design-system/items/288f6ed48ed5740f355f

メインビジュアルは、サイトの顔となるので、しっかり考えないといけないところですが、
考えるより先に手を動かす方が結果的に良い方向に持っていけるので、まずは簡単に作成できる方法を試してみました

# 準備
SVGをアニメーションしたいので、まず素材となるSVGを探します。

「svg 無料」で検索すると商用利用もOKなライセンスがありました。

https://undraw.co/illustrations


同じように「svgアニメーション ジェネレーター」で検索すると、
「SVG Artista」が紹介されており、簡単にアニメーションができそうでした。
(ライセンスはMITです)

https://svgartista.net/

# 利用
次にFigmaで気に入ったSVGを並べて、グループ化をしたのちSVGでエクスポートします。
「SVG Artista」でSVGを開くと、それらしいアニメーションを自動的に設定してくれます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3522989/97446a3a-2827-e899-bad0-7246e8c7cba5.png)
FILL ANIMATIONでアニメーションの開始や変化の時間をお好みで設定します。


# 実装
「SVG Artista」の右上のGET CODEからSVGのコードを取得して、Vueファイルに張り付けてコンポーネント化します。
```Vue:MainVisula.vue
<template>
    <svg>
      ...
    </ svg>
</ template>
<style scoped>
/***************************************************
 * Generated by SVG Artista on 6/21/2024, 12:40:55 AM
 * MIT license (https://opensource.org/licenses/MIT)
 * W. https://svgartista.net
 **************************************************/
@-webkit-keyframes animate-svg-fill-1 {
  0% {
    fill: transparent;
  }

  100% {
    fill: rgb(242, 242, 242);
  }
}
// ...
 </style>
```

default.vueでTOP画面を実装しているので、MainVisual.vueを入れ込みます。
```Vue:default.vue
<v-main>
  <div v-if="isTop" class="py-4 main-svg-area">
    <MainVisual />
  </div>
  <!-- 省略 -->
</v-main>
<style scoped>
.main-svg-area {
  background: rgb(34, 193, 195);
  background: linear-gradient(
    0deg,
    rgba(34, 193, 195, 1) 0%,
    rgba(253, 187, 45, 1) 100%
  );
}
</style>
```
背景に前回決めたカラーパターンを適用しています。

## 完成
![mainvisual2.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3522989/0f6d20e4-7c15-103a-0c94-18a8fe8d691e.gif)

gifで画質が荒いですけど、実際は綺麗に表示されています😁
EloquentのchunkとchunkByIdの違いと使い分け

:::note
<details><summary >AI要約</summary>

- chunkメソッドは、データをオフセットとリミットで分割して処理する
- chunkByIdメソッドは、主キー（ID）を基準にデータを分割して処理する
- chunkメソッドは、データの追加や削除でオフセットがずれるリスクがある
- chunkByIdメソッドは、主キーにより安定したチャンク処理が可能
- 動的データにはchunkById、静的データにはchunkメソッドを使用すると良い
</details>
:::

## はじめに
以前`chunk`メソッドに関する記事を書きました

https://qiita.com/t1k2a/items/25f145135a16bc5e3f44

しかし`chunk`メソッドを使用するとデータ更新の際に予期しないことが起きてしまうので
その対策として`chunkById`メソッドがあります
それぞれの違いを見ていきたいと思います

## `chunkById`メソッドとは
主キーを使用してデータをチャンク（塊）に分割し、各チャンクを順次処理します
チャンクの境界を主キーで管理するため、データの追加や削除による影響を受けにくくなります

使用例
```php
User::chunkById(100, function ($users) {
  foreach ($users as $user) {
    // ユーザーに関する処理
  }
});
```

### メリット
- 主キーでチャンクを分割するため、データの追加や削除の影響を受けにくい
- パフォーマンスが安定する

### デメリット
- 主キーが存在しない場合や、主キーが連続していない場合に適用しにくい

### 使い分けのポイント
- 動的データ
    - データが頻繁に変更される場合は、`chunkById`を使用する方が安全です
    - 主キーを使用しているため、データの追加や削除の影響を受けにくくなります
        - 取得の際はIDを参照するため（詳しくは後述）
- 静的データ
    - データがほとんど変更されない場合や、データの変更が処理に影響を与えない場合は、`chunk`メソッドでも問題ありません

## 主キーを使った分割の具体例
### `chunk`メソッドの動作と問題点
`chunk`メソッドはデータをオフセットとリミットで分割します
例えば、データが１０００件ある場合、以下のようにクエリが実行されます

#### 最初のチャンク
```sql
SELECT * FROM users LIMIT 100 OFFSET 0
```

##### `chunk`メソッドの問題点
データの削除や追加があるとオフセットがずれてしまいます

#### １件のデータを削除

```sql
DELETE FROM users WHERE id = 50;
```

#### 次のチャンク

```sql
SELECT * FROM users LIMIT 100 OFFSET 100;
```

結果としてID50が削除されているためID101から200までのユーザーを取得するはずが、
実際にはID102からユーザーが取得されることになり、レコードが重複されたり、一部が抜け落ちたりする可能性があります

## `chunkById`メソッドの動作
`chunkById`メソッドは、主キー（ID）を基準にしてデータを分割します

#### 最初のチャンク
```sql
SELECT * FROM users WHERE id > 0 ORDER BY id ASC LIMIT 100;
```

#### 次のチャンク
```sql
SELECT * FROM users WHERE id > 100 ORDER BY id ASC LIMIT 100;
```


### `chunkById`メソッドでデータを削除

#### 最初のチャンク
```sql
SELECT * FROM users WHERE id > 0 ORDER BY id ASC LIMIT 100;
```
結果：ID 1から100のユーザーを取得


#### レコード削除
```sql
DELETE FROM users WHERE id = 50;
```

#### 次のチャンク
```sql
SELECT * FROM users WHERE id > 100 ORDER BY id ASC LIMIT 100;
```

結果：ID 101から200のユーザーを取得

この場合、ID50のレコードは削除されるため、取得されるデータに影響はありません

## まとめ
`chunk`メソッドは、データをオフセットとリミットで分割するため、
データの追加・削除があるとオフセットがずれて、重複や抜け落ちが発生する可能性があります
`chunkById`メソッドが主キーを基準にデータを分割するため、データの追加・削除の影響を受けにくく、安定したチャンク処理が可能です
また、静的にデータを扱うなら`chunk`メソッド、動的にデータを扱うなら`chunkById`メソッドを記述して明示的にその処理の意味を与えると保守性の改善にも繋がりそうですね
SECCON Beginners 2024 を紹介されたのでやってみた getRank

# これはなに？

https://www.seccon.jp/13/seccon_beginners/content.html

会社の方に教えていただいて、面白そうだったのでイベントは終わってますが、挑戦してみようと思います

# ローカル環境で実行

コードをDockerで実行します
以下のような画面が表示されました

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/266407/49be46ca-be2c-f7b7-7956-416c81dcf2a8.png)

# 何をするの？

docker-compose.yamlで渡されている環境変数の`FLAG`の値を探す問題になります

## コードを読んでみる

`process.env.FLAG`が参照されている箇所は１箇所

main.ts:L21 にあります
```ts
  const rank = getRank(score);
  if (rank === 1) {
    return {
      rank,
      message: process.env.FLAG || "fake{fake_flag}",
    };
  } else {
    return {
      rank,
      message: `You got rank ${rank}!`,
    };
  }
```

どうやら`rank`が１になればよさそう

## 解き方とか考え方

https://qiita.com/xryuseix/items/ed5fad16a990d27edac4

問題を作成された方が解説のほうがわかりやすいので、そちらを見たほうがいいです

# 説明を読んでわからなかった事

## `0X${"F".repeat(256)}`を入力するとなぜいいのか？

21024 - 1、またはおよそ 1.7976931348623157E+308 よりも大きな数値は `Infinity`になります

https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Number/MAX_VALUE

## Infinity って

グローバルプロパティ Infinity は無限大を表す数値です

https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Infinity

https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Number/POSITIVE_INFINITY

> POSITIVE_INFINITY を POSITIVE_INFINITY 以外の任意の正の値で割った商は POSITIVE_INFINITY になります。

```javascript
console.log(Infinity / 10);
> Infinity
```

だから、ランキング1位になれるんだということがわかりました

# 最後に

問題を作られた方お疲れ様でした:relaxed:
parseInt(), Numberについて深く知ることができたのと、parseInt（）の使い所、気をつける点がわかった気がしました
[memo]Python logging

python logging機能を自分用にまとめました
きまぐれに追記・修正するかもしれません

https://docs.python.org/ja/3/howto/logging.html

# Loggerの部品

loggerとしては以下のオブジェクトがある

- logger:アプリケーションコードが直接使うインターフェースを公開します
- handler:(ロガーによって生成された) ログ記録を適切な送信先に送ります
- filterどのログ記録を出力するかを決定する、きめ細かい機能を提供します
- formatter:ログ記録が最終的に出力されるレイアウトを指定します

> ログイベント情報は LogRecord インスタンスの形で、 logger, handler, filter, formatter の間でやりとりされます。




# LoggerとHandlerのフローチャート

![](https://docs.python.org/ja/3/_images/logging_flow.png)

# Loggerオブジェクト

> Logger オブジェクトの仕事は大きく三つに分かれます。
一つ目は、アプリケーションが実行中にメッセージを記録できるように、いくつかのメソッドをアプリケーションから呼べるようにしています。
二つ目に、ロガーオブジェクトはどのメッセージに対して作用するかを、深刻度 (デフォルトのフィルタ機構) またはフィルタオブジェクトに基づいて決定します
。三つ目に、ロガーオブジェクトは関心を持っているすべてのログハンドラに関連するログメッセージを回送します。



つまり・・・こう・・？

![python_logging.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/425466/e3adf945-dd96-5442-49a0-60bc3a3aad11.png)
# Handlerオブジェクト

> Handler オブジェクトは適切なログメッセージを (ログメッセージの深刻度に基づいて) ハンドラの指定された出力先に振り分けることに責任を持ちます。

Loggerオブジェクトに`addHandler()`関数でハンドラを追加できる
ハンドラは色々種類がある。->[useful-handlers](https://docs.python.org/ja/3/howto/logging.html#useful-handlers)

- `setLevel()`：ロギングレベルの設定
- `setFormatter()`：フォーマットの設定
- `addFilter()`：フィルタの追加
- `removeFilter()`：フィルタの削除 

がハンドラ設定に関連する関数になる。

ロギングレベルは以下。

### ロギングレベル

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/425466/849e2b82-fc32-f51d-5397-db8103efc94d.png)


# フォーマッタオブジェクト

> フォーマッタオブジェクトは最終的なログメッセージの順序、構造および内容を設定します。

styleには以下3つが設定可能です
- '%'：メッセージフォーマット文字列では %(<dictionary key>)s 形式の置換文字列が使われます
- '{'：メッセージフォーマット文字列は (キーワード引数を使う) str.format() と互換となります
- '$'：メッセージフォーマット文字列は string.Template.substitute() で期待されているものと一致します
検証環境をキレイに使うだけで、品質が向上する理由 ３選

## はじめに
どうも、雑に扱われた検証環境（修正の確認やテストを行う環境）の怨みです。
検証環境をキレイに使う意識が皆さんの中で育ってくれると嬉しいです。

## 目次
+ 「キレイに使う」とはどういうことか
+ 「キレイに使う」と何故品質が向上するのか
+ 「キレイな検証環境」を維持する方法

## 「キレイに使う」とはどういうことか
### hogehogeしますよね？
+ 修正途中のコードを環境に入れた
+ エラーが起きるように設定した
+ 既存のデータを変更した
+ 新規に設定を追加した
+ DBを直接いじった

おそらく日常茶飯事にしていると思います。
これらは各種検証の必須操作でしょう。
こういった操作無しに開発はできません。

### hogehogeした後……
+ 完成したらそれに上書きするから
+ あとでまた検証するから
+ 誰も使ってなさそうだし
+ 他に影響ないでしょ
+ 関連データは範囲外だからいじってない

わかります、非常によくわかります。

## 「キレイに使う」と何故品質が向上するのか
端的に言えば、技術的負債と似たようなものです。
つまるところ「キレイに使わないと品質が低下」します。
以下、例を挙げていきます。
もちろんこれらの例以外にも品質低下の要因はあります。

### エラーを誤検出して調査に時間が使われる
`本来であれば処理Xを実行するとX´,Y´,Z´のデータが作成されるが、`
`自分の検証ではZ´のデータが必要だから、これだけ作って検証しよう`
ということで実施してそのまま放置していたら、
他人の検証がエラーとなるケースです。
エラーで引っかかった人は、エラーを回避するための調査や、
回避のために追加でデータを作成するなど、検証に余計なコストがかかります。

また、
「本来Z´のデータのみが作成されることがないから処理Xの不具合ではないか」
と調査をする人が出てくるでしょう。
そしてご存じの通り徒労に終わります。

結果として、検証コストや不要な調査コストが増加します。

### 本来検出できたエラーを検出できない
`このアカウントはずっと昔からデータA,B,Cが紐づいていて、`
`実行すると処理A´,B´,C´が実行されるから、B´の動作検証に使おう`
と思って実行したら、誰かがデータBの紐づけを消していた、という場合があります。

「エラーが出てないので問題ない」と思っていたら実は検証できておらず、
本当はB´の処理でエラーになるケースを見逃します。

結果として、本来検出できた不具合をリリースしてしまいます。
リリースまで行かなくとも、もっと後続のテストで引っかかり、
修正コストが増大することもあります。

### リグレッションテストが息絶える
`検証でちょっと画面変えた。`
`既存データちょっと変更した。`
`ちょっとだけ` `ちょっと` `ちょっと`
同環境でリグレッションテストを実施している場合、エラーになります。
手動ならまだしも、それが自動テストだったり、
E2Eならばさらにダメージはエグイことになります。

ECサイトなど、厳密な金額計算が行われる場合、
商品データの値段や消費税率、送料設定、ユーザー設定など、
どこかをちょっとでも変更するだけで最終結果が狂います。

セレニウムなどを利用したE2E自動テストでは、
要素の指定方法にもよりますが、
ボタン1つ移動しただけで動かなくなります。

その「ちょっと」を無限に探して行かねばなりません。
それも、毎回違うところが異なっています。
`自動テストの実行時間より、動くようにする時間の方がかかってる。`
ということもあり得ます。というかありました。
だからこそこの記事をしたためています。

## キレイな検証環境を維持する方法
### 方法や運用での制御は不向き
+ 勝手に変更するな
+ 変更したら必ず元に戻せ

は現実的でありません。
人は忘れる生き物ですし、楽できるなら楽したいのがエンジニアの性です。
また、新たに人が入ってくることもありますが、
再教育し続けても必ずどこかで変更が発生します。

### クラウド環境を検証環境として利用するべし
この一択に収束します。
EC2やOCIなどサービスはいろいろありますが、
以下の通り、キレイな検証環境を恒常的に利用できます。
+ 複製が容易
  + 個人ごとに環境が利用できるので、他の人の影響を受けません
+ 元に戻す必要がない
  + そもそも戻さなくてよくなれば、戻し忘れることはありません
+ 必ずキレイな初期状態からスタートできる
  + 初期状態をリグレッションテストの開始状態と一致させておけば、外部要因による偽陽性を排除できます

追加コストは発生し辛くなり、
それどころか「元に戻すコスト」が不要になります。
そうすると「もしミスってぶっ壊しても安心！」なので、
恐々検証することもなくなります。

## さいごに
みなさんが検証環境をキレイに利用することで、
怨みの私が成仏できることを祈っています。
ローカル5Gでなぜ工場が不幸になるのか？ 普及が難しい6つの理由

何年立っても抜け出せないローカル5GのPoC地獄。そんなキチガイな5Gの普及が難しい理由を momokokko が考察します。

1. 初期導入コストの高さ
ローカル5Gネットワークの構築には、多額の初期投資が必要です。基地局の設置やネットワークインフラの整備、対応する機器の導入など、工場にとっては大きな財政負担となる可能性があります。

2. 運用とメンテナンスの負担
5Gネットワークの運用と維持には専門知識が必要です。工場は専用の技術者を雇用するか、外部の専門業者に依頼する必要があり、そのためのコストや人材確保の問題が発生します。

3. サイバーセキュリティのリスク
5Gネットワークは高いデータ転送速度と低遅延を実現する一方で、サイバーセキュリティのリスクも増加します。ローカル5Gを利用することで、工場の生産設備やデータが外部からの攻撃にさらされるリスクが高まり、セキュリティ対策の強化が求められます。

4. システムの互換性問題
既存の工場システムや機器がローカル5Gと互換性がない場合、全面的なシステム更新が必要となる可能性があります。これには追加の費用と時間がかかり、生産ラインの一時的な停止や効率の低下を引き起こすかもしれません。

5. 技術の進化による過渡期の問題
5G技術はまだ発展途上であり、新しい技術や規格が次々と登場する可能性があります。工場が一度導入したローカル5Gが短期間で時代遅れになるリスクがあり、再度の投資やアップグレードが必要になるかもしれません。

6. 運用環境の複雑化
5Gの導入により、工場内のネットワーク環境が複雑化する可能性があります。複雑なネットワーク環境は、トラブルシューティングやメンテナンスの難易度を高め、運用の効率性を低下させることがあります。

これらの理由により、ローカル5Gの導入が工場にとって不幸な結果をもたらす可能性があると筆者は考えています。
What is khalar kobor

<a href="https://khalarkobor.com/">khalar kobor</a> is your go-to source for the latest news and updates from Bangladesh and around the world. We provide timely, accurate, and comprehensive coverage on politics, business, technology, entertainment, sports, and more. Our dedicated team of journalists works tirelessly to bring you the stories that matter, ensuring you're always informed about the events shaping your world. Stay ahead with in-depth analysis, expert opinions, and a user-friendly experience. Join our growing community of readers who trust Khalarkobor.com for reliable and engaging news content. Your news, your way – only at Khalarkobor.com.
tel: 46182465
Mail: 
website: <a href="https://khalarkobor.com/">https://khalarkobor.com/</a>
#khalarkobor #khalarnews
![Logo.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3824238/d2570a1f-a472-1930-b6f6-4f6253e3f293.jpeg)
React バーコード生成ライブラリ react-barcode と next-barcode の比較

# はじめに
この記事では、React のバーコード生成ライブラリである `react-barcode` と `next-barcode` を比較します。

https://github.com/kciter/react-barcode

https://github.com/Bunlong/next-barcode

# ダウンロード状況
`react-barcode` のほうが圧倒的にダウンロードされています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/318188/40f5702e-1837-8c16-1dbb-775467afee0e.png)


https://npmtrends.com/next-barcode-vs-react-barcode

# 開発環境
実装時の開発環境は以下の通りです。

- Windows 11
- VSCode
- react-barcode 1.5.3
- next-barcode 1.5.0
- TypeScript 5.4.2
- React 18.3.1
- Node.js 20.13.1
- npm 10.8.1

# react-barcode

https://github.com/kciter/react-barcode

基本的な実装は以下の通りです。

- `Barcode` コンポーネントをインポートして実装
- バーコードの値は `Barcode` コンポーネントの `value` に渡す

```App.tsx
import { FC } from "react";
import Barcode from "react-barcode";

export const App: FC = () => {
  return (
    <>
      <h2>React Barcode</h2>
      <Barcode value="12345678" />
    </>
  );
};

```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/318188/9cddd452-b018-9d37-7a25-e2ecea6d26d4.png)


# next-barcode

https://github.com/Bunlong/next-barcode

:::note
以前 `react-barcodes` という名前のバーコード生成ライブラリがありましたが、現在このライブラリは非推奨になっており、`next-barcode` に移行しました。

https://www.npmjs.com/package/react-barcodes
:::

基本的な実装は以下の通りです。

- `useBarcode` をインポート
- `useBarcode` から `inputRef` を取得
- `svg` タグの `ref` に `inputRef` を渡す
- バーコードの値は `useBarcode` の引数 `value` に渡す

```App.tsx
import { useBarcode } from "next-barcode";
import { FC } from "react";

export const App: FC = () => {
  const { inputRef } = useBarcode({
    value: "12345678",
  });

  return (
    <>
      <h2>Next Barcode</h2>
      <svg ref={inputRef} />
    </>
  );
};

```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/318188/a368fe45-4df2-fd95-b7af-0a96f6f11bd5.png)

:::note
`svg` の代わりに `canvas` や `img` も利用できます。

```App.tsx
import { useBarcode } from "next-barcode";
import { FC } from "react";

export const App: FC = () => {
  const { inputRef } = useBarcode({
    value: "12345678",
  });

  return (
    <>
      <h3>Canvas</h3>
      <canvas ref={inputRef} />
    </>
  );
};

```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/318188/8791c67f-567c-dbce-a9b7-519197e121f0.png)

```App.tsx
import { useBarcode } from "next-barcode";
import { FC } from "react";

export const App: FC = () => {
  const { inputRef } = useBarcode({
    value: "12345678",
  });

  return (
    <>
      <h3>Image</h3>
      <img ref={inputRef} />
    </>
  );
};

```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/318188/1647cabd-5c8b-30fb-e606-4624483dd202.png)

:::

# 所感

- できることに大きな差はなさそう（両者ともフォーマットやサイズ、余白、色のカスタマイズが可能）
- 実装は `react-barcode` のほうがシンプル
- ダウンロード実績は圧倒的に `react-barcode`

# 参考
- [react-barcode](https://github.com/kciter/react-barcode)
- [next-barcode](https://github.com/Bunlong/next-barcode)
HDMI仮想コネクタでUbuntu24.04にリモートデスクトップ接続

## 用意するもの
今回は接続先PCとして中古の小型PC(OptiPlex-3060 Micro)を使用しました。
HDMI仮想コネクタは1個800円以下で入手可能です。

* 接続先PC
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/246786/88ba2116-2693-d35b-9e77-ad1fd45dce2f.png" width=40%>


* [HDMI仮想コネクタ](https://amzn.asia/d/02TAjS2u) 
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/246786/ae972d3f-16f5-cae4-0247-c84a8c534c3d.jpeg" width=10%>



## 手順

### 0.事前準備

接続先PCにUbuntuをインストールする方法は以下を参照ください。

https://dev.classmethod.jp/articles/installed-ubuntu-on-a-disused-laptop/

OptiPlex-3060 Microの場合、Boot Menuは電源を入れて「F12」キーを連打すると入れます。

### 1.自動ログイン設定

GUI画面から以下を開き、自動ログイン設定を行います。

Setting → System → User

ロックを解除し、以下を設定します。

* Automatic LoginをON

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/246786/2479abfc-4201-6eda-f3da-af1427f31379.png)

### 2.RDP設定をONにする

Ubuntuのインストールが完了したら、GUI画面からリモートデスクトップ設定をONします。

Setting → System → Remote Desktop

* Desktop SharingをON
* Remote ControlをON
* Passwordを設定

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/246786/1be02779-a217-1551-066d-7a145342fafc.png)

ONにするとキーリングのパスワードを設定しろという風に言われますが、何も入れずに空白にしておきます。ここで入力してしまうとRDP用のパスワードがログインする際にコロコロ変わり、RDP接続ができなくなるので注意です。

※もし誤ってパスワードを入れてしまった場合は[こちら](http://slapper.sblo.jp/article/189603656.html)を参照ください。

### 3.スクリーンロックの解除をする

Setting → Privacy＆Security → Screen Lock

* Brank Screen DelayをNever
* Automatic Screen LockをOFF
* Lock Screen on SuspendをOFF

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/246786/346ffcc1-4a33-1fd7-1619-0a7399775295.png)

### 4.スリープ設定をOFFにする

コマンドプロンプトを開き、以下を入力します。

```
sudo systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target
```

これでスリープ機能の解除ができます。

### 5.HDMI仮想コネクタの装着

接続先PCを一旦シャットダウンし、HDMIケーブルをHDMI仮想コネクタに付け替えます。

### 6.デスクトップの解像度設定

電源を入れて、別PCから接続先PCにリモートデスクトップ接続し、接続ができたら完了です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/246786/f0ce0fa1-aabd-b9ff-be99-e7815730d4f4.png)

初期解像度が4Kになっている可能性があるため、接続元PCの解像度に合わせて設定ください。今回はFullHD(1920x1080)に設定しました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/246786/7bb2516f-79e2-f648-b6c5-980694b55c6c.png)
[Cloudformation]ECSのServiceを更新したらタスク数が0になった件

# 現状の管理方法

ECSのServiceをCloudformaitonで管理しており、
デプロイ時に`aws cloudformation deploy`を実行しています。

具体的には以下のようなイメージです。

```sh
aws cloudformation deploy \
    --template-file template/sample.yml \
    --stack-name sample-ecs-service \
    --parameter-overrides ImageTag=${image_tag} EnvName=${env} DesiredCount=1 \
    --capabilities CAPABILITY_NAMED_IAM \
    --no-fail-on-empty-changeset
```

## 発生経緯

元々はECSのタスクは以下のように固定で起動していました。

AutoScalingの導入をするときにスケールアウト中にデプロイすることで
タスク数が変動してしまうことを懸念し`DesiredCount`のオプションを削除しました。

AutoScaling設定で最小を1 にしているので1は起動する認識でいました。

尚かつデフォルトパラメータで1を指定しているため問題ないだろうと考えてました。

```yml
  DesiredCount:
    Type: String
    Default: '1'
```


## 事象発生

再度デプロイするとタスク数が0になってしまいました。

切り分けのためCloudformationのStackパラメータ値を確認したところ、
DesiredCountが0になっていました。

![cfn0001.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3567112/19df9026-6759-8cb1-61d9-3a45ede4dfc2.png)


## 原因

ECSのService定義で`DesiredCount`を指定しており、
それが原因のようでした。

```diff
     Properties:
       Cluster: !ImportValue
         Fn::Sub: sample-ecs-cluster
-      DesiredCount: !Ref DesiredCount
       LaunchType: 'FARGATE'
       EnableExecuteCommand: true
       PropagateTags: 'TASK_DEFINITION'
```


Cloudformationのオプション削除だけでは不足しており、
テンプレートファイルの修正も必要でした。

ただ、Default値は1を指定しているため
1が指定されると思ったのですが、
以前のStackの値が引き継がれてしまうような仕様に思えます。
（元々は0指定でした）

## まとめ

同じ役割をもつパラメータが複数箇所にあると想定しない挙動することがあるという
ケースでした。

Cloudformaitonの仕様把握不足な部分もありますが、
パラメータ管理は一元管理するようにしていくようにし運用の負担を減らしていきたいですね。
私のくだらないエンジニアプラン

## エンジニアプラン

- 息をするとお金がもらえる
- 季節変動フレックス（時差）勤務で太陽とともに生活する

### 息をするとお金がもらえる

「息をする」と「お金がもらえる」との間には論理の飛躍があります。具体的には以下のような論理となります。

- 息をする
- 体にエネルギーが補給される
- エネルギーの使い道を探す
- 仕事しか使い道がないので仕事する
- お金がもらえる

この論理を長期的に持続させるには、仕事がストレスにならないこと、仕事によって人生の喜びを得ることが必要です。

エンジニアという仕事によって人生の喜びを得るために常日頃チェックすべきことは以下の通りです。

- 使命感に駆られて仕事をしていないか
- 残業は思わずやってしまっているか
- 仕事という名の趣味をしているか

**「仕事という名の趣味をしている」というのは、単に仕事が楽しいという意味である「仕事は趣味の延長線」とは大きく異なります。** 趣味においては、作ったものを他者に提供できるよう品質の向上に努めており、このうち金銭のやり取りが発生するものを便宜上「仕事」と呼んでいるのです。

**つまるところ、仕事は趣味を拡張したものではなく、趣味に包含されるものなのです。**

### 季節変動フレックス（時差）勤務で太陽とともに生活する

みなさんは夏の夜、電気を付けたらなんだか暑く感じて冷房の温度を下げるというマッチポンプのようなことをしていませんか？冬の夜、無理に仕事をしようとして暖房をガンガン入れたりしていませんか？

電力消費は電気代の上昇だけでなく、二酸化炭素排出量の増加も招いているのです。

国立環境研究所から発行されている [日本の温室効果ガス排出量データ](https://www.nies.go.jp/gio/archive/ghgdata/index.html) によると、2021 年度の部門別 CO2 排出量は、エネルギー転換部門（発電所、製油所等）が 430 百万トンで全体の約 4 割を占めており、電力消費が二酸化炭素の排出に影響を与えていることは言うまでもありません。

さらに近年の IT 業界では FinOps や GreenOps など、コスト最適化や二酸化炭素の排出量削減を行いながら IT の実現を行う動きが広まってきています。Web サービスにおいては、アクセス量の少ない時間帯はサーバーの稼働台数を減らすよう制御することが例として挙げられます。

前述のような、仕事が趣味に包含される世界線においては、FinOps や GreenOps なども趣味ですでに実践されている必要があります。

このような二酸化炭素の消費量を削減する方法の一つが、「日中は起きて、夜は寝る」生活、すなわち、「太陽の出ている時間に働く」生活です。[以前の記事](https://qiita.com/noritakaIzumi/items/26e6af6556fe4ecbaa2a) で書いた通り、日の光を利用することにはさまざまなメリットがあるのでおすすめです。

:::note alert
夜型の人にこの生活を無理に押し付ける意図はありません。
:::

現在、多くの会社が季節を問わず 1 日 8 時間もしくは 1 か月 160 時間の勤務をルール化しており、中には勤務時間帯まで指定されている会社もあります。夏は日中に仕事できても、冬にはほぼ必ず日没後の仕事を強いられます。

この冬の課題を解決するために導入したいのが、季節変動フレックス勤務です。  
例えば、1 日 8 時間（9:00 - 18:00）の勤務をしている会社には

- 4 月～ 9 月: 9.5 時間勤務（7:30 - 18:00）
- 10 月～ 3 月: 6.5 時間勤務（8:30 - 16:00）

のような働き方を導入します。そして、可能な限り、全社員が窓に向かって仕事をします。  
このようにすることで、太陽の光を最大限活用できるため、照明による電力消費を削減できます。これに加えて、勤務地を真夏に避暑地、真冬にシンガポールなどとすれば、冷暖房による電力消費も削減できます。なお、電気代より旅費の方が高くなる場合もありますのでご注意ください。

## まとめ

いわゆる「好きなことで生きていく」的なことができればいいなと思っています。  
なお、来世はねこになる予定です :cat:
[メモ]Mac の VS codeでpylabを使う。

## モチベーション
まず、このメモを残すモチベーションを簡単に書きます。
pythonの教科書などを進めていく中で、グラフにプロットするためにpylabを使うという箇所に来た時の話です。
今まで同様、教科書のプログラムを写経していました。

```python
import pylab
```

この時、VSCodeはエラーを表示しました。そのため解決方法を確認して、対応しました。

まず、Anacondaを使っているケースが多く、これにはあてはまりません。
また、VENVやDockerを使っているケースも多く、これも当てはまりません。

## やりたいこと
以下の環境でpylabを使えるようにすること
* Mac環境
* python3
* vscode

## 対応したこと
まず、pythonはなんとなくすでにデフォルトのものからHomebrewで最新版のものにインストールしている状態でした。この辺りは他の方が色々書かれているので探してみるといいと考えます。

その上で、pip3 install matplotlibとすると、brewを使えとエラーが出てきます。
そこで、以下のようにbrewします。単にmatplotlibとするとこれもエラーとなるため、メッセージの通り、python-matplotlibとした。

```sh
% brew install python-matplotlib
```

これで、使えるだろうとしてもVSCodeではエラーとなる。調べた結果、.vscodeのsetting.jsonにパスを追加する必要があることはわかった。しかしVENVなどの例を指名sている人が多く、どこに入れるのがいいのか調べる必要があった。

以下のmatplotlibのインストール説明ページの下の方にMacについての記載がありました。

https://matplotlib.org/stable/install/index.html

そこの記載を参考にして、以下の通りコマンドを実行します。

```sh
% python3 -c 'import matplotlib; print(matplotlib.__version__, matplotlib.__file__)'
3.9.0 /opt/homebrew/Cellar/python-matplotlib/3.9.0/libexec/lib/python3.12/site-packages/matplotlib/__init__.py
```

そこで、.vscodeの中のsettings.jsonに以下のように追加しました。matplotlibの前のところまでを登録しています。
```.vscode/settings.json
{
    "python.analysis.extraPaths": ["/opt/homebrew/Cellar/python-matplotlib/3.9.0/libexec/lib/python3.12/site-packages/"]
}
```

# 実行
実行時にModule No Found Errorが出ました。これは、homebrewでインストールしたpythonでなく標準のpython(/usr/bin/python3)が動いているために起こっていました。調べると、xcodeの右下で動かすpythonを切り替えることができます。pythonのバージョンをクリックすると選択できます。
JavaScriptのfor文をPythonで書き直そうとしたら躓いた話

現在Pythonを学習しているのですが、私は最初にJavaScript(以下JS)を少し学習してからPythonを始めたため、日々の頭の体操としてJSの関数をPythonに置き換えるという事を行っていました。
多くは似たような書き方になるのですが、for文で躓いたためその時のことを書いていこうと思います。

# JSの構文を真似たらエラーが……
いつも利用させていただいている「JavaScript Coding Challenges」という問題集から下記の設問を引用させていただきます。
リンクも張らせていただきますので、よろしければご自身でもチャレンジしてみてください。
頭の体操にもなります！
リンク：[JavaScript Coding Challenges](https://github.com/jahidulislamzim/JavaScriptCodingChallenges "JavaScript Coding Challenges")

> 13.Add up all the numbers from 1 to the number you passed to the function.
> 
> function addUp(num){
>       //Write Your solution Here
> };
> 
> 
> console.log(addUp(10)); // 55
> console.log(addUp(40)); // 820
> console.log(addUp(15)); // 120

「1から関数に渡した数値までをすべて合計した関数を作ってください」という問題になります。
JSを学習した方であれば、なんとなく「あ～、for文を使うんだな」というのを想像すると思います。
回答としては下記のようなコードを書く方が多いのではないでしょうか。

```JavaScript:script.js
function addUp(num) {
    let sum = 0;
    for (i = 1; i <= num; i++){
        sum += i;
            }
    return(sum)
};

console.log(addUp(10)); // 55
console.log(addUp(40)); // 820
console.log(addUp(15)); // 120
```

こちらのコードはもちろん正解です。
JSのfor文の基本書式に則った形になっています。

::: note info
**for文の基本書式(JS)**
for (初期化式; 条件式; 変化式){
  実行する内容;
}
:::

当初私はこれと同じノリでPythonで下記のように記述しました。

```Python:kisoren.py
def addUp(num):
    sum = 0
    for (i = 0; i <= num; i++):
        sum += i
    return sum
    
print(addUp(10)) # 55
print(addUp(40)) # 820
print(addUp(15)) # 120
```

はい、もちろんエラーが出て動きません笑
調べてみたところ基本書式が結構違っていました。

# Pythonのfor文
Pythonで回数を指定したfor文を記述する際は`range()関数`を組み合わせて下記のように記述します。

::: note info
**for文の基本書式(Python)**
for 変数名 in range(繰り返す回数):
  実行する内容
:::

こちらに則って先程のコードを書き直してみます。

```Python:kisoren.py
def addUp(num):
    sum = 0
    for i in range(num + 1):
        sum += i
    return sum
    
print(addUp(10)) # 55
print(addUp(40)) # 820
print(addUp(15)) # 120
```

正しく動かすことができました！
ただ、一つ注意しておくべき点があります。
それはforの後ろの`i`は**0から始まる連番である**ということです。
これに関しては配列のインデックス番号との兼ね合いなどが関係しており、そういった点はJSでも同様ですね。
つまり、1から5までを合計しようとして`for i in range(5):`のように記述すると本来は15になるはずが、`0+1+2+3+4=10`と計算されてしまいます。
そのため上記コードではrange()関数に渡す引数部分を`num + 1`とすることで対応しています。

# 最後に
メジャーなプログラミング言語は書式が似ている部分も多いですが、当然違っている部分も多いです。
都度調べる必要があるため、どんな言語を学習するにしてもやはり基本は「調べる力」を養っていくことが大事だと思います。
あと、こういった小さな関数であってもやはりPythonは記述量が少なくシンプルな言語だと改めて感じました。
その辺の比較も面白いですね。

# 参考サイト
* [JavaScript | for文を使った繰り返し処理](https://www.javadrive.jp/javascript/for/index2.html "JavaScript | for文を使った繰り返し処理")
* [【Python 入門】for 文の使い方を解説！range() 関数も紹介](https://www.kikagaku.co.jp/kikagaku-blog/python-for-range/ "【Python 入門】for 文の使い方を解説！range() 関数も紹介")
Google Cloud プロフェッショナルデータエンジニア認定に合格したよて話

## はじめに

Google Cloud プロフェッショナルデータエンジニア認定に合格しました！この体験記では、私がどのようにして合格を果たしたのか、勉強法や使ったリソースについてシェアしたいと思います。これから受験する方の参考になれば幸いです。

## Google Cloud プロフェッショナルデータエンジニア認定とは
Google Cloud プロフェッショナルデータエンジニア認定は、Google Cloudのデータ関連サービスの設計、構築、運用、セキュリティ管理に関する高度な知識とスキルを証明するための資格です。この資格は、データエンジニアとしてのキャリアをさらに発展させるための重要なステップであり、**Google Cloud認定プログラムの中でも最上位の資格**の一つです。
## 勉強期間

勉強期間は約1ヶ月でした。短期間で集中して勉強することで、知識を一気に吸収し、試験に対する集中力を保つことができました。

## 勉強法とリソース

1. **Udemyの2024年問題集**
   - Udemyの問題集は基礎をおさえるのに役立ちました。実際の試験形式に近い問題が多く、試験の感覚を掴むのに最適でした。問題を解くことで、自分の弱点を見つけ、それを克服するための勉強を重点的に行うことができました。また後に書いていますが、こちらの問題集は２０２４新版の試験には対応できていないところも多くあるため、この問題のみを対策に使用することはやめましょう。
   - [Udemyの2024問題集はこちら](https://www.udemy.com/course/2023google-cloud-professional-data-engineer/?couponCode=ST18MT62524)

2. **公式トレーニング**
   - 公式トレーニングは**絶対に外せない**リソースです。結局公式が一番！！Udemyの問題には出ていないが実際の試験では出題された問題が多くありました。Googleが提供する公式のトレーニングコースは、試験範囲を網羅しており、理解を深めるための非常に有効な教材でした。特に実際の業務での適用例なども含まれており、実践的なスキルも身につけることができました。
   - [公式トレーニングはこちら](https://cloud.google.com/learn/certification/data-engineer?utm_source=google&utm_medium=cpc&utm_campaign=japac-SG-all-en-dr-SKWS-all-all-trial-DSA-dr-1605216&utm_content=text-ad-none-none-DEV_c-CRE_655856181023-ADGP_Hybrid%20%7C%20SKWS%20-%20BRO%20%7C%20DSA%20-All%20Webpages-KWID_39700076131767822-dsa-1456167871416&userloc_1009293-network_g&utm_term=KW_&gad_source=1&gclid=CjwKCAjw1emzBhB8EiwAHwZZxShZXeqUv-erGrc8SClrDMa0_kM662DHIvIbjwi-OJpyEzzqrskeXxoCOIIQAvD_BwE&gclsrc=aw.ds&hl=ja)

3. **公式模擬問題**
   - 公式模擬問題も活用しました。公式模擬問題は試験範囲の理解を深めるための良い復習素材となり、実際の試験問題に近いため、試験本番での準備に非常に役立ちました。
   - [公式模擬問題はこちら](https://docs.google.com/forms/d/e/1FAIpQLSd4j4bcgbYenBRFIL6Kb0cvXp13qCQ-z6JzowgDxRaPITn56g/viewform?hl=ja)

## おわりに

試験勉強を通じて、Google Cloudのサービスに関する深い理解を得ることができました。勉強期間が短かったため、集中して取り組むことが求められましたが、その分効率よく学習することができました。これから試験を受ける方々にとって、この体験記が少しでも役立てば幸いです。
avalabが面白い話

最近使っているAIイラストサービスの[avalab](https://avalab.ai/)の話です

# avalabとは

AIのイラストを作成してくれるサービスですが、
VRMを登録してそのキャラのイラストを作ってくれます

VRMとは、人間の形をした3Dのモデルデータです
要は、3Dのキャラデータを元に、それっぽいキャラを作成してくれます

<img width="160" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/985/9233e7bd-75c9-e192-3af8-d5a518053bcc.jpeg"> 

<img width="160" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/985/fbb4ffb1-b14d-d94c-9530-f64589e3519b.png"> 


# 3Dキャラなんてないって人に

[VRoid](https://vroid.com/)を使うのが楽でよいです
Steamアカウントを持っていれば、勝手にバージョンアップしてくれるので
Steam版を使うのがおすすめです

プリセットなんかも多くて、適当に組み合わせるだけでそれっぽいキャラは出来るでしょう
<img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/985/770d7c40-3d8a-6587-8461-c24e7f4f46cc.jpeg">

VRMを作っておくと、[Cluster](https://cluster.mu/)でマイアバターとして使えます
また、[varkshorts](https://lp.vark.co.jp/varkshorts/)という、ネットミームを題材にしたショート動画を作るアプリで遊べて楽しいです

https://x.com/izmktr/status/1805745942244868236

# avalabの使い方

現在、登録しただけではVRMの登録権がないので購入する必要があります

[X/twitter](https://x.com/AvalabAI)でキャンペーンもしていて、VRM登録権のプレゼントもあったので
何が何でも無料でやりたい、という人はチェックするのもいいでしょう

VRMをアップロードし、1日程度待つと登録が終わります
あとは、下のタグでキーワードを指定すれば生成されます

服装もキーワードで強制的に変えることも出来るのですが
結構元の服の意匠を引っ張ってくる印象があります

特にきせかえで楽しみたい場合は裸のキャラを登録するのが良いようです

# 色々便利なタグ

simple back
背景なしのイラストを生成してくれます
<img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/985/f63b909b-6129-e6b4-7e58-54ea076d9525.png">

fullbody shot
全身画を出します
<img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/985/66acd1bb-2389-2e06-1755-197c41944c00.png">

ただ、このタグは結構厄介で、無理やり全身を収めようとするので
足のあたりのポーズが不自然になりやすいです
<img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/985/c83b34a0-029d-48bb-4877-f4634ca61215.png">

watercolor illustration,traditional media,1980s
水彩画風のイラストになります
<img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/985/35bb804e-9b6e-ae92-2bf2-12c73c52a8e6.png">
IBM i Services Directory : QSYS2.User_Info_Basic ビュー　処理速度の速いユーザー情報取得

## 概要
■ビュー名：QSYS2.USER_INFO_BASIC
■カテゴリ：セキュリティサービス
■サポート：IBM i 7.3 SF99703 Level 24以降
■参照URL（IBM i 7.5）：https://www.ibm.com/docs/ja/i/7.5?topic=services-user-info-basic-view

[USER_INFOビュー](https://qiita.com/gomAnomalocaris/items/360e2ba6697640fc5601)と同様にユーザー・プロファイルに関する情報を返します。ただし返す結果が少ない、かつ、処理が速い（処理負荷が低い）という差異があります。

## 使用例1

以下は上記参照URL記載のサンプルです。*ALLOBJ権限を持つユーザーをリストします。

```
SELECT * FROM QSYS2.USER_INFO_BASIC
  WHERE SPECIAL_AUTHORITIES LIKE '%*ALLOBJ%';
```

結果例は、、、

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/7c84403a-bdb0-602b-68b8-105dfeecd99f.png)

上図では見えませんが、\*SECOFRクラスのユーザーがリストされているので*ALLOBJ権限を所有しています。


## 使用例2

[USER_INFOビュー](https://qiita.com/gomAnomalocaris/items/360e2ba6697640fc5601)と同じSQLを流して直近でログインに失敗しているユーザー（不正アクセスその他が考えられる）をリストしてみると、

```
  SELECT * FROM QSYS2.USER_INFO_BASIC
  WHERE SIGN_ON_ATTEMPTS_NOT_VALID > 0
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/f3584bef-aa9a-83ea-6c8f-d18848f4de84.png)

同様にSign On Attempts Not Valid が0以外のユーザーがリストされます。

そして、***処理速度は体感上でも QSYS2.USER_INFOビューよりも速いです。*** 
USER_INFOビューでは1秒ちょっと、USER_INFO_BASICだと0.5ミリ秒以下、くらいな感じです。（体感値です）

テスト機のIBM i 7.5のコア数は

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/17234b3a-8541-b1e5-9227-431301eeccd9.png)

1.16コア(POWER10)ですね。

それよりシステムASP% 97.18% って・・・w ふつう止まるでしょ♪（IBM i は止まらないんですね。99.9%で稼働中というのも見たことがありますw）

## User_Info ビューと User_Info_Basic ビューの結果カラムをくらべてみた

何が処理速度に影響しているか調べてみます。それがきっと処理負荷の高い取得データという事だと思います。

以下の6つのカラムに差がありました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/46be347d-972d-4d3f-8813-cfd8e88c605a.png)

***USER_OWNERの取得に時間（負荷）がかかっているのかな、と推察しました。***


## User_Info と User_Info_Basic の処理時間をデータとって比較してみた

[こちらの記事にまとめました](https://qiita.com/gomAnomalocaris/items/7b2f74b07a420f44e8c3)
初めての投稿

# 自己紹介

## はじめに
こんにちは、NanashinoNemuと申します。
まぁ、名前の由来は、有名でもないし・アカウント作ったとき眠かったからでうす（笑）。

このたび、技術関連の記事を書くにあたり、まずは自己紹介をさせていただきます。私のバックグラウンド、興味のある技術分野、そして今後の目標について共有させていただきます。

## 目次
1. 経歴と専門分野
2. 興味のある技術
3. 今後の目標
4. まとめ

## 1. 経歴と専門分野
### 概要
私の経歴と、興味のある技術分野について紹介します。

### 詳細
- 学歴：大学で情報通信工学科に所属


主な興味分野：
```
- 生成ＡＩ
    - 最新のモデル
- Webアプリケーション
    - フロントエンド技術（React,Next'js）
    - バックエンド技術(Node.js,Python)
- システム設計
    - 生成AI等を用いて現在の作業工程を楽に行えないかなぁ
```

## 2. 興味のある技術
### 概要
現在特に興味を持っている技術領域と、それらを学ぶ理由について説明します。

### 詳細
1. 人工知能と機械学習
   - 自然言語処理や画像認識の最新トレンドに注目しています。

2. Webアプリケーション



### ポイント
- 常に新しい技術トレンドにアンテナを張り、学習を続けています。
[ERC6821] Web3URLからENSの紐付けをサポートする仕組みを理解しよう！

# はじめに

初めまして。
**CryptoGames**というブロックチェーンゲーム企業でエンジニアをしている **cardene（かるでね）** です！
スマートコントラクトを書いたり、フロントエンド・バックエンド・インフラと幅広く触れています。

https://cryptogames.co.jp/

代表的なゲームは**クリプトスペルズ**というブロックチェーンゲームです。

https://cryptospells.jp/

今回は、ENSからWeb3 URL形式のコントラクトアドレスへのマッピングを提案している**ERC6821**についてまとめていきます！

:::note info
以下にまとめられているものを翻訳・要約・補足しながらまとめていきます。
:::

https://eips.ethereum.org/EIPS/eip-6821

他にも様々なEIPについてまとめています。

https://cardene.notion.site/ERC-EIP-2a03fa3ea33d43baa9ed82288f98d4a9?pvs=4

# 概要

この規格では、Ethereum Name Service（ENS）から、**ERC4804**で定義されているアドレスへのマッピングを定義しています。

:::note info
**ERC4804**は、コントラクトから「**web3://cardene.eth/**」のように、他のコントラクトにアクセスできる仕組みを提案している規格です。
「**web3://cardene.eth/article/qiita**」のようにすることでパラメータを渡すこともできます。
より詳しくは以下の記事を参考にしてください。
:::

https://qiita.com/cardene/items/837931ce60ca844aee13

# 動機

**ERC4804**では、`web3://`から始まるURIを定義してコントラクトに紐付けています。
このURIとENSを紐づけて管理できるコントラクトを提案しています。

# 仕様

`web3://`URIに含まれる`contractName`と`chainid`を使用して以下の手順でコントラクトのアドレスを見つけます。

1. 指定された`chainid`上のENSリゾルバで`contentcontract`テキストレコードを検索します。
    - チェーンに ENS が存在しない場合や無効な**ETH**アドレスの場合はエラーを返します。
2. `contentcontract`テキストレコードが存在しない場合、**ERC137**によって名前に紐づいたアドレスを使用します。

3. 取得したアドレスがゼロアドレス（`0x0000000000000000000000000000000000000000`）の場合は「**address not found**」というエラーを返します。
4. `contentcontract`テキストレコードは、`0x`プレフィックス付きの16進数のEthereumアドレス、または **ERC3770**チェーン固有のアドレスを返すことがあります。
    - アドレスが**ERC3770**チェーン固有のアドレスである場合、メッセージを呼び出す時の`chainid`は **ERC3770**アドレスに指定された`chainid`（`eth`や`arb`など）によって上書きされます。

:::note info
**ERC137**については以下の記事を参考にしてください。
:::

https://qiita.com/cardene/items/17e6e1a452006f08a197

:::note info
**ERC3770**については以下の記事を参考にしてください。
:::

https://qiita.com/cardene/items/de8ce92b89ee722b37aa

# 補足

この規格は、**ERC4804**の設計原則に従い、`contenthash`の代わりに**ERC3770**のチェーン固有アドレスを持つ`contentcontract`テキストレコードを使用して人が読みやすいようにしています。
このテキストレコードを使用することで、TTL（Time To Live）などフィールドを追加することが可能になります。

# 引用

Qi Zhou (@qizhou), Qiang Zhu (@qzhodl), "ERC-6821: Support ENS Name for Web3 URL [DRAFT]," Ethereum Improvement Proposals, no. 6821, April 2023. [Online serial]. Available: https://eips.ethereum.org/EIPS/eip-6821.

# 最後に

今回は「ENSからWeb3 URL形式のコントラクトアドレスへのマッピングを提案している**ERC6821**」についてまとめてきました！
いかがだったでしょうか？

質問などがある方は以下のTwitterのDMなどからお気軽に質問してください！

[Twitter @cardene777](https://twitter.com/cardene777)

他の媒体でも情報発信しているのでぜひ他も見ていってください！

https://chaldene.net/

https://zenn.dev/heku

https://cardene.substack.com/

https://mirror.xyz/0xcE77b9fCd390847627c84359fC1Bc02fC78f0e58

https://cardene.notion.site/ERC-EIP-2a03fa3ea33d43baa9ed82288f98d4a9?pvs=4
おじさんがFlutterで0から学んで開発していく　#2 Flutter超入門2022を触ってみる

## はじめに
Flutterの学習資材を探していた時に、以下の記事に出会いました。
しばらくそれに沿ってやっていきます。

https://zenn.dev/flutteruniv_dev/articles/flutter-roadmap

### Widgetとは
FlutterにおけるUIの部品。
それぞれは、皆さんの記事になっているので割愛します。

### Flutter超入門2022をやって思ったこと
非常にわかりやすくとっつきやすかったです。Udemyの有料動画並でした。
しばらくやって入学を検討しようかと思います。
リンクを乗せると怒られそうなので、気になる方は探してください。

### Flutterを初めて触って思ったこと
非常に軽やかで開発しやすいものだなと感じました。
以下でよかった点、悪かった点を挙げます。

#### よかった点
1. UIの即時反映の手軽さ
    ホットリロードに対応しているので保存するだけでUIの反映
1. ツリー形式が思ったほど複雑ではなかった
    複雑なものを作ってないからかもしれませんがとりあえずそう感じました

#### 悪かった点
1. Flutterが初めてのプログラミングという方には少しだけ難易度が高い
    必須ではないですがhtmlとcssの知識が少しでもあったほうが受け入れやすいと思います
2. Android Stadioでの実装
    最初に入れていたプラグインとの相性が悪いのかメソッド名がブルーになれないです。
    プラグイン探します

    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3298617/7bbe4207-f3a0-7ea8-914a-393e4b7c3e1f.png)

## おわりに
次回プラグインを探していきます。
便利なプラグインがあると教えてもらえると助かります。
Haxe で Welcome to AtCoder を解いてみた

[Qiita Engineer Festa 2024（キータ・エンジニア・フェスタ 2024） - Qiita](https://qiita.com/official-campaigns/engineer-festa/2024)
において、約1ヶ月で38記事という大量の記事の投稿を要求されることがわかった。
そこで、あまりコストをかけずに記事数を稼ぐ方法を考えた結果、「Welcome to AtCoder を様々な言語で解く」ことを思いついた。
単に解くだけでなく、使用する言語仕様の解説を入れれば、記事として一応成立するだろう。

# Welcome to AtCoder

[PracticeA - Welcome to AtCoder](https://atcoder.jp/contests/abs/tasks/practice_1)

Welcome to AtCoder では、以下の形式で整数 $a$, $b$, $c$ および文字列 $s$ が入力として与えられる。

```text
a
b c
s
```

この入力をもとに、与えられた整数の和 $sum = a + b + c$ および文字列 $s$ を、以下の形式で出力することが求められる。

```text
sum s
```

# 今回用いた Haxe の機能

## エントリポイント

[Hello World - Haxe - The Cross-platform Toolkit](https://haxe.org/manual/introduction-hello-world.html)

以下の `main` 関数の中に実行したい処理を書くことで、処理を実行できる。

```haxe
class Main {
    static public function main():Void {
        // ここに処理内容を書く
    }
}
```

## 変数宣言・加算・文字列へのデータの埋め込み

[String Interpolation - Haxe - The Cross-platform Toolkit](https://haxe.org/manual/lf-string-interpolation.html)

```haxe
var value = 42;
```

のように、`var` を用いて変数を宣言できる。

```haxe
var sum = 1 + 2;
```

の用に、`+` 演算子を用いて数値を加算できる。

```haxe
var message = 'value = $value';
```

のように、`''` で囲まれた文字列の中に `$` に続けて変数名を書くと、その場所にその変数の値を埋め込んだ文字列を得ることができる。

## 入出力

[stdin, stdout, stderr - Beginner - Haxe programming language cookbook](https://code.haxe.org/category/beginner/stdin-stdout-stderr.html)

```haxe
var line = Sys.stdin().readLine();
```

と書くことで、標準入力から1行読み込み、文字列として変数 `line` に代入できる。
得られる文字列は改行文字を含まない。

```haxe
Sys.println("文字列");
```

と書くことで、標準出力に文字列を出力し、さらに改行を出力できる。

:::note warn
ドキュメントでは出力を行う方法として `trace` も紹介されているが、これを使うと

```text
Main.hx:3: 文字列
```

のように、指定した文字列に加えて余計なデータも出力されてしまう。
:::

## 文字列の数値への変換

[Using numbers - Beginner - Haxe programming language cookbook](https://code.haxe.org/category/beginner/numbers-floats-ints.html)
[Std - Haxe 4.3.4 API](https://api.haxe.org/Std.html)

[`Std.parseInt`](https://api.haxe.org/Std.html#parseInt) を用いることで、文字列をそれが表す数値に変換できる。

## 文字列の処理

[String - Haxe 4.3.4 API](https://api.haxe.org/String.html)

[`indexOf`](https://api.haxe.org/String.html#indexOf) を用いることで、文字列の中で指定した文字列が最初に現れる位置を取得できる。

[`substring`](https://api.haxe.org/String.html#substring) を用いることで、開始位置と終了位置を指定して文字列から部分文字列を取得できる。

# 提出コード

```haxe
class Main {
    static public function main():Void {
        var stdin = Sys.stdin();
        var line1 = stdin.readLine();
        var line2 = stdin.readLine();
        var line3 = stdin.readLine();

        var spacepos = line2.indexOf(" ");
        var line21 = line2.substring(0, spacepos);
        var line22 = line2.substring(spacepos + 1);

        var a = Std.parseInt(line1);
        var b = Std.parseInt(line21);
        var c = Std.parseInt(line22);
        var sum = a + b + c;

        Sys.println('$sum $line3');
    }
}
```

[提出 #54934731 - AtCoder Beginners Selection](https://atcoder.jp/contests/abs/submissions/54934731)
RAGから派生したGraphRAGとは何者？

# はじめに
こんにちは、H×Hのセンリツ大好きエンジニアです。（同担OKです😉）
前回の記事ではRAGについて触れましたが、今回はRAGから派生して誕生したGraphRAGについて自分が解釈できた所まで説明したいと思います！

https://qiita.com/Senritsu420/items/258bc57dcf9317e2c567

誤った情報があれば修正しますので教えていただければ幸いです🫡

# RAGの苦手なこと
RAGを活用することにより、専門的な情報や個人に即した情報の回答精度が向上します。
RAGでは、①外部情報から意味的に似ている情報を検索すること　②検索した内容を基に回答を生成すると言う2つの事が行われています。

しかし、ユーザが抽象的な質問を行った場合は①で情報の関連性を理解して回答することが難しくなります。

言語モデルでは、ベクトル検索により意味的に近いものを検索することで回答を用意していますが、質問の文脈や関連性までを把握することが難しいです。
ベクトル検索は、クエリテキストをベクトルに変換した後、クエリベクトルと高い類似度を持つベクトルを結果として返します。このベクトルは、意味が近いものほど類似度が高くなります。
そのため、抽象的なクエリだと意味合いが捉え方に左右されてしまうことになり、結果として返す回答が即していないケースが発生するのです。

# GraphRAGとは
正式名称をGraph-based Retrieval-Augmented Generationと言い、情報の関連性をグラフにより表現し、そのグラフを基に情報検索と回答の生成を行う事ができる技術です。

これは、RAGでは読み取れなかった情報の関連度をグラフによって管理するため抽象的なクエリであっても対応しやすくなります。

例えば、ハンターハンターのセンリツに関する質問をしてみます。
「センリツの特徴は？」と言う抽象的なクエリをRAGで処理しようとすると、外部情報として「センリツは髪が長くて目がキュルキュルの美しい女の子です。」と言う情報を持っていたとしても意味的に近いと認識されずに回答が出来ないケースがあります。

人間からすると、「センリツの特徴は？」と「髪が長い女の子」は会話として成立しますが、RAGでは意味的に近くないと言う理由から回答として相応しくないと認識されます。

これを、GraphRAGを使用するとどうなるでしょうか？

GraphRAGでは、「センリツは髪が長くて目がキュルキュルの美しい女の子です。」と言う文章からグラフを作成します。
センリツと言うノードと女の子というノードを生成し、その関連性を表すものとして、髪が長くて目がキュルキュルといった情報をエッジが生成されるイメージです。

センリツと女の子という言葉を付属の修飾語で関連付けることをグラフ化する際に行います。

センリツというワードが入ったクエリが与えられると、GraphRAGではまずセンリツノードを探します。
次に、センリツノードに関連している情報をグラフから取得することによって情報の関連性を把握する事ができます。

なので、先ほどのような抽象的な質問があった場合でも、言葉の関連性から期待する回答を生成できるようになるんですね。

 GraphRAGの実例として、医療業界では患者の診療記録や研究論文を統合し、最適な治療法を提案するシステムに応用されているそうです。
 情報の関連性を検索に含められると、既存の意味的マッチングと掛け合わせて更に回答精度が向上しそうですね！😇

 # おわりに
 個人的に気になっていたGraphRAGについて分かる範囲でまとめてみました。
 GraphRAGで文章をグラフに落とし込むことで情報の関連性を抽出できて良い手法に思えますね！（学習コストや情報の関連性をグラフに落とし込む精度がネックな気はしますね🤔）

 生成AIってどんどん賢くなっていくので仕事取られないか怖いですね。。。
 そうならないためにも、勉強は続けていきたいと思います🥶

 最後までご覧いただきありがとうございました！
以上、センリツでした。🤓
Account EngagementでAPIを使ってできそうなこと



+ [流入してきた顧客がセールスフォース上にて取引先責任者もしくはリード（見込み客）として既に登録されていればカウントされず、PardotもしくはSalesforceにもいない方であれば新規リードとして計上されるような仕組み](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007epkVD)

＞新規リードが各キャンペーン（施策）でどれだけ流入してきているか
ということですが、これはAccount Engagementからキャンペーンに紐ついてSalesforceに同期した顧客を対象としていると考えていいでしょうか？

Account Engagementの[Prospect Object](https://developer.salesforce.com/docs/marketing/pardot/guide/prospect-v5.html)を確認してみると、このオブジェクトにも作成日があります。createdAt

また、Salesforceの取引先責任者のId salesforceContactId 、リードのId salesforceLeadIdも存在しています。

これらの情報を取得できれば、Salesforceの取引先責任者、リードの作成日時とこのcreatedAt項目を比較してcreatedAtの方が早ければ、Salesforceの取引先責任者、リードが無い状態で作成されたプロスペクトと判断できると思います。

salesforceCampaignIdという項目もあるので、Salesforceのどのキャンペーンと紐ついているかも判断できそうです。

問題はどうやって、この情報を取得するかです。
Account Engagement APIを使えば、Idが分かっていればそのレコードだけを取得できます。


Queryもあって、パラメータで条件を指定できるみたいです。
作成日時を条件にレコードを取得できれば実現できるとは思います。

```
https://pi.pardot.com/api/v5/objects/prospects?<params>
```

Salesforce側にこの情報を格納するカスタムオブジェクトを作って、APIあるいは手動でレコードをインポートします。後はフローなどの自動化処理で取引先責任者あるいはリードの作成日時と比較して早ければ、チェックボックスをTrueにできれば識別できると思います。

# 関連資料

+ [SalesforceキャンペーンとPardotキャンペーンの連携を徹底解説](https://www.strh.co.jp/knowledge/salesforce-pardot-campaign)

:::note
SalesforceとPardotの違い

+ Salesforceキャンペーンは【1人の人間（リード・取引先責任者）と複数キャンペーンを紐づけることができる】
+ Pardotキャンペーンは【一人のプロスペクトに対して一つのキャンペーンしか紐付かない】
:::

+ [プロスペクトとキャンペーンの関連付け](https://help.salesforce.com/s/articleView?id=sf.pardot_campaigns_prospects_associate.htm&type=5)
Easy-ISLispにおける分散並列（１）

# 分散並列Lisp　計算実験
Easy-ISLispはver5.0に向かって分散並列の機能を入れる予定です。ver4.20においてTCP/IP通信により親Lispと子Lispマシンとが通信できる機能を追加しました。


# 基本機能

(dp-create x1 x2 ... xn) 引数として子機のIPアドレスを与えます。

(dp-close)  子機にネットワークモードを終了を指示します。

(dp-let forms body)  let構文を分散並列で実行します。

(eisl-test ch sexp)  チャンネルchの子機にS式、sexpを送信します。計算実験をするための暫定的な機能です。


# マシン
3台のパソコンをLAN接続して使います。

![dp1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/33927/2071c835-f4e5-e817-64de-47f364f3a398.png)



# 計算実験
フィボナッチ数を並列で計算させます。子機には予めフィボナッチ数を計算するプログラムをコンパイルしておきます。そして-nオプションによりネットワークモードで起動して待機させておきます。


親機においてdp-create構文を使って子機と接続します。eisl-testを使ってコンパイル済みのフィボナッチ数計算プログラムをロードしておきます。

親機においてdp-letを使った並列フィボナッチ数計算のプログラムをロードします。

![bandicam 2024-06-25 16-42-37-911.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/33927/fa40c7f1-8e84-cd1e-799d-44161c6c61ba.jpeg)



さあ、計算実験開始です。

![bandicam 2024-06-25 15-32-18-310.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/33927/cb67f29d-dd7a-b0a9-7cf3-16c398e44b14.jpeg)

![bandicam 2024-06-25 15-34-21-052.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/33927/56778435-454a-db7b-81ba-0bfd61f034f8.jpeg)



どうやら成功のようです。TCP/IPによるレイテンシーはほとんどないようです。よさそうです。

ネットワークモードで動さいしている子Lispの様子です。

![bandicam 2024-06-26 07-33-00-380.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/33927/5b79e5d6-44e6-21cf-8f54-441dc6667da7.jpeg)



# 改良
次の機能の追加を予定しています。

〇子機がバグで停止しても再起動、親機との通信を回復させる。

〇親機から子機へFTPによりファイルを転送する機能

〇親機から子機に一斉にコンパイル指示、ロード指示を出す機能


# マルチプロセスとの併用
子機はそれぞれマルチコア、マルチプロセスで動作可能ですから、それらをフル活用すれば数台のパソコンで18コアマシンとして計算できるはずです。並列計算の可能性を追求したいと思っています。

実装はgithubにおいてあります。OSSです。自由にお使いください。
https://github.com/sasagawa888/eisl
Rails – 全てのエラーを rescue_from で吸収する例

# コード例

StandardError を rescue_from することで、全てのエラーを巻き取れそうだ

```rb
class ExampleController < ApplicationController
  rescue_from StandardError do
    render status: :ok
  end

  def index
    raise ActiveRecord::RecordInvalid
  end
end
```

# 備考

たとえば `ActiveRecord::RecordInvalid` の祖先を見ると、次のようになっているが、この中の親のどれかを rescue_from しておけばエラーを巻き取れるということのような気がする ( たぶん )

ただしもちろんエラークラス以外を rescue_from してしまうのは宜しくないだろう

```rb
ActiveRecord::RecordInvalid.ancestors

# [
#  ActiveRecord::RecordInvalid,
#  ActiveRecord::ActiveRecordError,
#  StandardError,
#  Exception,
#  ActiveSupport::Dependencies::RequireDependency,
#  ActiveSupport::ToJsonWithActiveSupportEncoder,
#  Object,
#  PP::ObjectMixin,
#  ActiveSupport::Tryable,
#  JSON::Ext::Generator::GeneratorMethods::Object,
#  DEBUGGER__::TrapInterceptor,
#  Kernel,
#  BasicObject
# ]
```

>instance method Module#ancestors
>クラス、モジュールのスーパークラスとインクルードしているモジュールを優先順位順に配列に格納して返します。


https://docs.ruby-lang.org/ja/latest/method/Module/i/ancestors.html
6月25日　チラシ制作演習、発表

## チラシ制作追加1時間

### 講師の方にアドバイスをいただいたこと
* A4の場合、上下１cm（周り余白）はカット時切れてしまうイメージで作る（下の方まで文字入れない、空間を開ける）
* 画像など3点ほど端ギリギリに配置しているものは、位置を揃える（整列orガイドライン）
* 行間詰め、字詰めを使用して、一つのグループに見えるよう調整する
* 四角の中に四角を配置するロゴは、上下左右の余白を同じにする（オフセットで製作する）
* 配置した文字が全体的に下に下がっている印象なので、もう少し上に

印刷して提出したので、アドバイスがいただけるようです。
今後もブラッシュアップしていきます！
クライアントの方やまわりの方からも「すごくいい」「おしゃれ」「雑誌みたい」等感想をいただけて嬉しかったです。

## 発表
### 他の方の発表からの学び
* コーヒーショップのイメージカラーは茶色
* ビアガーデンはタイトルもじにグラデーション＋ビールのアワアワ
* 飲食店は赤系が多い、手書きフォントが多い印象
* 観光客向けのため地図必須、器に影をつけ立体感
* 写真の周りをぼかすことで淡い印象
* 背景を斜めで区切った２トーンが素敵
* 若い女性がターゲットのポップなチラシは、手書き系のフリーフォントが可愛い
* おひとりさまがターゲットのお店は、カウンター席あることを伝える
* 左上からの目線の動き、グループ化を意識
* 写真の中で人物のみをくり抜く方法：ブラシぼかし→マスクで切り取り？（- [ ] 要確認！）
* 二重文字、影をつけたタイトル文字の方が多かった印象（- [ ] 私は使用していないので今後要練習！）
* ４０〜50代男性がターゲットの居酒屋：電話番号見やすく、インスタは見ないけどHPは見てくれるかも、露度はブラシ手書きでかすれ感、おしゃれな感じがしない方が入りやすい
* 親子向けのパン屋さんなどはインスタのQRコードでとりあえず読み取って、後でゆっくり見てくれることを期待
* ゴールドの高級感あるロゴ：上下で少し色変える、アピアランスでグラデーション？で作れるらしい（- [ ] 要確認）
* 芋スイーツのお店：黄色の背景に下の方だけ紫で、お芋缶が可愛い

### 総評
* トリムマークは必ずつける！
* 余白、周り3mm塗りたしは超大事！！大きめに設定する！（カットされてもいいように）→- [ ] できていなかったので修正要
* テンプレは真似してOK！余白とか「これくらい空ける」とかがわかってくるので、実力が徐々につく
* 円の中に文字を入れる時（NEW OPENとか）、右肩上がりが良い！（どこに配置するとしても）
* 空きはカットされる外側の方が広い方がいい（ギリギリに配置しない）
* グループを意識して、真ん中揃えなど配置も統一する
* タイトル周りもカーニング、字詰めする
* ポイント文字（エリアを設定していない文字）は詰めて良い（文字パネル「空きなし」など）
* 今後Photoshopを学習するので、その内容を踏まえブラッシュアップする- [ ] 
* Googleマップの貼り付けは著作権的にNG！自作する
* 画像の配置は「埋め込み」でもよいが、編集できない、データも重くなる、政策には問題なし
* 画像の配置は「リンク」にチェックして行うのがおすすめ
　:::note info
画像を「リンク」で配置するメリット
* Photoshopでも編集できる
* ファイルメニューバーから「パッケージ」で保存すると、使っている画像を全て一つのファイルとしてまとめて保存してくれる（「どこに保存したっけ？」がなくなる！）
:::

発表自体苦手なので、今後からは製作だけでなく要点のメモを作って発表の準備も時間内に行いたいと思います。
他の方のチラシはどれもクライアントの要望に合わせたパッと目を引くチラシになっており、大変参考になりました。
私自身はデザインの引き出しが少ないので、テンプレを真似しながらどんどん制作をこなしていきたいと思います！
Wordの自動大文字変換をやめてみた結果ストレス激減!!（Mac）

# はじめに
Wordを使っているとファイル名などを書こうと思ったときに，勝手に大文字にされちゃったりしませんか？そして，わざわざ小文字に変更していました．『大文字は自分で書くわ！いらんことすんな〜〜！！』とわたしはそれが苦痛で苦痛でストレス爆増だったので，その設定を消してみました．


# Mac編
### Wordを開く
Microsoft Word を開きます。
### 設定画面に移動
画面の左上にある「Word」→「環境設定」を押します．
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3748983/bc1010ab-6883-4547-975d-514251dabf9c.png)


### オートコレクトのオプションを開く
「オートコレクト オプション」ボタンをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3748983/676fa775-13af-e23b-5d12-7bd936c02cbc.png)

### オートコレクト設定を調整
下の図のように小文字を多文字に変えるような設定を消して，終了です．
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3748983/fc49f575-7c2c-0fb3-fe63-fa2e72d24848.png)

# おわりに
便利な機能も時には，蛇足になったりしますよね．全ての人のニーズに応えられるようなものを作るのは難しいですよね．だから，自分好みに設定できるようになっていることは非常にうれしい！みなさんも自分好みに設定してストレス激減しましょう！
それでは，良いエンジニアライフを〜👋
絶対に知っておきたい基本のショートカットキー　Windows編

### はじめに

以前にchromeブラウザでのショートカットキー一覧が好評でした
ですが今回はブラウザのみならずパソコン全般で頻繁に使用し、なおかつ使用することで作業効率が爆上がりするショートカットキーをご紹介します

基本的な事ばかりなので「知ってるよ！」と言われそうなものばかりですが、パソコンの初心者であったり、なかなか作業効率が上がらず悩んでいる方、かつショートカットキーをあまり知らないのであれば是非下記に記すショートカットキーを覚え使っていくと日々の学習や実務において効率的に行うことが出来るので是非覚えておきましょう。なお今回のショートカットキーはWindowsを中心に書いています。


## テキストで頻繁に使うショートカットキー

**全てを選択**
「Ctrl」+ 「A」

**コピー**
「Ctrl」+ 「C」

**切り取り**
「Ctrl」+ 「X」

**貼り付け**
「Ctrl」+ 「V」

**直前の操作を取り消す**
「Ctrl」+ 「Z」

**直前の操作を取り消すのを取り消す**
「Ctrl」+ 「Y」

**複数行の選択**
「Shift」+ 「↑」「↓」「←」「→」

**保存する**
「Ctrl」+ 「S」

**行の先頭に移動**
「Home」

**行の末尾に移動**
「End」


テキストを書くことはwordやエディターなど頻繁に使用する機会がありますよね。当然コピーや貼り付けもよく使うのですが、ドラッグして右クリックしてコピーなどをいちいちやるとかなり効率が悪いです。上記のショートカットキーは必ず覚え、習慣付けるようにしましょう。


## ファイルやフォルダ―で使うショートカットキー

**エクスプローラーを開く**
「Windows」+ 「E」

**フォルダの作成**
「Ctrl」+ 「Shift」+ 「N」



**名前を変更する**
「F2」

**ファイルの検索**
「Ctrl」+ 「F」

**前のフォルダーに戻る**
「Alt」+ 「←」

**戻る前のフォルダーに移動**
「Alt」+ 「→」

**親フォルダーに移動**
「Alt」+ 「↑」


**表示形式の変更**
「Ctrl」+ 「Shift」+ 「1」~「8」
↓
「Ctrl」+ 「Shift」+「1」=>アイコンの特大サイズ

「Ctrl」+ 「Shift」+「2」=>アイコンの大サイズ

「Ctrl」+ 「Shift」+「3」=>アイコンの中サイズ

「Ctrl」+ 「Shift」+「4」=>小サイズ（プレビューなし、横並び）

「Ctrl」+ 「Shift」+「5」=>小サイズ（プレビューなし、縦並び）

「Ctrl」+ 「Shift」+「6」=>アイコンの特大サイズ

「Ctrl」+ 「Shift」+「7」=>アイコン中サイズ（左右均等にアイコンが配置される）

「Ctrl」+ 「Shift」+「8」=>アイコンをリスト形式で表示

※自分が一番見やすいと思うショートカットキーを1つ覚えておくと便利だと思います


## ウィンドウを操作するショートカットキー

**ウィンドウの最大化**
「Windows」+「↑」

**ウィンドウの最小化**
「Windows」+「↓」

**アプリやウィンドウの切り換え**
「Alt」+「Tab」
※「Alt」を押した状態で「Tab」を押すことで開くウィンドウやアプリを選択できる

**ウィンドウを他のディスプレイに移動**
「Windows」+「Shift」+「←」+「→」

**デスクトップを表示する**
「Windows」+「D」

**全てのウィンドウを最小化する**
「Windows」+「M」

**最小化したウィンドウを復元する**
「Windows」+「Shift」+「M」

**使用していないウィンドウを最小化する**
「Windows」+「Home」

**ウィンドウを閉じる**
「Ctrl」+「W」
※アプリを閉じる場合は
「Alt」+「F4」

## その他知っておくと約に立つショートカットキー

**タスクバー上のアプリを選択**
「Windows」+「T」

**左から見てX番目のアプリを起動**
「Windows」+ 「0」～「9」

**スクリーンショットを撮影する**
「Prt Sc」

**範囲を指定してスクリーンショットを撮影**
「Windows」+ 「Shift」+「S」


## おわりに

いかがだったでしょうか？ショートカットキーはまだまだありますが個人的に便利でかつ基本的なショートカットキーだけに絞りました。このショートカットキーを知っておくと便利だよ！というものがあれば是非コメントして頂けると幸いです