OmniAICreator/Qiita-1.07M huggingface dataset:
８月開催のカンファレンス５選

## DevelopersIO 2023 沖縄
開催日時：2023/08/05 09:30～18:30
開催場所：オフライン
* セッションイベント会場：[Gwave](http://www.gbic.jp/access/)
* ビーチパーティ会場：[宜野湾トロピカルビーチ](http://www.ginowantropicalbeach.jp/pages/detail.php?PageID=2)

今年で9回目の開催を迎えるクラスメソッド主催のカンファレンスイベント DevelopersIO 2023。

沖縄拠点でもオフラインで開催します！ セッションイベント後には、トロピカルビーチにてBBQパーティも開催いたします。 ご参加いただける方はイベント申込時のアンケートにご回答ください。 参加者同士や登壇者と交流いただければと思います。

皆様のご参加を心からお待ちしております！

https://classmethod.connpass.com/event/286870/

---
## ISUCON 夏祭り 2023
開催日時：2023/08/26 09:30～19:00
開催場所：ヤフー株式会社 17F LODGE & セミナールーム(東京都千代田区紀尾井町1-3 東京ガーデンテラス紀尾井町 紀尾井タワー)

ISUCON 夏祭り 2023はISUCONが好きな人であれば誰でも参加できるISUCONのお祭りです。
・ISUCON何もわからないけどチャレンジしてみたい
・ISUCONのことが好きすぎるので、同じような人とISUCONについて語りたい
・ISUCONについて語っている人を間近で見たい
といった方に特にオススメです。

ISUCONについての理解、問題の解き方について深く学ぶことができる事前講習をオフラインにて、一般公募並びに過去のISUCON出題者によるトークセッションをハイブリット形式にて実施いたします。

https://isucon.connpass.com/event/288820/

---
## Merpay & Mercoin Tech Fest 2023
開催日時：2023/08/22～08/24
開催場所：オンライン

Merpay & Mercoin Tech Fest 2023 は3日間のオンライン技術カンファレンスです。
IT企業で働くソフトウェアエンジニアおよびメルペイ・メルコインの技術スタックに興味がある方々を対象に
2023年8月22日（火）、23日（水）、24日（木）の3日間、開催します。
Merpay & Mercoin Tech Fest は事業との関わりから技術への興味を深め、
プロダクトやサービスを支えるエンジニアリングを知ることができるお祭りです。

今年のテーマは「Unleash Fintech」。
メルペイ・メルコインのこれまでの技術的な取り組みはもちろん、
メルカリグループのFintech事業における新たな挑戦をお伝えします。
セッションでは事業を支える組織・技術・課題などへの試行錯誤やアプローチなど多面的にご紹介予定です。

メルペイ・メルコインが今後どのようにUnleash（解放）していくのか、ぜひ見に来てください。

https://events.merpay.com/techfest-2023/

---
## Open Developers Conference 2023
開催日時：2023/08/26 10:00～18:00
開催場所：[台場フロンティアビル 12F](https://docomo-openlab.jp/)

8月26日(土)にODC2023を開催します！4年ぶりとなるリアル会場での開催です。

開発者とインフラエンジニアの交流の場として、「DevOps」「開発」「開発者」をキーワードに、様々な最新情報を提供いたします。
皆さまのご参加をお待ちしております。

https://event.ospn.jp/odc2023/

---
## SHIFT 89祭2023～ITで飛び立とう、次なる世界へ～
開催日時：2023/08/09 10:00～19:20
開催場所：オンライン

アテンション、プリーズ。
ようこそ、SHIFTグループの「89祭2023」へ。
コロナ禍という先の見えない乱気流を抜け出し、勢いを増すデジタル化の
ジェット気流に乗って、いよいよ次なる世界へ旅立つときがきました。

DXで効率化を実現する世界、
DAAE （開発）やコンサルティングで優れたサービスを生み出す世界、
テストでソフトウェアからバグを一掃する世界など、
みなさまが思い描く世界へと、SHIFTグループがここからお連れします。

そのほかにも、セキュリティ、カスタマーサクセス、UI/UX、インフラ、AI…。
SHIFTグループには、大きな飛躍をサポートする「翼」がすでに揃っています。
「ITによるビジネスの躍進」という、雲ひとつない明るい未来に向かって、
さあ、出発の時間です。

https://topics.shiftinc.jp/89matsuri2023/
python mayaで全てのNURBS Curvesをセットに追加する

```python
import maya.cmds as cmds

def create_nurbs_curve_set(set_name):
    if not cmds.objExists(set_name):
        cmds.sets(name=set_name, empty=True)

def add_nurbs_curves_to_set(set_name):
    curves = cmds.ls(type="nurbsCurve")
    if curves:
        for curve in curves:
            cmds.sets(curve, add=set_name)

def main():
    set_name = "Sets"
    create_nurbs_curve_set(set_name)
    add_nurbs_curves_to_set(set_name)

if __name__ == "__main__":
    main()
```
実記憶管理

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3457284/8d0bf832-1644-3a6a-ff0b-7a6c4098c839.png)
１：固定区画方式とは
　実記憶空間（コンピュータに実際に備わっている主記憶の領域）を一定サイズの区画に区切り、この区画単位で領域を割り当てる方式です。一般的に、データが区画ぴったりのサイズになることは稀ですから、どうしても、区画内に余りができてしまいます。この余りのことを内部フラグメーションと呼びます。例えば、段ボール箱に荷物を詰めると少し隙間が空いてしまいますが、この隙間が内部フラグメーションに相当します。内部フラグメーションがたくさんある状態は、メモリを効率的に利用しているとは言えません。

２：可変区画方式
　固定区画方式は、内部フラグメーションが発生します。そこで、データ一つ一つのサイズに合わせた区画を用意することにします。例えば、既製品のスーツではシクリ来ないので、オーダーメイドでスーツを作るようなものです。
　このように、データにぴったりのサイズを用意する方式を可変区画方式と言います。
可変区画方式では、内部フラグメーションでは、、内部フラグメーションは発生しませんが、外部フラグメーションという別の問題が発生します。

　外部フラグメーションは、区画と区画の隙間に、細かい未使用領域ができれしまう現象です。区画の解放と割り当てを繰り返すと、細切れの未使用領域が増えてしまいます。最終的には、細切れの未使用領域ばかりになってしまい、まとまった広い領域を確保することができなくなります。

そこで、ある程度細切れの未使用領域が増えてたら、これらをまとめる操作を行います。この操作をメモリコンパクション（ガーベジコレクション）と言います。下から、区画を押し上げて、上の方に詰める操作を行います。

例：試験問題には、外部フラグメーションについて、「OSが記憶領域の割り当てと解放を繰り返すことによって、細切れの未使用領域が多数できてしまう」というふうに出題される。

３：メモリオーバレイ
　家電製品や携帯機器などの組み込みシステムでは、主記憶が少量しか搭載されていないこともあります。例えば、64kバイト程度しか主記憶が搭載されていないようなシステムもあります。このようなシステムで、１００kバイトのサイズのプログラムを動かすといったように、搭載されている主記憶量よりも、大きなサイズのプログラムを動かす技術がメモリオーバレイです。

　メモリオーバレイでは、プログラムを機能単位でセグメントに分割します。そして、必要なセグメントだけをメモリに読み込んで実行します。プログラム全てをメモリに読み込むわけではないので、プログラム全体のサイズよりも少ないメモリ量でプログラムを動作させることができます。
　
　なお、必要なセグメントを主記憶に読み込む操作は、プログラム内で手動で行う必要があります。つまり、プログラム本来の動作に加えて、どのセグメントをどのタイミングで主記憶に読み込むのかもプログラミングする必要はあるのです。

　このようなことから、メモリオーバレイを用いると、プログラムを作成するのに多くの手間がかかります。

※セグメントとは、プログラムを機能単位で分割したときの１つのまとまりのこと。
【PHPStan】カスタムルール作ってみた

私が所属しているインターン先のコーディング規約にオペレーターに関しては厳密チェックを行うようにするといったルールがあります。

そこで今回PHPStanを用いて、==または!=を用いている箇所があった場合にPHPStanでエラーを吐き出すようにカスタムルールを作りました。

# 手順

## ルールクラス作成

追加したいルールのクラスを作成します。今回は==と!=があった場合にエラーを出したいので以下の二つを追加します。

どこに作っても問題ないですが、今回はApp\PHPStan\Rulesに作成します。

### **DisallowEqualOperatorRule.php**

```php
<?php

namespace App\PHPStan\Rules;

use PhpParser\Node;
use PHPStan\Analyser\Scope;
use PhpParser\Node\Expr\BinaryOp\Equal;

class DisallowEqualOperatorRule implements \PHPStan\Rules\Rule
{
    public function getNodeType(): string
    {
        return Equal::class;
    }

    public function processNode(Node $node, Scope $scope): array
    {
        return ['Non-strict comparison operator "==" is not allowed. Use "===" instead.'];
    }
}
```

### **DisallowNotEqualOperatorRule.php**

```php
<?php

namespace App\PHPStan\Rules;

use PhpParser\Node;
use PHPStan\Analyser\Scope;
use PhpParser\Node\Expr\BinaryOp\NotEqual;

class DisallowNotEqualOperatorRule implements \PHPStan\Rules\Rule
{
    public function getNodeType(): string
    {
        return NotEqual::class;
    }

    public function processNode(Node $node, Scope $scope): array
    {
        return ['Non-strict comparison operator "!=" is not allowed. Use "!==" instead.'];
    }
}
```

## phpstan.neonに以下を追記

作成したルール2つのクラスを監視対象に置きます。

これでオペレーターの厳密チェックに関してもPHPStanで検知できるようになります。

```php
services:
    -
        class: App\PHPStan\Rules\DisallowEqualOperatorRule
        tags: [phpstan.rules.rule]
    -
        class: App\PHPStan\Rules\DisallowNotEqualOperatorRule
        tags: [phpstan.rules.rule]
```

# 感想

独自でルールを作ることで、よくあるコーディング規約に関するレビューでの指摘も減らすことができるのでとても良いと思いました！

すごく簡単にできたのでぜひやってみてください！
統計検定2級メモ用

# メモ用
間違っていたらすみません。

## 不変推定量と一致推定量
不偏推定量：母平均μに等しくなるとき
一致推定量：サンプル数nが大きくなると母平均に近づく。

## 変動係数
$CV = \frac{σ}{μ}$

## 正規分布
確率変数Xと確率変数Y
それぞれの平均と分散が同じなら、同じ分布になる。

## 連続一様分布
U(-1,1)に従うとき、U(a, b)とすると、
$f(x) = \displaystyle\frac{1}{b-a}$
$μ = E[X] = \displaystyle\frac{a+b}{2}$
$σ^2 = V[X]= \displaystyle\frac{(b-a)^2}{12}$

## 仮説検定t
$t = 1.81$のとき、$v=23$の場合
有意水準5%の片側検定における棄却域は、
$t(0.05)(23)=1.714$ ... ①
有意水準2.5%の片側検定における棄却域は、
$t(0.25)(23)=2.069$ ... ②
①のときは、1.81を棄却できるが、②の時は1.81を棄却できない。

## カイ2乗
### 棄却について
$χ^2$の統計量が2.6とする。
自由度5で$χ^2$分布の上側5%点は11.07である。
このとき、$χ^2$の統計量2.6は棄却されない。

### 期待度数の求め方
#### 確率が問題文にあるとき
|  | 列1 | 列2 | 列3 |
| ---- | ---- | ---- | ---- |
| Rの確率 | 0.1 | 0.2 | 0.7 |

|  | 列1 | 列2 | 列3 | 合計 |
| ---- | ---- | ---- | ---- | ---- |
| Rの人 | 12 | 23 | 65 | 100 |

それぞれの期待度は、
列1の期待度=100×0.1 = 10
列2の期待度=100×0.2 = 20
列3の期待度=100×0.7 = 70

よって、この時の$χ^2$検定統計量は
$χ^2 = \frac{(12-10)^2}{10} + \frac{(23-20)^2}{20} + \frac{(65-70)^2}{70}$

#### 1行
|  | 列1 | 列2 | 列3 | 合計 |
| ---- | ---- | ---- | ---- | ---- |
| A | 3 | 4 | 3 | 10 |

期待度数を求めるとき
10 / 3(列数) = 3.3333...

#### 2行
|  | 列1 | 列2 | 列3 | 合計 |
| ---- | ---- | ---- | ---- | ---- |
| A | 3 | 4 | 3 | 10 |
| B | 2 | 2 | 6 | 10 |
| 合計 | 5 | 6 | 9 | 20 |

列2の期待度数を求めるとき、
解１ ※AとBの度数が等しい時
(4 + 2) / 2 = 3
解２
6 * 10 / 20 = 3

## 回帰分析
### 残差平方和
$残差平方和 = $
$標準誤差^2 * (サンプル数(n)-説明変数(k)-1)$

### P値、F値の棄却
・P値が小さい(滅多にない確率)＝>棄却できる

・帰無仮説でF値(0.05とか)の基準よりF値が大きいと、
　P値(0.05)より小さい=>棄却できる。


### 平均平方
〇〇の平均平方 = 〇〇の平方和/自由度

### F値
F値 = 回帰の平均平方/残差の平均平方
F値 = $(標準偏差A)^2/(標準偏差B)^2$

### t検定量
$t = \frac{傾きの推定値}{標準誤差}$

## 自由度
### 水準数(変動要因)が明確な場合(一元配置分散分析)
| 水準(α) | 結果1 | 結果2 | 結果3 |
| ---- | ---- | ---- | ---- |
| A | 1.1 | 2.1 | 1.5 |
| B | 2.2 | 2.3 | 1.9 |
| C | 0.9 | 0.9 | 1.0 |

$α = 3$　※A, B, Cの３つ
$v_1 = α - 1 = 2$
$v_2 = n - α = 9 - 3 = 6$
よって、$自由度(v_1,v_2)=自由度(2,6)$

### (重)回帰分析の場合
$y = α_0 + β_1x_1+β_2x_2+e$とする。
・$v_1$を求める
サンプル数$k$＝説明変数$x_1, x_2$の２つ　※$β_1,β_2$は回帰係数
=> $k=2=v_1$  … ①

回帰の出力結果のうち、
「Residual standard error : 1.XXX on "20" degrees of freedom」と記載されている場合(F分布に従う場合)
この20が$自由度v_2$ ... ②
よって、①②より、「$自由度(v_1,v_2)=自由度(2,20)$」
※$v_2 = n - k = 20$となる。
この時、$n = 22$

記載されていない場合(t分布に従うとき)
自由度$n - k - 1 = $サンプルサイズ - 説明変数 - 1
※-1は切片α

## X-Yの確率計算
$P(X-Y) = P(W>=\frac{(X-Y)-μ}{\sqrt{2σ^2}})$
$※μはE[X-Y]=E[X]-E[Y]$
$※σはV[X-Y]=σ^2_x + σ^2_y-2Cov[X,Y]$
$　しかし、共分散が0、すなわちXとYが独立である場合は$
$　V[X-Y]=σ^2_x + σ^2_y　となる。$
$※共分散の式：Cov[X,Y]=E[XY]-E[X]E[Y]$
$　XとYが独立の場合は、右記のような関係となる。［E(XY) = E(X)E(Y)］$

## 相関係数
確率変数XとYが0の時、"XとYは独立である。"

## 正規近似
### 二項分布の正規近似
$Z = \frac{\hat{p}-p}{\sqrt{\frac{\hat{p}(1-{\hat{p}})}{n}}}$
※$\hat{p}は標本比率、pは母比率$
### 仮説検定の正規近似
$Z = \frac{\hat{r}-r}{\sqrt{\frac{r(1-{r})}{n}}}$
※$\hat{r}は標本比率、rは母比率(帰無仮説r=0.05, 対立仮説r>0.05など、仮説を立てた時)$
※なんでだろ...問題によって分母が異なる？

## 母平均の差の検定
### t検定
$t=\frac{\bar{x}-\bar{y}}{\sqrt{(\frac{1}{m} + \frac{1}{n})\frac{Σ(x_i-\bar{x})^2 + Σ(y_i-\bar{y})^2}{m+n-2}}}$

## 母比率の差の検定
$Z=\frac{\hat{r}_a-\hat{r}_b}{\sqrt{\frac{\hat{r}_a(1-\hat{r}_a)}{n_a}+\frac{\hat{r}_b(1-\hat{r}_b)}{n_b}}}$


## その他:Markdownの数式のやつ↓

https://oversleptabit.com/archives/5341
(ボツ記事。解決できたと思ってたけど違ってた).eslintrc.jsに「 'valid-jsdoc': 'warn', 」を追加したら、問題ないはずなのに「jsdoc syntax error」になる

# 状況
このようなjsdocがあったとしたら、ここ全体的に黄色の線が出て「jsdoc syntax error」と警告が出る。lintが通らない

```
/**
 * Hoge草メソッド
 *
 * @param {number} age - 年齢
 * @returns {Hoge} - hoge
 */
export const hoge = (
```

## 解決策
~~jsdocとメソッドとの間に1行空ける~~
(追記)↑これ、ルール握りつぶしてるだけだった。
もしルールを作ったのがリーダーならリーダーに確認して対応不要にするかルール削除するか

## 感想
~~は？？eslint絶対おかしくて草~~
(追記)俺がおかしくて草
chatgptさん、昨日食べたもの評価して


ある日の献立入力

```
#命令書
あなたは私の栄養士でプロの料理人です。
私が昨日食べた献立、朝食昼食夕食を評価項目もとに総合評価してください


＃私
40代
男

#昨日食べた献立

朝食
バナナ１本、コーヒー１杯

昼食
ラーメン１杯

夕食
ピザLサイズ、ポテト１人前、サラダ１人前


#評価項目
・バランスよく栄養を摂取できているか　
・1日あたり合計2700kcal以内のエネルギーを摂取できているか　
・ビタミンA、たんぱく質、炭水化物、食物繊維、鉄、カリウム、食塩は適量か
```


ある日の献立評価
```
40代の男性の昨日の食事を評価項目に基づいて総合評価します。

評価結果:

バランスよく栄養を摂取できているか:
昨日の食事は栄養バランスが不十分です。特に、野菜やタンパク質源が不足しています。

1日あたり合計2700kcal以内のエネルギーを摂取できているか:
具体的な食材の量によりますが、昨日の献立は合計2700kcal以内である可能性が高いです。

ビタミンA、たんぱく質、炭水化物、食物繊維、鉄、カリウム、食塩は適量か:
具体的な食材の量や調理方法によりますが、以下のような傾向が考えられます。

ビタミンA: バナナに含まれていますが、野菜の摂取量を増やす必要があります。
たんぱく質: ラーメンには少量のたんぱく質が含まれていますが、昼食と夕食にタンパク質源（例：肉や魚、豆類）を追加する必要があります。
炭水化物: バナナ、ラーメン、ピザ、ポテトに含まれていますが、バランスを考えて野菜やタンパク質を摂取するようにしましょう。
食物繊維: 野菜や果物に含まれていますが、野菜の量を増やすとより良いでしょう。
鉄: 鉄は赤身の肉やレバー、豆類に多く含まれています。昨日の食事には鉄源が限られているため、バランスの取れた食事に改善するとよいでしょう。
カリウム: 野菜や果物、ジャガイモに含まれていますが、バランスの取れた食事が重要です。
食塩: ラーメン、ピザ、ポテトには多くの食塩が含まれています。塩分摂取を控えるように心がけましょう。

総合評価:

昨日の食事は栄養バランスが不十分で、野菜やタンパク質源が不足していることが確認できます。健康的な食生活を維持するためには、バランスの取れた食事を心がけ、必要な栄養素を十分に摂取するようにしてください。以下は改善のための提案です：

改善提案:

朝食にはバナナだけでなく、野菜やタンパク質源（卵やヨーグルト、ハムなど）を加えることで栄養バランスが良くなります。
昼食のラーメンには野菜や具材を追加するか、サイドサラダを添えるなどして栄養価をアップさせましょう。
夕食のピザとポテトは加工食品で塩分や脂質が多いため、野菜やタンパク質を主体としたバランスの取れたメニューに変えることでより健康的な食事になります。
健康な食生活を維持するために、バランスの取れた食事を心がけ、必要な栄養素を十分に摂取するようにして
```


ある日の献立入力　夕飯頑張って作った日
```
#命令書
あなたは私の栄養士でプロの料理人です。
私が昨日食べた献立、朝食昼食夕食を評価項目もとに総合評価してください


＃私
40代
男

#昨日食べた献立
朝食
バナナ１本、コーヒー１杯

昼食
ベーコン、マヨネーズ入りの惣菜パン１人前、コーヒー１杯

夕食|
そば（山菜、鯖缶入り）１人前、バンバンジーサラダ１人前、角煮１人前、卵１つ、ピーマン煮浸し１人前、ナス煮浸し１人前
パイナップル



#評価項目
・バランスよく栄養を摂取できているか　
・1日あたり合計2700kcal以内のエネルギーを摂取できているか　
・ビタミンA、たんぱく質、炭水化物、食物繊維、鉄、カリウム、食塩は適量か

```
評価


```
献立の評価項目に基づいて、昨日の食事を総合評価します。

バランスよく栄養を摂取できているか：
朝食はバナナとコーヒーのみで、栄養のバランスが考慮されているとは言い難いです。
昼食と夕食には様々な食材が含まれていますが、特に朝食のバランスが気になります。

1日あたり合計2700kcal以内のエネルギーを摂取できているか：
具体的な食品の分量がわからないため、正確なエネルギー摂取量を算出するのは難しいですが、
一般的な傾向として、昼食や夕食に多くの食材が含まれているため、
合計エネルギー摂取量が2700kcal以内である可能性は高いと考えられます。

ビタミンA、たんぱく質、炭水化物、食物繊維、鉄、カリウム、食塩は適量か：
ビタミンAは主にベーコンや卵、夕食の野菜に含まれているでしょう。たんぱく質はベーコン、角煮、卵などから摂取できます。
炭水化物は朝食のバナナ、昼食のパン、夕食のそばで摂取されていると考えられます。
食物繊維はバンバンジーサラダや野菜から摂れるでしょう。
鉄はベーコンやそば、野菜から、カリウムは野菜やバナナから摂取できると予想されます。
ただし、具体的な食品の量によって違いが生じるため、
適切な量を摂取できているかどうかは確定できません。

総合的に見ると、昨日の食事はある程度のバリエーションがあり、エネルギー摂取も適切な範囲内に収まっている可能性が高いですが、
朝食のバランスと栄養素の具体的な摂取量が不足している可能性があります。
日々の食事で栄養バランスを考え、さまざまな食材を取り入れることを意識すると良いでしょう。
また、個々の体調や活動量に応じて食事内容を調整することも重要です。
```


chatgptさんありがとう
windows10で1password8をインストール・アップデートできなくなった時の対応

# 結論

ウィルス対策ソフトを停止させると、1PasswordSetup-latest.exeでインストールできた。

# 詳細

windows10で1password8を使っていたら、アップデートがきたためアプリを再起動したところ
「1passwordはインストールを完了できなかったため、変更がロールバックされます」と表示され、アップデートできませんでした。

その後、アプリを削除して再度インストールしようとしたところ、同メッセージが表示され、1passowrdがインストールできなくなりました。
PCを再起動しても同様でした。

Microsoft Storeの1password, 1PasswordSetup-latest.exeも試しましたが、インストールできませんでした。

# 所感

1PasswordのサポートにGoogle翻訳使ってメール投げても、ちゃんとサポートしてくれました。
大変感謝です。

使っていたウィルス対策ソフトは`ESET Internet Security`です。
HTTPステータス 401 と 403の違い

# 概要

- 自分の中で401エラーと403エラーが「認証系のエラーでしょ」レベルの感覚だったのでこれはまずいと思い簡単にまとめてみる。

# 401ステータス

- [ご本家の仕様書](https://datatracker.ietf.org/doc/html/rfc7235#section-3.1)の内容を和訳して、一部抜粋してみた。

    ```
    リクエストに有効な認証情報がないため、 リクエストが適用されなかったことを示す。
    ```

- ようは「ログインしていないから君には見せられないよ」の状態

# 403ステータス

- [ご本家の仕様書](https://datatracker.ietf.org/doc/html/rfc7231#section-6.5.3)の内容を和訳して、一部抜粋してみた。

    ```
    サーバはリクエストを理解したが、それを認可することを拒否したことを示す。
    ```

- ようは「君がほしいリソースは存在しているよ。でもそのリソースを君に見せることはできないよ。」の状態
- リソースが存在することを秘匿したい場合404で代用する場合もあるっぽい。

# まとめ

- 401：ログインが必要だよ。ログインしてもう一回リクエストを送ってね。（未認証で認証が必要なパスにリクエストを送った。）
- 403：ログインしているかもだけど、このリソースの閲覧を君は許されてないよ。（認証後、他のユーザーが作ったリソースを閲覧しようとした。）

# 参考文献

https://developer.mozilla.org/ja/docs/Web/HTTP/Status/401

https://datatracker.ietf.org/doc/html/rfc7235#section-3.1
Javaの文字列の学習をしてみた（後編）

# 概要
Javaの文字列の学習をしてみました。以下のページを参考にしました。

文字列の先頭と末尾から空白文字を取り除く(String.trim,String.strip)

https://www.javadrive.jp/start/string/index8.html

文字列に含まれる文字を大文字または小文字に変換する(String.toUpperCase、String.toLowerCase)

https://www.javadrive.jp/start/string/index14.html

文字列の最後に別の文字列を連結する(String.concat)

https://www.javadrive.jp/start/string/index15.html

文字列の一部を別の文字や文字列に置換する(String.replace)

https://www.javadrive.jp/start/string/index16.html

指定した区切り文字で複数の文字列を連結し新しい文字列を作成する(String.join)

https://www.javadrive.jp/start/string/index17.html

文字列の中で指定した文字または文字列が出現するインデックスを取得する(String.indexOf,String.lastIndexOf)

https://www.javadrive.jp/start/string/index18.html

文字列全体が正規表現パターンとマッチするか調べる(String.matches)

https://www.javadrive.jp/start/string/index19.html

文字列を正規表現パターンを使って分割する(String.split)

https://www.javadrive.jp/start/string/index20.html

文字列の中の正規表現パターンとマッチする部分を置換する(String.replaceFirst,String.replaceAll)

https://www.javadrive.jp/start/string/index21.html

# まとめ
何かの役に立てばと。
GithubのPrivateとPublicの切替

自分用メモ

<h2>PrivateからPublicへ切り替え</h2>
リポジトリページ → Settings → General → Danger Zone → Change repository visibility → Change to public　<br>
↓<br>
I want to make this repository public<br>
↓<br>
I have read and understand these effects<br>
↓<br>
ユーザー名/リポジトリ名やスターの数など指定されたものを入力して、
Make this repository public<br>
↓<br>
切替完了！

<h2>PublicからPrivateへ切り替え</h2>
上と同じ手順
AWS ECRのイメージタグ付けを簡単に行う方法

# はじめに
ECRのイメージタグ付けを、Lambdaで簡単に行う手順です。

ECRのイメージタグは、マネジメントコンソールから編集できず、不便な場合があります。
CLIで設定出来るのですが、お手軽に設定できるようにしました。

# やりたいこと

### ECRのリポジトリ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155165/65b6756c-2cbc-5785-9c67-9de5330184bd.png)
このようにリリースしてみたが、前のバージョンに戻したい、releaseタグを前のバージョンに付け替えたいときなどに、本ツールが使えます。

これは一例で、後からタグをつけたい場合や、タグを整理したい場合などにも使えます。

# 準備
Lambda関数を準備します。詳細は割愛します。Lambdaのスペックは最弱でOKです。
## IAMポリシー
```json
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "ecr:BatchGetImage",
                "ecr:PutImage"
            ],
            "Resource": "arn:aws:ecr:*:<AWSアカウント>:repository/*"
        }
    ]
}
```
## Lambda関数
```python
import json
import boto3

# タグを付与するリポジトリ名とイメージのダイジェストを設定する
repo_name='xxxxxxxxx'
image_digest='sha256:xxxxxx'
# 付与するタグ
new_tag='release'

client = boto3.client('ecr')

def lambda_handler(event, context):
    response = client.batch_get_image(
        repositoryName=repo_name,
        imageIds=[
            {
                'imageDigest': image_digest,
            },
        ],
    )
    # print(response)
    if 'images' not in response or len(response.get('images')) < 1:
        return {'statusCode': 400 }

    response = client.put_image(
        repositoryName=repo_name,
        imageTag=new_tag,
        imageManifest=response.get('images')[0].get('imageManifest')
    )
    print(response)
    
    return {'statusCode': 200 }
```

# 変更手順
### タグをつけたいイメージの、リポジトリ名、ダイジェストを控えます。
ECRのリポジトリでダイジェストをコピーします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155165/066f81e8-33a0-156e-0931-08890801fb63.png)

### Lambda関数の更新
Lambda関数を開いて、5行目、6行目、8行目を書き換えます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155165/42b2fca1-cef1-7c05-f053-0da246e7f050.png)

### Lambda関数のテスト実行
関数を保存（Deploy）、テスト実行をします。


### ECR リポジトリ
ECRリポジトリのイメージタグが書き換わりました！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155165/a301ece3-8d60-0cea-345d-1a240ba64609.png)

# おわりに
誰でも簡単にタグを付け替えられるようにしました。Lambda便利です！
オブジェクトの配列からunion型をつくる

前回オブジェクトからのunion型を投稿した。

https://qiita.com/mayognaise/items/6f68ef48773f28c4d375

では、オブジェクト配列からのunion型の場合は？
`keyof` `typeof` に加えて、 `[number]` を使う。

https://gist.github.com/mayognaise/32b945b91442b0cc5bea721195aaa12a

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/77626/20e37e86-6f7f-7247-5561-6b69ffbeaae7.png" width="360" />
<br />
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/77626/d0bd112a-7826-bc10-7d8b-0ddd9dfbe841.png" width="400" />
<br />
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/77626/8d87b75b-4f12-513e-c1b5-788b56fb0d1a.png" width="300" />

便利ですね。
初心者がAIチャレンジやってみた（7）：障害物回避モジュールを追加したい

# 概要
「初心者がAI Challengeやってみた」シリーズの第7弾です。
前回はAutoware-Miniのlaunchファイルを使い、最小構成のAutowareを使ってみました。
今回はAutowareとは別の障害物回避モジュールをAutowareに組み込んで使うことを目標に作業をしましたが、かなり苦戦してまだ実装ができていません。一応やったことを記録として残しておきます（もし何かアドバイス等あれば大歓迎です！）

===
本シリーズでは[Japan Automotive AI Challenge 2023](https://www.jsae.or.jp/jaaic/)にautoware初心者の筆者が試行錯誤しながら挑戦する記録を公開しています。自動運転に興味があるけどプログラミングに自信が無い方などの参考になれば幸いです。

前の記事はこちら：
* 第1弾：[初心者がAIチャレンジやってみた(1)](https://qiita.com/h_bog/items/86fba5b94b2148c4d9da)：Autowareを動かしてみる
* 第2弾：[初心者がAIチャレンジやってみた(2)](https://qiita.com/h_bog/items/a36df3042a342bd2a0c5)：1つ目の障害物の回避成功
* 第3弾：[初心者がAIチャレンジやってみた(3)](https://qiita.com/h_bog/items/849a4241cdef257f3b3a)：2つ目の障害物の回避成功
* 第4弾：[初心者がAIチャレンジやってみた(4)](https://qiita.com/h_bog/items/8bce776fef0a39676c46)：全障害物回避達成！（全パラメータ公開）
* 第5弾：[初心者がAIチャレンジやってみた(5)](https://qiita.com/h_bog/items/4ed94ef6256ac5ae9c03)：開発環境の再構築（番外編）
* 第6弾：[初心者がAIチャレンジやってみた(6)](https://qiita.com/h_bog/items/075543f30f9b3432fa1d)：Autoware-Miniを使ってみる

:::note warn
筆者はautoware初心者です。
説明等が正確でない可能性があるので本記事だけではなく他の記事や[autowareのドキュメント](https://qiita.com/h_bog/items/075543f30f9b3432fa1d)も確認するようにしてください。
:::

# 障害物回避モジュール
自作をするという選択肢もあったのですが、ちょっと大変なのでGitHubとかに載っているものを今回は使ってみます。

経路生成については以下のGitHubに色々な手法のPython実装が載っています。
これらを使う場合はROSで使えるようにコードを変える必要がありそうです。

https://github.com/AtsushiSakai/PythonRobotics

今回はState Lattice Plannerという経路生成の手法を使ってみたいと思います（特に深い理由はありません）。
State Lattice PlannerをROS2で使えるか調べたところ、Navigation 2というものを見つけました。
ROSにあったNavigation StackのROS2バージョンのようなものらしく、経路生成に限らずロボットのセンシングや制御、可視化ツールなど様々なものが実装されているそうです。

こちらの[Smac State Lattice Planner](https://navigation.ros.org/configuration/packages/smac/configuring-smac-lattice.html)を使うことにします。

https://navigation.ros.org/index.html

## Navigation 2 の動作確認
早速ここから詰まりました。
インストールをしてlaunchファイルを実行するだけの単純な作業なのですが、私の環境で実行をするとコストマップが生成されずに、経路も生成されないという謎の現象が発生してしまいます。
Warningを見ると"No map received"と書いてあるのですが、調べても解決方法が分かりませんでした。
チュートリアルを通して動作の確認だったりをしたかったのですが、残念ながらできなかったです…
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3483805/bcfc569e-2f88-1239-5d5d-aeca6f5cf6fa.png)

## とりあえず進めてみる
コストマップが表示されないのはnavigation機能とは関係ないと考えて、とりあえずautowareに組み込めるかを試してみる。

[公式サイト](https://automotiveaichallenge.github.io/aichallenge2023-sim/customize/index.html#how-to-customize-and-use-autoware-packages)のこの部分を参考にしてみる。
多分`aichallenge_submit`フォルダ内にコードを置いていいということ？だと思うのでそうしてみる。

まずはNavigation2をgit cloneする。
```
git clone https://github.com/ros-planning/navigation2.git
```
クローンした`navigation2`というフォルダを`aichallenge_submit`の中にコピー。

```
Rockerコンテナ内
cd /aichallenge
bash build.sh
# ここで色々とエラーが出るのでsudo apt installとかする
# nav2_XX packageはすでに存在するみたいなエラーが出たのでそのフォルダを削除
```
正直上記でやっていることが正しいかが分からないのであまり真似をしないほうが良いかもしれないです。
色々とやってみましたがビルドは成功しませんでした。

# 今後の予定
今後の予定としては引き続き経路生成モジュールの導入を目指してがんばります。
もしかしたらNavigation2以外のものを入れることになるかもしれないです。
Autoware-Miniになってモジュールの機能が分かりやすくなった（？）とはいえ、やはりある程度ROSやAutowareの知識がないと難しいですね…
【2023年】2週間でAWS認定ソリューションアーキテクトアソシエイトに合格した話

## はじめに

記事をご覧いただきありがとうございます。

本記事では、[AWS認定ソリューションアーキテクトアソシエイト(SAA)](https://aws.amazon.com/jp/certification/certified-solutions-architect-associate/)の合格体験談についてお話します。

※なお、本記事や試験に関する情報は2023/4/19時点(受験時点)のものですので、試験概要は常に最新の情報を参考にしてください。

## 対象者

本記事は以下のような方を対象としています。

- AWS初学者の方
- AWSの資格をまだ持っていない方
- IT系資格を取りたい方

## 私について
経験
- 開発経験：ほとんどない。(3ヶ月くらい開発案件に入ってた経験あり)
- AWS経験：Cloud9やCloudFormationは触ったことある
- 保有資格：基本情報技術者試験(約1年前に合格)、AWS認定クラウドプラクティショナー(通称CLF、SAA試験合格の約3ヶ月前に合格)

SAA受験のきっかけ
- CLF合格後、AWSにより興味を持ったため
- 2023/4/20〜21のAWS Summitにおいて、認定資格を持っていると認定者ラウンジに入れると聞いたため（認定者ラウンジという響きに惹かれましたｗ）


## AWS認定ソリューションアーキテクトアソシエイト試験とは？
試験概要
- 試験時間：130分
- 問題数：65問（択一か複数の選択式）
- 合格点:720~ (1000点満点)

試験の詳細については以下のPDFを参考にしてください。

[AWS Certified Solutions Architect – Associate(SAA-C03) 試験ガイド](https://d1.awsstatic.com/ja_JP/training-and-certification/docs-sa-assoc/AWS-Certified-Solutions-Architect-Associate_Exam-Guide.pdf)

## 試験直前までの流れ
### 最初にやったこと
1. 出題範囲や試験時間など、試験内容をざっくり確認
    - 公式のドキュメントも読みましたが、主にQiitaなどの記事を参考にしました。
2. 試験の申し込み
    - 学習を始める前に申し込むことで、背水の陣に
    - 私は、4/5にピアソンVUEで申し込んで、4/19に試験でした
    - オンライン試験ではなく、CLFの時と同じくテストセンターでの試験を選択しました

### 学習の方針
- Udemy ＋ サービスについて解説してくれているサイト
    - Udemy：[【SAA-C03版】AWS 認定ソリューションアーキテクト アソシエイト模擬試験問題集（6回分390問）](https://www.udemy.com/course/aws-knan/)（「高難易度の模擬試験」はやってません）
    - サイト：Udemyの問題集で登場した各種サービスやキーワードについてググる
- とにかく問題を解くことで試験に慣れる。
    - CLFの試験の学習時の反省として、講義動画の視聴がメインになると受け身の学習になってしまい、思ったより頭に残ってないと実感したので、今回の学習は試験問題から入りました。
- 仕事のスキマ時間や就業後の時間を利用して、1日あたり模擬試験約1.5回分くらいは解いてました。


## 試験当日
平日の夕方に受験だったため、就業後急いで試験会場であるテストセンターに移動。

試験会場に到着し、受付を済ませると、下敷きみたいなメモ用のホワイトボードとペンを渡されて、試験を受けるPCが設置されている部屋に案内されました。いざ、試験開始！

問題ごとに、後で見直し用のチェックを入れたり、飛ばしたりすることもできるので、解ける問題から回答していきました。(肌感ですが、問題の半分くらいは自信を持って解答できました。)

CLFの試験の時はかなり時間が余っていましたが、今回は全部の問題を解き終わって見直しもしたら、試験時間が残り5分くらいでした。

ちなみに、CLFの試験の時は試験終了時のPCの画面に(合格か否かの)試験結果が表示されていたのですが、SAAの試験ではその結果は表示されませんでした。

## 試験後
試験翌日の18時頃にはスコアレポートを確認できました。結果は...759点！
![SAA_Result.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3506277/6e9f5d63-d9d4-a2ba-f951-f34d365b8482.png)

短い期間でギリギリの合格でしたが、模擬試験を何周もした甲斐がありました。



## 最後に
今回、2週間で無事SAA試験に合格できましたが、試験を通しての気づきを共有します。
- AWSを使用する実案件で登場するシステムのアーキテクチャの「大雑把な」理解ができるようになった😀
    - 試験問題で取り扱われる状況や推奨されるサービスなどは、実案件でも意識する必要があるので、試験問題を理解するだけでも実案件できっと役に立ちます。
- 実際のコンソール画面をイメージできていなかった😢
    - 今回の学習では、ほとんどAWSのコンソール画面を操作しながら学習したわけではないので、実案件でリソースの作成や設定は別途学ぶ必要があります。もし、実案件等を見据えての試験であれば、コンソール画面は都度触ったほうが後々役に立つ気がします。

## おまけ
試験の翌々日4/21に、SAA受験のきっかけでもあったAWS Summitの認定者ラウンジへ向かうことに。私の場合、1日目は仕事の都合で参戦できなかったので、2日目の午後から参戦！！

認定者ラウンジでは、資格保有者同士で談笑したりしていましたが、受付では保有資格ごとにステッカーの配布を行っていました。

しかし、ここで問題が...
受付にて、SAA合格を証明するデジタルバッジを受付の方に提示したのですが、なんと、もうステッカーがないとのこと...
残念😞

なので、CLFのステッカーだけもらいました。

ちなみに、12個あるAWSの資格をすべて保有していると、Tシャツがもらえるみたいです。コンプリート目指してみようかなｗ
UITableViewとUITableViewCellについて

# はじめに
配列でデータをリスト化するように画面配置したいときに使用するUITableViewですが、一緒にUITableViewCellも設定する必要があり、どういう役割の違いがあるか調べてみました。

# UITableViewとUITableViewCellとは
・UITableViewは1つの表示する項目をセルという。
・このセルを使用するには、UITableViewCellを使用する。
・さらに、TableViewを使用するためには「delegate」「datasource」という機能を使用する必要がある。

#実際の使い方
①　Main.storyboardから「UITableView」を配置
②　同様に「UITableViewCell」を画面に配置
③　Main.storyboardからdataSource、delegateを設定

「View Controller」のボタンまでcontrolボタンを押しながらドラッグ
![スクリーンショット 2023-07-26 15.53.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3485517/a54889ee-2bc9-f905-2128-b8aed7ef886b.png)

以下の通り、黒いポップアップが表示されるので、「dataSource」と「delegate」を選択
![スクリーンショット 2023-07-26 15.55.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3485517/12f16de9-adb9-df1f-50f2-d66cdc02063b.png)

「Table View Cell」を選択してideatifierという項目からセルの名称を指定
![スクリーンショット 2023-07-26 15.57.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3485517/43ada446-e297-503b-1942-1c6a779333e2.png)

今回は「HomeTweetCell」と命名

# 実装方法
TableViewに情報を表示するためにViewController.swiftを編集する。

TableViewをcontrolを押しながらTable Viewを選択し、ViewController.swiftへドラッグ。ポップアップ画面のNameに「TableView」と入力し、connectを押す。
![スクリーンショット 2023-07-26 16.51.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3485517/463ab369-20c3-84c9-f6a7-5971ec90d095.png)

ViewController.swiftに以下のようにTable Viewの情報が追加される。
```
@IBOutlet weak var TableView: UITableView!
```

TableViewのDatasourceとDelegateを使用するため、extensionで以下のように追加。
```
extension HomeViewController: UITableViewDelegate, UITableViewDataSource {
}
```

この中にUITableViewDelegateとUITableViewDataSourceメソッドを追加。
```
    /// データの数（＝セルの数）を返すメソッド
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 0
    }
    
    /// 各セルの内容を返すメソッド
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        return UITableViewCell()

```
これで、UITableViewによるデフォルトUITableViewCellができます。あとは、UITableViewに表示させたい内容のコードをここをベースに書いていくだけです。

# まとめ
今回UITableViewとUITableViewCellの意味と実際の使い方についてまとめてみました。ご参考になればと思います。
・UITableViewは1つの表示する項目をセルのことをいう。
・このセルを使用するには、UITableViewCellを使用する。
・TableViewを使用するためには「delegate」「datasource」という機能を使用する必要がある。
SPSS ModelerからAzure SQL Databaseに接続する

SPSS Modeler18.4からAzure SQL Databaseに接続します。

* テスト環境
    * Windows 11 64bit
    * Modeler 18.4
    * Microsoft ODBC Driver 17.1 for SQL Server

# ODBCドライバーの確認

以下で確認します。Microsoft ODBC Driver 17 for SQL Serverがサポートされています。

https://www.ibm.com/software/reports/compatibility/clarity-reports/report/html/softwareReqsForProduct?deliverableId=0E1C00D07E5C11EC93C02AA4DE91E682&osPlatforms=Linux|Mac%20OS|Windows&duComponentIds=D001|S002&mandatoryCapIds=13&optionalCapIds=7|47|22|72|186|223

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/97591250-6859-01c5-dbc8-e3ec8746d448.png)

# ODBC接続
ODBCのドライバー導入と接続設定は以下の手順で行います。

ODBCでAzureAD認証のAzure SQL Databaseに接続する - Qiita 

https://qiita.com/kawada2017/items/0ac0da40ca97c5693c1b

# Modelerからの接続
データベースインポートノードで「新規データベース接続の追加」を選びます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/0f0e8d0d-70c3-fc0b-03f0-2a95bc02112b.png)

データソースで設定したデータソースを選び、ユーザーとパスワードを入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/486f20ee-36eb-355a-5524-697a752c7dbe.png)


接続ができたら、OKで閉じます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/26f88ffa-5e29-f202-7f9e-825e652a049f.png)


テーブル名を指定し、「プレビュー」します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/cb646dc3-2ff3-08ff-6f50-6e6721e48c8c.png)


参照できました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223763/b3201de6-74fd-9c22-e39c-579434751273.png)
wslのtensorflowでkerasのbackend その3

# 概要
wslのtensorflowでkerasのbackendを試す。
練習問題、やってみた。

# 練習問題
九九を書け。

# サンプルコード

```
from tensorflow.python.keras import backend as K

kuku = []
for i in range(1, 10):
	row = []
	for j in range(1, 10):
		row.append(i * j)
	kuku.append(row)
kvar = K.variable(value = kuku)
print (K.eval(kvar))


```

# 実行結果

```

[[ 1.  2.  3.  4.  5.  6.  7.  8.  9.]
 [ 2.  4.  6.  8. 10. 12. 14. 16. 18.]
 [ 3.  6.  9. 12. 15. 18. 21. 24. 27.]
 [ 4.  8. 12. 16. 20. 24. 28. 32. 36.]
 [ 5. 10. 15. 20. 25. 30. 35. 40. 45.]
 [ 6. 12. 18. 24. 30. 36. 42. 48. 54.]
 [ 7. 14. 21. 28. 35. 42. 49. 56. 63.]
 [ 8. 16. 24. 32. 40. 48. 56. 64. 72.]
 [ 9. 18. 27. 36. 45. 54. 63. 72. 81.]]
```

以上。
wslのtensorflowでkerasのbackend その2

# 概要
wslのtensorflowでkerasのbackendを試す。
練習問題、やってみた。

# 練習問題
fizzbuzzを書け。

# サンプルコード

```
from tensorflow.python.keras import backend as K

kvar = K.arange(1, 100, step = 1, dtype = 'int32')
fizzbuzz = K.constant("FizzBuzz", dtype = tf.string)
buzz = K.constant("Buzz", dtype = tf.string)
fizz = K.constant("Fizz", dtype = tf.string)

def func(x):
	return K.switch(tf.equal(tf.mod(x, 15), 0), fizzbuzz, 
				K.switch(tf.equal(tf.mod(x, 5), 0), buzz, 
					K.switch(tf.equal(tf.mod(x, 3), 0), fizz, 
						tf.as_string(x))))

map = K.map_fn(func, kvar, name = None, dtype = tf.string)
print (K.eval(map))
```

# 実行結果

```
[b'1' b'2' b'Fizz' b'4' b'Buzz' b'Fizz' b'7' b'8' b'Fizz' b'Buzz' b'11'
 b'Fizz' b'13' b'14' b'FizzBuzz' b'16' b'17' b'Fizz' b'19' b'Buzz' b'Fizz'
 b'22' b'23' b'Fizz' b'Buzz' b'26' b'Fizz' b'28' b'29' b'FizzBuzz' b'31'
 b'32' b'Fizz' b'34' b'Buzz' b'Fizz' b'37' b'38' b'Fizz' b'Buzz' b'41'
 b'Fizz' b'43' b'44' b'FizzBuzz' b'46' b'47' b'Fizz' b'49' b'Buzz' b'Fizz'
 b'52' b'53' b'Fizz' b'Buzz' b'56' b'Fizz' b'58' b'59' b'FizzBuzz' b'61'
 b'62' b'Fizz' b'64' b'Buzz' b'Fizz' b'67' b'68' b'Fizz' b'Buzz' b'71'
 b'Fizz' b'73' b'74' b'FizzBuzz' b'76' b'77' b'Fizz' b'79' b'Buzz' b'Fizz'
 b'82' b'83' b'Fizz' b'Buzz' b'86' b'Fizz' b'88' b'89' b'FizzBuzz' b'91'
 b'92' b'Fizz' b'94' b'Buzz' b'Fizz' b'97' b'98' b'Fizz']
```

以上。
CustomElementでSlotの変更がリロードで反映されない

# はじめに

CustomElementを作成したのですが、うまくいかなかったのでまとめます
地味に引っかかる人が多いのではないかと思います

# 問題

```html:index.html
  <body>
    <script src="./src/index.tsx" type="module"></script>
    <div>
      <sample-element>
        <span slot="test-msg"><div>テストメッセージ</div></span>
      </sample-element>
    </div>
  </body>
```

```ts:index.tsx
const SampleElement: FC = () => {
  return (
    <>
      <slot name="test-msg"></slot>
    </>
  );
};
```

これでテストメッセージという文字が表示されています

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/810513/28e09323-5f0a-ec02-328b-71ec6cedcdd4.png)


そこからテストメッセージの文字を変えます

```
        <span slot="test-msg"><div>テストメッセージ!!!</div></span>
```

しかし画面の文字は変わらず、リロードしてもハードリロードもだめでした

# 解決方法

Developer Toolsの`Network`が`Fast3G`になっていたのが問題でした

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/810513/8b661976-0e39-acb6-0ec0-f0d9359efaa5.png)

`No throttling`にすることで更新されるようになりました

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/810513/dd0bd862-a8f0-d939-7b2e-a9a27d9096f8.png)


# おわりに

たしかにスロットリングと書いてあるのでなにか関係しているみたいです
初心者がServerspecのサンプルについて調べてみた

# はじめに
AWSのCloudFormationで構築した環境をServerspecでテストをする予定です。
そのために、まずは公式サイトのサンプルについて調べてみたので、簡単にまとめました。

# Serverspecとは
Serverspecは、サーバーが正しく構成されているかをテストできるツールです。
Rubyで実装されています。
詳細は公式サイトを参照ください。

https://serverspec.org/

# Serverspecのサンプルについて調べる
## サンプル
先ほどの公式サイトにサンプルが載っています。
抜粋した内容が下記になります。

```
require 'spec_helper'

describe package('httpd'), :if => os[:family] == 'redhat' do
  it { should be_installed }
end
```

## 調べたこと
```
require 'spec_helper'
```
サンプルで使用する外部ファイル'spec_helper'を読み込んでいます。
（'spec_helper'の詳細については割愛）

```
describe package('httpd'), :if => os[:family] == 'redhat' do
  it { should be_installed }
end
```
テストファイルの基本構造になります。
テストしたい内容を記載します。
詳細は公式サイトの「TUTORIAL」に記載されています。

https://serverspec.org/tutorial.html

`package('httpd')`はテストするリソースの種類を記載します。
サンプルは、httpdパッケージに関するテストになります。

`package`以外にも`port`や`command`などがあります。
詳細は公式サイトの「RESOURCE TYPES」に記載されています。

https://serverspec.org/resource_types.html

`it { should be_installed }`は期待する値を記載します。
サンプルはパッケージがインストールされていることを確認しています。

`be_installed`のことをmatcherと言い、「期待する値と実際の値を比較し、一致した（しなかった）という結果を返すオブジェクト」になります。
先ほどの「RESOURCE TYPES」にmatcherの例が記載されています。

# まとめ
Serverspecのサンプルについて調べた内容は以上になります。
何かみなさんの参考になれば嬉しいです。
《VBA｜Access》編集ロックボタンの設置・データのコピーは可能にする

## 概要
業務でAccessファイルを運用していて、不特定多数の社員がそのファイルを操作する場合があると思いますが、管理者以外がレコードを誤って削除したり変更したりしないように、必要なとき以外は『編集ロック』をしていた方が良いでしょう。
しかし、編集ロック中でも『データのコピーだけは行いたい』という要望もあるかと思います。
フォームに編集ロックボタンを設置し、ボタンクリックで編集ロックと解除を行うVBAコードと、ロック中でもレコードのコピーを可能とする方法を解説します。

## フォームへのボタン配置
フォームをデザインビューにして「フォームデザイン」タブからトグルボタンを選択してフォームのヘッダー部分に配置します。
フォームを開いたときには詳細部分は編集ロック状態にしますので、ボタンのプロパティで通常の背景色等はロック状態のものを設定し、クリック時の設定にはロック解除状態のものを設定しましょう。

## VBAコード
ボタンの書式の設定ができたら、プロパティの選択の種類で「フォーム」を選択し、「イベント」タブで上から２番めの「読み込み時」の「…」からコードビルダーを選択します。
「Form_Load」という関数ができているので、下記のようにコードを記述します。
```
'フォームを開いた時の処理：編集ロック
'詳細は全部ロックし、ヘッダー（メニュー）部分は選択的にロックする
Private Sub Form_Load()

    Dim C As Control
    
    'エラー処理、これが無いとうまく動かない
    '実行前のロック状況に関係なくエラー無視して処理する
    On Error Resume Next
    
    '詳細部分は一律編集ロックする、すでにロックしてあれば無視する
    For Each C In Me.Section(acDetail).Controls
        C.Locked = True
    Next C
        
    'ヘッダーの下記2つはロック解除
    Me.cmd_search.Enabled = True
    Me.cmd_new.Enabled = True
    
End Sub
```
エディターの保存ボタンでコードを保存したら、次はまたフォームのデザインビューに戻り、編集ロックボタンを選択した状態でプロパティのイベントタブ「クリック時」の「…」から「コードビルダー」を選択してください。
ボタンクリックの関数ができているので、下記のコードを記述します。
```
'ボタンクリックで「編集ロック」を解除し詳細部分のデータの変更・上書きを可能にする
Private Sub cmd_lock_Click()

    Dim C As Control
    
    'エラー処理、これが無いとうまく動かない
    '実行前のロック状況に関係なくエラー無視して処理する
    On Error Resume Next
    
    'トグルボタンが押されていれば実行：編集ロック解除処理
    If Me.cmd_lock.Value Then
        MsgBox "編集ロックを解除します"
        Me.cmd_lock.Caption = "編集ロック解除中"
    
        For Each C In Me.Section(acDetail).Controls
            C.Locked = False
        Next C
        
        
    'トグルボタンが押された状態から再度押されれば実行：編集ロック処理
    Else
        MsgBox "編集ロックモードにします"
        Me.cmd_lock.Caption = "編集ロック中"
        
        For Each C In Me.Section(acDetail).Controls
            C.Locked = True
        Next C
        
        'ヘッダーの下記2つはロック解除
        Me.cmd_search.Enabled = True
        Me.cmd_new.Enabled = True
       
    End If
    
End Sub
```
## 結果
トグルボタンは下記のように変化します。
#### 《編集ロック中》 
![ロック01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2885228/8fc76de1-8355-e912-54d1-71745a4a8036.png)
ロック状態でもレコードの情報をコピーすることは可能ですが、上書きや削除はできません。
#### 《編集ロック解除中》 
![ロック02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2885228/d667ad8e-1225-fdd1-e32b-810069190f04.png)
トグルボタンクリックでロック解除するとレコードの入力が可能になります。

`Me.［オブジェクト］.Locked = False`でロック解除、`True`でロックなので、新規レコードボタンのクリック時にはロック解除状態で新規レコードを開くようにすると良いでしょう。
mod_ext_filter: 未インストールと出たら・・・

# wordpressの管理画面で。。。

`mod_ext_filter`が未インストールになっている

![スクリーンショット 2023-07-26 16.23.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183059/a75fdc52-e8dd-f68f-5408-19195f7f21db.png)

# 環境

- docker で `wordpress:☓.☓-apache`のイメージを使っている
- プラグインで `W3 Total Cache`を使用

# Dockerfileでモジュールを有効化

Dockerfile で `ext_filter`を有効化するコマンド追加すると`インストール済み`になります。


```dockerfile
FROM wordpress:6.2-apache
RUN a2enmod ext_filter
```

![スクリーンショット 2023-07-26 16.27.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183059/5b355af2-e672-824d-fa13-5f07d10edcb2.png)
java.lang.ClassNotFoundException: javax.xml.bind.DatatypeConverterエラーがでる

# はじめに

ビルドをする際に突然エラーが出てしまったのでまとめていきます

# 問題

以下のエラーが発生するようになりました

```
Exception in thread "main" java.lang.ClassNotFoundException: javax.xml.bind.DatatypeConverter, compiling:(server.clj:1:1)
	at clojure.lang.Compiler$InvokeExpr.eval(Compiler.java:3700)
	at clojure.lang.Compiler.compile1(Compiler.java:7609)
	at clojure.lang.Compiler.compile1(Compiler.java:7599)
	at clojure.lang.Compiler.compile(Compiler.java:7676)
	at clojure.lang.RT.compile(RT.java:413)
	at clojure.lang.RT.load(RT.java:458)
	at clojure.lang.RT.load(RT.java:426)
Compilation failed: Subprocess failed (exit code: 1)
```

使っていたイメージのJVMのバージョンが上がったことで依存ライブラリに問題がおきています

# 解決方法

Java8で使っていた`java.xml.bind`は`DatatypeConverter`があったのですが、Java17に変わったことで、クラスがなくなり問題が起きていました

なので、別途依存関係に追加することで解決しました
今回はClojureだったので以下を追加しました

```clj:clj.project
:dependencies [[javax.xml.bind/jaxb-api "2.3.1"]
```

https://mvnrepository.com/artifact/javax.xml.bind/jaxb-api/2.3.1

# おわりに

知見があまりないところだったので、沼にはまらずに済んで良かったです。

# 参考

https://mvnrepository.com/artifact/javax.xml.bind/jaxb-api/2.3.1
allow_nil: trueとは

# はじめに
Ruby on Railsでは、データモデルのバリデーションを設定することが一般的です。その一部として、`allow_nil: true`というオプションが存在します。この記事では、`allow_nil: true`がどのように動作し、それがどのような状況で役立つのかを詳しく解説します。
### `allow_nil: true`の基本的な動作
`allow_nil: true`オプションは、指定した属性のバリデーションを行う際に使用されます。このオプションが設定されていると、属性の値がnilの場合にはバリデーションがスキップされます。つまり、その属性がnilでもバリデーションエラーにはならないのです。
### 例えば
Userモデルに`reset_password_token`属性属性が存在し、以下のようなバリデーションが設定されているとします。
```ruby:user.rb
validates :reset_password_token, uniqueness: true, allow_nil: true
```
いくつかのシナリオを見てみます。
①`reset_password_token`がnilの場合: `allow_nil: true`が適用され、　　`reset_password_token`のnil値は許容されます。バリデーションエラーは発生しません。

②`reset_password_token`が空文字（""）の場合：allow_nil: trueは適用されず、presence: trueによりバリデーションエラーが発生します。(空文字は String クラスのインスタンスで、 nil は NilClass のインスタンスだから)

③`reset_password_token`が実際の値を持つ場合：通常のpresence: trueバリデーションが適用され、バリデーションエラーは発生しません。

# allow_nil: trueとallow_blank: trueの違い
`allow_blank: true`も`allow_nil: true`と似ていますが、微妙に違います。`allow_blank: true`は、属性の値がnilまたは空白（""や" "など）の場合にバリデーションをスキップします。

# まとめ
allow_nil: trueは、バリデーションにおいて属性のnil値を許容するための有用なオプションです。しかし、使用する際はallow_blank: trueとの違いを理解し、それぞれのバリデーションがどのように動作するのかを正しく理解することが重要です。

# 参考文献
Rails APIドキュメンテーション: Active Record Validations
AZ-900 に合格した話と対策

AZ-900 に一発合格したので、合格に至るまでに実施したことや個人的に難しかったことを記録として残します。  

私は文系私立大出身で業界経験も浅く、ほどほどにITの知識はありつつ、ぼんやりクラウドの知識がある状態ですが、勉強時間は約1週間程度(50h程)で合格しました。
初心者の方でもしっかり時間をとれるなら2週間程度で**資格取得は**できると思います。

（資格を取れたことと仕事に生かせるかは別の問題です。たくさん手を動かして色んなもの作りましょう。私も作りたい。今度記事で何かかけるようなものを・・・）

下記内容は 2023年7月現在の情報です。
今後試験内容が改訂される可能性もあるので受験される際はお気を付けください。

# 目次
- [はじめに](#はじめに)
- [試験概要](#試験概要)
- [勉強方法](#勉強方法)
- [受けた感想](#受けた感想)


## 試験概要

【試験】AZ-900:Microsoft Azureの基礎(Microsoft Azure Fundamentals)
【受験料】 税込13,750円
【試験時間】45分
【問題数】 35問前後 (※私の時は33問でした)
【合格点】 700点(1000点満点)
【受験場所】試験センターもしくは自宅

【試験範囲】
　　・クラウドの概念について説明する (25–30%)
　　・Azure のアーキテクチャとサービスについて説明する (35–40%)
　　・Azure の管理とガバナンスについて説明する (30–35%)

## 勉強方法

### 1. **MS LearnのAZ-900 向けラーニングパスを完了する。**
**[MS LearnのAZ-900 ラーニングパス](https://learn.microsoft.com/ja-jp/certifications/exams/az-900/)** の下部にあるラーニングパスをすべて受講して理解してください。
`「準備する 2 つの方法」> [マイペースで進められる] > [このコレクション内の項目]`
![MSLearn.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3501284/23ad94c3-f697-5797-bef2-01e95c2db643.png)
* 感想
記載する勉強方法の中で一番時間をかけたところです。
個人的には日本語訳が少々変なところがあって気になってしまい、英語版と読み比べたりしたので無駄に時間がかかりました。流し読みできる方はざっくり読んで後述する問題集などを解いた方が効率がいいと思います。とはいえ、モジュール数自体は少なかろうが、各モジュール内で覚えることが多いし、未経験の方だったり私のようにちょっとかじった程度の方は記載されている目安時間の2倍くらいで見たほうがいいかと思います。どうしても書いてあることがわからなければその分野だけ他の人のQiita記事やブログを見て理解するといいです。
大事なのは時間がかかるかどうかより、理解ができるかどうかなので、気にせず自分のペースで勉強しましょう。

### 2. **試験対策セミナーの受講(無料)**
無料で提供されている[AZ-900 : Microsoft Azure Fundamentals 試験対策](https://info.microsoft.com/JA-HCSAzureHybridInfra-WBNR-FY21-02Feb-11-AZ900PrepSession-SRDEM61308_LP02OnDemandRegistration-ForminBody.html)を受講しました。
講義時間は194分、内容は試験問題を解きながら解説や回答のポイントを紹介してくれています。
また、**内容は2020年11月のものになっています**。
試験範囲が異なる部分もあるので飛ばし飛ばし見るのがいいでしょう。
**※登録が必要なので注意**

* 感想
出題内容および考え方などについてとても参考になりました。
ちょっと長いですが休み休みやりつつ、MSLearn で学んだこととの照らし合わせを行うとより理解が深まるかと思います。

### 3. **問題をひたすら解く(有料)**

無料でなくて申し訳ないですが問題を解かない事には中々自信が持てないので、私はここで少々課金しました。割引で2200円でしたが、同僚は1500円で買えたりなど、Udemy のセールタイミングを見計らえばそこまで損した感じはないと思います。
【使用した問題集】[最短で合格！Azure Fundamentals AZ-900 試験対策問題集](https://www.udemy.com/course/microsoft-azure-az900-exam/)

* 感想
ひたすら解いて見直して解いて見直して、ですね。
私は3周ほどして問題集の1-5 すべて100%の正答率を達成しました。
実際受けた試験の50%程度は同じ問題が出ていたので8割でも問題なく合格できると思います。


## 受けた感想

私は 850/1000点で合格しました。
900点を狙っていたのですが問題集に出なかったネットワーク系の問題・サービスや、Azure Portalの操作について結構聞かれてしまい穴を突かれた気分でした。(泣)
とはいえ、MSLearnでしっかりやった部分は答えられたので問題集だけに頼らず、MSLearnで出てきたサービス名について再度見直すことが大事かなと思います。

はじめに書きましたが、資格を取ること自体はそこまで難しくはないです。
(初心者・未経験者だと最初のMSLearnが一番しんどいとは思いますが・・・)
問題は資格を生かして仕事ができるか、なので、手を動かしてAZ-900レベルの環境はささっとできるようになるのが最低限、資格取得者です！とドヤ顔できるラインかな、と思うので引き続き頑張ります。

ここまで読んでいただきありがとうございました。
次回はDP-900 の資格取得に向けて勉強予定です。
データベースの知識はほぼゼロなので同じような方の参考になる記事が書ければと思います。
AWS 高度なネットワーク(ANS-C01)合格体験記

 # スペック

* AWS歴は8年ぐらい
* ソリューションアーキテクトプロフェッショナルは2023年1月に合格
* ネットワークスペシャリストに2023年6月に合格

# 背景

みなさんの記事とかをみるとAWS資格全制覇みたいな中で取得されていることが多いみたいでした、その中ではわりと特殊な考え方でとっているかな〜と思います。

1. SAPを勉強している中でDXとTGWなどネットワークのところがいまいちしっくりこない。。業務でもあまりやる機会がないので、あんまりコンソールの画面もしらないな〜と思い始める。ドキュメントを読むとBGPやらASやらの話がでてきて、、よくわからんなと思いながらやりすごす。
1. SAP合格してから自分のネットワーク知識があまりないなと思ったので、よりベーシックな内容を学び直そうと思い、ネットワークスペシャリストの資格取得を目指す。
1. 6月でネットワークスペシャリスト合格達成できたので、あらためてANS-C01合格目指そうという流れです。

ちなみにハイブリッドクラウドがこれから当分は主流なのかと思ってたりはするので、このあたりの知識は持っていると環境構成理解するのが楽になるかなと〜

# 勉強期間

7月月初から始めたのでだいたい3週間くらいです。

## 学習リソース

* 大体の受験者の方が利用してますが、[要点整理から攻略する『AWS認定 高度なネットワーキング-専門知識』](https://www.nri.com/jp/knowledge/book/lst/2022/o_book247)です。

これは資格を取得を目指してないかたでも一度、読んでみることをおすすめします。トランジットVPCの考え方やインターフェース型エンドポイントやゲートウェイ型エンドポイントの考え方などはAWSのネットワークを体系的に覚えるのにとてもよかったです。

* AWSのブラックベルトの動画はいろいろ見ました。AWS経験者の方でも以下は見てもいいと思います。
  * [【AWS Black Belt Online Seminar】AWS Direct Connect](https://www.youtube.com/watch?v=few0XD7gPgQ)
  * [【AWS Black Belt Online Seminar】AWS Transit Gateway](https://www.youtube.com/watch?v=Yhe2jYzFmfs)
  * [【AWS Black Belt Online Seminar】Gateway Load Balancer](https://www.youtube.com/watch?v=tiwgoSNvh3k&t=346s)

* 問題になれるという意味でudemyで2個ほど購入、海外サイトで１つ購入しました。
  * [AWS Advanced Networking - Specialty ANS-C01完全対応問題集 2023[日本語]](https://www.udemy.com/course/aws-advanced-networking-specialty-ans-c01-u/)
  * [[NEW] AWS Certified Advanced Networking Specialty 2023](https://www.udemy.com/course/aws-certified-advanced-networking-specialty-ans/)
  * [デジタルクラウド](https://digitalcloud.training/courses/aws-certified-advanced-networking-specialty-practice-exams/)


# スコアレポート

結構ギリギリでしたｗ

![スクリーンショット 2023-07-26 15.49.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/501815/3f503382-fe66-1704-1725-be7d943a89f6.png)


# 合格発表

公式には5営業日以内にスコアレポートが確認できるようになるよと試験終了後の画面にでますが、AWSから配布される認定バッジの[credly](https://www.credly.com/users/sign_in)でバッジの自動承認を設定しておくとおそらく合格した場合に限り4~5時間以内にバッジが追加されたメッセージがメールで通知されます。早く結果知りたい方は登録しておくといいかもしれません。

# 試験の感想

試験を受けてみた感想ですが、以下が長文問題で問われていた気がしてます。

* TGW周りの問題がおおい
* GLBを含めたファイアウォールアプライアンスのアーキテクチャについて

あとは、基本的な構成を理解すれば2択までには絞り込めるので、あとは詳細な内容まで覚えていられるかが勝負だったんだなと言う感じです。

# 最後に

この後、業務でちょうどよくGWLB+NFWの構成で構築作業がありそうなので、あ〜役にたつわ〜という感じです。
githubのSSHキー設定

# はじめに


こんにちは!!B4の黒田です!!
今回は，以下の構成で記事を書きます!!

**1. githubのSSHキー設定**

## 1. githubSSHキーの設定について
まずは，[下記の写真](https://github.com/)，右上のアイコンを押そう!!
![Screenshot from 2023-07-24 16-44-24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3305414/78e118f6-e68b-fbd8-8f1a-9d897938780b.png)
「Settings」⇒「Developer settings」⇒「Personal access tokens」⇒「Tokens(classic)
![Screenshot from 2023-07-24 17-04-49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3305414/3d63fb2e-a700-2bd0-c1b1-ff717a9ac1cf.png)
[上記の写真](https://github.com/settings/tokens)，「Generate new token」⇒「Generate new token(classic)」を選択．
[New personal acces token (classic)](https://github.com/settings/tokens/new)に移動．
Noteは，「ubuntu22.04PC」⇐適当に判別が付く名前を決定する．ubuntu?Windows?なのか
Expirationは，「No expiration」⇐お好みで．めんどくさいので期限なしにしてます．
Select scopesは，repoにチェックマーク．
上記３つを変更後，「Generate token」を選択．
パスワードが生成させるので，メモしてください．<font color="Red">パスワード超超超重要，これで完成!!</font>
【JavaScript】【Jquery】カンマ区切りの文字列を配列にする splitを使う

```javascript
process.stdin.resume();
process.stdin.setEncoding('utf8');

let str1 = '1,2,3';
console.log(String(str1).split(','));

let str2 = '1';
console.log(String(str2).split(','));

// ⇓数値型だとエラー
let str3 = 1;
console.log(str3.split(','));
```

結果
```javascript
[ '1', '2', '3' ]
[ '1' ]
エラー
```
gauge installでReason: Invalid plugin name or there's a network issue while fetching plugin details.エラーが出る

# はじめに

時々、gauge javaのバージョンを変えるのですが、自分の記事に書いていなかったので自分用にまとめます

# 問題

以下のエラーが発生します
理由は謎ですので、直接バージョンを変えていきます

```
$ gauge install java
Failed to install plugin 'java'.
Reason: Invalid plugin name or there's a network issue while fetching plugin details.
```
# 解決方法

以下からほしいバージョンを取得します (javaで今回はやります)

https://github.com/getgauge/gauge-java/releases

ダウンロードしたら解凍します

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/810513/f8b07b34-623e-ea06-fc6c-e6f198f55c72.png)

3つありました
これを必要な箇所に配置します(今回はjava`0.9.1`でやります)

```
$ cd ~/.gauge/plugins/java
$ mkdir 0.9.1 // your version
$ cd 0.9.1
$ xdg-open . // ディレクトリを開く
```

解答した`libs`、`gauge-java`、`java.json`をいれる

```
$ gauge -v
Gauge version: 1.4.3
Commit Hash: f98dd40

Plugins
-------
html-report (4.2.0)
java (0.9.1)
play-cdc (0.1.4)
python (0.3.17)
screenshot (0.1.0)
```
pythonで機械学習を勉強してみる1

# 環境の用意
https://www.anaconda.com/download
からpythonの実行環境をインストール

# インストール後
インストール後にターミナルプロンプト(PS1)に (base)という文字列が追加される
邪魔なので下記コマンドで削除
```
$ conda config --set changeps1 False
```

# 実行環境立ち上げ
実行環境である、jupyter notebookを立ち上げる
```
$ jupyter notebook
```

# テスト実行
pythonは簡単にグラフ描画ができるライブラリなどが充実している
立ち上がったjupyter notebookで新規PJを作成し、以下のテストコードで線グラフと棒グラフが描画されることを確認
```Python
import numpy as np
import matplotlib.pyplot as plt
np.random.seed(1)

x = np.arange(10)
y = np.random.randint(1, 1000, 10)

plt.plot(x, y)
plt.show()

x = np.array([1, 2, 3, 4, 5])
y = np.random.randint(1, 1000, 5)
plt.bar(x, y)
plt.show()
```

![スクリーンショット 2023-07-26 15.36.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/298813/994e5090-90d7-cbc8-19d8-3a0b27f59ad4.png)
初めて要件定義を担当した話


この度弊社[イマジテック](https://imagitech.io/)は自社サービスを新規開発することにしました。

新規開発とのことで最初にすべきことはもちろん
**要件定義です。**

本記事では上流工程の経験がない四年目エンジニアが
要件定義フェーズで得た知見、苦悩を工程に沿ってつらつらと書き記します。

# 目次

[1.要件のヒアリング](#1-要件のヒアリング)
[2.要件定義書作成で壁にぶつかる](#2-要件定義書作成で壁にぶつかる)
[3.非機能要件の山にぶつかる](#3-非機能要件の山にぶつかる)
[4.おわりに](#4-おわりに)
[5.予告](#5-予告)

# 1. 要件のヒアリング

本プロジェクトの初期案は弊社代表発なので、[代表](https://twitter.com/nakai_imagitech)からお話を伺いました。
サービスのイメージ、そのサービスを思いついた理由などなどを聞きました。

ヒアリングを通してイメージの共有ができました。

ここまでは特に問題なく進んでいたつもりでした。

# 2. 要件定義書作成で壁にぶつかる

サービス内容を把握したので次のステップ要件定義書に移ります。

「じゃあ着手するかー。」と思って進めようとするとあることに気づきます。

**要件定義書ってなに書くんだ？？？**

今まで要件定義書は「一番最初に作成する資料で、何を作るか、なぜ作るのか等々開発するサービスの概要を記載する資料」だと認識しておりヒアリング時もここを重点的に聞いていました。

あながち間違ってはいませんが、ひじょーーーーーーに具体性が欠けております。

なので実際に手を動かそうとした瞬間に手が止まりました。

「いやー。困ったなー。」という場面でベテランエンジニアの方から参考資料を提供いただき、こちらを参考に資料作成を進めます。
非常にわかりやすく参考になりました。ありがとうございます。

参考資料提供サイト：[Web担当者Forum](https://webtan.impress.co.jp/)
資料作成企業:[KINOTROPE](https://www.kinotrope.co.jp/)
参考資料：[2-5_ダウンロード資料_現状サイトコンテンツリスト](https://webtan.impress.co.jp/sites/default/files/images/beginner/beginner2021_2-7_09.pdf)


※本プロジェクトは「若手（自分）＆ベテラン」の体制で取り組んでおり、躓いてしまった場合助言をいただきます。

しかしまた壁、いや山にぶつかってしまうのです。

# 3. 非機能要件の山にぶつかる

参考資料を確認しながら作成を進めていると、とんでもないものが目に移りこんできました。

それは非機能要件です。

参考資料のどのような項目が記載されているかというと

>◼ 可用性
◼ 性能・拡張性
◼ 運用・保守性
◼ 移行性
◼ セキュリティ
◼ システム環境

いやー。

**まったく想定していなかった**

ここで要件定義書はどのような書類だと自分自身考えていたか振り返ってみます。
>要件定義書は「一番最初に作成する資料で、何を作るか、なぜ作るのか等々開発するサービスの概要を記載する資料」だと認識しており

このことからわかる通り、非機能要件のことは全く頭にありませんでした。

想定していなかったのはしょうがありません。
これから非機能要件の項目を記載していこう。
参考資料もあることだし、そう奮起し手を動かします。

しかし、、、

書けない。

なぜ書けないか「6.システム環境」を例を出してお話しします。

参考資料を確認するとシステム環境には下記の内容が記載されています。
- どのOSで動作するか
- そのOSのバージョンは何を想定するか
- どのブラウザを想定するか
- 解像度は？
- デバイスのスペックは？
- 回線速度は？

などなどが定められています。

理由はたった一つで、知識不足が挙げられます。

> - そのOSのバージョンは何を想定するか

各バージョンで何がどう違うのかが全くわかっていません。
当然調べればわかることではありますが、知識が全くないため調査に時間を費やしてしまいます。

例として挙げたのはほんの一部でほかにもたくさんあるわけです。
そうなると調査の時間がとんでもないことになってしまいます。

結果的には記載できる項目は埋め、調査が必要な部分は積み残しとして基本設計フェーズで決める方針にしました。
# 4. おわりに

何はともあれ要件定義フェーズは完遂しました。
この体験を経て得たことは下記3点です。

- 要件定義フェーズを一通り経験したことで要件定義の段階で確定させる箇所、記載の粒度を身に染みて知ることができた。
- 非機能要件ってめちゃめちゃ知識いるやん。
- (意外と記事書くの楽しい)

反省点として一部の非機能要件は基本設計フェーズで決めることになったことです。
要件定義書の認識が甘かったこともありますが、今後要件定義に携わる際はどのような項目を確定させるか頭に入った状態で進めることができるのでこれらを次に生かしたいと思います。

現在基本設計フェーズに移行していますが、基本設計が終わり次第また記事としてアウトプットするので、もし続きが気になる方はお待ちください。


# 5. 予告

次の記事は「基本設計を始めてすぐに起きた事件」についてまとめたいと思います。
8月11日金曜日に投稿予定です。
sendmail

sendmailしてもメールがとどかない
mailqコマンドで確認。OP25Bブロックされていることが分かる
```
E0DDD23518D2      276 Wed Jul 26 14:38:27  linuxstudy@xxxx.localdomain
(delivery temporarily suspended: connect to alt2.gmail-smtp-in.l.google.com[142.250.115.27]:25: Connection refused)
                  ???@gmail.com
```
会社の外で情報発信する意味

# 情報の洪水に飲まれそうな貴方へ
* 出勤したら未読メールの山
* SlackやTeamsの通知が鳴りやまない
* 「あれどうなってる」攻撃
* 「ちょっと教えて」攻撃
* 要領の得ない質問・相談・雑談・愚痴

程度はともかく、どの職場もこんな感じではないでしょうか。
こんな感じで忙殺されているからこそ、社外での情報発信が突破口になる、というか私自身が突破口にしたいと思っている、という記事です。
# 社内での発信に限定するリスク
**お仕事（例：PR担当・事務局）として情報発信している方**
**ボランティア（例：親睦会・有志・勉強会）として情報発信している方**

それぞれ持ち場立場があると思います。お疲れ様です。いつもありがとうございます。
ところが。不測の事態によって発信が継続不可能になることが極まれに良くあります。ありがちな例を列挙します。
* 体制変更の影響
    * 組織変更の巻き添えを喰って空中分解
    * 新しい上司が活動に理解を示さない
* 担当者個人都合の影響
    * 本業・別件に忙殺される
    * 理不尽な個人攻撃でダメージを受ける
* その他
    * 活動場所（サーバスペース、社内スペース）廃止
    * 自責ではない炎上に巻き込まれる

・・・「こんなこと」であなたの情報発信が途絶えてしまうの、勿体なくないです？

# なので社外でも発信をオススメしています
元は社内向けの情報だとしても、抽象度を上げたり個別事例に言及しなければ、一般的な内容としてまとめることは案外可能だったりします。
* こんなイベントをやりました。こんな学びがありました
* こんなイベントに参加しました。こんな学びがありました
* こんな問題が発生しました。こうやって対処しました
* 社内ではこうですが、一般的にはこうです
* 社内では言えませんが、個人的にはこうです

もちろん、社内の手続きやルールを守る事は大前提ですが、たとえば私のこの活動の場合、勤務先の情報は一切出していませんが、社内の一部では「あああいつか」と認知されているので、「もう一つの私」を表に出すことが出来ています。大本営発表以外に情報発信の窓口があることはリスクヘッジとしても精神の安寧としても効果があります。

# 自白
正直に白状します。上記の「自責ではない炎上に巻き込まれ」てしまいました。
「私は悪くない」と主張することには意味がないと思っているので
* 何故炎上を事前に検知できなかったのか（コミュニティ作りの問題）
* 発信する情報に誤解を招くような内容が無かったか（ポリシーの問題）
* 同様な問題が将来発生しないようにするにはどうすれば良いか（仕組みの問題）

を情報発信して、社内外を問わず参考にしていただけたらと思うのです。
main単体テスト(ホワイトボックス)

![main単体テスト_page-0001.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3519994/138e8f48-f5f3-c844-536a-25fda76c511f.jpeg)
![main単体テスト_page-0002.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3519994/d3e28ae3-eaec-cb48-d008-5209a48943f9.jpeg)
![main単体テスト_page-0003.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3519994/53e4ebb3-403c-a0d1-72b7-bd422045c9a9.jpeg)