OmniAICreator/Qiita-1.07M huggingface dataset:
Pythonの2の補数変換

文字列に変換したくなかったので以下

```Python
def tc(x, bits):
    if x > bits>>1:
        x = ~(x ^ bits)
    return x
```

#### ex. 4ビット
```Python
>>> tc(7, 0xF)
7
>>> tc(8, 0xF)
-8
>>> tc(0xF, 0xF)
-1
```

#### ex. 16ビット
```Python
>>> tc(32768, 0xFFFF)
-32768
>>> tc(32767, 0xFFFF)
32767
```
マイクラチュートリアル4-2 サイクロン堀 鉱石探索

```lua
local args = {...}
local n = args[1]

local gold = "minecraft:gold_ore" --金
local iron = "minecraft:iron_ore" --鉄
local coal = "minecraft:coal_ore" --石炭
local redstone = "minecraft:redstone_ore" --レッドストーン
local lapis = "minecraft:lapis_ore" --ラピスラズリ
local diamond = "minecraft:diamond_ore" --ダイヤモンド

turtle.select(1)
turtle.refuel()

local count = 0

for i = 1, n do
  local result = turtle.digDown()
  if result == true then
    count = count + 1
  else
    break
  end
 turtle.down()

 for i = 1, 4 do
  local success, data = turtle.inspect()

  if data["name"] == gold or
     data["name"] == iron or
     data["name"] == coal or
     data["name"] == redstone or
     data["name"] == lapis or
     data["name"] == diamond then
    turtle.dig()
    turtle.forward()

    for i = 1, 4 do
      if data["name"] == gold or
       data["name"] == iron or
       data["name"] == coal or
       data["name"] == redstone or
       data["name"] == lapis or
       data["name"] == diamond then
       turtle.dig()
      end
      turtle.back()
    end
    turtle.back()
  end
  turtle.turnLeft()
  end
end

local up = count - 1

for n = 1, up do
  turtle.up()
end

for j = 1, 4 do
  turtle.place()
  turtle.turnLeft()
end

turtle.up()
turtle.placeDown()

for i = 1, 16 do
  turtle.select(i)
  turtle.drop()
end
```
terraform plan時にcontainerInsightsの差分が出る

メモです

## 解決方法

awsプロバイダのバージョンを3.57以上にアップグレードする

## 原因

AWS ECS Describe-Clusters APIでレスポンスのオプショナルなフィールドを常に返していたため差分として表示されていた模様。
現在は修正されてオプションをつけた場合のみ返される。

参考記事
https://zoo200.net/terraform-avoid-diff-output-containerinsights/
https://stackoverflow.com/questions/69028127/terraform-not-saving-state-of-ecs-cluster-containerinsights-setting
TypeScriptの??と?について

TypeScriptで見かける?と??という演算子。
意味を知らないと完全に暗号のようだが、意味を知ればちゃんと読める！（当たり前）
という事で、調べてみた。

## TypeScriptの、はてなふたつの演算子や、はてなドットの演算子は、JavaScriptの新しい構文だった

JavaScript TypeScript
TypeScript 3.7以降で使える ?? 演算子。 || 演算子より厳密に undefined や null を判定してくれるので多用していたが、こいつの名前は何だろうと思って調べてみたところ、Nullish Coalescing Operator、日本語だとNull結合演算子というらしい。

ついでに、 ?. で undefined または null な参照の場合に、エラーではなく undefined にしてくれる、RubyでいうところのNull条件演算子は、 Optional Chaining Operatorというらしい。

どちらもECMAScript2020で追加された構文で、主要ブラウザの最新版や、Node.js v14からはJavaScriptでも使えるようになっている

## Nullish Coalescing Operator(Null結合演算子)

左辺が null または undefined の場合は右辺、それ以外の場合は左辺を戻り値として返す。

|| (OR演算子)との違いは、OR演算子は左辺が false として判定される場合は右辺が返るのに対し、 ?? では null または undefined に限定されること。
```
// null, undefinedの場合は、Null結合演算子とOR演算子の違いなし
console.log(null || 'NULL'); // NULL
console.log(null ?? 'NULL'); // NULL

console.log(undefined || 'UNDEFINED'); // UNDEFINED
console.log(undefined ?? 'UNDEFINED'); // UNDEFINED

// 左辺がfalsyな場合、結果が異なる
console.log(false || true); // true
console.log(false ?? true); // false

console.log(0 || 1); // 1
console.log(0 ?? 1); // 0

console.log('' || '空文字'); // 空文字
console.log('' ?? '空文字'); // (何も表示されない)
```
## Optional Chaining Operator(オプショナルチェイニング演算子)

オブジェクトのプロパティ参照時、 . (ドット表記法、MDNの文中ではチェーン演算子と呼称)を利用すると、オブジェクトが null や undefined の場合は Uncaught TypeError: Cannot read property が発生するが、 ?. を使うと undefined が返る。

プロパティチェーンで利用すると、途中のプロパティのいずれかで undefined が返れば短絡評価されるので、それ以降は実行されない。

ドット表記法だけでなく、ブラケット表記法や配列のインデックスアクセス、関数呼び出しにも使用可能。

```
const obj = arr = func = undefined;

console.log(obj?.prop); // ドット表記法
console.log(obj?.['expr']); // ブラケット表記法
console.log(arr?.[0]); // 配列のインデックスアクセス
console.log(func?.('args')); // 関数呼び出し
```

## 和名について
Nullish Coalescing Operator は「Null 合体演算子」、Optional Chaining Operator は「オプショナルチェーン (演算子)」となっている。

## 参考サイト
https://hepokon365.hatenablog.com/entry/2020/08/23/220835
testQLとqの比較

## 始めに
csvファイルに対して、SQLでデータ検索できる便利ツールの[textQL](https://github.com/dinedal/textql)と[q](https://harelba.github.io/q/)を比較する機会がありました
その結果をシェアします

## 検証方法
1. pythonでsubprocessでコマンド実行
2. CSVファイルは2種類。1つは350行, 20カラム, 73k。もう1つは800行, 22カラム, 220k(いずれも約)
3. pythonファイルは同じものを使い、SQLはほぼ同一でfrom等の実行コマンドに依存する部分のみ異なります。実行コマンドのパラメータはヘッダーの指定のみです
4. シンプルなSQLで名称を条件にIDを取得するだけのものです
4. textQLのバージョン 2.0.3、qのバージョン 3.1.6


## 結果
textQLの方が3倍近い速度でした

cProfileの結果(1部)を貼り付けておきます(ファイル名、関数名はリネームしています)
単純に1つ1つの実行結果が遅いみたいですね

なお、python scriptとしては、実行結果をプログラム内でキャッシュすることで改善を計ります

```textQL-cumtime.sh
ncalls  tottime  percall  cumtime  percall filename:lineno(function)
    211/1    0.000    0.000   33.080   33.080 {built-in method builtins.exec}
        1    0.057    0.057   33.080   33.080 test_python.py:1(<module>)
     2737    0.066    0.000   32.205    0.012 test_python.py:227(exec_cmd)
     2737    0.228    0.000   32.134    0.012 subprocess.py:461(run)
     2737    0.022    0.000   28.798    0.011 subprocess.py:1110(communicate)
     2737    0.169    0.000   28.772    0.011 subprocess.py:1952(_communicate)
     4593    0.050    0.000   28.047    0.006 selectors.py:403(select)
     4593   27.989    0.006   27.989    0.006 {method 'poll' of 'select.poll' objects}
      346    0.110    0.000   21.739    0.063 test_python.py:350(get_test1)
     1678    0.004    0.000   21.730    0.013 test_python.py:245(get_test2)
     1059    0.015    0.000   10.514    0.010 test_python.py:250(get_test3)
```

```q-cumtime.sh
ncalls  tottime  percall  cumtime  percall filename:lineno(function)
    211/1    0.000    0.000  103.530  103.530 {built-in method builtins.exec}
        1    0.047    0.047  103.530  103.530 test_python.py:1(<module>)
     2737    0.051    0.000  102.596    0.037 test_python.py:206(exec_cmd)
     2737    0.282    0.000  102.540    0.037 subprocess.py:461(run)
     2737    0.020    0.000   99.083    0.036 subprocess.py:1110(communicate)
     2737    0.217    0.000   99.060    0.036 subprocess.py:1952(_communicate)
     5474    0.057    0.000   98.407    0.018 selectors.py:403(select)
     5474   98.339    0.018   98.339    0.018 {method 'poll' of 'select.poll' objects}
      346    0.118    0.000   69.666    0.201 test_python.py:329(get_test1)
     1678    0.030    0.000   65.547    0.039 test_python.py:224(get_test2)
     1059    0.033    0.000   37.139    0.035 test_python.py:229(get_test3)
```

## 終わりに
バージョンを確認する時に気づいたのですが、qはpythonで動いているようですね
それなら当然の結果となります
(textQLはgolang)

```q --version.sh
q version 3.1.6
Python: 3.9.15 (main, Nov  6 2022, 11:31:59) // [Clang 14.0.3 ]
Copyright (C) 2012-2021 Harel Ben-Attia (harelba@gmail.com, @harelba on twitter)
http://harelba.github.io/q/
```
SharePoint Onlineの情報を収集します

+ [Microsoft Office 365 SharePoint Online と連携させたい場合はどうすればよいですか？](https://help.salesforce.com/s/articleView?id=000382325&type=1)
+ [SharePointとMicrosoft Teamsの違いと連携方法をわかりやすく図解](https://notepm.jp/blog/11017)
+ [SharePointのコミュニケーションサイトを使う準備](https://qiita.com/Keiji_otsubo/items/f0a4b8252f37b665a015)
+ [SharePointOnlineモダンサイトの色を変える](https://qiita.com/Keiji_otsubo/items/2e55f66fe690cef5f07d)


【電子書籍】SharePointポータルサイト活用

# SharePoint Onlineでできることは

**「Webサイト」と「ファイル共有」の仕組みをSharePointひとつで構築できる**
一般的にWebサイトを構築する場合、社内やクラウド上にサーバを立てて
WordPressなどのツールを利用してWebサイトを構築します。また、ファイル保
管・共有についても社内にファイルサーバを立てて共有するか、「Dropbox」のよ
うなクラウドストレージサービスを契約して、ファイル保管・共有を行うため、別々
のシステムやサービスとなってしまいます。SharePoint Onlineを使えば、「Webサ
イト」と「ファイル保管・共有」を一つのシステムで構築することができます。

**直感的な操作で「Webサイト」を構築**
Webサイトは、パーツを置いていくだけで作成できます。プログラミング不要
なので専門的な知識はいりません。

**ストレージサービスとしてだけ利用してもOK**
ファイル保存・共有だけしたいという場合は、空のサイトを作成してファイル
の入れ物だけつくることで他のストレージサービスと同じような使い方できま
す。

# メリット

**クラウド上でデータ保存・共有だけじゃない**
SharePoint Onlineに限らず、ストレージ系のクラウドサービスを契約すれば、比
較的容易にデータの保管と共有を行うことができます。SharePoint Onlineで
は、データの保管・共有だけでなく、TeamsやForms、Power Automateなど
Microsfot365の他のサービスと組み合わせて様々な仕組みを構築することがで
きます。また、ローカルに保存したファイルを同期するために利用するOneDriveア
プリでSharePoint上のフォルダへ同期させることもできるので、一つのアプリで個
人データと共有データの棲み分けを徹底することができます。

**デバイスと場所を選ばず利用できる**
SharePoint Onlineは、インターネット環境とブラウザさえあれば、どこからでも利
用できます。また、マルチデバイス対応なのでスマホやタブレットなどでも利用でき
ます。移動中や外出先からモバイル端末を利用してSharePointにアクセスでき
るため、時間の有効活用ができます。

**Officeアプリと相性がいい**
Google DriveやDropBoxなど他のクラウドサービスでは、保存したOfficeファイ
ルを開くとレイアウトが崩れて見づらいといった経験はないでしょうか。SharePoint
Onlineでは、保存したExcelやWord等のOfficeファイルがWeb版のOfficeアプリ
で開かれるので、レイアウトが崩れたりしません。また、ブラウザ上での編集のみ
でなく、SharePoint上から直接デスクトップ版のOfficeアプリで開いて編集するこ
とも可能です。

**ユーザーとグループの管理が楽**
基幹システムやグループウェアなど、システムを導入する際に、避けて通れない
のがユーザー管理とグループ管理及び権限設定です。SharePoint Onlineで
は、Microsft365のユーザー・グループをそのまま使って権限設定を行えるので、
ユーザー・グループのメンテナンス負荷を軽減できます。グループについては、「メ
ールが有効なセキュリティグループ」を部署単位で作っておけば、メーリングリスト
としても利用できますし、権限設定用グループとしても利用できます。

**外部ユーザーの招待機能**
SharePoint Onlineには、取引先など外部のユーザーを招待する機能があり、
簡単に情報共有を行うことができます。セキュリティ面に関しても暗号化などの
対策が取られているため安心です。
ただし、アクセス権限はきちんと設定しましょう。
【photoshop】選択中のフォントファミリーの太さを一段変える

### 太くする

```
var activeFontWeight = app.activeDocument.activeLayer.textItem.font;
var fontFamily = app.fonts.getByName(activeFontWeight).family;
var fontWeights = [];
var nextFontWeight;

for (var i = 0; i < app.fonts.length; i++) {
    if (app.fonts[i].family == fontFamily) {
        fontWeights.push(app.fonts[i]);
    }
}

for (var i = 0; i < fontWeights.length; i++) {
    if (fontWeights[i].postScriptName == activeFontWeight) {
        if (i == (fontWeights.length - 1)) {
            nextFontWeight = fontWeights[i];
        } else {
            nextFontWeight = fontWeights[i + 1];
        }
        break;
    }
}

app.activeDocument.activeLayer.textItem.font = nextFontWeight.postScriptName;
```

### 細くする

```
var activeFontWeight = app.activeDocument.activeLayer.textItem.font;
var fontFamily = app.fonts.getByName(activeFontWeight).family;
var fontWeights = [];
var nextFontWeight;

for (var i = 0; i < app.fonts.length; i++) {
    if (app.fonts[i].family == fontFamily) {
        fontWeights.push(app.fonts[i]);
    }
}

for (var i = 0; i < fontWeights.length; i++) {
    if (fontWeights[i].postScriptName == activeFontWeight) {
        if (i == 0) {
            nextFontWeight = fontWeights[i];
        } else {
            nextFontWeight = fontWeights[i - 1];
        }
        break;
    }
}

app.activeDocument.activeLayer.textItem.font = nextFontWeight.postScriptName;
```
SharePointのコミュニケーションサイトを使う準備

Teamsを使っていますが、色々とアンケートフォームン等も増えてきたので投稿から探すのが大変になってきました。ワークフローも追加していく予定になので社内ポータルサイトを用意しないとと考えていたところSharePointのコミュニケーションサイトが使えそうだということで、少しばかり設定をしてみたいと思います。

ロゴはどこで変えるのでしょう？
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/0972b69e-c163-6b8f-1ff3-93e11a2526ba.png)

+ サイトの歯車メニュー内「外観の変更」をクリックし、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/4bdc1d22-a307-6bcc-7f72-9f6702dd84c3.png)

+ [SharePoint ：サイトロゴの設定場所が変更された](https://art-break.net/tech/?p=15589)
railsのconfigとは

# 疑問
* config/application.rb内で```config. ...```と書いている。
  この```config```とは何なのか？知りたい。

# 設定ファイル(config)
設定ファイルについて

### 説明
Railsでは、config/以下の設定ファイルによって設定を変更

### 特徴
```「config.パラメータ名 = 値」```の形式で設定
設定を反映するには、```サーバの再起動が必要```
文字コードは、UTF-8

### 主な設定ファイル
説明
application.rb	 	```すべての環境で共通の設定```ファイル
environment/	 	環境ごとの設定ファイルを格納するディレクトリ
 	development.rb	開発環境での設定ファイル
 	test.rb	テスト環境での設定ファイル
 	production.rb	本番環境での設定ファイル
initializers/	 	その他の初期化処理や設定情報などを格納するディレクトリ
 	infiections.rb	単数形・複数形のルールを設定
 	mime_types.rb	アプリケーションで利用できるコンテンツタイプ
 	secret_token.rb	クッキーを署名とするためのトークン情報
 	session_store.rb	セッションを保存するための設定ファイル
locales/	 	国際化対応のためのリソースファイルを格納するディレクトリ

# 出典
https://railsdoc.com/config#:~:text=%E5%BB%83%E6%AD%A2-,%E8%A8%AD%E5%AE%9A%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB(config),%E5%8C%96%E5%AF%BE%E5%BF%9C%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AE%E3%83%AA%E3%82%BD%E3%83%BC%E3%82%B9%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E6%A0%BC%E7%B4%8D%E3%81%99%E3%82%8B%E3%83%87%E3%82%A3%E3%83%AC%E3%82%AF%E3%83%88%E3%83%AA,-%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9%E3%81%AE%E8%A8%AD%E5%AE%9A

# 気づき
cofigとは設定ファイルのことを指すのか。
だからサーバーを再起動させたら反映されたのか。

# 関連記事
https://qiita.com/masatom86650860/items/edb95c9271d88e67016a#:~:text=Rails%3A%3AApplication-,config,-.load_defaults%207.0
Dartでyyyymmddの形で渡されたint型の日付とDateTimeを相互に変換する二つのメソッドを持つクラスを作成する

# 結論
```date_converter.dart
void main() {
  final dateTime = DateConverter.intToDateTime(20230117);
  print("${dateTime.year}年${dateTime.month}月${dateTime.day}日");
  final intDate = DateConverter.dateTimeToInt(DateTime(2023,1,17));
  print(intDate);
}

class DateConverter {
  
  static DateTime intToDateTime(int date) {
    var year = date ~/ 10000;
    var month = (date % 10000) ~/ 100;
    var day = date % 100;
    return new DateTime(year, month, day);
  }

  static int dateTimeToInt(DateTime date) {
    return (date.year * 10000) + (date.month * 100) + date.day;
  }
}
```
マイクラチュートリアル4-3 サイクロン堀 鉱石探索

``` lua

local gold = "minecraft:gold_ore" --金
local iron = "minecraft:iron_ore" --鉄
local coal = "minecraft:coal_ore" --石炭
local redstone = "minecraft:redstone_ore" --レッドストーン
local lapis = "minecraft:lapis_ore" --ラピスラズリ
local diamond = "minecraft:diamond_ore" --ダイヤモンド


function inspectBlock()
  local ret = false
  local success,data = turtle.inspect()
  if data["name"] == gold or
     data["name"] == iron or
     data["name"] == coal or
     data["name"] == redstone or
     data["name"] == lapis or
     data["name"] == diamond then
    ret = true
  end
  return ret
end


function searchDig()

  if inspectBlock() then
    turtle.dig()
    turtle.forward()

    for i = 1, 4 do
      if inspectBlock() then
        turtle.dig()
      end
      turtle.turnLeft()
    end
    turtle.back()
  end
end


function kaitenBori(down)
  local count = 0
  for i = 1, down do
    local result = turtle.digDown()
    if result == true then
      count = count + 1
    else
      break
    end
    turtle.down()
    for i = 1, 4 do
      searchDig()
      turtle.turnLeft()
    end
  end
  return count - 1
end


function backToHome(up)
  for i = 1, up do
    turtle.up()
  end
end

local args = {...}
local n = args[1]

turtle.select(1)
turtle.refuel()

local up = kaitenBori(n)
backToHome(up)

for j = 1, 4 do
  turtle.place()
  turtle.turnLeft()
end

turtle.up()
turtle.placeDown()

for i = 1, 16 do
  turtle.select(i)
  turtle.drop()
end

```
Alma Linux, Rocky Linux, MIRACLE LINUX のerrataの公開状況

バックポートで脆弱性の対応がされた場合、例えばopensshなど正規のバージョンから外れるため、単純なバージョンの比較だけで脆弱性の対応がされたか判別ができません。
該当の脆弱性が対応されているのかは、errataで調べる事ができます。
Alma Linux, Rocky Linux, MIRACLE LINUX で errata の公開状況はどうなっているか軽く調べたので記事にしました。
何かの役に立ったら嬉しいです。

* AlmaLinux
    * https://errata.almalinux.org/
    * AlmaLinux8, 9のerrata提供
* Rocky Linux
    * https://errata.rockylinux.org/
    * Rocky Linux8, 9の errata提供
        * ~~https://forums.rockylinux.org/t/rocky-linux-9-errata-missing-late-8-errata/6890~~
            * ~~（機械翻訳：22/9/29書き込み）Rocky Linux 9の正誤表は作業中であり、ほとんど準備ができていますが、完全には完了していません。~~
            * ~~23/1/17現在でも公開されず。~~
* MIRACLE LINUX
    * https://tsn.miraclelinux.com/ja/errata
    * ~~MIRACLE LINUX 9のみerrata提供~~
    * MIRACLE LINUX 8, 9のerrata提供（Asianux Server 8 => MIRACLE LINUX 8に該当）
        * ツイッター（`@koedoyoshida`さん）で教えて頂きました。感謝！

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">こちら、具体的にはどのCVEの話ですかね？<br>原則としてMIRACLE LINUX 8もバックポートでの脆弱性はされていますし、公開されています。<a href="https://t.co/PaR8tgGnlR">https://t.co/PaR8tgGnlR</a><br>表記が「Asianux Server 8」となっていますが、これがMIRACLE LINUX 8系です。</p>&mdash; 吉田@板橋 (@koedoyoshida) <a href="https://twitter.com/koedoyoshida/status/1615960870097678337?ref_src=twsrc%5Etfw">January 19, 2023</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
VScodeのスニペットでfont-family設定するメモ

開発環境はmacbook2015です

WEB制作をするときにfontfamilyの書き方を
忘れて調べ直すのが大変なので、
VScodeのスニペットに登録してみました

User>nippets>scss.json

に置かれる設定ファイルらしい

googlefontを使っており
そのNotoのsansとserifを
スニペットに登録したかったので
下記のように設定しました。

```scss.json
"Noto fonts": {
    "prefix": "noto",
    "body": "${1|Noto Sans JP,Noto Serif JP|}"
}
```

覚えているのが一番だけど
忘れてしまうので、楽になりました
「バックアップは完了しましたが一部のファイルはスキップされました」のエラー解消

### 「バックアップと復元(Windows 7)」でエラー発生
OneDriveの同期先を変更すると「バックアップと復元(Windows 7)」で次のエラーが発生するケースがあります。
`フォルダ D:\OneDrive\ドキュメントのバックアップ中に問題が発生しました。エラー:(STATUS_WAIT_2(0x8007002))`
`E:\OneDrive\ドキュメント がバックアップ先にあるため、バックアップがスキップされました。`
### エラー原因
エクスプローラーの左側「ライブラリ」配下に変更前のフォルダへのパスが残っていることが原因の１つです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108405/1f981616-64b5-2b52-2680-3bd9e74198c8.png)
### エラー解消
この変更前のフォルダが既に空であることを確認した上で削除します。
### 以上
Azure Administrator(AZ-104)：Azure での ID とガバナンスの管理「Azureリージョンペア」

Microsoft Learnを用いたMicrosoft Azure Administrator(AZ-104)の試験内容をまとめる投稿です。
この投稿ではMicrosoft Learnで学ぶ内容をできるだけ簡潔にまとめております。
Azureの勉強を一から始め、AZ-900取得後の資格としてAZ-104取得を目指している方の参考になれば幸いです。
※AZ-900の内容は本投稿では省略しております。再度復習したい方は下記をご参照ください。
[Azure Fundamentals(AZ-900)：試験合格に向けた学習内容のまとめ](https://qiita.com/fsd-jume/items/e4ec76959adb547ac5e8)

## 今回の学習内容
**◆「Azureリージョンペア」**
◇対応するMicrosoft Learn ラーニングパス
[AZ-104:Azure での ID とガバナンスの管理](https://learn.microsoft.com/ja-jp/training/paths/az-104-manage-identities-governance/)
◇対応するモジュール
[Azure リージョンを特定する](https://learn.microsoft.com/ja-jp/training/modules/configure-subscriptions/2-identify-regions)

※前回の投稿は下記から確認できます。
[Azure Administrator(AZ-104)：Azure での ID とガバナンスの管理「Azure AD管理単位」](https://qiita.com/fsd-jume/items/10d2e9a9c689aeeb6662)

## Azureリージョンペア
### Azureリージョン
リージョンについてはAZ-900の学習まとめで扱っておりますので、復習したい方は下記をご参照ください。
・[Azure Fundamentals(AZ-900)：クラウドの概念について説明する「信頼性と予測可能性」「セキュリティとガバナンス」](https://qiita.com/fsd-jume/items/592be27a2e3c3f9ee4c9)
・[Azure Fundamentals(AZ-900)：Azure のアーキテクチャとサービスについて説明する「Azure物理インフラストラクチャ」](https://qiita.com/fsd-jume/items/503268657c26a9b45749)

### Azureリージョンペア
ほとんどのAzureリージョンは同じ地域内の別のリージョンとペアになっている
⇒リージョンレベルの障害や更新における可用性を確保可能(DR戦略)

### リージョン間レプリケーション
・リージョンペア間でサービスやデータのレプリケートが可能 = **リージョン間レプリケーション**
・すべてのAzureサービスが自動的に復旧やレプリケーションをするわけではない
⇒使用するAzureサービスによっては利用者が設計する必要あり
・リージョン間レプリケーションはサービスごとに設計可能

### リージョン間レプリケーションの利点
**◆物理的分離**
・リージョンペアのデータセンター間最小距離は原則300マイル(483km)
・自然災害、社会不安、停電、物理ネットワーク障害が両方のリージョンに影響する可能性が少なくなる

**◆プラットフォームから提供されるレプリケーション**
・geo冗長ストレージ(GRS)などの一部サービスには自動レプリケーション機能あり

**◆リージョン復旧順序**
・広範囲に障害が発生した場合、すべてのペアで一方のリージョンの復旧が優先
・ペアにまたがってデプロイされているアプリについては、ペアのどちらかが必ず優先的に復旧

**◆順次更新**
・計画的なAzureシステムの更新はリージョンペアで時間的に調整されて実施
・更新障害時のダウンタイム、バグの影響、論理的障害を最小限に抑えることが可能

**◆データの保存場所**
・リージョンは有効セットとして同じ地域内に存在
⇒税/法の執行を目的としたデータ保存場所の要件を満たすため

### リージョンとリージョンペア使用時の考慮事項
**◆リソースとリージョンのデプロイを検討**
・ほとんどのAzureサービスではリソースデプロイ時にデプロイ先のリージョンを選択

**◆リージョンによるサービスサポートを検討**
・一部のサービスや仮想マシンの機能は特定のリージョンでのみ利用可能

**◆リージョンを必要としないサービスを検討**
・Azureの一部のグローバルサービスはリージョンの選択が不要
例：Azure AD、Microsoft Azure Traffic Manager、Azure DNSなど

**◆リージョンのペアリングの例外を検討**
・リージョンによっては例外的なペアリングになることがある
例：ブラジル南部のセカンダリリージョンは米国中南部
例：インド西部は一方向のみでペア

**◆データ保存場所の利点を検討**
・リージョンペアを活用すればデータ保存場所の要件を満たすことが可能

## 次の学習内容
**◆Azureサブスクリプション**

https://qiita.com/fsd-jume/items/d5a1e10f9cde21e84c86

## 学習内容をまとめたページの一覧

https://qiita.com/fsd-jume/items/6eda24728c9c03c36bc3
TeraTermのマクロで一定時間待つ

# 概要

テストサーバーのデータベースサービス起動 or 停止 or 状態確認をTeraTermのマクロでやってる。
マクロ実行後に ```exit``` 入力する（TeraTerm閉じる）の面倒くさい。

コマンド実行結果を4～5秒くらい表示した後、TeraTermを終了してくれて構わない。

# やり方

例えば ```pause 4``` で4秒待つ。

```:サンプルttl
;ログイン情報。
USER_NAME = 'おなまえ'
USER_PASSWORD = 'おぱすわーど'
HOST = 'サーバー名またはサーバーIPあどれす'

;ログインコマンド生成。
login_command_ = HOST
strconcat login_command_ ' /ssh /auth=password /user='
strconcat login_command_ USER_NAME
strconcat login_command_ ' /passwd='
strconcat login_command_ USER_PASSWORD

;ログイン実行。
connect login_command_

;コマンドが入力できる状態まで待つ。
wait ""

;MariaDBのサービス起動状態取得。
sendln "sc query ""MariaDB"""

;表示しきる（次のコマンドが入力できる状態）まで待つ。
wait ""

;4秒待つ。
pause 4

;TeraTerm終了。
sendln "exit"
```

# 蛇足

TeraTermマクロについての基礎知識は下記。

https://qiita.com/waokitsune/items/6dcc80676a66fd8751e4

https://qiita.com/waokitsune/items/b39d4d9dfe9c4c08816d

# 参考サイトさん

http://ttm.jimba.ddo.jp/adiary.cgi/teraterm/index/macro/spec/cmd/pause

# バージョン

Windows 10 Pro 22H2 OSビルド 19045.2486
TeraTerm 4.106
モノレポなリポジトリにAmplify Hostingでカスタムヘッダーの設定をしたらビルドできなくなった

# はじめに
こんにちは。Amplify（旧 Amplify Console）が大好きです。
モノレポでフロントのデプロイと配信を行っていましたが、ある時から

```
Monorepo spec provided without "applications" key
```

というエラーになってしまいました。
ググったところ直近で設定したカスタムヘッダーの影響があるようです。

> I noticed you are using customHttp.yml. Can you also try to add applications and appRoot by following this instruction: https://docs.aws.amazon.com/amplify/latest/userguide/custom-headers.html#custom-header-YAML-format ? thanks

https://github.com/aws-amplify/amplify-hosting/issues/1995

GitHubのIssueでは `customHttp.yml` で設定するように求められていますが、直近で設定したカスタムヘッダーはマネジメントコンソールで設定しているため、実質的なYamlファイルはありません。

ただマネジメントコンソールで設定できる内容がほぼ同一なため、こちらに手を加えていきます。

```yaml:customHttp.yml
customHeaders:
  - pattern: '**'
    headers:
      - key: X-Frame-Options
        value: SAMEORIGIN
```

公式サイトによるとモノレポの場合には全体にapplicationを追加した上でappRootでアプリを切り分け、モノレポのファイル場所の記述を行うようです。

https://docs.aws.amazon.com/amplify/latest/userguide/custom-headers.html#custom-header-YAML-format

```yaml:customHttp.yml
applications:
  - appRoot: front
    customHeaders:
    - pattern: '**/*'
      headers:
      - key: X-Frame-Options
        value: SAMEORIGIN
```

上記で正しくビルドができるようになりました。
2023年から始めるTableau入門① -ディメンジョンとメジャー-

## はじめに
23年2月からTableau案件にアサインされることになったので、理解深化のためにまとめます。
第1回目は、「ディメンジョンとメジャー」について。

### 筆者の技術力

:::note warn
業界歴半年で、つい2週間前にTableau Desktopをインストール。BIツールはTableauが初めてです。
:::

## 参考

https://note.com/ritz_tableau/n/nf4f4066be7f3

## ディメンジョン
:::note info
データを切る切り口のこと
:::

例えば、「地域毎、年度毎に分析をしたい」とき、`●●毎`の部分がディメンジョンに当たります。
様々な形式や意味合いを持つフィールドがまとまったものがデータソースで、そこからやりたい分析に沿ってデータソースを`切って`いく＝ディメンジョンで分けていくということですね。

## メジャー
:::note info
集計することに意味のあるデータのこと
:::

例えば、「地域毎、年度毎（ディメンジョン）に売上と粗利の合計が見たい」とき、`売上と粗利`の部分がメジャーに当たります。
また、`合計`がメジャーの集計方法となります。

Tableauは、データソースに接続したときに、自動的に「このフィールドは、ディメンジョン（メジャー）だな」と判別し振り分けてくれます。
そのため、数値形式で設定された「社員番号」、「電話番号」などがメジャーに含まれることがありますが、上記定義で考えれば、`社員番号を集計することに意味はない`ので、これらはディメンジョンであることが分かります。

## Tableauが視覚化される仕組み
はじめてTableauを触ったとき、自由自在にグラフが変わっていく様子が楽しく思えました。
Tableauはどのように視覚化しているのでしょうか。
上記で学んだディメンジョンとメジャーを使って一言で表すと、

:::note info
データをディメンジョンで切り分けた範囲の中で、メジャーを集計し視覚化表示している。
:::

具体例で説明するため、以下に3つのグラフを作ってみました。
それぞれのグラフで、どのように切り分けているでしょうか。

### ① データ全体の売上（メジャー）を集計

:::note warn
データの切り分けは無し。全てのデータに対して集計を行っている。
:::

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2601070/2ab95c2a-e84d-11b9-23ce-edc15eab2188.png)
### ② 売上合計を地域別（ディメンジョン）に集計

:::note warn
データの切り分けは「地域」。「地域」毎の範囲で集計を行っている。
:::

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2601070/743f08f0-f516-a6ab-2051-935298fa3cde.png)
### ③ 地域別集計をカテゴリ別（ディメンジョン）でも集計

:::note warn
データの切り分けは「地域とカテゴリ」。「地域とカテゴリ」毎の範囲で集計を行っている。
:::

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2601070/2c124ea6-db6b-795a-3559-742592602f7d.png)

## まとめ
ディメンジョンとメジャーについてまとめました。
それぞれの違いは明らかになりましたが、グラフを作る上で「データを切り分ける」イメージが難しくもありますので、Tableauを思うがままに触ってイメージを固めたいと思います。

ありがとうございました。
Dartで二つのDateTimeの差分を調べて、24時間が経過していたらtrueを返すメソッド

漫画アプリなどでよく使われているメソッドです。

# 結論
```compare_24_hour.dart
class MyClass {
  bool is24HourPassed(DateTime date1, DateTime date2) {
    final difference = date2.difference(date1);
    return difference.inHours >= 24;
  }
}
```
is24HourPassedメソッドでは、引数で受け取った2つのDateTimeオブジェクトdate1, date2を減算し、差分を取得しています。

そして、差分の時間数が24時間以上かどうかを判定し、結果をbool型で返します。
[VSCode]Pythonで返り値の型指定をするとテーマが反映されないアレの対処法

# どんなの？
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883146/67050a53-7bb7-c9ab-61c9-d133992ec1c2.png)

こんなの。
上の関数ではコメント・`pass`両方にテーマが反映されてるのに対し、下の関数には適用されていない。

実行する分にはどうでもいいんですが、なんかやだ。

# 原因
全世界インターネットに聞いた結果、拡張機能が邪魔をしてるっぽい。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883146/effa9f6e-211b-5a88-240c-68fd4d4237f5.png)

[Python for VSCode](https://marketplace.visualstudio.com/items?itemName=tht13.python)。
どうやらこいつが原因らしい。
2016年から更新が止まっているため、おそらくPython側のバージョンアップに対応してないんだと思う。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883146/55616fff-3a91-f1aa-32a0-3dc2e64d1937.png)


消したらなおった。

無効にしても問題なさそうなので、特に理由がない限りは消しておこう。
JavaScript行きついた結論(2)

昨日書いた自分なりの結論の続きです。

https://qiita.com/EasyCording/items/724b69fbd7050fb86409

# 腑に落ちる
　腑に落ちるという感覚は、誰が言ったかは知らないが、実に不思議なものだ。
　だいたい「腑」なんて漢字自体が、日本人として習った覚えもなければ、漢字変換して初めて知ったぐらいだ・・・
　ちなみに意味は、納得がいく。合点がいく。ということらしい
　英語では “make sense” と言うらしい。そう言えば、GANを説明していたイアングッドフェローさんに、インド人エンジニアが説明していて、その時にこのフレーズを使っていた。最初は何か分からない感覚であったかが、ようやく自分もこの会話自体が腑に落ちたようだ・・・

https://www.youtube.com/watch?v=HGYYEUSm-0Q&t=2380s

# 進むべき方向性
　自分は業務でＡＩ関係をやっている。ただし、これは極々ユーザーに近い位置であり、ＩＴシステム屋さんとは、ほとんど反対方向に立っている。ここでシステム屋さんという言葉を使っているが、要するにユーザーに見えない部分で、コツコツ頑張っている人たち全員のことを指す。
　残念ながらＩＴ業なんて言うのは、一般の非ＩＴ企業から見れば、ほとんどそんな感じで、仕事上の関わりもなければ、興味も持たれないそんな世界観である。
　しかしながら、最近は企業がＤＸなんぞを言い始めて、日本もようやくＩＴ教育なんぞを始めようとしているから、さらにたちが悪い・・・

# PYTHON開発
　自分もそうであるが、AI開発などでも、やはりPYTHONが優位であり、DX人材の育成の入り口は、Pythonでのデータサイエンスだろう。
しかしながら、Pythonの苦手分野はWEBアプリやスマホアプリなど、ユーザーが直接触ったりする部分が極端に悪い。そんな中で、現在最も受け入れられているのが、JUPYTERノートのような、学術的プログラミングである。
　自分も社内でやっている感を醸し出すには、このツールが丁度良いと思っている。特に、腑に落とす、と言う戦略にはマッチする。
ましてや、プログラミング初期のコード検討には、JUPYTERで動いて初めて、実際のアプリケーションに放り込むと言うのが、一番手早いと考えている（もしくは、社内のエンジニアにもＰＲするには丁度良いし、Jupyterで学習が止まっているエンジニアが大半だからだ）
　
# JavaScript開発　
　さて、そんなことを書いていると、やはり実際のユーザーアプリ開発が一向に進まない。つまりＵＩを作るにはJSで開発が必要であり、それが行き成りＪＳフレームワークの中に突っ込まれると、もうカオス状態になってしまう。
　そんな訳で、やはり最後の落としどころは、JSを使った学術的プログラミングの環境構築が最大の課題となる。

# 最終結論
そして本日であるが、最終的に自分が出したい結論に近いページにたどり着いた。

https://qiita.com/yunabe/items/8217c678861bb6733774

つまり、JSでJUPYTERノートを使って、AIプログラミングまで実装する。
この方も、最後の方に書いているが、やはりJSに市民権を与えなければ、これからのＩＴ教育は先に進めないのだと思う。
と言う訳で、これからの開発にこのリポジトリのツールを使わせていただくこととした。
（ちなみに、この方はGoogleの方らしいです）

TSLAB　https://github.com/yunabe/tslab
AlibabaのOSSにアップロードする時の認証方法について調べた

# これから書くこと
AlibabaのOSS(Object Storage Service、AWSでいうところのS3)でバケットにCSVをアップロードする必要があった。
そもそも不慣れなAlibaba環境で、アクセス制限どうするかをインフラの人と話し合ったので備忘。


# 認証方式
## AccessKey
一番わかりやすいやつ？(個人的には)
アクセスキーとシークレット(パスワード的なやつ)を発行して、使用する。
SDKを使ってプログラムからアクセスする場合は、envとかに持たせておいて使う感じ。
ただ、有効期限とかはないのでセキュリティ的にそこまで優秀じゃないよね、というポジション



## STS
何の略かというと、Security Token Service
何がSecurityなのかというと、temporaryなところ。つまりワンタイムパスワード的な使い方をするトークンを発行してくれるサービス。
AccessKeyと違って、都度トークンを発行するためこちらの方がセキュアとのこと。
ちなみにPHPのSDKはSTSのトークンでもアクセスキーと同じように使えた。

## RamRoleArn
RamっていうのはAWSでいうところのIAM(だと思ってる違ったらごめんなさい。)
直接ユーザーに紐づけてたSTSトークンの発行を、ロールを介して行うことができる位置付けのもの。
ポリシーとロールを使って汎用的にアクセス制限を定義しながら、適切なユーザーにSTSトークンを発行してあげられる仕組み

## EcsRamRole
AlibabaでいうECSはAWSでいうところのEC2。
AWSはElastic Compute CloudだったのでEC2だったが
AlibabaはElastic Compute ServiceなのでECS。
コンテナ用のサービスではない。

RamRoleの概念をEcsに適用したもの


## RsaKeyPair
よくある秘密鍵のやつ。なぜか日本リージョン(Alibabaではstation)だけ使える。

## Bearer Token
Cloud Call Centre (CCC)で使うやつらしい。
今回はOSSくらいしか触ってないので割愛

# Alibaba使ってみた感想
まず日本語の情報は少ないので、英語スラスラ読めないと調査スピードが若干下がる。
ドキュメントページのクオリティも画像パス間違ってて404になってたり、急に簡体字で表示されたりとイマイチ。

あとはサービス名がAWSと違うので、一回一回調べないとドキュメントも読めない。

逆に概念はほぼAWSのコピーのような印象なので、
Ecs → EC2
OSS → S3
みたいな感じで置き換えて考えればあんまり困らなそうだった。

あと現地でのサービス名はAliyunなので注意。
paiza.ioでelixir その175

# 概要
paiza.ioでelixirやってみた。
Code.eval_string使ってみた。

# サンプルコード

```

Code.eval_string("1 + 2")
|> IO.inspect

#Code.eval_string("c = a + b")
#|> IO.inspect

Code.eval_string("""
 	a = 1
 	b = 2
 	c = a + b
""")
|> IO.inspect

Code.eval_string("  a = 1\n  b = 2\n  c = a + b")
|> IO.inspect

Code.eval_string("c = a + b", [a: 1, b: 2])
|> IO.inspect

s = "defmodule M do\n def add(a, b) do\n a + b\n end\n end"
Code.eval_string(s)
|> IO.inspect

M.add(3, 6)
|> IO.inspect

:ok = File.write("M.exs", s)
|> IO.inspect

{:ok, code} = File.read("M.exs")
|> IO.inspect
Code.eval_string(code)
|> IO.inspect
M.add(5, 4)
|> IO.inspect




```

# 実行結果

```
{3, []}
{3, [c: 3, b: 2, a: 1]}
{3, [c: 3, b: 2, a: 1]}
{3, [c: 3, b: 2, a: 1]}
{{:module, M,
  <<70, 79, 82, 49, 0, 0, 4, 224, 66, 69, 65, 77, 65, 116, 85, 56, 0, 0, 0, 133,
    0, 0, 0, 15, 8, 69, 108, 105, 120, 105, 114, 46, 77, 8, 95, 95, 105, 110,
    102, 111, 95, 95, 7, 99, 111, 109, ...>>, {:add, 2}}, []}
9
:ok
{:ok, "defmodule M do\n def add(a, b) do\n a + b\n end\n end"}
{{:module, M,
  <<70, 79, 82, 49, 0, 0, 4, 224, 66, 69, 65, 77, 65, 116, 85, 56, 0, 0, 0, 133,
    0, 0, 0, 15, 8, 69, 108, 105, 120, 105, 114, 46, 77, 8, 95, 95, 105, 110,
    102, 111, 95, 95, 7, 99, 111, 109, ...>>, {:add, 2}}, []}
9
```

# 成果物

https://paiza.io/projects/3aM25kf6nTtZMstiVlbT8Q

以上。
Juliaで「対角化された行列型」を作った

<font color="Red">2022/1/20追記</font>
こちらに非常に有益な情報&コードの改善案がありますので併せてご覧ください。
・[黒木玄さんのTwitterでの指摘](https://twitter.com/genkuroki/status/1615722977861185538)
・[コード改善案](https://nbviewer.org/github/genkuroki/public/blob/main/0040/EigenDecomposedMatrices.ipynb)
追記終

# 対角化とは。何が嬉しいのか。

対角化とは、行列$M$を、正則行列$P$、対角行列$D$を用いて
```math
M = PDP^{-1}
```
と分解することです。これ以降、$M$は対角化可能な行列であるとします。
対角化の何が嬉しいかというと、そのご利益の一つは、$M^n$が、
```math
\begin{align}
    M^n &= (PDP^{-1})(PDP^{-1}) \cdots (PDP^{-1})\\
        &= PD(P^{-1}P)D(P^{-1} \cdots P)DP^{-1}\\
        &= PDD\cdots P^{-1}\\
        &= PD^nP^{-1}
\end{align}
```
となり、少ない計算量で$M^n$が求められます。（$D^n$は単に$D$の対角要素を$n$乗すれば良い。）その系として、
```math
\exp(M) = P\exp(D)P^{-1}
```
が従います。（$\exp(D)$は$D$の対角要素の指数関数。）
対角化は結構重い処理ですが、対角化された行列のスカラー倍は対角化し直す必要はありません（$M = PDP^{-1}$を見れば明らかだと思います）。なので行列$M$は**固定**で、
・いろいろなスカラー$s$に対し$\exp(Ms)$を求める
・いろいろなベクトル$V$に対して$\exp(M)V$を求める
時には対角化は有効です。

# Juliaで対角化
```julia
using LinearAlgebra
M = rand(100,100)#対角化したい行列
E, P = eigen(M)
```
さすがJulia、超簡単だ。Eは上節で言うところの$D$の対角成分を要素に持つベクトルで、Pは固有ベクトルを並べてできた行列で、上節での$P$に対応します。
当然ですが、
```julia
exp(eigen(M))
```
は動きません。そこで、既存の関数にそのまま突っ込める「対角化された行列型」を作りました。

# 対角化された行列型
<font color="Red">2022/1/20追記</font>
以下のコードは型安定性の観点から、望ましいものではありません。
詳しくは、
・[黒木玄さんのTwitterでの指摘](https://twitter.com/genkuroki/status/1615722977861185538)
・[公式ドキュメント > Performance Tips > Avoid fields with abstract type](https://docs.julialang.org/en/v1/manual/performance-tips/#Avoid-fields-with-abstract-type)
をご覧ください。
追記終

```julia
module EigenDecompression

export EigenDecompose, eigDecomp
using LinearAlgebra
import Base.*, Base./

#対角化された行列型
struct EigenDecompose{T<:Number} <: AbstractMatrix{T}
    P::AbstractMatrix{T}
    D::Diagonal{T}
    invP::AbstractMatrix{T}
end

#普通のMatrixを対角化する
function eigDecomp(mat::AbstractMatrix)
    E, P = eigen(mat)
    EigenDecompose(P, Diagonal(E), inv(P))
end

#EigenDecompose型に対する関数
Base.exp(eig::EigenDecompose) = EigenDecompose(eig.P, exp(eig.D), eig.invP)
*(eig::EigenDecompose, vec::AbstractVector) = eig.P * eig.D * eig.invP * vec
*(eig::EigenDecompose, sc::Number) = EigenDecompose(eig.P, eig.D*sc, eig.invP)
/(eig::EigenDecompose, sc::Number) = EigenDecompose(eig.P, eig.D/sc, eig.invP)

#普通のMatrixに戻す
Base.Array(eig::EigenDecompose) = eig.P * eig.D * eig.invP

end
```

関数は私が使うものしか実装していないので、そのままREPLに突っ込むとエラーが出るかもしれません。お好みでお好きな関数を追加してください。

## テスト
<font color="Red">2022/1/17追記：テストコードを修正</font>
```julia
using Main.EigenDecompression

M = rand(100, 100)
eM = eigDecomp(M)
for i in 1:100
    v = rand(100)
    rnd = rand()
    @assert exp(M*rnd)*v ≈ exp(eM*rnd)*v
end
```
OK.
## ベンチマーク
<font color="Red">2022/1/17追記：ベンチマークを修正</font>
```julia
using BenchmarkTools

M = rand(100, 100);

#普通な方
function bench1(M)
    for i in 1:100
        v = rand(100)
        exp(M*rand())*v
    end
end

#今回実装した方
function bench2(M)
    eM = eigDecomp(M)
    for i in 1:100
        v = rand(100)
        exp(eM*rand())*v
    end
end
```

結果
![スクリーンショット 2023-01-17 12.23.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3113311/15ecc04f-be12-ca14-5c91-b6215f9f0c82.png)
はやい。
（でもREPLよりJupyterの方が10倍くらい速いのはなぜ・・・？でもふだんJupyterしか使わないから見なかったことにしよう）
Railsで言うところのcurrent_user的な立ち回りがLaravelでできないか

## Railsで言うところのcurrent_user的な立ち回りがLaravelでできないかな
現在laravelでWEBアプリを作っている中で上記のようなことができないものかと考えた。

今回やりたいこととしては、
`現在ログインしているユーザー`の`motivationテーブル`の`frequencyカラム`に何が登録されているかを調べ
その値によって反映する内容をViewで変えていくプログラムを書きたい。

つまりif文で条件分岐を定義し、
その値(`現在ログインしているユーザー`の`motivationテーブル`の`frequencyカラム`の値)に応じて反映するプログラムを変えたい
(値が1だったらAを出す。値が2だったらBを出す。といった具合)

わかりづらい。。こんな感じで。
```hoge.blade.php
@if (ログインユーザーのmotivationテーブルのfrequencyカラムの値 === 1)
    {{ $hoge->hoge }}
@endif
```


### Railsだとこう書いていた
Railsで上記を実装しようと考えた場合、ログインユーザーを取得できる`current_user`を用いる。
ログインユーザー(current_user)のmotivationテーブルのfrequencyカラムを取得するとなると以下のように書ける
```
current_user.motivation.frequency
```
これでログインユーザー(current_user)のmotivationテーブルのfrequencyカラムの値を取得することができ、
if文で条件分岐などによく使っていた。

### Laravelではどう書けるか
Laravelで同じように書こうとしてもエラーが発生して書くことができない。(はず)
```
Auth::user()->motivation->frequency;
```
Railsで言うところのcurrent_userはLaravelではAuth::user()と書ける。
これを使ってやりたいことを実装できそうなものだがうまくかけない。

### 実際にやったこと
RailsのようにViewだけでの書き方はいまいちうまく行かなかったので
Controllerを絡ませて書くことにしました。

```testController.php
$user_id = Auth::id();
$hoge = Hoge::where('user_id', $user_id)->get();
foreach ($hoge as $item) {
    $hogehoge = $item->frequency;
}
```
- `Auth::id()`でログインユーザーを取得する
- `where句`を使って`Hogeテーブル`からログインユーザーが登録したデータを取得する
- `foreach文`を使って`$hoge`から1つずつレコードを取り出し`$item`に入れて回す(今回の場合レコードは1つしかないが一旦これで実装)
- `$item`から`frequencyカラム`を取得する

`dd($hogehoge);`で見てみると、frequencyカラムの値が取り出せているのがわかるので、これでviewに渡してあげます。

```test.blade.php
@if ($hogehoge === 1)
    @foreach ($trSupportMenu_a as $a)
        {{ $a->menu }}
    @endforeach
@endif
```
- `$hogehoge`が1だったらforeach文を実行するようなプログラムになっています。

少し遠回りしてしまいましたが、一応これでやりたいことは実装できそうです。
他になにか良いやり方などございましたらご教示願いますm(_ _)m
Googleプロジェクト管理：計画錯誤を克服する

# はじめに

わたしが [Google プロジェクト管理:プロフェッショナル認定証で得られた素晴らしい体験][google]を、要点をまとめ小さく分割して、わかりやすく簡潔に紹介していきます。

興味があれば、ぜひ ***"Google プロジェクト管理:プロフェッショナル認定証"*** を受講してみてください。

[google]: https://qiita.com/mapami/items/317ae776a2268fd54c8f

https://jp.coursera.org/professional-certificates/google-project-management

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2358573/7c79c997-e4e4-7d71-3686-e01b7badaa3c.png" width="800">

今回、プロジェクトマネージャーは、楽観主義が、特にプロジェクトの計画段階では欠点になることがあります。ここでは、「計画錯誤（Planning fallacy）」と呼ばれる理論を検証し、計画段階で成功するための方法をより深く理解しましょう。

# 計画錯誤と楽観主義バイアス

計画錯誤とは、楽観主義バイアスのために、あるタスクを完了するのにかかる時間や、そのタスクに関連するコストやリスクを過小評価する傾向について述べたものである。楽観主義バイアスとは、人が否定的な出来事を経験する可能性が低いと考えることです。

例えば、会議の合間に犬の散歩をしようと思ったとき、実際よりも早くできると思ってしまうことがあります。楽観バイアスは、次の会議に遅刻することなく、犬の散歩ができると伝えるものです。犬の散歩にかかる時間に影響しそうなこと（天候、他の犬に出くわして遊びたがる...）を考えなければ、次の会議に遅れてしまうか、完全に乗り遅れてしまうかもしれませんね。

計画錯誤は、同じような仕事をこなした経験があるかどうかに関係なく、誰にでも起こり得ることです。犬の散歩が初めてであろうと、100回目であろうと、散歩を終えるまでにかかる時間に影響を与えるさまざまな要素を考慮しなければなりません。

これと同じことが、プロジェクト管理にも当てはまります。特定のプロジェクトの各タスクを完了するためにかかる時間を過小評価しないように注意する必要がある。プロジェクトマネージャーとして、計画錯誤を認識しながら、状況が変わってもプロジェクトに対して楽観的な態度を保ち、バランスをとることを目指すべきです。

# 計画錯誤を回避する：ケーススタディ

計画錯誤について、プロジェクトマネージャーである自分自身に置き換えて考えてみてください。もし、あなたが楽観的な考えで大規模なプロジェクトを計画していたとしたら、この計画錯誤は、プロジェクトの遂行に大きな影響を与える可能性があります。チームにタスクを完了するための十分な時間を与えず、作業をやり直させたり、より効率的にプロジェクトを遂行する機会を逃したりすることで、失敗を招く可能性があるのです。

では、どのようなことが起こるのか見てみましょう。Davidは、住宅建設プロジェクトを担当するプロジェクトマネージャーです。彼のWBSを見てみましょう。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2358573/567ec0f4-bff5-fcf4-a1d0-b21de1f08374.png" width="700">

Davidは、この家を完成させるためには、ある事柄が必要であることを理解しています。材料を注文し、材料を運び、業者が実際に家を建て、仕上げと調整のための時間を確保しなければなりません。これらの主要なタスクの時間の見積もりは、次のようになります。


<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2358573/50316ea5-ca11-3108-62d1-8dc4d4ae2952.png" width="400">

WBSと時間見積もり表を作成した結果、Davidはこの建設プロジェクトに合計で10週間かかると見積もった。これは、彼の納期要件を満たしているので、完璧に聞こえます。もしDavidが計画錯誤に気づかなかったら、自分の計画は堅実で、自分のチームは目標期限内に家を建てるための道を歩んでいると思うかもしれません。

幸いなことに、Davidは計画錯誤を意識しています。彼は、時間の見積もりをより慎重に検討します。天候による遅れや、クルーの病欠など、プロジェクトの完成時期を遅らせる可能性のあるリスクを考慮する。
setting.jsonでワークスペースの色を変える

ワークスペースごとにタスクバーの色や文字色を変えると
気分転換になるのでメモ

VScodeの設定からのsetting.jsonは全体への設定であるのに対して
ワークスペース直下にある.vscode > setting.jsonは

![スクリーンショット 2023-01-17 10.06.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/694948/bd678b0b-88ec-1bf2-b447-adddeba29f09.png)

ワークスペースへの設定を行うのに使用する


```setting.json
{
        "workbench.colorCustomizations": {
        "titleBar.activeBackground": "#ffa200", // タイトルバーの背景色（黄色）
        "titleBar.activeForeground": "#1e0808", // タイトルバーの文字色（黒っぽい茶色）
    },
}
```

こんな色味になる

![スクリーンショット 2023-01-17 10.15.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/694948/512e27cc-e8c9-0a01-575b-e1026f8e6fb0.png)
OutlookのメールをExcelのPowerQueryを使ってとりこんでみる

`Outlook`のメールをエクスポートするのにはいろいろな手法がありますが。

条件に合致するメールをエクセルで一覧表示したい場合。

`Excel`の`PowerQuery`で用意されている　`その他のデータソースから`で接続して、エクセルシートに取り込むのが便利かと思います。

本記事ではこちらの方法について記載します。

## 今回の環境

- Microsoft® Excel® for Microsoft 365 MSO (バージョン 2212 ビルド 16.0.15928.20196) 64 ビット

## PowerQueryから接続する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1670622/8e43e3c2-9ad7-f2fe-2f26-d315eefb39e7.png)

データタブから`データの取得` => `その他のデータソースから` => `Microsoft Exchangeから`を選択

メールボックスのアドレスを入力してOKを選択

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1670622/105c52ae-78b9-c8fc-140a-a6000a28bbca.png)

先程、入力したメールボックスへの認証情報の入力プロンプトが出てきます。

今回は`Microsoftアカウント`を選択して、サインインを選択

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1670622/26a27b14-288e-1ade-c783-f4356dd57520.png)

アカウントを選択するのポップアップが表示されるので、対象のアカウントを選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1670622/df247c30-b079-9d7c-310f-75ecc1802cd8.png)

接続できると、`サインインしていません` から`現在、サインインしています。`にメッセージが変わります。

サインインしている事を確認して、接続ボタンを選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1670622/f373f207-ca92-3c4c-ffd3-7088ef00bf99.png)

ナビゲーター画面が立ち上がるので、今回取得したい`Mail`を選択して`データの変換`を選択

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1670622/dd17ff4e-a2b1-1a24-caab-00954807f77a.png)

`PowerQuery`エディタが起動するので欲しい情報を整形して閉じて読み込むを選択すると、エクセルシートにメールが抽出されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1670622/4d3ec2fe-8bbc-932e-0661-131f99ea651b.png)

なお`PowerQuery`で何もフィルタしないと全件取り込もうとします。

`Subject`で件名絞ったり、`Sender , ToRecipients`で送信受信者を絞ったり。
`DataTimeReceived`で受信日付で絞ったり。

適宜フィルタする事で、取得したいメールだけ読み込むように調整できます。

またメール本文については、`Body`に`html`と`text`形式の項目で格納されているので、こちらの項目から展開する事で対応できます。

## 一度接続した資格情報は保存される

今回、`Micorosoftアカウント`で接続しましたが、もう一度同様に接続する際には認証の手順はスキップされます。
これは情報が保存されているわけです。

どこに保存されているかと言うと。

`データソースの設定`から保存されている情報を確認できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1670622/75ccb968-6ce3-1d05-1429-34ce601fa996.png)

`データソースの設定`を確認すると、さきほど入力したアカウントが表示されています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1670622/ec87f5be-cac3-b6e3-8d01-083246f364b1.png)

設定をクリアしたい場合はこちらからクリアすると、さいど認証の画面が表示されるようになります。

## 総評

指定した条件のメールが何件来ているのかだったり、ちょっとした集計をしたい場合にさくっと利用できるので便利です。
データの可視化は健康診断

## はじめに
私はデータエンジニアリングを推進する組織において、DWHを中心としたデータ分析基盤のアーキテクトやデータの可視化に向けた業務要件の整理といった業務に従事しています。

これまでの経験の中で、データの可視化や分析が思うように進まないというケースをたくさん目にしてきました。

特に可視化や分析に対する成熟度がまだ途上にある場合、
・数値を読み解くための、基礎的な理解が不足している
・数値感覚はあるものの、その感覚をロジカルに説明できない
ことが多く、これらが複合してコレジャナイ可視化になっているケースがあります。

こういったケースでは、当たり前と思われていることも言語化して共通認識を持つことが第一歩になります。
本記事は私にとって初めてQiitaで書く記事になりますが、まずは可視化や分析において当たり前だけど重要な部分について書こうと決めました。

## データの可視化は健康診断
「企業の健康状態を明らかにする」というメタファーの話ではありません。

これから可視化をはじめたい、あるいは、はじめたけどうまくいかない、というお客様に
「可視化にあたりどういう部分がポイントになるか」ということについて話をする機会があります。

そういった場面で私は健康診断になぞらえてポイントを伝えるようにしていますので、その内容を紹介したいと思います。

なお、可視化の目的は
・日々の業務活動に必要な数値やKPIの達成状況をタイムリーに把握する
・分析的に利用して知見を得る
に大別できますが、今回は主に前者についての話になります。

### 健康診断の結果表を思い出してみてください。

まず、総合判定が書いてあります。そういえば再検査が必要だったことを思い出したかもしれません。
それから、たとえば血液、肝機能などの分類ごとに正常か異常かなどが記載されていました。
「お酒の飲みすぎでy-GTPが許容値の2倍だよ」と話していた先輩社員のことを思い出します。

そして多くの場合、別紙がついていて、数値の説明と改善指導の内容が書いてあります。
y-GTPが異常値であれば、お酒や糖質を控えましょうといった趣旨のことが書いてあるかなと思います。
ここまで書いてきたことに、可視化において大事な要素が詰まっています。

>総合判定があります
>分類ごとに正常か異常かなどが記載

総合的に良いのか悪いのか、また各要素分解して良いのか悪いのかを視覚的に捉えることができます。
ダッシュボードではまず、「確認する必要があるのか、ないのか」ということがわかり、
確認する必要がある場合は、さらに「どこを重点的に見るべきか瞬時に判別できる」ことが重要です。

※このとき、数字を公平に扱うとか、私たちの好きなMECEだとかは忘れた方がよいです。

>y-GTPが許容値の2倍だよ

平均値や基準値など比較対象とその数値が明示されており、そこと比べてどうなのかというのがわかります。
数値は、断面（ある時点の状態を切り取ったもの）を見せる場合、何かしらとの比較によって意味を成します。
比較するのは、目標値であったり前年値であったり、あるいは隣のチームの数値であったりしますが、比較する（乖離を見る）ことによってその先の分析に繋がります。

>数値の説明と改善指導の内容が書いてあります

どのようなアクションをするべきかが明確になっています。
「可視化をしたい」というニーズは、ドリルの穴理論でいうドリルです。
本来的には、可視化をすることで問題点が明確になり、どういうアクションを打つべきかの意思決定が迅速に誰でも出来る状態というのを欲しています。

そして最後に、健康診断は複数の検査（血液、レントゲンなど）の結果から成り立っています。

単一のシステムから得られる情報を可視化するだけでは、活用し切れているとは言えません。
これは健康診断で言うと、身体計測の結果だけを可視化している状態にあたります。
複数のシステムから得られた情報を掛け合わせてこそ、新しい知見が得られたり、状況をより正しく捉えることができます。
そのために、分析基盤が必要となるのです。

## さぁ、可視化をしてみよう
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/167203/1f91b0df-a8c5-ce60-66d5-d6723e7dbcf5.png)

せっかく健康診断を例にとったので、Tableauを使って、グラフを作ってみました。

先に書きますが、これは悪い例です。どこに問題がありそうでしょうか。

一番多い意見は、身長と体重を棒グラフで並べて表現している点についてでしょうか。
棒グラフは隣接した要素の比較に用いられるものであり、比較対象ではない身長と体重を棒で並べるのは意味のない表現です。

これは伝わりやすい表現方法についての話です。
表現方法については、Web上である程度まとまった記事を見つけることが出来ると思います。

他にも色々な指摘が出てくるかと思いますが、個人的に挙げたい点は以下になります。

「身長と体重を載せたのに、BMIが載っていないのはなぜ」

BMIが載っていないことが一概に「悪い」とは言い切れませんが、この可視化を続けていった先や分析をしていく上で、きっと立ち止まる場面がでてきます。
そこについては次回お伝えしようと思います。

データに触れるうえでは、想像することや仮説を立てることが大事になってきます。
ぜひ、想像してみてください。
CentOSでのjavaのインストール

サーバに「JDK11が必要」と言われて、バージョンを確認してみたら、これは何？
そこからJDK11をインストールして、切り替えてみた手順を記録に残しておきます。

自分が今後別のマシンで作業する時のためのメモですので、「そこ違いますよ」という箇所があれば、コメントいただけると助かります。
javaで開発しているのではなく、「ツールを動かすためにJDKをインストール必要があった」というレベルの作業です。

javaのバージョン一覧は[Oracle Java SE Supportロードマップ](https://www.oracle.com/jp/java/technologies/java-se-support-roadmap.html)で確認しました

### やったこと
* バージョンの確認
* JDK11のインストール
* バージョンの切り替え

### バージョンの確認
```
$ java -version
openjdk version "1.8.0_312"
OpenJDK Runtime Environment (build 1.8.0_312-b07)
OpenJDK 64-Bit Server VM (build 25.312-b07, mixed mode)
```

「version "1.8.0_312"」って、結局javaのバージョンは何？
誰かに聞かれたら、「1.8.0」と答えればいいのかしら....
[JavaColumn](https://www.fenet.jp/java/column/java_beginner/6180/)を参照すると
> バージョン確認としては、上記「1.8.0_55」の「8」の箇所になります

java8だとわかりました。

「yum list installed」でも「1.8.0」が表示されました。

```
$ yum list installed | grep java
java-1.8.0-openjdk.x86_64                          1:1.8.0.312.b07-2.el8_5                        @RockyLinux8.5-AppStream 
java-1.8.0-openjdk-devel.x86_64                    1:1.8.0.312.b07-2.el8_5                        @RockyLinux8.5-AppStream 
java-1.8.0-openjdk-headless.x86_64                 1:1.8.0.312.b07-2.el8_5                        @RockyLinux8.5-AppStream 
javapackages-filesystem.noarch                     5.3.0-2.module+el8.3.0+125+5da1ae29            @RockyLinux8.5-AppStream 
javapackages-tools.noarch                          5.3.0-2.module+el8.3.0+125+5da1ae29            @RockyLinux8.5-AppStream 
tzdata-java.noarch                                 2021e-1.el8                                    @RockyLinux8.5-AppStream 
```

### JDK11のインストール
ここにJDK11をインストールする時は、以下の手順で行いました。

* [Oracle Downloads](https://www.oracle.com/java/technologies/downloads/)からjava11を探す「Java 19 and Java 17 available now」のずっと下にありました
![スクリーンショットOracleDownloadsJava11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/45016/d0c70f64-b52e-c7a2-e2d6-ff52b77a9e05.png)

* 「Java11」を選択する
* 最新版のrpmファイルを探す
　![スクリーンショットJava_rpm.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/45016/9a184776-c674-2fa8-9b6b-aca2c9e323d1.png)
* （yumコマンドでインストールする (java17の場合)）
```
$ sudo yum install https://download.oracle.com/java/17/latest/jdk-17_linux-x64_bin.rpm
```
* JDK17や19はurlが書かれているのでサーバ上で直接yumコマンドに指定できるが、JDK11のときは、ブラウザからログインしてダウンロードを行った
![スクリーンショット 2023-01-16 17.00.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/45016/00ccf4d0-c45f-a335-6fb2-1affd4a9095c.png)

* ダウンロードしたrpmファイルをサーバにscpでコピーして、yumコマンドでインストール
```
$ yum localinstall jdk-11.0.17_linux-x64_bin.rpm
```



### javaの切り替え


```
$ sudo alternatives --config java
```
ドッカー（Docker）のドの字について調べてみた 

# はじめに
割とよく耳にするけど実態はよくわからない......
そんなコンテナ技術の1つであるDockerについて自分なりに調べてまとめてみた
間違ってたりこんなこともできるよ！などありましたら教えていただけると助かります

# 結論
### コンテナとは
+ **1つのOS上でプロセスを仮想的に分離する仕組み**
⇒ アプリケーションを実行するための領域（名前空間）を複数に分割して利用する
### Dockerとは
+ **インフラ関係やDevOps界隈で注目されている仮想化技術**
+ **Docker社が開発**
+ **コンテナ型の仮想環境を作成、配布、実行するためのプラットフォーム**

# 目次
1. [従来の仮想化との違い](#C1)
1. [コンテナで重要な技術(Linuxカーネルの機能)](#C2)
1. [メリット](#C3)
1. [参考文献](#ref)

<a id="#C1"></a>
# 従来の仮想化との違い
### 従来の仮想化（ハイパーバイザ型）
**ホストOS上にてハイパーバイザのソフトを動かし、その上で仮想マシンを動かす**
### コンテナ型
**ホストOS上のプロセスを仮想マシンとして動かす**
⇒ コンテナ内のアプリはコンテナ内のコマンドやライブラリを通して、ホストOSのカーネルを利用
 （※ホストOS上で利用してるアプリの動作と同じ処理のため負荷が少ない）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2919986/5aa3230a-416f-df53-045f-073d1e3773e4.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2919986/d1dc1c77-57f8-ae64-620e-8002a296a60f.png)

<a id="#C2"></a>
# コンテナで重要な技術(Linuxカーネルの機能)
+ **namespace(名前空間)**
プロセスやネットワーク、ファイルアクセスなど複数の種類があり、それぞれが異なるリソースの隔離する
+ **cgroup**
プロセスグループのリソース(CPU、メモリ、ディスクI/Oなど)の利用を制限・隔離する
コンテナへリソースの割り当てと制限する
+ **Capability**
スーパーユーザーとしての機能を制限する
DockerコンテナへHostOSのrootユーザーの権限を制限し、最小限の権限を付与/管理を行う

<a id="#C3"></a>
# メリット
#### 1. **軽量**
ホストOSのカーネルを用いて
そのプロセスのひとつとしてコンテナを作成するため
データ容量が小さく済むイメージ（＝コンテナを作成するためのファイルシステムや設定をまとめたデータ）を
レイヤーで管理して、 同じイメージは共有して利用する
#### 2. **複製が容易**
インターネット上に公開されているリポジトリから
取得可能プライベートなDockerリポジトリも作成が可能
### メリット①：軽量
#### **イメージのレイヤー化**
コンテナ構築時のファイル操作は読み取り専用の「イメージレイヤ」に記録
イメージレイヤはハッシュ値で管理され、Docker実行環境内でキャッシュ・共有される
プログラム実行時の書き込みは最上位の「コンテナレイヤ」に記録される
キャッシュを活用できるように、プログラム開発時は共通イメージをベースにすると良い
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2919986/e93d15dd-f80d-7b1f-1a8a-374c2cc0ce36.png)
### メリット②：複製が容易
#### **Dockerhub**
Dockerhubには多様なイメージが蓄積され、コマンド一発で入手可能
  (RPMのようなアプリケーションパッケージのイメージで利用する)
Githubなどとの同期により自動イメージ化できるので、配布も楽
なお、プライベートにDockerhub相当の機能を作るソフトも提供されている
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2919986/1ae9c075-f429-fdf5-caa1-893459dd49ce.png)
#### **リポジトリ利用の利点**
リポジトリ内ではコンテナのイメージレイヤ単位で管理されているため、
パッケージの配布も効率的に処理することができる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2919986/9d6a9a9e-544e-1025-0a0d-8283d3a1a7a9.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2919986/8e4b89c6-5496-cd38-3fe6-3200dc06dd1e.png)

<a id="#ref"></a>
# 参考文献
- [Docker入門（第一回）～Dockerとは何か、何が良いのか～ | さくらのナレッジ (sakura.ad.jp)](https://knowledge.sakura.ad.jp/13265/)
- [【連載】世界一わかりみが深いコンテナ & Docker入門 〜 その1:コンテナってなに？ 〜 | SIOS Tech. Lab](https://tech-lab.sios.jp/archives/18811)
- [Dockerとは - 入門 Docker (y-ohgi.com)](https://y-ohgi.com/introduction-docker/1_introduction/docker/#2
- [さわって理解するDocker入門 第1回 | オブジェクトの広場 (ogis-ri.co.jp)](https://www.ogis-ri.co.jp/otc/hiroba/technical/docker/part1.html)
C言語のCUIでのコンパイルから実行まで

## (1)適当なエデイタを使用し下記ファイル(aaa.c)を作成
```c:aaa.c
#include <stdio.h>

int main(void){
    printf("hello me\n");
    return 0;
}
```

## (2)コンパイル
＊GNUのフリーであるgccを使用
＊aaa.c:作成ファイル、hello:実行ファイル名
＊<font color="red">**-o**</font>オプションは実行ファイル名指定
```
$ gcc aaa.c -o hello 
```

## (3)実行して「hello me」が出力されるのを確認
```
$ ./hello
hello me
$
```
AWSにおけるアカウントとユーザーの違い

# はじめに
AWS Organizationsを組むにあたって
AWSにおけるアカウントとユーザーの概念を正しく理解できていなかったので記事にしてみました

# AWSアカウントってなに
普通、アカウントって言われるとGoogleアカウントのような個人のものを想像しますよね
実際新規にJoinした会社なんかでも「〇〇さんのAWSアカウント作っといたよ〜」みたいなコミュニケーションがあるのではないでしょうか？
しかし、それは厳密には間違っているのです

誤) 「〇〇さんのAWSアカウント作っといたよ〜」
正) 「〇〇さん用のユーザー作っといたよ〜」

じゃあAWSアカウントってなに？？？って所ですが
AWSアカウントとは**AWS環境**のことです
Dev・Stg・Prod等の環境のことを示しています。

例えば、AWS Organizationsに「AWSアカウントを追加」とありますが
これは特定の誰かを追加するのではなく、環境そのものを追加することを意味しています
(ややこしい)
![AWS Organizations](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256055/495061e8-bb5d-aaad-d448-67c934237406.png)


# ユーザーってなに
こっちがGoogleアカウントのような個人のものになります
ただし、ひとくちにユーザーと言っても2パターンの違いがあります

## IAMユーザー
IAMサービスにあるユーザー
ポリシーをアタッチしたり、グループに追加したりで権限を制御する


## IAM Identity Center(旧SSO)ユーザー
IAMIdentityCenterにあるユーザー
IAMにあるユーザーとは別のものになるので両方に存在する場合もある
AWS的にはこちらでユーザーを管理するのを推奨している(マルチアカウント構成&SSO)

# おわり
簡単にですが、AWSにおけるアカウントとユーザーの違いを書いてみました
誰かの参考になれば幸いです！
Databricksのデータ追加UIを用いたデータのロード

[Load data using the add data UI \| Databricks on AWS](https://docs.databricks.com/ingestion/add-data/index.html) [2022/11/28時点]の翻訳です。

:::note warn
本書は抄訳であり内容の正確性を保証するものではありません。正確な内容に関しては原文を参照ください。
:::

:::note info
**プレビュー**
本機能は[パブリックプレビュー](https://docs.databricks.com/release-notes/release-types.html)です。
:::

様々なソースからDatabricksにデータを簡単にロードするためにデータ追加UIを使うことができます。![](https://docs.databricks.com/_images/create-icon.png)**New > Data**をクリックします。

# Databricksにどのようにデータを追加するのですか？

データ追加UIを用いたデータのロードには複数の方法が存在ます。

- CSVファイルからDelta Lakeテーブルにロードするには、**Upload data**を選択し、[データアップロードUI](https://docs.databricks.com/ingestion/add-data/upload-data.html)にアクセスします。
- レガシーDBFSファイルアップロードを使うには**DBFS**を選択します。
- 様々なデータソースへの接続を設定するためのサンプルノートブックを起動するためにその他のアイコンをクリックします。

データソースの完全な一覧に関しては、[Databricksにおける外部データの取り扱い](https://qiita.com/taka_yayoi/items/09348912a92a24441c40)をご覧ください。

# Partner Connectによるデータの追加

Databricksパートナーコネクトプログラムは、ほとんどのエンタープライズデータシステムに容易に接続するために独立ソフトウェアベンダーによって綿タンスされているインテグレーションを提供します。以下の指示に従いデータ追加UIを通じてこれらの接続を設定することができます。

- [Connect to Fivetran](https://docs.databricks.com/partners/ingestion/fivetran.html)

:::note
**注意**
Fivetranへの接続を作成するにはDatabrickワークスペース管理者である必要があります。接続がすでに存在する場合には、Fivetranのアカウント管理者があなたをアカウントに追加する必要があります。
:::

### Databricks 無料トライアル

[Databricks 無料トライアル](https://databricks.com/jp/try-databricks)
ubuntu serverにubuntu Desktopを入れる方法

## upgradeのためにネットワークを設定する。＊下記参照
https://qiita.com/sei_yu/items/d0e91b142ec12f2b5adf

## パッケージのupdateとupgradeを行う。
```
$ sudo apt update
$ sudo apt upgrade -y 
```

## ubuntu Desktopをインストール
＊<font color="red">**３０分くらい**</font>かかる。
```
$ sudo apt install ubuntu-desktop
```

## 再起動
```
$ reboot 
```