OmniAICreator/Qiita-1.07M huggingface dataset:
WindowsServerのFTPに接続できたのに ls 出来なくて困った時のやつ

## FTPサーバできた！ログインできた！でもls打てない！
絶対忘れるので備忘として・・・
原因はファイアウォールの許可設定でした。。。（結論に手順あります）

### 環境
AWS
パブリック環境　：WindowsServer2022（以降Windows2022
プライベート環境：WindowsServer2019（以降Windows2019

ローカル
Windows11

### 目的
Windows2022とWindows2019の相互FTP通信

### やったこと
AWSの設定は問題なかったので割愛（セキュリティグループ見たくらいだけど）
最初に以下参考にFTPサイト構築
https://blog.denet.co.jp/i-added-ftp-server-function-to-windows-server-2019/

Windows2019に構築して紆余曲折あったがWindows2022からログインまで成功
しかしlsを実行すると動かず・・・
```
ftp> ls
200 PORT command successful.
150 Opening ASCII mode data connection.
アクティブなすべてのデータ接続を中止しています... ←Ctrl＋Ｃで中断
Connection closed by remote host.
ftp> quit
```

次に同じようにWindows2022でFTPサイト構築してローカルのwindows11からログイン成功
その後lsを打つと、なんかポップアップ出た

せきゅりｔｈ、、ファイアウォ、、あーそゆことか！許可！
lsできたーー！・・・・って
あれ・・・・
どんな画面だったかちゃんと見てなかった・・・
なにしたのかを分からず押してしまった・・・
詰んだ・・・せめてキャプチャとればよかった・・・

**ハイ、やらかしました。**

いろいろ検索してたら以下記事に同じポップアップを発見！助かった！
https://qiita.com/Topiman/items/c397b671d34225170e64
これでした！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/598996/e9e88481-e35b-1f68-b998-daba90f264cd.png)

てことは同じ事すればいいのね！って思ったけどwindowsserverではそんなポップアップなかったから手動でできんだろってことで調べて以下に着地
https://clairvoyance.hatenablog.com/entry/2016/11/15/Windows_10_-_FTP%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9%E3%82%92%E5%88%A9%E7%94%A8%E3%81%99%E3%82%8B

>ファイアウォールの設定
　ローカルから接続する場合にもファイアウォールの設定を変更しなければならない可能性がある。
コントロール パネルのシステムとセキュリティにあるWindows ファイアウォールを押す。
Windows ファイアウォールを介したアプリまたは機能を許可を押す。
一覧の右上にある設定の変更を押し、一覧からFTP サーバーを探してプライベートにチェックを入れてOKを押す。
念の為にPCを再起動する。

ほんと情報に感謝

### 結論
以下手順でftp.exeをファイアウォールの通信を許可する！
コントロールパネル
→システムとセキュリティ
→Windowsファイアウォール
→Windowsファイアウォールを介したアプリまたは機能を許可
→別のアプリの許可
→C:\Windows\System32\ftp.exeを選択して追加
→パブリックにチェックを入れてOK

なんでこれやらないと出来ないのかは結局よくわからず
WindowsServerはややこしいなぁって感想になりました。
おわり。

ツッコミ、コメント、指摘はいつでもお待ちしてます！
アプリケーションにほぼリアルタイムの無料多言語翻訳を統合し、Chrome AI APIに基づいています

Chromeは最新バージョンのChrome Dev（バージョン127.0.6512.0以上）にAI機能が統合されており、実験的フラグの形で提供されています。

最新のChrome Devをダウンロード：https://www.google.com/intl/en_us/chrome/dev/

## Chrome Devの設定

1、Chrome Devのバージョンが127.0.6512.0より高いことを確認します。

2、URLに`chrome://flags/#optimization-guide-on-device-model`を入力し、`Enabled BypassPerfRequirement`を選択します。これにより、モデルのダウンロードがスムーズに行えます。

3、URLに`chrome://flags/#prompt-api-for-gemini-nano`を入力し、`Enabled`を選択します。

4、モデルのダウンロードが完了するのを待ちます。ダウンロードが完了したかどうかは `chrome://components/` で確認できます。主動的にダウンロードしない場合は、`Check for update` をクリックして強制的にダウンロードできます。約1GBの内容をダウンロードする必要があります。Version: 2024.65.2205 を見ると、すでに使用できることがわかります。 Chrome Devを再起動します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3813484/b9eeb6b0-5fc4-f77c-49d5-94774a71d6e7.png)

## API 能力テスト

`cmd + option + I` を押してコマンドラインを開き、`await window.ai.canCreateTextSession();` を入力します。readily が表示されたら、使用可能です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3813484/e360c06e-7860-8c11-4839-94f14bac8911.png)

### 呼び出しケース1：テキストのトーンの書き換え

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3813484/e323f054-dd70-590b-a3a4-1b1b78e93e90.png)

私たちは見ることができます、たった二行のコードだけで多くの人々が抱えるテキスト表現の問題を解決でき、非常に高速で非常に優れたプライバシー性を持って完成します。

### 呼び出しケース2：テキスト翻訳



極めて迅速かつ無料の方法でテキストの翻訳を完了し、任意のアプリケーションの多言語表示をより便利にします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3813484/3caf312a-3d3b-696b-e118-a13dd96e2725.png)

## アプリ内統合

私たちのアプリ https://timmerse.com は、仕事や娱楽に適したカスタマイズ可能な3D没入型の世界です。人と人との間の没入型の接続を実現するためのスペースを作成します。ビデオ通話とカスタマイズされた3D世界を組み合わせ、AI NPCを統合して、仕事や生活の中の集まりをより創造的で楽しいものにします。

OpenDayのシーンでビデオを再生するとき、ユーザーのChromeの言語設定に基づいて、オリジナルの英語字幕をリアルタイムで翻訳し、二言語字幕として表示することが容易にできます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3813484/61bc20c7-1331-6730-56da-a9adb254af74.png)



もちろん、llmモデルは翻訳にだけ使えるわけではありません。各種エンドモデルとマルチモーダルが広く普及するにつれて、人々とデバイスの相互作用の方法を各方面で変え、生活と仕事の効率を向上させることが確実になります。
実務で使用頻度高めのGit コマンド集【初学者向け】

## はじめに
こんにちは、株式会社TechoesのK（入社1年目、エンジニア歴3年目）です

今回はエンジニアとは切っても切れないGitコマンドについて、実務で使用頻度の高いものをご紹介したいと思います

## 前提条件
前提として、本記事ではGit Flowを採用する前提で記述しています

- Git Flowについて
Git Flowは、Gitを使ったバージョン管理のためのブランチ戦略の一つで、以下のような形式が多い
<br>

- **メインブランチ**: 主に以下の３つのブランチを使用する
  - `master`ブランチ: 本番リリースを管理するためのブランチ。このブランチは常に安定している状態を保つ
  - `develop`ブランチ: 次のリリースのための開発作業が行われるブランチ。最新の開発バージョンが含まれる
  - `staging`ブランチ: 本番リリース前の最終確認を行うためのブランチ。本番環境と同様の環境で最終テストを行い、問題がなければ`master`ブランチにマージする
<br>

- **サポートブランチ**: 開発のため、一時的に作成されるブランチ
  - `feature`ブランチ: 新機能の開発のためのブランチ。`develop`ブランチから作成し、開発が完了したら`develop`ブランチにマージする
  - `hotfix`ブランチ: 本番環境で発見された重大なバグを修正するためのブランチ。`master`ブランチから作成し、修正が完了したら`master`と`develop`ブランチにマージする


## 確認編
まずは確認から
<br>

- 現在のブランチ内の作業の状態
```
git status
```
<br>

- 過去のコミット履歴の確認
```
git log
```
` --oneline`オプションをつけると1行で表示できて便利
<br>

- 作業ツリーとインデックスの違いを表示
```
git diff
```
このコマンドに関しては出来ることが多いので[こちらのページ](https://qiita.com/shibukk/items/8c9362a5bd399b9c56be)が参考になる
<br>


- 特定のコミットの詳細を表示
```
git show <commit>
```
<br>

- いつ修正されたかの確認
```
git blame -L {確認したい1行目の行数},{確認したい最後の行の行数} {path}
```
パスで指定したファイル内の指定した範囲のコードがいつ誰によって修正されたのかを確認できる
<br>

- 余談
VSCodeなら以下のページでお勧めされている「Git graph」というプラグインを使うと、コミットツリーなどがGUIで一目瞭然に確認できるためおすすめ
[Git graphのわかりやすい使い方](https://zenn.dev/nenenemo/articles/41e92a92693b01)

![スクリーンショット 2024-06-11 11.53.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3714682/aea4c731-befd-d7c4-b5ed-81d43617e6f0.png)



## やり直し編
「あっ、コミットミスった...」という時によく使うコマンドたち
<br>

- 1コミット戻す
 ど定番、直前のコミットを行なっていない状態に戻す
```
git reset --soft HEAD^
```
<br>

- コミットコメントの修正
 地味に多いコミットのコメントミス、これで最新のコミットのコメントを修正できる
```
git commit --amend -m "差し替えたいコメントを入力"
```
<br>

このコマンド達は`git push`前なら使用可能だが、`git push`後は`git rebase`などで修正するしかないので注意が必要

## 一時保存編
作業をコミットせずに一時保存したいとき
<br>

- 作業内容の保存
```
git stash
```
現在の作業内容を退避して保存（新規作成ファイルも保存したい場合は`git stash -u`）
<br>

- 保存した作業内容(以下スタッシュと表記)の適用
```
git stash apply
```
スタッシュが適用される（保存したブランチ以外だとコンフリクトが起きる可能性が高いので元のブランチで実行推奨）
<br>

- スタッシュの全削除
```
git stash clear
```
全てのスタッシュが消えるため、必要なものまで消さないか注意が必要
<br>

- スタッシュの指定削除
```
git stash drop stash@{対応する番号を指定}
```
削除したいスタッシュの`stash@{~}`の〜内の数字を指定して削除することができる
<br>

## ブランチ編
ブランチ周りのあれこれ
<br>

- 現在のブランチの確認
```
git branch
```
`-a`オプションをつけるとリモートブランチも確認できる
<br>

- ブランチの新規作成
```
git checkout -b {ブランチ名}
```
現在のブランチから新しくブランチを作成する
<br>

- ブランチの削除
```
git branch -d
git push origin --delete
```
マージ以外でブランチを削除するときなど
<br>

- ローカルとリモートのブランチの強制一致
```
git reset --hard origin/
```
ローカルのブランチの現在位置がおかしくなった時などに、強制的にリモートの最新コミット位置にする

## おまけ

- 空のコミット
```
git commit --allow-empty -m "空コミット"
```
コードに修正を加えずに、CI/CDなどで自動テストを再実行したい時などに空のコミットができる
<br>

## おわりに
以上、独断と偏見に基づいたGitのよく使うコマンド集と使い方について紹介しました。
初学者の方向けに実務の使用頻度高めのコマンドを紹介できたと思います。（ベテランの方には退屈だったかも？）
<br>

最後までお読みいただき、ありがとうございました。この記事が皆さんの開発作業の一助となれば幸いです。
【Drupal/個人開発】元号対応モジュールをコミュニティに公開しました

:::note warn
前回、前々回の記事をご覧の方は話が早いと思います。
（続編です。元号シリーズ最終回です。）
:::
https://qiita.com/umekikazuya/items/31eabf4f3749eb7a3d16

https://qiita.com/umekikazuya/items/82f7383c652c6f0c0dd5

ぜひそちらをご覧ください。
ざっとでもいいので見ていただけると幸いです。

## はじめに
この度、コミュニティにModuleを公開してみました🎉🎉

https://www.drupal.org/project/japanese_era_formatter

前回のチュートリアル記事よりも機能をパワーアップしましたので、今回は使い方紹介記事を書いてみました。

## どんな機能なの？
日付データの元号対応を行います。
「シンプルな元号表示」「元号が始まって何年経ったか」など、日本独自のフォーマットをサポートするモジュールです。

イメージですが、以下全部対応してます。

- 「2000年11月15日」
- 「2000年(平成.12)」
- 「平成12年 11/15」

## 導入はどうするの？
特別な依存ライブラリ等はありません。
慣れてる方はいつも通りインストールしてください。
### 1. ソースコードをプロジェクトにインストール
```shell
composer require 'drupal/japanese_era_formatter:^1.0'
```
### 2. アプリ内で有効化
```shell
drush en japanese_era_formatter
```

## 設定画面
日付フィールドを定義する必要があります。

### 1. 日付フィールドを定義
Nodeでも、Termでも、Userでも、なんでもいいです。
とりあえず「Dateフィールド」の定義をしてください。
### 2. 表示管理画面でフォーマットを選択
ビューモード画面を確認すると「Japanese Era Date Format」という選択肢が増えていると思います。
選択してください。

![スクリーンショット 2024-06-11 15.07.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3334980/390f8e42-c7f9-1420-2b40-83b3ceb7286f.png)

### 3. 「日付の形式設定」と「表示全体の形式設定」を行う
若干紛らわしいかもですが、フォーマット入力欄を２つ用意しています。

1. 日付の形式設定
2. 表示全体の形式設定（「フォーマットされた日付」と「元号」の形式設定）

例えば、「2000年生まれ(平成12年)」のように表示させたいのであれば...。

![スクリーンショット 2024-06-11 15.33.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3334980/f2a4a134-6cc9-30d6-4f63-4d2bbf77d825.png)


| 日時フォーマット | フォーマット |
| - | - |
| `Y` | `@datetime年生まれ(@era@since_year年)` |

と設定します。

[MaxLengthモジュール](https://www.drupal.org/project/maxlength)を使ったことある方はわかりやすいと思います。
あれを参考にしました。

## 表示確認
表示確認をしてみましょう。
![スクリーンショット 2024-06-11 15.34.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3334980/b3ca4105-0edc-d6a5-f8f6-07d21eb4db82.png)

上手く行っていますね。

はい。僕は平成12年生まれです。

以上、あざした。
【Qt Designer with QGIS】mMapLayerComboBoxのフィルター、バグ解消方法

Qt DesignerのMapLayerComboBoxにフィルターを設定するとエラーになるバグ？の解消法について、受け売りですが共有します。

# 方法

Qt Designerでフィルターをかけるのではなく
plugin名.pyに以下コードを追加してください。

```プラグイン名.py
from qgis.core import QgsMapLayerProxyModel

def run(self):
#この場合はラインレイヤのみ表示
self.dlg.mMapLayerComboBox.setFilters(QgsMapLayerProxyModel.LineLayer)
```
プラグインを使った際のみ適用される為、エラーが発生しないみたいです。

引用元：https://github.com/qgis/QGIS/issues/38472
Githubの公開鍵を登録する手順

#はじめに

Githubへ公開鍵を登録しようと様々なサイトを見て試みたが、

```
Key is invalid. You must supply a key in OpenSSH public key format
```

となってしまい、にっちもさっちもいかなくなってしまったので、そんな方のための救済策？のために記します。



#参考になったサイト
https://www.youtube.com/watch?v=Vi-WqFKYpnw
https://qiita.com/0ta2/items/25c27d447378b13a1ac3

#早速作ってみる

まずは普通に鍵を作る

```
$ ssh-keygen -t rsa -b 4096 -C "hogehoge@fuga.com" #自分のメールアドレスを指定
 # -t 暗号化方式を指定
 # -b 暗号化強度を指定
 # -C コメントを設定 

Generating public/private rsa key pair.
Enter file in which to save the key (/Users/ts/.ssh/id_rsa): id_rsa_github # 秘密鍵の名前を指定
Enter passphrase (empty for no passphrase):  #パスワードを入力
Enter same passphrase again:  # もう一度入力
Your identification has been saved in github_rsa.
Your public key has been saved in github_rsa.pub.

```


作成できた鍵を確認

```

$ ls ~/.ssh 
github_rsa	github_rsa.pub	id_rsa		id_rsa.pub	known_hosts
```

##公開鍵の登録

ここでできた公開鍵をgithubに登録します。

と、その前に

```
$ pbcopy < ~/.ssh/id_rsa.pub
```

で公開鍵のコピーしてください

https://github.com
にアクセスして
右上のアイコンを押下してsettingsに飛びましょう

そしたら、画面左側に出てくる
![スクリーンショット 2019-07-19 18.09.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/343721/e700b13a-67d9-b575-f44e-6f3b6c248128.png)

から、
SSH and GPG keysを選択します。
次の画面では上部の
New SSH keyを選択します

![スクリーンショット 2019-07-19 18.11.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/343721/c582c6bb-4a00-415e-fced-1d491088fd66.png)


すると、この画面になりますので
Title:他のものと区別できる名前
Key:先ほどコピーしたものを貼り付ける

そしたら、Add SSH keyを押下

![スクリーンショット 2019-07-19 18.30.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/343721/876c6027-6704-f771-54f9-4cd0d4070def.png)

このようになったら成功です。✌️😀
蟻本に載ってる問題の難易度はAtCoderの水色以上

https://atcoder.jp/contests/abc252/tasks/abc252_f
この問題は蟻本P49の問題と全く同じです。そしてこの問題のdiffは1609でぎりぎり青diffになっています。何が言いたいかというと 
**蟻本に載ってる問題を何も知らずに解こうとしたら水、または青以上の難易度になる**
ということです。

AtCoderを始めてから少しして私は蟻本を買ったのですが、どの問題もぱっと見では解法がわからず自分の頭が悪いのではと思っていました。しかし、上の問題から考えてみると、灰色、茶色、緑色の人間が解けるような難易度の問題は、アルゴリズムの説明をするための例題くらいなのかもしれません。なので自信を落とさないようにしましょう！(戒め)
オブジェクト指向型プログラミング（OOP）と関数型プログラミング（FP）の基本

### はじめに

オブジェクト指向型プログラミング（OOP）と関数型プログラミング（FP）は、ソフトウェア開発における2つの主要なパラダイムです。それぞれ異なる考え方や手法を持ち、特定のタイプの問題に適しています。ここでは、それぞれの特徴と違いについて詳しく説明します。

### オブジェクト指向型プログラミング（OOP）

### 概要

OOPは、プログラムを「オブジェクト」の集合として構築するパラダイムです。オブジェクトは、データ（属性）とそのデータを操作するためのメソッド（関数）を持ちます。OOPは、カプセル化、継承、多態性（ポリモーフィズム）といった概念に基づいています。

### 主な特徴

1. **カプセル化**: データとそのデータを操作するメソッドをオブジェクトとしてまとめます。これにより、データが外部から直接アクセスされないように保護されます。
2. **継承**: 既存のクラスから新しいクラスを作成できます。これにより、コードの再利用が促進され、親クラスの機能を子クラスに継承できます。
3. **多態性（ポリモーフィズム）**: 同じメソッド名でも、異なるクラスで異なる動作をすることができます。これにより、柔軟で拡張性の高いコードが書けます。

### 例（C#）

```csharp
csharpコードをコピーする
using System;

public class Animal
{
    public string Name { get; set; }

    public Animal(string name)
    {
        Name = name;
    }

    public virtual string Speak()
    {
        return "";
    }
}

public class Dog : Animal
{
    public Dog(string name) : base(name) {}

    public override string Speak()
    {
        return $"{Name} says Woof!";
    }
}

public class Cat : Animal
{
    public Cat(string name) : base(name) {}

    public override string Speak()
    {
        return $"{Name} says Meow!";
    }
}

class Program
{
    static void Main()
    {
        Dog dog = new Dog("Buddy");
        Cat cat = new Cat("Whiskers");

        Console.WriteLine(dog.Speak());  // Buddy says Woof!
        Console.WriteLine(cat.Speak());  // Whiskers says Meow!
    }
}

```

### 関数型プログラミング（FP）

### 概要

FPは、プログラムを「関数」の集合として構築するパラダイムです。関数は、入力を受け取り出力を返す純粋な関数（副作用がない）を基本単位とします。FPは、不変性、高階関数、再帰といった概念に基づいています。

### 主な特徴

1. **純粋関数**: 入力が同じなら出力も常に同じであり、副作用がない関数を使用します。これにより、関数の予測可能性が高まります。
2. **不変性**: データは変更されず、すべての操作は新しいデータを生成します。これにより、データの一貫性が保たれます。
3. **高階関数**: 関数を引数として受け取り、関数を返す関数を使用します。これにより、関数の再利用性と抽象化が向上します。

### 例（Javascript）

```jsx
javascriptコードをコピーする
// 純粋関数の例
const add = (a) => (b) => a + b;

const add5 = add(5);
console.log(add5(3));  // 8

// 高階関数の例
const numbers = [1, 2, 3, 4, 5];
const doubled = numbers.map(n => n * 2);
console.log(doubled);  // [2, 4, 6, 8, 10]

```

### OOPとFPの比較

1. **状態管理**
    - **OOP**: 状態をオブジェクトの属性として管理します。
    - **FP**: 状態を不変のデータとして管理し、関数を通じて新しい状態を生成します。
2. **コードの再利用**
    - **OOP**: 継承とポリモーフィズムを通じてコードを再利用します。
    - **FP**: 高階関数と関数の合成を通じてコードを再利用します。
3. **可読性と保守性**
    - **OOP**: 複雑なオブジェクト関係を視覚化しやすく、直感的に理解しやすい。
    - **FP**: 純粋関数により、副作用がなくデバッグが容易。関数の組み合わせにより、コードの意図を明確に表現。
4. **適用分野**
    - **OOP**: GUIアプリケーション、ゲーム開発、シミュレーションなど、状態管理が複雑な分野に適しています。
    - **FP**: データ処理、並行処理、数値解析など、数多くの変換と処理が必要な分野に適しています。

### まとめ

- **オブジェクト指向型プログラミング（OOP）**: オブジェクトを中心に構築し、カプセル化、継承、多態性を利用。状態管理が容易で、直感的な設計が可能。GUIアプリケーションやゲーム開発に適している。
- **関数型プログラミング（FP）**: 関数を中心に構築し、純粋関数、不変性、高階関数を利用。副作用がないため、予測可能でデバッグが容易。データ処理や並行処理に適している。
【ポエム】Qiita Engineer Festa 2024で個人的に意識したいと考えている点

## はじめに
Qiita Engineer Festa 2024の1記事目として
完走に向けて気合を入れると共に、
個人的に意識したいと考えている点について勝手にまとめます！
~~Qiitanに一歩近づく~~

## 意識したいと考えている点
### イベント完走そのものを目的にしない
~~早速ポエムで1記事稼ごうとしてる~~
私は以前Advent Calendar 2023にも参加させていただいたのですが、その際当初の目的は以下のようなものでした。
- Qiitaデビューしてみる
- 記事を書くことで学びを得たり知識の整理を行う
- これまで多くの記事等でさんざんお世話になってきたエンジニアコミュニティへほんの少しでも還元しようとしてみる

しかし特に後半は記事の作成やカレンダー完走そのものが目的となってしまっていました。
当時はイベントを一種の「ゲーム」のように捉えてモチベーションの維持を行っており、それによって完走まで辿り着けたこと自体は悪いことではないと思っているのですが、今回は完走そのものが目的となってしまわないように気を付けたいと思っています。

### とにかく楽しむ
アドカレ2023の際、記事を見せ合ったりカレンダーの進捗~~が悪すぎてともにむせび泣く~~についてワイワイしながら進めて行くのがとても楽しかったので、そちらは是非継続したいと考えています:relaxed:

### 今度こそ次につなげたい
アドカレ2023の後、結果的に記事投稿を習慣化することは出来ず、
~~12/25に事故に会った人~~イベント期間中の25記事だけが佇んでいる状態が続いてしまっていました。

もちろんそこで習慣化できていれば理想でしたが、
- アウトプット未経験の状態から25記事投稿・完走することが出来た
- Qiita Engineer Festa 2024と同僚に背中を押してもらいつつ帰還出来た

というだけでも一旦十分ではないかと思っていたりもします。:relaxed:

今回も少しは進歩したいので、38記事投稿~~多すぎだろ~~ & **7月中に39記事目の投稿**を目指します💪:relaxed:


## おわりに
最低でも~~38日~~39日坊主を目指して頑張ります！！🍀
~~今回もQiitan欲しい！！！~~

## 参考にさせていただいた神記事🙏
https://qiita.com/Sicut_study/items/40fd5aac278b001a2fee
sin140°+cos130°+tan120°「2015 防衛医科大学校 看護学科【3】［1］」をChatGPTとsympyとWolframAlphaでやってみたい。

・以前、やった事があるかも。

# オリジナル
・大学入試数学問題集成 様＞【3】［1］テキスト

https://mathexamtest.web.fc2.com/2015/201520110/2015201100300mj.html#top-0306

# ChatGPT-3.5先生へ(1回目)

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

・ページのソースを表示です。MathMLです。
　省略しようと思いましたが、大学入試数学問題集成 様 の全文から必要部分の抜粋です。
```
<div class="totaldiv">
<div class="qref">
<div class="refnum">
<p><a name="top-0306" 
id="top-0306">
2015-20110-0306</a></p>
</div>
<div class="refinfo">
<p>2015　防衛医科大学校　看護学科</p></div>
<div class="refinfo2"></div>
<div class="diff"><p>易□　並□　難□</p></div></div>
<div class="qbody"><a name="q-0306" 
id="q-0306"></a>
<p class="slevel"><span 
class="qnum">【３】</span>　問11〜15の解答として正しいものを，(1)〜(5)の中からそれぞれ<math>
<mspace width=".2em"></mspace><mn>1</mn>
<mspace width=".2em"></mspace>
</math>つ選び，解答用紙にマークせよ．</p>
<a name="s-0306" id="s-0306"></a><p class="s1level"><span class="shomon1">［1］</span>　次の問に答えよ．</p>
<p class="s2level">問11　<math>
<mrow><mi>sin</mi><mo>&af;</mo><mn>140</mn><mo>&it;</mo><mi mathvariant="normal" class="MathML-Unit">&deg;</mi>
<mo>+</mo><mi>cos</mi><mo>&af;</mo><mn>130</mn><mo>&it;</mo><mi mathvariant="normal" class="MathML-Unit">&deg;</mi>
<mo>+</mo><mi>tan</mi><mo>&af;</mo><mn>120</mn><mo>&it;</mo><mi mathvariant="normal" class="MathML-Unit">&deg;</mi>
</mrow><mspace width=".2em"></mspace>
</math>はいくらか．
</p>
<p class="s2sublevel half"><math>
<mrow><mtext>(1)</mtext><mspace width="1em"></mspace>
<mo>-</mo><mn>1</mn><mo>-</mo><msqrt><mn>3</mn></msqrt>
<mspace width="2em"></mspace></mrow>
</math><math>
<mrow><mtext>(2)</mtext><mspace width="1em"></mspace>
<mo>-</mo><msqrt><mn>3</mn></msqrt>
<mspace width="2em"></mspace></mrow>
</math><math>
<mrow><mtext>(3)</mtext><mspace width="1em"></mspace>
<mn>1</mn><mo>-</mo><msqrt><mn>3</mn></msqrt>
<mspace width="2em"></mspace></mrow>
</math><math>
<mrow><mtext>(4)</mtext><mspace width="1em"></mspace>
<msqrt><mn>3</mn></msqrt>
<mspace width="2em"></mspace></mrow>
</math></p>
<p class="s2sublevel"><math>
<mtext>(5)</mtext></math>　上の<math>
<mspace width=".2em"></mspace><mn>4</mn>
<mspace width=".2em"></mspace>
</math>つの答はどれも正しくない．</p>
</div><div class="rclear"></div>
</div>
```

```
日本語で
```
```
sympyで
```
```
sympyのソースコードをお願いします
```
(回答省略)
https://docs.sympy.org/latest/modules/evalf.html

# ChatGPT-3.5先生へ(2回目)

・以下の質問の仕方が悪かったです。
```
図形的に、日本語でお願いします。
```


# WolframAlphaで

https://www.wolframalpha.com/input?i=sin140%C2%B0%2Bcos130%C2%B0%2Btan120%C2%B0

```
厳密な結果
-sqrt(3)
```

# いつもの? sympyの実行環境と 参考のおすすめです。
[(テンプレート)](https://qiita.com/mrrclb48z/items/00dd08b0317069be9342)
SFCとかいうCADデータ

# はじめに
最近、展開接続図をテキストベースで書けないかなあ、と思い構文解析器を作っているのですが、いくら元ネタをテキストベースで記述したところで最後は図面に起こさないといかんね、となっています。
SVGならあまり勉強せずとも使えそうだなと思いつつ、流石に提出図面がSVGなのはナンセンスかなと。
SVGからCADに変換するウェブツールとかもあるみたいですが、あまり幸せじゃなさそうなので却下。
バイナリベースは無理なので却下。
テキストベースと言えばDXFがあるなあ、と思いつつDXFの変換事故に関する話題は事欠かないよなあと思い却下。
そんな中で見つけたのがSFCでした。

# SFCとは
> SXF（エス・エックス・エフ）は、CADデータ交換標準コンソーシアム (SCADEC) が提唱する、異なるCAD間でデータをやりとりする際に使用する中間ファイル形式である。Scadec data eXchange Formatの略。図面の電子納品における標準ファイルとして扱われる。
> 国土交通省の主導で、1999年3月に設立されたCADデータ交換標準コンソーシアム (SCADEC) が開発。
STEPの規格の一つであり、「Part21 交換構造のクリアテキスト符号化 (Clear text encoding of the exchange structure) 」に準拠している。
（中略）
> 物理ファイルはSFC(フィーチャコメントファイル)とP21(STEPファイル)の2種類がある。 P21はSTEP/AP202に準拠した国際的に通用する形式。SFC(Scadec Feature Comment file)はCADデータ交換用の形式で、P21よりもファイルサイズが小さい。

Wikipediaからの引用ですが、要するに国際規格のstepから必要そうな要素すっぱ抜いてstepの形式でまとめたのがp21、実装簡単にデータ読みやすく独自文書で保存したのがsfc、みたいな認識です。

Wikipedia読んでると、リンク先に仕様書があるよって書いてあって嘘ではないのですが、リンク先のどこからそのページにたどり着けるのか全然わかんないんですよね。

下記から仕様書関連資料をDLすると幸せになれます。
https://www.cals-ed.go.jp/sxf_ver3-1_specification_draft/

# SFCの仕様書の読み方
仕様書ファイルが多すぎてどこからどう読めばいいのか分かりづらいですが、SFXはともかくSFCをちょっと描けるようになりたいくらいであれば必要な資料は非常に少ないです。
1. SXF Ver.3.1仕様書・同解説附属書SFC編（第２版）.pdfの総則
2. SXF Ver.3.1仕様書・同解説フィーチャ仕様編（第２版）.pdfのpp.1-10
3. SXF Ver.3.1仕様書・同解説附属書SFC編（第２版）.pdfのp.99
4. SXF Ver.3.1仕様書・同解説附属書SFC編（第２版）.pdfの1-2節で描きたい図形分の資料
4. SXF Ver.3.1仕様書・同解説附属書SFC編（第２版）.pdfのサンプル部分

このくらいで良さげ。
SFCの仕様はかなりシンプルで、BNFを雰囲気読めれば数時間である程度理解できると思います。

# ざっくり書き方
ヘッダ部分とかはBNFかサンプルの最初の方と最後数行を見てもらうとして。
データ部分についてクセのある部分をいくつか紹介します。
* 色、線種、線太さの定義
    * 既定義とユーザー定義とありますが、既定義でも使う分は記述が必要
    * またユーザー定義は（既定義番号の後から）出現順に番号が振られますが、既定義はどんな順番で定義しても既定義の番号でアクセスします
        * サンプルコードのカラー定義1つ目は既定義Redですが、ここだけをコピペして色指定に1と書くと描画されません（1はBlack、Redは2）
* 複合図形定義は、必ず用紙よりも前に記述する。
    * シンボルみたいなモノだと理解していますが、グループ化した絵を使いまわしたい、みたいな場合複合図形定義を用います。
    * 定義を宣言するより前に描いた分の図形がその定義に含まれる図形になります。

現状、自分もまだ円を書いてtfas viewerで眺めてできたーってなってるだけなのでとりあえずこの辺で。
ところでSFCって自分は全然知らなかったんですが標準的に使われてるんですか？


どうでもいいけど、この資料誤字多すぎる。分量が多いから仕方ない側面あるとは思うけれど・・。
最終目標がレベル4であるのにH21.6の最終更新？時点でレベル2までしか達成していないの見るにもしかして終わったコンテンツなのでは・・？
仕様を追従する必要がないという点において平和な可能性よりも、その辺のCADソフトから見限られる可能性の方を心配した方がいいのか・・？
ChatGPT-3.5先生へ「htmlの表をmarkdownの表へ変換」共通テの焼きそばの表

**htmlの表 → markdownの表**
以下もできるはずです。
**htmlの表 ← markdownの表**

# 太郎さんと花子さんの文化祭の焼きそばの表
2023  共通テ 追試験 数学I／数学IA【２】［１］
https://mathexamtest.web.fc2.com/2023/202310000/2023100000300mj.html#top-0303

抜粋
```
<div class="ds2level"><table class="waku"><tr><td><math>
<mn>1</mn><mspace width=".2em"></mspace>
</math>皿あたりの価格（円）</td>
<td><math>
<mn>100</mn></math></td>
<td><math>
<mn>150</mn></math></td>
<td><math>
<mn>200</mn></math></td>
<td><math>
<mn>250</mn></math></td>
<td><math>
<mn>300</mn></math></td></tr>
<tr><td>売り上げ数　　　（皿）</td>
<td><math>
<mn>1250</mn></math></td>
<td><math>
<mn>750</mn></math></td>
<td><math>
<mn>450</mn></math></td>
<td><math>
<mn>250</mn></math></td>
<td><math>
<mn>50</mn></math></td></tr></table></div>
```
```
markdownの表のソースをお願いします。
```

# 実行結果

| 1皿あたりの価格（円） | 100 | 150 | 200 | 250 | 300 |
|-----------------|-----|-----|-----|-----|-----|
| 売り上げ数（皿）        | 1250 | 750 | 450 | 250 | 50  |
NextAuthでGoogleログインを実装する

### NextAuthでGoogleログインを実装する

https://qiita.com/Itsuki54/items/dd248b5b0af63f89b652

前回の記事でNextAuthのセットアップは完了しました
今回はGoogleログインの実行方法について解説します

https://console.cloud.google.com/apis/credentials

アクセスし、プロジェクトの作成を行う
同意画面の作成を行う
ログイン時に出てくる画面のことを指す

:::note info
Usertypeを外部
:::
他はプロジェクトに合わせるだけ

認証に戻り、認証情報の作成→OAuthクライアントの作成に進む

:::note info
「承認済みの JavaScript 生成元」にhttp://localhost:3000を入力します。
「承認済みのリダクレイト URI」にhttp://localhost:3000/api/auth/callback/google を入力します。
:::

他はプロジェクトに合わせる

:::note warn
この後に出てくるクライアント ID」と「クライアントシークレット」は必ずコピーする
:::

``` .env
GOOGLE_CLIENT_ID=''
GOOGLE_CLIENT_SECRET=''
```

にペーストする

コレによりGoogleログインが実装される
Ubuntu20.04にAnacondaをインストールしcondaコマンドを使えるようにする

# インストール自体は以下のサイト通りにやるといい

https://qiita.com/Z0E/items/d574302747df8f0ee4eb

# インストールしただけは終わらない
Anaconda自体のインストールは無事終わったら、condaコマンドを使えるようにする必要がある。
インストールガイドの記事で以下のようなコマンドがあると思う。
```
conda activate
anaconda-navigator
```
しかしこのままやるとコマンドが無いと言われ実行できない。
そこで、以下のコマンドで設定をしましょう。
```
echo ". ~/anaconda3/etc/profile.d/conda.sh" >> ~/.bashrc
```

次に、このコマンドで設定を反映
```
source ~/.bashrc
```
# 確認
```
conda --version
```
このコマンドでcondaのバージョンが出れば成功
const prisma = new PrismaClient()を多用してはいけない　lib/prismaを作ろう

### lib/prismaに以下を追加するだけです

```ts
import { PrismaClient } from '@prisma/client';

declare global {
  var prisma: PrismaClient | undefined;
}

const prisma = global.prisma || new PrismaClient();

if (process.env.NODE_ENV === 'development') global.prisma = prisma;

export const db = prisma;
```

使用する際は
```tsx
import {db} from "lib/prisma";

db.user.create({
...
})
```
などのように使います
Next.jsで認証機能をNextAuthで実装する

```zsh
npm install next-auth
```

pages/api/[...nextauth].tsファイルの作成

```ts
import NextAuth from "next-auth";
import GoogleProvider from "next-auth/providers/google";
import GitHubProvider from "next-auth/providers/github";
import { db } from "../../../lib/prisma";

export const authOptions = {
  providers: [
    GoogleProvider({
      clientId: process.env.GOOGLE_CLIENT_ID || "",
      clientSecret: process.env.GOOGLE_CLIENT_SECRET || "",
    }),
    GitHubProvider({
      clientId: process.env.GITHUB_CLIENT_ID || "",
      clientSecret: process.env.GITHUB_CLIENT_SECRET || "",
    }),
  ],
  callbacks: {
    async signIn(user:any) {
      const { email } = user.user;
      await db.user.upsert({
        where: { email },
        update: {},
        create: {
          name: user.user.name,
          email: user.user.email,
          image: user.user.image,
          admin: false,
        },
      });

      return true;
    },
    async session({ session, token }:any) {
      session.accessToken = token.accessToken;

      session.user.id = token.id;
      session.user.uid = token.uid;

      return session;
    },

    async jwt({ token, user }:any) {
      if (user) {
        const userExist = await db.user.findUnique({
          where: {
            email: user.email,
          },
        });
        token.uid = userExist?.id;
        token.accessToken = user.access_token;
      }
      return token;
    },
  },
 pages: {
   signIn: '@/pages/signIn',
  },
};

export default NextAuth(authOptions);
```

:::note info
Google、その他ログインについては次回の記事で紹介します
:::

pages/_app.tsxに以下を追記
```tsx
import { SessionProvider } from "next-auth/react"

export default function App({
  Component,
  pageProps: { session, ...pageProps },
}) {
  return (
    <SessionProvider session={session}>
      <Component {...pageProps} />
    </SessionProvider>
  )
}
```

pages/signin.tsxを作成
```tsx
import Google from "next-auth/providers/google";
import { signIn } from "next-auth/react";
import Github from "next-auth/providers/github";
function signInPage() {
  return (
    <div>
      <button onClick={() => signIn("google")}>Sign in with Google</button>
      <button onClick={() => signIn("github")}>Sign in with GitHub</button>
    </div>
  );
}

export default signInPage;
```
単相200Vと単相100Vの話

# はじめに
単相200Vって単相100Vが2つあってできてるんでしょ？ という思想を捨てましょう。
逆です。単相200Vから単相100Vが2つ取り出せます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2731833/62f8e1d9-ff29-92d2-b9b0-da792952e949.png)
図ではAC200V電源を書きましたが、そこがトランスだろうが話は同じです。
単相200Vの間を同一負荷2つ用意し、その間に中性線を作ってあげればオームの法則に従い100Vになる。当然ですね。
（ここで納得できないのであれば別途オームの法則から勉強してください）
この図の悪いところを挙げると、どちらかで作った100Vコンセントに何かを繋いだら負荷の均衡がずれて100Vじゃなくなるだろってところですかね。
現実に即してトランスの2次側巻線中点から取ればその問題はクリアされると思います。
AC電源だとしても用意する負荷を限りなく抵抗の小さな負荷にすれば電圧の按分という意味では問題ない気がしますが、現実的にはそこに大電流が流れていけない気がします。

# 逆相とか同相とか
本質的な理解については「はじめに」の内容で全てなのですが、しばしば問題になる話題として（図で描いたところの）RとSが逆相だから100Vと100Vを足せて200Vになる、みたいな話があります。

## 正解は同相
話を混乱させても面倒なので、正解は同相と表現する方が正しいようです。

# 何故、逆相と思ってしまうのか
逆相だと信じている人にとって逆相でないと思うことはわりと難しいことな気がします。自分がそうなので。
そこでなんで自分がこれを逆相だと思ったのか考え、その考えが無理筋であるかを説き伏せようと思います。

## スタート地点の誤り
はじめにで書いたように、単相100Vが2つあってそれを合成してできるんでしょ？
と思っていたので、頭の中にこんなグラフがありました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2731833/c5030c7f-fc81-382e-b0c5-938af53bc68b.png)
中性線に対するR、Sの電圧の時間推移グラフです。…①
考えとして間違っていないとは思います。

ほら、2つの電圧が逆向きにかかってるじゃん。逆相でしょ。

これが2つの100Vが逆相と考える唯一最大の理由だと思います。


## 位相とは
ところで、位相ってなんでしたっけ。
自分は未だに電圧や電流の時間的な進みとか遅れとかそういうふんわりした理解しかしていません。
ただまあ数学的に表現してみると2つの電圧が正弦波`141sinΘt+141sin(Θt＋α)`で表現される事は直感的に分かるんじゃないでしょうか。(100V交流のピーク電圧は100*√2）…②
さて、ここで2つの正弦波の合成後の大きさが200Vになることを考えましょう。
`sinΘt+sin(Θt＋α)`を計算した結果、`2 * sin(Θ+β)`となるような電圧だと良いわけです。
つまり`α = β = 0`だったら良いんですよね。
R-NとS-Nが両方`sinΘt`と表現できる。
R-NとS-Nはつまり同相じゃないか？ となるわけです。

## さっき書いたグラフと違う
ここで誰もが思うでしょう。
これだとさっき書いたグラフと違うじゃん、と。
さっき書いたグラフはサインカーブが2つ逆向きにあったけど、今度は重なるようなサインカーブしか描けないじゃん、と。
はい、その通りです。

なんでこんな現象が起こったのでしょうか。
最初から同相だと知っていた人にはアホかと思われるかもしれませんが、①と②って同じことをしてるようで致命的に違う部分があるんですよ。


はい、①は引き算をしていて②は足し算をしているという点です。


## 合成についての認識が甘かった
そういうことです。
合成という言葉を数式的に捉えていれば加算だと思えるのに、グラフ上で眺めていると引き算して合成してしまうことがあるのです。
そして、引き算して合成した結果倍の出力を得られるという事はそもそも「同相」という話でした。


# おわりに
書いていて悲しくなるくらいアホな勘違いを色々としていました。
なんなら最初の最初は3相200Vの120°ズレを何かしらのギミックで180°ずらしているのかと思ってました。ほんとにアホなんでしょうね。
中点で中性線取り出せば半分こできるじゃん、って思い至らないアホが電気触ってるの怖いよ。


# …
> なぜなら電圧の定義として低い方（相回転の遅い方）の電位を基準とし、高い方（相回転の速い方）との電位差をプラスとして考える事が適宜されているからである。当然逆位相であればL1-L2であるため(100V)-(100V)=0Vであり、200Vは取り出す事ができない。

これWikipediaの説明で同相・逆相について触れている文章で、似たような文言を知恵袋みたいなところでも見かけたのだけれど、逆相と言いたい人の気持ちを何も分かっていない回答だと思う。
合成という演算子が（無意識に）減算だと思いこんでいる人に、オペランド側の正負について説いても誤解が解けると思えない。
文字列チェック

```java
public class StringChecker {
    public static void main(String[] args) {
        String[] testInputs = {
            "Example@123",   // 大文字, 小文字, 数字, 記号 - 4種類
            "EXAMPLE123",    // 大文字, 数字 - 2種類
            "example123",    // 小文字, 数字 - 2種類
            "Example",       // 大文字, 小文字 - 2種類
            "123456",        // 数字のみ - 1種類
            "example!",      // 小文字, 記号 - 2種類
            "EXAMPLE@",      // 大文字, 記号 - 2種類
            "123!@",         // 数字, 記号 - 2種類
            "!@#$%^&*",      // 記号のみ - 1種類
            "Ab1",           // 大文字, 小文字, 数字 - 3種類
            "a!1",           // 小文字, 記号, 数字 - 3種類
            "A!@#",          // 大文字, 記号 - 2種類
        };

        for (String input : testInputs) {
            System.out.println("Input: " + input + " => " + containsAtLeastTwoTypes(input));
        }
    }

    public static boolean containsAtLeastTwoTypes(String input) {
        // 各文字種を含むかどうかの正規表現
        String letterPattern = ".*[A-Za-z].*";
        String digitPattern = ".*\\d.*";
        String specialCharPattern = ".*[!\"#$%&'()*+,-./:;<=>?@\\[\\]^_`{|}~].*";

        // 各正規表現に一致するかチェック
        boolean hasLetter = input.matches(letterPattern);
        boolean hasDigit = input.matches(digitPattern);
        boolean hasSpecialChar = input.matches(specialCharPattern);

        // 2種類以上の文字種が含まれているかをチェック
        int count = 0;
        if (hasLetter) count++;
        if (hasDigit) count++;
        if (hasSpecialChar) count++;

        return count >= 2;
    }
}

```
PowerAutomate を使って接続アプリを設定してみる【ライセンスがないので無理でした】


+ [接続アプリを設定してみる](https://qiita.com/Keiji_otsubo/items/b93e68fffe6d5bc2a296)

Curlコマンドで接続できたのでPowerAutomateでもできればファイルを簡単にSalesforceに追加できそうです。


これを見るとできそうな気がしました。

https://powerusers.microsoft.com/t5/General-Power-Automate/Using-HTTP-Request-activity-to-get-OAuth-token/td-p/949361


# このように設定して、保存したら...


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/f7ffb532-096d-b059-bcd2-ec6775ad9125.png)



![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/a84ccdc1-f432-01c4-bfbe-35e4ab5cc8c9.png)


ダメですね有償ライセンスが必要みたいです。諦めましょう。やはりcurlコマンドがタダでいい。


https://cybozu.dev/ja/kintone/tips/development/3rd-party-services/microsoft/power-automate-kintone-api/

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/2496a3bc-e419-45f4-a875-14c5b5156ca4.png)
DIVER OSINT CTF 2024 writeup

2024/06/08から2024/06/09まで行われたDIVER OSINT CTFに参加しました。
研究室の人や知り合いとチームを組んで参加したのですが、自分が解いた問題についてのWriteupを残しておこうと思います。

## ad_directiare
>この名刺の人物が、東京出張時に食べた昼ご飯の値段を答えよ。
![ad_directiare.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/679657/668fbe0f-467a-a213-dfe1-0c3b480b12e3.jpeg)

名刺のメールアドレスがgmailなので`gmail osint`とかGoogleで検索して[出てきたもの](https://epieos.com/)を使いました。
米倉さんのGoogle Mapの口コミに昼ごはんの値段が書いてあったのでFlagとして提出するとcorrectでした。
余談ですが、この問題First Blood取れて嬉しかったのでめちゃくちゃ印象残ってます…。
Diver24{4400}

## osprey1
>2023年11月29日、アメリカ軍のオスプレイ（V-22）が日本の屋久島沖で墜落した。この機体の番号と、墜落時のコールサインは何か。

`屋久島　オスプレイ　コールサイン`と検索するとミリオタのツイートがいくつか出てくるのでそれを参考にしてFlagを提出します。
Diver24{12-0065_GUNDAM22}

## osprey2
>2024年2月15日、ある米軍基地でこの事故に関する追悼式典が実施された。16:46:37ごろ、その式典はどこで実施されていたか。
OpenStreetMapのWay番号で答えよ。

twitterなどでいろいろ調べてみると[このようなサイト](https://www.stripes.com/branches/air_force/2024-02-15/osprey-crash-japan-yokota-service-13010379.html)を発見しました。
16:46にはまだサムライフィットネスセンターの外の運動場にまだいるだろうと推測してOpenStreetMapで番号を調べて提出するとcorrectでした。
Diver24{810021666}

CTFが終了する1分ぐらい前のｷﾞﾘｷﾞﾘに提出したのでosprey3にはたどり着けませんでした。残念。

## chiban
>画像の中央に写っている道路の地番は何か。
たとえば住所が 仙台市宮城野区二十人町 303-8 の場合、Flagは Diver24{303-8} となる。
また、地番には数字だけでなく漢字が含まれることもある。その場合は漢字表記のまま解答せよ。
![chiban.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/679657/fe1f3fbc-9ae0-7934-9d0f-d2469eefc3e0.jpeg)

餃子の看板(餃子の満州というらしい、関東中心)とサンディ(関西中心)の店舗情報を元に、絞っていくとサンディ双葉店を見つけることができます。
地番を検索できるサイトはいくつかありますが[地番検索くん](https://chiban-kensaku.com/)が多分一番使いやすいです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/679657/a2e80181-c55d-0471-da49-8626265a75a4.png)
Diver24{筆界未定地-6}

## italy
>2023年10月27日、新潟大学に通う学生が「珍しいことにイタリアのヘリコプターがキャンパスの上空を通った」と話していた。
しかし、周囲からは「ヘリコプターは長距離を飛べない。イタリアから新潟に来られるわけがない」と一蹴されてしまった。
彼の主張を裏付けるため、以下のものを調べてほしい
>+ ヘリコプターの保有者（社名）
>+ キャンパス上空を通過した時刻（JST）と、そのときの時の気圧高度

[ここ](https://globe.adsbexchange.com/)のサイトで過去のフライトデータを確認することができるのでひたすら10/27を監視します。そうするとイタリアの黄色ヘリ([I-LIDI](https://globe.adsbexchange.com/?icao=3007a7&lat=37.859&lon=139.004&zoom=11.7&showTrace=2023-10-27))が新潟大学上空を通過したことが分かります。
このサイトだとUTC表記なのでJSTに直してFlagを提出。
Diver24{Alidaunia_13:45:46_1600}

## 感想
始めてOSINT問だけのCTFに出たのでとても楽しかったです。
他の人のwriteupもちょくちょく読んでるのですがそんな情報無料で見れるんだ…と驚きが合っておもしろいです。
Apple Immersive Videoがエンタメを変える - WWDC2024で発表された新コンテンツと制作ワークフロー

この文章は[NotebookLM](https://notebooklm.google/)が[WWDC24の基調講演](https://www.youtube.com/watch?v=RXeOiIDNNek)をもとに要約した文章です。

## Apple Immersive Videoがエンタメを変える - WWDC2024で発表された新コンテンツと制作ワークフロー

AppleはWWDC2024で、Vision Pro向けに開発された全く新しいエンターテイメントフォーマット「Apple Immersive Video」を発表しました。これは、180度の視野角と空間オーディオを備えた3D/8Kビデオで、ユーザーをストーリーの中心に置くような、これまでにない没入感を提供します。

### Apple Immersive Video - 新コンテンツ

Appleは、Apple Immersive Videoで体験できる新たなコンテンツとして、以下の3つの取り組みを発表しました：

*   **Red Bullとのエクストリームスポーツシリーズ:** Red Bullが提供する迫力の映像を、Apple Immersive Videoで体験できるようになります。
*   **The Weekndなど、世界的なアーティストによる新たな試み:** 世界的なアーティストがApple Immersive Videoでどのような体験を提供するのか、期待が高まります。
*   **Apple初の脚本付き短編映画「Submerged」:** オスカー受賞監督であるEdward Berger氏が手掛けるApple Immersive Videoの短編映画が公開されます。

これらのコンテンツは、Apple TVアプリで視聴可能になります。

### Apple Immersive Video - 制作ワークフロー

Appleは、より多くのクリエイターがApple Immersive Videoコンテンツを制作できるよう、Blackmagic Designと提携し、以下の新しい制作ワークフローを構築しました:

*   **Blackmagicカメラ**: Apple Immersive Videoの撮影に使用できるBlackmagic Designの新しいカメラが登場します。
*   **DaVinci Resolve Studio**:  撮影した映像は、Blackmagic Designの編集ソフトウェア「DaVinci Resolve Studio」で編集できます。
*   **Apple Compressor**: DaVinci Resolve Studioで編集した映像は、「Apple Compressor」を使用してエンコードできます。

これらのツールは、今年の後半にクリエイター向けに提供される予定です。

### 空間ビデオ - 新しい撮影体験

Apple Immersive Videoに加えて、iPhone 15 ProとiPhone 15 Pro Maxで空間ビデオを簡単に撮影できるようになりました。この空間ビデオは、大切な瞬間をよりリアルに追体験できる手段として注目されています。

#### 空間ビデオ撮影を可能にする技術

iPhone 15 Proシリーズでは、広角カメラと超広角カメラを横に並べて配置することで、空間ビデオの撮影を実現しました。この配置により、2つのカメラが人間の目のように水平なベースライン上に配置され、空間ビデオの撮影が可能になります。

#### プロ向け空間ビデオ撮影

Appleは、より高品質な空間ビデオ制作の需要にも対応するため、Canonと協力し、人気機種EOS R7デジタルカメラに対応する新しい空間レンズを提供することを発表しました。このレンズを使用することで、プロのビデオグラファーは、困難な照明条件下でも高品質な空間ビデオを撮影できます。

#### 空間ビデオ編集と共有

撮影した空間ビデオは、Final Cut Pro for Macで編集し、visionOSの新しいVimeoアプリで共有・視聴することが可能になります。この新しいプロフェッショナルワークフローは、今年の秋に利用可能になる予定です。

### まとめ

Appleは、Apple Immersive Videoと空間ビデオという2つの新しいビデオフォーマットを通じて、空間コンピューティング時代のエンターテイメント体験を再定義しようとしています。これらの技術は、ユーザーに全く新しい没入感と感動を与えるとともに、クリエイターに新たな表現の可能性を提供します。今後、Apple Immersive Videoと空間ビデオがどのように進化し、エンターテイメント業界に革命を起こしていくのか、注目が集まります。
Selenium(Selenium-wire)をDockerで動かす（アプデ対応、要考慮項目）2024年6月最新版()

## 本稿執筆の経緯と目的
自宅で動かしているクローリングシステムのリプレイスを行おうと考えました。
### 現環境
- 自宅Linux端末（hpのビジネス向け小型マシン、i5-4870Uみたいなモデル）
- 単一ディレクトリにPythonスクリプトやSQliteのDBをひとまとめにしてvenvかpyenvで仮想環境を都度立ち上げ・・・というのをシェルスクリプトにまとめてcronjobで起動時に実行するように設定（ダブって起動しないような監視含む）

#### 現環境の問題点
- コードのCI/CDなんてあったものではない（もともと変更やアプデを前提にしていないが）
- なぜか最近、起動していると重くなる現象が発生→1時間に1回本体ごと再起動する強制措置で延命→情報の取りこぼしなどが発生

### 新環境
- 自宅Linux端末（nipogiとかいうよくある小型PC、中華ではまだ見る方、N100なのでTDPとスペック比は最高）←この端末がどうこう、という記事ではないです。今はTDP低くスペック（passmarkで6000↑）もLinux端末なら過剰くらいのものが安く買えていいぞ、という話です。（下手にケチって超型遅れでTDP爆熱みたいな端末にするくらいなら、ということ）
- Dockerは少なくとも導入（k8sは意味が薄いので見送り）

#### 新環境で発生した問題
- コアとなるSelenium（Selenium-wire含む）を用いたPythonコンテナが動かない

基本的にChatGPTに聞きながら進めましたが、Selenium関連のビルドかupで毎回コケます。半ばあきらめかけましたが、ChatGPT完全依存も良くないので、検索性が著しく低下したGoogleで調べることに。
すると、逆にChatGPTの最新情報（2023年まで）では得られない情報が得られたり、結局Qiita[こちら](https://qiita.com/wanwan_fox/items/2605d45a1096288f6381)の記事がヒット。
まずその記事のとおりに進めましたが、うまくいきません。
結果的には、追加で調べながら解決できたので、それを2024年6月最新版()として備忘録的に残しておきます。

## 追加で設定や注意が必要な項目
基本的には記事のとおりでOKです。

### Appleシリコンの場合
M1などAppleシリコン端末の場合、Dockerfileの最上部をこのようにします。
```
FROM --platform=linux/amd64 python:3.9
```
本番環境（動作環境）のIntelCPU端末（私の新環境だとN100）でエラーになる場合、Dockerfileなどをどう切り替えるか、というのは逆にChatGPTの得意技なので聞いてみてください。（←書いてる時点でまだ本番環境では動かしてないので・・・）
[参考にしたページ](https://dev.to/docker/unable-to-locate-package-google-chrome-stable-b62)

### requirements.txtの修正
blinkerがもう対応していないので、記述を追加し、このように古いバージョンを使うようにします。
```
selenium-wire
chromedriver-binary-auto
blinker<1.8.0 
```
[参考にしたページ](https://www.marekrost.cz/selenium-wire-how-to-resolve-blinker-saferef)

### 注意点
python:3.9-slim は使えないか、使えるかわからない追加設定が必要になります。ここがハマったポイントでした。ChatGPTは当初からpython:3.9-slimを使うように進言してきましたが、Seleniumコンテナにおいてはpython:3かpython:3.9、slimではないバージョンを使う必要があります。Appleシリコンの場合と合わせて注意が必要です。

## まとめ
注意事項を修正すれば、ほぼ参考記事のとおり問題なく阿部寛のHPが開ける（ログに出る）と思います。
visionOS 2で空間コンピューティングが加速 - WWDC2024の発表を徹底解説

この文章は[NotebookLM](https://notebooklm.google/)が[WWDC24の基調講演](https://www.youtube.com/watch?v=RXeOiIDNNek)をもとに要約した文章です。

## visionOS 2で空間コンピューティングが加速 - WWDC2024の発表を徹底解説

WWDC2024でApple Vision Proと、そのOSであるvisionOSのメジャーアップデート、visionOS 2が発表されました。visionOS 2は、空間コンピューティングを次のレベルへと押し上げる、魅力的な新機能と強化された機能を提供します。

### 写真の進化：空間写真が簡単に

visionOS 2では、従来の2D写真がワンタップで空間写真に変換できるようになりました。 高度な機械学習が写真の奥行きを解析し、Vision Proで見事なまでにリアルな奥行きを持つ空間写真を作成します。 これは、単に写真を見るのではなく、まるで過去にタイムスリップできるような体験を可能にするものです。

この機能は、既に写真ライブラリにある写真にも適用できます。 大切な思い出を空間写真として蘇らせ、より深く、より鮮やかに体験することが可能になります。 さらに、パノラマ写真、空間写真、空間ビデオを、SharePlayを使って大切な人たちと一緒に楽しむことができるようになりました。 新しい空間Personaを使えば、たと Tausende von Kilometern 離れていても、まるで隣に座っているかのように感じながら、一緒に写真やビデオを鑑賞できます。 

### より直感的になった操作性

visionOS 2では、視線、手、声による直感的な操作性がさらに進化しました。 例えば、手を上げてタップするだけでホームビューを開いたり、手を裏返して時間とバッテリー残量を確認できるようになりました。 また、もう一回タップするとコントロールセンターが開き、通知やMac仮想ディスプレイなど、頻繁に使用する機能にすばやくアクセスできます。 これらの進化により、空間コンピューティングの操作がより自然でシームレスになります。

### Macとの連携強化：進化したMac仮想ディスプレイ

visionOS 2では、Mac仮想ディスプレイの解像度とサイズが向上しました。 また、2台の4Kモニターに相当する超ワイドディスプレイにも拡張可能になり、生産性が飛躍的に向上します。 Macで実行されるダイナミックフォーベーションのおかげで、どこを見てもコンテンツは鮮明に表示されます。 これにより、Vision Proが真のポータブルワークステーションへと進化します。

### 開発者向けの新API：イマーシブな体験を創造

visionOS 2では、開発者向けにも多くの新機能が追加されました。 特に、高度なボリュメトリックAPIにより、複雑な3Dアプリでも並行して実行できるようになり、これまでにないマルチタスキング体験を実現します。

また、空間ビデオの制作と共有を容易にするために、Canonは人気のあるEOS R7デジタルカメラ用に全く新しい空間レンズを提供します。 このレンズは、Apple Vision Pro向けにゴージャスな空間ビデオを記録することができ、最も困難な照明条件下でも対応できます。 空間ビデオは、Final Cut Pro for Macで編集し、visionOSの新しいVimeoアプリで共有および視聴できます。 この新しいプロフェッショナルワークフローは、今年の秋に利用可能になる予定です。

### Apple Vision Proの展開拡大

Apple Vision Proは、6月28日から中国、日本、シンガポールで販売が開始されます。 また、7月12日からはオーストラリア、カナダ、フランス、ドイツ、イギリスでも販売が開始されます。

### まとめ

visionOS 2は、空間コンピューティングをより身近なものにするための重要なアップデートです。強化された機能、新しいAPI、そして世界中のより多くの国々での発売により、Apple Vision ProとvisionOSは、私たちの生活、仕事、遊び方に革命を起こす態勢を整えています。
STUDIOで無限ループアニメーションを実現するためのCanva活用術

バナーをふわふわさせたい、ボタンをキラッと光らせたい、アイコンを点滅させたい、、、これらを繰り返しループして表示したい。。。

ですがSTUDIOには標準機能では、1回起動して停止、繰り返しはしてくれません。また、設定が直感的ではない分難しい面があります。

これら二つの問題を解決すべくgoogle検索に検索を重ねてさまざまなツールを試しました。検証のため無料で試せるものという前提で。その中で一番よかったものをご紹介します。

Canvaを使ってアニメーションを作成、GIFファイルで出力してSTUDIOの画像機能で表示させるというものです。Canvaではプリセットされたアニメーションが複数用意されていてクリック一つで素材を動かすことができます。さらには他ツールでは無料版ではGIF出力時にツールのロゴ（ウォーターマーク）が表示されるものばかりでしたが、Canvaは無しでした。

詳しい手順は
![1718023708202-XsgGmDHkS6.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3813330/44f7b3f0-fd32-071b-d40d-7d3fb505f2b5.jpeg)

①Canvaにアニメーションをつけたい素材を入れて、上のメニューからアニメートを選択。②左にアニメーションウインドウが表示されるのでそこで好きなアニメーションを選択する。「クリックすると表示」や任意のアニメーション作成も行える。③下のバーでアニメーションの時間調整や別素材の追加も行える。④「共有」→「ダウンロード」→「ファイルの種類」→最下部の「GIF」→「ダウンロード」でGIFファイルを出力できます。

![download.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3813330/75981667-fdf7-a2e8-4676-2d1266cbaef9.gif)

出力されたGIFファイルをSTUDIOに貼り付けるとアニメーションが繰り返し表示されます。

Canvaのアニメーション機能は必要十分なものが揃っていますが、アニメーションの間隔が調整できなかったり自由度は高くないかなという印象です。

より自由度の高いアニメーションをつけたい場合にはSTUDIO上でHTMLやCSS、JavaScriptを書いてアニメーションをつけるのが良いと思います。こちらは調整が難しいですが。。

いかがだったでしょうお役に立てれば幸いです。よければ試していただきご感想お待ちしております！
期間マスタからのデータの取得方法



```
WITH current_date AS (
    SELECT CURRENT_DATE AS today
),
current_fiscal_year AS (
    SELECT
        CASE
            WHEN EXTRACT(MONTH FROM today) >= 4 THEN EXTRACT(YEAR FROM today)
            ELSE EXTRACT(YEAR FROM today) - 1
        END AS fiscal_year_start
    FROM current_date
),
fiscal_year_dates AS (
    SELECT
        fiscal_year_start,
        TO_DATE(fiscal_year_start || '-04-01', 'YYYY-MM-DD') AS fiscal_year_start_date,
        TO_DATE((fiscal_year_start + 1) || '-03-31', 'YYYY-MM-DD') AS fiscal_year_end_date
    FROM current_fiscal_year
)
SELECT *
FROM period_master pm
JOIN fiscal_year_dates fyd
ON (pm.start_date <= fyd.fiscal_year_end_date AND pm.end_date >= fyd.fiscal_year_start_date);
```
【Unity】UnityRoomに投稿したゲームの日本語が点滅するときの対処法

# 0.はじめに
初めてUnityRoomにゲームを投稿できたはいいものの、下記のようにフォントが点滅するバグに遭遇しました。

今回は私が行った対処法を書いていくので同じ現象に悩んでいる人は読みすすめてください。
![2024-04-15_19.32.23.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3813292/5882fcde-aa1f-c899-a123-e808f4f45003.gif)
# 1.やってみたこと
```
動作環境
Unityのバージョン 2022.2x  OS:MacOS
```

日本語フォントはWebGL形式だと結構バグりやすいとのことでデフォルトのフォントを使ってみたところ、最初は問題なく作動しました。

しかし、敵に触れた瞬間からまたフォントが点滅するので、ここに何かしらの原因がありそうだと判明。

![2024-04-15_23.45.38.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3813292/c00486e8-4eff-b481-609e-17e79e8fc7b4.gif)
# 2.原因と解決策
どうやらコンポーネントの**TextMeshPro**と**TextMeshProUI**が同時にシーン上に存在するとこの現象が起こるっぽいです。

今回の場合は敵に触れたとき表示されるダメージがTextMeshProになっていたのでTextMeshProUGUIに変更したらこの現象は治りました。
[変更前]
![スクリーンショット 2024-06-11 12.47.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3813292/84d03e1f-7690-cc89-6f04-5d749e5f4a6a.png)

[変更後]
![スクリーンショット 2024-06-11 12.43.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3813292/98186e84-0f2e-70e7-358b-be176d829305.png)


# 3.さいごに
日本語が点滅するバグの記事は探しても見受けられなかったので書いてみました。拙い文章でしたが、お力になれば幸いです。
アタッチしたスクリプトが実行されない原因についてのメモ

## Godotで実用に耐えられるのかの検証を始めました

触った感触としては、それほど悪くない感じです。
とか思いながら、さっそく問題が発生。

## アタッチしたスクリプトが実行されない

```CustomDraw.cs
using Godot;
using System;

public partial class CustomDrawView : Node2D {
	public override void _Ready() {
         GD.Print("do something");
	}
}
```

結構うっかりなんですが、実行してもエラーもでないので気が付くのに時間が掛かりました。

## ファイル名とクラス名は同じにしろ

結論から言うと、「ファイル名とクラス名は同じにしろ」です。

エントリーポイントの指定がファイルしかないので奇妙だなとは思ったんですがファイル名と同じクラスがエントリーポイントになるという事です。

そもそも、godotのサンプルは大半がGDScriptなのでC#の書き方もよく分かってないので地雷を踏みぬきながら進む感じです。

という感じで、以下のクラス名にすると無事実行されるようになりました。
```CustomDraw.cs
using Godot;
using System;

public partial class CustomDraw : Node2D {
	public override void _Ready() {
         GD.Print("do something");
	}
}
```

最近、調べてもよく分からん問題もChatGPT何かに質問するとサラリと回答してくれることが多いので結構便利ですよね。

今回の件も、「アタッチしたスクリプトが実行されない場合で考えられることは何ですか？」と質問したらかなりの候補の中にファイル名とクラス名が一致していないと言われ、ああっなるほど！と察することができました。

ちゃんとリファレンスを読んでいればこういう事も起きないのですがゲーム始める時に説明書を読まない人なので馬鹿な罠に引っかかってしまいます。
Azure databricksで特定のカラムのデータ型を変更する

databricksではデータ型を変える際にテーブルを書き換えることで可能
https://docs.databricks.com/ja/delta/update-schema.html#explicitly-update-schema-to-change-column-type-or-name


対象テーブルA,対象テーブルBにて同じカラムを持っている場合の例

```python
col_change_table　=["<対象テーブルA>","<対象テーブルA>"]

from pyspark.sql.functions import col
 
for table in col_change_table:
    (spark.read.table(table)
    .withColumn("<column名>", col("<column名>").cast("<変換先のデータ型>"))
    .write
    .mode("overwrite")
    .option("overwriteSchema", "true")
    .saveAsTable(table)
    )
```
さぁ、AIで記事を書こう。()

## はじめに
こんにちは、Qiitanぬいぐるみが欲しくて数打ちゃ当たる戦法(要するにゴリ押し)に走っているbockringです。この記事は、「生成AI」について、AIを使用して書きました。この記事は「はじめに」と「おわりに」、そして章タイトル以外は全てAIに書かせています。さぁ、どこまで崩壊するのでしょうか…(崩壊しない方がいいんですけどね)

**手順**
1:タイトルを書く(by人間)
2:タイトルの続きの1文をQiitaビルトインのAIで書かせる
3:Notion AIにタスクを投げる
※Notion AIへのタスクはすべて「『〜〜』というタイトルで『〜〜〜〜』の文の続きを300~400字程度で記述して」で実行しています。
4:コピペ
自動化ソフトを作っても良かったんですが、面倒ですし1回しか使わないので手作業です。

## 生成AIとは？
生成AIとは、人工知能の一種であり、テキストや画像などのデータを基に新しいコンテンツを自動的に作り出す技術です。

生成AIは、機械学習アルゴリズムを活用して、人間が行うような創造的なタスクを自動化することを目指しています。 これは、音楽、記事、画像、ビデオなど、あらゆる種類のメディアに対応することができます。

生成AIの最も一般的な使用例の一つは、自然言語生成（NLG）です。 NLGはAIが人間のような自然なテキストを生成する能力を備えています。 これは、顧客サービスのチャットボット、ニュース記事の自動生成、パーソナライズされたメールの作成など、さまざまな応用例を持っています。

生成AIはまた、ディープフェイクと呼ばれる技術も可能にしています。 ディープフェイクは、特定の人物の顔や声を模倣し、リアルな動画や音声を作り出す技術です。

しかし、生成AIの可能性はこれだけにとどまりません。 未来には、より高度な創造的なタスク、例えば物語の生成や新しいデザインの提案など、AIによる自動生成が期待されています。

## 人間が生成AIに依存しない関わり方
生成AIを活用しつつも、そのリスク管理や倫理的な使用に注意深く取り組むことが重要です。

それは人間の創造性と判断力が重要になってくる場面です。生成AIが提供する情報や提案はあくまでツールであり、それをどのように利用するか、またその結果にどのような意味を与えるかは人間次第です。また、生成AIの使用は透明性を確保し、不適切な使用を防ぐためのガイドラインや規制が必要です。これらを確立するためには、技術者だけでなく、倫理学者や法律家など多岐にわたる専門家の意見を集約し、社会全体での議論が不可欠です。そして、それらが適切に機能するためには、人間がAIの働きを理解し、その可能性と限界を把握することが求められます。

## これからの生成AIの道
生成AIの未来は、技術的進化と倫理的考慮が同時に重要視される方向へと進んでいくことでしょう。生成AIが提供する情報や提案はあくまでツールであり、それをどのように利用するか、またその結果にどのような意味を与えるかは人間次第です。そのため、人間がAIの働きを理解し、その可能性と限界を把握することが求められます。また、生成AIの使用は透明性を確保し、不適切な使用を防ぐためのガイドラインや規制が必要です。これらを確立するためには、技術者だけでなく、倫理学者や法律家など多岐にわたる専門家の意見を集約し、社会全体での議論が不可欠です。

## おわりに
執筆者(笑)、無事帰還ということで感想を書きます。

**味気ない**
これはどのAIでも同じです。これに関しては「文にユーモアを含めること」と指定すればいい話でしょう。とは言え完璧(に近いよう)な文を生成できるのが生成AIの強みなので今回は抜きにしました。ユーモアなんて、人間が追加すればいいだけの話ですから。

**改行の入れ方が不自然(？)**
第2章では改行が入っていたのに、第3・4章ではないですね。人間では考えられないことです。

**文字数の指定なんて守れない**
僕は300~400文字で指定しましたがかなりズレています。今回は一定の長さを保つために追加した内容でしたので問題ありませんが、この点はまだ注意が必要そうですね。

**慣れるまではタスク文の指定に悩むかも**
Qiiterは慣れているかもしれませんが、一般人がタスクを投げるにはちょっと悩ましいこともあると思います。

**書式なんて守れない**
太字(**B**)にしたり斜体(*I*)にしたりとかはできません。なんならMarkdownに合わせろなんて、おそらく無理でしょう。「です・ます調」と「だ・である調」ぐらいは指定できますが、まだまだ私が実用するには、ってところです。

***めっちゃ楽***
当たり前ですが楽です。でも2度と使いません。普通に書いた方が楽しいですから。

ということで以上、個人的な評価でした。まぁでも内容はしっかりしてるので、さすがですね。

それでは次の記事で〜
SQLでGROUP BYしてargmaxみたいなことをする


## 概要

SQLに`argmax`や`argmin`は無いです。

なので`max`を`SELECT`するサブクエリと`INNER JOIN`することによってがんばります。

## `argmax`や`argmin`ってなぁに

`argmax`というのは、何か値を最大にするものを得るときに使うものです。
`max`は最大でいくつになるかを得るときに使う点で異なります。
逆に`argmin`というのは、何か値を最小にするものを得るときに使うものです。
これも`min`は最小でいくつになるかを得るときに使う点で異なります。

たとえば、記事がたくさんあったとき、「いいねの一番多い記事」は`argmax`ですが、その「一番多くついたいいねの数」は`max`です。

## やってみる

今回は記事の著者ごとに一番いいねの多い記事を`SELECT`しようと思います。

面倒なのでSQLite3で試してみます。

```sql:お試し用データ
BEGIN EXCLUSIVE TRANSACTION;
CREATE TABLE IF NOT EXISTS `articles` (`id` INTEGER PRIMARY KEY AUTOINCREMENT,`author_id` INTEGER NOT NULL,`likes` INTEGER DEFAULT 0);
INSERT INTO `articles` (`author_id`,`likes`) VALUES (1,120);
INSERT INTO `articles` (`author_id`,`likes`) VALUES (1,120);
INSERT INTO `articles` (`author_id`,`likes`) VALUES (1,100);
INSERT INTO `articles` (`author_id`,`likes`) VALUES (2,100);
INSERT INTO `articles` (`author_id`,`likes`) VALUES (2,80);
INSERT INTO `articles` (`author_id`,`likes`) VALUES (2,80);
INSERT INTO `articles` (`author_id`,`likes`) VALUES (3,100);
INSERT INTO `articles` (`author_id`,`likes`) VALUES (4,120);
COMMIT;
```

ふつうに全部`SELECT`するとこんな感じです。

```
id  author_id  likes
--  ---------  -----
1   1          120  
2   1          120  
3   1          100  
4   2          100  
5   2          80   
6   2          80   
7   3          100  
8   4          120  
```

今回の結論です。

```sql
SELECT `a`.* FROM `articles` AS `a` INNER JOIN (
    SELECT `author_id`,max(`likes`) AS `likes` FROM `articles` GROUP BY `author_id`
) AS `b` ON `a`.`author_id`=`b`.`author_id` WHERE `a`.`likes`=`b`.`likes`;
```

では試してみます。

```
id  author_id  likes
--  ---------  -----
1   1          120  
2   1          120  
4   2          100  
7   3          100  
8   4          120  
```

ちゃんと`author_id`ごとに`likes`が最大のものが***すべて***得られましたしました🎉
`author_id=1`のものもちゃんと２つあります🎉

## 結論

サブクエリで`max`を`GROUP BY`して、それと`INNER JOIN`するだけでした。
mermaidのxychartで学習進捗を可視化する

# この記事は何?
2024/06/10 〜 2024/07/17の期間、Qiitaで

* **[Qiita Engineer Festa 2024](https://qiita.com/official-campaigns/engineer-festa/2024)**

が開催されています。

テーマのひとつに

* **[お題は不問！Qiita Engineer Festa 2024で記事投稿！](https://qiita.com/official-events/16baee61b1d8bd4aac5a)**

がありました。
テーマに該当する**mermaidのxychartで学習進捗を可視化する**記事です。


# 背景
私は現在、別記事に書いた **[UMTPレベル3という資格試験の学習](https://qiita.com/juraruming/items/c700ae7718c2cc2a5d65)** をしています。

学習方法としてGitHubのコントリビューションのグラフを使い、学びの習慣をつくることをやっています。
[こちらの記事](https://qiita.com/juraruming/items/4950663fb50de36a5fe0)が具体的な手法の紹介です。

この手法で学びの習慣はできてきましたが、

* 学習の進捗を可視化し、ゴールを見据えて学びたい

と思うようになりました。

現在は技術書のサンプルコードを写経、コミット・プッシュしGitHubのコントリビューションのグラフに記録しています。

この際に学習進捗も更新していけば、

* 学習進捗の見える化でモチベーションアップ
* ゴールを意識した学びができる

と思いました。

そこでマークダウンに進捗を表すグラフを表示できないか、と考えました。


# 学習進捗の可視化
マークダウンでグラフ表示する手段を調べていて**mermaidのxychart**で実現できそうなことがわかりました。

そこで以下のようなマークダウンを記述し、学習進捗を記録するようにしました。

```
>* 進捗メモ（2024/6/9 23:26）
>  * サンプルプログラム実施進捗: 19 / 23 = 82 (%)
>  * 練習問題実施進捗: 17 / 23 = 73 (%)
>  * 全体: 36 / 46 = 78 (%)

// 実際は```mermaid と ``` でxychart-betaを括っています。
xychart-beta
    title "Java言語で学ぶデザインパターン入門 第3版の学習進捗"
    x-axis [0601, 0604, 0605, 0606, 0607, 0609]
    y-axis "進捗 (%)" 0 --> 100
    line  [60, 65, 69, 73, 76, 78]
    bar   [60, 65, 69, 73, 76, 78]
```

プレビューするとつぎのようなチャートが表示されます。

```mermaid
xychart-beta
    title "Java言語で学ぶデザインパターン入門 第3版の学習進捗"
    x-axis [0601, 0604, 0605, 0606, 0607, 0609]
    y-axis "進捗 (%)" 0 --> 100
    line  [60, 65, 69, 73, 76, 78]
    bar   [60, 65, 69, 73, 76, 78]
```

このようなチャートを表示することができ、日々の学習進捗状況を可視化することができました。

学習の進捗状況がパッと見て、把握することができるようになりました。
つぎの効果が得られています。

* 進捗を上げなければ!、という気になる
* 頑張っているな、ということがわかり自己肯定感のアップ

個人的に良い施策となりました。

最後まで読んでいただきありがとうございました。
cloudflareを利用してwebアプリを公開したい!part2(Workersセットアップ)

# はじめに
　前回記事の続きです。
　前回は、cloudflare Pagesを使ってwebページをデプロイするところまでやりました。
 　今回は、cloudflare Workersを使ってバックエンドを書こうと思います。

# 下準備
　公式ドキュメントに書いてありましたが、RustでWorkersを作成するときに[workers-rs](https://github.com/cloudflare/workers-rs)が使えると楽です。
 workers-rsをgenerateするため事前にcargo-generateをinstallしておきましょう。
 ```
cargo install cargo-generate
```
cargo-generateをinstallしたらworkers-rsを生成します。
```
PS G:\[ルートディレクトリ]> cargo generate cloudflare/workers-rs
 Favorite `cloudflare/workers-rs` not found in config, using it as a git repository: https://github.com/cloudflare/workers-rs.git
✔  Which template should be expanded? · templates\axum
 Project Name: [プロジェクト名]
 Destination: G:\[ルートディレクトリ]\[プロジェクト名] ...
 project-name: function ...
 Generating template ...
 Moving generated files into: `G:\[ルートディレクトリ]\[プロジェクト名]`...
 Initializing a fresh Git repository
 Done! New project created G:\[ルートディレクトリ]\[プロジェクト名]
```
　自分で操作する必要があるのはテンプレートの選択とプロジェクトネームの入力だけです。
　axumのお勉強もしてみたいのでaxumを選択しました。今回の要件と合わなければ後で変えるかもしれません。
　
 　生成されたら以下のコマンドで初回ビルドします。
  ```
  npx wrangler dev
  ```
  　途中で何度か選択肢が出ますが基本的にyesで問題ないです。
  　以下のように表示されたら起動完了です。curl等でlocalhost:8787に接続し確認してみましょう。
   (画像では確認のために一度GETメソッドを実行したのでGET / 200 OKが表示されています。)
   ![workers run dev preview.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3808364/f9778eb7-e16a-c152-4e6f-b835d1987ec0.png)

# デプロイ
　part1ではcloudflareのダッシュボードからgitと連携させてPagesのデプロイをしましたが、今回はwranglerを使ってCLIからデプロイします。
　コマンドは以下の通り
 ```
 npx wrangler deploy
```
　成功したらcloudflareのページが開かれ、デプロイの確認をされますのでこれを認証します。
　その後、Workers&Pagesにデプロイしたワーカーが配置されていればOKです。

 # おわりに
 　次回はpart1で作成したページから今回作成したWorkerを呼び出してみようと思います。