OmniAICreator/Qiita-1.07M huggingface dataset:
ABC297Eを解いた【優先度付きキュー?】

筆者はレート800前後の茶～緑コーダ

ABC297のE問題を解いていく
    
https://atcoder.jp/contests/abc297/tasks/abc297_e

# 実装コード

すべてのたこ焼きの値段と一番安いやつとなにか一つ買ったときの値段を優先度付きキューに入れて、値段を更新するまでキューを取り出し続ける

値段を更新したらその値段からどれか一つ買った場合すべてを優先度付きキューに入れる。

```python:main.py
import sys
def rI(): return int(sys.stdin.readline().rstrip())
def rLI(): return list(map(int,sys.stdin.readline().rstrip().split()))
def rI1(): return (int(sys.stdin.readline().rstrip())-1)
def rLI1(): return list(map(lambda a:int(a)-1,sys.stdin.readline().rstrip().split()))
def rS(): return sys.stdin.readline().rstrip()
def rLS(): return list(sys.stdin.readline().rstrip().split())
def err(*args): print(*args, file=sys.stderr)

import heapq

class Minheapq(object):
    q = []
    def push(self, v):
        heapq.heappush(self.q, v)

    def pop(self):
        return heapq.heappop(self.q)

    def get(self):
        return self.q[0]

    def values(self):
        for _q in self.q:
            yield _q

def main():
    N, K = rLI()
    A = sorted(rLI())
    q = Minheapq()
    L = [float('inf')]*K
    L[0] = A[0] 
    b = A[0]
    for a in A:
        q.push(a)
        q.push(a+A[0])
    for i in range(1,K):
        while L[i-1] == (b := q.pop()):
            pass
        L[i] = b
        for a in A:
            q.push(a+b)
    print(L[-1])    
    
if __name__ == '__main__':
    main()

```

# まとめ

公式解説は集合を使うみたいな記述をしていたが、
切ったり貼ったりを繰り返していたら
計算量が増えてむしろ遅くなったので優先度付きキューを使った。

SortedSetを使えば多分もうちょっと効率良くできる？
3D都市モデルの作成を学んでみての感想会

こんにちは。
私は、先日行われました、PLATEAUアカデミー～3D都市モデル作成コース～福岡会場を受講してきました。
学べたことも多かったですが、ここで解説するのも？？？ってなるのでは・・・と思っています。　
※実際後日テキストと講義動画公開されるみたいですしね・・・

ということで私はある意味感想ブログ、でも有意義なことが少しでも書けるよう尽力してまいりたいと思います。

その前に軽く自己紹介というか、何をやっているのか簡単に述べます。

まだ新卒二年目の駆け出しで、普段はGISを触ったりが多いですかね、測量はそんなにやってません。一応この講義についていけるくらいの知識はかろうじてありましたのでほっとしました。


それでは解説開始、流れに関しては引用します。

第１回（9月オンライン動画） ：3D都市モデル標準製品仕様書
第２回（9月オンライン動画） ：3D都市モデルデータ作成準備及び手順
第３回（対面講座3日間） ：土地利用LOD1の作成
第４回（対面講座3日間） ：都市計画決定情報LOD1の作成
第５回（対面講座3日間） ：道路LOD1の作成
第６回（対面講座3日間） ：建築物LOD0+1+2の作成①
第７回（対面講座3日間） ：建築物LOD0+1+2の作成②
第８回（対面講座3日間） ：品質検査、目視検査
第９回（9月オンライン動画・12月オンライン作業） ：アドベントカレンダー登録方法
EX　オンライン動画 ：SP対談　アドベントカレンダー活用術


まずはオンライン動画での標準製品仕様書、作成準備と手順を学びます。
これに関しては個人的に、数か月前に別の資格試験のため勉強していたこともあり耳に馴染みのある内容！！！
めっちゃ簡単といった内容ではありませんが、わかりやすく解説していただいてますし、作業の前に理解はしておいたほうが後々助かります。

そしていよいよ対面講座へ。福岡の会場はアクセスも良く最高でしたね！（1日目寒かった気もしますがもう忘れました！）

まずは土地利用・都市計画決定情報・道路LOD1の作成から始まります。基本的な流れは
①原点資料の収集整理
②幾何検査
③属性修正
④符号化
といった流れでした。

こういった類のものは地道で、決められた流れに沿っていくのがセオリーですし、GISがそこそこはできる私は実際そのまま楽にやっていました。

ここで一つ、面白そうだと私が感じた処理が交差点処理になります。
交差点処理というのは、簡単に言えば交差している道路面を区切って分割することです。
※PLATEAU標準仕様で指定されてるよ！

この処理は講習内では軽く触れる形でしたが、これは効率化もしくは自動化のやりようがあるのでは？と思いましたので、本来はこれをこの記事内でやろうと思っていました。

が、しかし私の多忙により断念・・・・いずれ必ず絶対検証しますのでこうご期待！！！


また、今回の講習で触ってみたかったFMEについても学ぶことができました。これは業務に活かせる機会があればライセンス買って勉強したいなと思います！！！


続いて建築物LOD0.1.2の作成。これはblenderも使いましたね。
blenderに関しては、初めて触りましたが、無料ソフトとは思えない操作感でした。一つ一つやるのは大変な気もしますが、これは１市町村整備してみたい！と強く思いました。

そして属性を付与し、品質検査・目視検査を行いました。
これに関しては、これで出たエラーの確認が大変だなぁ。。。と感じました。
まだ3D都市モデルを整備したことがない人からの感想でした。

結構簡単に記入しましたがこれで３日間です。短かったような、長かったような。でも得られるものは多かった感じはします。

さて、あとはこういった仕事に取り掛かりたい！ところですので、何か舞い込んでこないかなぁ。。。と思っている次第です。


最後に、このような文章？ブログ？感想文を読んでいただきありがとうございました。
まだまだ技術者としては駆け出しですので、PLATEAUも含めいろいろなものに携わっていきたいと思います。
AWSハイブリッドソリューション比較｜Outposts・Local Zones・Snow Familyの違いとコスト

| No | サービス名              | ポイント       | 特徴                        | 他のサービスとの違い         | コスト          |
|----|-------------------------|----------------------------------|--------------------------------------|-------------------------------------------|-----------------------|
| 1  | **ECS/EKS Anywhere**    | 管理コスト、ハイブリッド運用         | **オンプレミスでコンテナ管理が可能**       | **AWS外のオンプレミス環境でコンテナを管理可能**    | **低**（ソフトウェアのみ）  |
| 2  | **AWS Snow Family**     | ネットワーク非依存、移行コスト       | **ネットワーク不要でデータ移行・処理が可能**   | **オフライン環境でも大容量データ移行・処理が可能**  | **中低**（一時的な使用）   |
| 3  | **AWS Local Zones**     | レイテンシ、都市圏向けのコスト効率   | **都市圏で低過激のAWSサービスが利用可能** | **AWSインフラを特定都市に配置し、低過激を実現**  | **中**（都市圏利用向け）   |
| 4  | **AWS Wavelength**      | 超低過激、5G環境でのコスト効率       | **5G環境で超低過激アプリケーションが実行可能** | **5Gネットワーク内でエッジ処理ができる**         | **中高**（5G関連コスト）   |
| 5  | **VMware Cloud on AWS** | 移行の容易さ、既存投資の活用         | **AWS上でVMware環境が統合・実行可能**      | **既存のVMwareワークロードをそのままAWSに移行可能** | **高**（既存ライセンス依存）|
| 6  | **AWS Outposts**        | データレジデンシー、レイテンシ、統合 | **オンプレミスでAWSサービスが利用可能**  | **AWS完全マネージド環境をオンプレミスに達入できる** | **非常に高**（専用ハードウェア） |
Gitのブランチ名を変更したい

# ブランチ名の変更が必要な経緯

## 背景

Gitのブランチ名を日本語で作ってしまった
Github上でブランチ名に対するエラーが出ている

## そもそもGitのブランチ名を日本語で書かないほうがいい理由

- **互換性の問題**
   - 一部のツールやシステムでUTF-8が適切にサポートされていない可能性があり、文字化けが起こる


# 操作方法

### 1. ローカルでブランチ名を変更する
```bash
// 現在のブランチ名を変更する
git branch -m 古い名前 新しい名前

// 現在のブランチにいる場合は、このコマンドで変更可能
git branch -m 新しい名前
```

### 2. 古い名前のリモートブランチを削除する

```bash
git push origin --delete 古い名前
```

### 3. 新しい名前のブランチをリモートにプッシュする
```bash
git push origin 新しい名前
```

### 4. ローカルブランチと上流ブランチの関連付けを設定
```bash
git push origin -u 新しい名前
```
ICOSのBucket内のオブジェクト一覧を出力する

# はじめに
・・・（技術検証中）・・・
よし、これで検証中のSWが処理したファイルが全てICOSのBucketに保存されたはず。
どんな感じでファイルが保存されてるか見にいこう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/651598/87d5e0be-f802-36ec-22e4-d26c2da3b23d.png)

おぉ、ファイルがいっぱい過ぎてわからん。。。

ファイル一覧取得のAPIがあるからそれでできるか？

https://cloud.ibm.com/docs/cloud-object-storage?topic=cloud-object-storage-compatibility-api&locale=ja#compatibility-api-bucket

> バケット内のオブジェクトをリストします。 一度にリストできるのは 1,000 オブジェクトに制限されています。

1000個かぁ、超えてそうな気がする、、、どうしよう。

# 簡単なプログラム書きましょう
```javascript:index.js
require('dotenv').config();
const IBM = require('ibm-cos-sdk');
const config = {
  endpoint: process.env.COS_ENDPOINT,
  apiKeyId: process.env.COS_APIKEY,
  serviceInstanceId: process.env.COS_INSTANCEID,
  signatureVersion: 'iam',
};
const bucketName = process.env.COS_BUCKET;
const cos = new IBM.S3(config);

const getBucketContents = (bucketName, marker) => {
  const config = {
    Bucket: bucketName,
  }
  if (marker) config["Marker"] = marker
  return cos.listObjects(config).promise()
  .then((data) => {
    if(data.Contents){
      data.Contents.forEach(object => {
        console.log(`"${object.Key}","${object.LastModified.toLocaleString('sv')}","${object.Size}"`);
      })
    }
    if(data.NextMarker) getBucketContents(bucketName, data.NextMarker)
  })
}  

(() => {
  getBucketContents(bucketName)
})();
```

```javascript:.env
COS_ENDPOINT=s3.jp-tok.cloud-object-storage.appdomain.cloud
COS_APIKEY=<APIキー>
COS_INSTANCEID=<ICOSのインスタンスのCRN>
COS_BUCKET=<bucket名>
```

npmで下記をインストールするのを忘れないでください。
- dotenv
- ibm-cos-sdk

# 動いた

```console:
C:\node-apps\node-apps\icos-test>node index.js
"IBMCLOUDVPC-743-apphost-20220329114452.qcow2","2022-08-19 15:39:16","12409897472"
"IBMCLOUDVPC-743-console-20220329114452.qcow2","2022-08-19 14:28:12","11901534208"
```

ICOS内のObject名、更新日付、ファイルサイズ(Byte)でCSV出力されます。
1000件以上あってもループ処理で問題なく動きます。

# さいごに
ICOSのBucket内のオブジェクト全量の情報が欲しいと思ったのですが、あまり情報が見当たらず、自分で簡単なプログラムを書いた次第でした。
チャットツール乗り換えの変遷 (LINE WORKS, Microsoft Teams, Slack)

# はじめに
皆さんの所属組織では、どのチャットツールを使っていますか？
この記事では、私の組織でチャットツールが2回変わった経験についてお話しします。(導入当時の話なので、現在では変更なっているありますがご了承ください。)

# チャットツール導入の背景
コロナ禍でオンライン商談のために様々なツールが増えたことをきっかけに、組織内でチャットツールの導入が検討されました。
当初は、「内線電話とメールがあるし、困っていないのでは？」という声が大半。しかし、検討会が開かれ、各部門から異なる意見が出ました。

| 部門 | 推しツール | 理由 |
|:-:|:-:|:-:|
| エンジニア  |  Slack | 連携機能が豊富！  |
| 事務  |  Teams | Microsoft製で安心  |
| 偉い人  |  LINE WORKS |  誰でも簡単に使えそう |

最終的に偉い人の「 __年配者でも使いやすい__ LINE WORKSが良い」という意見で、まずは __LINE WORKS__ の導入が決まりました。

# LINE WORKSからTeamsへ
LINE WORKS を小規模のグループで試験的に導入したところ、すぐに問題が発生しました。
- グループ内で共有できるファイル合計が小さすぎる

現在ではどんな仕様になっているか分かりませんが、当時はエンジニアから不満が上がり、次に __Microsoft Teams__ を試すことに。
Teamsは全社的に導入され、当初は安定して使われていました。

# Teamsの限界と移行の決断
Microsoft Teamsは多機能で便利なツールでしたが、次第に以下の問題が浮かび上がりました。
- ノートの情報が検索しづらい
- 大型アップデートや有料化の波が到来

経営判断で __チャットツールを再度変更することに。しかし、ここで問題が発生します：
- Teamsに蓄積された重要な情報の移行が大変
- 誰でも自由にノートを書ける状況だったため、情報の整理が難しかった

結局、最終的にはすべての情報を一括で移行してからチャットツールを変更することになりました。

# slackへ
最終的に選ばれたのは Slack でした。
- アプリ連携が豊富で、エンジニアを中心に高評価
- Teamsでの情報管理の反省から、 __長期保存が必要な情報は別のツールに保存する__ ルールを徹底

導入当初は「UIが独特で使いづらい」という声もありましたが、意外にも年配者の順応が早く、すぐに組織全体が使いこなすようになりました。

# まとめ
チャットツールに限らず、どんな導入や移行でも、変更前の不安は大きくても、いざ変更してみると意外と __すんなり受け入れられる__ ことが多いですよね。

# 余談: 悪口、どうする？
チャットツールの管理者は、全てのチャット内容を閲覧できることが多いです。このことを知らずに他の人の __悪口__ を書き込む社員も少なくありません。
注意喚起をするかどうかは悩ましい問題ですが、全社員に向けて注意喚起をした結果、「チャットが監視されている」 __恐怖感__ が広がり、チャットツールが全く使われなくなった事例もあります。
注意する際は慎重に対応することが大切です。
HTTP通信でのヘッダの重要性について


こんにちは！
web開発学習中のゆういちと申します。

この記事ではWeb技術の基盤となるHTTPについて簡単に解説し、
特に重要な「ヘッダ」の役割や具体例を紹介します。
もしも間違いなどありましたらご指摘ください。

:::note
こちらの記事はウェブ開発初学者が書いたものです。
同じく学習中の方に参考にして頂きたいです。
:::

---

### ①HTTPとは
インターネット上で通信を行うためのプロトコル(取り決め事)のひとつです。
データを正しい相手に正しい状態で届けるために、様々なことが決められています。
これらを理解して正しく設定する事で、WEBサイトやアプリを適切に構築できます。

:::note
実際にはHTTPSとして内容を暗号化することにより、第三者に改ざん・盗聴されてしまうリスクを抑えた上で通信が行われます。
この記事ではHTTPの部分に着目して見ていきます。
:::
---

### ②HTTPで通信が行われる流れ
私たちはWEBページを表示・閲覧するためにブラウザを使用します。
ブラウザに見たいページのURLを入力するとHTTPリクエストが作成されて送信されます。
URLのホスト部分はDNSなどの仕組みによって名前解決されてIPアドレスになります。

IPアドレスをもとにインターネット上の経路を複数のルーティングをたどってWEBサーバーに届きます。
ルーターは「ヘッダ」の「Host」をもとにルーティングを行います。
リクエストを受け取ったWEBサーバーは、URLやヘッダを見て処理を行った上でレスポンスを作成して返します。
そのレスポンスを受け取ったブラウザは、ヘッダの情報に従ってデータを解釈したものをユーザーに表示してくれます。

このように、リクエストとレスポンスが往復でセットになっています。
しかしHTTPでは各通信がすべて独立しています。
つまり通信一回ごとに必要な情報を全て含める必要があります。
その為必要な情報をヘッダに、渡したいデータをボディ(かURL)に正しくセットする必要があります。

:::note
URLをセットすることで通信が届く仕組みになっていますが、
HTTP自体はアプリケーション層のプロトコルであり、
届いた後にどのように処理を行うのかを定めています。
:::
---

### ③ヘッダとは
ヘッダはリクエストやレスポンスの中にある、キーと値のペアの集合です。
決められたキーで値を設定することで、その通信を受け取った相手に処理してほしい内容を伝えることができます。
例えば"Content-Type"であれば、データのファイルタイプを指定します。

コンピュータ上のデータは、データ本体ではなく拡張子やメタ情報など別の場所にデータ形式を記述するのが一般的です。
HTTPにおいてはヘッダがそのデータ形式を記述する場所として利用されます。
このような必要な設定を忘れるとデータの解釈に失敗したり、セキュリティリスクが発生したりします。

---

### ④ボディとは
ボディにはデータ本体を記述します。
ヘッダで指定したデータを正しくセットします。
なおGETのリクエストではボディは使用できません。

---

### ⑤主なヘッダの項目

#### Cookie
名前と値のペアで設定します。
追加情報としてDomain,Path,HttpOnly,Secureなどいろいろな項目があり、
Cookieを発行する用途によって適切に設定します。
認証情報などのほかにもユーザーの設定や操作などの情報の保存にも使用されます。
Cookieはブラウザのストレージの専用領域に保存されます。
ブラウザはURLにリクエストを送信する際にDomainとPathにマッチしたCookieがあると、それをリクエストヘッダにセットします。


#### Set-Cookie
サーバーがレスポンスに設定することでブラウザにCookieとして保存するように指示できる項目です。

#### Host
リクエストが送信される先のサーバーのホスト名とポート番号を指定します。
ポート番号が省略された場合はスキーマに対応した番号が使用されます。

#### Referer
リクエストが送信された元のURLが記述されます。
分析などに利用されます。

#### Origin
リクエストの送信元のオリジンが記載されます。
オリジンとは、URLのスキーマ・ホスト・ポートの組み合わせです。
これら全てが一致している場合はオリジンが同じと見なされます。

Refererと似ていますが、こちらはセキュリティの観点で利用されます。
特にCORS(異なるオリジンとのデータ通信に関するセキュリティの仕組み)との関連が深いです。

#### Access-Control-Allow-Credentials
送信先でCookieなどの資格情報を別のリクエストに含めることを許可する場合に記述します。

#### Authorization
認証情報を記述します。
Basic認証やBearer認証などで使用されます。
スキーマ名 + 本文の形式で値にセットします。

#### Content-Disposition
取得したリソースファイルをどのように取り扱うかを指定します。
既定ではページ上で表示ですが、ファイルとして保存する指定も可能です。

#### Content-Type
bodyのメディアタイプを記述します。

- application/json
- multipart/form-data
- text/html
- image/jpeg
- text/css
- text/javascript

ページの表示に必要なcssやJavaScript、画像ファイルなどもこれによりHTTPで届けられるわけですね。

#### Content-Encoding
bodyのデータの圧縮方法を記述します。

#### Content-Length
bodyのデータの長さを記述します。

---

### ⑥まとめ
ヘッダの様々な設定は自動で行われることも多いですが、
フレームワークなどの利用時にも何かと必要になります。
HTTP技術のより深い部分やセキュリティリスクを知るきっかけにもなります。
MDNを見るともっと色々なヘッダの項目を知ることができます。

これらの理解も深めつつ正しくフレームワークを使いこなして、
WEBサイトやアプリケーションの開発を行いたいですね！

:::note
最後までご覧いただきありがとうございます。
- リクエストとレスポンスがセットである
- 必ずヘッダがあって中に大切な設定が書いてある
:::
day19 『イノベーションのジレンマ 』

## はじめに
　本書籍との出会いはMBA研修でした。経営学のケース分析として紹介され、まとめてレポートし発表するものでした。読んでみると経営としてありがちなジレンマ（良い判断のつもりが、結果として最悪手になる）ケースがうまくまとめられていると感じました。
 　この書籍は経営学にとって極めて著名なのですが、この書籍を読む読まないにかかわらず、この原則を知らずに経営している人々は失格・無能と思われます。

![イノベーションのジレンマ 目次2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/533414/b93cec16-5c7f-f67a-71b8-1d911e6df530.png)


## ポイント
### 持続的な優れた経営者の末路
- 業界をリードしていた企業が、ある種の市場や技術の変化に直面した時、今まで通りに頑張るほど、その地位を守ることに失敗する。例、多数。
- その企業は、競争の感覚を研ぎ澄まし、顧客の意見に注意深く耳を傾け、新技術に積極的に投資していた企業。
    - IBMのメインフレームからPC
    - 写真フィルムからデジカメ
    - 固定電話から携帯電話
    - 書店からアマゾン
    - CDからVOD
- **大手企業など優良経営企業の場合、すぐれた経営こそが、業界のリーダの座を失っった最大の理由**。
- (半端に/見せかけに)優秀で、しかし世の全体像がわからず、リスクを回避する経営者の場合は要注意。（あるある）

### 破壊的イノベーションの法則
- 原則
    1. 企業は顧客と投資家に資源を依存している。
    1. 小さな企業は大企業の成長ニーズを解決できない。
    1. 存在しない市場は分析できない。
- 反対するのは、マーケティング部門と(視界の狭い)経営陣。
- 革新的なアプローチを、市場将来性と技術将来性の全体型見て判断できる経営者は極めて少数。


### 当初の顧客の需要を満たし過ぎたことに気づかない。
- 「顧客の意見に耳を傾けよ」というアドバイスが常に正しいとは限らない。率直に言えば、間違った方向に導くことがある。

### 競争軸の変化に気付けない。見ぬふりをする。既存の判断基準から判断できない。
- HDD高速大・容量競争から、小型化・省電力競争への変化。そして低速なSSD。
- 対象顧客が、大企業（のニーズ）から、コンシューマへ。

## 書誌情報
- 書籍名：イノベーションのジレンマ
- 著者：クレイトン・クリステンセン
- 出版社：翔泳社
- ISBN：4-7981-0023-4

## 参考
-
App Runnerで画像生成アプリをさくっと(?)デプロイする

## はじめに
Amazon Bedrock(以下Bedrock)のStability AIのAPIを叩いて画像生成するアプリを趣味で作ってます。(仕事はインフラ系なので、その上で動いているものってどんな感じなのか知りたい)

気が向いたときに少しずつ開発を進めているのですが、フロントエンドはなかなか手が進まず、簡単なhtml書いてlocalhost立ててAPIリクエスト飛ばしてお茶を濁していました。

Advent Calendarの時期なので、API叩くコンテナイメージ作ってApp Runnerでデプロイして記事にすることにしました。

構成はこんな感じです。サーバレスサービスで組んでます。
Lambdaはいったんプロンプトをコードにベタ打ちし、Stability AIにリクエストを投げ、
生成された画像はレスポンスとして返しつつ、S3にも保管します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3458266/6f97e37c-49b8-f0fc-a76d-216041016649.png)

バックエンドはAPI Gateway+Lambda+Bedrock+S3で作ってます。
[Amazon Bedrockで画像生成&S3保存するPythonコードを書く](https://qiita.com/Pretzelisa/items/61c4d3838bb6ac7ff561)
[Amazon Bedrockに画像生成のプロンプトを作ってもらうPythonコードを書く](https://qiita.com/Pretzelisa/items/e9f873806ed40d853e71)

余談ですが、Bedrockの1年前とだいぶUI変わりましたね、以前はリスト形式でAIモデルが出てきた記憶があります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3458266/271b963c-10cb-b56c-e978-a9c97268b86e.png)

## Docker Imageを作る
とりあえずAPI Gatewayにリクエストを送るんだ…という勢いでDockerfileとapp.pyとrequirements.txtを書きました。app.pyだけ載せてみますが、今後ブラッシュアップします。

```py:app.py
import requests
from flask import Flask, jsonify

app=Flask(__name__)

@app.route('/hoge')
def hoge():
    try:
        response = requests.get('API GatewayのリクエストURL')
        return jsonify(response.json())
    except requests.exceptions.RequestException as e:
        return jsonify({'error':str(e)}),500

if __name__ == '__main__':
    app.run(debug=True,host='0.0.0.0',port=8080)
```

## App Runnerを立てる
docker imageをECRのプライベートリポジトリにpushし、App Runner側でリポジトリを指定してアプリをデプロイします。

## 使ってみる
アプリにアクセスしたらこんな画面になった……画面作るのは今後の課題にします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3458266/6bd9a36a-1f71-720d-fb95-591e160e3111.png)

S3には画像が保存されていました。お題はbeautiful skyです。
![beautiful sky.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3458266/6136df56-8629-90b1-6201-73692beba511.png)


## おわりに
亀の歩みというのも亀に失礼なくらいのんびりした進捗ですが、html+localhostよりは様になった…と思います。
Flaskを勉強してアプリの体裁をもうちょっと整えたいです。
プログラミング初心者向けにフレームワークとライブラリを説明する

プログラミング学習を始めた頃、フレームワーク、ライブラリというのがいまいち想像できませんでした。
「フレームワークとは」と調べた結果も開発が楽になる枠組みとか書かれていて、開発したことないと「で、結局それってなんなの？何がどう楽になるの？」状態でした。

この記事は、プログラミング言語を学び始めたときのそんな自分に説明しようと思います。

## フレームワークとは
フレームワークとはキッチンです。
シンク、コンロ、調理台?と料理するのに必要な機能がそろっています。
どこで野菜を洗うか、切るか、焼くか、が簡単に分かり、誰が利用しても概ね同じ使い方になります。

何もない荒野で野菜だけ与えられて料理しろと言われたら、石積んでコンロ作って水汲みに行って・・・料理ができないわけじゃないけど、大変だし、完成度もばらつきが生じますよね。
水がなかったから野菜の泥も入っちゃったよ！とかね。

## ライブラリとは
ライブラリはパンケーキミックスです。
パンケーキ作ろうとなったら、小麦粉と卵と牛乳と・・・って１つずつ材料揃えても完成はするけど、ホットケーキミックス使用したらめちゃ早いし楽だし、完成度も高くなります。
全然膨らまなかった！とかなりにくい。

## 開発で使うフレームワークとライブラリとは
「今から、Qiitaというメディアをあなたの知っている言語で作ってください。」

って言われて真っ黒のテキストエディタだけ提供されたら、プログラミング言語しか知らない状態でどうするでしょうか。

見た目を作るページを作成して、使用する画像のフォルダを作成して、データベースにデータをもらいに行くファイルを作成して、ロジックも書いて・・・となると思うと相当な労力です。
（そもそも、何を書き始めたらページができて、ページとページを繋ぐにはどうするのかとか調べるのも膨大でしょう）

フレームワークを使うと、ある程度必要なファイルが入ったアプリの元が立ち上がります。
どのファイルに見た目部分を作って、こう書けばこのデータを他で利用できて、という風に一定のルールに沿って簡単にアプリ作成ができるというわけです。

純粋に言語だけでコードを書いたらコード量が膨大になるでしょう。
それを簡単に、簡潔にしてくれるのがライブラリです。
テスト用のデータを勝手に作ってくれるとか、ユーザー認証がemailとpasswordの登録でできる形にすでになっているとか、本当に便利です。

## まとめ
フレームワークとライブラリがない開発なんで考えられません。
昔の人はすごい、フレームワークとかライブラリ作った人もすごい！

このおかげで、白紙を渡されて文字だけで成果物作れよということがなくなったわけですね。
Astroで自分のブログをサクッと作成しよう！

## Astroとは？
フロントエンド開発のための新しい静的サイトジェネレーターです。
ウェブサイトやブログを簡単に作成できるよう設計されています！

特徴としては、下記になります。

:::note info
### Astroの特徴
- とにかく短期間でブログやサイトが作成可能！
- コンテンツをできるだけ速く配信することを目的とした、高速なレンダリング機能
- ブログやポートフォリオサイトなど、多様なウェブサイトタイプに活用
- 必要な部分のみクライアントに配信することから、パフォーマンスが高い
:::

### 注目はパフォーマンスが高いこと！
公式に載っておりますが、他技術と比べてパフォーマンスが高いと
言われております！！

![スクリーンショット 2024-12-17 18.49.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/945342/d8bc00e8-c90d-07da-a187-e382d400cc2e.png)

## フレームワークとの連携が可能
Astroは様々なフロントエンドのフレームワークと連携が可能です！

- React
- Vue
- Preact
- Svelte
- Solid

↓これも公式に載ってますが、連携可能なフレームワーク一覧です

![スクリーンショット 2024-12-17 18.49.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/945342/844d728e-6d49-a59f-0947-bca0c68f9316.png)

## Astroの用途

用途はシンプルで、企業のホームページや個人のブログサイトにも
使われてます。

最近出てきた技術なので、使用例は少ないかもしれませんが・・・

## 使用方法
実際の使用方法について、記載します！
公式ページも載せておきます。

https://astro.build/

### Astroのインストール

下記どちらかでAstroをインストールしましょう！

```
npm create astro
```

```
yarn create astro
```

:::note info
### バージョンについて
公式は最新バージョンを指定してますが、
用途に合わせて使用ください
:::

![スクリーンショット 2024-12-17 19.05.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/945342/994328c9-008c-cbb1-6cde-7f9ca86f7010.png)

### プロジェクトの作成

公式のTopページヘッダーにある、
「Resources>Themes」を選択してください。

![スクリーンショット 2024-12-17 19.09.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/945342/514c41f4-5e25-2f61-2082-6dace0314a01.png)

そうすると下記のようなページに遷移します。

![スクリーンショット 2024-12-17 19.10.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/945342/cf49083a-c235-00f8-a856-53fcb4ecb460.png)

### ブログを例にして作成します

左側のFilterで用途によって、雛形を選択できたりします。
例えばブログを作成するなら、Blogでフィルターし「View results」を押下しましょう。

![スクリーンショット 2024-12-17 19.10.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/945342/6d4a6a5f-924a-4c91-1f01-885a62b43292.png)

### 雛形を選択しよう！
こんな感じでブログに合った雛形が出てきます！
「Free」は無料で使用でき、「Paid」は有料になるのでご注意ください！

![スクリーンショット 2024-12-17 19.14.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/945342/320f05b5-8a03-bf51-96c9-ec0bc8e5f45d.png)

:::note warn
有料の雛形もあるので注意！
:::

雛形を適当に選択すると、下記のような画面に遷移します。
ここで「Get started」を押下すると、雛形のGithubに遷移します。

![スクリーンショット 2024-12-17 19.15.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/945342/f979de80-f7e3-5e46-7f5f-fa8d45e3c7cc.png)

例：

https://github.com/eliancodes/brutal

### 雛形をクローンし、起動してみよう！

ここまで来たら単純です。
後はgitからクローンして、自分好みのブログを作成しましょう！

```
git clone {任意のcloneリンク}
```

クローンしたら、ビルドしましょう。

```
cd {クローンしたプロジェクトのパス}
npm install
npm run dev (ビルドコマンドは、package.jsonを参照)
```

### 無事起動！

![スクリーンショット 2024-12-17 19.19.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/945342/0b527d57-9453-ea4b-0346-e1c707e3d055.png)

## まとめ
クローンした後は、JavascriptやTypescript等の実装が必要ですが
雛形がある程度完成した上で作成を開始できます！

パフォーマンスも高いので、サクサクなブログやサイトを
作成できるきっかけになれば幸いです！

## 参考

Astro公式ページ

https://astro.build/
git add *をgit a*で実行？

みなさんgitコマンドを頑張って入力していますか？簡単に入力したくないですか？今日はエイリアスを使ってgitの設定をいじっちゃいましょう！

## 1. 基本設定
.gitconfigファイルに以下の設定を追加する.
```.gitcinfig
[alias]
    # ファイル操作系
    a* = add *
    aa = add --all
    au = add -u
    rm = rm
    mv = mv

    # 状態確認系
    s = status
    ss = status -s
    sh = show
    d = diff
    ds = diff --staged
    
    # コミット系
    cm = commit -m
    cam = commit -am
    ca = commit --amend
    cane = commit --amend --no-edit
    
    # ブランチ操作系
    b = branch
    ba = branch -a
    bd = branch -d
    bD = branch -D
    co = checkout
    cob = checkout -b
    sw = switch
    swc = switch -c
    
    # リモート操作系
    pl = pull
    ps = push
    psf = push --force-with-lease
    pso = push origin
    plo = pull origin
    f = fetch
    fa = fetch --all
    
    # マージ・リベース系
    mg = merge
    mgnf = merge --no-ff
    rb = rebase
    rbi = rebase -i
    rbc = rebase --continue
    rba = rebase --abort
    
    # ログ表示系
    l = log --oneline
    lg = log --graph --oneline --decorate
    lga = log --graph --oneline --decorate --all
    ll = log --pretty=format:"%C(yellow)%h%Cred%d\\ %Creset%s%Cblue\\ [%cn]" --decorate --numstat
    
    # クリーンアップ系
    rs = reset
    rsh = reset --hard
    rss = reset --soft
    cl = clean -fd
    
    # スタッシュ系
    st = stash
    stp = stash pop
    stl = stash list
    sta = stash apply
```
## 2. 使用例と解説

### 2.1 ファイル操作の効率化
- 全ファイルの追加: git ga* または git gaa
- 追跡済みファイルの追加: git gau
実行例:
before: 
```
git add --all
```
after: 
```
git aa
```
### 2.2 状態確認の簡略化
- 状態確認: git s
- 簡潔な状態表示: git ss
実行例:
before: 
```
git status
```
after: 
```
git s
```
### 2.3 コミット操作の効率化
- メッセージ付きコミット: git cm "メッセージ"
- 追跡ファイルの追加とコミット: git cam "メッセージ"
実行例:
before: 
```
git commit -m "feat: 新機能追加"
```
after: 
```
git cm "feat: 新機能追加"
```
### 2.4 ブランチ操作の簡略化
- ブランチ一覧: git b
- 新規ブランチ作成と切り替え: git swc feature
実行例:
before: 
```
git switch -c feature/new-function
```
after: 
```
git swc feature/new-function
```
### 2.5 ログ表示の改善
- シンプルなログ: git l
- グラフ付きログ: git lg
実行例:
before:
```
git log --graph --oneline --decorate
```
after: 
```
git lg
```
## 3. 応用テクニック
.gitconfigに以下のような複合コマンドも設定できる.
```.gitconfig
[alias]
    # コミットプッシュ
    cmp = "!f() { git add --all && git commit -m \"$@\" && git push; }; f"
    
    # ブランチクリーンアップ
    cleanup = "!f() { git branch --merged | grep -v '*' | xargs git branch -d; }; f"
    
    # リモートブランチ同期
    sync = "!f() { git fetch --prune && git pull && git cleanup; }; f"
```

それではQiitaアドカレ.24企画の今日のクリスマスツリーです．

> 詳しくは[こちら](https://qiita.com/JavaLangRuntimeException/items/1f4a6febf957f522ba45)の記事から

![Wondershare Uniconverter 15_000007.GIF](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3757442/39f5e38b-3e71-8b5c-155c-3f5016b981ad.gif)
お絵描きアプリのストローク入力のアルゴリズムその２

この記事は [グラフィックス全般 Advent Calendar 2024](https://qiita.com/advent-calendar/2024/graphics) 17日目の記事です。

どうも。個人で[Electron＆Webなお絵かきアプリ](https://warotarokz.sakura.ne.jp/illustmate/)を作っていたりいなかったりする者です。終わりの見えない不毛の道を歩み続けています。

# まえがき

[前回](https://qiita.com/warotarock/items/bb3260947159ac7b2b66)は単純な間引き処理を行うことで入力されたストロークのデータをそこそこ滑らかにしつつデータを削減しました。また、直角の部分で線を分割するようにもしました。そして、鋭角の部分がうまく描けないことにも触れました。

で、今回はその鋭角をそれなりにうまく描けるようにする我流のアルゴリズムについて説明します。

# 角っぽいところを検出するアルゴリズム

角（カド）の検出には下のようなモデル（概念）を考えます。

![20241217_001.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59191/ada1522f-eb08-cf2e-bfb2-85fda9d167ce.jpeg)

連続した点が５つあったとき、「①直線的なところ」と「②角になっているところ」があることを角であることの条件とするという考え方です。

ストロークに当てはめた例を見てみましょう。

下の図の左側は角になっている例で、右は角になっていない例です。ストロークに含まれる点を５つサンプルして、左のように①と②の条件が当てはまる個所は角として判定できます。また、右のように①と②のどちからでも条件に当てはまらない個所は角ではないと判定できます。

![20241217_001b.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59191/7142c5e8-86ce-5de1-7a79-b20bbbba76d3.jpeg)

ところが実際にやってみると、下の図の左のように本当の角の周囲の点で連続して角として判定されます。上で説明したモデルだと、下の図の右のように、本当の角からいくらかずれていても判定にかかってしまうんですよね…

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59191/3bf48c03-ce42-d68d-23ca-eb7de167bfcb.png)

なので、このアルゴリズムはあくまで角っぽいところを検出するアルゴリズムということです。

# 角っぽい点の中から一番角っぽい点を見つけ出すアルゴリズム

連続して角として判定された点の中から一番角っぽい点を見つけ出すには、 Perpendicular Distance を使います。

アルファベットで書くとなんか学術的ですね！でもこれは要するに直線と点の距離のことです。わざわざアルファベットで書いたのは、ストローク中の不要な点を削減するアルゴリズムとして有名な [Ramer–Douglas–Peucker法](https://en.wikipedia.org/wiki/Ramer%E2%80%93Douglas%E2%80%93Peucker_algorithm) というものがあり、そのアルゴリズムで Perpendicular Distance が使われていて、筆者はそこから着想を得たからです。

Ramer–Douglas–Peucker法は単純かつ強力で、正直これがあれば前回と今回考えたアルゴリズムなんていらんのじゃないかと思ったりもします…

それはともかく、本題の一番角っぽい点を見つけ出すアルゴリズムですが、やることは単純です。角っぽい点の最初の点と最後の点を通る直線を考えて、その直線との距離が最大の点を検索します。もともと角っぽい点として検出された点群なので、これだけで大体は「一番角っぽい点」が見つかるはずです。

![20241217_001d.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59191/e46328aa-4e86-17a0-7749-e8012522f726.jpeg)

# 作ってみた

前回やった直角の検出の前処理に今回の鋭角の判定を組み込んでみました。まだうまくいかないケースもありますが、前回よりは角の部分が入力しやすくなったと思います。

ちなみに前回は時間がなさすぎてクソコードすぎたので、他にも色々修正したバージョンです。まあクソコードなのは変わらないですが。

<p class="codepen" data-height="700" data-default-tab="result" data-slug-hash="LEPxXmV" data-pen-title="Untitled" data-user="warotarock" style="height: 700px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;">
  <span>See the Pen <a href="https://codepen.io/warotarock/pen/LEPxXmV">
  Untitled</a> by 柏崎ワロタロ (<a href="https://codepen.io/warotarock">@warotarock</a>)
  on <a href="https://codepen.io">CodePen</a>.</span>
</p>
<script async src="https://cpwebassets.codepen.io/assets/embed/ei.js"></script>

# おわりに

今回は鋭角の角を検出してみました。おそらく人類がすでに10000回はチャレンジした内容なのでしょうが、アドベントカレンダー向けに自分なりにまとめ直したことで、自作アプリで作ったときよりまたちょっと改善できた気がします。

前回も書いたようにリサンプリングとかスムージングとかをやってませんが、自作アプリ自体に関する記事もまだ書いていませんし、また次の課題にしたいと思います（今年は無理かも笑）

アドベントカレンダーも後半ですね。引き続きよろしくお願いいたします！
転職活動してみて本当に良かった

# はじめに
この記事は
転職活動して気づいた「これをやっていれば.../やってよかった」をシェアしよう by 転職ドラフト Advent Calendar 2024 
17日目の記事です

https://qiita.com/advent-calendar/2024/engineering-careers-2

ちょうど2年前の今頃に転職活動しておりました。
タイトルの通り、転職活動は「してみて本当に良かった」以外の感想がないです。
何をもってそう言えるのか、時系列に分けて書いていきたいと思います。

# 良かったポイント
## 準備段階編
### 職務経歴書で自分のこれまでの棚卸しができる
「職務経歴書を書いてみる」ということを学ぶことができたのは大きな良かったポイントでした。
転職するつもりなくても定期的に職務経歴書書くことをお勧めしたいです。

やってきたことを可視化できることで、
+ やってきたことに対する自信になる
+ 今足りていない部分がわかる
+ この先どうなりたいか見通しを立てやすくなる
と思っています。

### 自分の働く上での価値観を明確にできる
私は転職活動時、エージェントさんとお話ししながら整理していきました。
ここは絶対譲れないポイントとそうでもないポイントとを整理していただけたことで、面接時話がしやすくなりました。
自分だけで考えていた時は気付いてなかったようなポイントも掘り起こしていただけたので、第三者と話しながら価値観を整理するのとても良いなと思いました。
個人的にやりたい場合はそういった価値観を診断できるようなサイトやサービスもあるので試してみるとちょっと客観視できるのかなと思います。

## 活動中編
### いろんな会社のことを知ることができて楽しい
あまり業界の縛りなくいろいろとエージェントさんに紹介いただいたり自分で調べてみたりしていたので、面談まではせずともいろいろな会社のことを知ることができました。
普段会社のことを詳しく調べたりお話聞いたりすることはあまりないと思うので、こんな会社・仕事もあるのかと自分の視野が広がりました。
現職も業種・業界ともに全くノーマークのところから、エージェントさんに話聞いてみて面白そうだと思ったのがきっかけで面接受けることになったので、よほどこだわりや希望がない限り色んな会社のお話を聞いたり調べたりするきっかけができると良いのかなと思います。

### 普段話すことができない人たちとお話しできると刺激になる
興味あるなと思った会社とはできるだけカジュアル面談(or1次面接)するようにしたので15社くらいの方とお話ししたのですが、それぞれの方がそれぞれの思いを持ってお仕事されているのを実感できてとても良い刺激になりました。
たまたま選考進んでいた会社さんに大学の先輩がいらっしゃり、面談で会社に伺った際、コロナ禍でなかなか会えていなかった先輩と数年ぶりにお話ができた！などという面白イベントがおきたりもしました。
普段リモートワークで決まった人としか話をしない生活をしていたので、単純にいろいろな人と話をできるのが楽しかったなという思いです。

## 活動後編
### 新しい環境は刺激が多い
私の場合は転職で業種も取り扱う製品も会社の規模も大きく変化したので、とにかく毎日が刺激的でした。
無限に勉強したいことが湧いてくるということがこんなにも嬉しいことか！という思いで仕事をし始めて、2年弱経過した今もその気持ちが続いているということが本当にありがたいことだなと思っています。
今停滞しているな、と感じているなら環境を変えてみるチャンスかもしれません。

### 外から見ることで前職の良かったところを振り返ることができる
強く言いたいのはこれなのですが、転職したことで前職はここが良かったなと冷静に振り返ることができるようになりました。
現状に不満を持って転職活動をする場合、今の職場のいいことが見えない状態になってしまっていることがあると思うのですが、他の職場の話を聞くことで一歩引いて現状を考えることができるようになると思います。
私は転職前の職場に留まるという選択肢をほぼ潰した状態で転職活動していたのですが、そこは潰さずに、いろいろな会社のお話を聞いてみて、結果転職せずに留まるというのも良い転職活動だと思います。

# おわりに
準備段階編に関しては、社会人として生きていく中で常々やっておきたいことだと思います。
今年も年度末に今年やったことの棚卸しをしっかりしておきたいです。
【Advent Calendar 2024 #12日目】AWS学習〜生成AI/ML編〜 活性化関数

# はじめに
本記事は、「初めての一人アドベンドカレンダー2024 by hohe」の12日目の記事となります。12日目はニューラルネットワークに使用される活性化関数についてまとめます。

# ニューラルネットワークの計算
ニューラルネットワークは以下の計算を繰り返して、最終的な値を出力します。
1. 「重み」を掛け算する
2. 「ニューロンの値」を足し算する
3. 「活性化関数」による変換を行う

# 活性化関数とは
活性化関数とは、あるニューロンから次のニューロンへの出力過程において、入力された数値を特定の方法で変換し、その結果を出力する関数です。主に以下の関数があります。

|関数の種類|詳細|
|---|---|
|恒等関数(線形関数)|入力値を全く同じ数値に変換して出力する|
|ステップ関数|入力値が0未満の場合には常に出力値が0、0以上の場合には常に出力値が1として出力する|
|シグモイド(ロジスティック)関数|あらゆる入力値を0.0～1.0の範囲の数値に変換して出力する|
|tanh(ハイパボリックタンジェント)関数|あらゆる入力値を-1.0～1.0の範囲の数値に変換して出力する|
|ReLU（Rectified Linear Unit）関数|入力値が0以下の場合は出力値が常に0、0より上の場合は出力値が入力値と同じ値を出力する|
|Softmax関数|出力される複数の値の合計が１となるように出力する|

他にもLeakly ReLUやParametric ReLU(PReLU)、ELU、Swish、Maxoutなどが存在する。
kaggle tutorial computer vision part 3


https://www.kaggle.com/code/ryanholbrook/maximum-pooling

の解説です。Maximum Pooling はある画像にフィルターをかける操作と考えることができます。


![__results___5_0.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2627091/4f7f0f0d-a82f-2774-e810-2dbd1eee1bf5.png)

（実例：この場合は輪郭を強調）

縦の輪郭、横の輪郭、斜め線部分・・・と強調したい部分を変えることができます。
実際にはどのようなフィルターをかけるとその後にデータ処理がうまくいきやすいでしょうか？これの答えはたくさん考えられますが、実際のところフィルターは人間が設定するものではなく、分類の結果の誤差から逆算されます。

一応、コード部分の解説を行なっておくと、
TensorFlow を使って画像にプーリング処理を施し、その結果を Matplotlib を使って表示するコード

```

import tensorflow as tf

image_condense = tf.nn.pool(
    input=image_detect, # image in the Detect step above
    window_shape=(2, 2),
    pooling_type='MAX',
    # we'll see what these do in the next lesson!
    strides=(2, 2),
    padding='SAME',
)

plt.figure(figsize=(6, 6))
plt.imshow(tf.squeeze(image_condense))
plt.axis('off')
plt.show();
```

- window_shape=(2, 2): プーリングウィンドウのサイズを (2, 2) (高さ2、幅2) に設定します。これは、2x2 の領域ごとに処理を行うことを意味します。

- pooling_type='MAX': 最大値プーリング (Max Pooling) を宣言。これは、ウィンドウ内の最大値を出力として採用する方法です。他にも平均値プーリング (Average Pooling) などあります。
- strides=(2, 2): ストライドを (2, 2) に設定。これは、ウィンドウを2ピクセルずつ縦横にずらしながら処理することを意味しています。
padding='SAME': パディングを "SAME" に設定。これは、出力のサイズが入力のサイズと (ストライドを考慮して) できるだけ近くなるように、入力の周囲にゼロパディングを追加するものです。一応その後の処理のためにつけています。


このtutirialでは最終的に畳み込みニューラルネットワーク (CNN) の実装を行います。 CNN では、畳み込み層とプーリング層を組み合わせて、画像の特徴を抽出し、分類などのタスクを実行します。ここでプーリング層の説明を行なっているわけですね。
【Ruby】&:メソッド名 × yield を完全に理解したい

# はじめに

こちらはアドベントカレンダー17日目の記事です。

https://qiita.com/advent-calendar/2024/ctoa-24

本記事では、Rubyでよく見かける「&:メソッド名」という記法と`yield`の組み合わせについて解説します。

# 結論
ブロック付きメソッド内部で`yield`を引数を渡して実行すると、第一引数をレシーバとして「&:メソッド名」のメソッドを実行する。

# 「&」とは？
RubyではProcオブジェクトをあらかじめ作っておき、後からブロック付きメソッドに渡すことができます。

Procオブジェクトをブロック付きメソッドに渡すには「&」をProcオブジェクトの先頭につける必要があります。

```ruby
method(arg1, arg2, ..., &proc_object)
```

うーん、じゃあよく見るこれ何だ？ `proc_object`じゃないやん！と突っ込みたくなります。
```ruby
irb(main):001> array = ["hoge", "fuga", "Bar"]
=> ["hoge", "fuga", "Bar"]
irb(main):002> array.map(&:upcase)
=> ["HOGE", "FUGA", "BAR"]
```

実は、`to_proc`メソッドを持つオブジェクトであれば「&」を先頭につけてブロック引数として利用することができます。`:upcase`はSymbolオブジェクトです。Symbolクラスには`to_proc`メソッドが定義されているのでその条件を満たします。

```ruby
irb(main):001> :upcase.class
=> Symbol
irb(main):002> :upcase.class.method_defined?(:upcase)
=> true
```

`to_proc`メソッドはメソッド呼び出し時に実行されます。

# :メソッド名 と to_proc
ほう。Symbolオブジェクトが`to_proc`でProcオブジェクトになるならcallしたらどうなる？と思い実験。
```ruby
irb(main):001> proc_object = :upcase.to_proc
=> #<Proc:0x0000000106a51ae8(&:upcase) (lambda)>
irb(main):002> proc_object.call
(irb):2:in `<main>': no receiver given (ArgumentError)
```

レシーバが与えられてないと怒られてしまいましたね😇

実は、Symbolクラスの`to_proc`によって生成されるProcオブジェクトは`Proc#call`の第一引数をレシーバとして「:メソッド名」の「メソッド名」を実行します。

以下の例では、`"Fuga"`をレシーバとして`upcase`メソッドが実行されていることがわかります。

```ruby
irb(main):003> proc_object.call("Fuga")
=> "FUGA"
```

# yieldについて
`yield`はブロック付きメソッド内でブロックを呼び出す際に利用します。`yield`に引数を渡すと、その値はメソッドに渡されたブロックの引数としてブロック実行時に利用されます。

これを応用すると、`Proc#call`のレシーバをメソッド内で指定してブロックの処理を実行することができます。

```ruby
irb(main):001* def fuga
irb(main):002*   yield("fuga")
irb(main):003> end
=> :fuga
irb(main):004> fuga(&:upcase)
=> "FUGA"
```

# mapの実装
ちなみに`Array#map`の実装を読むと、配列の要素である`value`を`yield`の引数として渡しており、これによって配列の各要素がレシーバとなってメソッドが実行されるということになります。
```ruby
result << yield(value)
```
https://github.com/ruby/ruby/blob/master/array.rb#L236-L250


# 参考

https://docs.ruby-lang.org/ja/latest/doc/spec=2fcall.html#block
https://docs.ruby-lang.org/ja/latest/method/Symbol/i/to_proc.html
[Rust]関数とライフタイム

## ライフタイムの必要性

宣言された変数はスコープを抜けるとドロップされ、もう参照することはできません。そのため、ある変数`A`を参照するための別の変数`B`が存在している場合、`A`が生存できるスコープ外で`B`を参照しようとするとコンパイルエラーになります。

```rust
fn main() {
    let r;
    {
        let x = 5;
        r = &x; // エラー: `x`はこのスコープを抜けるとドロップされる
    }
    println!("r: {}", r); // ここで参照`r`を使うのはダングリングになる
}
```

このコンパイルエラーを検出するために、Rustには「ライフタイム」という仕組みが存在します。変数ごとのライフタイムを管理することで、ダングリングを防止します。

:::note
ダングリングとは、ポインタが不正なメモリ位置を参照してしまうことを指します。
:::

## 関数とライフタイム

ダングリングを防止するためにライフタイムは存在するため、関数が戻り値を返すとき、その戻り値のライフタイムも正しく把握する必要があります。そうでないと、関数を抜けた後に戻り値を参照してダングリングが発生する恐れがあります。

例えば、`String`への参照を返す関数があったとして、その戻り値は関数内で宣言された変数への参照だったとします。このような実装をしてしまうと、それはコンパイルエラーになります。

```rust
fn invalid_reference() -> &String {
    let s = String::from("Hello");
    &s // エラー: `s`は関数が終了するとドロップされる
}

fn main() {
    let r = invalid_reference();
    println!("{}", r);
}
```

これがエラーになるのは、参照先の変数は関数を抜けた段階でドロップされ、無くなってしまうからです。関数が終了して呼び出し元に処理が戻った時、戻り値が指し示すメモリにはもうデータは存在しません。すなわちダングリングが発生してしまうため、ライフタイムが関数に限られている変数は返せないのです。

### 明示的なライフタイムの指定

関数の戻り値のライフタイムは明示的に指定することが可能です。関数においてライフタイムを扱いたい場合（指定したい場合）は、`<'a>`を用います。この`'a`を、**ジェネリックなライフタイム**と呼びます。

関数にジェネリックなライフタイムを導入するメリットは何でしょうか。それは、戻り値のライフタイムを指定できることにあります。関数内で宣言した変数への参照の返却が失敗するのは前項の通りですが、たとえ引数を基に参照を返却しようとしてもエラーになるケースが存在します。

例として、二つの`&str`を受け取り、長い方を返却する関数を考えます。ライフタイム注釈が無いとコンパイルエラーになります。

```rust
fn longest(x: &str, y: &str) -> &str {
    if x.len() > y.len() {
        x
    } else {
        y
    }
}

fn main() {
    let str1 = String::from("long string is long");
    let str2 = "short";

    let result = longest(str1.as_str(), str2);
    println!("The longest string is '{}'", result);
}

```

なぜかというと、戻り値のライフタイムを決定できないからです（`x`かもしれないし`y`かもしれない）。ダングリングを防ぐには戻り値のライフタイムを把握する必要がありますが、どれくらいのライフタイムを持つのかが判断できません。
ただし、判断できないと言っても全く手掛かりがないわけではなく、少なくとも引数`x`か`y`のライフタイムのどちらかではあるはずです。そこで、ジェネリックなライフタイムを使うことで、そのことをコンパイラに教えることができます。

```rust
fn longest<'a>(x: &'a str, y: &'a str) -> &'a str {
    if x.len() > y.len() {
        x
    } else {
        y
    }
}

fn main() {
    let str1 = String::from("long string is long");
    let str2 = "short";

    let result = longest(str1.as_str(), str2);
    println!("The longest string is '{}'", result);
}
```

引数は二種類なので、厳密にいえば`x`と`y`のライフタイムは異なります。そのため、`'a`と`'b`の両方書かなければならないように思えますが、上記のサンプルコードのように書くと、自動的に`x`と`y`のライフタイムのうち短い方が`'a`に設定されます。そのため、どちらのライフタイムが短いかを気にすることなく、ただ短い方の参照が返ることを`-> &'a str`で表現できるのです。

:::note
これは借用という機構をもつRustならではの仕組みです。正直なところ開発者としては難しいだけのように思えますが、コンパイラが丁寧に怒ってくれるので実際はそこまで悩まないで済むかもしれません。
ちなみに、引数が一つしかない場合など、コンパイラが自動でライフタイムを推定してくれて必ずしもライフタイム注釈を書かなくてもいいケースがあります（これまで書いてきたもののほとんどがそう）。
:::
ExcelのVBAで複数列のSORTを3行で記述する

# Rangeオブジェクトを並び替える

左のデータを右のようにソートしたいとします
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/411106/7c1fefd2-3eb1-3371-bd26-979351be9445.png)

sort関数の第2引数にsortしたい列をバリアント配列で渡すことにより複数列を指定できます
```vb
With Range("A2:C16")
    .Value = WorksheetFunction.sort(.Value, Array(2, 1))
End With
```

降順にsortしたい場合は第3引数に1昇順,-1降順をバリアント配列で渡すことにより指定できます
```vb
With Range("A2:D16")
    .Value = WorksheetFunction.sort(.Value, Array(2, 1), Array(-1, 1))
End With
```

セル関数の、SORT関数で複数列をソートする方法を、VBAのコードで実現しています

https://nyanto.jimdofree.com/%EF%BD%B4%EF%BD%B8%EF%BD%BE%EF%BE%99%E9%96%A2%E6%95%B0-%E8%AA%AC%E6%98%8E/sort%E9%96%A2%E6%95%B0%E3%81%AE%E4%BD%BF%E3%81%84%E6%96%B9-%E7%AF%84%E5%9B%B2%E3%81%AE%E3%83%87%E3%83%BC%E3%82%BF%E3%82%92%E4%B8%A6%E3%81%B3%E6%9B%BF%E3%81%88%E3%81%A6%E8%A1%A8%E7%A4%BA/sort%E9%96%A2%E6%95%B0%E3%82%92%E8%A4%87%E6%95%B0%E6%9D%A1%E4%BB%B6%E3%81%AB%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95-%E3%82%A4%E3%83%B3%E3%83%87%E3%83%83%E3%82%AF%E3%82%B9%E3%81%A8%E9%A0%86%E5%BA%8F/


# 参考までにユーザ定義の１次元配列を並び替えるには
```vb
    配列 = Array(5, 4, 3, 2, 1)
    '第3引数がTrueで並び換え基準に列方向を指定
    配列 = WorksheetFunction.Sort(配列, , , True)
    '注意：代入先の変数の型はバリアント型でないとダメ
```
Visual Studio Codeにより起動したJupyter Notebookからuvで作成したカーネルを選択する手順

## 概要

「Visual Studio Code（VS Code）により起動したJupyter Notebook（ノートブック）からuvで作成したカーネルを選択する手順」を紹介します。

https://code.visualstudio.com/

https://jupyter.org/

https://docs.astral.sh/uv/

## 準備

uvの使用が可能な状態にしてください。

```shell
uv --version
```

```shell
uv 0.5.6
```

## 手順

### 想定する場面と必要な手順

プロジェクト自体を作成しご自身の開発環境に導入する場合は、以下の手順を実行してください。

- ⓪プロジェクトの用意
- ①仮想環境の作成
- ②仮想環境の使用
- ③カーネルの作成
- ④カーネルの選択

共同作業など共有を受けたプロジェクトに対してご自身の開発環境に導入する場合は、以下の手順を実行してください。

- ①仮想環境の作成
- ②仮想環境の使用
- ③カーネルの作成
- ④カーネルの選択

上記のいずれかの手順を終えた上で改めてVS Codeにてノートブックを起動させる場合は、以下の手順を実行してください。

- ④カーネルの選択

### ⓪プロジェクトの用意

新規にuvで管理するプロジェクトを作成する場合は、以下のコマンドを実行してください。`project-name`には任意の名前を指定してください。

```shell
uv init project-name
```

以下が作成されます。

```sh
project-name
├── .python-version
├── README.md
├── hello.py
└── pyproject.toml
```

既存のプロジェクトにuvを導入する場合は、プロジェクト直下で以下のコマンドを実行してください。

```shell
uv init --no-workspace
```

プロジェクトとなるディレクトリの直下に対象の`ipynb`ファイル（例：`example.ipynb`）が配置されている状態にしてください。任意ですが、`hello.py`は削除します。

```shell
project-name
├── .python-version
├── README.md
├── example.ipynb
└── pyproject.toml
```

そして、uvによって対象となるノートブックの実行に必要なパッケージをインストールしてください。

https://docs.astral.sh/uv/concepts/projects/dependencies/#dependency-tables

`uv.lock`が作成されます。

```shell
project-name
├── .python-version
├── README.md
├── example.ipynb
├── pyproject.toml
└── uv.lock
```

### ①仮想環境の作成

以下のコマンドにより仮想環境を作成してください。

```shell
uv venv
```

すると`.venv`という名称の仮想環境が作成されます。

```shell
Using CPython 3.13.0
Creating virtual environment at: .venv
Activate with: source .venv/bin/activate
```

後述する「②仮想環境の使用」においては`source .venv/bin/activate`というコマンドを使います。

仮想環境の名前を指定する場合は以下を実行してください。`venv-name`には任意の名前を指定してください。

```shell
uv venv venv-name
```

すると`venv-name`という名称の仮想環境が作成されます。

```shell
Using CPython 3.13.0
Creating virtual environment at: venv-name
Activate with: source venv-name/bin/activate
```

後述する「②仮想環境の使用」においては`source venv-name/bin/activate`というコマンドを使います。

### ②仮想環境の使用

仮想環境の作成によって出力された`Activate with: `以降のコマンドを実行し、仮想環境を使用してください。

```shell
source .venv/bin/activate
```

```shell
source venv-name/bin/activate
```

以降で仮想環境の使用を止める際は、以下のコマンドを実行してください。

```shell
deactivate
```

### ③カーネルの作成

以下のコマンドにより`ipykernel`をインストールしてください。

```shell
uv pip install ipykernel
```

以下のコマンドによりカーネルを作成してください。`kernel-name`には任意の名前を指定してください。個人的にはプロジェクトの名前を指定します。

```shell
ipython kernel install --user --name=kernel-name
```

### ④カーネルの選択

VS Codeによりノートブックのカーネルとして、ここまでで作成したカーネルを選択します。

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/408337/560d5682-9d3c-a80f-53f6-8859727f86b1.png)

これにより、VS Codeにより起動したノートブックからuvで作成したカーネルを選択することができます。

以降、状況にもよりますがVS Codeによりノートブックを起動した時点でデフォルトのカーネルとして指定されることがあります。

手順は以上となります。

## その他

以下の手順については共同作業を円滑にする目的で`README.md`に記述することをおすすめします。

- ①仮想環境の作成
- ②仮想環境の使用
- ③カーネルの作成
- ④カーネルの選択

:::note info
記事に改善の余地がある場合は、編集リクエストを送っていただくか、コメントを投稿していただけますと幸いです。
:::
最初に「あい」を学ぶことば日本語でプログラミング入門（ステップ５なでしこでお嬢様コーディング）

# はじめに
本記事シリーズは母国語のプログラミング言語が存在するという文化的価値をアピールするためのもので、プログラミング一般の入門を意図するものではありません。じゃあどんな意図なんですかということでございますが、これはまあ日本語プログラミング言語ユーザー相互の交流目的という建付けでございます。今回はなでしこでいわゆる「お嬢様コーディング」してみます。わたし的に「お嬢様コーディング」というとなんとなく「[なでしこさん](https://qiita.com/snowdrops89/items/336a223e6ea052ef9688)」でございます。
。

## なでしこ
なでしこ(V1の場合)は、日本語に近い語順で記述できる、オープンソースのインタプリタ言語で実装言語はDelphi（デルファイ）です。知らない方むけに念のため。
実装言語がC#の中間コードコンパイラ言語V2の開発は中断されて、現在はWebアプリケーションでもあるAltJSのV3に開発の力点をシフトしました。実装言語はNode.js(JavaScript)。V1は新規の機能は追加されていませんが現在もメンテ・利用されつづけています。なでしこは2005年に登場し、来年2025年で生誕２０周年を迎えます。

## なでしこの入手方法
なでしこバージョン1(Windows版)を下記の公式サイトからダウンロードできます。

https://www.nadesi.com/index.php?%E3%83%80%E3%82%A6%E3%83%B3%E3%83%AD%E3%83%BC%E3%83%89


# お題のソースコード
```mind:ai.nako
愛するとは
    人や物事を大切に思う心のことでございますわ。
```

[前回](https://qiita.com/mylifewithviolin/items/94a1cc95a1ad511635df)に続き、これをプログラムとして実行してみます。出現する単語を定義しておけば、なでしこはあらゆる文章をプログラムとして受け付けるはず。（ただし文意を維持して実行できるようにするには工夫が必要です。）

なでしこの場合はこのようなひらがなをどのように処理するのかは実はわかっていません。Mindと同じ雰囲気でとりあえず書いてみます。

```mind:ai2.nako
人は　　"自分や自分以外の人間、"
物事は　"もろもろの物や事柄を"
大切は　"大事に思っている心のありようのことで、漢字では「愛」と表記いたします。"

●思う心のことでございますわ（人や物事を大切に）
　「｛人｝｛物事｝｛大切｝」を表示。

●愛するとは
    人や物事を大切に思う心のことでございますわ。

愛する。
```

# お題のソースコードを実行
では、実行してみます。実行環境はなでしこパッドです。

![nadesikoai1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3118036/2365c8dc-217f-6984-8936-d08b3b279699.png)

シンタックスハイライトの付き具合的には「とで」が予約語助詞としてひっかかっているっぽいです。
実行ファイルは作成できましたが、実行時に下記のエラーとなりました。

```
C:\nadesiko\sample1>ai2.exe
[エラー] nadesiko.nako(5): グループ付関数の定義に失敗。
```
いくつかのお嬢語（とわたしが思っているフレーズ）で逃げてみましたが、ちょっと成功する言い回しが思いつきませんでした。（スミマセン）

「スミマセン」とカタカナで書いてひらめきました！もしかしてカタカナ助詞はないかも！てなわけで、下記のような感じの場合は

```mind:ai2.nako
●思う心ノコトデゴザイマスワ（人や物事を大切に）
　「｛人｝｛物事｝｛大切｝」を表示。

●愛するとは
    人や物事を大切に思う心ノコトデゴザイマスワ。

愛する。
```

無事に実行成功しました:tada:
```
C:\nadesiko\sample1>ai2.exe
自分や自分以外の人間、もろもろの物や事柄を大事に思っている心のありようのことで、漢字では「愛」と表記いたします。
```


# おわりに
いかがでしたでしょうか？わたしはわが国に母語によるプログラミング言語が存在することを誇りに思っております。言語は文化。こんにちの日本語のポップスやアニメソングなどが海外でそのまま歌われるような近況を鑑みますと、純然たる技術基盤として超強力な米欧発プログラミング言語勢と存在意義を争うこともなく、日本語の文化として海外でも日本語プログラミング言語の愛される日が来るのやもしれません。
LambdaからSecret Managerへ接続: NAT GatewayがあってもVPCエンドポイントが優先される

# 概要
VPC内からVPCの外のリソースに接続するには、以下の2通りがある
- VPCエンドポイント
- NATGateway

SecretsManagerへのアクセスはVPCエンドポイントが良いだろうと思いつつ、手動ですぐに試す方法としてすでにNATGatewayにアクセスできるセキュリティグループがあったのでそれを、Lambda関数に割り当てたが、うまくいかなかったので調べた話。あまりないケースかもしれないが、メモとして残しておく。

# 結論
別リソースですでにsecretsMangaerのサービスのVPCエンドポイントが作成されていた。
ネットワークの解決としては、まずVPCエンドポイントがあれば、それが利用される。(NatGatewayの経路は利用されない)VPCエンドポイントのセキュリティグループにはLambdaにセットしたセキュリティグループを許可していないため、通信できない状態になっていた。。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52335/4926831c-c3ec-a1c1-14fd-ec1aa4840f3a.png)

↑の経路になっていると勘違いしていため、少し確認に時間がかかってしまった。
Lambdaをテスト実行して、SecretsManagerにアクセスする際のIPがVPCのIPになっていてようやく気がつくという・・
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52335/d369044e-c9e8-119f-cc98-8216f610b5ae.png)



以上です。
ABC154Dを解いた【確率,累積和】


筆者はレート800前後の茶～緑コーダ

ABC154のD問題を解いていく
    
https://atcoder.jp/contests/abc154/tasks/abc154_d

# 実装コード

p面サイコロの期待値は
(p+1)/2で出せる

あとはK区間の総和なので累積和して最大値を記憶すればOK

```python:main.py
from itertools import accumulate
import sys
def rI(): return int(sys.stdin.readline().rstrip())
def rLI(): return list(map(int,sys.stdin.readline().rstrip().split()))
def rI1(): return (int(sys.stdin.readline().rstrip())-1)
def rLI1(): return list(map(lambda a:int(a)-1,sys.stdin.readline().rstrip().split()))
def rS(): return sys.stdin.readline().rstrip()
def rLS(): return list(sys.stdin.readline().rstrip().split())
def err(*args): print(*args, file=sys.stderr)


def main():
    N, K = rLI()
    P = rLI()
    S = [0]+list(accumulate(map(lambda p:(p+1)/2,P)))
    m = 0
    for i in range(K,N+1):
        x = S[i] - S[i-K]
        if x > m:
            m = x
    print(m)
    
if __name__ == '__main__':
    main()

```

# まとめ

確率や期待値の問題が得意ではないが
こういうシンプルな解法ならできるようになってきた
IaCジェネレーターとBedrockで詳細設計書を生成してみた

# はじめに
とりあえずAWS環境をつくってみたけど、エクセルの詳細設計書に起こすのが面倒くさくてやりたくないことありませんか？
私はあります。
コンソールからエクセルに、ひたすらパラメータを転記する不毛な作業から解放されたいのです。
じゃあ、代わりに生成AIにやらせればいいじゃん。
ということでやってみました。

# 手順
こんな手順です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2740559/e71a386d-f04b-6589-5453-b0b1f5abcfc2.png)


# 構成図
今回詳細設計書を生成してみるサンプル環境はこちらです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2740559/63a07edb-27a9-72db-f024-ab7ae0caa1fd.png)

# やってみた
実際の画面を交えてご説明します。

### IaCジェネレータでテンプレート生成
コンソールからIaCジェネレータの画面に移動します。
初めて使う場合は、「新しいスキャンを開始」ボタンを押下し、アカウント内のリソースをスキャンします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2740559/7a7d2c89-b700-2c69-2090-54e3f9ab600f.png)

スキャンがおわったら、テンプレートとして出力したい対象リソースを選択していきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2740559/add62a17-f6f1-3adc-edc9-7fb33b529e7f.png)

選択し終えたら、「テンプレート生成」ボタンを押下します。
こちらが生成されたyaml形式のCloudFormationテンプレートの一部です。
実際には、この下もズラーっと書いてあります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2740559/1ac4eaba-85ca-93f5-7572-0c3ed20f973f.png)

### Bedrockにcsv形式で詳細設計書を出力してもらう

Bedrockの画面に移動し、「Chat/Text」画面を表示します。
使用したモデルは、Claud 3 Haikuです。
サンプルプロンプトは下記の通りです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2740559/d2e62ffb-8d79-17d5-2bbc-7bbbc1ed21c0.png)

```
あなたは、AWS環境の構築担当者です。
<yml>
ここに生成したCloudFormationテンプレートを記載
</yml>

<yml></yml>タグの中に記載されたyml形式のCloudFormationテンプレートから、エクセルの詳細設計書を作成してください。
```

あとはAIがシートの構成を勝手に考えてくれるので、問題なければ、csv形式でチャット上に出力してもらいます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2740559/30d293a7-f335-0cdb-b45e-790c3c637472.png)


### 手動でエクセルに転記
ここは手動でやりました。
チャットに出力されたcsv形式のテキストを、エクセルにコピペします。
表の色も手動で塗りました。
VPCシートはこんな感じになりました。
結構いい感じな気がします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2740559/0a61ac50-b907-ae1b-78d8-f2d338571145.png)


# いいところ
- 手軽、且つ、爆速で詳細設計書を作成できる
- 思ったよりもいい感じにシートを分割してくれる

# わるいところ(改善ポイント)
- シートの分割案をBedrockが提案してきた時点では、
InternetGW等のリソースは、「VPC」シートに記載されるはずだったが、
CSV形式での出力時では、「OTHERS」シートに記載されてしまった

⇒プロンプト改善すれば修正できそう

- SecurityGroupの設定値が途中で…になって勝手に省略されてしまう

⇒プロンプト改善すれば修正できそう

- Bedrock君のほうでcsv形式のファイルをが出力してほしい

⇒Agent for Bedrock + Lambdaで実現できそう

# おわりに
面倒なことは生成AIに任せてみましょう。
意外と使えそう。と感じるかもしれません。
Emacs Lisp 超初心者がコマンドを作ってみる 〜初めての関数〜

# 準備

1. サンプルの rev-list-options.po を C-x C-f で開きます(po-modeになります。po-modeにならないときは po-mode をパッケージインストールしてください)
1. po-ediff-previous-msgid.el を C-x C-f で開きます。

# 最初の関数
````common_lisp:po-ediff-previous-msgid.el
(defun po-ediff-previous-msgid ()
  "Ediff previous msgid (marked #| ) and msgid."
  (po-find-span-of-entry)
  (po-get-msgid))
````
まずは関数の定義です

(defun hogehoge (引数1 引数2 ... ) "説明" body1 body2 ... )

ですけど、読みにくいので、通常は上記のように改行して書きます。

"説明" はこれっきり1つで済ませます。 説明のうしろは全部本体です。 body は幾つ並べ得てもいいです。同じレベルのを順番に実行(評価)します。

なお、最後の評価結果が関数の戻り値となるのが C言語 の return なんかと違うところです。  このため、処理結果を格納した値をわざと最後に単独で (resultvalue) とか置いたりします。


# 関数の登録

この関数を登録するには、これを評価します。再度評価すると新しい定義に更新されます。  我々が普段「関数の実行」と言っているのは、厳密にいうと「関数の呼び出し」です。わりナチュラルに混同しますので、文脈で使い分け、分からない時は素直に尋ねた方がよいでしょう。

さてこの関数を登録(更新)する操作は C-M-x (CTRL+ALT+x) です。

# 関数の実行(評価)

登録したら早速試してみましょう。
サンプルのバッファに行って、適当なエントリに行って、 M-: (ALT+:)で eval: とプロンプトが出るので

````common_lisp
(po-ediff-previous-msgid)
````

とすると、ミニバッファーに結果が表示されます。 msgid の文字列(とその後ろにごちゃごちゃ)が表示されます。後ろのごちゃごちゃは文字のプロパティです。ここではとりあえず気にしなくていいです。

今回はここまで。
Ubuntuで、Dokployを導入する方法&使い方

UbuntuでDokployを構築する方法について紹介します。Dokployを使用すれば、アプリケーションのデプロイが簡単になります。本記事では、Ubuntu環境でDokployをセットアップし、基本的なデプロイを実行する方法を解説します。

## 1. Dokployのインストール
Dokployのインストールスクリプトを使用して、Ubuntuサーバーに導入します。

```bash  
curl -sSL https://dokploy.com/install.sh | sh  
```
### 2. Dokployにアクセス

ブラウザで `http://<サーバーIP>:3000` にアクセスし、アプリケーションが稼働していることを確認します。

### 3.実際にデプロイしてみる
1. 右上にある `Create Project`をクリック
2. 名前を入れ、次へを押す
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3474929/aeb8bfe5-c431-9ea0-afe5-2283d2fff19b.png)

3. `Create Service` を押し、今回の場合は`Template`を押す。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3474929/f582c4c8-0599-6e34-b964-61a57a9f18f4.png)

3. 好きなサービスを選び、`Create`を押す。
 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3474929/946099f5-5a5b-6ddc-c108-d78ba32168ef.png)

3. Createボタンが押したら、確認ボタンが出ると思うので、今回の場合は、何も選択せずに`Confirm`を押す
3. サービス名をクリックし、`Deploy`をクリックする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3474929/a6355c11-53bf-b345-5524-2fd003fa8931.png)

3. 起動を確認し、喜ぶ！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3474929/d7125c00-e16c-6912-1862-6e3d30f9c838.png)
## 6. まとめ


Dokployを使うことで、簡単にDockerアプリケーションをデプロイすることができます！皆様もご検討してみるのもいいかもしれません！
ER図をGitHubのリポジトリ内に置く

# はじめに

こんにちは、エンジニアのkeitaMaxです。

ER図をGitHubのリポジトリ内に置いて、いつでもGitHubで見れるようにしようと思います。

# VSCodeの拡張機能のインストール

VSCodeで作成していくので、

`Draw.io Integration`をインストールします。

https://marketplace.visualstudio.com/items?itemName=hediet.vscode-drawio

そして`document/db.dio.svg`ファイルを作成します。

`document/db.dio.svg`ファイルをVSCodeで開くとかのようになります。

![スクリーンショット 2024-12-17 21.27.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3715123/e327d69e-7b7d-0b96-f236-51110fbf4337.png)

# 記載

![スクリーンショット 2024-12-17 21.28.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3715123/53039585-b61e-0069-664e-cbb7d7de71cc.png)

左メニューにテーブルがあるのでこれを使用してER図を作成します。

今回は以下のように作成しました。

![スクリーンショット 2024-12-17 21.29.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3715123/22d4c627-f0d9-fe88-ee60-645056fbdb6e.png)

# GitHubでみてみる

GitHubにPushして確認してみます。

![スクリーンショット 2024-12-17 21.30.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3715123/c3a883a8-029d-bb27-a17f-850626e4020b.png)

このようにGitHub上で見ることができます。

`*.dio.svg`という拡張子にしているとGitHub上で見ることができるようです。

# おわりに

この記事での質問や、間違っている、もっといい方法があるといったご意見などありましたらご指摘していただけると幸いです。

最後まで読んでいただきありがとうございました！
【TryHackMe】Google Dorking：Walkthrough

# 概要

TryHackMe「Google Dorking」のWalkthroughです。

https://tryhackme.com/r/room/googledorking

# Task2

## **Q1**.*Name the key term of what a "Crawler" is used to do*

**A**.**Index**

## **Q2**.*What is the name of the technique that "Search Engines" use to retrieve this information about websites?*

**A**.**Crawling**

## **Q3**.*What is an example of the type of contents that could be gathered from a website?*

**A**.**Keywords**

# Task4

## **Q1**.*Where would "robots.txt" be located on the domain "ablog.com"*

**Hint**.*full path!*

**A**.**ablog.com/robots.txt**

## **Q2**.*If a website was to have a sitemap, where would that be located?*

**A**.**/sitemap.xml**

## **Q3**.*How would we only allow "Bingbot" to index the website?*

**A**.**User-agent: Bingbot**

## **Q4**.*How would we prevent a "Crawler" from indexing the directory "/dont-index-me/"?*

**A**.**Disallow: /dont-index-me/**

## **Q5**.*What is the extension of a Unix/Linux system configuration file that we might want to hide from "Crawlers"?*

**Hint**.*system files are usually 3/4 characters!*

**A**.**.conf**

# Task5

## **Q1**.*What is the typical file structure of a "Sitemap"?*

**A**.**XML**

## **Q2**.*What real life example can "Sitemaps" be compared to?*

**A**.**Map**

## **Q3**.*Name the keyword for the path taken for content on a website*

**A**.**Route**

# Task6

## **Q1**.*What would be the format used to query the site bbc.co.uk about flood defences*

**Hint**.*site:bbc.co.uk &lt;query>*

**A**.**site: bbc.co.uk flood defences**

## **Q2**.*What term would you use to search by file type?*

**A**.**filetype:**

## **Q3**.*What term can we use to look for login pages?*

**Hint**.*term: query*

**A**.**intitle: login**