OmniAICreator/Qiita-1.07M huggingface dataset:
[Vue.js] 子コンポーネント内の DOM の参照を取得する

## はじめに

たとえば以下のようなコンポーネントがあったとします。

```InputComponent.vue
<template>
  <input type="text" class="form-control">
</template>
```

今回はこのコンポーネントを利用する親コンポーネントから、コンポーネント内部の `input` タグへの参照を取得することを目指します。
親からフォーカスを当てたい時などに使えると思います。
**Vue** のバージョンは３系を前提とし、 **Composition API** を利用します。

## 親コンポーネント

まず親からどうやって使うかを考えてみます。
単純に子コンポーネントを `ref` で参照すると、残念ながらDOMではなくコンポーネントインスタンスへの参照になってしまいます。

```ParentComponent.vue
<template>
  <input-component ref="inputRef" />
</template>

<script lang="ts">
import { defineComponent, ref, onMounted } from 'vue'
import InputComponent from './components/InputComponent.vue'

export default defineComponent({
  components: {
    InputComponent,
  },
  setup() {
    const inputRef = ref<HTMLInputElement | undefined>()
    onMounted(() => {
      // HTMLInputElement ではなくコンポーネントインスタンスが取得される
      // 当然 focus メソッドなど存在しない
      console.log(inputRef.value)
    })
    return {
      inputRef
    }
  }
})
</script>
```

では子コンポーネントからどうやってデータ（DOM）を上げるかというと、 `v-model` (= `emit` )を利用します。
２系の場合は [sync 修飾子](https://jp.vuejs.org/v2/guide/components-custom-events.html#sync-%E4%BF%AE%E9%A3%BE%E5%AD%90) です。

```ParentComponent.vue
<template>
  <input-component v-model:inputRef="inputRef" />
</template>
```

これで子コンポーネントからDOMを取得する準備ができました。

## 子コンポーネント

子コンポーネントでは、 `ref` で取得したDOMの参照を `emit` を通して上げるだけです。

```InputComponent.vue
<template>
  <input type="text" class="form-control" ref="ref">
</template>

<script lang="ts">
import { defineComponent, computed } from 'vue'

export default defineComponent({
  props: {
    inputRef: {
      type: HTMLInputElement,
    },
  },
  setup(props, { emit }) {
    const ref = computed<HTMLInputElement | undefined>({
      get() {
        return props.inputRef
      },
      set(value) {
        emit('update:inputRef', value)
      }
    })

    return {
      ref
    }
  }
})
</script>
```

`ref` に `WritableComputed` を渡すのがポイントです。 `set` で `emit()` します。

## おわりに

親から子コンポーネント内部のDOMの参照を取得できるようになりました。
`id` を渡して `getElementById` を呼んだり、または子コンポーネントに `focus` メソッドを用意してコンポーネントインスタンスを直接参照する方法などもありますが、個人的にはこちらのほうがすっきりしてていいと思います。
**Atomic Design** などで設計する時の参考になれば。
OpenAPI定義されたAPIの脆弱性診断

脆弱性診断のやり方を軽く覚えたのでやってみた。
備忘録として記す。

## 環境

- API:.NETCore3.1
- OS: Windows
- ツール：OWASP ZAP 2.9.0

## 事前準備

- localで脆弱性診断を行うための設定を行う。
- 脆弱性診断対象のAPI立ち上げる。
- 脆弱性診断対象のAPIの定義ファイルを用意しておく。(私の場合Swaggerを導入してたので、Swagger.jsonを保存しておく)

### localhostをZAP経由にする

firefoxの場合、初期設定ではlocalhost通信はプロキシを通さない設定になっています。

- ブラウザを開き、URLにabout:config（警告は無視）
- 検索欄にnetwork.proxy.allow_hijacking_localhost
- 値をfalseからtrueに変更
- Firefoxの接続設定「プロキシーなしで接続」が空欄ではない場合、localhost、127.0.0.1を削除

## 診断

### 診断対象OpenAPI定義ファイルをimportする

[Import]タブ -> [import an OpenAPI definition from the local file system]

- FilePath：事前準備で保存したSwagger.jsonを選択
- Target URL：立ち上げたAPIのURL <https://localhost:XXXXX/>

[Import] -> Successfully parsed OpenAPI definition が出てきたらOK  

[サイト]タブをクリックして、対象サイトを右クリック。  
[コンテキストに含める] -> [New Context]  

新しくできたコンテキストを右クリックして[動的スキャン] -> [スキャンを開始] で診断。  

## 結果

アラートタブで結果を確認できます。
[mac]atomで情報処理学会のlatex環境構築

##結論
- まずこれで初期設定 
https://qiita.com/kurohune538/items/6c1e48f6380b87fd8161

- インストールして、UTF8フォルダにあるipsjtech.styとipsj.clsを自分のtexファイルと同じ階層に置く
https://www.ipsj.or.jp/journal/submit/style.html

- latexエンジンをplatexに
.NET 5でPublishSingleFileを指定してビルドしたアプリの実行ディレクトリ

# はじめに
[この記事](https://qiita.com/karuakun/items/aba6caf4cdf4684ea970)で`p:PublishSingleFile`をtrueで作ったときに気づいたのですが、.NET 5では自己完結型アプリケーションでビルドしたアプリを実行した場合に実行ディレクトリが.NET Core 3.1の時と異なる＆実行ファイルパスが`Assembly.GetExecutingAssembly().Location`では取得できませんでした。

この記事では.NET 5でPublishSingleFileを指定してビルドした自己完結型アプリケーションで、実行ディレクトリを取得する方法を確認します。

# 自己完結型アプリケーションの形式でアプリをビルドして、それぞれ実行する。
.NET 5および.NET Core 3.1のコンソールアプリケーションを作成し、それぞれメイン関数に下記のコードを記載します。

``` cs:Program.cs
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine($"Environment.Version={Environment.Version}");
            Console.WriteLine($"Assembly.GetExecutingAssembly().Location={Assembly.GetExecutingAssembly().Location}");
            Console.WriteLine($"AppContext.BaseDirectory={AppContext.BaseDirectory}");
            Console.WriteLine("Hello World!");
            Console.ReadLine();
        }
    }
```

それぞれのプロジェクトを下記のコマンドラインでアプリを自己完結型アプリケーションでビルドします。

```
dotnet publish -c Release -r win-x64 /p:PublishSingleFile=true /p:IncludeNativeLibrariesForSelfExtract=true
```

実行したファイルを`c:\temp`においてからダブルクリックで実行したら下記の結果になりました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36535/c99676d1-fb99-9b10-d0bd-e4f29e86bc45.png)

| ランタイム | Assembly.GetExecutingAssembly().Location | AppContext.BaseDirectory |
|-----------|-------------------------------------------|--------------------------------------------------|
| .NET 5    | 空                                        | C:\temp\sample\AppUsing5.exe |
.NET Core 3.1 | %LOCALAPPDATA%\Temp\.net\AppUsingCore3\dl4pjkfu.bol\AppUsingCore3.dll | C:\temp\sample\AppUsingCore3.exe |

# .NET 5で実行ファイルのパスを求めるには？
[単一ファイルの配置と実行可能ファイル](https://docs.microsoft.com/ja-jp/dotnet/core/deploying/single-file)にAPI の非互換性として、.NET 5で自己完結型アプリケーションでビルドした場合にAssembly.Locationでは空を返すとしっかり記載されていますね。また、`Assembly.GetFile`や`Assembly.CodeBase`では例外を返すとも記載されています。

実行ファイルのディレクトリを参照する場合は、[AppContext.BaseDirectory](https://docs.microsoft.com/ja-jp/dotnet/api/system.appcontext.basedirectory?view=net-5.0#System_AppContext_BaseDirectory)を使うのが正しいようです。

# 自己完結型アプリケーションの実行ディレクトリ
.NET 3.1ではZIP形式の自己完結型アプリケーションは、一度%LOCALAPPDATA%に展開された後に展開された場所からプログラムが起動されます。このため実行ディレクトリを参照する場合には`Assembly.GetExecutingAssembly().Location`などを確認する必要があったし、実行ファイルが存在するディレクトリを確認する場合は`AppContext.BaseDirectory`を使うなどの使い分けが必要でした。

.NET 5では一時ディレクトリに展開されず、アプリが配置された場所から直に実行されるようになります。

# まとめ
.NET 5になって実行パスの取得方法がわかりやすくなりましたね。
実行ファイルのパスの取得方法について、MSのドキュメントで触れられるのは初めてなんじゃないでしょうか
【2021令和最新版】バッファロー LUA4-U3-AGT Giga USB3.0対応 NIC を Macで使う

## ブラックフライデーセールでやすかったUSB3.0 to GbE NIC
安物のUSB-C to GbE NICが 1000Mbps でリックアップしてもしばらくすると
10Mbpsになるという謎の現象に悩まされたため、こちらの商品を購入しました。

BUFFALO 有線LANアダプター LUA4-U3-AGTE-NBK ブラック Giga USB3.0対応 簡易パッケージ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230921/adbbc8e6-51b2-92cd-fdcc-05896be97628.png)

https://amzn.to/39rZ9U0

## MacOS 12.1 使えてたのが使えなくなる(2021.12月追記)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230921/ea7dd17f-247a-1eef-ddb8-dbf71619d079.png)
意図せずアップデートが走り、気がついたら有線NICが見えず確認すると
デバイスは見えているものの、 `未接続` になっている。いそいそとWiFiをONにするが不安定。（環境の問題かもしれない）
同じ場所に１２に対応したドライバがありました `Apple macOS 12 Drivers Installer`
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230921/fd4389fe-c5ea-44f3-c871-7b7ec2e2e309.png)

## MacOS 12.2.1 (2022.3月追記)
またまた意識せず上げちゃったんですがそのまま問題なく使えています。

## MacOS 11.3.1 でもそのまま使えない（2021.5月追記)
BigSurにアップデートさせてもやっぱり使えませんでした。
ドライバーの名前が `Apple macOS 11 and above Drivers Installer` に変わっています。
(Beta)が取れているので、こっちを使ったほうがきっと良いですね。

## MacOS 10.14 ではそのまま使えなかった
諸事情により、Mojave環境のままのウチの環境ではそのまま使うことができませんでした。
（10.15以降でも使えないようですが）
調べてみると、 AX88179 というチップが使われており、これのドライバを入れればOKとのこと。

## 見つけた先の記事は古い
記事が古かったので、今さっきやったのをメモっておきます。

## ドライバのインストール先リンク
https://www.asix.com.tw/en/support/download

1. `Select File Category` で `Software & Tools` を選択し、 `Drivers` をクリック
2. `What product can we help you with?` で `USB Ethernet ICs` を選択
3. `AX88179 USB3.0 to 10/100/1000M Gigabit Ethernet Controller` を選択
4. `Apple macOS 10.9 to 11 Drivers Installer(Beta)` ファイルをダウンロード

これで、ドライバーのZIPファイルが落ちてきます。

## ドライバのインストール方法
こちらは、他の記事での方法と変わりません。
zip展開 -> dmgマウント -> インストーラを実行です。

インストールの途中で `User-Approved Kernel Extension Loading` のせいでダイアログが表示され
`セキュリティーとプライバシーを開く` をすると、 `AXISの許可` を求められているので許可します。

しかし、許可しても一向にインストーラは進みませんでした。

が、ドライバはインストールができたようでNICはきちんと `ネットワーク環境設定` からリンクアップを確認できました。
`アクティビティモニタ` で インストーラを強制終了させて完了です。

### BigSur正式対応版ではインストール方法が変わっている。
pkgを起動しようとしたら怒られました。 手動で`セキュリティとプライバシー` を確認すると
`開発元を確認できないため、使用がブロックされました。` とでています。ので自己責任で `このまま開く` をしました。

次に、`アプリケーション` から `ASIX_USB_Device_App` を起動し `Activate`します。
このとき、ドライバーのインストール同様に 実行許可が求められますので、 同様に許可して再起動します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230921/d1055b07-dc2d-1993-7798-0c4902686287.png)

再起動後、`ネットワーク`で接続できていることを確認できました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/230921/9adcad57-935d-34fe-a31b-2afbe2293b25.png)
画像の縦横比率を維持してcssでコーデイング方法

この記事はHTML5&CSS3の初学者が記載しておりますので、内容が基礎的なものになります。
既にご存知の方も多いかと思われますが、初学者のアウトプットという位置付けで
ご覧頂けますと幸いです。

## 課題
スクール課題に着手している時に、模写サイトの画像通りに表示されるように`width`と`height`を使用したが、何故か模写サイト通りに画像が表示されずに、間延びして表示されたり潰れてしまったりしてしまう。

## 解決方法
`object-fit: cover;`を使用すると解決！！

```css:例
img {
  object-fit: cover;
}
```

※私の場合は上記をVS Code上の模写サイトと同じ画像を指定している部分のCSSに記載しております。

宜しければ、ご活用くださいm(_ _)m
Nizi ProjectみたいにキューブがもらえるQA社員～キテクダサーイ～ 

### はじめに
***
NiziU　正式デビューおめでとうございます！
Nizi Projectから彼女たちの成長する過程を見てきたので感慨深いです。

メンバーの素晴らしさ以上に、プロデューサーのJ.Y. Park氏の人の見極め方に感銘を受けました。各人の強みと弱みを的確な言葉で伝える。神です。評価の基準、伝え方はマネジメントを行う上ですごく勉強になりました。

Nizi Projectといえば評価基準クリアの証としてもらえる、「ダンス」「ボーカル」「スター性」「人柄」から構成される4個の「キューブ」。そのキューブを獲得するための汗と涙の過程です。
![キューブ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/541100/494b6760-44e2-45c5-4aff-211d102d6662.png)
画像参照(https://niziu.com/s/n123/?ima=5416)

そこで、私ならこういう人にキューブをあげたい（＝市場価値が高いQA社員）と思える要素をまとめようと思います。ここでは、Nizi Projectにならい4つのキューブ（スキル）にわけてお話します。

Nizi Projectとは
韓国と日本の大手音楽会社による共同ガールズグループプロジェクト。日本国内8都市（札幌、仙台、東京、名古屋、大阪、広島、福岡、沖縄）、ハワイ、LAを含む全10箇所でグローバル･オーディションを開催、プロデューサーであるJ.Y. Park氏のもと、数回のステージ審査を経て最終デビューメンバーが決まるという構成。
その審査の中で登場するのがキューブ。「ダンス」「ボーカル」「スター性」「人柄」の4つあり、それぞれのスキルが秀でている人がもらえる。最終的にすべてのキューブを獲得しデビューを目指す。
参考元[Wikipedia](https://ja.wikipedia.org/wiki/Nizi_Project)

###<font color="Gold">客観力キューブ</font>
***
必要なスキルの一つ目は**「客観力」** です。

QA社員は開発チームの一員として業務を行います。弊社は席も開発チーム内に設けており、物理的に近い状態で作業をしております。コミュニケーションがしやすい環境なので意思疎通は早いというメリットがある反面、悪い意味で開発チームの一員となりがちです。例として、以下のような会話が発生したとします。

- 「テスト期間に実装間に合わないからあとで確認する」
- 「この本番障害ってランク下げていい？」

※このやりとりは想像です
ここでQA社員も同意していたらキューブはもらえません。
間に合うことを第一目的にしたり、チームの評価を落とさないようにすることを目的として、本来の目的を見失うことがあります。このような場合でもQA社員は第三者として良い悪いの判断をする必要があります。

時には冷静になって判断をする、そんなQA社員。「キテクダサーイ」

###<font color="Green">提案力キューブ</font> 
***
必要なスキルの二つ目は**「提案力」**です 。

QA社員は全施策のQAスケジュールを管理したり、テストケース作成のために仕様を確認をしたり、動作確認を行うので、開発チームのメンバーよりも全体スケジュールの把握、仕様の把握をしていることが多いです。
QA社員からぜひ以下のような提案をしてみましょう。

| 背景 |提案内容|
|:-----------|:------------|
| 既存仕様に影響する変更|「影響範囲が大きいので、実装スケジュールは伸ばしませんか？」|
| 問い合わせ状況を無視した仕様追加|「この仕様はお客さまが求めている内容ではないです、お問い合わせからも〇〇の機能も求めています」|
| 機能性の不備|「この機能は〇〇の使い勝手が悪いです、〇〇のように変更しませんか？」|

一番ユーザーに近い立場にいるにも関わらず、当たり前品質だけみているQA社員にはキューブもらえません。

魅力的品質をあげるために行動するQA社員。「キテクダサーイ」


### <font color="Red">調整力キューブ</font>
***
必要なスキルの三つ目は**「調整力」**です 。
QA社員は、プランナー、デザイナー、エンジニア、CS、マーケ、LQA、外部検証会社など
関係者が多岐にわたるので、考えをまとめて最適解をだすQA社員はキューブがもらえます。

最適解をだすためには、自分の頭で考え（思考力）、自分で何が正しいか判断する（判断力）、自分で自分の考えを伝える（表現力）により、***自分なりの意見***を持つ必要があります。

自分なりの意見には客観的な事実を用いて会話をしましょう。QA費用、障害件数など定量データは相手が納得しやすい情報です。

日々データを注視しながら各チームとの調整を行えるQA社員。「キテクダサーイ」


### <font color="Blue">挑戦力キューブ</font>
***
必要なスキルの四つ目は***「挑戦力」です。***

QA社員は業務がルーティン化されてくると、現状の業務のあり方に慣れてしまい、新しい取り組みをしない傾向が増えてくると感じています。「どうせ」、「だけど」、やる前にやらない理由を言う社員にはキューブはもらえません。また、誰かに言われて行動することや、必要に迫られてやることも、***「主体性がない」***と受け取られます。重要なことは自分が起点として動いているかです。

やったことがない事に挑戦することはパワーがいるし、嫌う人が多いことは事実です。とりあえずやってみようという気持ちが大事です。失敗しても、「どこがダメだったのか」失敗した理由を明らかにして、次の行動に活かす。

失敗を自分にとってプラスの材料にかえるQA社員。「キテクダサーイ」


### まとめ
***
>***「才能に恵まれているのは本当に素晴らしいことです。しかし、それを発揮できないのは本当に残念なことです。才能が夢を叶えてくれるのではありません。過程が結果を作って、態度が成果を生むからです」***

J.Y. Park氏の言葉です。
今回記載したスキルはすぐ身につくというわけではありません。能力や才能などの問題ではなく、日々の積み重ねが良くも悪くも結果となり、自分がどのように努力したかという過程が大切です。

現状に満足することなく、みなさまもキューブがもらえるように、日々成長していきましょう。
そして自分の上司に言ってもらいましょう。


***「キテクダサーイ」***
農業に使われているICT技術

今現代農業は高齢化と若者離れが深刻化しています。

そのため労働力が不足しています。

その問題を解決するためにICT技術を活用した「スマート農業」の導入が進んでいます。

私は今回農業にどのようなICT技術が使われているのか調べてみました。

#スマート農業とは
そもそもスマート農業とはなんなのかというと

**ロボット技術やICT等の先端技術を活用し、超省力化や高品質生産等を可能にする新たな農業**

と農林水産省より定義されています。

また、スマート農業の導入の目的は
1.農作業の省力化・労力軽減

2.農業技術の継承

3.食料自給率の向上

以上の３項目が主な目的とされています。

##実際に使われている技術

**ビッグデータ×農業**

センサー等で計測して集めたビッグデータを解析することによって効率的に栽培管理する取り組みが進められている。
さらに、気象データなどのビッグデータを解析することによって栽培でのリスクを予測も可能になる。

**人工知能×農業**

人工知能は新規農業者に向けて技術や知識をシステム化して提供することに活用できる。これにより、農業従事者を増やし、人材不足の解決につなげられる。

すでに、作物の形状や色から成長度合いを解析し、収穫時期を予測・判断するプログラムなどが開発され、実用化されている例もある。

###感想

今回調べてみて、現代農業にICT技術を導入することで問題の解決につなげられると感じました。
また今後どのような技術が開発されていくのか気になりました。
自分でも何かアイデアを考えてみたいと思いました。

####参考サイト
Qittahttps:(//www.google.com/search?q=農業に使われているIT技術&oq=農業に使われているIT技術&aqs=chrome..69i57.19164j0j8&client=tablet-android-huawei-rev1&sourceid=chrome-mobile&ie=UTF-8)
Rustで自己参照構造体を作る

この記事は[Rust2 Advent Calendar 2020](https://qiita.com/advent-calendar/2020/rust2)の4日目です。

## 目的
Rustで、実体(String)と、その参照(&str)を同居させた構造体を作りたいのです。目的のためにはunsafeも厭わないのです。割とハマると思うので残すのです。

## 結論
```rust
pub struct Parsed {
    _src: String,     // １．初期化後は変更されない
    a: &'static str,  // ２．ライフタイム追跡対象外
}

impl Parsed{
    /// 物凄く重い処理が走るnew関数（だと思って。。。）
    pub fn new(src: String) -> Self {
        let a = src.as_str();      // ３．src借用
        let a = unsafe {           // ４．unsafe
            std::mem::transmute(a) // ５．型変換＆借用外し
        };
        Self {
            _src: src,
            a: a,
        }
    }
    pub fn a(&self) -> &str {
        self.a
    }
}
```

## 所有文字列への参照を構造体に保持する
ある文字列をnew関数内で解析して、その結果文字列`a:&str`を構造体に保持することを考えます。

さて、`a`は`src`を参照しているわけですから、`a`だけを単独で取り出すわけにはいきません。そこで、`Parsed`構造体には目的の`a`とともに、`_src`として元文字列を所有させ、ライフタイムを一致させようとしました。

構造体作成後に構造体の変更を禁止すれば、`a`を参照することに問題は無いはずです。

## 問題：借用チェッカー激おこ
C++なら何も悩まずそのまま実装出来ますが、Rustではunsafeを使わずに実現することは不可能です。`new`関数ですが、unsafe部分を外すとこう書けます。

```rust
    pub fn new(src: String) -> Self {
        let a = src.as_str();
        Self {
            _src: src,
            a: a,
        }
    }
```

しかし……

```
error[E0505]: cannot move out of `src` because it is borrowed
  --> src/lib.rs:11:19
   |
9  |         let a = src.as_str();      // ３．src借用
   |                 ------------
   |                 |
   |                 borrow of `src` occurs here
   |                 argument requires that `src` is borrowed for `'static`
10 |         Self {
11 |             _src: src,
   |                   ^^^ move out of `src` occurs here
```

`src`は`a`に借用されています。一方で最後に構造体を作ろうとして'src'をSelfにmoveしようとしますが、これは借用が残っているため認められません。

> 実際には`'static`関連でもう一つエラーが出ます。

つまり、普通の手段で自己参照構造体を作ることはできません。

## 解決：unsafeで借用外し
そこで`unsafe`の出番です。

```rust
    pub fn new(src: String) -> Self {
        let a = src.as_str();      // ３．src借用
        let a = unsafe {           // ４．unsafe
            std::mem::transmute(a) // ５．型変換＆借用外し
        };
        Self {
            _src: src,
            a: a,
        }
    }
}
```

`std::mem::transmute(a)`により、「srcの借用を外す」「Self::aの型(&'static str)に合わせる」の２つを実現しています。`_src`は外部からアクセスされないため変更されません。これで`Parsed::a()`へのアクセスが壊れないことを保証できました！

## 考察

### `'static`って、dropは大丈夫？ ⇒大丈夫
`'static`はプログラムが終了するまで存在するライフタイムと説明されています。そうすると`'static`宣言した部分はdropされないのか？などと不安になり挙動を調べました。結果は大丈夫。`'static`宣言があろうが、親構造体に含まれる子であることには変わりないため、親のdropに連動して子要素はdropされました。

### もうちょいスマートな方法は？　⇒知りたい……
unsafeは外せないでしょうが、`std::mem::transmute`はヤバすぎです。もうチョイスマートな型変換が出来そうな気がします。もしくは何とかするcrateがありそうな気がします。

またはそのうちRustが進化して、この手の自己参照を良い感じに解釈してくれるようになることを期待します。

## 謝辞
Q&A「[Rustで実体とその参照を同居させた構造体を作る方法](https://qiita.com/ekicyou/questions/5565f93fe8d8d890130a#answer-b74a14bf6bda003c3e5a)」にて親身になって回答してくださった方々に感謝します。
「クラスは設計図である」という説明に違和感を覚えた話

#「クラスは設計図」に違和感がある
##その説明を見て違和感を覚えた
よく、オブジェクト指向の説明で**「クラスは設計図であり、インスタンスが物である」**という説明がされています。私も初めはそれで理解していましたが、いろいろと学んでいくうちに「少し違うのでは」と思ったので、少しまとめてみようと思います。

##発端は「静的クラス」の説明
静的、Staticなクラス(フィールドやメソッドなどのメンバも同じ)について**「インスタンス化しないで使用できる(する)クラス」**という説明を見た時「え、設計図のまま使えるってどういうこと？」と違和感を覚えませんでしたか？
私は「まぁ、実際そうだし、そう覚えるか」と、腑に落ちないままにしていました。

##クラスはインスタンス作成プログラム
よくよく考えれば当たり前で、クラスもプログラムとして実行時にメモリに展開されます。 つまり、クラスとは**「newボタンしか無いインスタンス作成プログラム」**と理解した方が、より実態に即した理解の仕方ではないかと思います。
newボタンを押すと、中でガタガタとコンストラクタが動き、ポン！と自分と同じ形をしたインスタンス(ただしコンストラクタは無い)が出てくる。そんな機械のような気がします。
そう考えると、コンストラクタが何故「クラスと同じ名前」なのかを、newを付けるとクラス名と同じそのメソッドを呼びだすルールと考えると、なるほどと理解できないでしょうか？
ちなみにVBでは、コンストラクタは「New」という名前のメソッドですが、同じように理解できます。

##静的クラス
静的クラスは「インスタンス化しないで使用できる」のではなく、逆に**「インスタンス化できない」**クラス、つまり「newボタンが無く、メソッドのボタンが並んでいる」ので、そのまま使うしかないクラス(プログラム)と考えられるのではないでしょうか？

##静的メンバ(フィールド／メソッド)
クラスの一部、フィールドやメソッドが静的であることは「静的メンバは、インスタンス化時にインスタンスにコピーされない、生成機に取り残される」と捉えることができます。
そのため、静的メンバはインスタンスの中に無いので自分自身を表す「this」は付けられないなども理解しやすいのではないでしょうか。

##おわりに
本来なら、メモリ管理方法と合わせて説明すると良いのでしょうが、私自身も「クラスがどこに展開されているか」を、具体的に説明できないので諦めました。(言語によってまちまちな気がします)
Oracle Database Client を Oracle Universal Installer でアンインストールする

自分のOracle Database Client アンインストール手順を紹介させていただきます。

＜ここでの端末環境＞
端末OS：Windows 10 Pro 1909
Oracle Client：Oracle Database Client 19c  ( WINDOWS.X64_193000_client )
Oracleホーム名：OraClient19Home1
Oracle Client のインストール・タイプ：管理者

＜アンインストール手順＞
01)Oracle Universal Installer を起動します。
02)Oracle Universal Installerの[ようこそ]画面で
　 [製品のアンインストール]ボタンをクリックします。
03)[インベントリ]画面でアンインストールするOracleホーム名（ここでは
　 OraClient19Home1）を展開し、下層のOracleソフトウェアを選択して
　 [削除]ボタンをクリックします。
![OraClient_un01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/916141/c99d4f63-e1bb-e0c6-cf35-81d23d1bc5ca.png)
04)[確認]画面で[はい]ボタンをクリックします。
05)ソフトウェアの削除完了後、アンインストールするOracleホーム名のない
　 [インベントリ]画面が表示されますので、[空のホームを表示します。]をONにし、
　 空の（Oracleソフトウェア削除が完了した）Oracleホーム名を表示します。
06)アンインストールするOracleホーム名を選択し[削除]ボタンをクリックします。
![OraClient_un02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/916141/c7ae9ca7-0b88-17f5-bb28-03a992125655.png)
　　　※「空のホーム」の削除でレジストリやC:\Program Files\Oracle下から
　　　　情報が削除されるようです。

07)[確認]画面で[はい]ボタンをクリックします。
08)[インベントリ]画面で[閉じる]ボタンをクリックします。
09)[ようこそ]画面で[取消]ボタンをクリックします。
10)[終了]画面で[はい]ボタンをクリックします。
11)端末を再起動します。
12)残っているフォルダを削除（またはリネーム）します。
　　　※自分の場合、Oraclホームディレクトリは削除し
　　　　OracleベースディレクトリやC:\Program Files\Oracleは
　　　　削除していません。

以上でアンインストールは終了です。

＜補足＞
・Oracle Client 11gR2なども同様の手順でアンインストールできます。
・Oracle Database Client 19.3 ではインストール時に作成されるサービス
　「OracleRemExecServiceV2」が残るようです。
React Native (Expo) で黄色いワーニングを非表示にしたい (v0.63以降)

## console.disableYellowBox = trueは非推奨になった

調べるとよく出てくるのは`console.disableYellowBox = true`ですが、

TypeScriptに`Use LogBox.ignoreAllLogs(disable) instead`と怒られます。

## v0.63からLogBoxがデフォルトで導入

公式サイトをみるとデバッグ機能が強化されたLogBoxがデフォルトで導入されたようです。

[Announcing React Native 0.63 with LogBox](https://reactnative.dev/blog/2020/07/06/version-0.63)

## LogBox.ignoreAllLogs()を代わりに使う

```App.tsx
import { LogBox } from 'react-native';

LogBox.ignoreAllLogs()
```

これで怒られずにワーニングが非表示に出来るようになります。
開発中は鬱陶しい時も多いので上手く使いましょう。
ServiceNow - フォーム内容が変更された場合は入力フィールを必須にする

#概要
フォームの内容に変更がある場合は入力フィールを必須にする。例えば、変更された場合は理由を記述されるとか。

#スクリプト（onSubmitスクリプト）

```
function onSubmit() {
    if (g_form.modified) {  // 変更があるかのチェック
        g_form.setMandatory('reason', true);  // フィールドreasonを必須にする
        return false;
    }
}
```

以上
flake8の使い方とオプション

# falke8とは？

Pythonのコードチェッカーツール（ライブラリ）です。

https://flake8.pycqa.org/en/latest/


flake8を使うことで、Pythonコードの問題点を簡単に、そして効率的に見つけることができます。

例えば、pep8に準拠していないcodeやunused codeなどがあった場合、flake8によるチェックを行うことで、「どのファイルの」「何行目が」「どのような違反を犯しているか」を示してくれます。

project rootで実行すれば、そのprojectにpep違反を犯しているファイルがあるかどうかを一目でチェックすることができます。

なお、flake8自体は下記ライブラリのラッパーだそうです。

- PyFlakes（pyflakes : コードのエラーチェック）
- pycodestyle（pycodestyle : PEP8に準拠しているかチェック）
- Ned Batchelder’s McCabe script（mccabe : 循環的複雑度のチェック）　


# flake8の導入

flake8の導入は簡単です。
pipでinstallすればOKです。

以下のコマンドを実行しましょう。

```bash
pip install flake8
```

# flake8によるチェック実行

flake8の実行はコマンドを実行するだけです。
以下のコマンドを実行すると、実行したディレクトリの配下を再帰的にチェックしてくれます。

```bash
$ flake8
```

なお、ファイルパスを指定することで、特定のファイルのみをチェックすることもできます。

```bash
$ flake8 <対象ファイルへのパス>
```

### --ignore
このオプションをつけることで、特定のerrorを無視します。

```bash
$ flake8 --ignore E402
```

複数のerrorを指定するときは、','で渡しましょう。

```bash
$ flake8 main.py --ignore E402 E403
```

### --exclude

このオプションをつけることで、特定のフォルダをチェック対象外にします。

```bash
$ flake8 --exclude tests
```

### --per-file-ignores

このオプションをつけることで、特定のファイルのみ特定のerrorを無視します。

```bash
$ flake8 --per-file-ignores sample.py:E402
```

### --max-line-length

このオプションをつけることで、1行あたりの最大文字数を指定する

```bash
$ flake8 --max-line-length 100
```

pep8では1行の長さを79文字以下にすることを推奨しています。
flake8ではこのチェックも行なっているのですが、可読性のためにこの制約が邪魔になる時もあるでしょう。
そのような時は、このオプションをつけることで1行あたりの最大文字数を変更できます。

### --statistics

このオプションをつけることで、最後に統計情報を出すことができます。

```bash
$ flake8 --statistics
```

# flake8の警告一覧

[公式を参照](https://flake8.pycqa.org/en/2.6.0/warnings.html)


# まとめ

flake8を使うことで、python codeの質を担保できます。
導入、使用が簡単なので、使いやすいのも嬉しいですね。
【Swift】基本的な型の紹介〜数値型〜

#代表的な型とその表現
swiftにはさまざまな型が存在します。
型とは、値の特性と値の操作を表現したものです。

基本的なよく使う型は下記の6個になります。

**Int型**：整数を表現し、整数を操作するための四則演算などの機能を持っている。
**Double型・Float型**：浮動小数点数を表す、またInt型と同じく計算の機能を持っている。
**String型**：文字列を表現し、基本的な文字列操作の機能を持っている。
**Bool型**：真偽値を表現する。
**Optional型**：全てに関連する型として、値があるか空なのかのいずれかを表す。
**Any型**：任意の値を表す。

今回は、この中のInt型ついて記載します。

##数値型
数値に関する型を数値型と言ったりするらしいので、まとめさせていただきます。

数値型は大きく分類すると、整数型と浮動小数点型の2つに分けることができます。

###・ 整数型
整数型はその名の通り整数を表す型で、ビット数によって様々な型に分けられます。
その中でも**代表的な整数型はInt型**になります。

ビット数とは二進数の一桁のことです。
16ビットなら、0110101000010100 のように、０もしくは１が16個続いているというイメージだと思います。
コンピュータは、膨大な量の０と１を読み解き動いているんです・・・。恐ろしい！

Int型のビット数は32ビットのプラットフォーム上では32ビット、
64ビットのプラットフォーム上で64ビットとなります。

Int型の他に、固定ビット数の整数型が存在し、
**Int8型**、**Int16型**、**Int32型**、**Int64型**が存在します。
それぞれのビット数は型についている数字がビット数になります。

それぞれの整数型には扱える整数の幅が存在します。
Int8型：-128 ~ 127
Int16型：-32,768 ~ 32,767
Int32型：-2,147,483,648 ~ 2,147,483,647
Int64型：-9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807

これらの値を超える整数を代入してしまうとコンパイルエラーが発生します。

```swift

let a: Int8   // -128 ~ 127
a = 1000   // コンパイルエラー
```

エラー内容：Integer literal '1000' overflows when stored into 'Int8'
和訳：整数リテラル「1000」は「Int8」に格納されるとオーバーフローします

今回は、Int8をInt16などにすればコンパイルエラーは出ません。

もしかして、Int16とかの許容範囲を覚えなきゃいけないの・・・？ と思うかもしれませんが、
**基本的にはInt型を使えば大丈夫かなと思います！**

ただ、Int32型なども、使う機会があると思うので、型の存在だけでも覚えておいて損はないかなと思いました。

###・ 浮動小数点型
浮動小数点型は浮動小数点方式で小数を表す数値型です。

浮動小数点方式とは、ビットを桁の並びを表す仮装部と小数点の位置を表す小数部の2つに分け、
これらを掛けて少数を表す方式だそうです。

正直よくわからない！(笑)

浮動小数点型 = 小数という認識でいいと思います！
つまり、DoubleもFloatも小数を扱う数値型ということですね。

DoubleとFloat どちらを使えばいいのだろうと思うところですが、

Float型はおよそ**10の38乗**の正負の値まで表すことができ、
Double型はおよそ**10の308乗**の正負の値まで表すことができます。

さらに、表現できる値の範囲だけでなく、**値の精度も大きく異なります。**

Double型は最小でも15桁の精度を持ちますが、
Float型は最小で6桁の精度しか持ちません。

つまりどういうことかというと、

```swift

let a: Double = 12345678.9   // 12345678.9
let b: Float = 12345678.9   // 1.234568e+07
```

というようになります。
Float型の方は、1.2345678 × 10の7乗ということですね。
Floatで何回も計算をすると、どんどん値の誤差が大きくなってきます。

なので、使うとしたらDouble型一択なのかな？と思いますが、**そういうわけでもありません。**

例えば、端末の画面上の座標に使用されるCGFloat型は、
32ビットのプラットフォーム上ではではFloat型、
64ビットのプラットフォーム上ではではDouble型になります。

一方で、地球上の座標を表す型などでは、より高い精度が求められるので、
どのプラットフォームでもDouble型が使用されるらしいです。


##数値型どうしの変換

swiftでは、異なる型どうしの計算や代入が出来ません。
それは、同じ整数型や浮動小数点型でも同様です。

```swift

let a: Int = 123
let b: Int64 = a   //コンパイルエラー

let c: Float = 1.23
let d: Double = c   //コンパイルエラー
```

数値型を他の数値型に変換するにはイニシャライザを使いキャストします。
各数値型には、他の数値型の値から自動に型を生成するイニシャライザが用意されており、
これらを使用することで数値型どうしの変換が行えます。

```swift

let a: Int = 123
let b: Int64 = Int64(a)   // 123

let c: Float = 1.23
let d: Double = Double(c)   // 1.23
```

また、変換したい型よりも高い精度の型から代入すると、変換した型の精度に合わせて処理が実行されます。

```swift

let a: Float = 1.23
let b: Int = Int(a)   // 1

let c: Double = 1.23456789
let d: Float = Float(c)   // 1.234568
```

##数値型の比較

数値型には比較演算という、数値型どうしを比較する演算が存在します。

```swift

// == : 左辺と右辺が一致する
123 == 456   //false

// != : 左辺と右辺が一致しない
123 != 456   //true

// > : 左辺が右辺より大きい
123 > 456    //false

// >= : 左辺が右辺以上
123 >= 456   //false

// < : 左辺が右辺より小さい
123 < 456    //true

// <= : 左辺が右辺以下
123 <= 456   //true
```

比較演算も計算と同じで型が一致していないと
コンパイルエラーになりますので注意してください。

比較演算はif文で使用しますので覚えておいて損はしないと思います。

以上、ありがとうございました！
json をcsv変換できる無料枠有のオンラインコンバーター

#オンライン変換サービス

完全無料や一部無料、上限有の無料だがサクッと使えてそれっぽい形に変換できた物です

##JSON to CSV Converter
https://json-csv.com/

##Convert JSON to CSV
https://www.convertcsv.com/json-to-csv.htm

##JSON to CSV converter online
https://json-csv-xls.com/

##Convert JSON to CSV
https://toolslick.com/conversion/data/json-to-csv

これら以外にも存在しましたが、日本語が文字化けしたり、変換後の形が余りにも横に長かったり、そもそも動かない物などもあります。
紹介した物でも、物凄く横長になる物がありましたが、データが綺麗に変換できたり、高速動作する物もありましたので
データに依存する部分もあるという事で、お勧めサービスとして紹介します。
ServiceNow - n個の添付ファイルを必須にする

#概要
1つの添付ファイルを必須にすることはServiceNowの標準機能で行うことが可能。しかし、添付ファイル2個を必須にする場合は標準機能では行えない。
既に公開されている手順はあるが、DOM操作を利用されている。ServiceNow社からはDOM操作は避けるようにされているのでDOM操作なしでの方法を考案。

情報として、（DOM操作は非推奨）
https://docs.servicenow.com/bundle/helsinki-application-development/page/script/client-scripts/reference/r_AvoidDOMManipulation.html

#手順
フォームに次のonSubmitスクリプトを作成する。

'''
function onSubmit() {
    var attachmentRequired = 2;  // 必須にする添付ファイル数

    if (window == null && this != null) {  // サービスポータルでのチェック
        if (this.document.getElementsByClassName('get-attachment').length < attachmentRequired) {
			g_form.addErrorMessage('At least ' + attachmentRequired + ' attachments are required.');
            return false;
        }
    } else {  // UIページでのチェック
        var cartSysId = g_form.getParameter("sysparm_item_guid");
        try {
            var grAttach = new GlideRecord("sys_attachment");
            grAttach.addQuery('table_sys_id', cartSysId);
            grAttach.query();
            var cnt = 0;
            while (grAttach.next() && cnt < attachmentRequired) {
                cnt++;
            }
            if (cnt < attachmentRequired) {
                g_form.addErrorMessage('At least ' + attachmentRequired + ' attachments are required.');
                return false;
            }
        } catch (e) {}
    }
}
```
RailsにおけるRESTfulな設計とはなにか？

#RESTfulとは

>RESTful APIは、基本的に「RESTの原則」に従って実装されているWebシステムのHTTPでの呼び出しインターフェースのことを指します。
>>https://blog.api.rakuten.net/ja/jp-restful-api/#:~:text=REpresentational%20State%20Transfer%E3%81%AE%E7%95%A5,%E3%81%AE%E3%81%93%E3%81%A8%E3%82%92%E6%8C%87%E3%81%97%E3%81%BE%E3%81%99%E3%80%82


___なるほど..わからん。___

Railsの根本的なところやん？こんなに理解がぼんやりしていてええの？
ってことでこの曇った視界をはっきりさせていく。


#RESTful
アプリケーションを構成するリソースをHTTPリクエスト（GET/POST/PUT/DELETE）で作成、読み出し、更新、削除できる仕組み

要するに___URLに対してどのHTTPリクエストを送るかでそのあとの動作をより分けている___イメージか。

___
アプリケーションでユーザー関連のもろもろを取り扱うUserリソースを例にしてみる

アプリケーションの下記のような動作があったとする。

- ユーザーを新しく登録するページを表示(new)
- ユーザーを新しく作る(create)
- 一人のユーザーを閲覧する(show)
- 登録ユーザーの一覧をみる(index)
- ユーザー情報を更新するページを表示(edit)
- ユーザー情報を更新する(update)
- ユーザーを消す(destroy)

これを冒頭でも述べた動作で振り分ける
ユーザーを新しく作るなら
HTTPリクエストは　POST　
URLは/users
こうするとcreateアクションを呼び出すことができる。
※Railsではindex, show, new, edit, create, update ,destroyが暗黙のリクエスト



#RESTfulな設計を使うには

HTTPリクエスト、URL、アクションの設定はroutes.rbでできる。

~~~ruby
post '/users', to: 'users#create'
~~~


ただUsersリソースのように想定している動作がindex, show, new, edit, create, update ,destroyの7種類全てを使う場合はroutes.rbで

~~~ruby
resources :users
~~~

の1行を追加するだけで全てのアクションが使える。


#RESTfulな設計とは
・URLに対して、どのリクエスト（GET、POST、PUT、DELETE）かで結果が変わる仕組み

・routes.rbでその設定ができる。
・すべての挙動を想定している場合はresources :usersの一行でルーティング設定が終了する


#参考

https://wa3.i-3-i.info/word11405.html
https://qiita.com/kidach1/items/43e53811c12351915278
https://qiita.com/katsutakashima/items/47977b9e7d18cf816734
[railsチュートリアル](https://railstutorial.jp/)
[Ruby on Rails 入門](https://www.javadrive.jp/rails/routing/index5.html#:~:text=RESTful%E3%81%AA%E8%A8%AD%E8%A8%88,-%E3%81%BE%E3%81%9AREST%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6&text=REST%E3%81%A8%E3%81%AF%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE,%E3%82%92%E8%A1%8C%E3%81%AA%E3%81%86%E3%81%A8%E3%81%84%E3%81%86%E3%82%82%E3%81%AE%E3%81%A7%E3%81%99%E3%80%82)
ビデオ会議用背景

ワーケーションしてる風になる事を期待して。。。

![60353076-A710-47D4-BF24-CA41CE0636AA.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36064/9847d934-7c5b-fd74-7056-b5498406630a.jpeg)
switchでの条件分岐に関して(PHP)

<h1>Switch文について(PHP)</h1>


条件分岐の中でも同じ変数を異なる値で比較する際に以下の
switch文が使用されます。

○基本構文

```
switch（式）｛
  case 値A：
    式の値が値Aと等しいときの処理；
    break；
  case　値B：
    式の値が値Bと等しいときの処理；
    break；
  case　値C：
    式の値が値Cと等しいときの処理；
    break；
  ．．．．．．
｝
```

例えば、if文で記述すると

```
$animal= 'cat';

if ($animal === 'cat') {
  echo 'My pet is cat' . PHP_EOL;
} elseif ($animal === 'dog') {
  echo 'My pet is dog' . PHP_EOL;
} elseif($animal === 'rabbit'){
  echo 'My pet is rabbit' . PHP_EOL;
}
```

となる条件分岐文がSwitch分では、

```
<?php
$animal= 'cat';

switch ($animal) {
  case 'cat':
    echo 'My pet is cat';
    break;
  case 'dog':
    echo 'My pet is dog';
    break;
  case 'rabbit':
    echo 'My pet is rabbit';
    break;
}
?>
```

と記述することができます。

switch文に関しては、ある特定の値をチャックして、条件したい場合に使用します。
複雑な条件の場合にはif文を使います。
未経験からIT企業のシステムエンジニア転職成功体験-その①

・私の経歴
　大学理系学部卒から約10年間営業職をやっていました。業界は金融、医療、電気メーカーです。IT業界は学生時代から興味ありました。今年システムエンジニア職としてIT企業未経験から転職成功しました。その体験談(成功と失敗)をお伝えできればと思っています。

・私のおもい
　世の中にはプログラミングスクールやWebでの学習コンテンツYoutubeなどなど未経験からITエンジニア(プログラマ)に転職できると大量の宣伝で溢れかえっています。ビジネスは需要と供給なので背後には大量の希望者がきっといることでしょう。正直プログラマは業務請負や場合によっては賃金の安い外国人にお願いしています。もちろん一部の高給フリーランスの人もいるでしょうが、そのほとんどは将来的により安い賃金の人たちと戦う必要があります。

・準備が必要
　プログラミングスクールに行けば、プログラミング言語の知識はつきます。ただし転職活動(私は何十回と書類応募、面接をしてきました)で大切なことは、「キャリアをリセットさせないこと」です。どんな理由であれ無職期間があれば求職者にとって百害あって一利なしです。企業は足元見ますし、求職者も最後は妥協する選択になる可能性が高いです。
　プログラミングスクールに行けば、当然前職を辞めることになるでしょうし数か月で数十万の出費となります。ただ現職のまま、ITスキルをつけることはできます。例えば公的機関の職業訓練学校が平日に就業者向けにプログラミングやエンジニアの実習を1回1万円前後で開催しています(受講証も発行されますし職務経歴書にも記載できます)。また夜間大学や社会人大学の科目履修生などでも現職を辞める必要ありません。また自分でプログラミング言語やIT技術を学ぶことができないようであれば、そもそもITエンジニアには向いていません。

　未経験で給料が上がることは絶対ありません。

・どうするか、どうしたか?
　給料を上げるには現職(自分が持っている経験)との親和性が必要です。もちろんIT知識と経験も必要です。私は営業(非IT)から誰もが知っているようなIT企業へ転職成功しました。最低限のプログラミングはできるかもしれませんが、プログラミングスクール卒業生にはスキルとして到底及びません。
GASをVScodeで編集出来るようにする

<h1>準備</h1>
- VScodeのインストール  
  https://code.visualstudio.com/
- Node.jsのインストール  
  https://nodejs.org/en/download/
- GoogleAPIをオンにする   
  https://script.google.com/home/usersettings
- ソースを保存するためのフォルダをPC上に作成しておく

<h1>claspのインストール</h1>
管理者権限でコマンドプロンプトを開いて次のコマンドを入力
```npm install -g @google/clasp```

<h1>連携方法</h1>

claspのインストールが終わったらVScodeを開いて左上のファイル→フォルダからあらかじめ作成しておいたフォルダを選択する

フォルダを開いたら左上のターミナル→新しいターミナルを押してターミナルを開く

ターミナルが開いたら次のコマンドを入力
```clasp login```

googleの認証に飛ばされるのでアカウントを選択して認証を許可する


次に編集中のGASを開く
（作成方法はGoogleDriveから右上の新規を押してその他→GoogleAppsScriptで作成できる）

GASを開いたら右上のファイル→プロジェクトのプロパティを開く

開いたら情報の中にスクリプトIDというものがあると思うのでそれをコピーしておく

VScodeに戻ってターミナルに次のコマンドを入力する
```clasp clone 〇〇〇〇〇〇```
※「〇〇〇〇〇〇」の部分にコピーしたスクリプトIDを入力する

するとファイルが生成される

これでVScodeでGASの編集ができるようになります('ω')ノ

<h1>VScodeからGASへ反映する方法</h1>
VScodeのターミナルに次のコマンドを入力する
```clasp push```

入力したらGASを開いてブラウザをリフレッシュするとVScodeで編集した内容が反映されているはずです(^^♪

<h1>参考</h1>
- https://qiita.com/yamamow/items/72ba321651ba2274007d
vSphere 7 が出る！VMware 製品を評価したいときは・・・・評価ライセンス？それとも買っちゃう？

2020-04-11 に別の所で書いていた記事へのリンクです。

VMware の製品を評価するにはどうしたら良いの？
近々出てくる vSphere 7、これベータテスターの申し込みで事前評価とかは出来たんだけれど、製品として登場してくるものを評価したい場合、VMware のサイトから評価版をダウンロードして使うしか無い・・・・でも、事前評価できないし評価期間過ぎると再度ダウンロードできないし、再評価としてももう使えない。これ、結構ジレンマですよね。特に SI やっているところではお客様の環境の検証とかで使いたいなと思っても、評価ライセンスはそういう用途にも使えず困ったなぁ・・ということがあるんですね。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/541683/90930568-436d-fb74-4421-4b7c4e221ecd.png)

https://imaisato.hatenablog.jp/entry/2020/04/11/124338
vSphere ESXi customize image のつくりかた（vSphere 7 が来る前の準備）

2020-04-11 に別の所で書いていた記事へのリンクです。

# カスタムイメージが必要な理由は
来月には出てくると言われている vSphere 7 ですが、家ラボ検証環境を作る際には実際のサーバーを購入し環境を作るのはお金の面で厳しいものがありますし、電気代や熱、音そして設置スペースも気になるところです。でも、もっと気になるのは家族の目。特に奥さんからのプレッシャーが半端ないかと思います。

https://imaisato.hatenablog.jp/entry/2020/04/11/013424

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/541683/49fef351-18e8-7d98-b1cb-e6fffb539f9e.png)
vSphere 6.0 サポート終わるんだってね！！（知ってるさ！）でも利用環境の確認を

2020-03-15 に別のところで書いていた記事へのリンクです。

vSphere 7 が発表になり、噂によると5月にはダウンロード開始になるという中、実は3日前の 3/12 にサポートが終了した製品があります。そう何を隠そう（隠していない！）vSphere 7 の前のメジャーバージョンの vSphere 6.0 のジェネラル サポートが終了しました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/541683/96c9ff5c-43f9-0335-da14-127c7723bbb2.png)

https://imaisato.hatenablog.jp/entry/2020/03/15/220531
vSphere 7 が出るので VMware vSphere Edition Comparison を勝手に日本語化してみた

2020-03-14 に￥別の所で書いていた記事へのリンクです。

いよいよ登場 vSphere 7 !。VMware 製品を弄らなくなって早 1年近くなのですが、vExpert になったのでまた VMware 製品を弄らないとなぁと思っていたところ vSphere 7　の登場、待ち遠しいですね。

そこで、vSphere 7 はどんな機能があるのかを調べていたら、VMware vSphere Edition Comparison が公開されていました。

https://imaisato.hatenablog.jp/entry/2020/03/14/164452
vSphere 7 へのアップグレード対象はどこまで？

2020-04-12 に別の所で書いていた記事へのリンクです。

# vSphere のアップグレードポリシーは
5月には利用できるようになると言われている vSphere 7、既存の vSphere からのアップグレードポリシーはどうなのかをちょっと考察。

https://imaisato.hatenablog.jp/entry/2020/04/12/161758
vSphere 7へアップグレードしてみた結果は？

2020-04-13 に別の所に書いていた記事のリンクです。

# vSphere 7 へのアップグレード
vSphere 7 へのアップグレードは前回の記事でも記載しましたが、2世代より前の vSphere つまり 6.0 より前は対象になりません。これはジェネラルサポートが終了しているからということではなく、VMware 製品のポリシーによるもので、実際にアップグレードをかけてみるとわかるのですが、アップグレードの選択肢が出てこなくなります。なので、既存環境を vSphere 7 にアップグレードするためには、その対象に含まれていないバージョンの vSphere を使っている場合は、まず対象のバージョンにアップグレードする必要が出てきます。

https://imaisato.hatenablog.jp/entry/2020/04/13/002225

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/541683/69b7ca2f-4e30-28c8-726e-e4f7ab1e270b.png)
「vSphere 7 へのアップグレードについて」まとめてみた

2020-05-06 に別の所に書いていた記事へのリンクです。

# vSphere 7 へのアップグレードについて
ゴールデンウイークは Stay Home だったので、結構いろいろやれる時間があったため、ほかの趣味とか家族サービスの合間に、vSphere 5.1 からずっと仕事で作っていたvSphere のアップグレードのまとめ資料を暇なので作ってみた。

中身はいたって一般的、VMware の公式サイトに公開されている情報だけを使ってパワポに気になるところを書き出しただけ。それを VMUG （VMware users Group）用の資料として良いかなと VMUG のパワポテンプレート使って書いてみた。でも、実はこの資料は裏のテンプレートマスターを差し替えるだけで VMUG 版、ニフクラ版、VMware 版のどれにでもなるようにしてあるもの。なので、他で同じ構成の資料を見かけてでも背景が違うというものは、この資料のテンプレートを差し替えてあるだけだと思ってよいかと思います。

https://imaisato.hatenablog.jp/entry/2020/05/06/050110
vSphere のライフサイクルの可視化をしてみた

# vSphere のライフサイクル
vSphere 7 が 4/2 に登場してから早速検証をされている人も多いのではないかと思います。そして「これなら大丈夫！」と本番業務の環境に使おうと考えるようになるわけですが、新規の環境は置いておいて既存の環境をアップグレードするとなると気になるのは vSphere のライフサイクルなわけです。

2020-05-09 に別の所に書いていた記事へのリンクです。
https://imaisato.hatenablog.jp/entry/2020/05/09/225548

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/541683/a1487ed8-6672-117c-80d8-283b0f34d896.png)
vSphere のお勉強はー＞ハンズオンセミナーに行くより、家やオフィスでハンズオンラボを使ってみよう

# vSphere を知るには
やはり触るのが一番ですよね。でも、触る環境を用意するのは意外と大変。業務で使っている環境では使えないし。かといって家ラボ作るまでのコストはかけられない。

2020-05-16 に別の所で書いていた記事へのリンクです。
https://imaisato.hatenablog.jp/entry/2020/05/16/135700

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/541683/f56297f6-2bcc-ef1d-4432-4ce94fa00417.png)
pandasのリファレンスをながめてみた -ちゃんとリファレンスは読もうという話-

## はじめに
写経していろいろ試してみた中でpandasの使い方をもっとうまく使えるようになりたいという動機が生まれたので応用するフェーズへ移行するために、できることの範囲や境界を認識するためにながめてみました。

## URL
- pandas本家サイト
    - https://pandas.pydata.org/pandas-docs/stable/index.html

## リファレンスながめてみた感想
### サイトについて
- 本家サイトが綺麗_(失礼）
![スクリーンショット 2020-11-30 0.54.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/397770/c3b67420-0004-c848-c426-5e8d9197d59e.png)

- ユーザーガイドで何ができるかが羅列されており何ができるかということがわかり易いです
 ![スクリーンショット 2020-11-30 0.57.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/397770/53fd5bec-ade1-cd67-c7fd-b45114bdf937.png)

- APIのリファレンスもちゃんとあります。ユーザガイドを踏まえてみるとここだけでもやれることが直感的にわかります。
![スクリーンショット 2020-11-30 1.01.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/397770/4fa2e5ee-4eac-e5d3-e381-a27cf322b036.png)

### 機能について(データ入出力)
- CSV以外にもいろいろ使えるのが嬉しい!
    - JSONやExcelは話には聞いていたけどもHTML?スクレイピングしてくれるらしいです
        - JSONはURL指定もできる模様
    - SQL , BigQueryからも直接ひっこぬけるらしいです。自動化する際にいちいちファイルやオブジェクトストレージを用意しなくとも良さそうですね！

### Group Byなどの集計
- 各種集計系が揃っています
    - 合計、平均、最大、最小などの計算
    - グループ分けした上での計算
    - null考慮もされた機能もあります
- 簡単に集計して俯瞰的にデータを見れると素敵ですよね

### plotの種類
- いちいちmatplotlibを使わずに直接呼び出して確認するときに何でプロットするかをみるときに便利ですよね。
- 何がプロットできるかが見えるのが非常に嬉しい


## 終わりに
pandasに限らず、サンプルコードで紹介されている内容は試すという観点では簡潔で満足なのですが、実務を行う際には実装されている機能の存在を知らずにロジックを書くということを避けれるので、一度リファレンスをながめるというクセを付けようと改めて思いました。
私の英語力は３のゴミですがgoogle翻訳でそれなりに理解ができるので利用してみてください。

プログラミング以外にでも概要と俯瞰の理解は最初にやっておいた方がいいですね！（自分への戒め）
vSphere ESXi のブートディスクパーティションの変遷

#　vSphere 7 のアップグレード時に注意すること（ブートパーティション）
vSphere 7 では久しぶりにブートディスクパーティション構成が変わりました。これ、vSphere 5.5 で拡張 CoreDump Partition ができて以来の変更で、今回はパーティション構成も整理されており、ずいぶん大きな変更になります。

2020-06-12 に別の所で書いていた記事のリンクです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/541683/63bae617-25c7-c90e-17e2-9dcbee5803b0.png)
ラビットチャレンジ - 深層学習 Day3 Section4 双方向RNN

# 0．概要
本記事は日本ディープラーニング協会認定の講座プログラムである「ラビット・チャレンジ」が提供している科目の1つである深層学習のレポートである。
記事タイトルに記載のとおり、Day3 Section4 双方向RNNについて以下にまとめる。

# 1．双方向RNN(Bindirectional RNN)
通常のRNNは過去の情報を保持することで時系列データの学習を実現していたが、双方向RNNの場合は過去の情報に加えて未来の情報も加味させるモデル。

ただのRNNにももちろん適用できるがLSTMやGRUにも適用することが出来る。

文章の推敲や機械翻訳等、主に自然言語処理で活用されている。
「PythonとKerasによるディープラーニング」によると、これは自然言語の特性によるものとのこと。

例えば気温の予測の場合、予測したい日の直近の日の気温が最も重要となることもあり、逆方向(未来)から学習させると非常に精度の低いものになる(未来の日ではなく予測したい日より先のデータもある前提)。
これは過去から未来を予測するという至極一般的な考え方通りである。
しかし、ある単語の次に来る単語はなにか等の予測をさせようとした場合、逆方向から学習させても精度が出るらしい。
つまり、自然言語は気温等のように過去から未来のように順方向で学習しなければならないと決まっているわけではなく、順方向で学習しても未来から過去のように逆方向で学習しても良いという特性がある。
もちろん順方向と逆方向で学習する内容は異なる。

参考：
https://axa.biopapyrus.jp/deep-learning/rnn/brnn.html
https://www.slideshare.net/ShannonLab/brnn-69866920

# 2．演習チャレンジ

## 2.1．双方向RNN

```Python:
def bindirectional_rnn_net(xs, W_f, U_f, W_b, U_b, V):
  # W_f, U_f：入力から中間層、前の中間層から今の中間層の順方向の重み
  # W_b, U_b：W_f, U_fの逆方向
  # V：順方向、逆方向の中間層から出力層の重み
  xs_f = np.zeros_like(xs)
  xs_b = np.zeros_like(xs)

  for i, x in enumerate(xs):
    xs_f[i] = x
    xs_b[i] = x[::-1]

  hs_f = _rnn(xs_f, W_f, U_f)
  hs_b = _rnn(xs_b, W_b, U_b)
  hs = [np.concatenate([h_f, h_b[::-1]], axis=0)] for h_f, h_b in zip(hs_f, hs_b)
  ys = hs.dot(V.T)
  return ys
```

通常のRNNだと順方向だけだったものに逆方向が増えたものなので複雑なものではない。

# X．ラビットチャレンジとは
ラビットチャレンジとは、日本ディープラーニング協会認定の講座プログラムの1つ。
E資格を受験するためにはこのラビットチャレンジ等、いずれかの講座プログラムを修了しなければならない。

ラビットチャレンジの特徴は「現場で潰しが効くディープラーニング講座」の通学講座録画ビデオを編集した教材を使用した自習スタイルであるという点。
サポートは他の講座より少なく、受け身ではなく自主的に学んでいく姿勢でなければ進められないが、その分、他の講座に比べると安価であり、手が出しやすい。
ある程度知識がある人、自力で頑張るぞというガッツのある人向けではないかと感じる。

![bnr_jdla.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/389699/bce66671-a2f5-a7f9-de6f-3f87e15c253b.png)
vSAN ファイルサービスと同じような他社のサービスと並べてみた

# vSphere 7 から使える vSAN ファイルサービスが出たのでちょっと調べてみました。

2020-07-31 に別の所に書いていた記事のリンクです。
https://imaisato.hatenablog.jp/entry/2020/07/31/222846
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/541683/e84d1f8b-2253-8e5f-0043-9c92174a509b.png)
Delphi で KUSO アプリを作った件

# KUSO APPLICATION

[去年はクソアプリ Advent Calendar で、クソアプリを作りました](https://qiita.com/pik/items/4759d8597a434c9a691f)が、あれは Windows / macOS だけでしか動きませんでした！

**モバイルファーストの時代**にこれはマズい！！

ということで、今回は Android / iOS 用のクソアプリを作りました。
まずはコレをご覧ください。

## スクリーンショット
![kuso.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/12977/bdd9268d-c265-8643-fc71-ab277ffbfdb0.png)

## 動画
動画は代表して iOS のものを。
減色＆フレームレート落としたのでガビガビでガクガクだけど本当はもっとキレイにくるくる回るよ！
<img width="320" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/12977/32a9db20-4da3-79a6-35c8-4102a76a8d42.gif">

…え？何かに似てる？？馬鹿な！
[LEGACY っぽいフォント探すの苦労したよ！](https://en.wikipedia.org/wiki/Tron:_Legacy#/media/File:Tron_Legacy_poster.jpg)

# 機能

* 右に回すとカウントアップ
* 左に回すとカウントダウン

ただそれだけ！！
だって**クソアプリ**だからね！！
でも！メモリが許す限りカウントアップできるから**一生涯回せる**よ！たぶん！！

# 技術的解説

相変わらず [Delphi](https://www.embarcadero.com/jp/products/delphi) で制作しています。

あと自作の BigInteger 構造体を組み込んでいるので（Delphi には標準で BigInteger がない。ただし [BCD 演算用の TBCD](http://docwiki.embarcadero.com/Libraries/Sydney/ja/Data.FmtBcd.TBcd) があり64桁までの計算ならこれで事足りる）メモリの許す限りカウントアップ可能！
[BigInteger の解説は Delphi Avent Calendar の方](https://qiita.com/pik/items/d8a0173192b49a4d273d)に…

こちらでは 3D の話を

# FireMonkey

Delphi には [FireMonkey というライブラリ](http://docwiki.embarcadero.com/RADStudio/Sydney/ja/FireMonkey)が標準搭載されているのですが、こいつはイカれたライブラリで、コントロールを DirectX / Metal / OpenGL を使って自前描画しています。
そのため、ネイティブのコントロールに縛られない描画が可能です。
たとえば、[以前の記事](https://qiita.com/pik/items/5aed76dd2f6694eceb0d)で書いた、こんな風に画像にエフェクトをかけたり、UI パーツを自由に変形したりできます。
![nekochan.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/12977/f99fc6d7-fbe3-311a-f255-a036ca908b06.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/12977/bbbd0e29-5859-15b7-1098-9c245ac800c4.png)
そして更にイカれているのは、3D も扱えるということなのです。

# FireMonkey3D

FireMonkey の 3D 機能については FireMonkey3D という名前で呼ばれていますが、特に 2D / 3D の間に垣根があるわけではないです（以前はありました）

## TViewport3D

[TViewport3D](http://docwiki.embarcadero.com/Libraries/Sydney/ja/FMX.Viewport3D.TViewport3D) は 3D でレンダリングするベースとなる部分です。
↓今回の KUSO APPLICATION の設計時の画面ですが、3D の部分は viewportUnko の子として存在しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/12977/9582ed1b-67f2-04d6-4ec4-74c0478622ef.png)

## TLayer3D

また、面白いのが [TLayer3D](http://docwiki.embarcadero.com/Libraries/Sydney/ja/FMX.Layers3D.TLayer3D) で、このコントロールはその上に通常の FireMonkey の 2D 用コントロールを乗せられます。
これを使って今回は [TImage](http://docwiki.embarcadero.com/Libraries/Sydney/ja/FMX.Objects.TImage) を乗せました。
当初は [TText](http://docwiki.embarcadero.com/Libraries/Sydney/ja/FMX.Objects.TText) を乗せていたのですが、Android の「💩」フォントが予想以上に気持ち悪かったので、画像にしました。
上の設計時の画面では、imgTitle, imgMtL, imgMtR, imgUnko を乗せています。

こんな風に 2D / 3D をまぜこぜにしたアプリを作れるのは Delphi の面白い部分です。

# まとめ
Delphi を使えば 3D も簡単に使えるし、Android / iOS の開発も楽ちんだよ！
ホントだよ！

ソースは下記に
https://bitbucket.org/freeonterminate/filpunko/src/master/

Windows / macOS でも動くけど計算をサボっているからグリッドのラインが上と合わないよ！
ごめんね！
wireshark で特定の HTTP Request Method(GET、POST)のみ表示する

## 実現したいこと

wiresharkのFilter機能で特定のHTTP Request methodのみを表示させたい。
例えば、POSTのみを表示させたいだったり、GETリクエストのみを表示させたい場合に利用する。

## 実行コマンド

### HTTPリクエストメソッド GETの場合

```
http.request.method == "GET"
```

Filterツールバーに上記のように入力する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/49795/1606e477-9af8-c96d-f9ac-063438e6b0ca.png)


### HTTPリクエストメソッド POSTの場合

```
http.request.method == "POST"
```

Filterツールバーに上記のように入力する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/49795/60c52cb1-0426-c39b-c8fc-bb4a500c90b3.png)


## 補足

### HTTPリクエストメソッド GETで特定のパラメータのみ表示する場合

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/49795/bb08eed7-e01e-154c-8aa8-1b8bfdaccc0f.png)

```
http.request.uri == "/?num=5"
```

Filterツールバーに上記のように入力する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/49795/57e9618a-c1f3-603c-3be0-51e573f42597.png)

### 使い所(個人用のメモです...)

* デバッグ用途に使っています。フロントのHTTPサーバーからアプリケーションサーバー(例えばwsgiサーバーなど)へのリクエストを確認する。

## 情報源

* フィルタ画面を適当に入力してたらなんか出てきた
* https://musclehunter.blogspot.com/2015/09/wiresharkurl.html
* https://www.wireshark.org/docs/dfref/h/http.html
Gitのための.zshrcの設定

## きっかけ

パソコンが変わるたびに同じような`.zshrc`の設定を毎回してるのでメモの意味も込めて。

## 完成イメージ
<img width="40%" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/738919/d793906f-57e1-ccea-c8f1-d57211103a3c.png">

## 実装

まず↓をコピーなりダウンロードなりして、`${HOME}/.zsh/git-prompt.sh`ここにおきます。
https://raw.githubusercontent.com/git/git/master/contrib/completion/git-prompt.sh


```sh:.zshrc
source ${HOME}/.zsh/git-prompt.sh

GIT_PS1_SHOWDIRTYSTATE=true
GIT_PS1_SHOWUNTRACKEDFILES=true 
GIT_PS1_SHOWSTASHSTATE=true
GIT_PS1_SHOWUPSTREAM=auto

setopt PROMPT_SUBST ; PS1='[%n %c%F{cyan}$(__git_ps1 " (%s)")%f]\$ '

export PATH=/usr/local/var/nodebrew/current/bin:$PATH

# 補完機能有効にする
autoload -U compinit
compinit -u

# 補完候補に色つける
autoload -U colors
colors
zstyle ':completion:*' list-colors "${LS_COLORS}"

# 単語の入力途中でもTab補完を有効化
setopt complete_in_word
# 補完候補をハイライト
zstyle ':completion:*:default' menu select=1
# キャッシュの利用による補完の高速化
zstyle ':completion::complete:*' use-cache true
# 大文字、小文字を区別せず補完する
zstyle ':completion:*' matcher-list 'm:{a-z}={A-Z}'
# 補完リストの表示間隔を狭くする
setopt list_packed
```

## かいせつと参考文献

GIT_PS1について
https://ryokwkm2.hatenadiary.jp/entry/2017/09/21/125854

https://gist.github.com/d-kuro/352498c993c51831b25963be62074afa
midPoint The Bookの紹介と翻訳版の公開

[NRI OpenStandia Advent Calendar 2020](https://qiita.com/advent-calendar/2020/nri-openstandia)の1日目は、IGAを実現するオープンソースmidPointの技術書「Practical Identity Management with MidPoint」とその翻訳活動の紹介をします。

# midPointとは？

これまでQiitaやOpenStandiaのホームページでも何度かご紹介していますが、改めてmidPointとは何なのか簡単にご説明します。midPointはIDM（ID管理）、IGA（IDガバナンス&アドミニストレーション）を実現するオープンソースソフトウェアです。スロバキアのEvolveum社が開発を主導しており、NRIもパートナーシップ契約を締結しサポートを提供しています。完全なオープンソースであること、IGA（IDガバナンス&アドミニストレーション）を実現できることが特徴のソフトウェアです。

# midPoint The Bookとは？

The BookとはEvolveum社のCTO Radovan氏とEvolveum社のエンジニアにより執筆されたmidPointの技術解説書籍の通称です。正式名称は「Practical Identity Management with MidPoint」ですが、Radovan氏やEvolveumのエンジニア達はこの本を「The Book」「The Book」と呼ぶので我々も「The Book」と呼んでいます。このページに概要が書かれていますが、

https://evolveum.com/midpoint/midpoint-guide-about-practical-identity-management/
https://docs.evolveum.com/book/

The BookはmidPointの単なる技術解説本ではなく、その前段のID管理の課題やその本質を解説する書籍となっており、IDM、IGAについて学ぼうとする方々にお勧めの書籍です。ちょうどこの11月に最新版である2.1が出ました。

# The Book翻訳版のご紹介

OpenStandiaチームではThe Bookのバージョン1の翻訳版を下記にて公開しています。

https://openstandia.jp/document/practical-identity-management-with-midpoint-ja.pdf
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/208260/209b35ed-94ce-3949-b6cf-62ee8f353dd4.png)

The Book日本語翻訳版の目次構成は下記の通りとなります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/208260/fe110255-7c52-9ca9-c3ba-a851e6e89f66.png)

1章、2章はIDM・IGAに関する一般的な課題・解決策を解説する章となっております。この章だけでかなりのボリュームがありますが、読み物として読み進めやすい内容かと思います。

3章はmidPointの概要を解説する章です。midPointの概要をさっと理解したい方はこの章を確認するとよいでしょう。

4章～7章は実際にmidPointをインストール・コンフィグレーションしていくときに必要になってくる部分です。設定例だけでなく、実際にmidPointを使い込んでいく際には必要となる考え方や、midPointの開発、保守、サポートの考え方なども記載されています。

8章がなかなか面白い章です。今後書き足されるであろう内容が書かれています。現在の状態でも十分な情報量ですが、著者のRadovan氏によるとこの本はまだまだ成長し続けるようであり、彼の情熱やこの分野における思いがこの章に記載されています（ところどころ入ってくる詩的な表現を楽しむのもこの本を読み進める醍醐味だったりします）。

9章や10章は追加情報や締めくくりの章となります。

最新版はmidPointの実装例の章など大幅に内容が増強されています。いきなり全文を読んでいくのは日本人にとっては厳しい量かと思いますのでぜひ翻訳版を活用頂ければと思います（最新版の翻訳も進める予定ですが、今しばらくお待ちくださいm(_ _)m。）

# 特に読んでほしい章

「第2章　アイデンティティ管理とアクセス管理を理解する」が約50ページほど使って全体の中でも大きな割合を占めています。この章はmidPointに依存しないことが書かれているのでIDM、IGAを学ぼうとしている方について非常に有用です。この中でもIDガバナンスの章はIGAの理解を深めるためにぜひ読んで頂きたいと思います。

The Book翻訳版での箇所
　第2章　アイデンティティ管理とアクセス管理を理解する
　　アイデンティティのガバナンスとコンプライアンス（P.42）

The Book最新版ではこの部分の記述が大きく強化されておりました。近年のIGAの注目度の高まりを受けて、Evolveum社もこの部分について改めて内容を増強したのだと思います。IDM、特に、IGAについての理解を深めたい方は以下のリンクからチェックしてみてください。

The Book最新版での箇所
　https://docs.evolveum.com/book/practical-identity-management-with-midpoint.html#_identity_governance_and_compliance

# おまけ（英文翻訳について）

今回の翻訳は基本的に原文訳に忠実に逐次翻訳する方針で進めました。逐次翻訳にすると当たり前ですが、かなり原文の英語の構造を意識した翻訳となってしまい日本語としてかなり不自然な箇所が残ります。私は英文翻訳についてかつて興味あった時期があり、それなりに本を調べ買い漁った時期があったのですが1冊本を紹介させて頂きます。

英文翻訳術 (ちくま学芸文庫) 文庫
https://www.amazon.co.jp/%E8%8B%B1%E6%96%87%E7%BF%BB%E8%A8%B3%E8%A1%93-%E3%81%A1%E3%81%8F%E3%81%BE%E5%AD%A6%E8%8A%B8%E6%96%87%E5%BA%AB-%E5%AE%89%E8%A5%BF-%E5%BE%B9%E9%9B%84/dp/4480081976

この本を買ってから知ったのですが、著者の安西徹雄先生はこの分野の第1人者の方のようで、この著書は翻訳家を目指す方にとって必読書のようです。この本の序章に「英語の語順」「日本語の語順」を如何に克服して翻訳を進めるのがよいのか、その指針が簡潔に述べられています。翻訳そのものに興味のある方はぜひこの本も手に取ってみて頂ければと思います。