OmniAICreator/Qiita-1.07M huggingface dataset:
おすすめテック系ポッドキャスト紹介

本記事は[こちら](https://zenn.dev/isana/articles/recommendtechpodcast)からの転載になります。

## モチベーション
筆者はラジオ大好おじさんです。昔はAMラジオを良く聞いていた(TBSラジオがメイン)のですがエンジニアになってからはテック系ポッドキャストにハマっていて、情報収集源のメインとなっていますのでテック系ポッドキャストは良いぞっていう話と軽くおすすめ番組の紹介をします。

## 前提:テック系ポッドキャストを聞いても技術力は身に付かない
はじめに重要な前提を書いておきます。ポッドキャストを聞いただけでは技術は身に付きません。なので、エンジニアとしての成長みたいなものを求めてポッドキャストを聞くのはちょっと違うと思うのでそこは誤解のないように注意しましょう。

## テック系ポッドキャストのメリット
筆者が考えるテック系ポッドキャストを聞くメリットは以下です。

### 自分が何について"知らない"のかを知れる
ポッドキャストで聞けるのは、何らかの専門性を確立された方々のお話しです。データベースのつっこんだ話だったり、設計の詳しい話だったり、セキュリティだったり、トピックはエピソードによって様々ですが、とにかく知らない単語や概念が沢山出てきて普段の業務の外の世界に触れることになります。そういった情報をストックしておくことで今後身につけたい技術や勉強するトピックの指針になります。また、何か困った時に解決策を導き出すきっかけになったりもします。

### モチベーションが上がる
ポッドキャストで話されている方々は例外なく皆、無茶苦茶楽しそうに技術の話をします。そのような世界に触れることで、「多分頑張ったら今よりももっとエンジニアリングが楽しくなるだろう」という気持になります。

### "ながら"で聞ける
音声コンテンツ全般に言えるのですが、運転や家事をしながらインプットが出来るのは時間効率がめっちゃ良いです。通勤電車では本、歩いている時はポッドキャストという使い分けも良い感じだと思います。(コロナ渦で通勤しているエンジニアは少ないとは思いますが)

### めっちゃおもしろい
それは単なる好みだろって感じではありますが、一種のコンテンツとして単純に面白いです。これはラジオというメディアに共通する感覚ですが、ある世界観を持った複数の人物が嬉々として語り合う様子というのは大変に好奇心を刺激する面白さがあると思います。

## おすすめ番組
という訳でここ最近のおすすめ番組を簡単にご紹介します。

### e34.fm
https://e34.fm/
メルカリのSREである[deeeet](https://twitter.com/deeeet)さんとTopotalのCTOである[れい](https://twitter.com/rrreeeyyy)さんの二人によるSRE関連のトピックを主に扱うポッドキャストです。海外のカンファレンスやテックブログなどの最新情報を紹介する`news`と毎回ゲストを招いてゲストの方の専門分野についてかなりディープなトークをする`main`の二部構成になっていて、1エピソードあたりの情報量が圧倒的に多いです。ここ最近のイチオシ番組です。

### phpの現場
https://php-genba.shin1x1.com/
2017年から続くPHPerにはお馴染みの番組です。ホストは[新原](https://twitter.com/shin1x1)さんです。毎回PHPを使っている開発現場からゲストを招いてそれぞれの現場特有の課題や解決策、技術選定、マネジメント、アーキテクチャ、時にはカンファレンスの裏側など幅広いトークを聞けます。内容は各エピソードごとにバラエティに富んでいるのでPHPer以外の方にも広くおすすめです。筆者は配信日は無視してショーノートをザっと見てその時気になったエピソードを聞いています。エンジニアの世界は変化が早いものですが、PHPの現場は古いエピソードでも色褪せない現場の生の声が聞けるので面白いです。

### ajito.fm
https://ajito.fm/
ajito.fmも2017年から続く有名な番組です。ホストはVOYAGE GROUP fluctのCTOである[suzuken](https://twitter.com/suzu_v)さんです。毎回社内外から複数名のゲストを呼んで技術領域に限らずかなり幅広いトピックについてトークをされています。個人的に特筆しておきたいのは、伝わってくる`楽しそうさ`が圧倒的である点です。番組内でもよく言及される「飲み会回」というものが度々配信されており、それだけでも必聴かなと思います。収録場所の都合なのかコロナ渦以降、残念ながら配信が止まっています。

### texta.fm
https://anchor.fm/textafm
texta.fmは2020年から配信されている比較的新しめの番組です。ホストはPIXTAのCTOである[やさいち](https://twitter.com/_yasaichi)さんと[t_wada](https://twitter.com/t_wada)さんです。`パーフェクト Ruby on Rails 【増補改訂版】`を毎回一章ずつ取り上げwebアプリケーションの設計にまつわるトークをしています。Railsに関する番組っぽいんですが全然そんなことなくて、割と普遍的なアーキテクチャの話が出てくるのでRailsエンジニア以外の方にもおすすめです。個人的には実用的な内容が多いなと感じており、毎回エピソードを聞く度にリファクタリングしたくなります。

## まとめ
テック系ポッドキャストのおすすめを紹介しました。この他にもまだまだ面白い番組が沢山ありますので別の機会に紹介できればと思います。また、この番組面白いよっていう情報があれば是非教えて頂きたいです。
Codeigniter4とLaravelのミドルウェア比較

最近はCodeIgniterを使うことが多いので
Laravel(7系)とCodeigniter4を比較しながらミドルウェアについてのメモです.
ちなみにCodeigniter4ではフィルタ-と呼びます

`セッションで保持している年齢が20歳未満ならhomeにリダイレクトするというミドルウェアにします`
### ミドルウェアの登録

 - Laravel 

```app/Http/Kernel.php
protected $routeMiddleware = [
    'checkAge' => \App\Http\Middleware\CheckAge::class
]
```

- Codeigniter 

```app/Config/Filters.php
public $aliases = [
        'checkAge' => \App\Filters\CheckAge::class
];
```

### ミドルウェアの定義
20歳未満ならhomeへリダイレクトさせます

- Laravel 

```app/Http/Middleware/CheckAge.php
<?php
namespace App\Http\Middleware;

use Closure;

class CheckAge
{
    /**
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        if (session("age") < 20) {
            return redirect('home');
        }
        return $next($request);
    }
}
```

- Codeigniter 

```app/Filters/CheckAge.php
<?php
namespace App\Filters;

use CodeIgniter\HTTP\RequestInterface;

class CheckAge implements FilterInterface
{
    public function before(RequestInterface $request)
    {
       if(session()->get('age') < 20){
         return redirect()->to('home');
      }
    }
```

### ルートに対し年齢確認のミドルウェアを指定する
- Laravel 

```routes/web.php
// 登録したミドルウェア名で検証する
Route::group(['middleware' => 'checkAge', 'prefix' => 'adult'], function() {
    Route::get('/member', 'MemberController@index');
});

```

- Codeigniter 

```app/config/Routes.php
$routes->group('adult', ['filter' => 'checkAge'], function($routes)
{
    $routes->get('member', 'MemberController::index');
});

```

結論 Laravelで良くね？
テーブル内チェックボックスのクリック範囲拡大方法


# テーブル内チェックボックスのクリック範囲拡大方法
### イメージ

このようなイメージのサンプルを作成してみたので、共有したいなと思います。

<img width="300" alt="sample" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/308256/5cecc5cf-0963-4ed8-01ca-fc7ed905f42d.gif">


### ポイント

* td要素をクリックしたときにcheckboxをクリックするjsイベントを作成
* バブリングを防止

### サンプルコード

```html:index.html
<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <style type="text/css">
        .pointer, #test_1, #test_2 {
            cursor: pointer;
        }
    </style>
    <title>click test</title>
  </head>
  <body>
    <table border="1">
        <tr>
            <th width='200px'></th>
            <th>名前</th>
            <th>年齢</th>
        </tr>
        <tr class='box'>
            <td class='pointer'><input type="checkbox" id="test_1"></td>
            <td>田中</td>
            <td>27</td>
        </tr>
        <tr class='box'>
            <td class='pointer'><input type="checkbox" id="test_2"></td>
            <td>佐藤</td>
            <td>42</td>
        </tr>
    </table>
    <script type="text/javascript" src="https://code.jquery.com/jquery-3.4.1.min.js"></script>
    <script type="text/javascript">

        // チェックボックスを含む td 要素をクリックしたときに、チェックボックスをクリック
        $('td:has(input[type=checkbox])').on('click', function(e){
            $(this).find('input[type=checkbox]').click();
        });
        // バブリングを防止
        $('td input[type=checkbox]').on('click', function(e){
            e.stopPropagation();
        });

      </script>
  </body>
</html>
```


# 参考
* tableのtdにあるcheckboxのON/OFF制御
    * https://gist.github.com/ikolabo/909c00882cd30c487602
* Stackoverflow（チェックボックスのスタイル作成）
    * https://stackoverflow.com/questions/39958290/styling-a-checkbox-without-the-label-tag/39959161

---
### 会社紹介

**株式会社 Mosaica**  
最先端テクノロジーで社会課題を解決し、持続可能な未来を創造する IT カンパニー。
AI ソリューション、クラウド統合、DX 推進、経営コンサルティングなど包括的なサービスでビジネス変革を支援しています。  

詳しくは [公式サイト](https://mosaica.co.jp/) までお気軽にご相談ください。
公式サイト： https://mosaica.co.jp/
VS Code で Re:view のアウトラインを表示する方法

## 前置き

Re:view の長文を Visual Code Studio で書くにあたり、アウトラインが無いと文章の構造を把握することが難しい。
そのため、アウトラインを表示させる方法を探し、ひとまず使えるレベルのアウトライン表示ができるようになったので、備忘録代わりに方法をメモしておく。

## 設定

Re:view のアウトライン表示のプラグインは見当たらないので、[CodeMap - Visual Studio Marketplace](https://marketplace.visualstudio.com/items?itemName=oleg-shilo.codemap) を使ってアウトライン表示を実現する。

方法は、`settings.json` に以下のコードを追加して `codemap` の設定を追加する。ここでは、見出しレベル5までアウトラインとして表示するよう設定している。

```json
"codemap.re": [
        {
            "pattern": "^(\\s*)===== (.*)",
            "clear": "=====",
            "prefix": "===== ",
            "icon": "none"
        },
        {
            "pattern": "^(\\s*)==== (.*)",
            "clear": "====",
            "prefix": "==== ",
            "icon": "none"
        },
        {
            "pattern": "^(\\s*)=== (.*)",
            "clear": "===",
            "prefix": "=== ",
            "icon": "none"
        },
        {
            "pattern": "^(\\s*)== (.*)",
            "clear": "==",
            "prefix": "== ",
            "icon": "none"
        },
        {
            "pattern": "^(\\s*)= (.*)",
            "clear": "=",
            "prefix": "= ",
            "icon": "none"
        },
        {
            "pattern": "!\\[img\\]",
            "clear": "![img]",
            "prefix": "<img>",
            "icon": "none"
        },
    ]
```

## 結果

次のように、見出しに応じたアウトラインが表示されるようになった。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/136890/a1e8e457-b589-277b-8b5a-b7d7828b0af4.png)
ユーザー人口獲得というプラットフォーム開発者の直面する困難を軽減するシステム開発

格差が広がる世の中、ICT業界もまた格差が広がっています。その格差の広がるの要因の一つにプラットフォーム開発者ではユーザー人口獲得の難しさというものがあります。せっかく既存のアプリよりも優れているアプリを開発してもユーザーを獲得できなければ既存のアプリを超えられないままです。ユーザーの人口がそのアプリの出来を左右するSNSやフリマアプリなどの開発者にはより重大な問題です。そんなユーザー人口獲得というプラットフォーム開発者の直面する困難を軽減するシステムを構想、開発します。

ずばり、既存のアプリがユーザーで賑わっているならそのユーザー像を新規アプリに写してしまえば良いというのがこのシステムの大まかな策略です。しかし、SNSから(Facebook,Twitter,Tiktok,etc)や、フリマアプリ（メルカリ,etc）などからそのまま新規アプリにユーザー像を写してやるというわけにはいきません（そういう行為が禁止されていたり料金が発生したりするから）。ではどのようにして既存アプリのユーザー像を新規アプリに写すのか。この解決法はずばりどんなアプリからでもアクセスできる共通のデータベースにユーザー像を載っけておくことです。もたろんすでにあるプラットフォーム(Facebook,etc)からはユーザー像を載っけることは望めませんがこのデータベースを利用してユーザー獲得をしたプラットフォームからはそこからデータベースに写されたユーザー像を新規アプリでも反映することができます。もちろん、展開できる新規アプリのジャンルはSNSやフリマアプリに限りません。ユーザー像としてデータベースに保存されるデータは自由に書き込めるので思いつく以上のジャンルのアプリを運用することができます。

ご清読ありがとうございます。これからもこのシステムについて記述していこうと思います。興味のある方、開発に協力してくれる方、文章が拙いと思う方、公開してるメールアドレスからご連絡ください。
【アプリ開発】プログラミング初学者向けのアプリ『Roooad(ロ---ド)』をリリースしました。

# はじめに
ポートフォリオ用に、個人開発アプリ`『Roooad(ロ---ド)』`をリリースしました！

『Roooad(ロ---ド)』は、プログラミング初学者のために、皆が歩んできたロードマップを見ることができるサービスです。

https://roooad-map.com/

開発期間は、約40日間です。
デザインが苦手だったので、他の方のデザインを参考にさせていただきました🙇‍♂️（cssは、一から書いたので少し時間が掛かりました。）

また、途中AWSでのデプロイで躓いて10日ほど費やしてしまいました…
何はともあれ、無事アプリ開発ができて良かったです。

# アプリについて
### 登場人物

- プログラミング初学者(閲覧・作成)
- 個人で、メンターや学習教材を販売している方の宣伝(作成)

### ユーザーが抱える課題

- 初学者には「学習の流れ・学習にかかる期間・言語選び」と`分からないことが多い`。他人の学習してきた手順や期間を参考にしたい!
- プログラミング関連の学習教材やサービスの認知をして貰いたい。


### 解決方法

自身の学習終了までのロードマップを公開＆他人のロードマップを見られるアプリケーション

### サービスを作った背景
このアプリを作った経緯は、`プログラミング学習での失敗`が理由です。

私がプログラミング学習を始めた際は、`「どういった学習の流れで、どれくらいの期間を必要とするのか」`ということが分からない状態で学習を進めていました。
そのため、独学でのプログラミング学習は明確なゴールが見えずに、挫折しそうになったり遠回りな学習をしたりということが多々ありました。

そういった経験から自分と同様に困っている方がいるのではないかと思い、`初学者の方が他人の学習の手順を参考にできるアプリ`を開発することに決めました。

## アプリの使い方
アプリの用途はシンプルで、2つです！

- ロードマップを閲覧する
- ロードマップを作成する

アプリの概要をページごとに紹介していきます。

### トップページ
![roooad-map.com_.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2000558/f3c322f3-d323-19b9-1984-c85454cf38fa.png)



新規登録/ログイン後、ロードマップ一覧ページに遷移します。

アプリの概要を確認してもらうため、ゲストログインを追加しています！ただし、ゲストログインをした場合、制作したロードマップは他の人も編集・削除できるので注意してください。

![roooad-map.com_rooads (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2000558/7a248084-7f12-f573-e44b-88c0f4594399.png)


ロードマップ一覧ページから、気になる人のロードマップを詳しく見ることができます！

![roooad-map.com_rooads_3 (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2000558/988c76eb-9129-40ff-7499-bfac0acc9096.png)



詳細ページでは、学習期間や詳細、ユーザー情報が詳しく見れます。
参考になる投稿には、いいねを押すことが可能です。また、投稿者のみ編集と削除アイコンが表示されるようになっています。

# 苦労したところ
### レスポンスデザイン
pc画面だとうまくいくけど、スマホサイズの画面だとデザインが崩れることが何度かありました。
特に円グラフを導入してから、サイズの変更が上手くいかず大変でした…

あとBootstrapを一部利用しましたが、9割デザインを1から行ったので、少し時間掛かりましたね。

### インフラ
個人的には、ここが一番大変で時間掛かりました。
記事が古くてSSL化が上手くいかなかったり、本番環境のデータベースが作られなかったりと気づけば10日過ぎていました。

一つのコマンドでおかしくなることも何度も体験したので、作業中はいつもドキドキしてました。
もし時間に余裕ができたら、AWSのやり方をまとめてみたいと思います。


# 使用技術

- Ruby 2.6.5
- Rails 6.0.0
- bootstrap5
- AWS
  - EC2
    - Amazon Linux 2
  - S3
  - ELB
  - Route53
  - ACM

### 主要なGem

- devise (認証)
- cancancan (認可)
- rails_admin (管理画面)
- cocoon (ネストフォーム部分)
- kaminari (ページネーション)
- chartkick (円グラフ)
- rspec-rails (テスト)
- rubocop (自動修正)
- mini_magick (画像)
- gretel (パンくず)


# おわりに
　ほとんど独学で進めていたので、解決まで時間は大幅にかかりましたが、エンジニアとして必要な検索力や質問力が身についた気がしています。
数ヶ月の間、相談に乗ってくれた方々、本当に感謝しています。また、無料で質問できるサービスteratailでの対応してくださる方々にも大変お世話になりました…

　自分のアイディアを0から作り出すプログラミングは、大変なことも多いですがとても面白くて楽しいです。また、アプリを開発している中で、アイディアを形にできるエンジニアという職業がより魅力的に感じるようになりました。
これからはエンジニアとして働けるように、就活を頑張ります！！

　最後にプログラミング学習は無償で助けて貰ってばかりだったので、自分もいつか誰かの役に立てるよう頑張っていきます。
ここまでご覧いただき、ありがとうございました！
【Vue.js】算出プロパティの基本

#はじめに
こんにちは！
今回は【Vue.js】算出プロパティの基本についてアウトプットしていきます！

#算出プロパティとは
関数によって算出したデータを返すことができるプロパティ。
算出プロパティでは、`computed`を使用します。


#書き方・解説
今回は文字列を反転させるプログラムを例として解説していきます。

```HTML:HTML
<div id="app">
  <p>
    {{ message.split('').reverse().join('') }}
           　　　　　　　 <!--⏫文字列を反転させる-->
  </p>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue@2.5.16/dist/vue.js"></script>
```
```:Vue.js
var app = new Vue({
  el: "#app",
  data: {
    message: 'Hello Vue.js!'
  }
})

```
![スクリーンショット 2021-10-17 16.46.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2114750/681a04cb-4b5f-1f9b-1a2f-19cd965a8301.png)


今まで通りでしたら、上記のように記述していたと思います。
しかし、他のコードや、テンプレートの中に数多く記述してしまうと見にくく、のちに変更するときにわかりにくくなるデメリットが生じます。
このような`複雑なロジック`、`再利用性の高いもの`は算出プロパティを使用することを推奨します。

```HTML:HTML
  <p>
    {{ reversedMessage }}
  </p>
```
```Vue.js
  computed: {
    reversedMessage: function() {
      return this.message.split('').reverse().join('')
    }
  }
```
![スクリーンショット 2021-10-17 16.46.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2114750/681a04cb-4b5f-1f9b-1a2f-19cd965a8301.png)

上のようにしっかり反映されました。
記述方法は、今までのメソッドと同じ感じなのですが、多少違うところがありますので、別記事で解説します！


#まとめ
・複雑なロジック、再利用性の高いものは算出プロパティを使用することを推奨する。

#最後に
今回は算出プロパティの基本についてアウトプットしました。
今回の記事を読んで質問、間違い等あればコメント等頂けると幸いです。

今後ともQiitaにてアウトプットしていきます！

最後までご愛読ありがとうございました！
ドメインの不必要な自動更新に注意（クレカ払いの場合）

# ドメイン１年でいらなくなる説
適当に作った作品にドメインを割り当てても、大抵の場合１年後にはいらなくなることが多い。
大抵のものは日の目を浴びることなく、ネット空間のデブリとなるのは、悲しい現実である。

# お名前.comは自動更新を明確に通知してくれない

クレジットカードで支払い先を登録してドメインを取ると、今後は自動で更新されるという仕様になっているようです。
**この点は、わかりやすく明示されていません。**
おそらく、自動更新のことを利用者が忘れた方が、お金が稼げるので、わざわざわかりやすくする動機付けは運営側にはないようです。

## 唯一の手がかりはWhoisに関するメール

**Whois情報正確性確認**というメールが来たら、ドメインの更新の必要があるか考えましょう。

Whois Data Reminder PolicyというICANNの定めたルールでは、この種のメールをドメイン管理者に送らねばならぬという約束事なので、これは絶対に守られます。しかし、ドメイン期限の前日に送信されるので、あまり親切ではありません。おそらく、自動更新を切るまでの猶予が短い方が、惰性でドメインが自動更新されて、お金が稼げるので、わざわざわかりやすくする動機付けは運営側にはないようです。

更新の必要がない場合は、即座に以下の手順でドメイン更新を止めましょう。

https://www.onamae.com/guide/p/19

# 我々は最も簡単にデフォルトに左右されてしまう

- デフォルトでは特に明示しない限り臓器提供をしない国
- デフォルトでは臓器提供がされるが、明示的に拒否することができる国

これらの２種の国では、臓器提供の割合が異なると言います。
確かに、何事も考えるのはめんどくさいですし、その上で行動をうつすのはさらに面倒くさいです。


https://www.jumonji-u.ac.jp/sscs/ikeda/cognitive_bias/cate_d/d_31.html


しかし、インターネットのサービスでは、スクリーンの裏側で緻密な計算がなされています。
A/Bテストのようなことをすることで、継続的に課金されるという目的は簡単に達成されてしまいます。

**もしサービスを設計する側に回る場合は、とても見習うべきですが、A/Bテストの対象が私たちであった場合には私たちも注意を払わなければならないと感じました。**

というわけで、今年も使わないドメインを更新してしまいました。ぴえん。
【Mac版】AndroidStudioの編集画面(エディタ)の文字サイズを変更する方法

Android Studio　→ Preferences... の順に選択
![スクリーンショット 2021-10-21 20.17.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/494487/2d8e7eb9-f434-d9bf-ee8b-7b18d9100d24.png)

フォントをタップしてサイズを変更
![スクリーンショット 2021-10-21 20.18.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/494487/99ed4ce4-a3ea-5e14-eab6-09ebcf5204bb.png)

これでサイズが変わります。
　

ネットで調べたらメニューバーから [File] > [Settings]を押してください。

と書いてあるものの、『そんなものどこにもないやんけ、、、』と思い公式ページ見たら（macOS では [Android Studio] > [Preference]）をクリックします。

みたいな感じで書いてあったのでもっとわかりやすく書け！！！と思いつつ、悩む人いるかなーなんて思ったので、忘備録として残しました。

上記で悩んでいる方がいたら、参考にしてください。
3)githubにpush後、pull requestを出すまで



## 1.pushあとgithubに戻ると通知がくる

![スクリーンショット 2021-10-21 20.13.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1466470/92107cd4-6672-8c4c-4aa2-5a9c17551989.png)

## 2.押したらコメントを記入

![スクリーンショット 2021-10-21 20.14.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1466470/6c22000d-7f0a-9660-85b6-05cbc6dc4d45.png)

![スクリーンショット 2021-10-21 20.14.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1466470/52de49e0-3c8c-fb92-6a72-ce4dbbf092b4.png)


## 3.マージをする

本当は他の人にレビューを依頼しますが今回は自分でマージのやり方を紹介します。

![スクリーンショット 2021-10-21 20.15.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1466470/855ba66b-bf06-1d43-40a6-e673a23a9f86.png)


![スクリーンショット 2021-10-21 20.15.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1466470/a69a3820-4acc-335c-4623-d1c21b77b7e3.png)

![スクリーンショット 2021-10-21 20.15.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1466470/d5905c87-63fd-194c-ebdb-36a6e2436bed.png)


## 4.ローカルに戻りmainブランチに戻る

```shell
git checkout main
```

![スクリーンショット 2021-10-21 20.20.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1466470/632c3227-284d-2401-a68f-b8fe8a51e9a6.png)


## 5.リモートの内容を取り込む

```shell
git pull origin main
```

![スクリーンショット 2021-10-21 20.23.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1466470/ead79663-0981-5966-0574-0cdf2104de3e.png)


## 6.開発するときはまたブランチを切る
JavaScriptのコンストラクター関数について

#コンストラクター関数について
こｎコンストラクター関数とは新しく「オブジェクト」を作成するための雛形となる関数です。通常の｛｝構文では１つのオブジェクトを作成します。コンストラクター関数を利用すると似たようなオブジェクトを複数作成することができます。

コンストラクター関数には２つの慣習があります。
・　名前は大文字で始める。
・　コンストラクター関数を呼び出す際は'new'演算子を用いて実行する。

早速コードで確認してみましょう。

```JS:JS
function Person(name, age) {

    this.name = name
    this.age = age
}

const admin = new Person('Tom', 30);

console.log(admin);
```

1.　まずPersonというコンストラクター関数を用意します（大文字に注意）
2. new演算子を用いて新しいオブジェクトを作成し（インスタンス化）adminという変数に格納します。


ここでnew演算子とは何かを説明します。
##new演算子
new 演算子を用いて関数が実行された場合、次のような処理が行われます:

1. 新しい空のオブジェクトが作成され、 this に割り当てられます。
2. 関数本体を実行します。通常は新しいプロパティを追加することで this に変更を加えます。
3. this の値が返されます。

先程のコードで考えると

```JS:JS
function Person(name, age) {
    // this = {}; 暗黙
    this.name = name
    this.age = age
    // return this; 暗黙
}
const admin = new Person('Tom', 30);
console.log(admin);
```

ここでコンストラクター関数から返却されるreturnについてもう少し詳しく見てみましょう。
通常、コンストラクタは return 文を持ちません。コンストラクタの仕事は、必要なものをすべて this の中に書き込むことであり、this が自動的に戻り値となります。次の２ケースをコードで確認してみましょう。
１．return がオブジェクトと一緒に呼ばれた場合、this の代わりにオブジェクトが返されます。

```JS:JS
function Person(name, age) {
    this.name = name
    this.age = age
    return  {} //空のオブジェクト
}
const admin = new Person('Tom', 30);
console.log(admin); //=> {}　空のオブジェクトが出力される

```

２．　return がプリミティブと一緒に呼ばれた場合、それは無視されます。

```JS:JS
function Person(name, age) {
    this.name = name
    this.age = age
    return  1; //プリミティブ型
}
const admin = new Person('Tom', 30);
console.log(admin); //=> admin　が出力される

```

##まとめ
・複数の似たようなオブジェクトを作るために、コンストラクタ関数を使うことができます。
・コンストラクタ関数は new を使ってのみ呼び出されるべきです。この呼び出しは、最初に空の this を作成し、必要な処理が行われた this を最後に返すことを意味します。

##参考
Udemy： 【JS】ガチで学びたい人のためのJavaScriptメカニズム
現代の JavaScript チュートリアル:https://ja.javascript.info/logical-operators
holiday_japanを使って平日のみcronを実行させる


gemのholiday_japanを使って平日のみ（土日祝日以外）taskが実行されるようにしたい。


##前提
現在のQiitaの記事投稿状況をSlackに通知してくれるbotがあり、その通知を平日19時に実行されるようにしたい。
gemのholiday_japanを使用したい。

- ```exit```の引数がtrueだったら正常終了で0、falseの場合1を引数に指定したとみなさる

参考：https://docs.ruby-lang.org/ja/latest/method/Kernel/m/exit.html

```scripts/check_holiday
#!/usr/bin/env ruby
require 'bundler/setup'
require 'holiday_japan'

exit(HolidayJapan.check(Date.today))
```

- 「平日19時」だけ実行したい
- job_typeを指定することでコマンドをつなげられる
- ```||```は左側が値が返ってくる（=true）のとき、右側も実行される

```config/schedule.rb
...
job_type :script, "cd :path && :environment_variable=:environment bundle exec :task"
every '0 19 * * mon-fri' do
  script 'scripts/check_holiday || bundle exec rake namespace名:task名'
end
```
上記が実行されると下のコマンドで実行されることになる

```
0 19 * * mon-fri /bin/bash -l -c 'cd /futurama && RAILS_ENV=production bundle exec scripts/check_holiday || bundle exec rake namespace名:task名'
```


##参考

https://github.com/javan/whenever

https://deep.tacoskingdom.com/blog/42
2)gitでブランチを切ってgithubにpushするまで

前回githubからcloneしてくるところまでを行いました
今回は切ったブランチでpushするまでを説明します。

前回のはこちら
https://qiita.com/magisystem0408/items/3955a4ae607047283300

## 1.ファイルを編集

![スクリーンショット 2021-10-21 20.17.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1466470/d4bfbb43-f544-a8db-b826-5354e96a509e.png)


## 2.コンソールで現在ブランチが切れているかを確認。

![スクリーンショット 2021-10-21 20.02.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1466470/f6cac075-e0a7-0fd5-e1c2-7af5d47f7ab8.png)


## 3.リモートリポジトリの送る先が登録されているか確認。


```shell
git remote show origin HEAD

HEADは現在のブランチ
```

![スクリーンショット 2021-10-21 20.03.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1466470/e9c31fe6-ec32-deeb-1ab2-6a5763ed4f51.png)


## 4. gitステージング環境にあげる

わからない人は、webのフォームでいう、フォームに入力している感じ。

ドットは全てのファイルをあげるという意味

```shell
git add .

git add index.html
※ あげたいファイル/ディレクトリをgit addの後ろに指定する。
```

![スクリーンショット 2021-10-21 20.06.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1466470/301a8182-cccd-bf81-a3ec-e63f8ffa652f.png)



## 5.あげるファイルを確定させる

フォームでいうフォーム押すと確認画面が出てくるあの場面

```shell
git commit -m 'ここに変更内容を記述'
```

![スクリーンショット 2021-10-21 20.07.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1466470/c529bf50-aaed-2c8b-5872-b9fe9043cccc.png)


## 6.リモートリポジトリにあげる

```shell
git push origin HEAD
```

![スクリーンショット 2021-10-21 20.08.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1466470/c1cbe280-df02-d4c3-6420-9f61ec887f8f.png)
Xcode No such module 'ライブラリ名'エラーの処方箋

## 今回発生したエラー
xcodeをよく使っている人なら遭遇したことがあると思います。
自分も重いリポジトリをクローンした際の読み込み時によく出会します。
普段ならCleanすれば解決できることが多いですが、今回のはできなく他の記事にも書かれていなかったのでケーススタディとして共有します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/552896/6fae9d13-d6cd-27d2-0448-e3681a9c7db4.png" width=200>
なんとも簡単そうなエラーメッセージですが原因はいくつかあり、それら一つずつ試していくしかありません。


## 対処法
これはその名の通りモジュールの読み込みが正常に行かなかった時に発生します。
対処法は他の記事でも同じく記載がありますがいくつかあります。

### ① CleanBuildFolder(Productタブ > CleanBuildFolder)

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/552896/abcd0c28-2405-967f-d4f0-cdc2702a54c4.png" width=200>

## ② DerivedDataの削除(自分はこれで解決したことなないですが、これで解決できたという方も散見されたので)
```
rm -rf ~/Library/Developer/Xcode/DerivedData/*
```

## ③ Xcodeの再起動、Macの再起動
 
おそらくここまでやってみてそれでも解決しない場合はちゃんとした読み込まれない原因があると思っていただいて間違いないと思います。

## ④ Product > Scheme > ManageSchemesを開く、
いつくか項目が出てくると思いますが全ての項目のShowとSharedにチェックを入れてClose
その後CleanBuildFolderをして完了してからビルド


## 【番外編】そもそもシミュレーターではビルドできないプロジェクトである可能性

僕はこれでした。。アプリ内でカメラをコアに使うプロジェクトとかではおそらく実機でしかビルドできないようになっていることがしばしばあります。実機を繋いでビルドしてみましょう。

## 確認ですが...
最後に確認ですが、今開いているプロジェクトは **.xcworkspace** ですよね。。？
まさかとは思いますがpodsを入れていて.xcodeprojを開いていれば今すぐ閉じましょう。笑
（当たり前すぎるのですが私自身寝ぼけて一度だけしたことがあるので、、笑）
GoのポインタがよくわからなかったのでJSに置き換えて考える

# はじめに
備忘録です。
JSで開発している人がGolangを触ると  `&` や `*` で何だこれとなると思います。
なので、何をしているかJSに置き換えてみました。
個人解釈なので、認識違いがあるかと...


## Goにおける `&`
「参照渡し」を明示的に行うためにつける。(Goは基本「値渡し」のため)

```golang
func main() {
  name := "名前"
  p = &name // 明示的に参照渡しする 別アドレスにnameのアドレスに紐付かせるイメージ
  name2 = name // 値渡し 別アドレスに別の値として格納
  p = "ポインタ君"
  name2 = "値渡し君"
  fmt.Println(name, p, name2)
  // ポインタ君, ポインタ君, 値渡し君
}
```


```javascript
const a = { p: 'ap' };
const b = obj; // 参照渡し
const c = { ...obj }; // New Object で違うメモリ使う
b.p = 'bp';
c.p = 'cp';
console.log(a, b, c);
// { p: 'bp' }, { p: 'bp' }, { p: 'cp' }
```

## Goにおける `*`
TSの型みたいなもの
ポインタ型ですよって言っているイメージ。

```golang
type PointName struct {
  FirstName: *string,
  LastName:  string,
}

func main() {
  firstName := "名"
  name:= &PointName{
    // FirstName: firstName, これだとエラーになる -> ポインタ型じゃないから
    FirstName: &firstName,
    LastName: "姓",
  }
  fmt.Println(*name.FirstName) // ポインタ使用している値は *　をつけると参照先の値が出力できる
  fmt.Println(name.FirstName) // これだと firstName のアドレスが表示される
}
```

###### 参考記事
https://qiita.com/Sekky0905/items/447efa04a95e3fec217f
仮想化学実験計画(0)経歴，目標

 初投稿になります．
先に視野を共有しておくために経歴とスキルを述べておくことにします．

筆者経歴
 年齢:22
高校(工業化学)→大学3年(工学部化学科)
浪人？いいえ，リモートに適応できず留年です……

スキル(ここでは，プログラミングの経験という意味で)
 タイトルにもあるように，無です．
PCを組む，ブラウザで調べることはできるものの，プログラムはコピペだけ．
この記事の"筆者経歴"に帯をつけたりプログラム部分の背景を黒くするのは無理です(今は)
GColabを用いてSMILEsから構造式へ変換するプログラムをコピペして動いた．
これが2年ほど前です．

最終(大きな)目標
(これがないとプログラミングという手段を採りようがありませんね．)
 コンピュータ内での仮想化学実験
(かなり大きく出たな……と自分でも思います．筆者には頭でっかちな部分があります．)

 目標を腑分けしましょう．化学実験というのは計画，実験，計測，考察の4つに分ける事が可能です．分類の精度について考えると横道へ逸れるのでこのまま行きます．
このうち計測は物理学の発展によって機器分析という恩恵を享受しています．(筆者は分光学についても理解はかなり浅いです．恥ずかしいですがもはや文系といっても差し支えないのでは)
また，計画と考察については指針に直結するという側面もあってスルーするのは難しいでしょう．
このように(消去法的に)実験が対象になる理由が出ましたが，化学実験が仮想上で行えるようになると，
・実験に伴う危険の減少
・環境へ影響を及ぼす実験廃棄物の減少
・並列に試行が可能→発展速度向上
といったメリットが期待できます．(むしろこっちの方が本筋に沿っているはずです．)

 実験の中でも実際の実験についてフォーカスを当てて仮想化(電子化)していくことにしましたが，その"実際の実験"にも詳細に分割していくとほとんど無限に選択肢がある上に仮想化のしづらい操作が大半を占める(と，筆者は思っています．このあたりの実験の仮想化に関する思想はインフォマティクス系の人にとても強くあるとも思っています．)

こうした状況の中で，化学実験の中でも絶対に外して通れない動作かつ現実的に仮想化が可能な領域として"加熱"が挙げられます．(仮想化による大きな恩恵と計算的知見の重なった領域とも言えます．)

というわけで，(筆者自身の学習も兼ねて)加熱操作についてシミュレーションをしたいです．

(ここから文語寄り)

Blueprint としては，現実のフラスコ(始状態)のステータスを入力，加熱関数(エネルギー，時間)をかけて，現実のフラスコ(終状態)のステータスを得る，といった形にしたい．
(ほかにも付与したい機能のアイデアはあるが，まず骨組みとしてこういうものを．自らのスキルを考慮するともっと簡素な方が良いとさえ言える)

学習指針
 言語としてはすでに存在するデータセットを引っ張って使用するPython，Rを学習したほうが良い(はず，知見も多い)．また，終始多数のパラメータをもつのでそのような処理の方法を学習したほうが良い．

ここまでお読みいただきありがとうございました．(この台詞も更に良くできそうな余地がある．)
(外接球)「半径1の球に内接する正四面体(北海道大学2005年前期)」をsympyとVBAソルバーでやってみたい。

オリジナル
《問題》半径1の球に内接する正四面体の一辺の長さを求めよ．


# 問題

https://mathexamtest.web.fc2.com/2005/200510001/2005100010100mj.html#top-0104


# SymPyで

```python
# 半径1の円に内接する正三角形の一辺の長さの計算:3次元で使っています。
# 半径1の球に内接する正四面体の一辺の長さの計算
from sympy import *
var('r_2 x_2 y_2')
var('r_3 x_3 y_3 z_3')
x_2= sin(60*pi/180)
y_2=-cos(60*pi/180)
r_2=solve((0-x_2)**2+(1-y_2)**2-r_2**2)[1]
print("#2次元:半径1の円に内接する正三角形の一辺の長さ",float(r_2),r_2)
x_3=sin(60*pi/180)*r_3
y_3=cos(60*pi/180)*r_3
z_3=-sqrt(1**2-r_3**2)
r_3=solve((0-x_3)**2+(0-y_3)**2+(1-z_3)**2-(r_3*r_2)**2,r_3)[1]
print("#3次元:半径1の球に内接する正四面体の一辺の長さ",float(r_3*r_2),r_3*r_2)
#2次元:半径1の円に内接する正三角形の一辺の長さ 1.7320508075688772 sqrt(3)
#3次元:半径1の球に内接する正四面体の一辺の長さ 1.632993161855452 2*sqrt(6)/3
```

# VBAソルバーで
勉強中

# 参考

https://izu-mix.com/math/?p=590
1) githubでブランチを切るまでの手順

今あるプロジェクトファイルを追加する方法を説明します。
githubデスクトップで大体操作しますが今回はコンソール版を紹介します。

## 1. 空のファイルを作成します。
![スクリーンショット 2021-10-21 18.54.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1466470/ebe0d16e-c6af-292c-6e99-d00192fc0074.png)

## 2.作成したディレクトリを開きます。
![スクリーンショット 2021-10-21 18.55.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1466470/eac189f7-6608-a24b-5e62-1940d8e5b686.png)


## 3.Codeからgitcloneを選択してurlをコピー。
![スクリーンショット 2021-10-21 19.06.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1466470/2c13e5ef-1aaa-9a43-511a-1264e7e94f9a.png)


## 4.ターミナルでcloneする

```shell
git clone コピーしたコード
```
- クローン前
![スクリーンショット 2021-10-21 19.15.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1466470/7a2684d2-047c-7edd-d8c9-a7fb5064dc7a.png)

ちなみに、sshの設定を何も設定をしていないと
Permission denied (publickey).
というエラー出ると思うのでそうした場合httpsの方でcloneしてください

- クローン後、リモートリポジトリの内容がコピーされます。

![スクリーンショット 2021-10-21 19.17.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1466470/5a2aace0-3330-1dc9-7e74-ef325928f225.png)

## 5.gitignoreファイルを作成しリモートリポジトリにあげたくないファイルを書き込みます。

ex) envなど

![スクリーンショット 2021-10-21 19.30.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1466470/dc271592-cb52-8ee6-3894-0fb024969ca6.png)


## 6.ブランチを切ります。

```shell
git checkout -b feature/styles
※ 　-b　はブランチをきるという意味。
※　基本はfeature/追加する機能という形で書く。
```

以下のコマンドでブランチが切れているか確認

```shell
git branch
```

- 結果
![スクリーンショット 2021-10-21 19.25.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1466470/5305d863-3460-e9c4-abbb-336f778d9091.png)

##　ファイルを編集する。

![スクリーンショット 2021-10-21 20.17.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1466470/0b10a43e-8b6b-72c0-6927-d783a6d878cc.png)
【DB移行】 Oracle→PostgreSQL移行によるカラムの型変更

## はじめに
PHP(Laravel)で実装したアプリケーションにおいて、OracleからPostgreSQLのデータベース移行案件に携わりました。  
SQLの文法が異なるのは勿論ですが、データベースの移行時に思わぬところでカラムの型が変わってしまう箇所がありました。  
ソースコードにできるだけ影響がないようにするために、PostgreSQLのカラムの型を適切に変更する必要があります。  


## 環境
- Laravel 6.5
- Oracle 11g
- PostgreSQL 13.3


## char型のカラムをboolean型へ変更する
元々boolean型だったカラムが、移行によりchar型に変わってしまったケースです。  
データが入っているテーブルでは、単純にデータ型を変えるだけではうまくcastができずにエラーが出てしまいます。  
また、カラムによっては、default制約やnot null制約がついている場合もあり、そういったカラムについてはあらかじめ制約を外しておかないと、カラムのデータのキャスト時にエラーが発生します。  

### 制約を外す
対象のカラムに制約がついている場合、データのキャストのために外しておきます。

```
-- not null制約を外す
alter table <table> alter column <column> drop not null;
-- default制約を外す
alter table <table> alter column <column> drop default;
```

### 値のキャストと型の変更
PostgreSQLでは、```using句```を使用して、キャストとデータ型の変更を行います。

```
-- 型の変更
alter table <table> alter column <column> type boolean
	using case
		when <column> = '1' then true
		else false
	end;
```  


***case式***を使用して、文字列の'1'をtrueに、'0'をfalseに変更します。  


### 制約を付与する
外した制約を再度付与します。  

```
-- default値の設定
alter table <table> alter column <column> set default false;
-- not null制約をつける
alter table <table> alter column <column> set not null;
```


## text型のカラムをjson型へ変更する
元々text型だったカラムが、移行によりjso型に変わってしまったケースです。   

### 制約を外す
値のキャストのために制約を外しておきます。

```
-- default制約を外す
alter table <table> alter column <column> drop default;
```

### 値のキャストと型の変更
using句を使用して、キャストとデータ型の変更を行います。

```
-- 型の変更
alter table <table> alter column <column> type json using to_json(<column>);
```  


***to_json*** を使用して、columnの値をjsonにエンコードしたものでキャストします。


### 制約を付与する
外した制約を再度付与します。  

```
alter table <table> alter column <column> set default '[]'::json;
```


## LaravelでtoArray()メソッドを使うとTrailin data エラーが出る
LaravelではEloquentやSQLなどで吐き出された長いオブジェクトを連想配列に整形してくれる```toArray()```メソッドですが、```Trailin data```というエラーが出ることがあります。
このエラーは、selectしたカラムの中に、小数点以下の秒、つまり、マイクロ秒単位で値を持つtimestamp型のデータがあると、表示されてしまいます。  
Oralceでは問題なく```toArray()```メソッドでtimestamp型のデータをselectできていても、PostgreSQL
に移行すると該当の箇所で```Trailin data```が表示されることがあります。  
その原因は、PostgreSQLのtimestamp型はデフォルトでマイクロ秒単位でデータを保持する```timestamp型```であるためです。  
データ型の移行がうまくいっていないことにより、上記のケースが起こり得ます。

### データ型の変更
PostgreSQLでは、秒単位で（マイクロ秒単位は保持しない）データを持つ型として、```timestamp(0)型```とがあるので、こちらに型変換します。

```
alter table <table> alter column <column> type timestamp(0) using <column>::timestamp(0);
```


## 最後に
エラーが出た際に、「型が変わっている」というのは中々気が付きにくい箇所だなと、障害対応をしていて感じました。
今後のためにも、頭の片隅に入れておきたいです。
C言語でif文で星を出すだけのプログラム

初C言語です。
codeanywhareで作業しました。


```test.c
#include <stdio.h>

int score = 101;

int main (void)
{
    printf("[★]\n");

    if(score > 10)
    {
        printf("※\n");
        printf("⭐️\n");
        printf("✳︎\n");
    }
}
```

test.c　と同じディレクトリで下記を実行
```make test```

そして
./testを実行


```
cabox@test:~/workspace/test$ ./test
[★]
※
⭐️
✳︎
cabox@test:~/workspace/test$ 
```


```
int score = 1;
```

とかにすると最初のほしだけになります。
IDE初回使用とJavaプロジェクト簡単説明（メモ）

#####推荐プラグイン：

1.Easy Javadoc 注釈（クラス、方法、属性、再帰的な内部クラス）を素早く生成します。
2.EasyCode-Mybitis CodeHelper ショートカットの生成エンティティクラスなど
3.Key Promoter X ショートカットのヒント
4.Retsful Toolインターフェースアドレスと要求パラメータを生成する

#####Javaプロジェクトコード構造：
```
com.ruoyi     
├── common            					  //工具類
│       └── annotation                    //カスタムコメント
│       └── config                        //グローバル設定
│       └── constant                      //共通定数
│       └── core                          //コア制御
│       └── enums                         //汎用列挙
│       └── exception                     //共通異常
│       └── filter                        //フィルタ処理
│       └── utils                         //汎用類処理
├── framework         					  //フレームコア
│       └── aspectj                       //注釈実現
│       └── config                        //システム構成
│       └── datasource                    //データ権限
│       └── interceptor                   //ブロック
│       └── manager                       //非同期処理
│       └── security                      //権限制御
│       └── web                           //先端制御
├── ruoyi-generator   					  //コード生成（取り外し可能）
├── ruoyi-quartz      					  //タイミングタスク（取り外し可能）
├── ruoyi-system      					  //システムコード
├── ruoyi-admin       					  //バックグラウンドサービス
├── ruoyi-xxxxxx      					  //その他のモジュール
```

#####構築工具：
######Maven
-pom.xml （多くのModuleプロジェクトは循環参照問題に注意する）
-バージョン番号に依存して管理する
-一般的なコマンドの違い:

```
packageコマンドはプロジェクトコンパイル、ユニットテスト、パッケージ機能を完了しましたが、実行可能なjarパッケージ（warパッケージまたは他の形のパッケージ）をローカルのmaven倉庫とリモートmaven私服倉庫に配置していませんでした。

install命令はプロジェクトのコンパイル、ユニットテスト、包装機能を完成しました。同時に、実行可能なjarカバン（warカバンまたは他の形のカバン）をローカルのmaven倉庫に配置しました。

deploy命令はプロジェクトのコンパイル、ユニットテスト、包装機能を完成しました。同時に、良い実行可能jarカバン（warカバンまたは他の形のカバン）をローカルのmaven倉庫とリモートMaven私服倉庫に配置します。
```

####他の構築工具
-Grade

#####起動類&配置ファイル
```
-プロジェクト開始クラス
    -各種プロファイルの読み込み
    -@Configrationで起動プロファイルをロードする
    -@PostConstructコメントを使用して、指定方法は工事開始時に実行されます（共通シーン：更新キャッシュ）
→設定ファイル
    →ファイル形式
        -yaml（主流）
            -環境設定
            -文法上の注意事項
                1.大文字と小文字は敏感である
                2.インデントを使ってレベルの関係を表します。
                3.tab字下げ禁止、スペースキーのみ使用可能
                4.インデントの長さには制限がありません。要素の配置だけで、これらの要素は階層に属するということです。
                5.コメントは嗳を使う
                6.文字列は引用符でなくてもいいです。
            -重点設定項目
                1.ポート：server.port
                2.マルチ環境設定
                3.ファイルアップロードSize制限
                4.データソース
                5.その他
        -properties
```

#####処理タイミングチャート

```
sequenceDiagram
Client->>Controller:request要求
Controller->>Cient:レスポンス
Controller->>Service:呼び出しインターフェース
Service->>Impl:呼び出し実現クラス
Impl->>Controller:処理結果に戻ります。
Impl->>Mapper:カスタムMapperメソッドを呼び出します。
Mapper->>Database:データベースの呼び出し
Mapper->>Impl:戻りデータ
```
Vue構造及びライフサイクル（ノート）

###Web工程コード構造（VUE）：
```
├── build                      //構築関連
├── bin                        //実行スクリプト
├── public                     //パブリックファイル
│   ├── favicon.ico            //faviconアイコン
│   └── index.html             //htmlテンプレート
│   └── robots.txt             //反爬虫類
├── src                        //ソースコード
│   ├── api                    //すべての要求
│   ├── assets                 //テーマフォントなどの静的リソース
│   ├── components             //グローバル共通コンポーネント
│   ├── directive              //グローバル命令
│   ├── layout                 //レイアウト
│   ├── router                 //ルート
│   ├── store                  //グローバルストア管理
│   ├── utils                  //グローバル共通方法
│   ├── views                  //view
│   ├── App.vue                //入り口ページ
│   ├── main.js                //入り口ロードコンポーネント初期化など
│   ├── permission.js          //権限管理
│   └── settings.js            //システム構成
├── .editorconfig              //符号化フォーマット
├── .env.development           //開発環境配置
├── .env.production            //生産環境の配置
├── .env.staging               //試験環境設定
├── .eslintignore              //文法チェックを無視する
├── .eslintrc.js               //eslint配置項目
├── .gitignore                 //git無視項目
├── babel.config.js            //babel.co.nfig.js
├── package.json               //package.json
└── vue.config.js              //vue.com fig.js
```
###コードテンプレートの解説
```
<！-->

<template>

<div></div>

</template>

＜スクリプト＞

//ここでは他のファイルを導入することができます。例えば、コンポーネント、ツールjs、第三者プラグインjs、jsonファイル、写真ファイルなどです。

//例えば、import「コンポーネント名」from'「コンポーネントパス」。

import layout from'@/view/Layout.vue'

export default{

//importで導入したコンポーネントはオブジェクトに注入しなければ使用できません。

components:{layout}

name:''Sample'

ダタ(){

//ここにデータを保管する

return{

｝

}

//モニター属性はdata概念に似ています。

computted:{}

//データの変化をモニタする

ウォッチ:{}

//方法セット

methods:{

}

//ライフサイクル-作成完了（現在のthisインスタンスにアクセスできます）

created(){

}

//ライフサイクル-マウント完了（DOM元素にアクセス可能）

mounted(){

}

beforeCreate（）{}、//ライフサイクル-作成前

before Mount(){}、//ライフサイクル-マウント前

beforeUpdate（）//ライフサイクル-更新前

uudated(){}ライフサイクル-更新後

before Destroy(){}、//ライフサイクル-廃棄前

destroyed(){}、//ライフサイクル-廃棄完了

activated(){}//ページにkeep-aliveキャッシュ機能があれば、この関数はトリガされます。

)

</script>

＜style lang='scss'scoped>

//@import url();公共cssクラスを導入する

</スタイル>
```

###注意点

1.templateにはサブノードが一つしかない。

2.importの場合は、一般的に'@'でsrcディレクトリを表し、具体的にはvue.co nfig.jsに配置されています。

3.styleでは、一般的にスコープを追加して、他のCSSスタイルをカバーしないようにします。
React checkboxがシングルクリックで切り替わらない


###【困ったこと】
`<input type="checkbox">`でチェックボックスを作成した際に、何故かダブルクリックしないと表示が切り替わりませんでした。
:white_large_square: → :white_large_square: → :white_check_mark:

###【原因】
inputタブ内のonChange関数に`event.preventDefault()`を記述していたのが原因でした。


###【内容】
シングルクリックで切り替わらない 
:white_large_square: → :white_large_square: → :white_check_mark:

```
const test = event => {
  event.preventDefault()
  console.log("you clicked!")
}

return(
    <input type="checkbox" onChange={test}>
)
```
 
 


シングルクリックで切り替わる
:white_large_square: → :white_check_mark:

```
const test = event => {
  console.log("you clicked!")
}

return (
    <input type="checkbox" onChange={test}>
)
```

###【まとめ】

根本的な原因は`event.preventDefault()`を理解せず使用していたことです。
preventDefault()の適当な使いまわしは避けましょう(自戒)。

参考：

https://qiita.com/tochiji/items/4e9e64cabc0a1cd7a1ae
jupyter labの左のファイル欄にdesktopが表示されないとき

## 前提
jupyter lab3.0.14
windows 10 
## 状況
jupyter labを開いて、desktop内のフォルダを見ようとしたがなかった。
## 解決方法
desktopがonedriveにあったのでローカルに移動させた。
方法は以下のURLを参考にした。
https://pasokon-labo.com/desktop-onedrive-undo/

![2021-10-21 (2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2200770/fd5828fb-4787-f1bf-526b-4e2bb6e11a21.png)
無事にdesktopが表示された。
Docker compose CLI の docker compose up で Amazon ECS -> Amazon RDS への接続を確立する（未解決）

RDS はあらかじめつくってあるものとして、up 時点ではまだ作られていない ECS のセキュリティグループにインバウンドルールを追加する方法が分からない。

こちらにヒントがあるように思うけれど

https://github.com/docker/compose-cli/issues/1382

うまくいってない、というメモ。

上手くいったら更新します。
Reactロードマップ～アプリ構築～

#はじめに
この間、会社の先輩からReactが面白い！って話を聞いたので
自分用にまとめてみました。
#目次
１．環境
２．Node.jsのインストール
３．Reactのインストール
４．Reactのアプリを構築しよう！
５．まとめ
#１．環境
・Windows10
・Node.js
・React
#２．Node.jsのインストール
Reactを使ったアプリを開発する場合、Npde.jsとnpmが必須になります。
[Node.jsダウンロードサイト](https://nodejs.org/ja/)

念のため、npmのアップデートをしておきましょう。
```npm update -g npm
```
#３．Reactのインストール
npmを使ってReactをインストールしましょう。
```npm install -g create-react-app
```
#４．Reactのアプリを構築しよう
Reactのアプリ構築にはnpxコマンドを使います。npmのバージョン5.2.0以降では自動でダウンロードされます。
もしない場合は手動でインストールしましょう。
```npm install -g npx
```
準備が出来たらReactのアプリを構築しましょう。
```npx create-react-app アプリ名```
アプリの構築が完了したらサーバを起動してみましょう。
```cd [作成したアプリのディレクトリ]
npm start```
自動でブラウザが起動し次のような画面が出力されていればOK
![rea.PNG.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/605371/6f83fdd9-a0d7-629e-bfba-b7e743a36443.png)
#５．まとめ
Reactは数あるフロントエンドフレームワークの１つです。HTMLなどのフロント言語が苦手だけど、JavaScriptは得意だよ！という方やNode.jsを使った経験のある人にはおすすめできます！

次回は、React-Router-domを使ったReactのルーティングについてまとめていこうと思います。
Docker上のMySQLに対してflywayのDockerイメージを使ってマイグレーションをテストする

とりあえずnetworkを作る

```bash
$ docker network create mysql-migration-test
```

作ったネットワークに対してMySQLをdaemonとして起動する

```bash
$ docker run -p 3306:3306 -e MYSQL_ROOT_PASSWORD=password -e MYSQL_ROOT_USER=root -e MYSQL_DATABASE=todoapp -d --net=mysql-migration-test --name=testdb mysql:5.7
```

`name` で指定しているところがホスト名になる。

あとはこんな感じで同じネットワークに対してflywayのイメージを起動する

```bash
$ docker run --net=mysql-migration-test --rm -v $(pwd)/schemas/sql:/flyway/sql flyway/flyway -url=jdbc:mysql://testdb:3306/todoapp -user=root -password=password migrate
```
メモ：WindowsServerでnginxを動作させる


環境はちょっと古いwindows server 2012

本体を[ここ](http://nginx.org/en/download.html)からダウンロードする。
今回はStable versionを選択。この時点では1.20.1

適当なフォルダに解凍して配置。
今回はG:\apps\nginx-1.20という形にしておいた。

この状態で起動して試したい所だが、このサーバではIISが動いていたのでポートを変える。
ついでにIISと同じフォルダをルートに指定してみる。

```conf:conf/nginx.conf
server {
	listen       8082;
	server_name  localhost;

	#charset koi8-r;

	#access_log  logs/host.access.log  main;

	location / {
	    root   C:\inetpub\wwwroot;
	    index  index.html index.htm;
	}
```

これで単純なWebサーバとして問題なく動作した。
開始時はnginxのディレクトリまで移動してから起動させる。
nginxを終了する場合は注意が必要で、Ctrl+Cでは終了しない。
プロンプトを閉じても裏で実行されっぱなしになるので、別のプロンプトから
`nginx.exe -s quit`
を叩く。
プロンプトを閉じるだけだとconfを変えても効果がない！となって時間を無駄に食う。（1敗）

次に、起動しているTomcat8.5と連携させる場合はlocationでproxy_passを利用する。
Tomcat側でBasic認証がかかっていても特に問題はない。

```
location / {
    root   C:\inetpub\wwwroot;
    index  index.html index.htm;
}

location /tomcat/ {
    proxy_pass http://localhost:8834/tomcat/jsp/;
}
```

ただし、上の場合は相対パスでtomcat/jsp/default.css
のようにCallしている場合に問題が発生するので、後ろのproxy_passは外しておいた方が良い。


nginx側でBasic認証をかけたくなるが、ユーザとパスワードはデータベースにあるものを使うとすると
[ここ](https://titanwolf.org/Network/Articles/Article?AID=6c5179d3-2fed-44d1-a7ed-80ca260b763f)で紹介されているが、
MySQLの場合はPAMとセットで対応した事例がある。（[Linux](https://techexpert.tips/ja/nginx-ja/nginx-pam-%E8%AA%8D%E8%A8%BC/)やらADととかの事例もありそう）
Linuxだとnginx-fullをDLしてやればいけそう。Windowsでは面倒そうなので一旦パス。
ファイルでパスワード管理するのであれば標準のnginxでいけるはず。

サービス化はwinswを使う方法がおそらく楽
DockerでサクッとMySQLを起動する

ストレージの永続化とかはしない

```bash
$ docker run -p 3306:3306 -e MYSQL_ROOT_PASSWORD=password -e MYSQL_ROOT_USER=root -e MYSQL_DATABASE=todoapp -d mysql:5.7
```

あとはこんな感じでCLI経由で接続できる

```bash
$ mysql --host=127.0.0.1 --port=3306 -uroot -ppassword
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.7.35 MySQL Community Server (GPL)

Copyright (c) 2000, 2021, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>
```

なんでかわからんけど `127.0.0.1` じゃないとダメでlocalhostではつながらなかった。
Javaのプロセスが使っているHugepagesのエントリー数を計算する

もし、これじゃ全然ダメとかあったら教えて頂きたい…

```
sudo pmap <PID> | grep hugepage | awk 'BEGIN{sum=0}{sum+=$2}END{print sum/2048}'
```

* `pmap` はメモリのアドレス空間を表示するコマンド
    * [pmapコマンドについて詳しくまとめました 【Linuxコマンド集】](https://eng-entrance.com/linux-command-pmap)
    * `anon_hugepage (deleted)` のように `deleted` と表示されるのは擬似的なファイルシステムとして動作しているからであまり気にしなくてよさそう
* `sum/2048` 1ページ2KBなので2048で割ってエントリー数に変換している
JSONデータ型

#JSONデータ型

##有効なデータ型

JSONでは、値は次のデータ型のいずれかでなければなりません。

*文字列
*数字
*オブジェクト（JSONオブジェクト）
*配列
*bool
*null

JSONの値は、次のデータ型のいずれかにすることはできません。
* 関数
* 日付
* undefined




## JSON文字列

JSON文字列は二重引用符で囲む必要があります。

### 実例

<PRE>{ "name":"John" }</pre>




## JSON 数字

JSONの数値は整数または浮動小数点数でなければなりません。

### 実例

<PRE>{ "age":30 }</pre>




## JSONオブジェクト

JSON値はターゲットである可能性があります。

### 実例

<PRE>{
"employee":{ "name":"Bill Gates", "age":62, "city":"Seattle" }
}
</pre>

オブジェクトの値としてのJSONは、JSONオブジェクトと同じ規則に準拠している必要があります。





## JSON Array.

値は配列JSONになることができます。

### 実例

<PRE>{
"employees":[ "Bill", "Steve", "David" ]
}
</pre>




## JSON BOOLEAN

JSON値は、<span class = "code_marked"> true </span> /<span class = "code_marked"> false </span>です。

### 実例

<PRE>{ "sale":true } </pre>




## JSON NULL

JSON値は<span class = "code_marked"> null </span>です。

### 実例

<PRE> { "middlename":null } </PRE>
【RSpec】webmockでテスト

##環境
Ruby 3.0.2
Rails 6.1.4.1

##前提
現在のQiitaの記事投稿状況をSlackに通知してくれるbotがあり、そのテストを書きたい

##テストのやり方

jsonのダミーデータを作成して適当なプロジェクト内に保存しておく。
slackの方も同じように作成。

```qiita_user_response.json
{
  "description":"未経験から転職して3ヶ月目のサーバーサイドエンジニア\r\n12月10日までに100記事投稿を目標にしています！",
  "facebook_id":"",
  "followees_count":0,
  "followers_count":1,
  "github_login_name":null,
  "id":"kat0",
  "items_count":20,
  "linkedin_id":"",
  "location":"",
  "name":"",
  "organization":"",
  "permanent_id":XXXXX,
  "profile_image_url":"https://secure.gravatar.com/avatar/XXXXXXXXXXXX",
  "team_only":false,
  "twitter_screen_name":null,
  "website_url":""
}
```


```spec.rb
require 'rake_helper'
require 'webmock/rspec'

describe 'namespace名:task名' do
  subject(:task) { Rake.application['namespace名:task名'] }
  let!(:qiita_request_stub) do
    WebMock.stub_request(:get, "https://qiita.com/api/v2/users/XXXXX")    
      .to_return(
          body: File.new("spec/models/data/qiita_user_response.json"),
          status: 200,
          headers: { 'Content-Type' => 'application/json' }
        )
  end
  let!(:slack_request_stub) do
    WebMock.stub_request(:post, "https://slack.com/api/chat.postMessage")
      .to_return(
          body: File.new("spec/models/data/slack_response.json"),
          status: 200,
          headers: { 'Content-Type' => 'application/json' }
        )
  end
  
  it 'botが投稿状況を通知すること' do
    travel_to Time.zone.local(2021, 10, 11) do
      task.invoke

      expect(
        a_request(:post, "https://slack.com/api/chat.postMessage").with { |req| 
          hash = Hash[URI.decode_www_form(req.body)]
          hash["channel"] == "#チャンネル名" && hash["text"] == "本日までの加藤さんの記事投稿数は20記事になりました！！\n目標まであと80記事、1日1.9記事ペースで目標達成！\n引き続きがんばれ〜！\n"
        }
      ).to have_been_made
      expect(slack_request_stub).to have_been_requested
      expect(qiita_request_stub).to have_been_requested
    end
  end
```

- サービスのAPIのリクエストスタブを作成し、bodyに最初に作成したjsonファイルを指定する
- ```task.invoke```でtaskを実行し、```a_request```でAPI叩いたときの期待する値が作られているかテスト
- ```hash = Hash[URI.decode_www_form(req.body)]```
SlackのAPIを叩いたときのrequest.bodyの中身をいい感じにhashで返してくれるようにしている
- テストコード内に```WebMock.enable!```を書いてある記事がたくさんあったがなくてもwebmockは有効になっていそうだった

##参考

https://github.com/bblimke/webmock
MacとDockerでAWSTOEをコマンド化する

[AWSTOE](https://docs.aws.amazon.com/ja_jp/imagebuilder/latest/userguide/toe-component-manager.html) は、EC2 Image BuilderのComponentsなどを記述する際に利用されるツール。
YAML形式で記述したComponentをローカルで検証/実行するのに AWSTOE が使える。

ただし、Mac版はない。
正直あったとしてもMacBookのローカルで実行したくはない。
そこでDockerコンテナ内でAWSTOEを実行するための `awstoe` コマンドを用意する。

# 使用イメージ

### 検証したい時

YAMLを編集したあと、ローカルで検証できるだけで随分作業が楽になる。

```
awstoe validate -d component.yaml
```

### 実行したい時

`-t` オプションはターミナルに実行ログを表示できる。

```
awstoe run -t -d component1.yaml,component2.yaml -p build,test
```

### ヘルプ

```
awstoe --help
```

# 動き

Linux用の `awstoe` をamazonlinux:2 のコンテナにインストールする。
https://awstoe-ap-northeast-1.s3.ap-northeast-1.amazonaws.com/latest/linux/386/awstoe

また、EC2インスタンスに環境を合わせるため、amazonlinux:2のイメージに含まれていないPRMもインストールしておく。

このコンテナ実行時にカレントディレクトリをmountし、指定されたYAMLを検証/実行する。
実行時はsystemdが起動するよう `/usr/sbin/init` を `--entrypoint` にする。

# Dockerfile

EC2インスタンスのAmazonLinux2と、Dockerイメージのamazonlinux:2を比較してPRMをインストールした。

```dockerfile:Dockerfile
FROM amazonlinux:2

RUN curl -O https://awstoe-ap-northeast-1.s3.ap-northeast-1.amazonaws.com/latest/linux/386/awstoe \
 && chmod +x awstoe \
 && mv awstoe /usr/bin/

RUN yum update -y \
 && yum install -y \
      bash-completion \
      bc \
      bind-utils \
      bzip2 \
      cloud-init \
      cronie \
      dhclient \
      file \
      less \
      lsof \
      man \
      tar \
      tcpdump \
      unzip \
      which \
      zip

ENV WORKDIR /work
WORKDIR /work

ENTRYPOINT ["awstoe"]
CMD ["--version"]
```

# awstoeコマンド

ただのbashスクリプト。
`awstoe run` でコンテナが起動するので、処理が終わったらログインして結果を確認する感じ。
`S3Download` などでAWSにアクアスする必要がある場合は `~/.aws` を `/root/.aws` にmountするなどしてクレデンシャルを渡さないといけない。

https://qiita.com/ryo0301/items/9e908cf333c1f631e413

```bash:awstoe
#!/bin/bash

WORKDIR="/work"

cmd=$1

# awstoe run -d component.yaml
if [ "$cmd" = "run" -a ! "$2" = "--help" ]; then
  cid=$(docker container run -itd --mount type=bind,source="$(pwd)",target="$WORKDIR" --entrypoint /usr/sbin/init --privileged awstoe)
  time docker container exec -itw "$WORKDIR" "$cid" /usr/bin/awstoe $@
  echo
  echo "# コンテナにログインして実行結果を確認"
  echo "docker container exec -it $cid /bin/bash"
  echo
  echo "# コンテナを破棄"
  echo "docker container rm -f $cid"
# awstoe validate -d component.yaml
else
  docker container run --rm --mount type=bind,source="$(pwd)",target="$WORKDIR" awstoe $@
fi
```
JSON構文

#JSON構文

## JSON構文ルール

JSON構文は、JavaScriptオブジェクト表記構文から派生しています。

*データは名前/値です
*データはコンマで区切られます
*中括弧はオブジェクトを保持します
*角括弧はアレイを保持します




## JSONデータ-名前と値

JSONデータは名前/値のペアとして書き込まれます。

名前/値は、フィールド名とそれに続くコロンと値で構成されます。

###例

<pre>"name":"Bill Gates" </pre>

JSON名には二重引用符が必要です。 JavaScript名は必要ありません。

JSON-JavaScriptオブジェクトに評価します

JSON形式はJavaScriptオブジェクトとほぼ同等です。

JSONでは、キーは二重引用符で囲まれた文字列である必要があります。

### JSON

<pre>{"name":"Bill Gates"}</pre>

JavaScriptでは、キーは文字列、数字、または識別子名にすることができます。

### JavaScript

<pre>{name:"Bill Gates"} </pre>




## JSON値

JSONでは、値は次のデータ型のいずれかである必要があります。

* 字符串
* 数字
* オブジェクト（JSONオブジェクト）
* 配列
* ブール値
* null

JavaScriptでは、上記のすべてに値を加えて、次のような他の有効なJavaScript式を使用できます。

* 関数
* 日付
* undefined

JSONでは、文字列値は二重引用符で囲む必要があります：

### JSON

<pre>{"name":"Bill Gates"}</pre>

JavaScriptでは、二重引用符または一重引用符を使用して文字列値を書き込むことができます：

### JavaScript

<pre>{name:"Bill Gates"}</pre>




## JSONはJavaScript構文を使用します

JSON構文はJavaScriptオブジェクト表記から派生しているため、JavaScriptでJSONを処理するために追加のソフトウェアが必要になることはめったにありません。

JavaScriptを使用すると、次のようにオブジェクトを作成してデータを割り当てることができます。

### 例

<pre>var person =  { name : "Bill Gates", age : 62, city : "Seattle" };
</pre>

次のようなJavaScriptオブジェクトにアクセスできます。

### 例

<pre>// 返回 Bill Gates
person.name;
</pre>

次のようにアクセスすることもできます。
### 例

<pre>// 返回 Bill Gates
person["name"];
</pre>


次のようにデータを変更できます。

### 例

<pre>person.name = "Steve Jobs";</pre>


次のように変更することもできます。

###例

<pre>person["name"] = "Steve Jobs";</pre>


後で、このチュートリアルでJavaScriptオブジェクトをJSONに変換する方法を学習します。





## JSONとしてのJavaScript配列

JavaScriptオブジェクトをJSONとして使用するのと同じように、JavaScript配列もJSONとして使用できます。

このチュートリアルの後半で、JSON配列について詳しく学習します。






## JSONファイル

* JSONファイルのファイルタイプは「.json」です。
* JSONテキストのMIMEタイプは「application /json」です。
マイクロサービスの分割原則と方法

![1634804196(1).jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1222431/bcfeae2a-5425-6f80-5af4-a026e7170818.jpeg)

## 前言
サービス分割の粒度は、業務シーンによって完全に計画され、業務の発展に伴って、従来のアーキテクチャ案も調整される必要がある。業務モデルの分離の次元はたくさんあります。実際のプロジェクトでは、それぞれの次元を合わせて検討します。主なリンク、ドメインモデル、ユーザーグループの3次元から説明します。

## •メインリンクの分割

主リンクは主戦場であり、主な業務チェーンであり、各ユーザが動作した後に通過しなければならないシーンです。トラフィック要件に応じて、複数のコアマスタリンクが識別される。

コア主リンクの分割、主リンクの階層化のための降格戦略（多段降格）の確立、および合理的な溶断戦略Hystrixサービス。リソースの割り当ては、主リンクは通常高周波シーンであり、自然により多くの計算リソースが必要であり、最も主要な実施形態は、クラスタ内で割り当てられた虚数マシンの数が多いことである。サービス分離は、主リンクが主出力のCビットであり、主リンクを他の補助的なサービスと切り離して、エッジサービスの異常な状況が主リンクに影響することを避ける。

## •ドメインモデルの分割

フィールドモデルとは、それぞれの役割を担うサービスの集合である。ここでは領域と合併と分割に関連します。分野合併とは、業務面で同じことをしています。同じ分野に属していますので、後の二つの技術線を統合してサービスを提供します。分野の分割については、私たちがマイクロサービスの計画をする時、各分野の間に明確な限界があることを確保します。彼らの間には交差点がありますが、結局は異なる分野にサービスがあるので、両者を独立したサービスに分割します。

## •ユーザーグループの分割

ユーザーのグループによって分割します。まず、自分のシステム業務にどのようなユーザーがいるかを知りたいです。各ユーザーグループにとっては、同じ業務分野でも、そのグループならではのビジネスシーンがあります。

ユーザーのグループは1つの2つのレベルドメインに相当し、最初にメインリンクとフィールドモデルに従って1つのレベルドメインの分割を行い、さらに特定のトラフィック分析を結合して、ユーザの分野の方向により細かい粒度の分割を行う必要があるかどうかを確認する。
レポートのアクセス権を制限するプロファイルの設定


[Restrict Reporting For Profile](https://trailhead.salesforce.com/ja/trailblazer-community/feed/0D54S00000BswMi)

Kruvi Amnon (Kruvi Solutions Limited)さん
Praud Eric (Polsource)さん
の先生方が答えてくれています。まず間違いないでしょう。

レコードのアクセス権と違ってレポートを制御できるアクセス権はないとのことです。