OmniAICreator/Qiita-1.07M huggingface dataset:
テーブルとは

# テーブルと表は違う
表に社員ID、社員名、年齢、部署という列があるとする。

これは社員という```共通点を持ったレコードの集合```になっている。
```一つのレコードがひとつの社員を表現```している。

```レコード間で意味に統一性があります。```
テーブルとは、```共通点を持ったレコードの集合```である。

### 気づき
一つのレコードを見ると表したい内容がスッとわかるのがテーブルなのか。

別の言い方をすれば、```テーブルとは同じ種類の物の集合```である。

アメリカの優れたDBエンジニアであるジョー・セルコは```テーブル名はすべての複数形または複数名詞でかける```と表現しています。

```テーブル名は英語ならば複数形/複数名詞で書ける。```そうであればそのテーブルにはどこかに間違いがある。

間違った設計というのは、往々にしてこの当たり前の基本を踏み外した時に生じる

# 出典
https://www.shoeisha.co.jp/book/detail/9784798124704

# 感想
* 逆にレコード間で意味がバラバラの表をレコードとは言わないのか。
* テーブルを作成するときはこの理由で複数形にしていたのか。
WindowsでSymfony開発環境の作成 with Scoop


## 環境
Windows 10 Pro
Version 22H2
PowerShell 5.1

## Scoopとは
ScoopとはWindows用のパッケージ管理ツールです。
MacのbrewやUbuntuのaptみたいなもの？
公式サイト

https://scoop.sh/

## Scoopの有効化
有効化するために、セキュリティーポリシーを変更する必要があります。
公式サイトからのコピペ
```
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
irm get.scoop.sh | iex
```
## パッケージのインストール
### 過去バージョンについて
Symfonyを利用するために、いくつかのパッケージをダウンロードする。
今回はあえてPHP7.3をインストールする。
しかし、searchしてもPHP8.2しかありません。
> $ scoop search php
Results from local buckets...
Name Version Source Binaries
\---- ------- ------ --------
php-nts 8.2.2 main
php 8.2.2 main

#### バケットの追加
バケットはscoopのリポジトリのこと。(~~みんなmelpaとか追加するよね。~~)
過去のバージョンを使用する場合、versionsというバケットを追加する必要がある。
gitパッケージが必要のためインストールして追加
```
scoop install git
scoop bucket add versions
```

varsions追加後、検索するとSourceがversionsのものが、表示される。
今回はphp7.3をインストールする。
```
# scoop search php
scoop install php73
```

### その他必要パッケージのインストール
Symfonyを利用するにあたって、必要になりそうなパッケージのインストール
```
scoop install symfony-cli php73 composer sqlite 
```

## あとがき
WindowsでSymfonyを勉強する機会があったので、scoopを試してみました。
意外と使いやすかったので、これからはscoopでの環境構築がスタンダードになるかもですね。

参考にした記事など
Scoopについて
https://qiita.com/rhene/items/d8a0c0c7d637904e14da

ScoopでPHPバージョンを切り替える
https://qiita.com/H40831/items/c85299701f18926b5b25

Symfonyの勉強
https://qiita.com/chihiro-adachi/items/ccb00206c7288c1804b0

## 追記（課題）
`Symfony new`した所、「composerがインストールされていません」というエラーが出ました。
おそらく、コマンドのリンク？が出来ていません。
Windowsのシステムについては勉強が足りていない為、composerコマンドでプロジェクトを作成しました。。
```
composer create-project symfony/skeleton project_name
```
「resource fork, Finder information, or similar detritus not allowed」が出た時の対処方法

# 事象
- Xcodeプロジェクト内の外部フレームワークファイルの差し替えてビルドしたら、タイトル通りのエラーが出てきた。

# 環境
- MacOS 12.6.3
- Xcode14.1

# 対処方法
- ターミナルでプロジェクトルートへ移動
- プロジェクトルートで以下のコマンドを実行
- `xattr -rc ./`
- Xcodeでプロジェクトをクリーンする

# 参考ページ
- [iPhoneアプリ開発備忘録](http://iphone-app-developer.seesaa.net/article/451416437.html)
値がnilになる可能性があるか調べたい

# ある値がnilになる可能性があるか知りたい時
レビューをしてもらっていると、
「これってnilになる可能性ありますか？」と聞かれることがある。
突然の質問に、困惑したのでその調べ方を残しておく。

# schema.rbを確認する
ここにはDBの制約が書かれているので
知りたい値に ``null: false`` があればdbにnullが許容されないということがわかる。
# modelを確認する
ここにはmodelのバリデーションが書かれているので
知りたい値に``exclusion: { in: [nil] }``とか定義してあればnullが許容されないということがわかる。

# おわり
よきコードを書きたい。
プルダウンの要素を開発者ツールで確認したい！

## 実施したいこと
react-selectでプルダウンを作成したが、プルダウンの要素（idやclass）が分からない！
プルダウンを開いて、<div class=..>をクリックすると消えてしまう
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2884542/96200558-2791-e4bb-fcf8-808c284d6b51.png)

testcafeでテストしたいのにこのままではできない・・

## 解決策
どうすればいいんだろうと悩んでいたところ、↓の方の記事を参考にさせていただき解決できました。
https://qiita.com/QUANON/items/468738f28b7983e9e601

方法としては
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2884542/b3290bb7-a9ef-3526-6863-d46f3262412c.png)
コンソールのところに`setTimeout(() => { debugger }, 3000)`を入れると、デバッガーが起動して、プルダウンをクリックしても要素を見放題になりました！

こうして確認できたのでid,classを使ってテストすることができます！
概念スキーマと論理設計

# 論理設計
概念スキーマを定義する設計を```論理設計```と呼びます。
システムの世界の```論理```とは、```物理層の制約にとらわれない```ことを指す。
ひとまず
物理層の制約は一旦脇において話を進めます。

# 論理設計のステップ
* エンティティの抽出
* エンティティの定義
* 正規化
* ER図の作成

## エンティティの抽出
```どのようなエンティティ（＝データ）が必要になるかを抽出```するこが、論理設計の第一ステップです。
```どういうデータを扱いたいか```、という問いを形にしたもの。

```机上```で行うことが可能
### エンティティとは
エンティティとは、日本語で```実態```という意味になる。

### 実態とは
顧客や社員、車などの```物理的実態```や税や会社などの```物理的実態を伴わない概念```としてしか存在しないものも含まれています。

## エンティティの定義
どのようなデータを保持するかを決める必要がある。

### 属性
エンティティはデータを```属性（attribute)```という形で保持します。
列と属性は同義

### キー(key)
```ある特定の列の値を決定するための列```のこと

## 正規化
正規化は```更新（データの登録、変更、削除）が整合的におこなう```ように、エンティティのフォーマットを整理することが重要な目的
正規化とは、データベースの論理設計を理解する鍵と言っても過言ではありません。

### 気づき
まだまだ正規化のことを知らなければならない。ような気がする。

## ER図の設計
```エンティティ同士の関係を表現する図を作成```する方法。
```エンティティの見取り図```です。

論理設計において非常に重要な役割を果たす。

# 出典
https://www.shoeisha.co.jp/book/detail/9784798124704

# 感想
Railsの関連付けを行うためにはこの論理設計を行わなければならないのでしっかり勉強しよう。
Gradle - How to Generate an Runnable JAR File

```build.gradle

apply plugin: 'java'

compileJava {
    sourceCompatibility = JavaVersion.VERSION_1_8
    targetCompatibility = JavaVersion.VERSION_1_8
    options.encoding = 'UTF-8'
}

repositories {
    mavenCentral()
}

dependencies {
...
...
...skip
}

configurations {
    implementation {
        canBeResolved = true
    }
}

task JarTestExample(type: Jar) {
    zip64 = true
    duplicatesStrategy = DuplicatesStrategy.INCLUDE
    archivesBaseName = 'TestExample'
    includeEmptyDirs = false

    manifest {
        attributes 'Main-Class': 'com.johnny.TestExample'
    }

	// remove the security files (from mail.jar / activation.jar) so that the jar will be executable.
    from (configurations.implementation.collect { it.isDirectory() ? it : zipTree(it) }) {
	    exclude 'META-INF/MANIFEST.MF'
		exclude 'META-INF/*.SF'
		exclude 'META-INF/*.DSA'
		exclude 'META-INF/*.RSA'
	}

    from sourceSets.main.output
}

```

```console
johnny$ gradle clean JarTestExample
```
２次試験対策?精神論。「五輪書」が、ご参考になりましたら幸いです。

受験生の皆さんのご健闘をお祈りいたします！

上善、水の如し
水になれ

https://ja.wikipedia.org/wiki/%E4%BA%94%E8%BC%AA%E6%9B%B8

# 翻訳
「水になれ」の翻訳？

https://www.deepl.com/ja/translator#ja/en/受験生の皆さんのご健闘をお祈りいたします！
https://www.deepl.com/ja/translator#ja/en/上善、水の如し
https://www.deepl.com/ja/translator#ja/en/水になれ
https://www.deepl.com/ja/translator#ja/en/「五輪書」が、ご参考になりましたら幸いです。
https://www.deepl.com/ja/translator#ja/en/僭越ながら

# NHKのテレビで知りました。

宮本武蔵とブルース・リーだそうです。

https://ja.wikipedia.org/wiki/%E6%98%A0%E5%83%8F%E3%81%AE%E4%B8%96%E7%B4%80_%E3%83%90%E3%82%BF%E3%83%95%E3%83%A9%E3%82%A4%E3%82%A8%E3%83%95%E3%82%A7%E3%82%AF%E3%83%88

「友よ水になれ」という言葉は、世界を変えていった。そうです。

https://www.google.com/search?q=%E6%B0%B4%E3%81%AB%E3%81%AA%E3%82%8C&rlz=1CAUHAM_enJP1038JP1038&oq=%E6%B0%B4%E3%81%AB%E3%81%AA%E3%82%8C&aqs=chrome.0.69i59j0i4i37i512l2j0i512j0i4i10i37i512j0i512j69i60j69i61.1026j0j7&sourceid=chrome&ie=UTF-8

# 僭越ながら
以下、いつものゆうどうです。またか？

五輪書でした。五輪の書でないみたいです。ちなみに,私のは、(通称)うさぎ巻では、ありません。

https://qiita.com/mrrclb48z/items/980fe66d33921349e222#:~:text=%E3%81%A6%E3%81%BF%E3%81%9F%E3%80%82-,%E6%95%B0%E5%AD%A6,-%E3%81%8C%E5%84%AA%E7%A7%80%E3%81%98%E3%82%83

https://precious.jp/articles/-/37152
AWS LambdaでChrome Headlessなブラウザでクロールさせる方法

# はじめに
JSで描画されるWebページが増え定期的にチェックする場合にクロールするのが厄介になりました。
LambdaでChromeのHedadlessブラウザでアクセスさせたいときに簡単な方法があったのでメモ

1. chrome-aws-lambdaのarnの取得
検索するともろもろzipで固めてアップロードみたいな形が多いのですが公式にLambda Layerのarnが公開されています。
https://github.com/shelfio/chrome-aws-lambda-layer
こちらからリージョンにあわせたものをコピーしてください
参考:東京リージョン(ap-northeast-1)
`arn:aws:lambda:ap-northeast-1:764866452798:layer:chrome-aws-lambda:31`

2. Lambda Layerを登録
Lambda上で通常通りに関数を作成します。
その後にコードの下にあるLayersをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4221/e7e7e430-e4ac-0857-134e-84e11ea4c10d.png)
そして先ほどコピーしたarnをARNを指定にチェックをいれて入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4221/74287ef7-a85c-5158-a156-5057a0da68ad.png)

3. コードを書きます

```
const chromium = require("@sparticuz/chrome-aws-lambda");

exports.handler = async(event, context) => {

    const browser = await chromium.puppeteer.launch({
        args: chromium.args,
        defaultViewport: chromium.defaultViewport,
        executablePath: await chromium.executablePath,
        headless: chromium.headless,
    });

    let page = await browser.newPage();

    await page.goto('https://www.yahoo.co.jp/');
    const pageTitle = await page.title();

    await page.waitForSelector('#tabpanelTopics1');
    const innerText = await page.evaluate(() => (document.querySelector('#tabpanelTopics1')).innerText);

    await browser.close();
    return pageTitle+"\n\n"+innerText;
};

```
EC-CUBE商品CSVをアップロードするまでの軌跡

# 基本環境
EC-CUBE 4.1.2

# 困ったこと
・ダウンロードできる商品CSVのフォーマット
・アップロードできる商品CSVのフォーマット
が、違う！

### アップロードできる商品CSVのフォーマット
EC-CUBE管理画面＞商品管理＞商品CSV登録

![スクリーンショット 2023-02-16 15.15.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1653133/d1a93b91-0c70-b000-6149-00b2ffc5fa1c.png)

### ダウンロードできる商品CSVのフォーマット
EC-CUBE管理画面＞設定＞店舗設定>CSV出力項目設定

アップロードできる商品CSVのフォーマットに合わせて項目を選択・並び替えした結果

![スクリーンショット 2023-02-16 15.35.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1653133/450bbec0-ec06-4b40-be16-d67769ccb21a.png)

ダウンロードしたものをアップロードできるようになる
THREE.TextureにHTMLImageElementを適用する方法

# 概要
本記事では、Three.js内部のテクスチャとして[TextureLoader](https://threejs.org/docs/#api/en/loaders/TextureLoader)を使って画像や動画をテクスチャとして扱うことはよくあると思いますが、公式ドキュメントの例として言及されていない`HTMLImageElement`をテクスチャとして適用する方法を扱います。


# サンプルコード
非同期で画像から`HTMLImageElement`と`THREE.Texture`の生成をまとめて行えるようにしてみました。
```typescript
const [imageElement, imageTexture ] = await new Promise<[HTMLImageElement, THREE.Texture]>(
      (resolve) => {
        const img = new Image()
        img.crossOrigin = 'anonymous' // cors対応、これをしないとTHREE.Textureが黒くなる
        img.src = 'xxx'
        img.onload = () => {
          resolve([img, new THREE.Texture(img)])
        }
      }
    )
```
※three.js. r149


# 終わりに
今回は画像についてのみ言及しましたが、動画に関しても同様に`HTMLVideoELement`をテクスチャとして[TextureLoader](https://threejs.org/docs/#api/en/loaders/TextureLoader)を使わずに適用することもできるかと思います。
Red Hat 9 の変更点について

この記事は[ラクスパートナーズAdvent Calendar 2023](https://qiita.com/advent-calendar/2023/rakus-partners) 14日目の記事です。
# はじめに
Red Hat 9 について簡単に触れます。
2022年5月17日にRed Hat Enterprise Linux 9がリリースされました。
現在(2023/12/14)は9.3までリリースされています。
サポート期間は以下になります。
フルサポート：2027/5/31
メンテナンスサポート：2032/5/31

# 変更点
RHEL9と他のRHELとの変更点などを記載します。
さらに詳細を確認したい場合は[こちら](https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/9/html/9.0_release_notes/overview)を参照してください。

## Red Hat 6,7,8,9で変更された主要まとめ
|パッケージ|RHEL 6|RHEL 7|RHEL 8|RHEL 9|
|:---:|:---:|:---:|:---:|:---:|
|カーネル|2.6.32|3.10.0|4.18|5.14|
|Grub|Grub 0.97|Grub2 v2.00|||
|GUI|Gnome 2.28|Gnome 3.8|Gnome 3.28|Gnome 4.0|
|起動シーケンス|Upstart|systemd|systemd|systemd|
|Loging|Rsyslog|journalctl plus Rsyslog|journalctl plus Rsyslog|journalctl plus Rsyslog|
|User  Password|SHA-512|SHA-512|SHA-512||
|パッケージ管理|yum<br>rpm|yum<br/>rpm|dnf<br/>yum<br>rpm|dnf<br/>yum<br>rpm|
|時刻同期|ntp|ntp<br>chrony|chrony|chrony|
|ディスプレイサーバ|Xorg|Xorg|Wayland|Wayland|
|パケットフィルタリング|iptables<br/>firewalld|iptables<br>firewalld|nftable|firewalld<br>nftable<br>xdp-filter|
|サポートされる最大CPU|448|768|768|1792|
|サポートされる最大メモリ|12TB|12TB|24TB|48TB|
|サポートされる最大ファイル|XFS:100TB<br>Ext4:16TB|XFS:500TB<br>Ext4:16TB|XFS:8EB<br>Ext4:16TB|XFS:8EB<br>Ext4:16TB|
|FS最大サイズ|XFS:300TB<br>Ext4:16TB|XFS:500TB<br>Ext4:50TB|XFS:1PB<br>Ext4:50TB|XFS:1PB<br>Ext4:50TB|
## 提供されている動的プログラミング言語、Web サーバー、データベースサーバー
### 動的プログラミング言語
- Node.js 16
- Perl 5.32
- PHP 8.0
- Python 3.9
- Ruby 3.0
### 制御システム
- Git 2.31
- subversion 1.14
### Webサーバー
- Apache HTTP サーバー 2.4.51
- nginx 1.20
### プロキシーキャッシュサーバー
- Varnish Cache 6.6
- Squid 5.2
### データベースサーバー
- MariaDB 10.5
- MySQL 8.0
- PostgreSQL 13
- Redis 6.2
## セキュリティ
### 暗号
暗号化ポリシーにおいて、SHA-1の使用がRHEL 9 では非推奨になりました。
SHA-1はハッシュ関数の１つです。
これにより以下の事象が発生する。

-  RHEL 9 から RHEL 6 への SSH が機能しない
-  SHA-1 で署名されたパッケージはインストールまたはアップグレードできない
-  'server-sig-algs' 拡張機能をサポートしていない SSH サーバーおよびクライアントとの接続に失敗する
### SELinux
SELinuxが`/etc/selinux/config`ファイルから無効化できなくなります。
SELinuxを無効化したい場合は「/etc/selinux/config」を使用して、SELinuxポリシーのロードを無効化します(SELinux自体は起動時に有効化された状態になります)。
SELinuxの起動自体を無効化したい場合は、カーネルコマンドラインにselinux=0パラメータを追加してください。
### OpenSSH
OpenSSHが、バージョン8.6p1で提供されます。
OpenSSHのデフォルト設定では、パスワードを使用したrootアカウントへのログインが禁止されます。
## ネットワーク
- iptables-nft および ipset が廃止されました。
ファイアウォールのルールを設定する場合は、nftablesフレームワークを使用します。
- network-scripts パッケージが削除されました。
ネットワーク設定をする場合は、NetworkManagerを使用します。
# 参考文献
[Red Hat Enterprise Linux 9 公式ドキュメント](https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/9)
Fedora 37でLinux Kernel 6.1.12をビルドした

# 作業内容

前回6.1.11をビルドしたが今回は6.1.12を行った。
(前回記事は下のほうにリンクをはる。その時参考にしたページはそのページにリンクがある)
特にかわったことはないけれど、前回の記事に書き忘れた項目があるので、再編集を兼ねてもう一度似たような記事を書いた。

/usr/src/kernelsにlinux-6.1.12.tar.xzがあるとして、

```
su
dnf update
dnf install make gcc flex bison openssl-devel bc elfutils-libelf-devel perl zstd openssl
cd /usr/src/kernels
xz -dc linux-6.1.12.tar.xz | tar xvf -
cd linux-6.1.11
cp /boot/config-6.1.10-200.fc37.x86_64 .config
make oldconfig
```

このままmakeなのだけれど、それだとエラーが起こる。
.configをviで開いて,CONFIG_DEBUG_INFO_BTFの項目を変更。

```
CONFIG_DEBUG_INFO_BTF=n
```

このあとmakeする。

```
make 
make modules_install
make install
```

これでビルドの方は完了ということで。

# 前回記事

https://qiita.com/GithubUserXyz/items/97be78c7ac9bf27fb271
【Grasshopper】材質や色を同時にベイクする

この記事はGrasshopper（以下GH）のBake（ベイク）時に、GHで定義した材質や色等をそのままオブジェクトに適用し生成する方法を紹介する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50519/249d23f1-694f-4633-3ecd-cdd8f80cace6.png)

# 背景
基本設計などの初期デザイン段階において、GHでデザインする時間が主になると、時短のため、GH上で直接オブジェクト色や材質の設定をし、プレビューコンポネント [Custom Preview] で確認しながら全体の方向性を決めていくことが多くなる。

通常は、「さあ、デザインが決まった」というところで、Rhino上にオブジェクトをベイクし、Rhino上で材質設定などのレンダリング準備へと続くのだが、GHで材質などの設定を済ませている場合は、デフォルトのベイクでは材質や色がオブジェクトに適用されないので、材質設定の作業が二度手間になることがある。ここで、「GHのプレビューそのまま材質や色等を同時にBakeできないものか」、という要求が自然とでてくる。

GHオブジェクトに属性をつけてベイクするための方法の一番手っ取り早い方法として、以前であればC#で書かれた非常に便利なGH軽量カスタムコンポーネント "bakeattributes "があった。スクリプトは[Giulio Piacentino](https://www.giuliopiacentino.com/grasshopper-tools/) によって書かれたもので、今でも手には入るが、Rhino 7では機能しなくなってしまったようだ。 本目的達成のための方法は "bakeattributes"が使えていた当初から他にもいろいろあったが、"bakeattributes" はその利便性で一番であった。材質ごとにレイヤーをつくりそこにオブジェクトを振り分けてくれたり、そもそもプラグインではないのでプラグインへの依存性が低く、他者とのGHファイル共有の際容易であるという利点があった。

# 方法
この記事で取り上げているのは、その代替方法であり、ドキュメンティング系のGHプラグイン [Human](https://www.food4rhino.com/en/app/human)	 や [FABTOOLS](https://www.food4rhino.com/en/app/fabtools)の使用によるもので、ぜひ参考にしてほしい。

当目的に関して、２つの使用後の結論を最初に述べると "Human"の使用をおすすめする。

評価の基準は、あくまでー上述のようにーまだどういう材質を使用するか決まっていない初期デザインの段階で、Rhinoの材質設定を通過することなく、如何にフローレス且つ気軽に材質を作りGH上でデザインしていくかという過程を重視する。

そういった点では、"Human"は材質設定時の利便性という点で勝っていた。 "FABTOOL"の場合、先にRhino上で材質を設定し、それをGHのジオメトリーにあてがう方法のようだが、そもそも材質の自動生成がされないところで不便だし、プラグイン自体の更新が最近はされていないのか部分的に機能しない部分があった。"Human"はそういうことがなかった。もちろん、使用目的が変われば "FABTOOL"が好まれる場合もあるとは思うが、この記事ではその使用の詳細は取り上げない。

# アルゴリズム

**GHファイルダウンロード**
https://drive.google.com/file/d/1zOZg7KGNspupUIwYTrRE0XV6Qv2JJQ9f/view?usp=sharing
※Human を先にインストールしてから使用する。

上に共用したGHファイルは“Human”を使用し、当目的を実行するためのアルゴリズムによるものである。具体的な手順は、以下のダイアグラムに明示している。基本は１つのサーフェイスをUVで分割し多量の小さなパッチを作り、それらパッチの数量分のインデックスによる色範囲（グラディエントｘドメイン）で材質をつくり、その材質とともにオブジェクトをベイクする。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50519/e06e0379-30b3-41f3-b1c3-6ec9df60e542.png)

また、以下はHumanの使用法を解説してくれている参考URLである。より詳しい情報はこちらを参考にして欲しい。

https://www.youtube.com/watch?v=VzroErFju1c

----

![logo_vas-08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50519/c2b23ce5-4f99-ac20-4609-e0509b3e4ec4.png)

**[VAS Variations of Applied System](https://tsvas.net/tutorial/animations-in-gh-jp)からの抜粋**


デザイン, 建築, 景観, 都市, コンピュテーショナル・デザイン, ジェネレティブ・デザイン, アルゴリズミック・デザイン, システム, 複雑系, 形態デザイン, 数学, ライノ, グラスホッパー, 遺伝的アルゴリズム, クリエイティブAI, バイオミミクリー, 生体模倣建築
iOSアプリにQRコードを実装する方法（ひと工夫付き）

QRコードはURLやユーザーIDなどを共有するのに便利な手段の一つで、カメラが搭載されているスマートフォンとは特に相性のいいものでもあります。今回はiOSアプリにQRコードを実装する方法とより便利に使うためのひと工夫を紹介します。

# 満たすべき要件

アプリにQRコードの導入を行うにはどのような機能が必要なのでしょうか。ほとんどの場合は以下の2つの条件を満たしておく必要があります。

- QRコード生成機能
- カメラによる読み取り機能

アプリの目的によっては追加する項目も考えられますが、この記事ではまずこれらを可能にすることを念頭において進めていきます。

# QRコード生成機能

## 実装について

これはアプリ内でユーザーが指定したIDなどの文字列をQRコードとして生成する機能です。他の要件に比べると複雑そうに見えますが、実はライブラリなどを導入せずとも実装する事が可能です。シンプルなものでは以下の記事などが参考になりました。

- [How to Create QR Codes in Swift [2022 Guide] | CodeX](https://medium.com/codex/qr-codes-are-simple-in-swift-6d203ebc3f5b)
- [【iOS】SwiftでQRコードを表示して目で読んでみた | DevelopersIO](https://dev.classmethod.jp/articles/ios-swift-generate-and-read-qr/)

## ひと工夫

実用的な面ではこれでも十分ですが、単純な白黒だけのQRコードは少し不親切です。例えばその場では読み込まず一度カメラロールに保存したとき、どんな内容を示すコードだったか分かりにくくなって今います。またSNSで共有するときにも同様の問題が発生します。

LINEの公式アカウントのQRコードのようにロゴが含まれていると何のアプリで使うものか一目で分かりやすくなります。またデザイン性があればシェアしてもらえる可能性も高まるでしょう。

![Eveki-4.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/713689/0267a3bc-7c3b-83c9-a993-0ab0727be7c2.jpeg)



iOSであれば以下のライブラリを使うことで個性的な見た目のQRコードを生成することができます。形や色、ロゴの挿入も可能です。

https://github.com/dagronf/QRCode




# 読み取り機能

## 実装について

iOS、つまりiPhoneにはデフォルトでQRコードリーダーが実装されているため、自分のアプリに読み取り機能を付けるのは必須というわけではありません。しかしひとつのアプリで操作が関係する方が便利ですし、アプリ内で独自の複雑な処理も行うことができます。

こちらも実装のノウハウについて既にかなりの情報があります。基本的なものとしては以下の記事が参考になると思います。カメラの使用許可をユーザーに申請する部分は忘れないようにしてください。


- [Camera preview and a QR-code Scanner in SwiftUI | by Konstantin | Dev Genius](https://blog.devgenius.io/camera-preview-and-a-qr-code-scanner-in-swiftui-48b111155c66)



## ひと工夫

スキャナーにQRコードのための枠線がついている場合があります。もしアプリが他の目的でカメラを使う場合はこれがあった方が便利でしょう。今は写真を撮るのではなく、あくまでスキャン用のカメラだと明確に区別しやすくなるからです。

またカメラロールからの読み取りも実装しておくのがおすすめです。これがあると「一旦保存して後でスキャンする」という使い方ができますし、SNS上の画像を保存して読み取る事もできます。以下のライブラリではこの2つの要件を満たしているものです。

https://github.com/vinodiOS/SwiftQRCodeScanner




# 実装事例

## 会話AI

最後に私が自分のアプリにQRコードを取り入れた実際の事例を紹介します。


『Eveki』は自分でチャットAIを作れるアプリで、作成した人工知能を共有することも可能です。本アプリではAI固有のIDをQRコードにすることでシェアしやすくしています。


https://textcheckai.page.link/toapp


![Eveki-5.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/713689/88140a21-ffd4-ab25-21b6-39cab97f2c87.jpeg)


コードを読み取ると指定されたAIとのチャットに移行できる仕組みです。デフォルトのQRコードリーダーなどで読み取るとストアページに移行します。

デザインもアプリ名を入れたり色を工夫することで個性を持たせています。スキャナーは検索ボックスの下から使えるように配置し、枠線やカメラロールからの読み取りも対応しました。ちなみにQRコード自体の共有はiOS16から使える`ShareLink`を使っています。

# まとめ

QRコードの取り扱い自体は案外簡単に実現可能ですが、ライブラリの使用やデザインの工夫を行うことでより便利にする事ができます。少しの手間で大きな利便性を生む事ができるので開発にぜひ活かしてみてください。

- [🐦Twitter:@dev_eveki](https://twitter.com/dev_eveki)
- [📗note: izumo092](https://note.com/izumo092)
paiza.ioでperl その5

# 概要
paiza.ioでperlやってみた。
練習問題やってみた。

# 練習問題
アセンブラをコンパイルして実行せよ。

# サンプルコード

```
$out = `pwd`;
print $out . "\n";
$out = `ls`;
print $out . "\n";
$out = `echo hello world`;
print $out . "\n";
#open(DATAFILE, ">> hello.txt") or die("Error:$!");
#print DATAFILE "Osaka\n";
#$out = `cat hello.txt`;
#print $out . "\n";
print <<EOM;
あいうえお
かきくけこ
EOM

open(DATAFILE, ">> hello.s") or die("Error:$!");
print DATAFILE <<EOM;
.code64
.text
.globl main

main:
	mov   \$1, %rax;
	mov   \$1, %rdi;
	mov   \$msg, %rsi;
	mov   \$12, %rdx;
	syscall;
	mov   \$0, %rax;
	syscall;

.data
msg:
	.asciz "Hello world!"
EOM
$out = `cat hello.s`;
print $out . "\n";
$out = `gcc -no-pie hello.s`;
print $out . "\n";
$out = `./a.out`;
print $out . "\n";





```

# 実行結果

```
/workspace

exec_command
exec_stderr.txt
exec_stdin.txt
exec_stdout.txt
Main.pl
main.tar.gz
runner_mysql
runner_php
run_user

hello world

あいうえお
かきくけこ
.code64
.text
.globl main

main:
	mov   $1, %rax;
	mov   $1, %rdi;
	mov   $msg, %rsi;
	mov   $12, %rdx;
	syscall;
	mov   $0, %rax;
	syscall;

.data
msg:
	.asciz "Hello world!"


Hello world!


```

# 成果物

https://paiza.io/projects/7W-xc2vCAJScKlXv78zdBQ



以上。
本番環境におけるRDSの一時停止

## はじめに
今回、こちらの記事を参考に、RDS の一時停止機能について調査した内容をまとめました。
https://blog.serverworks.co.jp/tech/2019/06/26/stopdbinstance/

## RDS の一時停止機能
RDS を夜間、休日に停止することで、コストの削減が可能です。

例えば、週5日 8:00-17:00 稼働し、業務時間外は停止する場合
・営業日における稼働時間は1日9時間
・休日は停止
・1ヶ月（31日）中、営業日は22日 
とすると、
1ヶ月の稼働時間は、9 × 22 ＝198時間となり、744時間（1ヶ月）のうち、70％以上ランニングコストを削減できます。



RDS の一時停止について、AWS の公式ドキュメントには以下のように記載があります。

>一時的なテストや毎日の開発作業のために、断続的に DB インスタンスを使用するとします。その場合は、コストを節約するために一時的に Amazon RDS DB インスタンスを停止できます。

https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/USER_StopInstance.html

テスト環境や開発環境における一時停止は推奨されていますが、本番環境について言及されていません。
RDSの一時停止機能はあくまでテスト環境、開発環境向けの機能なのでしょうか。

今回、AWSサポートに問合せてみました。

## 本番環境において停止機能の利用は可能

本番環境においても、RDSの一時停止機能は利用可能です。
しかし、以下のリスクがあります。

* DB インスタンスの停止と開始に想定以上の時間を要する
* DB インスタンスの容量の不足が発生し、DBインスタンスを起動できない
    * InsufficientDBInstanceCapacity エラーによって、インスタンスを起動できない可能性がある

### InsufficientDBInstanceCapacity エラー
InsufficientDBInstanceCapacity エラーについて、AWS 公式ドキュメントには以下のように記載しています。
>InsufficientDBInstanceCapacity エラーは、DB インスタンスを作成、起動、変更を試行した際に返されます。また、DB スナップショットから DB インスタンスを復元する際に返されます。このエラーが返される場合、一般的な原因は、要求された可用性ゾーンで特定の DB インスタンスクラスが利用できないことです。次のいずれかの方法で、問題を解決できます。

https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/CHAP_Troubleshooting.html

InsufficientDBInstanceCapacity エラーは、利用中のAZにおいて、インスタンスを起動するためのキャパシティが枯渇していることが原因で起こります。

※ キャパシティ：クラウドベンダーで起動可能なサーバの総数
キャパシティは、t2.large、m5.xlargeなどインスタンスタイプごとにクラウドベンダーが確保していて、EC2やRDSを起動、再起動するたびに、仮想サーバが稼働する物理サーバが変わる仕様になっています。

この物理サーバを変えようとした際に、空きサーバがないことが原因で発生するのが、InsufficientDBInstanceCapacity エラーで、クラウドを利用するユーザには回避しようがない現象です。
t2 などAWSが確保しているサーバの台数が少ないものでよく発生します。

RDS には、EC2インスタンスにおけるキャパシティ予約のように、キャパシティを確保しておくオプションはRDSがないため、エラー自体を防ぐことはできません。

### InsufficientDBInstanceCapacity エラーの解決策
InsufficientDBInstanceCapacity エラーには、以下のいずれかの対応が必要となる。
1. キャパシティの状況が変化するまで、再度起動を試す。
2. 別のインスタンスタイプで起動を試す。
3. 別のAZにてスナップショットからインスタンスを作成する。

3 について、別のAZにてインスタンスをリストアするということは、DBを作り直すことと同じで、アプリケーションの変更が発生します。

## 本番環境において一時停止するorしない
以下の①、②におけるRDS の稼働コストと人による運用コストを比較、検討することをおすすめします。

① RDS に対して夜間、休日停止を導入したうえで、InsufficientDBInstanceCapacity エラーがまれに発生することを想定した運用保守体制を整えた場合

② RDS を24時間365日常時起動させる場合

※①における運用保守体制の例
・RDSをEC2の起動時間の2時間前に起動させる
・RDSが起動したら運用保守メンバーにメールが届くよう、CloudWatchとSNSを利用する
・RDSの起動要求後30分ほどで運用保守メンバーが保守を開始→ その時点でメールを受信していない場合は、InsufficientDBInstanceCapacity エラーが発生している可能性を考慮し、ポータルにて確認し、必要に応じて上記の保守業務を実施する。




## あとがき
今回は、RDS は本番環境で一時停止できるのか？という質問に対して、サポートへ問い合わせたり、上司に聞いたりしたことをまとめてみました。
コピペで使える郵便番号自動入力機能をChatGPTと作った


# コピペで使える郵便番号自動入力

都道府県はセレクトボックス
他はテキストボックスというよくある郵便番号住所入力機能

実装は10分、ChatGPTくんとの合作
要素選択のID名を変更すればそのまま使えます

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/69647/6f4b4da2-0144-605a-29bb-933cc4912c29.png)


```javascript
async function getAddress() {
  const zip_label = document.getElementById('zip_label'); // 郵便番号フォームのラベル
  const zipcode = document.getElementById('zip').value;   // 郵便番号テキストボックス

  const prefOptions = document.getElementById('pref_id').options; // 都道府県の選択肢メニュー
  const city = document.getElementById('city') // 市町村 テキストボックス
  const town = document.getElementById('town') // 街名   テキストボックス

  const url = `https://zipcloud.ibsnet.co.jp/api/search?zipcode=${zipcode}`;
  zip_label.innerHTML = '郵便番号'

  try {
    const response = await fetch(url);
    if (!response.ok) { throw new Error('通信エラーが発生しました'); }

    const data = await response.json();
    if (data.status !== 200) { throw new Error('該当する住所がありません'); }

    const prefName = data.results[0].address1;
    const option = Array.from(prefOptions).find((opt) => opt.text.includes(prefName));
    if (option) { option.selected = true; }

    city.value = data.results[0].address2;
    town.value = data.results[0].address3;
    zip_label.innerHTML = '郵便番号 (' + prefName + city.value + town.value + ')';
  } catch (error) {
    if (error.message.indexOf('null')) { error.message = '該当の住所が見つかりませんでした' }
    zip_label.innerHTML = '郵便番号 (' + error.message + ')';
  }
}
```
話によると VSCode から WSL 内のファイルを編集できるらしい

# はじめに

Visual Studio Code でコードを書くために、リポジトリを WSL 外に置かなきゃなあ、と思っていたところ、なんと WSL 内から Visual Studio Code を実行できるようです。（情報提供ありがとうございます）

https://twitter.com/narazaka/status/1625467517287407619

ということでやってみました。Ubuntu に VSCode はインストールしていないので Windows 側のプログラムを探して開いてみました。というか WSL にはインストールできませんでした。

# 環境

Windows11 / WSL2 Ubuntu 22.04.01

# やってみた

```
$ find /mnt/c -name "Code.exe" 2>/dev/null
/mnt/c/Users/<ユーザー名>/AppData/Local/Programs/Microsoft VS Code/Code.exe
$ cd <path/to/your/repository/>
$ "/mnt/c/Users/<ユーザー名>/AppData/Local/Programs/Microsoft VS Code/Code.exe" ./
```

できました！ VSCode で Ubuntu 上のファイルを開くことができました！

# メモ帳も起動してみた
```
$ "/mnt/c/Windows/System32/notepad.exe" ./README.md
```

こちらも開けました！

# code コマンドの alias 登録

一発で VSCode が開けるように、alias に登録しておきましょう。

```bash:~/.bashrc
alias code="'/mnt/c/Users/<ユーザー名>/AppData/Local/Programs/Microsoft VS Code/Code.exe'"
```

これで、`code ./` で VSCode が起動できるようになりました。

# 感想

リポジトリを WSL 外に置いて開発するのも試してみたのですが、正直に言うと、WSL 内部から Windows 側のファイルにアクセスするの遅すぎてガチ泣きしました……。`yarn start` とかデータベースアクセスとかが非常に遅かったです……。これからは Linux 側にリポジトリを置いて、VSCode からアクセスするようにしたいと思います。

また、`npm start` 実行中のソースファイル更新の検知（ホットリロード）についても、Windows 側にリポジトリを置くと動作しないようでした。この観点からも、Linux 側にコードを置くのが望ましいかと思います。

~~Linux 内のファイルにアクセスできる仕組みが全く分からないので、誰か教えてください……。VSCode の Remote プラグインなども特にインストールしておりませんゆえ……。~~

## 追記：

コメント欄で情報を頂きましたが、 Linux 上のファイルはネットワークドライブに割り当てられているようでした。なるほど！

```
$ wslpath -w /home
\\wsl.localhost\Ubuntu-22.04\home
```
AWSドキュメントの変更履歴を参照したいとき

※追記
[GitHub の AWS ドキュメンテーションの廃止](https://aws.amazon.com/jp/blogs/news/retiring-the-aws-documentation-on-github/)

本記事で記載していた内容ですが、上記のアナウンスと共に古い内容となっております。
現在は、Githubで管理されていない & リンクも表示されてない状況となっています。

以下、本文

[AWS Documentation](https://docs.aws.amazon.com/)はいつも参考にしていますが、日々更新されている物なので以前はこんな記述だったけ？　と疑問が発生するケースはたまにあるかと思います。

そんなAWSドキュメントですが、2018年にOSSになっており、下記で管理されています。

[Amazon Web Services - Documentation](https://aws.amazon.com/jp/blogs/news/aws-documentation-is-now-open-source-and-on-github/)

[AWS ドキュメントがオープンソースになり、GitHub でご利用可能に](https://aws.amazon.com/jp/blogs/news/aws-documentation-is-now-open-source-and-on-github/)

Githubで管理されているので、こちらを確認すれば変更履歴を追うことができます。

なお、リポジトリで管理されているのはあくまでオリジナルとなる英語版が対象となっているようです。

## 英語表示だとソースへのリンクが表示される

2023年2月現在、記事を英語表示すると、ページ下部に　`Edit this page on GitHub`　のリンクが表示されて、ここから該当記事のGithubに遷移できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1670622/1215ff50-03c2-9af9-bb55-4384130c2fa9.png)

## 実際に確認してみる

下記ページは、MFAを自己管理させるポリシーについて記述されたページとなりますが、こちらのページで変更履歴を確認してみます。

[IAM: Allows IAM users to self-manage an MFA device](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_examples_iam_mfa-selfmanage.html)

ページ下部の`Edit this page on GitHub`を選択

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1670622/e2bfe218-2d2a-e42d-3470-31a9f99da259.png)

awsdocsの該当ページに遷移できました。

[iam-user-guide/doc_source/reference_policies_examples_iam_mfa-selfmanage.md](https://github.com/awsdocs/iam-user-guide/blob/main/doc_source/reference_policies_examples_iam_mfa-selfmanage.md)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1670622/22369340-4798-f7d7-c6eb-da403a53523e.png)

あとは`History`からどんな履歴となっているか確認できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1670622/1c9b17a9-d31c-7331-264d-d48b6b174d9c.png)

## 総評

[Amazon Web Services - Documentation](https://github.com/awsdocs)から履歴を確認したい記事を探そうとすると地味に面倒なので、2023年現在、英語表示だとGithubへのリンクが表示されているって事は覚えておくと便利です。
ruby ぼっち演算子について try try! &. &[]　あと||も


# ボッチ演算

`&.`は`try`の省略形と考えて頂いてOKです。
tryはNilClassのメソッド
レシーバがnilクラスの時に動く

レシーバは簡単にいうと`.`の左側のことをレシーバっていいます。
foo`.`bar
レシーバ`.`メソッド
fooがレシーバ　barがメソッド

参考　[github_ruby_NilClass](https://github.com/rails/rails/blob/f33d52c95217212cbacc8d5e44b5a8e3cdc6f5b3/activesupport/lib/active_support/core_ext/object/try.rb#L135)

# 使い方

#### 普通のボッチ演算子の使い方

使用前
```
p nil.hogeee

undefined method `hogeee' for nil:NilClass (NoMethodError)
```

使用後
```
p nil&.hogeee

nil
```

#### arrayとかhashで使うとき

使用前
```
arraydesu = nil
p arraydesu[100]

undefined method `[]' for nil:NilClass (NoMethodError)
```

使用後
```
arraydesu = nil
p arraydesu&.[](100)

nil
```

hashの時も使い方はarrayとほぼ同じです
```
hashdesu = nil
p hashdesu&.[](:are)

nil
```

# どういう時利用するか

レシーバが存在したりしなかったりするパターンの場合に利用することが多いです

# 使用例

今回の下記の例でいくと
文字の数を返す`size`メソッドを
レシーバに nilだった場合は固定で 99999999を返すという処理をしています。

```
aruka_naika_wakaranai = nil

koredekettei = aruka_naika_wakaranai&.size || 99999999
p koredekettei

99999999
```

```
aruka_naika_wakaranai = 'mozidayo'

koredekettei = aruka_naika_wakaranai&.size || 99999999
p koredekettei

8
```

ボッチ演算子の説明中にまた`||`というのがでてきたのですが
`||`は左側がnilとかfalseなら右側を使うよってやつです。

# まとめ

レシーバに値がないと
`undefined method ‘hogeee‘ for nil:NilClass (NoMethodError)`
となるところをボッチ演算子を使うことでnilを返してあげる状態にできます。

注意として本来ならば
undefined method ~で値が存在しないと検知する動きを
nilを返すようにすることで　バグに気づけない等問題も発生する可能性があるので
使いどころは考えるのが吉だと思います
[FYI]Microsoft Teamsでノイズ抑制が効かないときにやってみるといいかもしれない話。

# Teamsのノイズ抑制が効かない時がある
## 概略
社用PCが故障したため交換したんだが(完全同一機種)、以前効いていたTeamsのノイズ抑制が効かない。
自分はノイズ抑制を「自動(規定)」や「高」にしているのに全く効いていない。
困ったことに、自分では事象がわからず、会議に出ている人に迷惑をかけるので厄介な事象。

## やってみたこと
- ノイズ抑制のOn/Off,設定値切り替え
- Bluetoothイヤホンに変えたり戻したり
- PC再起動
- Teams再インストール
どれも効果ありませんでした。

## 効果があったこと
Teamsの「設定」-「デバイス」-「マイクの感度を自動的に調整する」をOn/Off切り替え
です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101039/dd55a00d-8614-a4f2-1496-80c71a170337.png)

困った人に役に立てばと思って投稿しておきます。
なお、効果が出ているかどうかは会議でだれかに聞いてもらうのが手っ取り早いですが、上記画面にある「テスト通話を開始」でもわかります。
連動選択リスト(Dependent Picklist)

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


+ [選択肢の依存関係](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007HOSxP)
+ [連動選択リストを考慮した入力規則](https://qiita.com/Keiji_otsubo/items/cf7c4c88a3c3c71b7078)
+ [Salesforce オブジェクトのカスタマイズ 選択リストと項目の連動関係の作成](https://qiita.com/Keiji_otsubo/items/9a24f9342366ad9ef57d)

# たくさんの選択肢があるので、複製を作りたい

+ [LWCでカスタムオブジェクトの連動選択リストを作りたい](https://trailhead.salesforce.com/ja/trailblazer-community/feed/0D54S00000O5zlw)

試しては無いですが、以下のサンプルを見ると

Apexの　fetchDependentPicklistValues でMap<String,List<Map<String,List<String>>>>変数を使って画面を制御しているので、この変数に標準オブジェクトの連動選択リストを保存すれば、画面で同じ動きができるのではないかと思います。

https://salesforcediaries.com/2021/04/24/real-time-custom-dependent-picklist-from-record-field-values-in-lwc/


もう一つの方法ですがこの設定自体がMetadataなのでMETA DATA API　を使って更新することが考えられます。

以下でも1000この選択肢を設定したようなことが書かれていますが、詳細は分からないですね。


https://sfdcpanther.wordpress.com/2017/10/26/create-and-update-dependent-picklist-values-using-apex-metadata-api/

以下に該当するMetadataのリファレンスがあります。

[Picklist (Including Dependent Picklist)](https://developer.salesforce.com/docs/atlas.en-us.api_meta.meta/api_meta/meta_picklist.htm)

以前に少しだけメタデータで遊んだ時の資料があります。

[Apexを使ってメタデータAPIを操作する](https://qiita.com/Keiji_otsubo/items/51d3eb3653a2c1c81f4c)


# 3階層

+ [多階層の連動選択リストで最上位の値を最下位の値に連動させる](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007PvWwu)

:::note
親階層がAでもBでも子階層にxという制御はできないみたいですね。

what you are asking is not possible through field dependency as the same field cannot be a dependent picklist for 2 different controlling fields. 

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


# 使える項目

+ [Field Dependency Criteria](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007W5JGS)


使用できるデータ型

:::note
Text (Long Area) fields are not supported to be a dependent field

The data types that can be used as dependent fields in Salesforce are:

+ Picklist
+ Checkbox
+ Auto Number
+ Date
+ Date/Time
+ Email
+ Number
:::
native2ascii

日本語文字列のunicode化
```cmd
C:\Program Files\Java\jdk1.8.0_351\bin>native2ascii.exe C:\dirtest\sample.properties C:\dirtest\sample.properties.0
```
```sample.properties
name=sato
price=100
address:大阪
age:19
```
```sample.properties.0
name=sato
price=100
address:\u879f\uff67\u9ae6\uff6a
age:19
```
CSS テキストの影




![CSS Text Shadows for Your Website.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/637245/be0b7825-0be9-c008-25a1-960a6cb74f4d.jpeg)

### ベストをチェック 25+ 美しい [CSS テキスト シャドウ](https://frontendin.com/css-text-shadow-example/) あなたのウェブサイトのために

CSS テキスト シャドウは、Web ページのテキストに視覚効果を追加する方法であり、深さの錯覚を作成し、テキストを背景から際立たせます。テキストの影は、CSS プロパティ text-shadow を使用して作成されます。これにより、影の色、オフセット、ぼかし、広がりを指定できます。

<code> text-shadow プロパティの構文は次のとおりです。

<code> text-shadow: [horizontal offset] [vertical offset] [blur radius] [spread radius] [color]; </code>

水平オフセット: 影がテキストからオフセットされる水平距離。
垂直オフセット: 影がテキストからオフセットされる垂直距離。
ぼかし半径: 影に適用されるぼかしの量。値が高いほど、影がより拡散し、シャープさが失われます。
広がり半径: 影がテキストから広がる量。正の値は影を拡大し、負の値は影を縮小します。
color: 影の色。
たとえば、次の CSS コードは、水平方向のオフセットが 2px、垂直方向のオフセットが 2px、ぼかし半径が 3px、拡散なしの黒いテキスト シャドウを作成します。

<code>text-shadow: 2px 2px 3px black;

カンマで区切って同じテキストに複数の影を追加することもできます。例えば：

<code>text-shadow: 2px 2px 3px black, -2px -2px 3px white;

このコードは、互いに対角線上に配置された 2 つの影 (1 つは黒、もう 1 つは白) を作成します。その結果、3D 効果があるように見えるテキストの影ができます。

テキストの影は、テキストに視覚的な興味を持たせ、読みやすくするための便利なツールです。 text-shadow プロパティのさまざまな値を試して、Web サイトに最適な効果を見つけてください。

### ベストをチェック 25+ 美しい [CSS テキスト シャドウ](https://frontendin.com/css-text-shadow-example/) あなたのウェブサイトのために
MacBook の環境構築メモ

作成：2023年2月16日
画面が広いMacBookが欲しくて16インチを導入しました。その際の環境構築で行ったことを、今後再び環境構築する場合に備えて、メモします。

# VSCode
・[拡張機能をインストール](https://qiita.com/yamaguchi2000/items/76060c08764ce4c704f9)
・[MacでCodeコマンドを使う【VSCode】](https://zenn.dev/ryuu/scraps/4061aaee059d89)
・[文字サイズを変更](https://webrandum.net/vscode-settings-font-size-tab-size/)
・自動保存に設定

# git, XCode
・ターミナルで git を入力すると、インストールするか聞かれて、OK すると XCode のインストールが始まる。

# homebrew, nodebrew, Node.js、yarn
とある ReactNativeアプリに合わせて、Node v16.3.0 をインストールします。
・[MacにNode.jsをnodebrewでインストールして環境構築【決定版】](https://qiita.com/7110/items/efe0be1be11bed1db143)
```
% brew --version
Homebrew 3.6.21
Homebrew/homebrew-core (git revision cd6e6eeaf8e; last commit 2023-02-09)
% nodebrew
nodebrew 1.2.0
% node -v
v16.3.0
```
と思ったら、v16.3.0 で npm start がエラー出たので。安定版最新 v18.14.0 を使ってみます。
```
% node -v
v18.14.0
```
またエラーが出ました。npm install を忘れていました。
```
% npm install
```
yarn もインストールします。
```
% npm install -g yarn
added 1 package in 788ms
% yarn -v
1.22.19
```

# Go
・Go を[インストール](https://go.dev/dl/)します。
・ターミナルを再起動するとバージョン確認できます。
```
% go version
go version go1.20
```

# Postman
API の開発のために、Postman を[インストール](https://qiita.com/nlog2n2/items/b5e11332087c335e126e)します。

以上です。
Apexの備考

Apex:
public with sharing class TestCtr{

    @AuraEnabled(cacheable=true)
    public static List<Opportunity> getOpportunityWithOffSet(Id accId,Integer limitSize,Integer offSet){
        return [select Id,name,StageName,CloseDate,Amount,Account.name
                  from Opportunity
                 where AccountId =: accId
                 Limit :limitSize
                offSet :offSet
                  ];//レコードの内容を戻る
        //return database.countQuery(SQL);//レコードの件数を戻る
    }
}

-----------------------------------------------------------------------------------------------------------
備考：
1.@AuraEnabled
   　　このメソッドをLWC、Auraで使用できます。
   参照:https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_classes_annotation_AuraEnabled.htm
2.(cacheable=true)
　　メソッドの結果をキャシュー、検索条件が変わると、自動反映できます。
3.offset
  :https://developer.salesforce.com/docs/atlas.ja-jp.soql_sosl.meta/soql_sosl/sforce_api_calls_soql_select_offset.htm
フィクションなどから拾う情報処理用語 その29 情報漏洩 (コサキン)

これまた実話である。

とは言っても私が知っているのはそのほんの一部だし、時期も特定できないので、実話を元にしたフクションになるかもしれない…って我ながらズルい表現だねえ。

さて「スーパーギャング -コサキン無理矢理100%-」で小堺一機さんは清川虹子さんについて何か言ったらしい。当時、私はリスナーをやめていたので聴いてはいない。ただ番組の雰囲気は知っていたので、関根勤さん(の方が毒を吐きまくるから目立たないが)顔負けの毒を吐いていただろうと思う。もしかしたらリスナーから来たハガキをそのまま読んでゲラゲラ笑ったのかもしれない。いずれにしろ、まあ放送は深夜だし、リスナーは(当時の)若者が多かったから清川虹子さん(のお知り合い?)が聴いているとは小堺さんが思っていなかったのは確かだ。それが甘かった。

そしてそれからしばらく経ったある日、小堺一機さんは「ライオンのいただきます」の生放送で清川虹子さんから、こんな事を言われた。

清川虹子「あんた、ラジオで私の悪口を言ったでしょう!」

数十年も前なので正確な発言は覚えてはいないが、このような事を言ったのは確かである。で私はコサキンでの毒舌ぶりを知っていたので何をしたのかは察しがついてしまったと同時に恐ろしいなあと思った。その後、どうなったかまでは覚えていないが、小堺さんが慌てていたのは確かである。でも小堺一機さんがおバカなことは私も知っている。関根勤さんも時々やってくる根本要さん(当時は出ていなかったかもしれないが)もおバカなことは知っている。以後も懲りずにあの芸風はコサキンで継続されたのであった。
フィクションなどから拾う情報処理用語 その28 サンドボックス (仮面ライダーBLACK RX)

仮面ライダーBLACK RX 第4話「光の車ライドロン」(脚本：江連卓、監督：蓑輪雅夫、アクション監督：金田治 (C)石森プロ、東映)より

南光太郎は光の車ライドロンを作っていた。設計図通りに作った(はずな)のにライドロンは全く動かない。微動だにしない。なんで? なんでライドロンは動かないの? (チコちゃん談)

でまあ本当に色々あった末、光太郎はこう言った。

南光太郎「そうだ。ライドロンをあそこに連れて行けば。」

あそこってどこ? そういえば「大都会 PARTII」で松田優作演じる徳吉がこう言った。

徳吉「黒(岩)さん、あそこ行きましょうよ。」

そのあそこではない。松田優作もふざけていたが私もふざけ過ぎだ。閑話休題。そこへクライシス帝国の刺客ガンガディンがやってきた。結城丈二もとい大門豊が電人サボーガーに命令を出して戦わせたデス・ガンダーやらヘルガンダーやらブル・ガンダーやらを小さくしたような姿なのだ。全くの余談だが、映画版の監督を務めた井口昇さんは大月俊倫さんの猛反対を押し切ってブル・ガンダーを出した。曰く、ブル・ガンダーを出さなかったら、電人ザボーガーではない。この話を聞いて私は映画を観に行くことを決めた。やはり私はバカである。もっとも、映画は原作への愛が炸裂していたが井口昇監督独特の異常な作風も炸裂していた。

閑話休題。この状態でどうやって「あそこ」へライドロンを運ぶのか? と思う間もなくガンガディンが突入。何故か南光太郎がいない。ライドロンとアクロバッターがいるだけ。

ガンガディン「これがライドロン。RXめ。俺を恐れて大事なものを捨てて逃げよった。あのライドロンを木っ端微塵にしてくれる。」

この短慮が後に敗北を招くのだが、ガンガディンも視聴者もこの時点ではそこまではわかっていない。さてアクロバッターが動き始めた。無謀にもガンガディンに体当たり。

ガンガディン「お前から先に破壊してやる。」

それにしてもアクロバッターはなぜガンガディンに体当たりしたの? そこまでガンガディンが考えれば良かったのだが、ガンガディンの頭は「目の前にあるライドロン」破壊でいっぱいだ。注意がアクロバッターの方へ行ってしまった。でいつの間にか、外へ出てしまった。アクロバッターは倒れたが、また起き上がって体当たり。この撮影、どうやって行なったのかが興味深いで。当然、当時のCGではそこまで表現できないので人力(?)だ。とそこへ機甲隊長ガテゾーンがオートバイに乗ってやってきた。曰く

ガテゾーン「ガンガディン、アクロバッターは俺が引き受けたぜ。」

と言うわけでガンガディンはアクロバッターを振り切り、ライドロン破壊に成功…したかに見えた。なお破壊した場所は採石場。わざわざあそこへ運んだのだ。どうやって運んだのかねえ。

政宗一成「ライドロンはたった一度も地上を走ることなく爆破されてしまったのであろうか? いや、そうではない。敵の到来を察知した光太郎がアクロバッターと策を立て、秘密の地下通路から運び出していたのである。仮面ライダーを愛する諸君、君たちは一度死んだ仮面ライダーBLACKがクジラ怪人によって奇跡的に蘇った、聖なる海の洞窟を覚えているか。ここがその場所だ。光太郎はライドロンに命を与えるべく再びここに来ていたのだ。」

あの大きなライドロンをどうやって運んだのかは謎だが、ライドロンと光太郎がいる場所は、そこだ。あそことは聖なる海の洞窟だったのだ。なお、徳吉刑事が言った「あそこ」がどこなのかは定かではない。多分、松田優作が渡哲也や石原裕次郎達と行って酒を飲んだりした、あそこなのだろう。

南光太郎は仮面ライダーBLACK RXに変身し、ガンガディンと戦闘開始。何気に凄いアクションを岡元次郎さん(でしょう)もといRXは見せるが、やはりガンガディンは強敵だ。なにしろ結城丈二もとい大門豊が電人サボーガーに命令を出して戦わせたデス・ガンダーやらヘルガンダーやらブル・ガンダーやらを小さくしたような姿。自動車繋がりだ。

仮面ライダーBLACK RX「ライドローン!」

と叫ぶや否や、その時、不思議な事が起こった…と言うセリフを今回は政宗一成は一言も喋らなかったが、そういう事が起こった。ライドロンが始動したのだ。RXのところに駆けつけた。

仮面ライダーBLACK RX「ライドロン、命を持ったのか?」

なんとライドロンは喋るのだ。アクロバッターみたいだな。

ライドロン「RX、私はライドロン。お前の同志。」
仮面ライダーBLACK RX「お前は俺の同志。俺の友達だ。」

想定外の事態に、当然、ガンガディンは驚いた。

ガンガディン「そんなバカな。ライドロンは俺が爆破したはずだ。」

RXは種明かしを始めた。

仮面ライダーBLACK RX「ガンガディン、お前が爆破したのは偽物だ。」
ガンガディン「なに!」

要するにサンドボックスを設けたのだ。これにガンガディンはモノの見事に騙されたのだ。
仮面ライダーBLACK RX「本物は聖なる海の洞窟で命を与えられ、ここにある。ガンガディン、俺とライドロンを見事に倒してみるか。」

皆さん、もう結末は分かったよね。新・必殺仕置人第41話「解散無用」(脚本：村尾昭、監督：原田雄一)で中村主水がこう言っていた。

中村主水「そう、あんたの思った通りだよ、諸岡さん。」

と言うわけで仮面ライダーBLACK RXはライドロンに乗り、ガンガディンを攻撃。ガンガディンはリボルケインで倒されたのであった。
フィクションなどから拾う情報処理用語 その27 緊急対応 (新・必殺仕置人)

新・必殺仕置人 第1話 「問答無用」(脚本：野上龍雄、監督：工藤栄一 (C) 松竹)より

おや。偶然にも工藤栄一監督の演出である。

さて江戸に残った中村主水は紆余曲折の末、南町奉行所への転職に成功したが、しくじり、牢屋見廻りという閑職に左遷されていた。ある時、矢切の庄兵衛という囚人が脱走しようと襲いかかったので主水はこれを斬った。これが与力筑波重四郎の目にとまり、見事主水は定町廻りに戻ることができたのである。主水は矢切の庄兵衛の一件を調べ、珍しく表稼業(もっともこの頃は裏稼業から足を洗っていた)に精を出していた。

それからしばらく経った寅の日。「寅の会」なる句会で次の句が挙句となった。元締(とは?)虎が書いた挙句とは

八丁の堀に中村主水かな

これが中村主水の運命を思わぬ方向へと導くのだ。

さてさらにしばらく経ったある日、中村主水は怪しい人を追いかけているうちに気がつけば絵草紙屋に設けられた地下室にいた。そこに現れたのは念仏の鉄。そう。主水を置いて江戸を去ったあの元破戒僧の骨接師である。表稼業に精を出している時に一番会いたくない人だったのである。そこで主水はこう言った。

中村主水「お前とは会わなかった事にする。」

そうは問屋がおろさなかった。なんと中村主水の命が狙われているというのであーる。こうして否応なく中村主水は自身も絡んだインシデントに緊急対応せざるを得なくなったのだ。

果たして中村主水の運命や如何に。実は先述の内容にヒントが隠されているのだが続きは映像で。
フィクションなどから拾う情報処理用語 その26 リモートワーク (コサキン)

「スーパーギャング -コサキン無理矢理100%-」時代の実話だが調べても年月日を特定できなかったので実話を元にしたフィクションになるかもしれない。ただ私がリスナーだった頃なので1988年4月頃から1991年10月2日までの間なのは確かである。

ある時、当時小堺一機さんが司会をしていた番組「ライオンのいただきます」が九州を縦断して放送することになった。「ライオンのいただきます」もコサキンも生放送だったため、関根勤さんも鹿児島へ行って放送することになった。そのように事前に予告もされていた、コサキンでは。そして放送当日に事件が起きた。

関根勤さんは東京に残っていた有川周一(現在は有川周壱に改名)さんと一緒に飛行機に乗って移動したが、当日の鹿児島の天候が悪く、飛行機は羽田へ引き返してしまった。急きょコサキンは鹿児島と東京の二元中継で放送を行なうことになったのである。つまり、リモートワークである。一時期テレビでもZoomなどを使ってリモート出演するのが多用されたが、あの手法の先駆けだったのだ。

小堺達は鹿児島にある(多分)南日本放送で、関根と有川は東京赤坂にあるTBSにいたのだ。音声は繋がっていて問題なく放送は進んだ…かにみえたが、リスナーからの雑談ネタを紹介する時に思わぬ盲点が露呈した。

コサキンではリスナーが写真を送りつけて「これは●●している××さんです。」と紹介する所謂「写真ネタ」があったのだ。考えてみれば大胆なネタだ。リスナーは聴いているだけなので頭の中で想像するしかないのだ。明石家さんまはこの面白さを理解できず、「写真を見て笑うコーナーやめなさい」とか言ったのだが、リスナーはそれを逆用して「写真ネタやめい」と言う言葉まで作っていた。で当時、写真を共有する手段まではなかった…というか緊急事態勃発でそこまでスタッフの頭が働かなかったのかもしれないが…兎に角写真が赤坂のTBSにはなかったので関根さんは写真を見られず「つまらない」「リスナーの気持ちがわかった」と発言。危うく写真ネタは終わ…りかけたのだが、リスナー参加コーナーに参加したリスナーが「私達はそう言うあなた達の姿などを想像して笑っているんですよ、だからやめないでください。」と慰留し、以後もずっと続くのであった。

で私が覚えている写真ネタは元ミスコサキン(当然女性)が結婚しましたとかいう近況報告を書き、最後に「私の近況写真も送ります。」とか言って、自分の目をアップにした写真(と小堺さんは言っていた)を送りつけたものである。終盤は「加工してやんの」(多分Photoshopを使ったのだろう)と言うものも送られていた。長期間続いたのでそれだけ画像処理ソフトが進化したのだ。

また最末期には小堺一機さんが「◎◎ダンス!」と叫ぶと関根勤さんが頭に浮かんだ踊りを即興で踊るというネタも登場。これも写真ネタ以上に盛り上がりを見せたのであった。でこれもリスナーは頭の中で想像するしかないという酷いネタであった。これをどう共有するのかは定かではないが、映像を共有するしかないだろね。もしかしたら共有不要かもしれないが。
あれ？protocしたけど、メッセージ定義しか生成されてないぞ？って時に読んでほしい記事

この記事は筆者の`.proto` ファイルからのgolangコード生成時の失敗談を元に理解を深めていただく記事です。
(そんなん読めばわかるだろ！って話だったのですが、大目に見てください)

# protocの公式サンプル

https://grpc.io/docs/languages/go/quickstart/#regenerate-grpc-code

上記記事のサンプルでは、`.proto` ファイルからGo言語へのコード生成をする際に

```
$ protoc --go_out=. --go_opt=paths=source_relative \
    --go-grpc_out=. --go-grpc_opt=paths=source_relative \
    helloworld/helloworld.proto
````

としています。

# とりあえず生成してみる

上記の記事を見た私は、オプションいっぱいでわからないので、とりあえず最小限で実行してみよう！と思い

```
$ protoc --go_out=. 
````
と実行してみました。すると、helloworld.pb.goは生成されるけど、helloworld_grpc.pb.goが生成されていません！

なぜでしょう？

理由は簡単で、`--go-grpc_out=`が指定されていないからです！

- `--go_out`は、`*.pb.go`
- `--go-grpc_opt`は、`*._grpc.pb.go`

の生成に関係しているということなんですね～。

> そりゃそうか

皆さんも、コード生成時には、`--go_out`と `--go-grpc_opt`の指定をお忘れなきよう。それでは～
フィクションなどから拾う情報処理用語 その25 マルチキャスト (ザ・ハングマン)

ザ・ハングマン 第35話「にせハングマン壊滅作戦」(脚本：長野洋、監督：帯盛迪彦 (C)　松竹芸能)より

元国家機関の中心的人物と想像される神島泰三ことゴッド(山村聰)は秘密の組織を作っていた。リーダーは紆余曲折の末、日下部孝介ことマイト(黒沢年雄)になった。メンバーには加納良次ことデジコン(名高達男)、辻雄太郎ことパン(植木等)、桑野多美子ことタミー(夏樹陽子)などがいた。なおゴッドの事務所は西新宿にあるビルにあった…というのは以前も書いたなあ。さて時は1981年7月17日で、この時は竜清康ことドラゴン(ディオン・ラム)がメンバーにいた。彼は香港から来た男で当初は寡黙だったが、一時香港に戻り、日本にまた来たという経緯がある。日本に戻って来てからは中国語や英語や片言の日本語で色々しゃべって感情を吐露するようになっていた。中国武術の達人である。

今回の標的は調子こいて「天誅」を加えて世間からは「ハングマン」と呼ばれるような連中である。ゴッドはかなり怒り、「なにがハングマンだ! こんな連中はただの薄汚いリンチマンに過ぎん!」とまで言い切っていた。なお本物のハングマンがいる事は世間の人達は全く知らなかった。

さて調査の結果、菊川大造がボスだと判明した。マイトとドラゴンは菊川の屋敷の防犯カメラを全て破壊してから、テレビカメラなどの中継道具一式を抱えて菊川の屋敷に忍び込んだ。庭をうろついていると犬がやってきた。犬がしつこいので

マイト「ワンちゃん，ごめんね．僕ちゃん，怒ったよ．」

マイトは小型の催涙弾を投げた。犬は眠ってしまった。

マイト「少しおねんねしてなさい。まーた来やがった。やってくれるか。」

爆発音を聞いてボディーガード達が集まったのでドラゴンに撃退させた。

マイト「時間がない。眠っててもらおう。」

またマイトは小型催涙弾を投げ、ボディーガード達を眠らせた。マイトは遊びながら仕事をしているようにしか見えない。ドラゴンは防犯カメラのモニター室に乗り込み、カメラの故障を知って慌てたボディーガード達を撃退。その頃、パンとタミーは鉄塔の下でマイト達の中継電波を受信する装置を組み立てていた。

その頃、菊川大造はナチスの旗が飾られた自室で日本刀を吟味していた。そこへマイトが障子を開けて登場した。

マイト「覚えてるかい、この顔を?」
権藤「貴様は、こないだ新聞記者と偽って…」
マイト「インタビューの続きをやらせてもらおうと思ってね。」

ドラゴンが外から中を撮影する。

権藤「ふざけるな! 黙ってのこのこ入って来やがって。 おーい誰かいないか?」
マイト「馬鹿、呼んでも無駄だよ。皆さん，お休み中だ!」
権藤「なに?」
マイト「さあ、インタビューの続きを始めましょうか。」
権藤「いいかげんにしろ．出て行け。」

だが菊川は権藤を制した。

菊川「出て行かせることはない。」

権藤が驚いて振り向いた。菊川は立ち上がってマイトのほうに近づいた。

菊川「ちょうどいい機会だ。あたしの信念を聞かせよう。」

別室でドラゴンの撮影している映像を見てデジコンがほくそ笑んだ。そしてパンに準備はできてるかどうか確認した。その頃，マイトはにやりと笑った。

マイト「ゆっくり伺いましょう。」

ドラゴンがカメラを操作する手に力が入る。ちなみにドラゴンは左手の薬指に指輪をしていた。

マイト「その前に一つ聞きたいことがある。偽ハングマンの元締めは貴様だろう?」
菊川「偽ハングマン?」
マイト「そのとおり! 本物のハングマンはこの俺だ!」

菊川と権藤は怪訝な顔でお互いの顔を見合った。マイトは菊川を指差した。

マイト「菊川! お前の本当の狙いはクーデターで世の中をひっくり返すことだ。そうだな。」
菊川「うん．狙いはまさにクーデター。」

マイトの挑発にまんまと乗った菊川はしっかりと喋ってしまった。デジコンがスイッチを切り替えると同時に、全国のテレビに菊川の顔が大写しになった。マルチキャストである。

菊川「私は今の堕落しきった世の中がどうにも我慢がならなくなった。だから密かに流山一平に命じて殺人専門の部隊を作らせたんだ。そして彼らにはどんな悪でも構わんから、容赦なく叩き潰せと命じた。これによって世の悪人どもは縮み上がり、人々はこれに喝采を送るに違いない。その機を狙ってクーデターを起こすのだ! クーデターを起こせば、愚民達はこれに熱烈なる支持を与え、やがては優れた指導者の下にひれ伏すことになるのだ!」
マイト「その指導者とは貴様自身のことか?」
菊川「もちろん。この私をおいて他に誰がいる? 政治家も駄目。官僚も駄目だ! この間違ってる世の中を立て直すことができるのはこのわしの他にはおらん。」
マイト「貴様はヒットラーになりたいのか?」
菊川「そうだ。ヒットラーだ。この菊川大造は現代のヒットラーだ。」

マイトはにやりと笑った。

マイト「ちょっと待った。菊川さん、今あんたが喋ったことは全国のテレビに流れている。」
菊川「テレビ?」
マイト「そうとも。全国ネットワークでね。」

日本のテレビのありとあらゆるチャンネルにマルチキャストされていたのである。
さすがの菊川も狼狽してしまい、二の句が告げなくなった。

権藤「そんな馬鹿な。出鱈目を言うな。」
マイト「嘘だと思うなら，テレビつけてみな。」

菊川達がテレビをつけると菊川がビックリしている顔が映っていた。

菊川「くっそー。」

菊川は日本刀で切りかかったがマイトとドラゴンに軽くあしらわれ、権藤と一緒に縛られてしまった。

菊川「わしはヒットラーだ。現代のヒットラーだ。」
マイト「わかった。わかった。」

マイトが菊川達を座らせると電話がかかってきた。

マイト「ほうら，視聴者から早速反応があったい。」

マイトは電話に出た。

マイト「もしもし，菊川です。はい。わたくし秘書の権藤と申します。今のテレビをご覧になった。はい、間違いございません。はい。あれは先生のご意見でございます。先生がですね、世の中に自分の意思を発表したいとそう仰ってます。」
菊川「そうだ。そのとおりだ。わしは現代の指導者だぞ!」
マイト「聞こえましたでしょうか? よろしくお願いいたします。」

マイトは電話をうやうやしく切った。

マイト「警察がすぐ来るそうだ。」

菊川と権藤はびっくりしてお互いの顔を見合った。

マイト「せいぜい観念してもらおう。仕事は終わった。」

マイトとドラゴンは菊川達を置いて帰っていった。マイトの報告にゴッドも御満悦だった。
フィクションなどから拾う情報処理用語 その24 確率 (必殺仕置人)

必殺仕置人 第26話「お江戸華町未練なし」(脚本：梅林喜久生、監督：工藤栄一 (C) 松竹)より

この話は面白かった。演出しているのが工藤栄一だからだろう。東映京都撮影所で監督になった人だが京都映画制作の必殺シリーズでも辣腕を振るっている。そして千葉真一主演の「服部半蔵 影の軍団」も演出している。

さてバッサリ切って、終盤である。念仏の鉄、棺桶の錠、鉄砲玉のおきん、おひろめの半次は仕置を終え、江戸を去るために集まっていた。そこへ後からやって来たのは、なんと中村主水である。

物音がしたので鉄達は散ったのだが

念仏の鉄「八丁堀(中村主水のあだ名)、お前は来ちゃ行けねえんだよ。けえれ。」

だが主水の決意は堅かった。

中村主水「何を言うんだい。俺もおめえ達と一緒に行くでい。」
念仏の鉄「バカなことを言うんじゃねえ。旅ごしらえなんかしやがって、勝手に着いてきてもらっちゃ困るなあ。」

奉行所に捕まったが何とか救われた半次が続いてこう言った。

半次「そうだよ。あんたにはおカミさん(りつ)もおふくろさん(せん)も列記としたお勤め先(この時は北町奉行所)もあるんだから。」
棺桶の錠「俺たちに義理を立てることはねえ。」
おきん「そうだよ。お前さん、何を疑われてないんだから江戸を去ることはないよ。」

皆、中村主水が旅立つ事には反対だったのだ。
だが

中村主水「しかし、おめえ達と別れるのはなあ。」

未練が深そうだ。そう。中村主水が最終回でこういう行動を取ったのは実は「必殺仕置人」の時だけなのだ。それだけ、シンパシーを感じていたのだろう。ここで鉄が思いがけない話をし出した。ここから話は思いがけない方向へ進むのだ。

念仏の鉄「別れるのはおめえだけじゃねえ。みんな、ここで別れるんだ。」

思わずおきんは目をむいた。

半次「え!?」
おきん「私たちも?」
鉄「ああ。」

鉄は言った。

鉄「人相書きまで回されちまった俺達が一緒にいたんじゃ、また御用風に吹かれら。もうこの辺で別れて、それぞれ新しい道を探した方が。」

だが異論噴出。

半次「俺はやだ。皆4人とも俺の命の恩人だよ。こんな連れ合い、二度とありゃしねえ。」
半次は打首寸前のところを鉄達に救われたのだ。
おきん「その通りだよ。あたしだって一人ぼっちになるのはやだよ。」

だが鉄は明確に反論した。

鉄「一人ぼっちの方が足が洗いやすいよ。」

それを聞き

棺桶の錠「念仏、足洗うつもりか?」
鉄「洗うかもしれねえ。洗わないかもしれねえ。だがよ、いつまでも続けるほどありがてえ商売でもねえだろう。」

それでも

半次「鉄さんらしくねえぜ。俺は着いていくよ。」
おきん「あたしも。」

各々の性格が現れた発言だ。

鉄「しつこい奴だなあ。よし、じゃあこれで決めよう。」

鉄が懐から出したのは銭1枚である。

鉄「表が出たら一生道中だ。裏が出たら別れる。どうだ、錠。」
棺桶の錠に聞くのがポイントだと思うのだが、錠はこう答えた。
錠「わかった。」

鉄は主水に銭1枚を見せつけながらこう言った。

鉄「後から文句は聞かねえぞ。」

主水は頷いた。そして鉄が銭を投げると出たのは

鉄「裏だ。決まった。別れるぜ。」

即座に(これ重要)鉄は投げた銭を拾い上げて立ち去ろうとしたのだが

おきん「鉄さん。」

おきんは鉄を止めたのだが鉄はいつも通り、にやけてこう言った。

念仏の鉄「またいつか5人会えるよ。」
おきん「会えるってどこで?」
念仏の鉄「どうせ極楽へは行けねえ俺たちだ。会えば地獄だろうぜ。」

鉄は笑い、続けてこう言った。

念仏の鉄「盛者必滅、会者定離。あばよ。」

鉄は皆を置いて立ち去ってしまった。そういえば鉄は元僧侶だった。
なお中村主水は立って無言のままである。おきんは追いかけたが鉄は立ち止まらなかった。そして

おきん「錠!」
おきん「半公…」

の順に立ち去り、おきんは何も言わずに半次の後を追いかけたのであった。
なお中村主水は立って無言のまま身動きしなかった、いや、できなかったのだろう。その後、黙って見送った。

さて念仏の鉄が投げた銭には細工がしてあった。実は2枚貼り合わせて裏しか出ないようにしていたのである。つまりハナから裏の出る確率は100%だったのだ。鉄はその銭2枚を剥がして2枚ずつにしながら、こう言った。

念仏の鉄「世の中裏目ばっかりよ。」

にやけて言うのが鉄らしいところである。鉄は銭2枚を空へ投げ上げて立ち去った。でまあおきんと半次(流れ橋に座っていた)、棺桶の錠(船に乗っている)、そして北町奉行所に普段の同心姿で戻る中村主水が映って、「必殺仕置人」は終わったのであった。

なお彼らのその後はなんと全員、別の話で語られるのであった。
フィクションなどから拾う情報処理用語 その23 情報漏洩 (ノンフィクション)

これは実話である。
ただ前世紀の話なので記憶違いがあるかもしれない。
だから実話を元にしたフィクションになるかもしれない。

さて本題に入ろう。
1992（平成4）年4月26日(だったと思う)。
私はNHK放送センターのあるスタジオにいた。
収録されたのは「ファイト!」という当時土曜日の23:00 - 23:45に放送されていた番組。
当時所属していた東京工業大学鉄道研究部が慶應大学鉄道研究部と「対戦」することになったのである。
なんで我々が? どうやって対戦? 謎は多かったが「対戦」することになったので仕方がない。
主要なメンバーが選抜されたが、私はその中には入ってはおらず、まあ足軽のような立場であった。当時は既に大学院に進んでいたので隠居の身である…と言いながら4年生もM2もOBも主要なメンバーにいたが。

司会はルー大柴とちはる。コメンテーターは秋山仁。離散数学の大御所だが見た目は長髪のおかしなおじさんであった。ゲストは鉄道趣味の重鎮種村直樹、鉄道のことなど何も知らず、芸名をつける時にビートたけしから「(普段から東と呼ばれていたので)そのまんま、東でいいよ。」と言われたのをラッシャー板前が「そのまんま東」とメモしてしまったためにそれが芸名になってしまった、後の東国原英夫、そして後に緒方孝市に見そめられて結婚して広島のローカルタレントになった中條かな子、後の緒方かな子である。

45分番組にしては収録時間が長かった…と思った。私がVTRに映されたのは最初の両者入場のところと後のクイズコーナーで(だったと思う)観客席がチラっと映った時のみである。45分のうち私が映ったのは高々1分であろう。よく観ないと気づかないはずだ。名前も出なかった。

収録は無事に終わったが、私はこれを口外しなかった。
今もそうだが私は単独行動が好きだったので高校時代の友人とも疎遠にしていた。
だから私がテレビに出た事は誰も知らないはずであった。

1992（平成4）年5月2日に番組は放送された。
何故か視聴率は高かったらしい。

だが私のテレビ出演は思わぬところからバレる事となる。
まず大学の研究室にバレていた。
主要メンバーが私の後輩と知り合いでペラペラ喋っていたのである!
あちゃー。ゼミで恩師も交えて上映会が開かれる羽目に陥った。
まあ仕方がない。これで済んだだろう、と私は思っていた。

しかしそれだけではなかった。
それから四半世紀以上経って Facebook で高校時代の友人と繋がった時、こう言われた。

あなたはテレビに出たんだってねえ。

え!?
しっかりバレていたのである。

2カット(3カットかなあ)しか映らなかったのにも関わらず仲間内では噂になっていたのである。

うーむ、恐ろしい。それにしてもよくわかったなあ。

そしてこの番組は資料映像としてしっかり残されているそうである。
ということは出演者の誰かに何かがあった時に御開帳される可能性が高い。
いくら私自身が努力(?)しても思わぬところから情報は漏洩するのである。
行動は慎重に慎重に行うべきなのである。

でもこれをネタにできたのだから塞翁が馬であろう。小堺一機さんも関根勤さんも自分の失敗談をコサキンで笑いに昇華させていたしね。ご開帳してしまえば恐い事なんてナーンにもないのだよ。

https://www2.nhk.or.jp/archives/tv60bin/detail/index.cgi?das_id=D0009042304_00000
解決不能。学習が進められない：Dockerでdocker-compose upすると、[Warning] Setting lower_case_table_names=2・・・の警告が出る。どの選択肢に変更しても警告が消えない

# docker-compose up すると以下が最下部に出力される。

```
myArea-db-1   | [Entrypoint] Starting MySQL 5.5.62-1.1.10
myArea-db-1   | 230218 23:52:04 [Note] mysqld (mysqld 5.5.62) starting as process 1 ...
myArea-db-1   | 230218 23:52:04 [Warning] Setting lower_case_table_names=2 because file system for /var/lib/mysql/ is case insensitive
```

調べると、どうやらMySQLのバージョンが起因しているようで、二つの手がある様子。
色々調べると、ネット検索とChatGPTを併用したところ、最終的にChatGPTだけがMySQLのバージョンが問題である答えに最速で到達した。誤判断もあるようだが使える時もある様子。

以下、ChatGPTで最後に得た答え

--------------------------------------------------
MySQLのバージョンが古く、lower_case_table_namesの設定が効かない可能性があります。MySQL 5.6.2から、lower_case_table_namesの設定はWindowsとUnix/Linux系のすべてのファイルシステムでサポートされるようになりました。

MySQL 5.5では、lower_case_table_namesを設定してもファイルシステムが大文字と小文字を区別しない場合にのみ効果があります。ファイルシステムが大文字と小文字を区別する場合、MySQLは自動的にlower_case_table_names=0を使用します。

そのため、MySQLのバージョンを5.6以上にアップグレードするか、ファイルシステムが大文字と小文字を区別しないように設定する必要があります。
--------------------------------------------------

しかし、まだ解決しない。
一つ目のバージョンアップは学習の関係でできない。
よってもう一つの方法を試すが、何も変化がない。

0: テーブル名は大文字と小文字を区別する
1: テーブル名は小文字に変換される
2: テーブル名は大文字と小文字を区別しない

具体的な記述としては以下。

```
// いずれかを記述する。
Setting lower_case_table_names=0
Setting lower_case_table_names=1
Setting lower_case_table_names=2
```

docker-compose、Docker、Macの再起動をしても現象変わらず。
なぜ直らない？？　これでは学習が進められず、日ばかりが過ぎていく。
[Android] [Kotlin] TextViewから文字がはみ出しても大丈夫！TextViewの自動スクロール方法

### できたこと
TextViewから文字がはみ出して、2行になったり文字が切れたりすることあると思います。
そんな時にTextViewが自動でスクロールして、はみ出しても全文字表示させる方法です。
XMLのTextViewに
    android:singleLine="true"
    android:ellipsize="marquee"
    android:marqueeRepeatLimit="marquee_forever"
を加え、ソースコードで
isSelected = true
にすると自動スクロールしてくれます。
全TextViewで「isSelected = true」をするのはコードも多くなると思うので、
TextViewが含まれているLayoutで「isSelected = true」しても良いかと思います。
ただその時の注意点の例として、
Buttonで実装した時、「state_selected="true"　or "false"」などで
Buttonの背景色を変えようとしていた場合、isSelectedがずっとtrue状態になってしまうので、気をつけた方が良いです。
（↑私がそうなりました。）
自動でスクロールしてくれるってなんかいいですよね！w
うまく実装して見やすいアプリを作っていきましょう。


```.xml
<TextView
    android:id="@+id/tv"
    android:layout_width="100dp"
    android:layout_height="５0dp"
    android:singleLine="true"
    android:ellipsize="marquee"
    android:marqueeRepeatLimit="marquee_forever" />
```
```.kt
findViewById<TextView>(R.id.tv).isSelected = true
```