OmniAICreator/Qiita-1.07M huggingface dataset:
個人メモ(VBA)

## データの件数がわからないとき(最終行を取得)

```
MsgBox Cells(Rows.Count, 1).End(xlUp).Row
```

例
``` vb
    '変数MaxRowを宣言
    Dim MaxRow As Long
    

    '最終行を取得
    MaxRow = Cells(Rows.Count, 1).End(xlUp).Row


    '最終行まで繰り返す
    MsgBox MaxRow
    Dim i As Long
    For i = 2 To MaxRow
        Cells(i, 2) = Cells(i, 1) - 100
    Next i
```

## 二重ループ
``` vb
    'カウンタ変数i,jを宣言
    Dim i As Long, j As Long
    
    '二重ループ
    For i = 2 To 11
        For j = 1 To 3
            'すべてのセルに-100
            Cells(i, j) = Cells(i, j) - 100
        Next j
    Next i
``` 



##  文字列を置換

``` vb
    Dim str As String
    
    str = "東京都品川区"
    str = Replace(str, "東京都", "")
    MsgBox str
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172280/b02b4562-0dd1-652a-1095-7432e8a6293d.png)








##     'InStr関数と組み合わせ

``` vb
    Dim eMail As String
    eMail = "abcdeffff@excel233333.com"

    '@は何文字目にあるか調べる
    MsgBox InStr(eMail, "@")


    '"@"より前を自動抽出
    MsgBox Left(eMail, InStr(eMail, "@") - 1)


    '"@"より後を自動抽出
    MsgBox Right(eMail, Len(eMail) - InStr(eMail, "@") - 1)
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172280/9db737bf-5f82-a6a8-ea45-e5148b166291.png)



## StrConv関数

``` vb
    Dim str As String
    str = "ABCはエービーシー"

    '英語を大文字/小文字に変換する
    Range("A1") = StrConv(str, vbUpperCase)
    Range("A2") = StrConv(str, vbLowerCase)


    '文字列を全角/半角に変換する
    Range("A3") = StrConv(str, vbWide)
    Range("A4") = StrConv(str, vbNarrow)


    'かなをひらがな/カタカナに変換する
    Range("A5") = StrConv(str, vbHiragana)
    Range("A6") = StrConv(str, vbKatakana)
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172280/a431c5c5-18c1-3bc7-5048-aa310665fe44.png)




## Format関数

``` vb
    '現在日付を西暦(yyyy/m/d形式)に変換
    Range("A1") = Format(Now, "yyyy/m/d")
    
    '曜日に変換
    Range("A2") = Format(Now, "aaaa")
    
    '和暦に変換
    Range("A3") = Format(Now, "ggge年m月d日")
    
    'yyyy年m月d日(曜)形式に変換
    Range("A4") = Format(Now, "yyyy年m月d日(aaa)")

    '数値を桁区切り形式に変換（0の場合は非表示)
    Range("A5") = Format(29800, "#,###")
    Range("A6") = Format(0, "#,###")
    
    '数値を桁区切り形式に変換（0の場合は表示)
    Range("A7") = Format(29800, "#,##0")
    Range("A8") = Format(0, "#,##0")

```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172280/27cb4bf5-7c7f-28da-9990-5524eff6f8a3.png)



## 偶数であれば色を塗る/5行目であれば...

``` vb
    '最終行を取得する
    Dim maxRow As Long
    maxRow = Cells(Rows.Count, 1).End(xlUp).Row
    
    
    '行番号を取得する
    Dim i As Long
    For i = 2 To maxRow
        
        '偶数であれば色を塗る
        If Range("A" & i).Row Mod 2 = 0 Then
            Range("A" & i).Resize(, 7).Interior.Color = RGB(226, 239, 218)
        End If
        
        
        '5行ごとに罫線
        If Range("A" & i).Row Mod 5 = 1 Then
            Range("A" & i).Resize(, 7).Borders(xlEdgeBottom).LineStyle = xlContinuous
        End If
        
    Next i
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/172280/55caf3ba-3479-5eb6-5409-35787e34f91a.png)
.protoファイルをかんたんにビルドできるUnityエディタ拡張をつくった

# はじめに
いちいち`protoc`コマンドをちまちま打ったり、シェルスクリプトを作ったりするのがめんどくさくなったので、エディタ拡張にしました。

# 動作環境
- 64bit Windows
- Unity 2022.3以上

:::note warn
MacOSやLinuxでは動作しません。すみません。
:::

# リポジトリ

https://github.com/kinakomochi-0315/ProtocolBufferBuilder.git

# つかいかた
- [Releases](https://github.com/kinakomochi-0315/ProtocolBufferBuilder/releases/)から、最新の`.unitypackage`をダウンロードしてください
- ダウンロードしたそれをダブルクリックしてunityにインポートしてください
- unityエディタ上部のタブから、`Window/ProtocolBufferBuilder`をクリックしてください

# 画面説明
- ビルドしたい.protoファイルをここで指定します  
  変換先フォルダを空にしていた場合、.protoファイルのあるフォルダを変換先フォルダに自動で設定します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3571046/94ecd40d-31b5-60d8-6727-67b91a173dd2.png)

- ここで生成されたC#スクリプトの出力先を設定できます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3571046/00ff1809-7f36-1f86-025c-dbf8facc9394.png)

- フォルダとディレクトリを指定した後、「ビルド」ボタンを押すことでC#スクリプトにコンパイルします
:::note warn
このエディタ拡張をインストールしたフォルダのパスに
日本語が含まれているとうまく実行できません。
:::
ElixirでDJコントローラーをキーボードにする

# 前提環境
- OS Ubuntu 22.04
- DJコントローラー　Pioneer DDJ-FLX4 
- portmidiをインストールできる環境(下記参照)
  https://qiita.com/t-yamanashi/items/38e4cd7124c4daac111f
- xdotoolがインストールできる環境(下記参照)
  https://qiita.com/t-yamanashi/items/956a715caa7abde7a6b6

# 実施するざっくり説明 
- midi inからデーター取得
- midiデーターによってキーボードとして信号を送る
# ソース
```elixir
defmodule DdjKeyout do
  @moduledoc """
  Documentation for `Keyout`.
  """

  def main() do
    {:ok, input} = PortMidi.open(:input, "DDJ-FLX4 MIDI 1")
    PortMidi.listen(input, self())
    midi_in(input)

    PortMidi.close(:output, input)
  end

  def midi_in(input) do
    receive do
      {^input, [{{144, 11, 0}, _}]} ->
        IO.inspect("end")

      {^input, [{{151, 4, 0}, _}]} ->
        send_key("a", input)

      {^input, [{{151, 5, 0}, _}]} ->
        send_key("b", input)

      {^input, [{{151, 6, 0}, _}]} ->
        send_key("c", input)

      {^input, [{{151, 7, 0}, _}]} ->
        send_key("d", input)

      a ->
        IO.inspect(a)
        midi_in(input)
    end
  end

  def send_key(key, input) do
    System.cmd("xdotool", ["type", key])
    midi_in(input)
  end
end
```

https://github.com/ymn-t-yamanashi/jjd-flx4_keyout

# 動作動画

<iframe width="560" height="315" src="https://www.youtube.com/embed/JSM4rX4_MOc?si=o6gd4ZKODLcqPPeq" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
コールバック関数について

# コールバック関数とは
コールバック関数とは、引数として他の関数に渡され、外側の関数の中で呼び出されて、ルーチンやアクションを完了させる関数のことを指します。

# コールバック関数についてのサンプル
バッチで以下関数をコールバックで実行するサンプルとなります。
* １加算した結果を返却する関数 : plusOne
* １減算した結果を返却する関数 : minusOne
* ２倍した結果を返却する関数 : double
* ３倍した結果を返却する関数 : triple



## 関数の定義
引数で関数を受け取るコールバック関数を定義したクラスを作成します。
```GenericFunction.java
public class GenericFunction<T, R> implements Function<T, R> {
    public final String functionName;
    private final Function<T, R> function;

    public GenericFunction(String functionName, Function<T, R> function) {
        this.functionName = functionName;
        this.function = function;
    }

    @Override
    public R apply(T t) {
        return function.apply(t);
    }
}
```

サンプルコードに記載したようにListに各関数を定義し、定義した関数を順次実行するサンプルになります。

```java
    public static void main(String[] args) {
        ArrayList<GenericFunction<Integer, Integer>> list = new ArrayList<>();

        list.add(new GenericFunction<>("plusOne", n -> n + 1));
        list.add(new GenericFunction<>("minusOne", n -> n - 1));
        list.add(new GenericFunction<>("double", n -> n * 2));
        list.add(new GenericFunction<>("triple", n -> n * 3));

        for (GenericFunction<Integer, Integer> function : list) {
            System.out.println(function.functionName + ": " + function.apply(5));
        }
    }
```

```console
// 処理結果
plusOne: 6
minusOne: 4
double: 10
triple: 15
```

# まとめ
今回はコールバック関数の利用方法についてサンプルコードを作成してみました。
業務でも頻繁に利用することもあると思いますので、実例を交えたことで理解が深まったかと思います。
【新卒SE】入社前に基本情報を取得したことによるメリット

# はじめに
私は4月から業務系SIerに就職した、入社1年目のSEです。

# 結論
結論から申し上げると、私自身は入社前に基本情報を取得したことによるメリットはあまり感じられませんでした。

# 取得の動機
大学4年生の春に内定が決まり、就職までかなり時間を持て余していたため、勉強の一環として｢システムエンジニアの登竜門｣とも言われる基本情報技術者試験を取得しました。

# 入社してから感じたこと
配属された現場における業務は、基本情報で学んだ知識だけでは全く通用しませんでした。<br>｢基本情報技術者試験｣とはシステムエンジニアに最低限必要とされている知識を有していることを証明する資格であり、現場ではそれよりも実践的で具体的なスキルが求められているのではないかと感じました。

# メリット
私自身は基本情報を取得したことによるメリットをあまり実感することはできませんでしたが、会社によっては資格手当や、資格の取得が評価に繋がるというメリットもあると考えられるため、資格を取得する必要が無いとは一概には言えません。

# まとめ
<ul>
<li>基本情報に合格しているからといってすぐに仕事ができるわけではない</li>
<li>受験するかどうかは人による</li>
</ul>
VirtualBox Guest Additions がロードできない

原因不明って・・・

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/54a42439-becb-7814-50eb-464919c6050a.png)



# 環境

- 母艦 Ubuntu 24.04 LTS
- Virtualox 7.0.16

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/a7f9d485-465d-5699-6677-90bb0b78a786.png)


# 対応

https://download.virtualbox.org/virtualbox/
ここから該当バージョンの ISO をダウンロードして手動でマウントすればOK。
うるう年ゲーム

# これは何？

https://qiita.com/mtmtss/items/f878b61386c6fa68d936

を読んで思いついたゲーム。

# ゲームの内容

平均太陽年が 365.24218944 日として、平均してこれに近くなるうるう年のルールをいい感じのルールを設定せよ。

ただし。

* 小学6年生程度の能力で西暦の数値（最大 1億1800年）から暗算でうるう年が判定できるルールであること
* 現状のルールを大幅に超える複雑さにはしないこと
* 対象となる年は、西暦で 1800年から1億1800年までとする
* まんべんなくうるう年を配置すること（例えば「西暦 xxx 年までは毎年うるう年、それ以降は平年」というルールにすると1億年の平均としたら良い数値になるが、それはだめということ）

という制約を課す。
見ての通り、いずれも不明確なルールとなっている。どっちが優れているのかは、それぞれが勝手に判断すればよく、明確な優勝者は出ない。

また

* 現状のルールとの互換性や連続性はなくて良い
* 潮汐の影響などで本当は地球の自転はどんどん遅くなると思われるが、そのことは考慮しない

ということにする。

# ベンチマーク

現状のルールがベンチマークとなる。

現状のルールは、平均太陽年 365.2425日となる。
ターゲットとの誤差は約 1/3220 日。これより誤差を減らしたい

# チャレンジ

## いい感じではないルール

素朴に考えると

* 4の倍数はうるう年
* ただし、128の倍数はうるう年ではない

は、平均して 365.2421875日となるので優秀だが、「128の倍数」か否かを暗算で判断できないのでダメ。

## いい感じのルール

* 4の倍数はうるう年
* ただし、下三桁が 000、100、200、300、500、600、700、800 のときはうるう年ではない

ちょっと無様なルールだとは思う。
この作戦だと 365.242 日になる。ターゲットとの誤差は約 1/5279 日。

## アイディア

下3桁しか見ないのであれば、365.242 日よりはよくならない。
4桁の割り算とかは暗算ではできない。

ということで「下5桁の各桁で、3の倍数が何個のときはうるう年じゃない」みたいなことをすればいいのかなと思っているけど具体的に計算していない。

# というわけで

というわけで、こんなルールどう？　というコメントをお待ちしています。
Salesforce 認定Platformアプリケーションビルダー試験レポート

## Salesforce 認定Platformアプリケーションビルダー試験レポート
この投稿は先日「Salesforce 認定Platformアプリケーションビルダー試験」に合格しましたので、そのレポートになります。

### 【目次】
1．勉強法について
2．試験結果・感想
3．まとめ

### 1．勉強法について
資格取得に向けた勉強としては以下の模擬問題（非公式）を2周しました。
[TysonBlog【Salesforce認定Platformアプリケーションビルダー】 試験対策](https://tysonblog-whitelabel.com/category/salesforce/salesforce-appbuilder)

全215問あり、全問解説付きのためとても分かりやすかったです。
試験ではこの模擬問題がそのまま出たり、似たような問題が多く出題されていたため取り組んでいてよかったです。
単に問題を解くだけでなく、実際の画面でも内容を確認することで知識が定着しやすくなると思います。

また資格取得に向けた勉強ではありませんが、2週間ほど会社の後輩に標準機能について教える機会があり普段業務で使用していない機能も見るきっかけとなり資格取得に向けてもいい勉強になりました。


### 2．試験結果・感想

試験は105分で60問を解き、合格ラインは63％です。
**結果は「合格」で、正答率は以下表の通り約86％です。**
（単元ごとの問題数と結果得点は公表されないため、結果は計算により求めた想定値となります）
試験に使用した時間は**75分**程でした。内訳は45分ほどかけて一周解き、30分ほどかけて見直しをしました。

| 単元 | 配点（%） | 問題数（想定）| 得点率（％）|得点数（想定）|
|:-----------|------------:|:------------:|:------------:|:------------:|
| Salesforceの基本 | 23| 14|85|12|
| データモデリングおよび管理 |  22 | 13|92|12|
| ビジネスロジックとプロセスの自動化 | 28 | 17|82|14|
|ユーザインターフェース| 17 | 10 |90|9|
|アプリケーションのリリース| 10 | 6 |83|5|
| 合計 | 100 | 60|86|52|

内容としては過去受験したアドミニストレータ・デベロッパーで多く出題された、シナリオに対してふさわしい答えを問うような問題が多かったです。

### 3．まとめ
過去受験したアドミニストレータ・デベロッパーと比べて資格取得に向けた勉強時間は少なめだったため不安はありましたが合格できよかったです。

先述したように、後輩に教える機会がありそれが自分の勉強にもなり、今回合格できた要因として、その点が特に大きかったと思いますので、改めてアウトプットの重要性を感じました。

今後は他のSalesforce試験にも続けて挑戦したいと思います。
自分のキャリア: エンジニアのネガティブキャリア

こちらの記事に刺激され書きました

https://qiita.com/nanchan/items/18bac5ed1151023a1650

何か書くことで誰かの参考になることもあるかもしれないかと思いました。

# 自己紹介
40代前半のエンジニアです。大学時から違和感を感じメンタルヘルスの持病を持っています。
高校で商業系の情報処理科に進みプログラミングと出会い、大学も工学系の経営工学で、ちょっとプログラミングをしてました。
高校時に基本情報技術者試験に受かり、学校の情報系のテストはいつも満点でした(アルゴリズム系が好きでした)。大学時アルバイトでプログラミングのアルバイトをしていました。

大卒から、下請けのお客様先常駐のSEを7年くらいして、4社転職しています。
8年離職して、Webエンジニア1年半やり、今フリーランス(開始直後)です。

# 新卒の就職活動
なんだかわからないまま、就職活動が始まってしまい、リクルートの就職フェスタなどの行きました。
何社か受けては落ち、「プログラミングのアルバイトをしていた」とかの経験談は「なら、その会社に勤めれば」的な返しをされました。体調に違和感を持っていたため、長くて1年半くらいのアルバイト経験とかしかなく、「長くアルバイトをしたとか何か長く何かをやった経験はないわけ？」とかすごく苦い顔で言われたのを覚えています。

結局は、「何もプログラミングを知りません」て言うことで合格率が多くなりました。
それで体育会系の100人規模の会社に受かり入社しました。

# 1年目から5年目
下請けのお客様先常駐のSIerで製造工程（コーディング）を主に行ってました。
同じ専門学校からの卒業生を多くとっている会社だったので、専門学校でない大学卒業生は何も知らないと、暗黙の優劣がありました。「自分たちよりできないのに大卒の方が給与良くていいよね」と同期に言われたこともあります。

最初は、順調でした。教えてもらいOJTで業務に慣れていきました。
ただ、半年から1年くらいしたら、「設計チームに行くか？」と上司から言われてました。
ただ、そこで私は間違えました。同じチームに配属された同期がもう1人いて、製造工程が苦手な人で「自分は今回設計にいけなければ、会社を辞める」と言ってました。
だから「（その同期）を設計チームで大丈夫です。自分は今辞めたいとか考えてないので、次の機会で大丈夫です」と答えました。

結局、同期が設計に上がり、私は製造チームに残りました。ただ、快く話を聞いてもらってると思ってた上司には、飲み会ごとに「お前は俺がせっかく設計に上げようとしたのに断ったんだ。お前の後輩が設計に上がってもお前は製造のままだ」と言われ、自分も正直設計に上がりたかったし、製造チームのままだと仕様とかわからないことも多くて辛かったので、年数が上がるほどしんどくなり飲み会でその言葉を言われるたびに泣き出して、周りから呆れられていました。

そんなわけで1年から5年目は製造をしていました。夜勤の1人での待機などもあり、設計工程は行ってないので、わからないことも多くあり、次第に仕事中や通勤時毎日泣いている状況になりました。
エンジニアでこれは多いのですが、仕事中に泣いてる人がいても声もかけてもらえない現場は多いです。

# 6年目
6年目に何度もやりたいと言って念願叶って設計工程をおこなうことになりました。
ただ、もう6年でした。一から教わるには無理があるのに気づいてませんでした。言われたことは「今まで製造工程やってたから分かるでしょ。それで設計書書いて」でした。
分かりませんでした。何度も最初に設計チームに上がれなかったことを後悔して、分からないまま設計書を書いて、分からないまま注意され、終わってで分からず、泣いてばかりでした。
結局、もうこのままでは自分は潰れると思い転職を決意しました。

# SE4社転職のあたり
転職すれば何かが変わると思っていましたが、もう経験者転職になり、どこへ行っても経験者として扱われました。
より多くのことを要求され、マネジメントなども行いましたが、事前に言われることもなく、知識もなく、相談できる人もいなく、なんだか分からないままやり、なんだか分からないまま非難をされました。
結局、このあたりとかは完全に潰れていたんだと思います。自分に関わって苦しい思いをした人に申し訳なく思います。

今まで当たり前だったことも営業さんとの仲とかは転職先ごとに違い、「エンジニアが何かになりたいとか言うもんじゃない、営業が必死にとってきた仕事をしてるのに仕事を選ぶような言葉を言うのはすごい非常識だ」と言われたこともあります。

# Webエンジニア
体調不良での離職中に「コンピュターはなぜ動くのか」とかの本を100冊くらい読み自分の知識を見直して、スタートアップのWeb企業に転職しました。ただ、余裕のない会社だったので、周りのきつい言い方(本人無自覚)にすぐメンタル面の体調不良を起こしてしまい、退職しました。

今はフリーランスを始めて仕事を探しているところです。

# 自分はどんなエンジニアになりたいのか
考える（設計）と作る(製造)を行い、使ってる人が楽しかったり、当たり前のことが当たり前にできる、そう言うものを開発できるエンジニアになりたいです。アーキテクト領域に強くなりたいです。

# 自分の弱い部分は何か
とにかく会社選びが下手なんだと思います。面接が下手。ポートフォリオでも用意すればいいのに、そう言うことも考えすぎて作れない。流されるままに面接して受かったとこに就職して、流されるままに1人良くわかんないことになっている。
周りに助けは求めるんですが、仕事の経過以外で自分のことを話すのが下手すぎで、どれだけ追い詰められているのか伝わってないため変なことになるんだと思います。

# まとめ
なんか自分がアレな人なのかなと印象を受ける人も多いと思います。ただ、これも紛れもなくエンジニアのよくある現状です。
転職先の現場で私以外の女性エンジニアが泣いてる現場は正直良くありました。
女性でなく男性エンジニアでこういうことになる人もよくいます。

10年前から20年前の状況なので今がどういう社会かは分かりませんが、良い社会になることを願います。

読んでいただき、ありがとうございます。
SQLiteで区切り文字を使って文字の一部を切り出す方法

## 実現したい事
ある文字を区切りにしてその前後の文字を取り出したい

## 方法
1. `INSTER`で区切り文字の位置を見つける
2. `SUBSTRING`で区切り文字の位置を基に切り出す


<br><br>例：メールアドレスから@より前の文字列を取り出したい
```SQL
SELECT 
    SUBSTR(email, 1, INSTR(email, "@")-1) AS username
FROM
    users;
```

このような方法である特定の文字を区切り文字にして文字の切り出しをすることができます。
大学入試問題文?集（第11巻）数学問題文の中の文字「極値をもつ」と「極値を持つ」と「極値をとる」と「極値を取る」を調査したい。（調査中）


　　　　　　呼び名
極値をもつ　ひらがなのもつ
極値を持つ　漢字のもつ
極値をとる　ひらがなのとる
極値を取る　漢字のとる

「極値をもつ」と「極値を持つ」と「極値をとる」と「極値を取る」

"極値をもつ"  OR "極値を持つ"

https://cse.google.com/cse?cx=a8908fbc24340ebc5&q=%22%E6%A5%B5%E5%80%A4%E3%82%92%E3%82%82%E3%81%A4%22++OR+%22%E6%A5%B5%E5%80%A4%E3%82%92%E6%8C%81%E3%81%A4%22&oq=%22%E6%A5%B5%E5%80%A4%E3%82%92%E3%82%82%E3%81%A4%22++OR+%22%E6%A5%B5%E5%80%A4%E3%82%92%E6%8C%81%E3%81%A4%22&gs_l=partner-web.12...246006.246006.0.247379.1.1.0.0.0.0.631.631.5-1.1.0.csems%2Cnrl%3D10...0....2.34.partner-web..1.0.0.6rwOYlnJ7To

"極値をとる"  OR "極値を取る"

https://cse.google.com/cse?cx=a8908fbc24340ebc5&q=%22%E6%A5%B5%E5%80%A4%E3%82%92%E3%81%A8%E3%82%8B%22%C2%A0+OR+%22%E6%A5%B5%E5%80%A4%E3%82%92%E5%8F%96%E3%82%8B%22&oq=%22%E6%A5%B5%E5%80%A4%E3%82%92%E3%81%A8%E3%82%8B%22%C2%A0+OR+%22%E6%A5%B5%E5%80%A4%E3%82%92%E5%8F%96%E3%82%8B%22&gs_l=partner-web.12...3435.3435.0.5066.1.1.0.0.0.0.1112.1112.7-1.1.0.csems%2Cnrl%3D10...0....2.34.partner-web..1.0.0.9ocJ16nBa4w

・一大学ずつサイト内検索しています。
・ChatGPT先生にやってもらえないかな。
・一括ダウンロードして、ローカルで検索した方が早いかも。

# 調査方法
・「大学入試数学問題集成」様のサイトの「サイト内検索」で、
　"○○大学" "極値"
　検索結果の年度より、最新年度を調べる。
・調査順番は任意。

# 調査結果

### 東北学院大学
極値を取る　漢字のとる
https://mathexamtest.web.fc2.com/2017/201712441/2017124410800.html#top-0806

### 東京海洋大学
極値をとる　ひらがなのとる
https://mathexamtest.web.fc2.com/2022/202210280/2022102800400mj.html#top-0404

### (公立)諏訪東京理科大
なし

### 三重大学　
極値をもつ ひらがなのもつ
https://mathexamtest.web.fc2.com/2023/202310501/2023105010300.html#top-0303

### 山口大学
なし

### 鳴門教育大学
なし

### 愛媛大学
なし

### 高知工科大学
なし

### 九州工業大
極値をとる　ひらがなのとる
https://mathexamtest.web.fc2.com/2016/201610848/2016108480200mj.html#top-0205

### 福岡女子大学
極値を持たないときの 漢字のもつ
https://mathexamtest.web.fc2.com/2022/202211851/2022118510100.html

### 佐賀大学
極値をとる　ひらがなのとる
https://mathexamtest.web.fc2.com/2021/202110861/2021108610200mj.html#top-0203
Javaで簡単な数字ゲームを作ってみた。

javaを使って、簡単な数字ゲームを作ってみました。

ルールは単純です。
入力した数字が、コンピュータが出した数字より大きかったら、勝ち。
逆にコンピュータが出した数字より小さかったら、負け。
以下に自分が書いたコードを載せます。

```java:GameSample
public class GameSample{
    public static void main(String[] args){
        //ここでまず、数字を入力できるように設定する
        System.out.println("数字を入力してください");
        int i = new java.util.Scanner(System.in).nextInt();
        
        //数字の乱数生成
        int j = new java.util.Random().nextInt(100);
        
        //jに+1を加えて、１〜１００に設定
        j ++;
        System.out.println("jの数字:" + j);
        //条件分岐
        if(i > j){
           System.out.println("大きい");
        } else {
            System.out.println("小さい");
        }

    }

    
}        
```
# 結果

数字を入力してください
56
jの数字:100
小さい

# まとめ
今回は、まだJavaを勉強中ということで、条件分岐などを使って、簡単なものを作成しました。
自分で考えながらコード書いて、それが想像通りに動いてくれたので、とても嬉しかったと同時に感動しました。
また、まだ基本構文や配列、オブジェクト指向など勉強中なので、一通り勉強して復習したら、今度は「じゃんけんゲーム」を作ろうと思います。
33業種×エンジニア：鉄鋼

## はじめに
転職を始める際、自分ができることを加味したうえで求人情報を確認しますが、あえて33業種の側からみてみて、どのような働き方、どんな会社があるのかを知りたいと思います。
世界と日本でどんな企業が有名なのかも知りたいと思います。

## 鉄鋼業界×エンジニアの働き方の例
#### 1. システムエンジニア（SE）
生産管理システムの設計・実装、製造プロセスの最適化、データの統合管理。
例: 製造ラインの生産効率を向上させるためのMES（製造実行システム）の開発・導入。

#### 2. プログラマー
製造設備や生産ラインの制御ソフトウェア、データ解析ツールの開発。
例: 製鋼プロセスのリアルタイム監視システムや品質管理システムのプログラム作成。

#### 3. サーバーエンジニア
生産管理システムを支えるサーバーインフラの設計・構築・運用・保守。
例: 高速データ処理を可能にするためのクラウドサーバーの導入と管理。

#### 4. ネットワークエンジニア
工場内ネットワークの設計・構築・管理、データセキュリティの確保。
例: IoTデバイスを用いたスマート工場のネットワークインフラ構築と最適化。

#### 5. データベースエンジニア
生産データや品質管理データの効率的な管理、ビッグデータ解析。
例: 製品トレーサビリティシステムのデータベース設計と運用。

## 世界大手企業の概要
[ArcelorMittal（アルセロール・ミッタル）](https://corporate.arcelormittal.com/)
世界最大の鉄鋼メーカーで、ルクセンブルクに本社を置く多国籍企業。世界中に製造拠点を持ち、自動車、建設、家電など様々な市場に向けた製品を提供しています。

[China Baowu Steel Group（中国宝武鋼鉄集団）](https://www.baosteel.com/home)
中国最大の鉄鋼メーカーで、世界市場でも有数の規模を誇ります。建設、エネルギー、機械製造など多様な分野で使用される鋼材を生産しています。

## 日本大手企業の概要
[Nippon Steel Corporation（日本製鉄株式会社）](https://www.nipponsteel.com/)
日本最大の鉄鋼メーカーで、世界的に高い評価を受ける技術力を持つ企業。建設、自動車、家電など多岐にわたる分野で使用される鋼材を製造しています。

[JFEスチール株式会社](https://www.jfe-steel.co.jp/)
2003年に設立された日本の大手鉄鋼メーカーで、高品質な鋼材を製造し、国内外の建設、自動車、機械産業に提供しています。

[神戸製鋼所（Kobe Steel, Ltd.）](https://www.kobelco.co.jp/)
1905年に設立された日本の鉄鋼メーカーで、鋼材、アルミニウム、銅製品など多様な製品を提供しています。また、機械、電力、インフラ事業にも参入しています。

## さいごに、求人票を検索してみて
「サイバーセキュリティに係わる施策の戦略企画・推進」「ITインフラ整備」「最先端テクノロジー（AI、IoT、RPA）の活用」等。プログラミングとはどこか違うのかな？というのが第一印象でした。製造工程の改善等、規模が非常に大きい陽にも感じられました。さすが世界に名だたる企業…。
Hit and Blowゲームの開発

# Hit and Blowとは
4桁の数字を当てるゲームを行います．
このときプレイヤーは4桁の数字を入力し，その数字と答えの数字との一致している桁数を得ることができます．
入力した数字が答えの数字と位置まで一致している場合にはHit，数字は一致しているが，位置が間違っている場合にはBlowとして出力されます．
しかしどの桁の数字がHitやBlowしているのかはわかりません．
また答えの各桁の数字は重複がないようにしています．
例えば1234が答えだった場合，1345を入力すると，1Hit,2Blowとなります．
このゲームをC言語を用いて実装します．
以下の4つのファイルを同じディレクトリに配置して実行すれば，プレイできます．

```header.h
#include <stdio.h>
#include<stdlib.h>
#include<time.h>
#define N 4	//ヒットアンドブローゲームの桁数(1~10)

extern int answer[10], input[N];

void make_answer(void);

void get_player_answer(int count);
```


```Main.c
#include "header.h"

int answer[10], input[N];

int main(void) {
	int i, j, count = 1;

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

	while (1) {
		unsigned short hit = 0, blow = 0;	//hit数、blow数保存用変数の初期化

		get_player_answer(count);

		for (i = 0; i < N; i++) {
			if (input[i] == answer[i]) {
				hit++;		//hit数保存用変数更新
				continue;
			}
			for (j = 0; j < N; j++) {
				if (input[i] == answer[j]) {
					blow++;		//blow数保存用変数更新
					break;
				}
			}
		}

		printf("%dhit, %dblow\n", hit, blow);

		if (hit == N)
			break;		//ヒット数が桁数に一致したら終了
		count++;
	}

	printf("%d回でクリア!!\n", count);
	return 0;
}
```

```player.c
#include"header.h"

void get_player_answer(int count) {
	int key, i;
	printf("%d桁の数字を入力(%d回目)：", N, count);
	scanf_s("%04d", &key);	//キーボードからN桁の数字を受け取る
	for (i = 0; i < N; i++) {	//4桁の数字の各位の数を配列に格納
		input[i] = key % 10;
		key /= 10;
	}
}
```

```answer.c
#include"header.h"

void make_answer(void) {
    int i, temp, rand1, rand2;
    for (i = 0; i < 10; i++)
        answer[i] = i;  //正答用配列の初期化
    for (i = 0; i < 20; i++) {          //正答用配列の生成(20は任意の入れ替え回>数)
        for (rand1 = 0; rand1 < 10; rand1++) {
            rand2 = rand() % 10;
            temp = answer[rand1];
            answer[rand1] = answer[rand2];
            answer[rand2] = temp;
        }
    }
}

```
symbol-shoestringで建てた Nodeの node秘密鍵を見る！

...え〜
本日は　この記事を開いていただきまして
まことにありがとうございます

あのですね
symbol-shoestringで作った nodeなんですがね
これ　symbol-bootstrapみたいに addresses.ymlが無くてですね
nodeの各 accountの秘密鍵を見るのが
すっごく！　めんどくさいんです！！！

なので
ｼｪﾙｽｸﾘﾌﾟﾄにしました
え〜とですね
命令とかよくわかんないんで
とりあえずちゃんと動くんですが
判る人がこれ見ると*もんどりうつ*かも知れませんが
とりあえずちゃんと動きます

使い方
shoestringの nodeが保存されてる ﾃﾞｨﾚｸﾄﾘ（dataとか dbdataとか docker-compose.yamlとかがある場所ですね）に移動してください

`vi pri`で　以下を入力して保存してください

````
#!/bin/bash
echo "main" > a
openssl pkey -in ca.key.pem -noout -text|sed 's/://g'|sed -n 3,5p|sed 's/    //g'|sed -z 's/\n//g' >> a
echo "\n" >> a
echo "transport" >> a
openssl pkey -in keys/cert/node.key.pem -noout -text|sed 's/://g'|sed -n 3,5p|sed 's/    //g'|sed -z 's/\n//g' >> a
echo "\n" >> a
echo "remote" >> a
openssl pkey -in keys/remote.pem -noout -text|sed 's/://g'|sed -n 3,5p|sed 's/    //g'|sed -z 's/\n//g' >> a
echo "\n" >> a
echo "vrf" >> a
openssl pkey -in keys/vrf.pem -noout -text|sed 's/://g'|sed -n 3,5p|sed 's/    //g'|sed -z 's/\n//g' >> a
echo "\n" >> a
````

```sh pri```で　これを実行してください

そしたら　こんな風に表示します
↓
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/582454/a2d82257-2e10-3ef2-7150-4f258416e39e.png)


...え〜
nodeAccountsの
`main`
`transport`
`remote`
`vrf`
それぞれの nodeAccountの秘密鍵が表示されます
で　ですね
この結果ですね？`a`って ﾌｧｲﾙに保存されてますので
`cat a`でいつでも見れます

何の役に立つのか？誰かの役に立つのか？？？
わかりませんがここに置いときます

あと
これ
`wget 6.dusanjp.com/pri`で ﾀﾞｳﾝﾛｰﾄﾞできる様になってます
きょうはもう歯ｱみがく
Ollamaでtoolsを使う。Request受付まで

Ollamaでtoolsが使えるようになったというニュースがありました。

それで気になって調べてみた結果がこれです。Lhama3.1です。途中までです。普通のチャットだと、role的に答えられないために途中までです。

ChatGPTのAssistant機能とか値段が、高かったので放置してたため、知識として欠落してました。
## ようするに Toolを使うと、LLMが質問に質問を返すようになる。
https://ollama.com/blog/tool-support
toolとは、こちらで定義した関数を元に、向うから、最終的に、こちらのチャットに答えるために、質問してくる仕組み。（自動でそれに答える仕組みを用意しないといけない)
roleをtoolで答えたら、それを元に最終返答が返ってくるみたいです。

本来は、お天気の例みたいに、自分で関数を定義しないといけませんが、
Web browsing/検索(brave_search),数値計算(wolfram_alpha) コード実行(Code interpreter)は定義しなくても、用意されているみたいです。(モデルによるだろうけど)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/54688/085f231e-16a4-e992-ac7a-e28932d29a4a.png)
引用元 https://llama.meta.com/docs/model-cards-and-prompt-formats/llama3_1/

ただ、公開アプリとかで、この機能実装すると、インターネット検索やpython実行など、セキュリティーホールになりそうな感じは強いよね。

　ただ、質問に答えるために、どのtool(関数)を使えばいいのか、判断するみたいなので、チャットだけで、面白いことはできそうですね。

## 入力と出力
System
```
Environment: ipython Tools: brave_search Today Date: 27 Jul 2024
```
Input
```
明日の東京の天気 use brave_search
```
Output
```

brave_search.call(query="tomorrow's weather in Tokyo")

```

SystemのEnvironment: ipythonや、Inputのuse brave_search入れた方が、python_tag形式で返す確率が上がります。(tool_choiceで制御するべきなのですが、未サポート)
StarServerFreeで無料のWP環境立ち上げたので備忘録

# はじめに
とあるWordPressの改修で、テーマの入れ替え等のもろもろ大きな変更を行うことになりました。
こういう大きな変更を行う場合、現状のHPを止めずに変更するためには、開発環境で作成して確認しながら進めるのが鉄板ですが開発環境が常にあるとはかぎりません！
個人作成や小規模の場合だと、ないことが多く、新たにサーバー契約して開発環境作るとその分コストがかかってしまいます。
無料でサクッと開発環境立ち上げれないか探していた時にStarServerFreeを見つけました。

https://www.star.ne.jp/free/

３ヵ月間無料で使用でき、さらにドメイン発行までできるので開発環境としては十分すぎると感じました。
無料で使えるのはありがたいことですがいろいろ注意点もあるので、その時の導入方法と注意点をまとめます。

# 導入方法

## 環境構築
3プランありますが最も簡単にWordPressを導入できるのは「フリー PHP+MySQL」です。
公式のインストールマニュアルがありますのでそちらを確認すれば問題なく構築できます。

https://www.star.ne.jp/free/manual/install_auto_wp_1.php

PHPも2024年7月現在では8系が使用できますし、MySQLは5系が使えます。

## 注意点
いくつかわかりにくかった、困ったことがありました。

- 容量が少ない
容量が２Gですが開発環境の少ないデータに限定すれば問題ないでしょう。大きなシステムの場合は別環境の検討が必要かもです。


- 管理ツールの場所がわかりにくい
管理ツール事態はわかりやすいのですがその場所がわかりにくかったです。
...無料プランだけやたら文字小さくないですか😂

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273072/c17df953-d917-09f6-5c36-e5fdaabafc85.png)

- SSL化ができない
これが正直一番困りましたね...。
セキュリティ上かなり望ましくないですが無料なので仕方ないですね...
ベーシック認証は付与できるので、ないよりはあった方がいいのでつけておきましょう。

# さいごに
今回は、StarServerFreeで簡単に無料でWordPressの環境を立ち上げた話でした。
無料かつ簡単に立ち上がるので、開発環境にはうってつけです。
反面、セキュリティ等は不安が残るので重要な内容載せないことや作業場所を考える必要はあります。
WordPressに興味ある方や開発環境が欲しい方は無料で試せるのでぜひ試してみてください！
SourceTreeからgit clone ができない時

SourceTreeからgit clone ができない時

## 確認
1. 
![スクリーンショット 2024-07-27 191311.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/676239/f3a7bebc-dcef-9e8d-ca18-53585a385ec5.png)

ソースパス/ソース URL として正しくありません。

2. 
![スクリーンショット 2024-07-27 191331.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/676239/5666380d-39c3-73e3-e793-56d4477fb97a.png)

コマンド: git -c diff.mnemonicprefix=false -c core.quotepath=false --no-optional-locks ls-remote https://github.com/....git
出力: 
エラー: remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/....git

エラーの意味：
パスワード認証のサポートは、2021年8月13日に削除されました。


## 方法
1. githubサイトにいく。


2. [自分のアイコン] -> [Settings]をクリック
![スクリーンショット 2024-07-27 191537.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/676239/51d46032-10b8-f1ee-d938-3a2d584bbeef.png)


3. Developer settings クリック
![スクリーンショット 2024-07-27 191624.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/676239/2271c120-1824-0a3e-e614-12a0e96ac723.png)


4. Tokens (classic) クリック
![スクリーンショット 2024-07-27 191637.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/676239/5bbabbd9-ddc8-5946-bef3-fe91f1673401.png)


5. [Generate new token] -> [Generate new token (classic)] クリック
![スクリーンショット 2024-07-27 191717.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/676239/ec36fc77-c428-e1ef-9dd8-432dc3fe1ecf.png)


6. Note, Expiration を入力
![スクリーンショット 2024-07-27 191735.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/676239/779083c7-d766-b851-299a-14ee50e8857d.png)


7. チェックボックスは、ご自分の環境に合わせて設定する。
例：
repo
workflow
admin:repo_hook
user
delete_repo


8. Generate token クリック
![スクリーンショット 2024-07-27 191747.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/676239/327f04b3-e7cc-ca5e-6373-1bb6fab30ac2.png)


9. 生成されたtokenをコピー
![スクリーンショット 2024-07-27 191833.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/676239/07a15381-3682-e2c6-29fb-d45fcb3c64db.png)


10. Sourcetreeに戻り、gitアドレス前に {token}@ を記載する。
![スクリーンショット 2024-07-27 191858.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/676239/6de3403f-2397-fbc7-41ae-077ac1764b4e.png)

例：
https://{ token }@github.com/xxxx/xxxx.git




OK
ChatGPT先生へ「MathML文中の文字の色を,赤色から黒色へ」(追加)出力コードの1行当たり文字数指定

**・79文字数の根拠は、Qiita様のエディタで決めました。**
　???公開の文字数と異なりました。オススメの文字数を教えて下さい。

# 1回目。出力コードの行の後半が見えないよ〜　
・私の入力が悪いかも。

User
```html
MathMLについて
以下の文だと赤色の文字が出ます。全部黒色にする文を教えて下さい。
<p class="s1level">問１　平行四辺形<span 
class="red">の面積</span>を求める公式を複数の考え方で，小学生が理解できるように，図などを用いてわかりやすく説明しなさい．</p>
```
次の行は、無視して下さい。
```
        1          2         3         4         5         6         7              
12345678901234567890123456789012345678901234567890123456789012345678901234567890
```

```
赤色の文字を黒色に変更するには、class="red"を削除するか、適切なスタイルを適用します。以下のように修正してみてください。
```
コード
```html
<p class="s1level">問１　平行四辺形<span>の面積</span>を求める公式を複数の考え方で，小学生が理解できるように，図などを用いてわかりやすく説明しなさい．</p>
```

# 2回目 コードの1行文字数の制限
**(追加部分)コードの1行の文字数は半角79文字以内でお願いします。**

User
```html
MathMLについて
以下の文だと赤色の文字が出ます。全部黒色にする文を教えて下さい。
コードの1行の文字数は半角79文字以内でお願いします。
<p class="s1level">問１　平行四辺形<span 
class="red">の面積</span>を求める公式を複数の考え方で，小学生が理解できるように，図などを用いてわかりやすく説明しなさい．</p>
```

コード
```html
<p class="s1level">問１　平行四辺形の面積を求める公式を複数の考え方で，小学
生が理解できるように，図などを用いてわかりやすく説明しなさい．</p>
```


# オリジナル様 入力間違いかも

・大学入試数学問題集成 様＞ 【１】 テキスト

https://mathexamtest.web.fc2.com/2020/202010848/2020108480500mj.html
SwiftUI 下タブの実装方法

SwiftUI 下タブの実装方法サンプルです。

下タブで実装しているアプリは複数あると思うので、どう実装するのか試してみました。

# サンプルコード

```HomeTabView.swift
struct HomeTabView: View {
    var body: some View {
        TabView {
            Text("ホーム画面")
            .tabItem {
                Image(systemName: "house.fill")
                Text("ホーム")
            }
            Text("設定画面")
            .tabItem {
                Image(systemName: "gearshape.fill")
                Text("設定")
            }
        }
    }
}
```

# 実行結果
![Simulator Screenshot - iPhone SE (3rd generation) - 2024-07-23 at 16.39.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274615/c931bf6b-314c-a914-79b4-23d7a9c271ef.png)
![Simulator Screenshot - iPhone SE (3rd generation) - 2024-07-23 at 16.39.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274615/e5a3bd35-bdb2-a676-3c6e-5dae63ae5cd0.png)

このように下タブ表示できました。

``NavigationStack``を使用するとどうなるのかも今後調べてみたいです。
VM上のUbuntuで仮想ディスクのサイズを増やす

20MBの割り当てで足りなくなったのでハードディスクのサイズを増やすことにした。

### ステップ1: 仮想ディスクのサイズを増やす

#### 1. VMware Workstationを開き、Ubuntu仮想マシンを選択し仮想マシンをシャットダウンする。
#### 2. 仮想マシンの「設定」開く。
#### 3. ハードディスクのサイズを変更
1. 「ハードディスク」を選択。
2. 「ユーティリティ」をクリックします。
3. 「ディスクの拡張」を選択し、新しいディスクサイズを指定。
4. 変更を適用し、仮想マシンを再起動する。

### ステップ2: Ubuntu内でパーティションを拡張する

#### 1. GPartedをインストール

GPartedを使ってパーティションを拡張するため、以下コマンドでインストールする。

```
sudo apt-get update
sudo apt-get install gparted
```

#### 2. GPartedを起動

GUIのターミナルからGPartedを起動する。

```
sudo gparted
```
起動したところ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/340841/41064d96-b612-268c-7ec8-7abfdd87d399.png)

#### 3. パーティションのリサイズ

未割り当て領域を使用するようにパーティションをリサイズする。

1. 拡張したいパーティション（ここでは`/dev/sda3`）を選択。
2. 右クリックして「リサイズ/移動」を選択。
3. 新しいサイズを指定し、「リサイズ/移動」ボタンをクリック。
4. 「適用」ボタンをクリックして変更を適用。
※ファイルシステムがリードオンリーでマウントされている場合は、以下の通りアンマウントしてから実施する。
```
$ sudo umount /dev/sda3
```
ここでの最大サイズの81405を指定する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/340841/cbd976d7-dc3f-a94e-2e0a-194c357d52f6.png)

リサイズ後
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/340841/6643dbf1-29d0-ada6-2d4a-f0f4250a01b2.png)

### ステップ3: ファイルシステムのリサイズ

#### 1. ファイルシステムのリサイズ

GPartedでパーティションを拡張した後、GPartedを閉じファイルシステムも合わせてリサイズする。
```
ext4ファイルシステムの場合
sudo resize2fs /dev/sda3
```
パーティションの再マウント
```
$ sudo mount /dev/sda3 /
```
確認
```
virtual-machine:~$ sudo mount /dev/sda3 /
mount: /: /dev/sda3 already mounted on /.
virtual-machine:~$ sudo nano /etc/fstab
virtual-machine:~$ df -k
Filesystem     1K-blocks     Used Available Use% Mounted on
tmpfs             396352     2216    394136   1% /run
/dev/sda3       81862444 16064544  62242968  21% /
tmpfs            1981752        0   1981752   0% /dev/shm
tmpfs               5120        4      5116   1% /run/lock
/dev/sda2         524252     6220    518032   2% /boot/efi
tmpfs             396348      116    396232   1% /run/user/1000
```
認定試験：Google Cloud PCA認定試験直前チェックポイント

こんにちは。codepoetです。

## はじめに
Google Cloud PCA（Professional Cloud Architect）試験に向けた、出題ポイントの備忘録です。

## 目次
1. [データとストレージ管理](#データとストレージ管理)
2. [ネットワークと接続性](#ネットワークと接続性)
3. [コンピューティングとアプリケーションのデプロイメント](#コンピューティングとアプリケーションのデプロイメント)
4. [セキュリティとアイデンティティ管理](#セキュリティとアイデンティティ管理)
5. [監視と運用](#監視と運用)
6. [まとめ](#まとめ)
7. [参考文献](#参考文献)

<a id="#データとストレージ管理"></a>
## データとストレージ管理

1. `Google BigQuery`: 大規模データの分析と処理に不可欠なGoogle BigQueryの設定と運用について確認します。データのインポート、エクスポート、スキーマ設計のベストプラクティスを押さえましょう。

2. `Cloud Storage`: データのライフサイクル管理やバケットの設定、オブジェクトの暗号化についての理解を深め、効率的なデータ保存方法を確認します。

3. `Cloud SQLとCloud Bigtable`: RDBMSとNoSQLデータベースの違いを理解し、適切なシナリオでの利用方法を確認します。

<a id="#ネットワークと接続性"></a>
## ネットワークと接続性

1. `VPCとInterconnect`: VPCの設計と設定、Dedicated Interconnectの利用方法について確認します。オンプレミスとの接続やネットワークトポロジーの最適化を意識しましょう。

2. `Cloud VPNとCloud Router`: オンプレミスとのプライベート接続の設定や、Cloud Routerを使ったルート管理のポイントを押さえます。

3. `Load Balancing`: HTTP(S) Load Balancerの設定と、トラフィックの分散方法について確認します。複数のインスタンスグループやリージョンにまたがる負荷分散の仕組みを理解しましょう。

<a id="#コンピューティングとアプリケーションのデプロイメント"></a>
## コンピューティングとアプリケーションのデプロイメント

1. `Compute EngineとKubernetes Engine`: Compute Engineのインスタンス設定、Kubernetesクラスターの作成とデプロイメント、オートスケーリングの設定について確認します。

2. `App EngineとCloud Run`: App Engineのバージョン管理や、Cloud Runによるサーバーレスコンテナのデプロイについて理解を深めます。

3. `CI/CDパイプライン`: Cloud BuildやCloud Source Repositoriesを使用したCI/CDパイプラインの設定方法について確認します。

<a id="#セキュリティとアイデンティティ管理"></a>
## セキュリティとアイデンティティ管理

1. `IAMとポリシー管理`: IAMロールとポリシーの設定、セキュリティベストプラクティスを確認します。特に、サービスアカウントや権限の最小化について意識しましょう。

2. `セキュリティ対策`: データの暗号化、ネットワークのセキュリティ、DLP（Data Loss Prevention）を使った個人情報の保護方法について確認します。

3. `Identity-Aware Proxy (IAP)`: IAPの設定と利用方法について理解し、アプリケーションのセキュリティを強化するためのポイントを押さえます。

<a id="#監視と運用"></a>
## 監視と運用

1. `Cloud MonitoringとLogging`: Cloud Monitoringダッシュボードの設定、ログの収集と分析方法について確認します。エラーログやメトリクスを使用してシステムの健全性を維持する方法を学びます。

2. `トラブルシューティング`: Stackdriver TraceやStackdriver Loggingを使用したトラブルシューティングの方法を理解し、問題解決のスキルを高めましょう。

3. `バックアップとリカバリー`: バイナリロギング、自動バックアップ、データの復旧方法について確認し、データ損失に備えた対策を講じます。

<a id="#参考文献"></a>
## まとめ
試験に向けた直前の確認でプラス５問を狙っていきましょう。

<a id="#参考文献"></a>
## 参考文献

- [Google Cloud Documentation](https://cloud.google.com/docs)
- [Google Cloud Certified Professional Cloud Architect Exam Guide](https://cloud.google.com/certification/guides/cloud-architect)
- [Google Cloud Training and Certification](https://cloud.google.com/training)
【Swift】雰囲気で使ってたsomeとanyの理解を深める

## まず最初に
最初に懺悔します。
someとanyを雰囲気で使ってました :pray: 

本記事は、筆者がもう少し理解を深めるためのアウトプットです。

## （一言で）Swiftにsomeとanyキーワードが導入された背景
安全に型を扱いながらパフォーマンスを向上させるため。

本記事では使い所やメリットなどに絞って書いていきます。
細かい挙動や仕様などは参考のリンク先を見ていただければと思います。

## some
### 使い所
someキーワードは、戻り値などの複雑な型を外部に公開したくない時に使う。

### メリット、デメリット
- メリット
    - コンパイラ時に型が一意になる
        - 型安全: 戻り値の具体的な型が外部から見えないため、関数の詳細を隠蔽できる
        - パフォーマンス: コンパイラが具体的な型情報を持っているため、最適化が可能
- デメリット
    - 汎用性の制限: someを使うと、返される型が常に同じである必要があり、異なる型を返すことができない → こういうことをした場合はanyを使用する

### コードで見てみる
#### 外部からの型の隠蔽
SwiftUIでのお決まり、計算型プロパティのbodyの型表記 `some View`

何かしらのViewに準拠したオブジェクトを返却するプロパティ。
下記コードはコンパイル時に、Textオブジェクトが返されることがわかる。
```swift
struct SampleView: View {
    var body: some View {
        Text("hoge")
    }
}
```

ゆえに、こうも書ける。
けど、Viewの定義時には具体的な型は内部の実装に依存したいため、上記のように書いている。
```swift
struct SampleView: View {
    var body: Text {
        Text("hoge")
    }
}
```

#### ジェネリクスの書き換え

ジェネリクスの関数をsomeの記載に書き換える。
```swift
protocol Animal {}
struct Dog: Animal {}
struct Cat: Animal {}

func walk<T: Animal>(with animal: T)  {
    print(type(of: animal), "と散歩中")
}
```
こう書き換えられる。
```swift
func walk(with animal: some Animal)  {
    print(type(of: animal), "と散歩中")
}
```

多少シンプルにすることができる。
ちなみにsomeの部分をanyに書き換えられるが、メモリのオーバーヘッドやパフォーマンスの問題もあるため、someで書くのが理想的。

## any
### 使い所
特定のプロトコルに準拠する任意の型を受け入れる場合に使用する。

### メリット、デメリット
- メリット
    - コードの簡潔化: 多様な型を受け入れるため、コードが簡潔になる
- デメリット
    - ランタイムのオーバーヘッド: any（存在型）は実行時に型情報を保持する必要があるため、パフォーマンスのオーバーヘッドが発生することがある


### コードで見てみる
#### 戻り値の型が実行時に決まる
```swift
func randomAnimal() -> any Animal {
    Bool.random() ? Dog() : Cat()
}
```

こういったコードの場合はsomeを使用することができない。

## 参考
https://zenn.dev/fsh/articles/0fffd249fd54ca
https://jimaru.blog/programming/swift/swift-some-any/

認識誤りとかあれば、コメントでお願いします！
【JavaSilver】基本ルール

# 基本ルール

* 「%」は余りを求める。		
* 「/」は割り算。		
* 整数を0で除算すると、実行時エラーが起きる。		
* 「整数」と「整数」の演算結果は「整数」		
* 「整数」と「浮動小数点数」の演算結果は「浮動小数点数」		
		
* 大きな数値型と小さな数値型の演算では、小さな型が大きな型に変換される。
```java:実装例	
short s1 = 10;
Integer s2 = 20;
// ※s2はlong型なるため、long型同士の加算として扱われる。
Long s3 = (long) s1 + s2;
```

* switch文では、long、float、doubleは使えない。		
* switch文のdefaultはどこに記述してもよい。		
* switch文の式にnullを指定すると、NullPointerException例外が発生する。

* 変数を初期化していないため。初期化すれば実行できる。
```java:例題
public class Sample {			
    static String str;		
    public static void main(String[] args) {		
        switch(str) {	
        case "10" : str += "10";
		default : str += "def";
    	case "20" : str += "20";
		}	
		System.out.println(str);		
    }		
}
```

```:実行結果
NullPointerExceptionがスローされる
```

* switch文のdefaultはどこに記述してもよい
```java:例題
public class Sample {	
    public static void main(String[] args) {
        int data = 1;
        switch(data) {
		default : System.out.println("C");
        case 0 : System.out.println("A");
                  break;
    	case 10 : System.out.println("B");
                  break;
		}	
    }		
}
```
```:実行結果
CA
```

* java.langパッケージに属しているクラスのメソッドを使用するときは、import文は不要。(例)Mathクラス	
* System.out.println()とSystem.out.print()の違い		
System.out.println は、最後に改行付与する。	
* ダブルクォーテーションを文字として使いたい場合は「\”」			
		
* 有効なエスケープ文字 : \b、\t、\n、\f、\r、\”、\’、\\ →\\sは「\s」が
出力
```:実行コマンド
java Sample a \” a\” ”a ”b c	
```
```:出力文字
① a
② ”
③ a”
④ a b
⑤ c
```


* スペースを含む文字列を使いたい場合はダブルクォーテーションを使う。
```:実行コマンド
java A "A B" A B 
```
```java:例題
public class A {
    public static void main(String[] args) {
        for(String str : args) {
            System.out.println(str);
        }
    }	
}
```

```:実行結果
A BAB
```
		
* 識別子(変数、メソッド、クラスなどの名前のこと)のルール		
* 使うことができる記号は＄と_のみ。		
* 数字で始めることができない(2文字目からは使える)。		
* 予約語を識別子として使うことができない。		
* final修飾子の変数は初期化が必要。		
* final修飾子を付けたフィールド変数には値を1度しか代入できない。
* ソースファイル(.javaファイル)をコンパイルすることで生成される。
クラスファイル(.class)は、中間ファイルと呼ばれ、OSに依存しないバイトコード。	
* main()メソッドはオーバーロードできる。		
* パッケージ宣言を行っていないクラスは、名前のあるパッケージのクラスから参照できない。	
		
### 変数の初期化
```java:
// データ型名　変数名1, 変数名2, 変数名3 …	
int i1, i2, i3 = 10;
 
// データ型名　変数名1 = 値, 変数名2 = 値,  変数名3 = 値, …	
int i1 = 10, i2 = 20, i3 = 30;
```

### カプセル化のメリット		
* 呼び出し元を変更せずにメソッド内の実装を変更できる。	
* オブジェクトのデータを隠蔽できる。	
		
### immutable(不変)オブジェクト		
* すべてのフィールドをfinalかつprivateにする。	
* サブクラスによるメソッドのオーバーライドを許可しない。	
* どのメソッドでも、フィールドの値を変更しない	
		
### 数値のアンダースコア「_」のルール
```java
// ①リテラルの先頭と末尾には記述できない。	
int a = _123;
 
// ②記号の前後には記述できない。	
int a = 0x_11;
 
// ③連続させてOK	
int a = 5__23; // → 出力結果：523
int a = 5_23; // → 出力結果：523
```

### 可変長引数		
* 可変長引数以外の引数を受け取る必要がある場合は、可変長引数を最後にすること。	
* 可変長引数の値を使うときは配列と同じように大カッコ「[ ]」を使う。	
System.out.println(num[i])
UnityのNo 'git' executable was found.エラーの解決方法メモ

# この記事について
`UnityPackageManager`(以降は`UPM`と書きます)関連で遭遇したエラーの解決方法のメモです。
誤字脱字や間違っている部分があれば、コメントにて教えて頂けると幸いです！

# 遭遇したエラー
・`No 'git' executable was found.`
自分が遭遇したタイミングは2つあります。
1つ目は`UPM`の`Add package from git URL`で追加しようとするときに遭遇しました。
![図1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3588406/41e801d1-79ed-ba51-1ef4-1beb95bd3e2a.png)

2つ目は`manifest.json`にダウンロード用のリンクを書き込んだ時に遭遇しました。
![図1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3588406/6e24df44-0e2f-f886-4af9-1cc75bddfc7f.png)


# 解決方法
解決するまでの手順としてとても分かりやすい記事があったので、調べた時のリンクを載せておきます。

https://baba-s.hatenablog.com/entry/2020/02/26/163000

https://raspberly.hateblo.jp/entry/UnityPackageManager_NoGit

https://www.hanachiru-blog.com/entry/2021/05/24/120000

# その他
`UPM`の`Add package from git URL`に関してですが、少し落とし穴があってダウンロードしたいリポジトリ内に、`package.json`がないとそもそもダウンロードできないので注意が必要です。

自分はそれで、環境変数の設定とか色々設定したのにダウンロードできない...何故...???
見たいな感じで半日時間が飛びました。

また、GitHubの`Code` → `HTTPS`のリンクからダウンロードできないパターンもあります。
自分は[UniTask](https://github.com/Cysharp/UniTask)で行ってみましたが`HTTPS`のリンクではできませんでした。UniTaskのドキュメントの上の方に`UPM`でダウンロードする場合のリンクを載せている部分があります。
> ![図2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3588406/518a612e-6753-d62d-a467-a04e56923acd.png)
![図3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3588406/7d6a352f-3190-96e8-9773-db2642361335.png)


リンクを抜粋するとこの部分です。このリンクを利用すると`UPM`ダウンロードできます。
`HTTPS`とのリンクの違いを確認するために両方載せときます。
```
// HTTPSのリンク(これだとUPMからダウンロード出来ない)
https://github.com/Cysharp/UniTask.git

// 正しいダウンロードリンク(これならUPMからダウンロード出来る)
https://github.com/Cysharp/UniTask.git?path=src/UniTask/Assets/Plugins/UniTask
```

リンクの違いについてですが、はなちるさんの下記事に書いてあります。
今回は内容を抜粋させていただきます!

https://www.hanachiru-blog.com/entry/2023/10/23/120000

`Packcage.json`がルートにない場合はファイルのPathを指定したリンクじゃないとダメ見たいです。
>![図4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3588406/c9bb0a6e-3187-ed9d-9740-06041410b42c.png)

# 所感
その他の内容を書き過ぎましたが、色々書き出せて良かった気がします。
Cypress で画像ファイルをエンコードせずに読み込みたい

Cypress で画像ファイルをエンコードせずに読み込もうとした際に苦労したので、その方法を紹介します。

## 困ったこと

Cypress を使って、Amazon S3 に画像ファイルをアップロードする処理をテストするコードを以下のように実装しました。

```typescript:./cypress/integration/upload-file-spec.ts
describe('シナリオテスト', () => {
  it('画像ファイルアップロード', () => {
    // (1)
    cy.fixture('image.png', 'binary').then((image) => {
      cy.request({
        method: 'PUT',
        url: 'アップロード先のURL',
        body: image,
      }).then((response) => {
        expect(response.status).to.eq(200);
      });
    });
  });
});
```

| 項番 | 説明                                                         |
| ---- | ------------------------------------------------------------ |
| (1)  | エンコード形式を `binary` にして画像ファイルを読み込みます。 |

上記のコードを実行するとアップロード自体はできます。  
しかし、S3 にアップロードされた画像ファイルを開こうとすると、ファイルが壊れていて開けません。  
ファイルをメモ帳などで開いてみると、元ファイルから微妙に中身が変わっていました。

## 解決法

画像ファイルを読み込む際のエンコード形式に `null` を指定して buffer 形式で読み込みます。
その後 `new Blob()` でバイナリ形式に戻すことで正常に画像ファイルをアップロードできます。

```typescript:./cypress/integration/upload-file-spec.ts
describe('シナリオテスト', () => {
  it('画像ファイルアップロード', () => {
    // (1)
    cy.fixture('image.png', null).then((image) => {
      cy.request({
        method: 'PUT',
        url: 'アップロード先のURL',
        // (2)
        body: new Blob(image),
      }).then((response) => {
        expect(response.status).to.eq(200);
      });
    });
  });
});
```

| 項番 | 説明                                                                     |
| ---- | ------------------------------------------------------------------------ |
| (1)  | エンコード形式を `null` にして buffer 形式で画像ファイルを読み込みます。 |
| (2)  | buffer 形式からバイナリ形式にして画像ファイルをアップロードします。      |

## 余談

binary で読み込めばいいだろうと思っていたので、解決に時間がかかりました。
使っているツールの知識だけじゃなく、エンコードやバイナリファイルの仕様などツールによらない知識も必要であることを痛感しました。
ChatGptプロンプト例：VBA メソッドの機能説明資料編

《HTML Tableタグ内への機能説明》

```
以下のVBAソースの説明を次のhtmlタグの中に記入して下さい。
<table>
<tr><td>メソッド名</td><td></td></tr>
<tr><td>概要</td><td></td></tr>
<tr><td>引数</td><td></td></tr>
<tr><td>戻り値</td><td></td></tr>
<tr><td>詳細説明</td><td></td></tr>
</talbe>

Private Function GetGUID() As String
    Dim objGUID As Object
    Set objGUID = CreateObject("Scriptlet.TypeLib")
    GetGUID = objGUID.GUID
End Function
```
《ChatGpt回答はこの通り》
```
<table>
<tr><td>メソッド名</td><td>GetGUID</td></tr>
<tr><td>概要</td><td>新しいGUIDを生成して返す関数</td></tr>
<tr><td>引数</td><td>なし</td></tr>
<tr><td>戻り値</td><td>String型のGUID</td></tr>
<tr><td>詳細説明</td><td>
この関数は新しいGUID（グローバル一意識別子）を生成して返します。GUIDは、各オブジェクトを一意に識別するために使用される128ビットの値です。関数内で「Scriptlet.TypeLib」オブジェクトを作成し、そのGUIDプロパティを取得して返します。
</td></tr>
</table>

Private Function GetGUID() As String
    Dim objGUID As Object
    Set objGUID = CreateObject("Scriptlet.TypeLib")
    GetGUID = objGUID.GUID
End Function
```

《json文字列内への機能説明》
```
以下のVBAソースの説明を次のjson文字列の中に記入して下さい。
[
{
メソッド名:"",
概要:"",
引数:"",
戻り値:"",
詳細説明:""
}
]

Private Function GetGUID() As String
    Dim objGUID As Object
    Set objGUID = CreateObject("Scriptlet.TypeLib")
    GetGUID = objGUID.GUID
End Function

```

《ChatGpt回答はこの通り》
```
[
    {
        "メソッド名": "GetGUID",
        "概要": "新しいGUIDを生成して返す関数",
        "引数": "なし",
        "戻り値": "String型のGUID",
        "詳細説明": "この関数は新しいGUID（グローバル一意識別子）を生成して返します。GUIDは、各オブジェクトを一意に識別するために使用される128ビットの値です。関数内で「Scriptlet.TypeLib」オブジェクトを作成し、そのGUIDプロパティを取得して返します。"
    }
]

```

《csv文字列内への機能説明》
```
以下のVBAソースの説明を次のcsv文字列の中に記入して

CSVフォーマット
メソッド名,概要,引数,戻り値,詳細説明
"","","","",""



Private Function GetGUID() As String
    Dim objGUID As Object
    Set objGUID = CreateObject("Scriptlet.TypeLib")
    GetGUID = objGUID.GUID
End Function

'工程線を検索取得
Private Function GetLineShape(pTop As Double, pHeight As Double) As Shape
    Dim shp As Shape
    Set shp = Nothing
    For Each obj In ActiveSheet.Shapes
        'Debug.Print obj.Name
        If Left(obj.Name, 7) = "Koutei_" And _
           pTop < obj.Top And _
           obj.Top < pTop + pHeight Then
             Set shp = obj
        End If
    Next
    Set GetLineShape = shp
End Function
```
《ChatGpt回答はこの通り》
```
メソッド名,概要,引数,戻り値,詳細説明
"GetGUID","新しいGUIDを生成して返す関数","なし","String型のGUID","この関数は新しいGUID（グローバル一意識別子）を生成して返します。GUIDは、各オブジェクトを一意に識別するために使用される128ビットの値です。関数内で「Scriptlet.TypeLib」オブジェクトを作成し、そのGUIDプロパティを取得して返します。"
"GetLineShape","指定された範囲内にある工程線を検索して取得する関数","pTop（Double型）：範囲の上端の位置, pHeight（Double型）：範囲の高さ","Shape型のオブジェクト（工程線）","この関数は、指定された範囲内にある名前が「Koutei_」で始まるShapeオブジェクトを検索して取得します。引数として範囲の上端位置（pTop）と範囲の高さ（pHeight）を受け取り、その範囲内にある工程線を返します。見つからなかった場合はNothingを返します。"

```
効率的なマウス操作術「crxMouse」あなたのブラウジングを劇的に変える！

## まえがき

みなさん、マウス操作で効率的にブラウジングができるcrxMouseを使ったことはありますでしょうか？

crxMouseを使いこなすことで、ブラウジングのスピードが向上し、一日の作業効率が飛躍的に向上すること間違いなしです！

まだcrxMouseを知らない方は、この機会にぜひ試してみてください。すでに使っている方も、この記事を読んで、使い方の再確認をしてみてください。

## もくじ
1.crxMouse とは
2.crxMouse のメリット
3.向いている人・向いていない人
4.導入方法
5.代表的な操作一覧
6.注意点
7.あとがき
8.おまけ


## 1.  crxMouse とは

- crxMouse とはマウスジェスチャーのひとつ、 Google Chromeの拡張機能であるcrxMouse Chrome Gestures のことです。
- 例えば、右クリックしながらマウスを上下左右に動かすことで、新しいタブを開いたり、戻る・進むなどのナビゲーション操作を行ったり、右タブや左タブの行き来を素早く行ったりすることができます。
- この拡張機能は、Chromeウェブストアから無料でインストールでき、個別にジェスチャーのカスタマイズも可能です。ただし、Chromeを使っていない人はインストールできないのでご注意ください。

## 2. crxMouse のメリット

- 効率的なブラウジング: スピーディーなマウスジェスチャーで、ブラウジングの効率が大幅に向上します。
- カスタマイズ可能: 個々のニーズに合わせてジェスチャーをカスタマイズでき、自分だけの最適な操作方法が実現できます。
- 直感的な操作: キーボードショートカットやメニュー操作の煩わしさを感じず、自然なマウス操作でブラウジングが可能です。
- 学習コストの低減: 標準的なジェスチャーがあらかじめ設定されているため、新しいユーザーでもすぐに使い始めることができます。

## 3. 向いている人・向いていない人

- 向いている人
    - マウス操作の効率化を求める人: crxMouseを使うことで、ブラウジング操作がスムーズになり、時間を節約できます。
    - マウス操作が好きな人: キーボードショートカットよりもマウス操作を好む人にとって、crxMouseは適切な選択肢です。
    - カスタマイズが好きな人: crxMouseでは、ユーザーが個別にジェスチャーをカスタマイズできるため、自分の好みや使いやすさに応じた設定が可能です。
- 向いていない人
    - タッチスクリーンデバイスを主に利用する人: タブレットやスマートフォンなどのタッチスクリーンデバイスを主に使用している場合、crxMouseのマウスジェスチャーはあまり役に立たないかもしれません。
    - 既にマウスでカスタマイズしている人: ゲーミングマウスなどのボタンが多く付いているマウスをカスタマイズしている人はマウスのボタンを押すほうが動きが速いのであまり役に立たないかもしれません。
    - プライバシーに特に懸念がある人: crxMouseを使用する際は、拡張機能のパーミッションやデータアクセスに関する情報を確認し、自分のプライバシー要件と照らし合わせる必要があります。これに懸念がある場合、他の方法を検討することが適切です。

## 4. 導入方法

下記URLからChromeを追加することで crxMouse Crome Gestures を使用が可能になります。

https://chrome.google.com/webstore/detail/crxmouse-chrome-gestures/jlgkpaicikihijadgifklkbpdajbkhjo?hl=ja 

## 5. 代表的な操作一覧

- crxMouse の基本的な操作は右クリックを押しながら好きな形に動かすことでカスタマイズした通りの動作が実行されます。
- crxMouse のカスタマイズ画面を出すには右クリックを押した状態で「右→下→左→上」の順番で動作するとカスタマイズ画面に移行し「設定→マウスジェスチャー→ジェスチャーを編集する」からカスタマイズすることが可能です。
- 以下は最初から備わっている基本的な crxMouse の一覧です。
    - 右：転送する
    - 左：戻る
    - 上：上方向へスクロール
    - 下：下方向へスクロール
    - 右→上：一番上へスクロール
    - 右→下：一番下へスクロール
    - 上→右：右タブ
    - 上→左：左タブ
    - 上→下：再読み込み
    - 下→右：タブを閉じる
    - 左→上：閉じたタブを再び開く
    - 右→下→左→上：crxMouse の設定
- 次は個人的に使ってみて非常に使えると思ったカスタマイズです。（「設定→マウスジェスチャー→新規→newgesture」から自分独自のカスタマイズが可能）
    - 下→右→上：新規タブ
        - いちいち＋をクリックせずに新規タブを開いて新たに検索をかけるまでの速度が上がります。
    - 上→右→下：右側タブを全て閉じる
        - 開きすぎたタブを一気に右側のタブを消してくれる。閉じたくないタブを消さないように要注意！
    - 下→左→上：最初のタブ
        - よく使うタブ（ChatGPTやDeepLなど）を一番左のタブに置いておけばすぐ開くことができる。
    

## 6. 注意点

- マウスジェスチャーを使用する際には、誤動作を防ぐために、正確な動作を覚える必要があります。
- 一部のウェブサイトやwebアプリケーションでは、マウスジェスチャーが動作しない場合があります。この場合、キーボードショートカットを使用する必要があります。
- crxMouseを使用する場合は、拡張機能のアップデートを定期的に行うことをおすすめします。

## 7. あとがき

crxMouseを使えば、直感的なマウスジェスチャーでブラウジングが劇的にスムーズになり、独自のカスタマイズであなたのウェブ体験を最高のものにできます。

マウスジェスチャーを使いこなすためには、慣れと練習が必要です。最初は操作が難しく感じるかもしれませんが、慣れてくるとキーボードを使うよりも効率的に作業ができるようになります。ぜひ、日常の作業に取り入れてみてください！

## 8. おまけ
唐突ですが弊社のご紹介もさせてください。

▼ コーポレートサイト
https://prum.jp/

▼ Wantedly求人
https://www.wantedly.com/projects/626662

弊社メンバーは学習した内容を日々Qiitaの記事にアウトプットしております。
弊社にご興味のある方、まずは求人を見てみてください！
ご応募お待ちしておりますー！
Elixirでキーボード信号を送信する

# 前提環境
OS Ubuntu 22.04
xdotoolがインストールできる環境

# xdotoolをインストール

```sh
$ sudo apt install xdotool
```
キーボード信号を送信するコマンドとして使います

# ソース
10回「a」を1秒間隔で送信します

```elixir
efmodule Keyout do
  @moduledoc """
  Documentation for `Keyout`.
  """

  def key() do
    1..10
    |> Enum.each(fn _ -> send_key() end)
  end

  def send_key() do
    System.cmd("xdotool", ["type", "a"])
    Process.sleep(1000)
  end
end
```

key関数
- 10回send_key関数を実行

send_key関数
 - xdotoolコマンドで「a」を送信
 - 1秒待つ