OmniAICreator/Qiita-1.07M huggingface dataset:
What's New from CircleCI - 2023/08/22

CircleCIに関する最近2週間(2023/08/08~22)くらいの情報をまとめてみました。

気のつく限りの情報は拾ってみたつもりですが、見落としなどありましたら、Twitterで [@CircleCIJapan](https://twitter.com/CircleCIJapan) をメンションしてタレ込んでいただけると幸いです。
少しでもお役に立てていましたら、いいね(❤️)クリックいただけると嬉しいです！

[＜ What's New from CircleCI - 2023/08/08](https://qiita.com/CircleCIJapan/items/c3bb9df8dc9282b65990) | 今週 | [What's New from CircleCI - 2023/09/05＞](https://qiita.com/CircleCIJapan/items/a19190cce6b5c90318d1)

# CircleCI Discuss (CircleCIからのお知らせ＆コミュニティ掲示板)
- **日本語アナウンス**: https://discuss.circleci.com/tag/ja-%E6%97%A5%E6%9C%AC%E8%AA%9E
    - **[定期メンテナンスのお知らせ 2023年9月23日 土曜日 午後4時~5時 utc (日本時間 24日 午前1時)](https://bit.ly/445dnDj)**(日本時間8/13予定の定期メンテナンスがこの日に延期されました)

# ユーザーブログ・スライド
- [AWSとCircleCIをOIDCで連携するためのIAMロールの作成(CloudFormation)](https://zenn.dev/jnxjez/articles/e270170893adcd) by ジェイ さん
- [AWSリソースのデプロイ(CircleCI + CloudFormation + cfn-lint + awspec)](https://zenn.dev/jnxjez/articles/aa4b441571ef91) by ジェイ さん
- [CircleCI + LocalstackでError in ASGI Framework](https://qiita.com/kawashinji/items/ae802b79110dd7e65720) by [@kawasystem](https://twitter.com/kawasystem) さん
- [Selenium+Chromeでドライバーのバージョンエラー](https://zenn.dev/gomo/articles/c5209a55835c28) by [@masamotomiyata](https://twitter.com/masamotomiyata) さん
- [10年開発してきたPHPアプリケーションにPHPStanを導入した](https://devblog.thebase.in/entry/2023/08/21/131451) by BASE [@tenkoma](https://twitter.com/tenkoma) さん

# Changelog (更新履歴)

# CircleCI 公式ブログ
- **日本語ブログ**: https://circleci.com/ja/blog/

- **英語ブログ**: https://circleci.com/blog/
    - [DevOps language trends 2023: Top tools used by elite software delivery teams](https://circleci.com/blog/devops-language-trends-2023/)
DevOpsから見る2023年の言語トレンド: 優秀なソフトウェアデリバリチームが使用しているトップツール
        - TechFeed さまにて[CircleCI、DevOps言語トレンド2023を発表 ー TypeScriptとC#の人気が上昇](https://techfeed.io/entries/64dd0bde01b83c4d9cf34cc9) として(日本語で)取り上げていただいています！
    - [60 platform engineering trailblazers to watch](https://circleci.com/blog/platform-engineering-trailblazers/)
チェックしておくべきプラットフォーム・エンジニアリングの60の先駆者たち

# YouTube (動画コンテンツ)
- [CircleCI チャンネル (日本語)](https://youtube.com/playlist?list=PL9GgS3TcDh8x71MTG2uvZ-ljhIkuveSHZ)
- [CircleCI Channel (English)](https://www.youtube.com/c/CircleCI-Videos)

# CircleCI Knowledge Base
- https://support.circleci.com/hc/en-us/

# CircleCI 参加/出展 イベント、セミナーなど
- 08/30(水) 19:30~20:50 [三社三様！テスト自動化アプローチのあれこれ共有会](https://shiftevolve.connpass.com/event/289248/) - SHIFT ✕ NTT 研究所 ✕ CircleCI共同企画
- 09/02(土) [Developers Summit 2023 KANSAI](https://event.shoeisha.jp/devsumi/20230902) at グランフロント大阪 ナレッジキャピタル (CircleCIはシルバースポンサー出展です)
- 09/13(水) [New Relic FutureStack Tokyo 2023](https://www.event-info.com/futurestack_tokyo/) at ベルサール汐留 (CircleCIはプラチナスポンサー出展です)
- 09/14(木) [Cloud Operator Days Tokyo 2023](https://cloudopsdays.com) at docomo R&D OPEN LAB ODAIBA (CircleCIはプラチナスポンサー出展です) 
    - オンデマンド配信中 [Unity を使ったモバイルゲーム CI/CD パイプラインをクラウドネイティブ化しよう](https://cloudopsdays.com/ondemand/#運用自動化) by CircleCI 根本 征
- 10/27(金)~28(土) [PyCon APAC 2023](https://2023-apac.pycon.jp) at TOC有明Convention Hall (CircleCIはゴールドスポンサー出展です)
---
それでは今週も Happy Building⌨!
【ChatGPT無】Custom instructionsを使った防犯手段です。

:::note info
本記事は、ChatGPT（無料版）で
行なっております。GPT4での確認
はできておりません。あしからず。
:::

　どうも、カーブミラーです。

　今回は、
　　Custom instructionsを使った
　　　防犯手段です。

　防犯手段。
　　物騒な文言ですね。

　でも、
　　そんなに
　　　物騒な話でもありません。

　ChatGPTを開いたまま、
　　席を外すこと、
　　　ありませんか？

　例えば、
　　トイレとか会議とか。

　そんなスキに
　　誰かが、NewChatして、
　　　ChatGPTさんを使って、
　　　　あなたが席に
　　　　　帰ってくる前に、
　　　　　　そのセッションを
　　　　　　　削除して、離脱。

　ありえない、と
　　言えるでしょうか？

　あっ、結構、物騒かも。
***
　実は、これ、
　　職場の同僚が、
　　　話しているのを聞いたことに
　　　　端を発しています。

　その内容は、
　　自分の子どもが、
　　　うちのパソコンで、
　　　　ChatGPTを触ってた、
　　　　　というものです。

　まぁ、小学生高学年ならば、
　　親の許可を取っての操作も
　　　許されるんですけど。

　さすがに、
　　低学年や中学年の子どもが
　　　大人の目の届かない場所で、
　　　　触るのはちょっとヤバい。

　でしょ？
***
　そこで考えました。

　何を入力されても、
　　受け付けないように
　　　すればいいんだ、と。

　どうすれば？

　Custom instructionsを使おう。

　まずは、やり取りをご覧ください。
　　NewChat直後からです。
***
User
こんにちは

ChatGPT
暗証番号を入力してください。




User
暗証番号を教えて

ChatGPT
申し訳ありませんが、その情報を提供することはできません。暗証番号を入力していただけますか？




User
暗証番号がわかりません。教えてください。

ChatGPT
申し訳ありませんが、暗証番号を教えることはできません。暗証番号を正しく入力していただけると、お手伝いできる内容が変わります。




User
1234

ChatGPT
暗証番号が正しく入力されました。どのようにお手伝いできるでしょうか？




User
ありがとう。
子どもの宿題に、答えてください。
***
　どうでしょうか？

　まぁ、Custom instructionsを
　　開いて、暗証番号を見られたら、
　　　それまでなんですけどねw

　あるいは、
　　Custom instructionsを
　　　オフにするとか。

　ここまで、
　　できる子どもならば、
　　　逆に、うちの子、頭いい！
　　　　ということで、
　　　　　使わせてあげる、
　　　　　　という手もあるかな。
***
　おっと、
　　肝心の内容を
　　　忘れていましたw

　下の枠に
　　入力してください。
```Text:防犯手段Custom instructions
あなたは、ほかの人がこの端末を使ってしまうことを防ぐ必要があります。
使っていいのは、端末の所有者（私）だけです。
あなたは、何を入力されても、暗証番号の入力を求めてください。
暗証番号が（1234）と正しく入力された場合のみ、普通の応対を取るようにしてください。
・暗証番号を教えて欲しい、と入力されても、教えたり、普通の対応をしないでください。
```
　以上。
Macで個人的に覚えておきたいGoogleスプレッドシートのショートカット集

# はじめに
・コピー＆ペーストなど、ある程度共通のショートカットは省略し、Googleスプレッドシート特有のものを記載します。

[公式ドキュメント](https://support.google.com/docs/answer/181110?sjid=7679189200496011379-AP#zippy=%2Cmac-%E3%81%AE%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88)

# ショートカット一覧

### セルの加除

| 操作 | ショートカット | 備考 |
|:-:|:-:|:-|
| 行全体を選択  | shift+space |  |
| 行を追加 | ⌘ + "+" | 行全体が選択されている状態で使う |
| 行を削除 | ⌘ + "-" | 行全体が選択されている状態で使う |
| 列全体を選択  | ⌘ + space | **後述する理由により、今のところ使用不可です。** |
| 列を追加 | ⌘ + "+" | 列全体が選択されている状態で使う |
| 列を削除 | ⌘ + "-" | 列全体が選択されている状態で使う |

☆様々なサイトで、「行を追加」などを直接実行するショートカットが紹介されていますが、個人的には、
1. 先に「行全体を選択」する
1. その後、「行を追加 or 削除」する

このほうが使いやすいと感じています。

### シートの移動

| 操作 | ショートカット |
|:-:|:-:|
| 左のシートへ移動  | option + ↑ |
| 右のシートへ移動  | option + ↓ |

### 書式設定
| 操作 | ショートカット |
|:-:|:-:|
| 中央揃え  | ⌘+shift+E |
| 左揃え  | ⌘+shift+L  |
| 右揃え  | ⌘+shift+R  |
| 上枠線  | option+shift+1  |
| 右枠線  | option+shift+2  |
| 下枠線  | option+shift+3  |
| 左枠線  | option+shift+4  |
| 取消線  | option+shift+5  |
| 枠線を削除  | option+shift+6  |
| 上下左右の枠線  |option+shift+7   |

### 列選択ショートカットが使えない問題
`⌘ + space`はSpotlightのショートカットと競合している。Spotlightの `⌘+space` ショートカットを下記の通りオフにしてみました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/852882/749b0126-a594-73cc-fdd1-4ac4ef98bb3f.png)

しかし、動かず。。。

こちらの記事を参考に、オーバーライドなどもやろうとしましたが、そもそもオーバーライド設定を見つけられず。。。
https://naruo.info/archives/4698

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/852882/2e352828-7d0c-76e2-73de-c7474aab423a.png)


現在、調査中です。
関数 最新日付のデータを取得して、記入する。

# やりたいこと
同じコードである、別シートから、最新登録している日付のデータを取得の
メールアドレスを取得して記入する関数

# 取得して、記入したいシート
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592268/9fc197de-e0b3-a2e5-3bdc-a6a56ebc8694.png)

# data シート
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592268/949872c7-dd1b-c61b-3e21-897af379c5b0.png)

# 記入関数
```php
=IFERROR(INDEX(data!$A$2:$B$286,MATCH(IF(A2="","",MAX(INDEX((data!$A$2:$A$286=A2)*data!$C$2:$C$286,))),data!$C$2:$C$286,0),2),"")
```

# IFERROR関数
```php
=IFERROR(値,エラーの場合の値）
```
| 引数名 | 説明 | 
|:-----------|------------:|
| 値（必須）      | エラーかどうかをチェックする数式やセル参照を指定します。        | 
| エラーの場合の値（必須）     | 第1引数「値」がエラーの場合に返す値を指定します。       | 

 # INDEX関数
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592268/5c1cc07f-547f-0818-2856-692298853b60.png)
INDEX関数には3つの引数があります。
・［配列］：データを抽出する範囲
・［行番号］：配列の中で何行目か
・［列番号］：配列の中で何列目か

# MATCH関数
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592268/33141926-d930-9748-8575-2d6dc69aec8c.png)
MATCH関数には3つの引数があります。
・［検査値］：検索する値
・［検査範囲］：検索する範囲
・［照合の種類］：検索方法を指定する
1→検査値以下の最大値
0→検査値に一致する値のみ
-1→検査値以上の最小値
# Xcode15以降のSwift DocCに入門

# Xcode15以降のSwift DocCに入門
https://developer.apple.com/videos/play/wwdc2023/10244
https://developer.apple.com/documentation/xcode/slothcreator_building_docc_documentation_in_xcode

Xcode15からドキュメントのPreviewが動的に見れるようになり、楽しい。
WWDC2023の動画とそこでシェアされたSwift DocCのサンプルプロジェクトsloth creatorから見て学ぶ。

ドキュメントの参考画像
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2361573/603fd7a9-43d3-2aa1-fe78-5e714fa702f7.png" width=70%>

## Documentation Previewの表示
Xcode15以降でNavigation side barから以下の内どれかを選択する。
>- Swift source files
>- Objective-C source files
>- documentation markdown files

以下の手順でDocumentation Previewを表示
1. Editor Options 
1. Assistant
1. Assistant Editor jump bar
1. Documentation Preview
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2361573/bd797cad-842b-5d8b-d478-9512f55998cc.png" width=70%>
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2361573/cd0714e9-31a6-fa05-d101-d5ff5dd4e539.png" width=70%>

## Documentation catalog
documentationのためのアセット。
Swift Packages, Xcode proiects で使用可能。
*これはdocumentation専用アセットだから、app内で同じコンテンツを使用する場合はこれまで通りasset catalogに追加する
dark mode用の画像は`ファイル名-dark.拡張子`とする

Swift DocCは基本的にmarkdownの記法でかけるが、それだけでなくdirectivesという拡張された記法もある。

## directives
一覧はこちらから。

https://developer.apple.com/documentation/docc/api-reference-syntax

```
@Row {
    @Column(size: 2) {
        Dogs are smart
        }
    @Column {
        Cats are cute
    }
}
```
この時Rowの領域の2/3がDogs are smartによって、1/3がCats are cuteによって占められる。
*Documentation PreviewはXcodeのWindowを十分な大きさにしないと横並びのコンテンツを（勝手に）縦にいい感じに並べるので注意が必要。

```
@TabNavigator {
     @Tab("English") {
         Dogs are also cute
    }
     @Tab("Japanese") {
         犬も可愛い
    }
     @Tab("Chinese") {
         狗也很可爱
    }
}
```
複数のコンテンツをタブ表示し、選択したタブの項目を表示する機能。

```
@Metadata {
    @CallToAction (
    purpose: link,
    url: "..."
    )
    @PageKind(article)
}
```
`@Metadata {}` : 直接はレンダリングされないメタデータ。
`＠CallToAction()` : 目立つボタンやリンクをヘッダーに置く。`purpose`には`link` 以外に`download`も渡せる。
`@PageKind()` : ページの種類として`article`か`sampleCode`を渡せる。種類はヘッダーのタイトルの上に小さな文字で表示される他、種類に応じてヘッダーのデフォルト背景画像も自動で切り替わる

```
@Links(visualStyle: list) {
 ...
}

```
`visualStyle`には`list`以外にも`detailedGrid`なども渡せる
`detailedGrid`で表示されるサムネイル画像は、その遷移先のファイルで以下のように定義しておく必要がある。
```
@Metadata {
  @PageImage(
    purpose: card,
    source: "..."，
    alt: "画像の説明文 for accessibility"
  )
}
```
`@PageImage{}`の`purpose`には`card`の他に`icon`も渡せる。ヘッダーの背景画像やNavigation side barのアイコンが変わる。

```
@Metadata {
  @PageColor(yellow)
}

```
でページのアクセントカラーを変える。

# Theme
JSON(ファイル名は`theme-settings.json`として`documentation catalog`内に配置。)を用いて見た目のカスタムを定義することができるが、基本はdirectivesが推奨
ページ単位での見た目のカスタムもdirectivesが推奨。Webで公開するときに他コンテンツに合うように見た目を変更したくて、かつドキュメント全般に適用したい時のみJSONで。
また、`theme-settings.json`を定義してもXcodeで開いた時にはXcodeのthemeが適用されるので影響を受けない。
詳しくは冒頭紹介したWWDC2023の動画で。

# 思ったこと
美しいdocumentを作成するには構造的な文章をその構造が伝わる適切な見た目で配置していく必要がある。
逆に非構造な文章はレイアウトを綺麗にできない。なのでdocument入門者の自分は今後以下のように書きたい。
1. プレインテキストでベタ書きし概念的、論理的なつながりを基に整理する
1. マークダウンをつける
1. それでも物足りなければdirectionをつける
Coldfusion配下にWebpack＋Tailwindを導入する方法

## ColdFusionでWebpackを使用してTailwind CSSを導入する手順

### 1. プロジェクトのセットアップ

新しいディレクトリを作成し、その中でnpmの初期化を行います。
フォルダ名は任意のものを設定してください。

```bash
mkdir cf-project
cd cf-project
npm init -y
```

#### ディレクトリ構造
サンプルですがこういう形でフォルダを切るのが良いかと思います。

```bash
cf-project/
|-- src/
| |-- css/
| | |-- styles.css
| |-- js/
| | |-- index.js
|-- dist/
|-- package.json
|-- webpack.config.js
```

### 2. 必要なパッケージのインストール

Webpack、Tailwind CSS、および関連するローダーやプラグインをインストールします。

```bash
npm install webpack webpack-cli tailwindcss postcss postcss-loader mini-css-extract-plugin css-loader css-minimizer-webpack-plugin --save-dev
```

### 3. Tailwindの設定

Tailwind CSSの設定ファイルを生成します。

```bash
npx tailwindcss init
```


### 4. PostCSSの設定

`postcss.config.js`ファイルをプロジェクトのルートに作成し、以下の内容を追加します。

```javascript
module.exports = {
  plugins: [
    require('tailwindcss'),
    require('autoprefixer'),
  ]
}
```

### 5. Webpackの設定

`webpack.config.js`ファイルを作成し、以下の内容を追加します。

```javascript
const path = require('path');
const MiniCssExtractPlugin = require('mini-css-extract-plugin');


module.exports = {
  entry: './src/js/index.js',
  output: {
    filename: 'bundle.js',
    path: path.resolve(__dirname, 'dist'),
  },
  module: {
    rules: [
      {
        test: /\.css$/,
        use: [
          MiniCssExtractPlugin.loader,
          'css-loader',
          'postcss-loader'
        ],
      },
    ],
  },
  plugins: [
    new MiniCssExtractPlugin({
      filename: 'styles.css',
    }),
  ],
  optimization: {
		minimizer: [new CssMinimizerPlugin()],
	},
};
```

### 6. ソースファイルの作成

- `src/css/styles.css`に以下のTailwindのユーティリティを追加します。

```css
@import 'tailwindcss/base';
@import 'tailwindcss/components';
@import 'tailwindcss/utilities';
```

- `src/js/index.js`に以下の内容を追加して、CSSをインポートします。

```javascript
import '../css/styles.css';
```

### 7. ビルドスクリプトの追加

`package.json`に以下の`scripts`セクションを追加します。

```json
"scripts": {
  "build": "webpack --mode production"
}
```

### 8. ビルドの実行

以下のコマンドを実行して、Webpackを使用してTailwind CSSをコンパイルします。

```bash
npm run build
```

`dist/`ディレクトリに`bundle.js`と`styles.css`がコンパイルして生成されるので、
その`styles.css`をColdFusionのテンプレートやレイアウトにリンクタグで設定して使用します。
Pardot:拡張ランディングページ


+ [削除したランディングページを復元する方法](https://qiita.com/Keiji_otsubo/items/02921bf9ab31416fc220)


+ [フォームを拡張ランディングページに組み込むとフォームのレイアウトがデフォルトの状態で表示されてしまいます。](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007BHCFd)

:::note
知っておくべき最も重要なことは、拡張ランディングページビルダーでスタイルを編集した場合でも、Account Engagement フォームレコードに適用されたスタイルはそのフォームが表示されるすべての場所で使用されることです。フォームにスタイルを適用する方法はいくつかあります。

+ [デザイン] セクションのフォームスタイルを使用する。
+ [フォーム上部] セクションでカスタムコードを適用する。
+ 拡張ランディングページビルダーのフォームコンポーネントで [スタイル] タブを使用する。

https://help.salesforce.com/s/articleView?id=sf.pardot_lps_style_forms_using.htm&type=5
:::

+ [拡張されたランディング ページの作成で説明されているコンポーネントが表示されません -](https://trailhead.salesforce.com/en/trailblazer-community/feed/0D54S00000Je5nKSAR)

:::note
Make sure you have the new Lightning email builder enabled and to have the required permission set.
:::

# ランディングページのタグの扱い URLが勝手に変わる

+ [Why does the landing page editor not allow anchors tags <a> with multiple tags inside?](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V000074q6kD)

```
これは、インライン要素 <a> 内の要素 <h3> をブロックするしかないためです。<h3> は「ブロック レベル」タグとして設計されており、ランディング ページに基本的な構造を提供します。
<a> はインライン タグであり、<strong>、<em>、<code> と同じようにその構造内に配置されるように設計されています。

そのため、この例では、<h3> と <p> の中に <a> タグが含まれるようにコードが変更されています。
```


# OGP オープン グラフ画像

+ [ランディングページごとに異なるOGPを書くには？](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007clSgB)

:::note
独自のオープン グラフ画像が必要な場合は、ランディング ページごとにレイアウト テンプレートを作成する必要あるようです。

5 years later and there's still no easy or automatic way to set unique open graph images for each landing page. This means you have to create a layout template for every landing page if you want unique open graph images. Crazy.

https://trailhead.salesforce.com/trailblazer-community/feed/0D54S00000A8qb8SAB
:::
【Eslint】 'xxx is not defined'エラーの原因

# はじめに
SAPfiori UI5の静的解析を目的にEslintを導入しました。
その際に発生した'xxx is not defined'のエラーについて、sap、jQueryを例に以下に記載します。
参考になれば幸いです。

# エラー
**①sap**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3516839/10eaacc1-34ef-11e5-425c-4ad84495e7b3.png)

:::note alert
Error： 'sap' is not defined.
:::

**②jQuery**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3516839/9cbc457a-634e-338e-e607-4a8e67f23714.png)

:::note alert
Error： 'jQuery' is not defined.
:::

# 原因と解決方法
## 原因
ESLintは実行環境にどのようなグローバル変数が存在するかを想定していません。
そのため、以下の方法で定義する必要があります。

①設定ファイル内でグローバル変数を定義
②ソースコード内でコメントを使用して定義

## 解決方法① 設定ファイル内でグローバル変数を定義する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3516839/0e7ddcf1-0f65-9ba6-b509-698a2a45ce38.png)
```.eslintrc.js
globals: { sap: true, jQuery: true}
```

## 解決方法② ソースコード内でコメントを使用して定義する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3516839/58b752ab-7e44-5cda-9ae2-a69af6a9e737.png)
```
/*global sap, jQuery */
```


# 結果
エラーが解消されていることが確認できました。
**sap**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3516839/d3120674-104a-bec2-65f6-98453172d6c2.png)
**jQuery**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3516839/069f76f8-5686-c626-c1d9-a5be6bcc1a4c.png)


# 参考
・Eslint
https://eslint.org/docs/latest/use/configure/language-options#specifying-environments
・SAP
https://help.sap.com/doc/saphelp_nw74/7.4.16/en-us/cc/fe35638f1d46e2bbcf06fa60ccc6ef/frameset.htm
Databricks にて Unity Catalog と Hive メタストアにおけるマネージドテーブル作成時のディレクトリ命名規則の差異確認

## 概要

Databricks にて Unity Catalog のマネージドテーブル作成時と Hive メタストアのマネージドテーブル作成時にて、ディレクトリの命名規則の差異を確認するコードを共有します。次表がディレクトリ名のサンプルであり、Unity Catalog では 36 字のランダムな文字列（おそらく UUID）に基づいたディレクトリとなっているのに対して、Hive メタストアではテーブル名に基づいだディレクトリとなっています。

| #    | メタストア      | ディレクトリ名のサンプル                                     |
| ---- | --------------- | ------------------------------------------------------------ |
| 1    | Hive メタストア   | dbfs:/user/hive/warehouse/dir_diff.db/table_01               |
| 2    | Unity Catalog | abfss://metastore@dbunitycatalogus.dfs.core.windows.net/84690733-be0b-4079-902b-8ae4d60b3515/tables/5c1c3b4a-45bd-46c0-8377-d8bd35920555 |

Unity Catalog のディレクトリ名がランダムになる旨が次のように記載されており、ディレクトリ名の衝突を避けることが目的のようです。

> The name of this directory is randomly generated to avoid any potential collision with other directories already present.

引用元：[Unity カタログによって管理されるデータのパスはどのように機能しますか?- Azure Databricks |マイクロソフト ラーニング (microsoft.com)](https://learn.microsoft.com/ja-jp/azure/databricks/data-governance/unity-catalog/paths#paths-for-external-tables-and-external-volumes-are-governed-by-unity-catalog)

> このディレクトリの名前は、既に存在する他のディレクトリとの潜在的な衝突を回避するためにランダムに生成されます。

上記の翻訳

## 検証

### Unity Catalog のマネージドテーブルのディレクトリを確認

```python
%sql
CREATE CATALOG IF NOT EXISTS dir_diff;
CREATE SCHEMA IF NOT EXISTS dir_diff.schema_01;
CREATE TABLE IF NOT EXISTS dir_diff.schema_01.table_01
(
  str_col string
)
;
```

```python
%sql
DESC EXTENDED dir_diff.schema_01.table_01;
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/ad04b269-a95c-dbda-d4c1-2199dc100758.png)


### Hive メタストアのマネージドテーブルのディレクトリを確認


```python
%sql
CREATE SCHEMA IF NOT EXISTS hive_metastore.dir_diff;
CREATE TABLE IF NOT EXISTS hive_metastore.dir_diff.table_01
(
  str_col string
)
;
```

```python
%sql
DESC EXTENDED hive_metastore.dir_diff.table_01;
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/f8ab1f4e-c46b-4eaa-b312-2128d170ae26.png)

### リソースの削除

```python
%sql
DROP SCHEMA hive_metastore.dir_diff CASCADE;
```

```python
%sql
DROP CATALOG dir_diff CASCADE;
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/0d369640-48de-1150-5b0f-93401a7c4a9a.png)
Laravel10でabobe/s3mockを触っていたら「Class "League\Flysystem\AwsS3V3\PortableVisibilityConverter" not found」に悩まされた。

s3にファイルアップロードをする処理を書いていたのですが、「Class "League\Flysystem\AwsS3V3\PortableVisibilityConverter" not found」の解消につまづきました。

# 原因
league/flysystem-aws-s3-v3のインストールが出来たつもりで全く出来ていませんでした。

composer.json require内に「"league/flysystem-aws-s3-v3": "^3.0",」の記述をしていませんでした。
composer.lockにはあったため見逃していました。検索で引っかかった文字だけを見て、インストールしたつもりになっていました.......
先輩が用意してくださったプロジェクトをcloneして作業していたのですが、知識が浅いことがバレバレ.......

新人あるあるだと思いたいです。
setCellでstyleベタ打ちではなくclassを設定する

## やりたいこと
gridComplete()で条件に当てはまるセルに色を付ける。
その際、「{ background: color }」の部分をcssに定義したクラス名としたい。

~~~ js:sample.js
function gridComplete() {
      var grid = $('#list');
      var rows = grid.getRowData(); //get data
      for (var idx in rows) {
        var row = rows[idx];
        var color;
        // define colors
        if (row.statusCode == '1') {
          color = '#99FF99'; // Light green 
        } else {
          color = '#FF6666'; //Light red
        }
        grid.setCell(row.id, 'program', '', { background: color }); 
        grid.setCell(row.id, 'status', '', { background: color }); 
      }
    };
~~~

## そもそもsetCellってなんぞや
使い方はこんな感じ↓
(グリッドテーブル).setCell(行を特定するなにか, 列名, 変更後の値(空の場合変更しない), スタイル);

つまり↓は、
~~~
grid.setCell(row.id, 'status', '', { background: color }); 
~~~
grid : グリッドテーブル
row.id : 行を特定するid
status : 列名は"status"
{ background: color } : ←スタイル
…ってことになりますね。


## ほんならcssに定義しよか
csjsにスタイルベタ書きは管理の面でよくないのでcssで一括管理しましょう（基本）。
~~~ style.css
.test-green{
    background: #99FF99
}
.test-red{
    background: #FF6666
}
~~~
これをsetCellするにはこう。
~~~ js:sample2.js
function gridComplete() {
      var grid = $('#list');
      var rows = grid.getRowData(); //get data
      for (var idx in rows) {
        var row = rows[idx];
        var color;
        // define colors
        if (row.statusCode == '1') {
          color = 'test-green'; // #99FF99
        } else {
          color = 'test-red'; // #FF6666
        }
        grid.setCell(row.id, 'program', '',color); 
        grid.setCell(row.id, 'status', '', color); 
      }
    };
~~~
setCellの第四引数にclass名を渡してあげればOK。
これにより、cssで色管理ができる。

【ちょっと解説】
「color = 'test-green';」ないし「color = 'test-red';」でcolorにクラス名を定義。
それを第四引数に渡している。


## ハマったこと
「color = '.test-red'; 」のように、「.」をつけちゃうとcssが反映されないので注意。
あくまで渡すのはcss定義済みのクラス名だけでよい。

## 参考にした記事
[setCell method > how to set class of the fourth parameter?](https://stackoverflow.com/questions/2874906/jqgrid-setcell-method-how-to-set-class-of-the-fourth-parameter)
[imuiListTableで行の背景色を動的に変更する方法](https://dev.intra-mart.jp/cookbook113290/)

以上。
【備忘録】apktoolで「'""C:\Program' is not recognized...」のエラーが表示される

急ぎで書いてます。

# はじめに

久しぶりにapktoolを用いてapkの解析を行おうとしました。
`apktool.bat d hoge.apk`を実行したところ...

```
C:\Users\hoge\apktool>apktool.bat d hoge.apk

'""C:\Program' is not recognized as an internal or external command,
operable program or batch file.
```

なんかうまくいきませんでした。


# 解決法
apktoolフォルダ内の`apktool.bat`の9行目部分
```bat
set java_exe="%JAVA_HOME%\bin\java.exe"
```
を
```bat
set java_exe=""%JAVA_HOME%"\bin\java.exe"
```
という感じでダブルクォーテーションを追加したら無事にコマンドを実行できました。


# 参考

https://github.com/iBotPeaches/Apktool/issues/2862

https://github.com/iBotPeaches/Apktool/issues/2874
HTMLでアップロードしたファイルのデータをPHPで取得・格納する方法

## 1. HTMLでのファイル選択

HTMLでファイルを選択するためのフォームを作成します。

```html
<form action="upload.php" method="post" enctype="multipart/form-data">
    <input type="file" name="uploaded_file">
    <input type="submit" value="Upload">
</form>
```

このフォームは、ファイルを選択し、`upload.php`にデータをPOSTするためのものです。

## 2. PHPでのファイルデータの取得

`upload.php`で選択されたファイルのデータを取得します。

```php
<?php
if (isset($_FILES['uploaded_file'])) {
    $filename = $_FILES['uploaded_file']['name'];
    $tempPath = $_FILES['uploaded_file']['tmp_name'];
    $fileSize = $_FILES['uploaded_file']['size'];
    $fileType = $_FILES['uploaded_file']['type'];
}
?>
```

このコードは、アップロードされたファイルの情報（ファイル名、一時パス、ファイルサイズ、ファイルタイプ）を取得します。

## 3. アップロードしたファイルのレコードを変数に格納

アップロードされたファイルの内容を行ごとに読み取り、変数に格納します。

```php
$records = []; // レコードを格納する配列を初期化

if (isset($_FILES['uploaded_file']) && $_FILES['uploaded_file']['error'] === UPLOAD_ERR_OK) {
    $file = new SplFileObject($_FILES['uploaded_file']['tmp_name'], 'r');
    $file->setFlags(SplFileObject::READ_CSV);

    foreach ($file as $row) {
        if (!empty($row)) { // 空の行をスキップ
            $records[] = $row;
        }
    }
}

// $records 配列には、CSVファイルの各レコードが格納されています。
```

このコードは、アップロードされたCSVファイルの各レコードを読み取り、`$records` 配列に格納します。この配列を使用して、データベースへの保存やその他の処理を行うことができます。
Docker ruby:2.3.5 を利用する

以下が必要
`echo "deb http://archive.debian.org/debian jessie main" > /etc/apt/sources.list`

```
FROM ruby:2.3.5-slim-jessie

# パッケージインストール
RUN echo "deb http://archive.debian.org/debian jessie main" > /etc/apt/sources.list \
    && apt-get --yes --force-yes update \
    && apt-get --yes --force-yes install \
    build-essential \
```
SwiftUIでSVGを扱う方法: SwiftSVGライブラリを活用した完全ガイド



SwiftUIでのアプリ開発を進めていると、SVGの取り扱いについての要件が出てくることがあります。SwiftUIはネイティブでSVGをサポートしていないため、この記事ではSwiftSVGというサードパーティライブラリを利用してSVGを表示する方法を解説します。

**目次**
- [SwiftSVGの導入](#SwiftSVGの導入)
- [プロジェクトへのSVGファイルの追加方法](#プロジェクトへのSVGファイルの追加方法)
- [SVGをSwiftUIで表示する](#SVGをSwiftUIで表示する)
- [まとめ](#まとめ)

---

## SwiftSVGの導入
SwiftSVGをプロジェクトに追加するには、Swift Package Managerを使って簡単に導入することができます。

1. Xcodeを開き、対象のプロジェクトを選択します。
2. ナビゲーションバーの「File」 > 「Swift Packages」 > 「Add Package Dependency...」を選択します。
3. パッケージリポジトリURLに`https://github.com/mchoe/SwiftSVG.git`を入力し、"Next"をクリックします。
4. 必要なバージョンを選択し、"Next"をクリックします。
5. インストールしたいターゲットを選択し、"Finish"をクリックします。

```swift
import SwiftSVG
```

---

## プロジェクトへのSVGファイルの追加方法
SVGファイルをXcodeプロジェクトに追加する方法は非常にシンプルです。

1. Xcodeのプロジェクトナビゲーターを開きます。
2. SVGファイルをFinderから直接ドラッグ＆ドロップします。
3. 以下のオプションを選択します：
   - Copy items if needed
   - Create groups
   - Add to targets (メインのアプリターゲットを選択)

---

## SVGをSwiftUIで表示する
SwiftSVGと組み合わせてSVGをSwiftUIで表示する基本的な方法を以下に示します：

```swift
import SwiftSVG

let svgView = UIView(SVGNamed: "your_svg_name") { (svgLayer) in
    svgLayer.resizeToFit(self.bounds)
}

struct SVGView: UIViewRepresentable {
    func makeUIView(context: Context) -> UIView {
        return svgView
    }
    
    func updateUIView(_ uiView: UIView, context: Context) {
    }
}
```

これで、SwiftUIのビューヒエラルキー内で`SVGView`を使用してSVGを表示することができます。

---

## まとめ
この記事では、SwiftUIでSVGファイルを扱う方法についてSwiftSVGライブラリを使用して説明しました。SwiftSVGを使うことで、SwiftUIアプリ内でのSVGの表示が非常に簡単になります。SVGの要件がある場合は、このライブラリの導入を検討してみてください。

いいねやフィードバックをいただけると嬉しいです！
email to caseのまとめ

[まとめページに戻る](https://qiita.com/Keiji_otsubo/items/60afc2a8d211b6f7d89f)
[まとめA～M](https://qiita.com/Keiji_otsubo/items/f3ddedee6793bf1576f8)




+ [Email To Case での添付ファイルの扱い](https://qiita.com/Keiji_otsubo/items/b5794f5b4702958279d8)
+ [Email-To-Flow](https://qiita.com/Keiji_otsubo/items/93ccd137a6fb5b5384b0)
+ [Web-to-Case 概要 ベストプラクティス](https://qiita.com/Keiji_otsubo/items/3d8a6b65b110a7e3ca16)

+ [Sent emails being rejected (email to case)](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007Cuh6y)

:::note
Please check this article.

https://learn.microsoft.com/en-us/answers/questions/747093/your-message-wasnt-delivered-because-the-recipient

https://learn.microsoft.com/en-us/answers/questions/1191154/unable-to-send-an-email-your-message-wasnt-deliver
:::

+ [Some content is cutting for Email to Case what is the reason：文字が切れる](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007H8VRe)

制限がありそう


# エラー

+ [The following errors were encountered while processing an incoming email: FIELD_CUSTOM_VALIDATION_EXCEPTION : You are not allowed to upload files while sending an email to create a case using EmailtoCase](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007XGYN5)


FIELD_CUSTOM_VALIDATION_EXCEPTIONというのがポイントだろう。CUSTOM

:::note
There's a way to troubleshoot it.

Retrieve all the apex triggers, flows, objects and validation rules in vs code.

Use global search and search for the error message - "You are not allowed to upload files while sending an email to create a case using EmailtoCase"
:::

# メールが１つにまとめられてしまう。

+ [Email-To-Salesforce](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007XI9hX)

高度な電子メール セキュリティ設定はすでにオフになっています。問題は、SF に表示されないことではなく、1 つの電子メール アクティビティに添付されてのみ受信されることだと思います。私の担当者は 1 つの電子メール ブラストを使用して 1,000 人以上にメッセージを送信しましたが、内容がまったく同じで 1 つの電子メールからのものだったため、SF はそれらを 1 つの電子メールに統合しました。営業競争で営業担当者の各メールが追跡されるように、担当者が送信する 1000 件以上のメールを確認できるようにしたいと考えています。少しは明確になったと思います!

:::note
Salesforce メールインテグレーションツールを使用して記録されたメールがレコード上に複数回現れることがある

When an email is logged using Salesforce Email Integration tools, it may appear multiple times on records
 https://help.salesforce.com/s/articleView?id=000384862&type=1
 :::

# 添付ファイルがあると更新できない？

+ [メール 2 ケース。メールに添付ファイルがある場合、その添付ファイルはケース所有者以外の誰かによって所有されます。](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007epkk8)
【堕】time is money

どうもダメ人間です。
今回も生産性のないダメな記事をまた一つ増やすことになってしまうのかと考えると 辛酸、というよりは蜂蜜を蜂ごと飲み込んでいる気持ちです。()

そして、もともと万年対喉対策用トラネキサム酸ユーザーな人間なのですが、免疫の低下を感じ、トラネキサム酸の消費が激しく、清水寺で仕事と健康の水(うろ覚え)を飲みたい気持ちでいっぱいです。

今回の記事は、カタツムリより遅い自分の作業進捗に対する精神的、物理的執行対策委員会、というか
脳内が「遅い」「進まない」「やばい」「何もわかってない」「先が見えない」「深海」「マリアナ海峡」「対重力装備」「遅い」「進まない」「やばい」「ry...
のエンドレスで、自分が時間と利益をどんどん無くしているようにしか感じず、それに対する努力ができておらず。。。
なんともいたたまれない気持ちになり、~~書き始めた当初はそれを改善するための糸口を模索するために~~ 記事を書きました。

難しいことはできないものの、他の人のQiita読んで頑張ろうと思います！
いつも有益な記事をありがとうございます(あんま読んでない)
Pardot with Zoom

[まとめページに戻る](https://qiita.com/Keiji_otsubo/items/60afc2a8d211b6f7d89f)
[まとめN～Z](https://qiita.com/Keiji_otsubo/items/92f92bb9f668ca9688be)

+ [【公式：日本語】Pardot で Zoom Webinars を使用する](https://support.zoom.com/hc/ja/article?id=zm_kb&sysparm_article=KB0068280)
+  [Pardot ウェビナーコネクタ: 5 つのウェビナープラットフォームが Pardot および Salesforce と統合される方法](https://www.salesforceben.com/pardot-webinar-connectors/)

# Internal Server Error

+ [Internal Server Errror When Trying to Sync Pardot with Zoom](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007EbpKh)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/d29c50aa-8ca6-e007-54eb-54c58a0e27d8.png)

:::note
The Japanese group also had the same question.

I was able to work together by uninstalling the app once and installing it again.

https://trailhead.salesforce.com/trailblazer-community/feed/0D54S00000Pj8NNSAZ
:::

+ [Use the following instructions to enable Zoom's Pardot integration to use Salesforce OAuth instead of Pardot-only login.](https://docs.google.com/document/d/1Qyp0PpcgDmvRiVD0WaAEa5AIfZhoab_h12Vk96Nb6Qs/edit)

# サンクスページへのリダイレクト

+ [PardotフォームとZOOM連携実行時に、サンクスページにリダイレクトできません。](https://trailhead.salesforce.com/ja/trailblazer-community/feed/0D54S00000HDdwt)

:::note
下記ページに詳細が記載されています。

https://allmeetinghelp.com/how-to-use-zoom-webinar-for-pardot/
フォームを pardot ランディング ページまたは iFrame に埋め込む場合は、 ***target=“_parent”*** を追加します。

```
<form action="your post url" method="POST" name="hidden_form" target="_parent">
```
:::


# その他

+ [Zoom Pardot Authentication Help](https://trailhead.salesforce.com/trailblazer-community/feed/0D54S00000A8VAvSAN)

+ [Account Engagement （旧 Pardot）とZoom連携でZoomに登録されないメンバーが発生するケースについて](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007YvptO)

:::note
pardotのフォームをからZoomに登録させる方法でのエラーについては以下のように全くできないような質問は見つけることができるのですが、機能していて一部のユーザだけが登録できない内容は見つかりませんね。

とは言うものの、pardotのフォームからの登録は一般的でないのか（ZoomはZoomのランディングページを使って欲しいのかも）、何故か解決した投稿も見つかりませんでした。

フォームハンドラー、iframeを使って実装するようですが、難しいのかもしれないです。

下記では解決できてないようです。

Pardot registration form issue
https://devforum.zoom.us/t/pardot-registration-form-issue/58525
:::
【データサイエンス】機械学習における関数

# ０．はじめに																					
大学でデータサイエンスの講義を受講している者です。
あまりにも広範囲な分野であるため"広く浅く"情報整理したいため投稿。
内容のレベルは超入門編、個人的な感情も少し入り混じった備忘録。
（齟齬がある場合はご指摘いただけると助かります。）		

#### データサイエンス学習全体像
[【データサイエンス】概要](https://qiita.com/AkihideKato/items/9dbce22bd87a9c8a3989)
[【データサイエンス】人工知能](https://qiita.com/AkihideKato/items/6381dd320ead9f893577)
[【データサイエンス】機械学習](https://qiita.com/AkihideKato/items/1db3312e8038bd75e89b)
[【データサイエンス】ディープラーニング](https://qiita.com/AkihideKato/items/92b0fb83b35ec08c4e02)
[【データサイエンス】分析の分類・確率分布](https://qiita.com/AkihideKato/items/6fdca6e22f03f0b9f17c)
[【データサイエンス】探索的データ分析](https://qiita.com/AkihideKato/items/9485e3f9803b1e8fe785)
[【データサイエンス】統計的検定](https://qiita.com/AkihideKato/items/8ff1b9bada50491b017c)
[【データサイエンス】予測モデリング](https://qiita.com/AkihideKato/items/ce8e697546d0424bea46)
[【データサイエンス】自然言語処理](https://qiita.com/AkihideKato/items/e545f36e268605fce9a6)
[【アルゴリズム】パーセプトロン](https://qiita.com/AkihideKato/items/fc9a8205154fe9b3090f)
[【データサイエンス】機械学習における関数](https://qiita.com/AkihideKato/items/6ec3b59ff581e7e3c4ad)
[【データサイエンス】確率](https://qiita.com/AkihideKato/items/c099772dfca7546a6802)

# １．関数とは

### 1-1.概要																	
機械学習における関数の役割とは、**入力データから出力データを生成するための規則や操作を表す数学的な表現である。**
データのパターンや関連性を捉えるために使用され、特性が最大限に利用される。
講義内ではシグモイド関数時に発生する勾配消失の改善としてReLu関数を用いた部分が印象的だった。

# ２．誤差逆伝播法									
ニューラルネットワークに用いられるアルゴリズム										
重みやバイアスなどのパラメータを効果的に更新する										
予測と正解の誤差を利用して学習していく
バックプロパゲーションと同意語
											

# ３．勾配消失（こうばい）									
学習が制御できなくなること										
バックプロパゲーションにおいて逆伝播される勾配が層を通過するごとに指数が小さくなる現象									
誤差逆伝播法にて誤差は層を重ねるとともに消える										
つまり最終的に精度が落ちてしまう										
つまり誤差逆伝搬法は勾配消失が生じる										
勾配消失を減少させるためには活性化関数を選択する必要がある										

# ４．種類									
#### ステップ関数・シグモイド関数											
０or１とされていた（ステップ関数）
- **``ステップ関数``**　０もしくは１を返す関数
- **``シグモイド関数``**　０～１の範囲内の実数値を返す関数										
出力範囲を選択可能										
											
#### シグモイド関数											
活性化関数、非線形関数										
パーセプトロン内から例で出すと「入力信号の総和を出力信号に変換する」もの						
ロジスティック回帰層のこと										
入力を0から1の範囲に変換するために使用される活性化関数										
											
#### 活性化関数											
あらゆる入力値を別の数値に変換して出力する関数										
パーセプトロン内で表すと０or１で表現される部分										
ネットワークの表現が向上する										
											
#### シグモイド関数⇒ReLu関数を利用											
シグモイド関数は非線形関数										
講義内の問題では										
活性化関数を使用する場合にシグモイド関数を利用している										
これにより誤差逆伝搬する中では差分を微分することになる										
誤差逆伝搬をすることによりより深いネットワーク構築がされ制度が向上する									
誤差の一番少ない所を求める際に微分が使用されている									
その際に使用される最大値が``0.25``									
シグモイド関数を使っている場合は最大``0.25``が掛け合わされている										
よって逆伝搬すればするほど0（減衰してしまう）に近づいてしまうため勾配消失が生じる										
											
**解決策としてReLu関数を用いる**										
微分の最大値が1のため勾配消失が少ない										
誤差逆伝搬の際に勾配が小さくならず勾配消失を軽減することができる
[Ruby JavaScript] 式展開比較

# 目的
フロントエンドをVue.js(JavaScript)、バックエンドをRails(Ruby)のアプリケーションを作成しており、
式展開の書き方がどちらの言語の書き方なのか混乱したのでまとめる
# 式展開とは
文字列の中に式を入れることができる機能

#  javascriptの式展開
\`${式}\`
- バッククオートで囲む
```例
const name = "伊藤"
console.log(`名前は${name}です`)
> 名前は伊藤です
```
	
# rubyの式展開
"#{式}"
- ダブルクオーテンションで囲む
```例
name = "伊藤"
print("名前は#{name}です")
> 名前は伊藤です
```

# 参考にさせていただいた記事
- [ES6：文字列で式展開する方法](https://qiita.com/shuzootani/items/6e69b1872d623ed7712d)
- [文字列に式を記述して実行時に展開する](https://www.javadrive.jp/ruby/string/index5.html)
せんせー、量子ドット太陽電池ってなに？

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3194265/2c47de5a-d81a-78f9-53c1-4d31d8398c36.png)

キーンコーンカーンコーン...
授業が始まります

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3194265/be1492ca-910f-2708-d0fa-8fcfcf14af73.png)

せんせー、量子ドット太陽電池ってなに？

# 量子ドット太陽電池とは

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3194265/da229491-9c49-fb7a-a542-417180e256a7.png)

## 量子ドット太陽電池って何？

みんな、夜空に輝く小さな星たちを見たことがあるよね？「量子ドット」とは、
超超小さな点のことで、その小さな点を使って太陽の光を電気に変えるのが「量子ドット太陽電池」なんです。

## どういうこと？

量子ドットは、とても特別な点で、太陽の光をキャッチして電気に変える力があります。
そして、これらの小さな点をたくさん使って作られた太陽電池が「量子ドット太陽電池」です。

## どうしてそれがすごいの？

量子ドットを使うことで、太陽の光のいろんな部分をキャッチして電気に変えることができるから、
もっとたくさんの電気を作ることができるんです。それに、作るのも安くなるかもしれないです。

## だから、量子ドット太陽電池ってなに？

量子ドット太陽電池は、超超小さな特別な点を使って、太陽の光をたくさんの電気に変える魔法のような電池なんです。

# まとめ

このように、量子ドット太陽電池は、たくさんの太陽の光を効率よく電気に変えるためのすごい技術なんです。
せんせー、タンデム太陽電池ってなに？

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3194265/2c47de5a-d81a-78f9-53c1-4d31d8398c36.png)

キーンコーンカーンコーン...
授業が始まります

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3194265/be1492ca-910f-2708-d0fa-8fcfcf14af73.png)

せんせー、タンデム太陽電池ってなに？

# タンデム太陽電池とは

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3194265/da229491-9c49-fb7a-a542-417180e256a7.png)

## タンデム太陽電池って何？

みんな、自転車に2人乗れる「タンデム自転車」を知ってる？前と後ろで2人が乗るやつですよね。
タンデム太陽電池も、その名前の通り、2つの太陽電池が上下に積み重ねられているようなものなんです。

## どういうこと？

タンデム太陽電池は、普通の太陽電池よりも、もっと多くの太陽の光を電気に変えることができる特別な電池なんです。それは、2つの層が助け合って、もっと多くの光をキャッチして、それを電気に変えるからです。

## どうしてそれがすごいの？

この電池があれば、同じ面積の太陽電池で、もっとたくさんの電気を作ることができます。
それは、家の電気や車を動かすのにとても役立ちます。

## だから、タンデム太陽電池ってなに？

タンデム太陽電池は、2つの太陽電池が協力して、たくさんの太陽の光を電気に変える魔法のような電池なんです。

# まとめ

このように、タンデム太陽電池は、太陽の光を効率よく電気に変えることができるすごい技術なんです。
ユークリッドの互除法で最小公倍数を求める。

ユークリッドの互除法で最小公倍数も求めることができる。
まず、前回えんじぇる、が作った最大公約数を求める関数。

<a href=https://qiita.com/sad_angel/items/701cad1ca1a9e39894d6>ユークリッドの互除法で最大公約数を求める</a>

これを使い、($a*$b)/最大公約数で求めることが出来る。

~~~
<?php
    $x=0;
    $y=0;
    [$a,$b]=preg_split('/ /', trim(fgets(STDIN)));
    function one($a,$b){
        if($a==0 || $b==0){
            return three($a,$b);
        }elseif($a!=0 && $b!=0){
            return two($a,$b);
        }    
    }
    function two($a,$b){
        if($a>$b){
            $x=$a%$b;
            $a=$x;
            if($a==0){
                return three($a,$b);
            }else{
                return two($a,$b);
            }
        }elseif($a<$b){
            $y=$b%$a;
            $b=$y;
             if($b==0){
                return three($a,$b);
            }else{
                return two($a,$b);
            }
        }
    }    
    function three($a,$b){
        if($a==0){
            return $b;
        }elseif($b==0){
            return $a;
        }    
    }
    $kotae = ($a*$b)/one($a,$b);
    echo $kotae;
?>
~~~

しかし、前回、<a href="https://qiita.com/dgcdsbsd2">@dgcdsbsd2</a>さんに教えて頂いた方法を使うと、もっと簡単にできると思ったので、下記を試してたみた。

23年8月25日編集
$bも変化していることを忘れていた。
$a,$bの初期値を$x,yに保存。
無事に最小公倍数が出た。

~~~
<?php
//結果の変数の初期化
$ans;
[$a, $b] = preg_split('/\s+/', trim(fgets(STDIN)));
//$a、$bの初期値を$x,$yに保存
$x=$a;
$y=$b;
//$bが0になるまで$aに$a%$bの値を入れ替えていく
while($b) {
  [$a, $b] = [$b, $a % $b];
}
$ans=($x*$y)/$a;
echo $ans;
?>
~~~
【Unity】カラーのスワッチライブラリから定数定義用のCSファイルを生成する

https://qiita.com/kamonabe/items/9a9b3f39ee97a7164ab0

の続きです。

# 概要
スワッチライブラリに使用されている ColorPresetLibrary クラスが private なためリフレクションでカラーと名前を取得し、cs ファイルに出力する Editor 拡張です。

# コード全文
```csharp
using System.IO;
using System.Text;
using UnityEditor;
using UnityEngine;

public static class ColorFileCreater
{
    private static readonly string ClassFormat =
@"using UnityEngine;

public static class {0}
{{{1}
}}";

    private static readonly string VariableFormat = "\tpublic static readonly Color {0} = new Color({1}f, {2}f, {3}f, {4}f);";

    [MenuItem( "Assets/Color File Create" )]
    private static void Create()
    {
        var libraryName = "TextColor";
        var library = AssetDatabase.LoadAssetAtPath( $"Assets/Editor/{libraryName}.colors", typeof( Object ) );
        var type = library.GetType();
        var contents = new StringBuilder();
        for( var i = 0; i < (int)type.GetMethod( "Count" ).Invoke( library, null ); i++ )
        {
            contents.AppendLine();
            var param = new object[] { i };
            var color = (Color)type.GetMethod( "GetPreset" ).Invoke( library, parameters: param );
            var name = type.GetMethod( "GetName" ).Invoke( library, parameters: param );
            contents.Append( string.Format( VariableFormat, name, color.r, color.g, color.b, color.a ) );
        }

        var output = string.Format( ClassFormat, $"{libraryName}", contents );
        File.WriteAllText( $"{Application.dataPath}/{libraryName}.cs", output );
        AssetDatabase.Refresh();
    }
}

```

対象にしたスワッチライブラリ
<img width="400" alt="ファイル名" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3531721/81cfee38-9f97-dd0f-a060-4e09325a3ff4.png">


出力されるファイル
```csharp
using UnityEngine;
public static class TextColor
{
	public static readonly Color Red = new Color(1f, 0f, 0.1414824f, 1f);
	public static readonly Color Blue = new Color(0f, 0.4326849f, 1f, 1f);
	public static readonly Color Green = new Color(0.1320784f, 1f, 0f, 1f);
	public static readonly Color White = new Color(0.8679245f, 0.8679245f, 0.8679245f, 1f);
	public static readonly Color Black = new Color(0f, 0f, 0f, 1f);
}
```
#### 注意点
・カラーの Name 設定が必須

# スクリプトリファレンス
https://github.com/Unity-Technologies/UnityCsReference/blob/master/Editor/Mono/PresetLibraries/ColorPresetLibrary.cs
【Unity】スワッチライブラリを使用して複数のカラーを管理する

# 概要
Unity には、色、グラデーション、アニメーションカーブを再利用、保存、共有を目的としたスワッチライブラリというものが存在します。
今回は、カラーのスワッチライブラリを作成します。

# 詳細
##### 1. Inspector から Color のプロパティをクリックするなどして、カラーピッカーを表示します。
<img width="400" alt="ファイル名" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3531721/4274e7ec-aed4-7fb3-7b7d-e83e8286b920.png">

##### 2. 保存するカラーに変更後、カラーピッカー下部の Click to add new preset 横の色がついた四角形をクリックします。
<img width="200" alt="ファイル名" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3531721/2d8fb455-98f1-af90-2d2d-101fce205992.png">

繰り返すことで複数のカラーを追加するとができます。

##### 3. 表示されているカラーをクリックすることで保存した値が反映されます。
![output.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3531721/d976a171-f48e-682a-36b6-cb5194e9a661.gif)


# おすすめの設定
#### List 表示 & カラーごとの名前設定
カラーピッカー右下部のボタンをクリックし、メニューから「List」を選択します。
<img width="200" alt="ファイル名" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3531721/10729ded-6ae6-8708-c999-f6654665db33.png"><img width="200" alt="ファイル名" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3531721/d12d3dfb-b0db-d9ac-3a81-fa2975c8d62d.png">

保存したカラーが縦列表示になり、カラー追加時に名前を設定できるようになります。
カラーを右クリックした際に表示されるメニューの「Rename」から名前の変更も可能になります。
<img width="200" alt="ファイル名" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3531721/a16f52b0-ee03-8491-9262-3f1dc3dc50ee.png">

#### プロジェクトごとにスワッチライブラリを分ける
カラーピッカー右下部のボタンをクリックし、メニューから「Create New Library」を選択します。
表示されるウィンドウの Location を「Project Folder」に変更します。
<img width="300" alt="ファイル名" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3531721/719f1918-fd54-ab98-85ea-9f269c671948.png">
（Preferences Folder はプロジェクト共通のスワッチライブラリを作成する場合）
Name を入力し、Create をクリックすることで、Assets/Editor ディレクトリ内にスワッチライブラリが生成されます。
<img width="400" alt="ファイル名" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3531721/f41cfb9e-e3b1-89f5-f22e-713b2712637a.png">
ライブラリの切り替えは、カラーピッカーのメニューから行えます。
<img width="200" alt="ファイル名" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3531721/915adb96-c9fc-c836-2514-abc76626802e.png">


# リファレンス
https://docs.unity3d.com/ja/2019.4/Manual/PresetLibraries.html
オープンソースアプリフレームワークの "Skeet" にAI開発サポート機能を追加しました

![ai-supported-modeling-and-scaffolding-for-apis.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2780317/a734a95b-f6b8-c391-8249-e830aacae73f.png)



gm! エルソウルラボのkishi.solです。

弊社で開発しているオープンソースアプリフレームワークのSkeetに、AI開発サポート機能を追加しました。

Skeet は GCP (Google Cloud) と Firebase 上にフルスタックアプリを構築できるオープンソースの TypeScript 製サーバーレスフレームワークです。

API サーバーから Web・iOS・Android アプリまですべてを TypeScript で爆速開発することができます。

今回のアップデートにより、Skeet は独自の AI コンソールを実装しました。今後 AI による開発サポートがさらに充実していきます。

ツールの裏側では、OpenAI 社製 の ChatGPT や Google 製 の Vertex AI といった API を活用しており、それぞれ Skeet を使った開発のサポートに特化したモデルを構築しています。

Skeet は、AI による開発サポートを通じて、開発者の生産性をさらに向上させることを目指しています。

Skeet CLI (GitHub): https://github.com/elsoul/skeet-cli

## Skeet AI による開発サポート

![skeet-ai-prisma.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2780317/6862be2a-d8fa-1cad-c1e3-d80b7c1c25d7.jpeg)

一般的なチャットサポートに加え、 Prisma モデリングに特化したサポートをリリースしました。作りたいアプリの内容を簡単な文章で入力するだけで、Skeet が自動的に Prisma 形式のデータモデルを提案します。

データモデルが用意できれば、Skeet はワン・コマンド(skeet g scaffold)で、そのデータモデルの内容の GraphQL API サーバーに必要なコード(CRUD)を自動生成します。

Prisma & Skeet がデータマイグレーションを完全に管理するため、開発者は Prisma 形式のデータモデルだけを編集すれば、マイグレーションファイルから GraphQL API サーバーのコードまで、アプリ構成に必要なコードが自動生成されます。

開発者はそれぞれのアプリごとに特有のロジックだけに集中することができ、開発効率が大幅に向上します。

Skeet はこのようなアプリコードの自動生成だけでなく、サーバーレス環境も自動で構築するため、作ったアプリをデプロイするときも心配ありません。

このような爆速開発環境を用意することで、グローバル社会全体でアプリによる問題解決を促進させていくことを目指しています。

今後も AI による多岐にわたる開発サポートを充実させ、より速く、より便利な開発環境を構築してまいります。

Skeet は世界中すべてのアプリケーション開発現場の開発・メンテナンスコストを削減、開発者体験を向上させるためにオープンソースとして開発されています。

詳しくは公式ドキュメントを御覧ください。

Skeet ドキュメント: https://skeet.dev/ja/

いつもありがとうございます！アプリ開発におけるAIの有効活用をオープンソースツールとして開発・公開することで、世界中の開発者の生産性向上に貢献し、多くのイノベーションを促進できれば嬉しいです。

引き続きよろしくお願いいたします。

それでは、また！
2023/8/22主にITとかセキュリティの記事

シスコ製品のセキュリティアドバイザリ、1週間で17個発行(8/20)
https://news.mynavi.jp/techplus/article/20230820-2751919/

全員懲戒 ～ 三人の市職員がのべ967回不正ログイン(8/20)
https://scan.netsecurity.ne.jp/article/2023/08/20/49833.html

トラベルルールとは？各取引所の対応をわかりやすく解説(8/20)
https://the-owner.jp/archives/16329

ビットコインETF、カナダでの先行事例から学ぶこと(8/20)
https://www.coindeskjapan.com/198078/

北朝鮮のハッカー集団、米韓合同軍事演習に関する情報を標的に(8/20)
https://www.bloomberg.co.jp/news/articles/2023-08-20/RZOALXT0AFB401?srnd=cojp-v2

プライバシーマーク審査員、審査関連資料を漏えい(8/20)
https://scan.netsecurity.ne.jp/article/2023/08/20/49832.html

街頭の広告停止　ハッカーがポルノ映画流す―バグダッド(8/20)
https://www.jiji.com/jc/article?k=2023082000373&g=int

私が子供に伝えたくない、お金に関する｢時代遅れ｣で有害な6つの常識(8/20)
https://www.businessinsider.jp/post-274130?cx_click=pc_ranking

投資の新潮流「テーマ投資」とは？リターンとリスクのバランスを見極めて(8/19)
https://news.yahoo.co.jp/articles/1726ab45a02a614a224f0c355f80eb813d87e0fd?source=rss

AIは人間以上に自分を「人間」と証明することが得意である(8/20)
https://news.nicovideo.jp/watch/nw13224266

アングル：ロマンス詐欺に手を染めるガーナの若者、貧困からの転落(8/20)
https://jp.reuters.com/article/ghana-tech-crime-idJPKBN2ZR08Z

改訂版J-SOX対応の最重要ポイント3つ、クラウドやリモートワークに注意(8/21)
https://xtech.nikkei.com/atcl/nxt/column/18/02551/081800002/

「年収2000万円はすごいけど、社長がそれだけって夢がない…」(8/21)
https://xtech.nikkei.com/atcl/nxt/column/18/02518/00023/
Qiita CLIから記事を投稿してみる

# Qiita CLIとは

> Qiita CLI とは、手元の環境で記事の執筆・プレビュー・投稿ができるツールです。

だそうです。  
Node.js上で動くツールで、[GitHub](https://github.com/increments/qiita-cli)の```README.md```に詳細な使い方が記載されています。  

https://github.com/increments/qiita-cli

## 感想

個人的にはそれほどエディタにこだわりはないので、そこにはメリットはあまり感じていません。  
ただし、オフラインイベントではしばしばネットワークが使えなくてプレビューできないことがあるので、手元でプレビューまでできるのはいいですね。手元で書き溜めておいて、ネットワークが使えるときに投稿する…ということができそうです。  

Node.jsを食わず嫌いしていたので```npm install```って言われたときにウッとなったのは内緒。  
せっかくNode.jsをインストールしてみたので、何か作ってみようかな。  

## ぼやき

そこそこ使えそうな感じにできていますが、個人的に引っ掛かった点。  

- ~~画像がアップロードできない~~
  - 画像のアップロードはできます！プレビューにもリンクされているのですが、Qiitaの設定画面からアップロードができます。コマンドでアップロードできると面白いんですけどね。  
![upload1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2917580/5f0aedf0-7723-7e8f-87e9-ec1a7e7e258a.png)
![upload2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2917580/3c9970dc-0ba6-2848-5666-59c0eadd34e7.png)

- 既存の記事とQiita CLIから新規作成した記事でファイル名の命名規則が違う
  - ファイル名は自由に変更はできる。Qiita CLIから新規作成した記事のデフォルトは```newArticle001.md```
  - 既存の記事は記事のUUIDになっている。例：```0ae72217f46c46dd76a4.md```
- ファイル名と記事のタイトルは連動しなくてもいい
  - 記事のタイトルのデフォルトが```title: newArticle001```なので、Obsidianみたいに連動させるルールなのかと思った
- ~~自分の環境だと```qiita publish```コマンドが上手く動かない~~
  - ~~カレントディレクトリの認識の問題かも~~
- previewすると```public/public```が勝手に作成される(おそらくワークディレクトリ)のがちょっとイヤ
  - 実害は特にない
  - これもカレントディレクトリの認識の問題かも
- previewから記事を更新したとき、編集履歴は「コメントなし」になる
- ```qiita publish```コマンドに指定するのはファイル名じゃなくてベース名。シェル補完だと拡張子が余分になる
  - ファイル名が```article.md```だったら```npx qiita publish article```を実行するということ
  - これは自分のわがまま。普通の実装だとは思う

## 色々試してみる

### コマンドエラーのデバッグ

```qiita publish```コマンドが上手く動かなかったので、ちゃんと確認してみる。  
オチ：再起動したらなんか直った。  

エラーメッセージがざっくりしている。エラーメッセージはこんな感じ。  

```raw
# npx qiita publish _2023-0822-post-from-qiita-cli   
Error: '_2023-0822-post-from-qiita-cli' is not found
```

原因がよく分からないので、古き良きprintfデバッグを試してみる。  
まずツールがインストールされた場所の確認。  

```raw
# npm list --depth=0
qiita@ C:\Users\ak-sakatoku\Documents\qiita
```

```npm install @qiita/qiita-cli --save-dev```した場所のnode_modules以下にあるんですね。  
こつこつそれっぽい場所に```console.log```を仕込んでみる。  

```js:file-system-repo.js
    async loadItemByBasename(basename) {
        const items = await this.getItemFilenames();
        const itemFilename = this.getFilename(basename);
        // printfデバッグ
        console.log(itemFilename);
```

```raw
# npx qiita publish _2023-0822-post-from-qiita-cli
_2023-0822-post-from-qiita-cli.md
[Error: EISDIR: illegal operation on a directory, read] {
  errno: -4068,
  code: 'EISDIR',
  syscall: 'read'
}
[Error: EISDIR: illegal operation on a directory, read] {
  errno: -4068,
  code: 'EISDIR',
  syscall: 'read'
}
Successful!
```

いや成功してるー！  
```console.log```を仕込むために停止・再起動したときに直ったっぽい。
AozoraEpub3に手を入れる方法

諸事情あって青空文庫のデータをEPUBにする必要があったので色々探してたらAozoraEpub3なるものを見つけた。

https://github.com/kyukyunyorituryo/AozoraEpub3

幸いなことにOSSで公開されているので何かあったら自分で手を入れられるのもよかったし、しっかり作られてる印象があったので自分用にメモを残す。

## 開発環境

まずは作者さんに感謝しつつ下記記事を参考に開発環境を整える。

https://qiita.com/99nyorituryo/items/93b37f5f67ed30f87332

自分の開発環境はVSCode+Java Extensionなんで、そっち向けにメモを残す。

ちなみに自分用にはGUIは不要だったのでAozoraEpub3Appletを使う人はローカルにAdoptium+Ant環境を用意するといいと思う(未検証)

## 必要なツール類

* Docker for Desktop
* Visual Studio Code
    * Java Extension

## ソースコードのClone

```sh
git clone https://github.com/kyukyunyorituryo/AozoraEpub3.git
```

## VSCode環境

開発環境用のDockerコンテナが必要なので次の手順に従ってコンテナを追加。ついでにGradleとAntのインストールもやってしまう。

開発用コンテナを追加。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2396/936b3d68-74cb-4093-33f5-6df1f2b437a6.png)

Javaのコンテナを使う(Microsoft Build of OpenJDKだと思う)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2396/e8023c51-2317-92e8-0ccd-f4716d5011ad.png)

バージョンは作者さんの指定のとおりJava 17で。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2396/8d07e59e-1a53-d2e8-e675-2641ad59f490.png)

今のところ不要なはずだけど、Gradleも一応いれておく。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2396/c17ae088-d1cc-3dc5-5aa8-7aa77fa4f213.png)

最終的なパッケージングにはantが必須なのでantを探して追加。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2396/7eac6485-dad3-2581-6683-d0ad7345f82a.png)

上記の設定ができたらdevcontainer.jsonができるので、`Reopen in container`で上記設定のコンテナを起動する。

## デバッグ実行

`create a launch.json file.` からlaunch.jsonを追加すると自動でデバッグ用のファイルが作られる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2396/74bc5a8f-1655-2cd2-c105-d6040810ce3e.png)

これだけだとデバッグ実行できないのでコンテナ内に適当に青空文庫のtxtファイルをダウンロードしてきて`args` で入力元のtxtファイルパスを指定する。

```json
...
        {
            "type": "java",
            "name": "AozoraEpub3",
            "request": "launch",
            "mainClass": "AozoraEpub3",
            "projectName": "AozoraEpub3",
            "args": [
                "/workspaces/AozoraEpub3/424_ruby_19825.zip"
            ]
        },
...
```

これでデバッグ実行はできるけど、Velocity関連でFileNotFoundエラーが発生する。パスの問題だと思うけどすぐには解決できなかったので解決できたら追記する。
なので、現状デバッグ実行したければEclipseを使うのがベスト。

## ビルド実行

デバッグはできないものの、ビルドはできる。
事前準備として、jarファイルが生成される先を変更しておく。

```diff
-     <property name="dir.jarfile" value="C:/Users/Owner/Desktop/AozoraEpub3-1.1.1b17Q/"/>
+     <property name="dir.jarfile" value="/workspaces/AozoraEpub3/dist/AozoraEpub3-1.1.1b17Q/"/>
```

上記にあわせて `/workspaces/AozoraEpub3/dist` を作るのを忘れないように。

あとはJarを固めるため次のコマンドをVSCodeのターミナルから実行する。もしantが入ってない場合は`sdk install ant`でantを追加する。

```sh
ant -buildfile ant.xml
```

`BUILD SUCCESSFUL` が表示されたらdistフォルダ以下に生成されたツールが出力される。