OmniAICreator/Qiita-1.07M huggingface dataset:
【VSCode】オシャレな配色テーマにできる拡張機能５選！

今回は、私自身が実際に使っている配色テーマや、オシャレだなと思ったVSCodeの拡張機能である配色テーマを５選紹介します！



## 1.Noctis

https://marketplace.visualstudio.com/items?itemName=liviuschera.noctis

Noctisは、全部で11色あり、そのうちの８色はダーク系の色、残りの３色はライト系の色があります。目に優しい青緑系の配色が多く、多くの人にとって使いやすい拡張機能の一つです。私はNoctis Azureusを愛用しており、おすすめの一つです！
![Noctis.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3524127/be03ab31-6453-8d17-7678-33d09de661f5.png)


## 2.GitHub Theme

https://marketplace.visualstudio.com/items?itemName=GitHub.github-vscode-theme


GitHub Themeは、GitHubのウェブサイトのデザインやスタイルに基づいて作成されたVSCodeのテーマで、GitHubをよく利用する開発者にとっては使いやすい環境を作成できます！

![GitHub.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3524127/1919bf6b-d8f3-be40-ac8b-eb581a1ed785.png)


## 3.One Dark Pro

https://marketplace.visualstudio.com/items?itemName=zhuangtongfa.Material-theme

One Dark Proは、Atomの象徴的なテーマで、ダーク系のテーマ色で４色をおり、洗練されたダークモードに変更できますまた、人気のあるテーマの一つであり、多くの開発者によって好まれています。

![One Dark Pro.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3524127/ddbec5b4-bb87-1cc6-dd12-936533fd31cb.png)



## 4.Ayu


https://marketplace.visualstudio.com/items?itemName=teabyii.ayu

Ayuは、「Ayu Mirage」、「Ayu Light」、「Ayu Dark」 などがあります。それぞれのテーマは、異なる色調やアクセント色を持っており、自分の好みに合わせて選択できるようになっています。

![Ayu２.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3524127/b6f49f44-69f0-ed53-6daa-918783f443bb.png)






## 5.Kawaii Theme

https://marketplace.visualstudio.com/items?itemName=diff001a.kawaii-theme

Kawaii Themeはピンクをモチーフとし、甘くて可愛いテーマは異色となっています。コードも見やすく、ピンクが好きな方にはおすすめな配色テーマです！

![Kawaii Theme.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3524127/a13e4fa6-102b-f51f-2da3-6e70b5349ff0.png)



## 最後に
気になった配色テーマをぜひインストールしてみてください。
もし、VScodeの拡張機能でこれオススメ！みたいなのがありましたら、ぜひ教えてください！
今回も記事を読んでいただきありがとうございました！
[VBA] 選択したセルに反応して値を得る方法

# はじめに
仕事でVBAを勉強する必要があったので、勉強のメモ


# 目的
選択したセルの値によって、特定のセルに条件を満たすような値を表すようにしたい。

# Code

```vb
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
 
    ' 選択セルが 2個以上、空白、数字ではないなら終わらせる
    If Target.Cells.Count > 1 Or IsEmpty(Target) Or Not IsNumeric(Target.Value) Then
        ActiveSheet.Cells(8, 6).Value = ""
        Exit Sub
    End If
    
    If Target.Value <> 0 Then '0で割らないようにする
    
        ActiveSheet.Cells(8, 6).Value = ActiveSheet.Cells(8, 2).Value * Target.Value
    
    End If
    
End Sub

```

# 結果

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821152/dba41a84-8f05-a4bf-b15f-31716f47340f.png)



![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821152/35783ad1-110b-56f1-9d2b-6c15cc5c400c.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821152/edade982-6bcc-56e9-7d88-74e78df7f019.png)


# 終わりに
選択したセルの値に反応し、上の式のような結果を表示するようにできた。
数字でないセル、空白のセルを選択した場合、空白の結果を返すようにした。
LINEのjapanese-large-lmをDatabricksで動かしてみる

LLMのニュースが出たらとりあえず動かしてみるのがルーチンに。

https://engineering.linecorp.com/ja/blog/3.6-billion-parameter-japanese-language-model

https://huggingface.co/line-corporation/japanese-large-lm-3.6b

こちらはサンプルそのままで動きました。

```py
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer, pipeline, set_seed
 
model = AutoModelForCausalLM.from_pretrained("line-corporation/japanese-large-lm-3.6b", torch_dtype=torch.float16)
tokenizer = AutoTokenizer.from_pretrained("line-corporation/japanese-large-lm-3.6b", use_fast=False)
generator = pipeline("text-generation", model=model, tokenizer=tokenizer, device=0)
set_seed(101)
 
text = generator(
    "おはようございます、今日の天気は",
    max_length=30,
    do_sample=True,
    pad_token_id=tokenizer.pad_token_id,
    num_return_sequences=5,
)
 
for t in text:
  print(t)
```

> {'generated_text': 'おはようございます、今日の天気は雨模様ですね。梅雨のこの時期の 朝は洗濯物が乾きにくいなど、主婦にとっては悩みどころですね。 では、'}
{'generated_text': 'おはようございます、今日の天気は晴れ。 気温は8°C位です。 朝晩は結構冷え込むようになりました。 寒くなってくると、...'}
{'generated_text': 'おはようございます、今日の天気は曇りです。 朝夕が寒... 記事を読む いよいよです。 おはようございます、今朝も雨です、 今朝は、本当に冷えています'}
{'generated_text': 'おはようございます、今日の天気は晴れ曇りです。 4月も半ばになり、新しい環境にも慣れてきた時期でしょうか! 最近、毎日暑い日が続きますね!'}
{'generated_text': 'おはようございます、今日の天気は晴れ。今日は晴れ間の多い1日となりそうですね。今日も元気にスタートだ。今日の仕事は、午前中から夕方だ!1'}

別の質問でも。

```py
text = generator(
    "大規模言語モデルとは",
    max_length=100,
    do_sample=True,
    pad_token_id=tokenizer.pad_token_id,
    num_return_sequences=1,
)
print(text[0]['generated_text'])
```

> 大規模言語モデルとは、従来のテキストマイニングが Word2Vec などの 中間表現としてテキストを word 列に 分割することを特徴としているのに対し、 word 列ではなくベクトルの列を出力するようにしたモデルをさします。 word ではなくベクトルとして出力することで、多義語や表記揺れなどの精度向上が可能になります。 大規模言語モデルでは、テキストの語彙を空間的に分割し、階層構造を仮定した 表現を学習することが必要になります。

うーむ。合っているようなそうでないような。

お約束の質問。

```py
text = generator(
    "Databricksとは",
    max_length=100,
    do_sample=True,
    pad_token_id=tokenizer.pad_token_id,
    num_return_sequences=1,
)
print(text[0]['generated_text'])
```

何か他のものと混ざっているような。

> Databricksとは2010年にカナダで設立された、クラウド基盤をベースにしたBI/DWHソリューションを提供しています。現在、世界で4,000社以上のお客様にデータ統合のプラットフォームとして導入されています。同社は、データ統合のエキスパートで、独自のエンタープライズソリューションで、企業のビジネスアナリティクスの促進を支援しています。【補足情報】セミナーについて開催日時:2013年12月5日(木曜日)時間:16:00~18:0

パッと試しただけですが、業種特化の質問じゃ無い方が良さそうです。

```py
text = generator(
    "日本最大の湖",
    max_length=100,
    do_sample=True,
    pad_token_id=tokenizer.pad_token_id,
    num_return_sequences=1,

)
for t in text:
  print(t['generated_text'])
```

> 日本最大の湖
本文: 琵琶湖は滋賀県大津市から南に約65kmの滋賀県最大の湖。滋賀県唯一の一級河川で、河川名は豊臣秀次が琵琶湖の北、瀬田村の地に新城を築いたところが由来。南北に長くのびる琵琶湖の面積は約670.4平方キロ、湖面は260km2、最大水深は約108m。琵琶湖を一周するドライブコースはおすすめ。
>
> タイトル:

いずれにしても、商用利用可能なLLMが増えてくるのは喜ばしい限りです。

### Databricksクイックスタートガイド

[Databricksクイックスタートガイド](https://www.amazon.co.jp/dp/B09V1YXFVQ/)


### Databricks無料トライアル

[Databricks無料トライアル](https://databricks.com/jp/try-databricks)
【WordPress】URLに日本語を使用する時に気にすべきこと


今回はWordPressで日本語URLを使用する時に気にすべきことをお話しさせていただきます。

# 目次
* [日本語URLは使用しない方がいいの？？](#日本語urlは使用しない方がいいの)
* [URLってそもそも何？](#urlってそもそも何)
* [URLって日本語設定できるの？？](#urlって日本語設定できるの)
* [日本語URLの方が見やすいし分かりやすいんじゃ](#日本語urlの方が見やすいし分かりやすいんじゃ)
* [日本語URLのデメリット](#日本語urlのデメリット)

## 日本語URLは使用しない方がいいの？？
#### 結論：NGではない！がおすすめしない

おすすめしない理由を話していきます！！

## URLってそもそも何？
URLはデータや情報の場所がわかるように文字列にしたものです。


## URLって日本語設定できるの？？
本来URLは、「半角英数字」と「一部の半角記号」しか使用できません。
しかしWordPressでの投稿記事作成で、以下のように日本語タイトルをそのままURLに設定することができます。

https\://example.co.jp/cases/〇〇の開発

## 日本語URLの方が見やすいし分かりやすいんじゃ？？

日本語URLはブラウザ上で見ると分かりやすいと感じますが、URLをコピーペーストした場合以下のように謎の文字列になってしまいます。

【ブラウザ上のURL】
https\://example.co.jp/cases/〇〇の開発

【コピペしたURL】https\://example.co.jp/cases/%E3%80%87%E3%80%87%E3%81%AE%E9%96%8B%E7%99%BA

理由としては、URLの日本語部分がUTF-8形式にエンコードされてしまうためです。
このエンコードされてしまう日本語URLのデメリットは次の通りです。

## 日本語URLのデメリット

**1\.ユーザーに不信感を与える**
リンク先が謎の長い文字列だと、ユーザーに「怪しいサイトなのでは？」と思われてしまいます。
リンクに飛ぶのを躊躇する可能性も高くなります。

**2\.文字制限などがあるSNSなどで使いずらい**
Twitterなど文字制限があるものに長いURLは貼るのを躊躇ってしまうこともあると思います。

**3\.日本人以外には分かりにくい**
ブラウザ上で見るとき、日本人以外が見るとなんのURLか分かりにくいです。
海外にも向けたサイトでしたらここは気にした方がいいかもしれません。

---------------------------------------
以上URLで日本語を使用する時に気にすべきことでした！
日本語URLでも基本は大丈夫ですが、デメリットが色々あるのでデメリットも考えてURLを考慮するのが大切です！
VirtualBox Host-Only Ethernet Adapterは必要なとき以外無効にしておきましょうというお話

# きっかけ
Minecraft Launcherをインストールしようと思ったらこんな表示が。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287660/d3240fab-0e12-ba65-1d4d-2818a86b090b.png)
「お使いのアカウントでは現在、Minecraft Launcherをご利用いただけません。MicrosoftStoreにサインインしていることを確認してから、もう一度お試しください。エラーコード: 0x803F8001」

仕方ないからググるか、と思ってググってみても、どの解決方法も不発。
Microsoft Storeのキャッシュ削除とか、時刻同期とか、いろいろ試しました。

# Microsoft Storeがそもそもバグっている件
Microsoft Storeに再ログインしてみるといい、みたいなことが書かれていたので、早速試してみました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287660/3169c7f3-0f23-cc3e-2ef1-520a89fbbe81.png)
「これにはインターネットが必要です。インターネットに接続していないようです。接続を確認し、もう一度やり直してください 0x800713AB」
ログアウトして、もう1回ログインしようとしてみるとこの始末。
いやいや、ちゃんとYouTubeもQiitaも見れてし正常でしょ‥‥と思いつつも、ライブラリ見ると更新プログラムとかも全然動いてないし、たしかにMicrosoft Storeはインターネットに接続できてなさそうだな、という発見。

# Windows Updateも全然動かない
いろいろ調べると、どうやらWindows Updateを最新にすると良さそうだと。
でも‥‥いくら待ってもWindows Updateのダウンロードが0%から動かない。
そういえば、ちょっと前に22H2をインストールしたいのにできなくて断念したこともあったり。
もしかしてこのPC、本当にインターネットに繋がってないのか？とあり得えない思いが頭をよぎる。

# ネットワークデバイスを見てみる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287660/9cc1d7a9-566a-78f1-d5d3-6e93f3806ccc.png)
まあ、一応見てみるか、と思い、ネットワークデバイスを覗いてみる。
自分のネットワークデバイスは、上の3つ。
‥‥そういえば、ホストオンリーアダプターって仮想マシンにネット繋いでるんだっけ？
もうネットに書かれてることはほとんど試したし、ここらへん無効にしてみるか‥‥とダメもとで無効にしてPCを再起動。
そうすると、Windows Storeはインターネットに繋がっていたし、Windows Updateも無事に動き始めました。

レアケースだとは思いますが、後世のために記録を残しておきます。
めでたしめでたし。
Firebaseを使ったToDoアプリ作成に役立つリンク集

# はじめに 
備忘録
Firebaseを使ったToDoアプリを作成したときにお世話になったリンク集です｡
↓リリースしたアプリ

https://apps.apple.com/app/eternaltododestiny/id6461161622

## ToDoアプリのつくり方
まずこの記事を参考にアプリを作って自分好みに(画面遷移をRouterパターンにしたり､セルを分けたり)作り直していきました｡
この記事を見ればTODOアプリはだいたい作れます!!

https://zenn.dev/t0_inoue/books/fe8902398314fa7f2545


## ログイン周り
https://dev.classmethod.jp/articles/firebase-authentication-ios/

エラーについて

https://zenn.dev/yimajo/articles/11d7a092c647d5

## UITextField の入力を伏字,半角入力にする｡
UITextField のプロパティ isSecureTextEntry を true にします
パスワード入力につかいました｡

https://joyplot.com/documents/swift-password-textfield/

## UITextFieldに文字数制限
パスワードやEmail入力の文字数制限､Firebaseに保存するタスク入力に文字制限をかけました｡

https://faboplatform.github.io/SwiftDocs/1.uikit/038_uitextfield/

## UITextFieldにスペースを入力させない
パスワードやEmail入力の際にスペースが入らないようにしました｡

https://dev.classmethod.jp/articles/swift-uitextfield-dame-zettai/

## UITextViewの文字制限
https://qiita.com/addson/items/0f4a7bb8f3fa5f331ba8

## StackViewのなかでTextViewを使うときの注意点
ScrollingEnabled をオフにする｡
オフにしないとTextViewが表示されず､エラーも出ずでかなり困りました｡

https://qiita.com/IMNR01/items/577655553ebdb22a3c8b

## Firebase匿名ユーザーから本ユーザーへ昇格
https://www.yururiwork.net/archives/985

## UITableViewCellのAccessory
タスク完了､未完了を判断するチェックマークに使いました｡

https://blog.mothule.com/ios/uitableview/ios-uitableview-uitableviewcell-accessory

## UITableViewCellのスワイプ
スワイプして編集､削除を機能をつけました｡

https://blog.mothule.com/ios/uitableview/ios-uitableview-uitableviewcell-edit-mode

## UIButtonの同時押し防止
https://qiita.com/Tueno@github/items/53c47ae94808b4f2d4b2

## 画面のタップを無効化
処理が終わるまでボタンを連続でタップさせたくないため使用｡

https://ios-docs.dev/isuserinteractionenabled/

## アラート
アラートはよく使います｡この記事を見ると簡単に呼び出せるようになります｡

https://qiita.com/reo0612/items/b1fa1e11b3792baa72b8



## R.swift
多言語化する際にハードコーディングしない便利な方法ないかなと調べてたら見つけたので使ってみました｡

https://dev.classmethod.jp/articles/r-swift-introduction/

https://qiita.com/kasiwa/items/7c726a9007adcff3fadb

https://qiita.com/uhooi/items/82fbdd94bdc467a22422

## Firebase Authのメール認証　確認メールをチェックしたかどうか判定

https://qiita.com/dengzais8/items/816a4fef7c06b1ffce24

## 終わりに
この記事がこれから同じようなToDoアプリを作って見ようと思ってる方などの手助けになれば嬉しいです!!
Nuxt3でVuetifyを使えるようにする簡単手順

# はじめに
「Nuxt3でVuetifyを使いたいけど、設定がややこしい！」という人のための、手順をなるべく少なくしたインストール方法です。

# さっそく本題
まずはNuxtのプロジェクトを立ち上げましょう。

```shell
npx nuxi@latest init my-app
```

プロジェクトが作成できたら、そのフォルダ内に移動します。

```shell
cd my-app
```

次に`@invictus.codes/nuxt-vuetify`をインストールします。

```shell
npm install --save-dev @invictus.codes/nuxt-vuetify
```

`nuxt.config.ts`の`modules`に`@invictus.codes/nuxt-vuetify`を追加します。

```ts:nuxt.config.ts
export default defineNuxtConfig({
  // ...,
  modules: ["@invictus.codes/nuxt-vuetify"],
});
```

以上でVuetifyが使えます！

# 使ってみる
試しに`app.vue`をこのように書き換えます。
```vue
<template>
  <div>
    <v-btn>Button</v-btn>
  </div>
</template>
```

開発環境で確認してみます。
```shell
npm run dev
```

ブラウザを立ち上げて`http://localhost:3000/`にアクセスすれば、Vuetifyで作成されたボタンが確認できるはずです。
![Screenshot 2023-08-14 at 19.00.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3532049/01039a2b-815e-bf43-d34d-4d891e16d2c8.png)

# おわりに
今回は`@invictus.codes/nuxt-vuetify`モジュールを使用しました。
Nuxt公式サイトの「Modules」ページには、他にも便利なモジュールがありますので参考にしてみてください。

https://nuxt.com/modules
mason.nvimのインストールエラーについて

UnstableのNeoVimで[mason.nvim](https://github.com/williamboman/mason.nvim)のインストール中にエラーが発生しました。NeoVimのビルド版で回避しました。

![スクリーンショット 2023-08-14 11.11.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/490241/a2bde551-8372-26e3-42e7-1ed13bc41cd4.png)
```checkhealth```の結果
![スクリーンショット 2023-08-14 16.52.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/490241/3c6be65f-ce73-ce36-3d4f-13d7a961fd65.png)

```
..mason-core/log.lua:141: bad argument #2 to 'format' (string expected, got table)
```

[エラーの箇所(log.lua:141)](https://github.com/williamboman/mason.nvim/blob/v1.6.2/lua/mason-core/log.lua#L141)について特に問題はなさそう。

NeoVimは最新版に近づけるために、[PPAに登録されたパッケージをインストール](https://github.com/neovim/neovim/wiki/Installing-Neovim#ubuntu)しました。(MacでUbuntuコンテナを利用したため、AArch64-Ubuntu向けPPAからunstable版をインストールする必要があった)
はじめはmason.nvimの問題だと思っていましたが、冒頭の通り[NeoVimのビルド&インストール](https://github.com/neovim/neovim/wiki/Building-Neovim)版にすることで回避できることが分かりました。ビルドの場合には[v0.9.1](https://github.com/neovim/neovim/tree/v0.9.1)と [v0.10.0-dev](https://github.com/neovim/neovim/commit/6d93bdd458a03bd07b1797e43bb11e3be560d340)のどちらでもエラーは起きていません。
PPAの場合にはLua周りの設定が必要で漏れていたのかも知れませんが、とりあえずビルド版で様子を見たいと思います。（夏休みだし原因調査までしたいけど難しいかな）


![スクリーンショット 2023-08-14 17.38.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/490241/df761dcc-736d-eca5-107e-d1cb4837a2cc.png)

```checkhealth```の結果
![スクリーンショット 2023-08-14 17.40.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/490241/a84cd9c2-3549-acd8-218d-1038ce7be164.png)

## 環境
MacBook Air (M1)
OS: Ventura 13.4
OS(Container): Ubuntu 22.04
mason.nvim: v1.6.2
NeoVim:
 PPA 0.10.0~ubuntu1+git202308131603-017ff93b0-9b397864c-cb076f922~ubuntu22.04.1
 Build 6d93bdd458a03bd07b1797e43bb11e3be560d340
wsl error: 0x80370102 cpuの仮想化が有効なのに生じるエラーの解決方法

linux環境をwindowsで利用したかったのでwslをインストールした後エラーが発生。




## エラー0x80370102
以下のリンクの解決方法を一通り試したが解決しなかった。
BIOSの仮想化も有効になっており、windowsの機能設定も完了しているのでお手上げ状態。
https://learn.microsoft.com/ja-jp/windows/wsl/troubleshooting

## 解決方法
**BIOSの設定を初期化**した後に
```
bcdedit /set hypervisorlaunchtype auto
```
を入力したら解決。

## 参考
https://github.com/microsoft/WSL/issues/5363
Azure for Studentsの登録方法（大学でアカウントが制限されている場合）

#### Azure for studentsとは？

AzureというMicrosoftのクラウドを学生向けに用意してくれています。<br>
サーバーやデータベースを安心して使うことができます。<br>
WordPressやマイクラサーバーにも使えたりもします。<br>
特典としては<br>

- 毎年100ドルの無料クレジット
    - 一年ごとに100ドルもらえるおかわりができるため、4年で400ドルもらえる！
- クレジットカードの登録が不要


#### 読者対象
- 学生の方
- 大学の関係でサインアップできない人

都立大では以下のような画面が出てきました。<br>
[![Image](https://gyazo.com/edf48678e8fd4bd58eb2d6f7ebc74900/max_size/1000)](https://gyazo.com/edf48678e8fd4bd58eb2d6f7ebc74900)<br>

>現時点ではこれにはアクセスできません<br>

この内容は大学の設定で大学のMicrosoftアカウントでAzureへのアクセスを制限されているためです。<br>

#### 解決方法

別のアカウントを作成し、Azureのサブスクリプションを追加することで作ることができます。<br>

##### Azureアカウントの作成

[https://azure.microsoft.com/ja-jp/free](https://azure.microsoft.com/ja-jp/free) より大学以外のメールアドレスでアカウントを作成します。<br>


##### サブスクリプションの追加

- Azureのホームより、サブスクリプションを選択し「Azure for Students」を選択
[![Image](https://gyazo.com/cf062a5aea57c676ac3426c43eebd55f/max_size/1000)](https://gyazo.com/cf062a5aea57c676ac3426c43eebd55f)<br>



- 学生の確認の画面になるため、メールアドレスなどで認証します。

[![Image](https://gyazo.com/49ffe1ef6691823522476a50d91c1f4a/max_size/1000)](https://gyazo.com/49ffe1ef6691823522476a50d91c1f4a)<br>


- 認証ができるとサブスクリプションに、Educationが増えています。
[![Image](https://gyazo.com/cc75867f70139857f3f0737cd50b9136/max_size/1000)](https://gyazo.com/cc75867f70139857f3f0737cd50b9136)<br>

#### Azure for Studentsの残りクレジットの確認方法
[https://www.microsoftazuresponsorships.com/Usage](https://www.microsoftazuresponsorships.com/Usage) にアクセス<br>
Azure for Studentsをクリック<br>
使われている内訳がわかります。<br>

[![Image](https://gyazo.com/b3de3f965a3eee9394d22d0cfa5f9681/max_size/1000)](https://gyazo.com/b3de3f965a3eee9394d22d0cfa5f9681)<br>
Leetcode 347. Top K Frequent Elements

https://leetcode.com/problems/top-k-frequent-elements/description/

# アプローチ
- HashMap

```java
class Solution {
    public int[] topKFrequent(int[] nums, int k) {
        HashMap<Integer, Integer> map = new HashMap<>();

        for (int num : nums) {
            map.put(num, map.getOrDefault(num, 0) + 1);
        }

        return map.entrySet().stream()
                .sorted(Map.Entry.<Integer, Integer>comparingByValue().reversed())
                .limit(k)
                .map(Map.Entry::getKey)
                .toList()
                .stream()
                .mapToInt(i -> i)
                .toArray();
    }
}
```
AWS EventBridgeがS3のイベントを感知できるようにバケットの設定を変更する

# 概要

- EventBridgeでS3のオブジェクトに関するイベントを取得できるようにする設定方法を簡単にまとめる。

# 方法

1. バケットの「プロパティ」を開く。

    ![miriwo-test_-_S3_bucket.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/ed88a8a6-e87a-5f89-697e-7d37660ba2dd.png)

1. 少し下までスクロールし「Amazon EventBridge」の「編集」をクリックする。

    ![miriwo-test_-_S3_bucket.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/88faa86d-4627-9408-cd6b-f09fed764b69.png)

1. 「オン」のラジオボタンをクリックし「変更の保存」をクリックする。

    ![miriwo-test_-_S3_bucket.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/6950f6b7-a7a8-b111-65df-a938bfec460e.png)
ブログ始めてみます

## 技術ブログ始めてみます
こんにちは．
てでぃしゅんと申します．

これからアウトプットを兼ねてブログをはじめていこうと思います．

## プロフィール

大学院１年です．
ロボット系を勉強しています．

## 書いていきたい内容

- 研究で用いているプログラム
- プログラムのエラー解消法
- 書籍で勉強した内容
- 競技プログラミングのこと

## 今後の心配ごと & 解消法

- 忙しいを理由にしてしまいそう
→ カレンダーに予定として詰め込む！
- ネタ切れになりそう
→ 「ネタがない」と投稿する！
- 周りの目を気にしそう
→ 「バレちゃあしょうがねぇ😏」くらいのテンションで

## 最後に

どうか温かい目で見守ってください！
Power Pagesでフォームごとに特定の値を設定する

今回は、Power Pages側でフォームごとに規定値を設定する方法についてご紹介します。

::: note
Dataverseでもビジネスルールで同じようにフォームごとに規定値を設定できます。
ビジネスルールでは、スコープを「エンティティ」にしておけば、モデル駆動型アプリだけでなくPower Pages、テーブルを使用するあらゆるアプリで同様に値を入れることができますが、スコープを「フォーム」にするとモデル駆動型アプリでしか反映されなくなります。
:::

# 設定方法
## 1. 管理アプリを開く
Power Appsのアプリ一覧画面(https://make.powerapps.com/apps )で、Power Pages管理アプリ（旧：ポータル管理アプリ）を開きます。（もしかしたら、Power Pages管理アプリにデータが入っていない可能性もあるため、ポータル管理アプリのほうを開いてください。）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/27d42b56-ec85-800a-0b31-638968824eb0.png)


今の段階(2023/08/14)で、Power Pages管理アプリはまだ項目が少ないです。

## 2. 該当のフォームの詳細画面を開く
ポータルアプリの左のメニューで[コンテンツ]>[基本フォーム]を選択し、一覧画面で、該当のサイトで使用しているフォームを選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/6e87fe16-18bc-e973-5be9-82f7818bff03.png)

## 3. メタデータテーブルのレコードを追加する
[Basic Form Metadata]タブをクリックし、一覧の右上の[+ 基本フォームメタデータの追加]を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/eaee2692-3c2f-415a-a685-d8da469f7579.png)

## 4. 規定値を設定する列を設定する
編集フォームにて、[種類]を[属性]に設定します。
その下の[属性論理名]の右の値に規定値を設定したい列を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/21094840-52ff-999f-11b3-bf955b44d851.png)

## 5. 規定値の設定をする
### 規定値2種類の設定方法
規定値を設定するタイミングによって2つの選択肢があります。
①フォーム入力前から規定値として設定されていてほしい（場合によっては編集が必要なこともある）ときは「**prepopulate Field**」に値を設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/3b9e9091-f57d-429b-3427-8351fef01956.png)

②フォームを送信した時に値を設定するときは「**Set Value On Save**」に値を設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/d8434eb3-a2b8-3640-01e0-76537ce042b8.png)

## チナミになる話: 選択肢列を設定したい場合
選択肢列を設定したい場合、選択肢の「値」で設定します。
値の取得の仕方
Dataverseテーブルにて列の詳細を開き、[✏選択の編集]をクリック
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/e34bf029-b92f-1b62-c3b1-ed166c77881d.png" width=50%>
ラベルの右に表示されている「値」を取得
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/b7771506-2160-25d9-efa2-cd08779799e6.png)
Laravel用パッケージの作成方法

こんにちは。記事をご覧いただきありがとうございます。

composerでインストールできるLaravel用ライブラリを作成してみたのでその備忘録です。
誰かのお役に立てれば幸いです。

## パッケージテンプレート

### テンプレート

2.以降で紹介するパッケージのベースとなるテンプレートを作成しました。
よければ使ってください。
[https://github.com/ikepu-tp/package](https://github.com/ikepu-tp/package)

### 開発環境

開発環境となるものも作りました。
[https://github.com/ikepu-tp/create-packages](https://github.com/ikepu-tp/create-packages)

:::note info

- Laravel/Breeze導入済み
- MySQLのDocker設定済み

:::

## 1. Laravelのインストール

```bash
curl -s https://laravel.build/create-library | bash
cd create-library && ./vendor/bin/sail up
```

## 2. リポジトリの作成

```bash
mkdir packages/package-name/src
cd packages/package-name
vim composer.json
```

## 3. composer.jsonの作成

```json
{
    "name": "ikepu-tp/package-name",
    "description": "",
    "type": "library",
    "keywords": [
        "laravel"
    ],
    "homepage": "****",
    "support": {
        "issues": "https://github.com/ikepu-tp/package-name/issues",
        "source": "https://github.com/ikepu-tp/package-name"
    },
    "require": {
        "php": "^8.2",
        "laravel/framework": "^10.8"
    },
    "license": "MIT",
    "autoload": {
        "psr-4": {
            "ikepu_tp\\PackageName\\": "./src/"
        }
    },
    "authors": [
        {
            "name": "****",
            "email": "****"
        }
    ],
    "extra": {
        "laravel": {
            "providers": [
                "ikepu_tp\\PackageName\\PackageNameServiceProvider"
            ]
        }
    }
}

```

## 4. Providerの作成

```bash
./vendor/bin/sail artisan make:provider ShorterUrlServiceProvider
```

src下にShorterUrlServiceProviderを移動する。

## 5. composer update

```bash
composer update
```

## 6. GitHubのリポジトリ作成

## 7. GitHubに公開

```bash
cd packages/package-name
git init
git add .
git commit -m "first commit"
git branch -M main
git remote add origin https://github.com/***/***.git
git push -u origin main
```

## 8. Packagistに登録

[Packagist](https://packagist.org/register/)において

1. ユーザー登録をする
1. Githubと連携する
1. `submit`からGithubのURLを入力し，登録する

## 参考

[https://hirossyi.work/blog/116](https://hirossyi.work/blog/116)
PdfSharp での文字列描画：XStringFormatを使った座標指定について

.NET 界隈でのPDF生成ライブラリとして人気の PdfSharp における `XGraphics.DrawString` メソッドを活用した文字列描画について、`XStringFormat` クラスを使った座標指定についての一部を記載します。

## 1. XStringFormats.TopLeft

このオプションを使用すると、指定した `XRect` の左上隅が文字列の開始位置として解釈されます。

**サンプルコード**:
```csharp
var gfx = XGraphics.FromPdfPage(page);
var font = new XFont("Arial", 12, XFontStyle.Regular);
gfx.DrawString("Hello, PdfSharp!", font, XBrushes.Black, new XRect(100, 50, page.Width, page.Height), XStringFormats.TopLeft);
```

## 2. XStringFormats.TopRight

このオプションを使用すると、指定した `XRect` の右上隅が文字列の開始位置として解釈されます。しかし、文字列の描画範囲を完璧にコントロールするためには、`XRect` の幅や座標の調整が必要になる場合があります。

**サンプルコード**:
```csharp
var gfx = XGraphics.FromPdfPage(page);
var font = new XFont("Arial", 12, XFontStyle.Regular);
gfx.DrawString("Hello, PdfSharp!", font, XBrushes.Black, new XRect(-23, 776, page.Width, page.Height), XStringFormats.TopRight);
```

## 注意点

1. **Y座標の指定**: PdfSharpでは、ページの左上隅が原点(0,0)として扱われ、Y座標は上から下へ増加します。
2. **フォントの影響**: 使用するフォントのサイズやスタイルによって、文字列の描画位置が微妙に変わることがあります。
3. **ページの境界**: 文字列を描画する際、ページの境界を超えると、文字列が切り取られる可能性があります。
4. **XRectの調整**: 特に`XStringFormats.TopRight`を使用する場合、文字列が適切に描画されるように`XRect`のx座標や幅を調整することが必要です。

## まとめ

PdfSharpで文字列を描画する際、`XStringFormat`と`XRect`を適切に使用することで、文字列の配置を細かく制御することができます。しかし、座標指定や文字列の描画範囲の調整には注意が必要です。この記事が、PdfSharpでの文字列描画の際の参考になれば幸いです。
Oracle Cloud Infrastructure 2022 Architect Associate(1Z0-1072-22)に合格する

## はじめに
職場でバウチャーを頂き、Oracle Cloud Infrastructure 2022 Architect Associate(1Z0-1072-22)資格を受験することに。
4年前も同資格を取得し、有効期限が切れている状態でした([Oracle Cloud Infrastructure 2018 Architect Associate 合格体験記](https://qiita.com/y-araki-qiita/items/ec575467d13bfc67a11c))。
4年も経つと新しいサービスも続々出ており、そう簡単ではなかった為、合格した方法を記載します。

## Oracle Cloud Infrastructure 2022 Architect Associate(1Z0-1072-22)とは
OCIサービスを使用してインフラストラクチャ設計をする専門知識があることを証明するAssociateレベルの資格で、受験時点で２０２２が日本語対応の最新でした。
AWSのSolution Architectと同じようにFoundations、Associate、Professionalとレベルが分かれています。

以下スコアレポートより出題範囲です。
1.2 コンピュート・インスタンスの構成
1.6 インフラストラクチャ・メンテナンスの理解
3.2.1 オブジェクト・ストレージ層の理解
3.2.4 マルチパート・アップロードの構成
3.3.3 ファイル・システムのスナップショットとクローニングの理解
3.3.4 ファイル・システムの使用量と測定の理解
4.1 データベース・システムおよび Autonomous Databases の概要
4.2 データベース・システムと Autonomous Databases の運用とメンテナンス
5.2 モニタリングの構成とアラームの設定
5.3 ロギングの構成
6.4 動的グループおよびタグ・ベースのアクセス制御の構成
7.2 Data Guard、セキュリティ・ゾーンおよびセキュリティ・アドバイザの構成

## 勉強方法
* [Oracle Cloud Free Tier](https://www.oracle.com/jp/cloud/free/)(無料トライアル)を利用し、[OCIチュートリアル](https://oracle-japan.github.io/ocitutorials/)を一度実施する。

全く初心者の方、OCI基盤構築の経験がない方など、基礎知識を習得しつつ実際のイメージを掴むのに一番最適と感じました。
私は初めて受験する前にチュートリアルの入門編と、応用編をいくつか実施しました。


* 「[Udemy 本番対策!1Z0-1072-21: OCI Architect Associate 日本語模擬試験[2022年版]](https://www.udemy.com/course/1z0-1072-21-oci-architect-associate-2022/)」を３回解く。
    ポイント：わからなくてもすぐに次の問題に進む。わからないサービス・用語はすぐネット検索。

チュートリアル、Udemy問題集合わせると20時間あれば実施できる内容と思います。

## 受験
* オンライン試験のみ
* 問題は4つの選択肢から選ぶ形式がほとんど(単一、複数回答も)

## 結果、振り返り
以下振り返りです。
* 使用したUdemy問題集は似た問題や覚えた知識で答えられる問題が多いように感じた。
* 解くのに制限時間いっぱいということはなく、見返すことも可能でした。


バッジ、認定証も送られてきます。パチパチパチ👏
現在はProfessional取得に向けて勉強中です。
![スクリーンショット 2023-08-14 17.51.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/131627/d86123d6-5fd7-9d90-06e4-8f73e93b8ee5.png)
メンバー拡張メソッド

## メンバー拡張メソッドの宣言

Kotlinでは、拡張メソッドを定義することができる。
通常はトップレベルに配置するが、実は拡張メソッドをメンバーとして定義することもできる。

```Kotlin
interface Monoid<M> {
  val identity: M
  fun compose(a: M, b: M)

  // Extension method as a member!
  fun List<M>.fold(): M = fold(identity, this@Monoid::compose)
}
```

https://kotlinlang.org/docs/extensions.html#declaring-extensions-as-members

そこそこKotlinを使っていたけど、この前初めて知った。

### 2つのレシーバー

拡張メソッドをメンバーとして定義すると、本来のインスタンスを指す`this`と、拡張メソッドのレシーバーを指す`this`の2つが存在することになる。これを*Dispatch receiver*, *Extension receiver*と呼び分ける。

通常Extension receiverが優先的に呼び出されるが、*Qualified this*構文を使うことでDispatch receiverを明示的に指定することができる。

```Kotlin
interface Monoid<M> {
  val identity: M
  fun compose(a: M, b: M)

  fun List<M>.fold(): M =
    this.fold(             // List::fold
      this.identity,       // Monoid::identity
      this@Monoid::compose // Monoid::compose
    )
}
```

## メンバー拡張メソッドの呼び出し

呼び出すときは`with`を使うのが便利だ。

```Kotlin
object MonoidString : Monoid<String> {
  override val identity: String = ""
  override fun compose(a: String, b: String): String = a + b
}

fun main() {
  with (MonoidString) {
    println(listOf("Hello", " ", "World").fold())
  }
}
```

ScalaのImplicit parametersみたいで面白い。
NLBにSGが付けられるようになった

・2023/8/10よりNLBがSGをサポートするようになった
・NLB作成時のみSGを指定可能
・作成後にSGの追加・変更は可能（※SG指定無しでNLBを作成した場合は不可）

【参考】
https://aws.amazon.com/jp/about-aws/whats-new/2023/08/network-load-balancer-supports-security-groups/

NLB作成画面でSGの指定が可能
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3472386/4ada5dc9-0a0a-6e52-520d-96476d63a1bc.png)

SG指定無しでNLBを作成する事も可能（但しSG指定での作成が推奨の模様）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3472386/1c891425-274c-6b9c-0714-d31816870eff.png)

SG指定無しで作成した場合、後から追加・変更は不可
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3472386/fdc6e2c6-99da-763d-befa-85886a6395cf.png)

以上
curl コマンドで API を叩こう

## 目的
- curlコマンドを使ってAPIを叩けるようになること
- GET, POST, PUT, DELETE できるようになること
- 以下のオプションの意味がわかること
    - -X
    - -H
    - -d

## curlコマンドとは

|項目|説明|
|--|--|
|何のため使う？|URL を使ってデータの通信を行うため、APIを叩くため|
|どこで使う？|コマンドプロンプトなどのコマンドラインやスクリプト|
|使うとどうなる？|データを取得したり、データを処理させたりできます|
|いつ使う？|API の動作確認など|

こちらはコマンドプロンプトで curl コマンドを叩いている例
![cmd_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294646/1adbaf04-87be-2ee6-7891-c92a6bf079fb.png)

https://curl.se/

## curl の使い方
文法は `curl [URL] [OPTIONS]`  です
以下は　URL が google.com、OPTIONS はつけないで叩いた例です
このような雰囲気で叩きますよの例です
```powershell
C:\Users>curl google.com
```
上記のコマンドを叩くと以下の結果が返ってきます
```powershell
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>301 Moved</TITLE></HEAD><BODY>
<H1>301 Moved</H1>
The document has moved
<A HREF="http://www.google.com/">here</A>.
</BODY></HTML>
```

## curl オプション
curl の使い方は上記でご覧いただいた通りです
URL については叩く API の URL をそのまま記述するだけなの問題ないかと思います
OPTIONS これが使う場面によって色々変わるので問題になります
ではどんなオプションがあるのか見ていきましょう
※下の表以外にもオプションはありますが、簡潔のため割愛します

|オプション|概要|
|--|--|
|-X|メソッドの指定（GET, POST, PUT）などなど|
|-H|記述したヘッダー情報を送信する|
|-d|記述したデータを送信する|

https://reqbin.com/req/c-r8g2qivg/how-to-use-curl

https://reqbin.com/req/c-dwjszac0/curl-post-json-example


### オプション：-H
コンテンツタイプや API キーなどの情報を記述します

例として下記の情報を記述したいとします
|key|value|説明|
|--|--|--|
|Content-Type|application/json|送ったデータは json ですよってサーバーに伝えるための記述|
|X-API-KEY|API キー|API を使用するための認証情報を記述|

https://developer.mozilla.org/ja/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Common_types

https://cloudapi.kddi-web.com/magazine/other/waht-api-key

以下のようなオプションをつけることになります

```
-H "Content-Type:application/json" 
-H "X-API-KEY:writeapikeyhere” 
```

### オプション：-d
json でデータを送る際の例はこんな感じです

```
-d '{"key1":"value1","key2":"value2"}'
```

## curlコマンドを作成してみましょう
以下の設定で API を叩きたいとします

|項目|内容|
|--|--|
|メソッド|POST|
|URL|https://example.com|
|送るデータのタイプ|json|
|API キー|writeapikeyhere|

また送るデータは以下のとします

```json
{
    "key1": "v1",
    "key2": "v2",
}
```

ここまでの設定を踏まえてコマンド作成すると、
以下のようになります

```powershell
curl -X POST “https://example.com” \
     -d "{\"key1\":\"v1\", \"key2\": \"v2\"}" \
     -H "Content-Type:application/json" \
     -H "X-API-KEY:writeapikeyhere”
```

## AWS でAPI を自作して curl コマンドを叩く
本記事を作成した理由ですが、実は API Gateway で API を作成した後、動作確認するため curl コマンドを使用したときつまりに詰まったのでまとめたかったからでした～

こちらの記事を見ると AWS で API を自作して、curl コマンドを叩いて動作確認までできます

https://dev.classmethod.jp/articles/getting-start-api-gateway/

https://qiita.com/tamura_CD/items/46ba8a2f3bfd5484843f

## 付録
### そもそも API とは
https://qiita.com/Saku731/items/6ae290f72e98723f165d

### HTTP method とは

https://tsuyopon.xyz/learning-contents/web-dev/basic-knowledge-of-backend/understand-4-http-methods/

### WebAPI, REST API, WebSocket API とは
WebAPI

https://techtarget.itmedia.co.jp/tt/news/1806/13/news01.html

REST API

https://www.infraexpert.com/study/sdn09.html

WebSocket API

https://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/apigateway-websocket-api-overview.html

### API Gateway とは

https://dev.classmethod.jp/articles/what-does-amazon-api-gateway-do/
EC-Cubeのplugin generaterを使ってみた

# plugin generater commandを使ってみた
よくある使ってみた系の記事です。
EC-Cubeのplugin generaterを使ってみたので、その時の作業メモになります。

## プラグインの雛形を生成
以下のコマンドで雛形が作成できます。便利です。
`bin/console eccube:plugin:generate`
参考：https://doc4.ec-cube.net/plugin_development

今回はSampleなので、入力は全てEnterで行きます。

## 別のディレクトリを作成して、sample pluginだけコピーする
`mkdir sample_plugin`
`cp app/Plugin/Sample ../sample_plugin`

*ここのオペレーションは改善の余地があります。
特定のファイルだけ、別リポジトリにPushできる方法などがあれば、ご教授ください。
（プラグイン開発者の方はどうやってるんでしょうか？）


## Githubでリポジトリを作成してPushする
今回はsample_pluginとしました。
.gitファイルがないので、`git init`を先にします。
``` 
git init
git push sample_pulugin
# git push --set-upstream sample_plugin master ←今回はブランチを作成したのでこちら
```

## Github Actionsの実行
Actionsのトリガーがpublishedになっているので、リリースタグを切ります。
### リリースタグを切る
こんな感じになります。~~プロ？っぽさが出ますね。~~
https://github.com/dotani1111/sample_plugin/releases
### github Actionsがまわる！けど、エラー
よくあるやつですね。
https://github.com/dotani1111/sample_plugin/actions/runs/5850931449/attempts/1
```
> Run svenstaro/upload-release-action@v1-release
Error: Resource not accessible by integration)
```
#### Workflow permissionsを直す
https://zenn.dev/tatsugon/articles/github-actions-permission-error
（参考にさせて頂きました。ありがとうございます。）

## うまくいく
無事にSuccessしました！
（終わるのが早すぎたので、しばらく疑っていました）

https://github.com/dotani1111/sample_plugin/actions/runs/5850931449

### 感想
こういう便利機能もあるんだな、と思いました。
個人でプラグインの開発をしてみるのも、面白いかもしれません。
プラグインをgitで管理するスマートな方法お待ちしております。
bison,flexを用いた字句解析及び構文解析による数式演算システム

字句解析及び構文解析による数式演算システム
===================================

https://github.com/mimic-asy/parser_calculator

入力された数式に対して字句解析、構文解析を行い演算の結果を出力する。

四則演算(+,-,*,/)及び、大小比較(<,>,<=,>=)、等価演算(==,!=)に対応している。

```
$ ./mycalc
12+7
>> 19
(10+10)*2
>> 40
(1+2+3)*4<567
>> 1
12>17           
>> 0
11==11
>> 1
11==12
>> 0
11!=11
>> 0
11!=12
>> 1
```

何も入力をせずに改行を行うとこのプログラムは終了する。


## 動かし方

```
git clone git@github.com:mimic-asy/c_simple_compiler.git
make
./mycalc
```

# 作った理由
コンパイラを作るときにまず字句解析、構文解析の知識を持っているべきであると考えたため

# 今後すること
ifやforなどの制御構造に関しては実装していないため今後実装を行う。
合成と高速化、CPUに近い部分を学ぶためにLLVMのバックエンドを実装する。
LLVMのバックエンドを学んだら、llvmを用いてコンパイラ、もしくは言語を作成する予定。
aws: AppRunner のデプロイが失敗する

# 問題
aws の AppRunner でデプロイしようとすると以下のようなエラーで止まった。
```
Your application stopped or failed to start. See logs for more information.  Container exit code: 127
```

# 行動
同ページで以下の選択肢からログを開く。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3532009/ad380b59-ff68-44e1-6632-2749e66154e7.png)
そのページ内の一番下のブロックの「アプリケーションログ」のなかで "Application logs" をクリックする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3532009/c08f13bb-a88a-d903-a5b7-412bd7d5e458.png)

以下のようにログが表示されている。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3532009/b137a37f-f24f-7cf8-5d5c-d7f874cd3de4.png)
自分の場合、 poetry というコマンドを portry とタイプミスしていたことが原因だった。これを修正するとうまくデプロイできた。

# 結果
AppRunner でデプロイがうまくいかないとき、ログ内の一番下のブロックの「アプリケーションログ」のなかにある "Application logs" を見ることでデバッグができた。
SolrのメトリックログでUNIX時間をシリアル値に変換した話

## はじめに
オープンソースの検索プラットフォームであるSolrを使用しているシステムにおいて、
Javaヒープメモリの使用状況を確認しようとログファイルを取得したところ、
タイムスタンプの部分が馴染みのある形でない数字10桁であった。
##### こんな感じ![20230814_03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3363133/70585b24-8ad8-78ca-b027-d40a70f3ce6f.png)
このままでは、Excelでのグラフ化の際に困ってしまうため、
エクセルで「年/月/日 時:分:秒」に変換する方法を調査した。
※補足として、別のソフトウェアなどでは10桁ではなく13桁の場合もあるらしいです。
その場合は予め1000で割っておけば、後述の方法での計算が可能となります。

## わかったこと
少し調べてみると、数字10桁の値は【UNIX時間】と呼ばれるもので、
「1970年1月1日 0時0分0秒からの経過秒数で表した時間表記」のことであることがわかった。

さらに、普段Excelで2023/03/22 11:43:31(年/月/日 時:分:秒)というような形式で表示できているのは、
マイクロソフト独自の日時表現方式である【シリアル値】を、セルの書式設定で設定して表示できているためである。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3363133/450513a6-0d23-e259-6355-9b6ebc0b4b74.png)
上記からSolrのメトリックログのタイムスタンプをExcelで扱えるようにするためには、
UNIX時間をシリアル値へ変換する必要がある。

ここでいうシリアル値とは「1900年1月1日」を「1」とし、1日として「1」を加算していき日付/時刻を表現する値である。
例：「1900年1月2日」は「2」
なお、時分秒については小数を使って表現している
例：「1900年1月2日12時0分0秒」は「2.5」

上記画像の「2023年3月22日」(シリアル値：45007）は「1900年1月1日」（シリアル値：１）から45006日後という意味になる。

## 計算方法
A.UNIX時間はUTC(協定世界時)のため、日本標準時(JST)に時差を調整する。
やり方：UNIX時間に時差9時間(UTC+9)を加算
```UNIX時間10桁　＋　60秒×60分×9時間```
```＝UNIX時間10桁　＋　32400```

B.UNIX時間の単位は秒であるが、シリアル値の単位は日であるため変換する。
やり方：Aの結果を１日分の秒で割る
```Aの結果　÷　60秒×60分×24時間```
```＝Aの結果　÷　86400```

C.シリアル値とUNIX時間では起点となる年月日に差があるため変換する。
やり方：シリアル値の起点である「1900年1月1日0時0分0秒」から
UNIX時間の起点である「1970年1月1日0時0分0秒」までのシリアル値を足す
```Bの結果　＋　25569```

A～Cを一つの計算式にまとめると
```=(UNIX時間10桁 + 32400) / 86400 + 25569```

## まとめ
```=(UNIX時間10桁 + 32400) / 86400 + 25569```
をすれば、Excelで```2023/03/22 11:43:31```といった形で表示できるようになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3363133/9b68cccc-321e-bd6d-bb8c-f50f581fdc47.png)
【RaspberryPiPico (MicroPython)】microSDカードへの書き込み

# 目次
- はじめに
	- この記事の対象者
	- 動作環境
- 事前準備
	- PicoとSDカードスロットの配線
	- SDカードのフォーマット
	- ラズパイPicoへライブラリを追加
- プログラム制御
	- テキストファイルの出力
	- csvファイルの出力
- 別キットで動かす：レベルシフタ付きブレークアウト基板キット
- 参考リンク

## はじめに
初投稿なので過不足等あればご指摘いただけると幸いです。
※当記事では以降「ラズパイPico」表記といたします。

### この記事の対象者
・ラズパイPicoでmicroSDカードへの書き込みをしたい方
※とりあえず動けばいい人向けの内容となります。

### 動作環境
・MicroPython:v1.20.0
・micropython-lib/micropython/drivers/storage/sdcard/sdcard.py:2023/02/03版
　→https://github.com/micropython/micropython-lib/tree/master/micropython/drivers/storage/sdcard

・マイクロＳＤカードスロットＤＩＰ化キット
　→秋月電子リンク：https://akizukidenshi.com/catalog/g/gK-05488/

# 事前準備
### PicoとSDカードスロットの配線
当SDカードスロットではSPI通信でのデジタル通信が行われます。
ラズパイPicoのピン配置を参考に、以下表に従って接続します。

※空白は接続なし
※SPIはどこでもいいですが、バスは同一のものを使用(0 or 1)

|SDカードスロット|ラズパイPico(GPIO)|
|:--|--:|
|ＤＡＴ２　①||
|ＣＤ／ＤＡＴ３　②|SPIx CSn|
|ＣＭＤ　③|SPIx TX|
|ＶＤＤ　④|3V3(OUT)|
|ＣＬＫ　⑤|SPIx SCK|
|ＶＳＳ　⑥|GND|
|ＤＡＴ０　⑦|SPIx RX|
|ＤＡＴ１　⑧||
|カード検出スイッチＢ　⑨||
|カード検出スイッチＡ　⑩||

### SDカードのフォーマット
・[FAT32]形式でフォーマットをしておく([exFAT]形式だと読み込めなかった)

・windowsの場合は以下操作でフォーマット可能
　SDカードをPCに接続→[SDカードのドライブ]を右クリック
　→[フォーマット(A)]を選択→項目[ファイルシステム]を[FAT32]に設定して[開始]を押下

### ラズパイPicoへライブラリを追加
・動作環境部分に記載した[sdcard.py]をラズパイPicoへ導入
　(筆者はThonnyでライブラリを開き、保存(Ctrl+s)した際に出てくる[Where to save to?]にて[Raspberry Pi Pico]を選択して導入しています)

## プログラム側での制御
・サンプルとして以下接続をした場合のソースを記載いたします。
・サンプルの保存先はSDカードのルートとなります。

|SDカードスロット|ラズパイPico(GPIO)|
|:--|--:|
|ＣＤ／ＤＡＴ３　②|GP5|
|ＣＭＤ　③|GP3|
|ＶＤＤ　④|3V3(OUT)|
|ＣＬＫ　⑤|GP2|
|ＶＳＳ　⑥|GND|
|ＤＡＴ０　⑦|GP4|

### ①テキストファイルとして出力する際のサンプル
```python:OutFiletxt.py
from machine import Pin, SPI
import os, sdcard

spi = SPI(0,sck=Pin(2), mosi=Pin(3), miso=Pin(4))
sd = sdcard.SDCard(spi, Pin(5))
os.mount(sd, '/sd')

fp = open('/sd/test.txt', 'w')#ファイルが存在しない場合は新規作成
fp.write('test')#ファイルに書き込み

fp.close()#ファイルを閉じる
```

### ②csvファイルとして出力する際のサンプル
```python:OutFilecsv.py
from machine import Pin, SPI
import os, sdcard

spi = SPI(0,sck=Pin(2), mosi=Pin(3), miso=Pin(4))
sd = sdcard.SDCard(spi, Pin(5))
os.mount(sd, '/sd')

fp = open('/sd/test.csv', 'w')#ファイルが存在しない場合は新規作成
fp.write("{},{}\r\n".format("ヘッダA","ヘッダB")) #ヘッダ書き込み
fp.write("{},{}\r\n".format("A", "B")) #データ部分書き込み

fp.close()#ファイルを閉じる
```

## 別キットで動かす：レベルシフタ付きブレークアウト基板キット
こちらの電子部品も同様に動作を確認しているので、ついでに記載いたします。
ラズパイPicoは3.3vの出力が利用できるので、[1]ピンは使用せず、[3]ピンに電源入力をしています。
(Arduino等の5v出力するものは[1]に電源入力するもの。と解釈しています。)

### 電子部品
・ｍｉｃｒｏＳＤカードスロット　レベルシフタ付きブレークアウト基板キット
→秋月電子リンク：https://akizukidenshi.com/catalog/g/gK-14015/

### PicoとSDカードスロットの配線
|SDカードスロット|ラズパイPico(GPIO)|
|:--|--:|
|[1]+5V電源入力(+4.0V～+6.5V)||
|[2]内部3.3Vレギュレータ ON/OFF||
|[3]内部3.3Vレギュレータ出力|3V3(OUT)|
|[4]GND|GND|
|[5]SDカード クロック(CLK)|SPIx SCK|
|[6]SDカード データ(DAT)|SPIx RX|
|[7]SDカード コマンド(CMD)|SPIx TX|
|[8]SDカード チップセレクト(CS)|SPIx CSn|
|[9]SDカード カード検出スイッチ(SW 検出時GND)||


## 参考リンク
・ラズパイPicoデータシート
https://datasheets.raspberrypi.com/pico/pico-datasheet.pdf

・micropython-lib
https://github.com/micropython/micropython-lib

・クラス[SDCard]のドキュメント
https://micropython-docs-ja.readthedocs.io/ja/latest/library/machine.SDCard.html?highlight=sdcard
GitHubでのパスワード認証終了に伴う対応方法

## はじめに
GitHubでのプッシュ時に認証エラーが発生したので、エラーの解決手順について記載します。

## 1. アクセストークンの生成方法

1. GitHubにログインし、右上のユーザーアイコンをクリックして「Settings」を選択します。
2. 左側のメニューから「Developer settings」を選択します。
3. 「Personal access tokens」をクリックし、「Generate new token」ボタンを選択します。
4. 必要な権限を付与してトークンを生成します。このトークンは後で使用するので、コピーして安全な場所に保存しておきましょう。

## 2. 生成したトークンを使っての認証方法

1. ターミナルやコマンドプロンプトを開き、以下のコマンドを実行して、現在のリモートリポジトリのURLを確認します。
   ```bash
   git remote -v
   ```

2. 次に、以下のコマンドを使用してリモートURLをアクセストークンを使って更新します（`YOUR_TOKEN`を先ほど生成・コピーしたトークンに置き換えてください）：
   ```bash
   git remote set-url origin https://YOUR_TOKEN@github.com/YourUsername/YourRepoName.git
   ```

## 3. 再度のプッシュ

1. 上記の設定後、再度 `git push` を実行します。

これで、GitHubへのプッシュがアクセストークンを使用した認証で正常に行われるはずです。


## まとめ

GitHubのパスワード認証の終了に伴い、新しい認証方法に変更する必要が出てきました。
上記の手順を参考に、スムーズに移行しましょう。
JavaScript　イベント処理　メモ

# イベント処理とは
- ユーザーの行動に合わせてDOM操作を行う
    - フォームを送信する
    - ボタンをクリックする
    - など
# イベント処理の作り方
```JavaScript.js
HTML要素.addEventListener('イベント種類',()=>{
    イベント処理
});

```

# イベント種類
| イベントの種類 | 処理の実行タイミング |
| ---- | ---- |
| click | マウスボタンを押して話した時 |
| scroll | 画面をスクロールした時 |
など

# 例
```JavaScript.js

//outputと指定しているidを持つHTML要素を取得し定数に入れる
const btn = document.getElementbyId('output');

//outputとid指定しているボタンをクリックする際のイベント処理
btn.addEventListener('click',()=>{
    console.log(ボタンがクリックされました);
});

```
vscode + docker/docker-compose の作業をするときに最初にやること

vscode では docker/docker-compose での開発作業が楽にできる。
基本的には

* Remote Development 拡張をインストールする
* 適当に docker-compose関連のファイル群を追加する
* 開発コンテナー構成ファイルを追加する
* コンテナを再度開く

のような手順でdocker-compose.ymlに書いたコンテナが一斉に起動して使用可能になる…はずなのだが、デフォルト設定を使ってnginxとかでweb serverを実行しようとするとそのコンテナは起動しないかnginxが起動できない、とか言う結果となる。

以前にも同じ目にあって「ああ、これは罠だ」と思ったはずなのだけど1年ぶりとかに別の作業をし始めてから４時間ほど悩んでしまった。



.devcontainer/docker-compose.yml

```
    # Overrides default command so things don't shut down after the process ends.
    command: /bin/sh -c "while sleep 1000; do :; done"
```

この記述を抹消する。
コメントに書かれている通り、このコマンドは「実行が終了してしまうようなコンテナを実行し続けたい場合に実行の終了を阻止する」ために実行されなければならないが、 nginxとかはデフォルトでコンテナを実行し続けようとするはずなのでまったく無駄というか邪魔なので、消してしまって問題ない。
Instagram投稿をiftttでtwitterに連携（Filterで140文字制限を考慮）

Instagramに投稿した際に、iftttで画像と投稿をtwitterに自動投稿したかったのだけど、Instagramのハッシュタグの文字数が、twitter投稿時に邪魔になったので、filterでの処理を実施。

備忘録として残す。
IFTTT自体の条件は下記

if
    any new photo by you
then
    Post a tweet iwth image



下記がコード。
ハッシュタグが邪魔なので、ハッシュタグが来るか、280byte制限がきそうだったらInstagramの本文を短縮する。
InstagramのURLを連携しておきたいので、(280byte - url23byte )/ 2 = 128文字で設定してみた。

```javascript:filter code
let sharpindex = Instagram.anyNewPhotoByYou.Caption.indexOf("#");

Twitter.postNewTweetWithImage.setTweet(Instagram.anyNewPhotoByYou.Caption.substring(0,Math.min(sharpindex,128))+Instagram.anyNewPhotoByYou.Url);

Twitter.postNewTweetWithImage.setPhotoUrl(Instagram.anyNewPhotoByYou.SourceUrl);
```
Terraformのsnowflake_grant_privileges_to_roleでハマった話

## はじめに

私が所属しているライフイズテックのデータ基盤グループでは、Snowflakeの権限管理にTerraformを用いています。

[TerraformでSnowflakeのアクセス制御を管理する](https://qiita.com/s11y/items/a3a7dedcfd8feafd8408)で紹介しているように、導入当初のTerraformバージョンでは、権限設定のコードが冗長で管理が難しくなるという課題を抱えていました。
そこで、v0.68.0で導入された[snowflake_grant_privileges_to_role](https://registry.terraform.io/providers/Snowflake-Labs/snowflake/0.68.0/docs/resources/grant_privileges_to_role)での権限設定へ更新した際に`OWNERSHIP`についての設定でハマった問題をまとめます。


## 起こったこと
以前の`snowflake_database_grant`や`snowflake_schema_grant`などを使っていた際は、`OWNERSHIP`は`USAGE`と同様に下記にように設定が可能でした。
```terraform
resource "snowflake_database_grant" "g1" {
  database_name = snowflake_database.xxx.name
  privilege = "OWNERSHIP"
  roles = [
    "ACCOUNTADMIN"
  ]
  with_grant_option = false
}

resource "snowflake_database_grant" "g2" {
  database_name = snowflake_database.xxx.name
  privilege = "USAGE"
  roles = [
    "ACCOUNTADMIN"
  ]
  with_grant_option = false
}
```

そのため`OWNERSHIP`の権限についても他の権限と同様に`snowflake_grant_privileges_to_role`を使うように修正を加えました。しかし`OWNERSHIP`以外の権限を設定した場合は成功するにも関わらず、`OWNERSHIP`に関するリソースについては失敗するという事象に悩まされました。

```terraform:成功例
resource "snowflake_grant_privileges_to_role" "g1" {
  role_name         = "SYSADMIN"
  privileges        = ["USAGE", "MONITOR"]

  on_account_object {
    object_type = "DATABASE"
    object_name = snowflake_database.xxx.name
  }
}
```
```terraform:失敗例
resource "snowflake_grant_privileges_to_role" "g1" {
  role_name         = "ACCOUNTADMIN"
  privileges        = ["OWNERSHIP"]

  on_account_object {
    object_type = "DATABASE"
    object_name = snowflake_database.xxx.name
  }
}
```

`OWNERSHIP`を使ったリソースについては下記のエラーが発生しました。
[GRANT OWNERSHIP](https://docs.snowflake.com/ja/sql-reference/sql/grant-ownership)のドキュメントを確認すると、依存権限が存在する場合は依存権限を事前に取り消すか、明示的にコピーするかしないといけないということが原因でした。
```error
Error: error granting privileges to account role: 003036 (23001): SQL execution error: Dependent grant of privilege 'ADD SEARCH OPTIMIZATION' on securable 'XXX' to role 'YYY' exists.  It must be revoked first.  More than one dependent grant may exist: use 'SHOW GRANTS' command to view them.  To revoke all dependent grants while transferring object ownership, use convenience command 'GRANT OWNERSHIP ON <target_objects> TO <target_role> REVOKE CURRENT GRANTS'.
```



## 対応策
[Snowflakeのエンジニアのコメント](https://github.com/Snowflake-Labs/terraform-provider-snowflake/issues/1942#issuecomment-1650641414)によると、`snowflake_grant_privileges_to_role`は`OWNERSHIP`を操作するためには、作られていないとのことで、今後登場する`snowflake_grant_ownership`を待つ必要があります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/75302/b858bfa1-96a9-c18c-36ca-508be5d6518d.png)

ということで、当面の間は以前のまま`snowflake_database_grant`や`snowflake_schema_grant`を利用し続けるという回避を行うことになります。
```terraform
resource "snowflake_database_grant" "g1" {
  database_name = snowflake_database.xxx.name
  privilege = "OWNERSHIP"
  roles = [
    "ACCOUNTADMIN"
  ]
  with_grant_option = false
}
```

## 宣伝
ライフイズテック サービス開発部では、月毎に気軽にご参加いただけるカジュアルなイベントを実施しています。開催予定のイベントは、 [connpass のグループ](https://life-is-tech.connpass.com/)からご確認ください。興味のあるイベントがあったらぜひ参加登録をお願いいたします。皆さんのご参加をお待ちしています！
Oracle Cloud Infrastructure Architect Associate 勉強メモ（MySQL DataBase Service）

# 概要
- すべての構築・管理・サポートをOracleが担当。
- オンプレミスのMySQLと100%の互換性
- インメモリの分析エンジン**Heat Wave**を搭載
- MySQL Enterprise Editionがベース。
- 使いやすさ・セキュリティ・Enterprise ready(オンプレミスのMySQLとの互換性？）のあるDB
### 使いやすさ
- フルマネージドサービス
設定・パッチ適用・バックアップ・モニタリングなどの自動化

### セキュリティ
- OCI上に構築することで高いセキュリティを確保
- ブロックボリュームを用いた冗長化
- データ暗号化

# Oracleの責任とユーザーの責任
### Oracleの責任
- バックアップとリカバリー
- DBとOSのパッチ適用
- モニタリングとログ処理
- MySQL Enterprise Editionで利用可能なセキュリティ

### ユーザーの責任
- 論理的スキーマのモデリング
データベースを管理するすべてのルール（テーブル名、フィールド名、エンティティー関係、保全性の制約など）の情報で、スキーマ・オブジェクトを明確に定義する。
- クエリの設計と最適化
- データへのアクセスおよび保持ポリシーの定義

# インメモリ・クエリ処理エンジン
- 従来のOracle DB
分析を行うことはできるが、高度な分析を行うには別に分析用DBを作成しETL処理（データ統合処理）でデータをコピーし分析する。
- MySQL Database Service
分析クエリ実行のためのインメモリのクエリ処理エンジンによる処理。
DBを２つ用意する必要がなく、MySQLにつなげるだけでよい。
機械学習を利用し、オペレーションを自動化している。

# HeatWave
MySQL DB システム内にHeatWaveのプラグインを設置し、外部にあるクラスター構造で構築されるノード（HeatWaveクラスター）とつなげる。
ユーザーからはMySQLにつなぐだけで分析処理を行える。
- 単一のMySQLで更新処理と高速な分析処理が可能
- 既存のMySQL対応のアプリケーションはそのままでよい。
- 通常のMySQLよりも400倍以上高速かつ数千コアまでスケール可能
コーディングにおけるコメントの注意点

こんにちは。
本日はプログラミング初心者の方に向けて、コーディングの際のコメントで気を付けていること、
便利なショートカットキーをご紹介します。

## 目次
[1.コメントとは](#1-コメントとは)
[2.コメントを書くときの注意点](#2-コメントを書くときの注意点)
[3.ショートカットキーでコメントアウトする](#3-ショートカットキーでコメントアウトする)
[4.最後に](#4-最後に)


# 1. コメントとは
コメントとは、プログラミングの際にソースコードに記載される文章ですが、プログラムとして実行される命令文ではなく、プログラムの開発を行う人のために周辺のコードの意味を説明するための文章、注釈文のことです。この部分はプログラムが処理を行うときにはないものとされるため、自由に文を挿入することができます。

基本的な文法は以下の通りです。

行頭に「//」をつける
```
//1行のコメント
```
複数行まとめてコメントアウトしたい場合は「/* */」で囲む
```
/*
複数行のコメント
複数行のコメント
*/
```

# 2. コメントを書くときの注意点

**読み手のことを考えて書く**

コメントは後から処理を見直したり、他の人がソースを読んだときにひと目で処理内容がわかるように書くことが大切です。自分だけが理解できる書きかたではなく、誰が見てもわかりやすいように書きましょう。
　・そのコードを見るチームのメンバー
　・コードを書いた自分自身が後からわかるように書く
など、誰に書くのかをイメージすることが重要です。
また、曖昧な表現など、読み手に疑問が残る表現は避けるべきです。


**コードの説明ではなく、機能の説明をする**

コメントは、そのコードでどんな機能を持たせたいのかを書きます。
要約や意図を記述することで、ソースコード内容の理解が格段に上がります。

**コードの翻訳(コードを見ればわかること)は書かない**

```
//「hensu」が「speedlink」だったら「japan」と表示する
if(hensu == "speedlink"){
　　echo "japan";
}
```

上記のようなコードを見たら分かることを日本語に直訳するコメントをしてしまうと、かえって必要な情報が分かりにくくなってしまいます。
また、コメントは端的に要約して冗長にならないようにすることも重要です。

# 3. ショートカットキーでコメントアウトする

コメントアウトしたい箇所がたくさんある場合、いちいち記号を入力するのは面倒です。
そんな時にはショートカット機能を使えば、選択した箇所をまとめてコメントアウトすることも可能です。
使うエディタによってショートカットキーは異なりますが、それだけでプログラミングの効率が上がります。

VSCodeの場合
　Windows: Ctrl + /
　Mac: Command + /

Atomの場合
　Windows: Ctrl + /
　Mac: Command + /

上記ショートカットキーを一度入力するとコメントアウト、もう一度押すとコメントアウトを解除できます。

# 4. 最後に
以上、コーディングの際のコメントで気を付けていること、便利なショートカットキーを解説しました。
プログラミング初心者の方は、適切なコメントを残すことで、後で見返したときに自分自身が助けられることも多いので、意識して行っていけたら良いと思います。


最後までお読みいただきありがとうございました。
DatabricksのレイクハウスフェデレーションによるRedshiftへの接続

こちらで説明しているレイクハウスフェデレーションでRedshiftに接続してみます。

https://qiita.com/taka_yayoi/items/0647f477da65632a3e44

# Redshift環境の構築

実はこちらで手間取ったのでした。構築が初めてだったので。

## VPCとサブネットの作成

以下のように、異なるAZに存在する3つのサブネットを作成します。今は一度にサブネットまで作成できるようになっていて便利ですね。
![Screenshot 2023-08-14 at 14.27.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/85600eee-161a-e86f-21a8-c0c4085d1a54.png)

## セキュリティグループの作成

セキュリティグループも作成します。以下を参考にインバウンドルールでポート`5439`を許可。

https://qiita.com/miyuki_samitani/items/599cae649a00719f4248

## インターネットゲートウェイとルーティングテーブルの作成

外部からの接続を許可するのでインターネットゲートウェイを作成してVPCにアタッチ。サブネットの通信をインターネットゲートウェイにルーティングするようにルートテーブルを作成してサブネットにアタッチ。あれ、これでパブリックサブネットですね。
![Screenshot 2023-08-14 at 15.30.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/156f8bb5-917c-037a-cddd-77b8e3245264.png)
![Screenshot 2023-08-14 at 15.29.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/6361a1a9-9a3a-0512-5eb0-35c0287eba06.png)

## サブネットグループの作成

さらに、以下の記事にあるように、Redshiftの画面に移動して、サブネットグループとして上で作成したサブネットを登録します。

https://repost.aws/ja/knowledge-center/vpc-redshift-associate

![Screenshot 2023-08-14 at 16.14.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/e4fe1975-d10c-eb6c-edc4-1f8cc37b7f72.png)

## Redshiftクラスターの作成

これでRedshiftクラスター作成時に上で作成したVPCを選択できるようになります。あと、以下の記事にあるように **[パブリックにアクセス可能] をオンにする** をチェックします。

https://repost.aws/ja/knowledge-center/redshift-cluster-private-public

![Screenshot 2023-08-14 at 16.16.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/c5f94998-2512-fc2c-a416-69be9c15ca00.png)

これで、インターネット経由でこのRedshiftクラスターにアクセスできるようになりました。

:::note
**注意**
ここでは、デモ目的でインターネットからのアクセスを許可していますが、本番環境構築時にはセキュリティ要件に応じて適切なネットワーク構成を組むようにしてください。
:::

# レイクハウスフェデレーションの設定

以下の手順に沿って、Databricks上で**接続**を作成します。

https://docs.databricks.com/ja/query-federation/redshift.html

![Screenshot 2023-08-14 at 15.00.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/3fe14fbe-767e-a230-c7ed-9fdbf9fe9574.png)

**接続のテスト**が成功することを確認してください。

そして、作成した接続を用いて外部カタログを作成します。
![Screenshot 2023-08-14 at 15.08.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/8d7e1291-0d79-d1d7-c93c-deeae353ac3f.png)

これで、データエクスプローラからRedshiftにアクセスできるようになりました！
![Screenshot 2023-08-14 at 16.22.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/a31f8c96-e7c4-6ba2-5b32-f25a40c9a334.png)
![Screenshot 2023-08-14 at 16.22.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/38b6d667-86f9-79b0-ee65-c2c4c244d317.png)

### Databricksクイックスタートガイド

[Databricksクイックスタートガイド](https://www.amazon.co.jp/dp/B09V1YXFVQ/)


### Databricks無料トライアル

[Databricks無料トライアル](https://databricks.com/jp/try-databricks)