OmniAICreator/Qiita-1.07M huggingface dataset:
WinActor v7.0リリース情報 / v7.1 ロードマップ

# アナウンスと機能紹介

プログラマも初心者も、エンタープライズもデスクトップユースにおいても、「つまずかない、つまずいても転ばない」次世代RPAを目指し、メジャーバージョンアップ版WinActor® の第一弾 Ver.7.0を販売開始
～フルリメイクによる高速化とUI/UX改善で、カスタマーサクセスを実現！～
https://www.ntt-at.co.jp/news/2020/detail/release200128.html

WinActor®Ver.7 機能紹介
https://winactor.biz/product/winactor_v7.html

【重要】WinActor Ver.7.0がリリースされました！
https://winactor.com/news/19849/

# コンセプト

>WinActor®最大の特徴である「現場フレンドリー」の思想を一層進化・深化させ、初心者はもちろん上級プログラマの方々にとっても、また現場のデスクトップユースはもとより大規模なエンタープライズユースにも対応可能な、「つまずかない、つまずいても転ばない」、誰もが使い易い"次世代RPA"

# 気になるポイント

* ソフトウェアアーキテクチャのフルリメイク
    * 処理速度の大幅な高速化
    * UIの刷新とUXの徹底改善によりストレスのない作業環境を実現し、シナリオ生産性を飛躍的に向上
        * 1画面化
        * 従来は1つのシナリオのみ表示・編集が可能でしたが、複数シナリオの同時編集を可能
        * デバック関連ボタンの追加や、エラー時のエラー発生箇所の表示方法を改善
* v7.1は2020年度第1四半期にリリース予定
    * 上級プログラマ用/超初心者用のシナリオエディタの提供
    * 多言語対応
    * エンタープライズユース向けの監査ログ出力
    * 新たにスクリーンOCRを搭載

# 実際に触ってみた

WinActor v7.0.1を触ってみて、以下のことがわかりました。

* 6.xまではJavaで作成されていましたが、7.xでは.NET Frameworkで書き換えられました。このため、体感でも速くなっていました。
* UIは1画面にはなっているが、基本的な構成は変わらない。
* 指定時間待機 / ウィンドウ状態待機のコマンドは相変わらず別途入れる必要があり、タイミングは自分で取る必要あり
* UI Automationによるオブジェクト認識は相変わらずできない。記録対象アプリケーション選択ボタン (🧿) をクリックした後、操作対象となるウィンドウを選択する。ウィンドウの外枠が強調表示され、ウィンドウを選択した後は、ウィンドウ内のコントロールはハイライトされず、選択できない。
    * プラグインがインストールされた対象のブラウザー (IE、Chrome)であれば、HTML要素は選択可能。
    * Windowsアプリの場合は、画像認識で操作位置を決めていく必要がある。7.0で強化された画像認識機能もあるが、効果は...??

# 感想

* UIはUiPathを真似ている？v7.1で目指しているところもUiPath Studio/StudioXで提供しているものの後追いを目指している？
* 処理速度の大幅向上は期待が持てる
* いままで大きな課題になっていた「対応できるアプリが少ない」問題は解決されてないようです。 v7.1でも改善の方向性はOCRなので、独自路線。


今後に期待...ですね。
プロパティとデータの違いについて

Vue.jsを扱っていて、プロパティとデータの違いがよくわからなかったのでまとめました。

## プロパティ(props)

- プロパティは**Vueコンポーネント**で使われるもの
- **親から子にデータを渡したいときに**使う

子コンポーネントでは、propsを持ってその中に値を受け渡すオブジェクトを格納する
<img width="408" alt="スクリーンショット 2020-02-08 14.36.44.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364497/83b013ba-fb34-2a00-42a9-b18a7b58110c.png">

親コンポーネントでは、変更する情報の値を入力する

<img width="603" alt="スクリーンショット 2020-02-08 14.37.36.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364497/10adcc7e-18e4-60c7-57c0-e5a9d668afcd.png">



## データ(data)
- dataは、あくまでtemplate（HTML）から呼び出すことのできる値を集合させたオブジェクト
先ほどと同じ状況を作ろうとすると、子コンポーネントではdata()に書き換える
（ `return` にする必要がある）
<img width="586" alt="スクリーンショット 2020-02-08 23.34.17.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364497/6f66a1f0-d4d1-aaf5-3419-5ab17887663f.png">

親コンポーネントは値を渡すことなく、ただ表示するだけ
<img width="565" alt="スクリーンショット 2020-02-08 23.34.50.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364497/098e4f7b-6796-d8fd-4c8b-28921530cd99.png">

これで、同じ表示をすることができる
<img width="925" alt="スクリーンショット 2020-02-08 23.36.49.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/364497/1c5d32ff-60a1-fecd-3fd9-c3f1e3032587.png">
Auth0でSMS認証用の電話番号が登録されているユーザーだけ多要素認証（SMS認証）を有効化する

[前回の記事](https://qiita.com/morikavva/items/0455af21ee74ce49e574)で、Auth0を利用するアプリからSMS認証用の電話番号を更新する機能を考えたので
今度は、電話番号を登録しているユーザーだけ多要素認証（SMS認証）を実施するようにRulesを設定してみました。

## 設定内容
### Auth0のMFA設定
Auth0のMFA設定のFactorsをSMSのみ有効化する。

<img width="612" alt="スクリーンショット 2020-02-08 0.35.26.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/490013/d5175ddf-0fdf-74d3-8e5a-e4965ec31181.png">


### Rulesの設定

以下のコードをRulesに設定します。

```javascript
function (user, context, callback) {
  const request = require('request');

  const authenticatorSearchUrl = auth0.baseUrl + '/users';

  request({
    url: authenticatorSearchUrl + '/' + user.user_id + '/enrollments',
    headers: {
      Authorization: 'Bearer ' + auth0.accessToken
    },
  },
  function(err, response, body) {
    if (err) return callback(err);
    if (response.statusCode !== 200) return callback(new Error(body));

    var data = JSON.parse(body);
    
    data = data.filter(function(u) {
      return (u.auth_method === 'sms') && (u.status === 'confirmed');
    });

    if (data.length > 0) {
      context.multifactor = {
      	provider: 'any',
      	allowRememberBrowser: true
    	};
    }
    callback(null, user, context);
  });
}
```

## 注意点
[前回の記事に書いた電話番号の削除方法](https://qiita.com/morikavva/items/0455af21ee74ce49e574#%E7%99%BB%E9%8C%B2%E6%B8%88%E3%81%BF%E3%81%AE%E9%9B%BB%E8%A9%B1%E7%95%AA%E5%8F%B7%E3%82%92%E5%89%8A%E9%99%A4)で登録されている有効な電話番号を全て削除してしまうと
SMS認証が発動しなくなります。

元々、電話番号が登録されているのであれば、そのユーザーはリカバリーコードを保持しているはずなので
SMS認証がスキップされるのではなく、リカバリーコードの入力を求められるべきかと思いますが、このRulesの実装ではそれが実現できていません。

電話番号の削除機能を実装するにしても
一度電話番号を登録したら、その後全ての電話番号は削除できないようにして
少なくとも、有効な電話番号が一つは残るようにしておいた方が良いかもしれません。
AI化、５分でチェック・簡単無料POC! 5min POC(Proof Of Concept) on AI!

https://randomwalkjapan.blogspot.com/2020/02/aipoc-5min-poc-proof-of-concept-on-ai.html

自分の仕事がAI化できるか試してみたい人は多いだろう。Many may wish to check if the task working on can be on AI basis.

出来そうな気がするが、人に頼むとお金がかかるし、自分でやるには大変だし。いろんなシステムも宣伝しているが、使い方を覚えるだけで大変だ。決心してやってみて結局だめだったらお金と時間の無駄だし。It looks possible but will cost if ask someone. But looks hassle if do it your own. Google search shows many advertisements on AI systems but looks hard to learn. Also, even if you decided to do it, if it fails eventually, it will be  a waste of time and money.

そんな時、無料で、簡単に、可能性をチェックできるのがこのページだ。先に書いた温度管理のプログラムを読み替えただけだ。プログラムはこちら。In such a case, this page provides you, for free and ease, the feasibility check of concept of your idea. This is just another interpretation of previously shown temperature control program I presented. GitHub is here.

https://github.com/tanakayutaka/Tensorflow.js-tools-/blob/master/index%20-%205%20min%20POC%20tool.html

下のアプリの使い方は簡単。ただ、画面に自分の手持ちデータをそのまま入力し、ボタンを押すだけで完了。AIといっても、言語処理、画像、制御などいろいろあるが、ここでは制御が対象。It is very easy to use below application. Simply, just input your data onto the screen, the click button. There are lots of AI out there such as language processing, image processing and control, here we focus on control.

農業、製造、教育など、あらゆる場面でAIは助けになる何でも屋だ。AI is all rounder covering agriculture, manufacturing, education and many other fields.

深く考えずに、まずは身近のデータを入れて実験してみよう！ Just jump in before think too much, then input your local data and experiment.

何らかの状態ｘのもと、何らかの制御ｚを行うと、結果ｙが出る。では、ある状態ｘの場合、ある結果ｙを実現するには、どんな制御ｚをおこなえばいいの？という問題に適用できる。Under some circumstance X, by making some control Z, then got result Y. Now to achieve result Y under some circumstance X, how much control Z should be applied? This is the problem we can test here.

使い方は簡単。データ１－９に何らかの観測値（ｘ軸）、制御値（ｚ軸）、そしてその結果生じた値（ｙ軸）を入れ、空色のボタンを押す。計算後、観測値、目標とする結果を実現する制御値（縦軸ｚ）が表示される。グラフが表示されない場合は、グラフのホームアイコンを押す。The usage is easy. Input data set 1-9, i.e., some observation(x-axis), control value(y-axis) and resulting value(y-axis), then push sky blue button. After calculation, control value(vertical z-axis) is shown as surface to achieve target value at observation value. Click Home Icon on the graph if it is not shown.
Vue.jsでTodoリストを作ってみた

# はじめに
Vue.jsを学習し始めて２週間ほど経ったのでTodoリストを作ってみました！
# 書き方
Vue.jsは書き方が何種類かありますが、今回はHTML,Javascriptのファイルに分けて書きたいと思います。
# ディレクトリツリー

```
root/
　┝ index.html
　└  javascript/
　　└ app.js
```

# HTMLのコード

```index.html
<!DOCTYPE html>
<html lang="ja">
<head>
　<title>Todoリスト</title>
　<!-- CDNにてVue.jsを導入 -->
　<script src="https://unpkg.com/vue@2.5.17"></script>
</head>
<body>
　<div id="app">
    <!-- 新しいタスクの入力フォーム -->
    <input type="text" placeholder="新しいタスク" v-model="newTask">
    <input type="submit" value="追加" @click="addTask">

    <!-- 達成率を表示 -->
    達成数： {{ completedTasks }} / {{ totalTasks }}

    <!-- タスクの一覧 -->
    <ul>
      <li v-for="(task, index) in tasks" :key="task.title">
      {{ task.title }}
      <button v-if="task.done" @click="completed(index)">完了</button>
      <label v-else>完了済み</label>
      <button @click="deleteTask(index)">削除</button>
      </li>
    </ul>
  </div>
  <script src="javascript/app.js"></script>
</body>
```

# Javascriptのコード

```app.js
const tasks = [
  {
    title: 'sample',
    done: false
  }
]

var app = new Vue({
  el: "#app",
  data: {
    tasks: tasks,
    newTask: null
  },
  methods: {
    completed: function(index) {
      this.tasks[index].done = true
    },
    addTask: function() {
      if(newTask){
        this.tasks.push({ title: this.newTask, done: false })
        this.newTask = null
      }
    },
    deleteTask: function(index) {
      this.tasks.splice(index, 1)
    }
  },
  computed: {
    completedTasks: function() {
      var count = 0
      for(let i = 0; i < this.tasks.length; i++){
        if(this.tasks[i].done){
          count++
        }
      }
      return count
    },
    totalTasks: function() {
      return this.tasks.length
    }
  }
})
```

# 実行結果
最初の画面
<img width="400" alt="スクリーンショット 2020-02-08 23.02.06.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/533652/e2bd4a28-b658-4bc7-202d-099e8e3555a0.png">
完了ボタンを押した後
<img width="400" alt="スクリーンショット 2020-02-08 23.02.45.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/533652/5045ac81-c3cd-1ab2-a4bf-db4930d34d3f.png">
残りの動作は省略

# まとめ
今回はCDNでお手軽にVue.jsを導入してTodoリストを作成しました。
今後はVueCLIを使用して導入し単一ファイルでアプリケーションを作成したいと思います。
Adobe PhotoshopでチャンネルごとにTIFFファイルを保存する

# はじめに
Photoshopで、psdファイルをチャンネル単位に個別のグレースケールTIFFファイルに保存する、JavaScriptを作りました。

作るに至った経緯を少々。
MKの紙面印刷用データを作る過程で、CMYKからMKに変換したという画像データを支給され、それを取り込んで紙面データを作成して後工程に渡しました。すると、画像データにYが残っていたとのことで紙面データが後工程から戻されてきました。
変換後の画像データに不要色が残っていないかチェックできればこのようなことは起きないわけで、ではチェックツールを作ればよいと。

もちろん、TIFFファイルにドットが載っているかどうかチェックできなければ無意味です。このチェック方法については別途投稿します。

なお、ここではPhotshopでのJavaScriptの動かし方については触れていません。

# どう動くのか
- ひとつのフォルダ内の複数のpsdファイルを同時に処理できます。
- スクリプトを起動すると、フォルダ選択ダイアログが開きます。このダイアログでpsdファイルを収めたフォルダを指定してやります。
- psdファイルと同ディレクトリに、「psdファイル名_separated」というフォルダが作成され、その中にチャンネル単位のTIFFファイルが保存されます。

1.Photoshopで見たpsdファイルとチャンネル
<img width="353" alt="psd.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/383285/ed32296f-79bb-a532-3a1a-95e1e04b718a.png">

2.psdファイルを収めたフォルダ。これを処理する
<img width="476" alt="test_folder.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/383285/f4c9ebf8-ff4d-39f1-5a95-54e57b914149.png">
3.処理後のフォルダ。psdファイルに対応して「psdファイル名__separated」ができている
<img width="476" alt="prpcessed.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/383285/3be64531-29e1-71a6-2424-e4d9862ec673.png">
4.「psdファイル名 __separated」のなか。
<img width="476" alt="result.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/383285/55620252-3d9d-43ef-b829-e7a1c5995b4b.png">

# コード
```js:anynameok.jsx
//フォルダチューザを開き、フォルダを取得
var folderObj = Folder.selectDialog("処理したいファイルを収めたフォルダを選択してください");

//フォルダを取得したら、フォルダ内のpsdファイルをリストで取得
if (folderObj) {
  var fileList = folderObj.getFiles('*.psd');
  var fileCount = fileList.length;
	//psdファイルひとつひとつを関数processで処理
  for (var i = 0; i < fileCount; i++) {
		process(fileList[i]);
  };
	alert("処理が終わりました");
} else{
	alert("キャンセルされました");
};

//psdファイルをチャンネル単位で保存する関数
function process(targetFile) {
  //Photoshopでファイルを開く。開かれたファイルはそのままアクティブドキュメントに。
  open(targetFile);
  //アクティブドキュメントのパス（親ディレクトリ）を取得
  var activeDocPath = activeDocument.path;
  //分離後のファイル保存時にサブフォルダを挟むため、そのサブフォルダの命名取得用に拡張子抜きのファイル名を取得しておく
  var fileNameWithoutExt = activeDocument.name.substr(0, activeDocument.name.indexOf('.'));
  //出力先フォルダの作成
  var outFolder = new Folder(activeDocPath + '/' + fileNameWithoutExt + '_separated');
  if (!outFolder.exists) {
    outFolder.create()
  };
  //チャンネル分割のため、画像を統合
  activeDocument.flatten();
  //チャンネル毎にドキュメントを分割。この際、元ファイルは未保存で閉じられ、チャンネル毎のドキュメントのみが未保存で開かれている
  activeDocument.splitChannels();
  //開かれているドキュメントの数すなわち元ファイルのチャンネルの数
  var docCount = documents.length;
  //各ドキュメントを保存し、閉じる
  for (j = 0; j < docCount; j++) {
    var fileObj = new File(outFolder + '/' + activeDocument.name);
    var tiffOpt = new TiffSaveOptions();
	//ここに適宜TIFF保存時のオプションを記述
    activeDocument.saveAs(fileObj, tiffOpt, false, Extension.LOWERCASE);
    activeDocument.close();
  };
};

```
TIFF保存時の設定については以下が詳しいです。
http://nakatoji.lolipop.jp/index.php?option=com_content&view=article&id=401&catid=30
Amazon Linux EOLのLambdaへの影響

# はじめに

Amazon Linuxのサポート終了が発表されている。基本的に**2020年12月31日まで** 
[Developers.IO: Amazon Linux のサポート期間延長のアナウンスについて](https://dev.classmethod.jp/cloud/aws/-update-on-amazon-linux-ami-end-of-life/) 
[AWS News Blog: Update on Amazon Linux AMI end-of-lif](https://aws.amazon.com/jp/blogs/aws/update-on-amazon-linux-ami-end-of-life/)

# AWS LambdaってAmazon Linuxで動いてるんだけど

AWS Lambdaは、Amazon Linux / Amazon Linux 2で動いている。 
[ドキュメント][1]

これ、Amazon Linuxで動いてる **Python 3.7とかどうなるの？**

# 影響は未定です

ググっても出てこなかったので、AWSサポートに聞いてみたところ 
**「現時点[^1]では、影響は未定です」**とのこと。[^2]

# なるべくAmazon Linux 2ベースにするのが無難かな

例えば、Python 3.8は結構最近出たばっかだし 
まだPython 3.7でいっかと思ってると、後で面倒な事になるかも。 

[Developers.IO: AWS Lambda で Python 3.8 ランタイム がサポートされました](https://dev.classmethod.jp/cloud/aws/aws_lambda_support_python38/)

[1]:https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/lambda-runtimes.html
[^1]: 2020/02/05時点
[^2]: 関係部署に確認していると言われて、時間掛かった結果この回答だった。ちょうどLambdaを作ってた所で、ちょっと気になって聞いた感じだったので、サポートの人には少し申し訳なかった。
基本情報技術者　マネジメント系　第1章 プロジェクトマネジメント①



#　①プロジェクトマネジメントの基礎

PMBOKが有名
JISQ 215000 : 2018 が定められています。

## PDCAサイクル
Plan(計画)→Do(実行)→Check(チェック)→Act(改善、処置)

## 基本用語

### プロジェクト
企画・計画された事業のこと

有期性: 明確な開始、終了時点がある
独自性: 他と異なる点


### プロジェクトマネージャ
責任者

### ステークホルダ
利害関係者

## プロジェクトマネジメントの知識体系

PMBOK: 体系的にまとめた物
JISQ 215000 : 2018 が定められています。

分野を10の区分で定義しています。

### プロジェクト統合マネジメント

### ステークホルダマネジメント

### プロジェクトスコープマネジメント
作業範囲の定義、管理

### プロジェクトタイムマネジメント
スケジュール作成、管理

### プロジェクトコストマネジメント
予算

### プロジェクト品質マネジメント
品質

### プロジェクト人的資源マネジメント
チーム

### プロジェクトコミュニケーションマネジメント
情報の伝達

### プロジェクトリスクマネジメント
リスク

### プロジェクト調達マネジメント 

## プロジェクトの段階

### 立ち上げプロセス

### 計画プロセス

### 実行プロセス

### 監視コントロールプロセス
立ち上げから終結を監視

### 終結プロセス
データサイエンティストになれるかな

自己紹介も兼ねた駄文から始めてみようと思う。

世の中AI(人工知能)ブームである。一昔前、AIといえばAction Itemを指していたが今や「AIって書くと紛らわしいからアクションアイテムって書けよ」と言われる(実話)時代になった。

現在は第３次人工知能ブームということで、いろんな人が「我が社もAIに取り組まないとけない」と鼻息が荒くなってきた。自分はといえば、データ分析の重要性についてはなんとなく認識しつつ、目立つWebページなんかはつまみ食いしていて、なんとなく概要はわかっていたものの、体系的に勉強したり技術をつけるということは年齢的なものや仕事を理由にこれまで避けてきた。

ところが、いろんなWebや書籍などの情報を見れば見るほどデータがいかに大事かということに気づく。その昔パソコンが使えるとヲタクだと言われたが、自分がその時に感じた、これ(コンピュータ)は将来くるぞという感覚に似たものを感じた。これは乗るしかない、この大波に！というわけで、何周遅れかわからないほど遅れているが、データサイエンティストの勉強の経過を記していこうと思う。

# 筆者のスペックや経験など

* 小学生の時にMSX BASICに触れる
* 中学生でマイコンBASICマガジン(通称ベーマガ)の写経を覚える
* 執念で親にFM-TOWNSを買ってもらう
* カーネルのバージョンがまだ0.9とかの時代にLinuxに出会う
* 首都圏の某大学で情報工学を専攻、コンピュータサイエンスはそれなりに学んだが、なぜか半導体工学の研究室に進み、大学院はなんとか卒業
* 理系の道を歩んだので、数学や物理の知識はまー人並みの大学レベル
* 某メーカーに就職したものの、技術どっぷりというよりは企画屋みたいなことをしている
* 仕事とは無関係に、RubyやPythonやJavascriptなどは趣味として嗜む程度
* 業務上それなりに大量のデータに触れることはあるが、AccessやExcelのピボットがわかればなんとかなる程度ではある
* 楽器演奏や写真を趣味にしてる
* などなど

# データサイエンティストの定義

人それぞれ思うところはあるだろうが、[データサイエンティスト協会](https://www.datascientist.or.jp/)は、2014年12月10日の[プレスリリース](http://www.datascientist.or.jp/files/news/2014-12-10.pdf)において、以下のようにデータサイエンティストを定義していた。
> 「データサイエンティストとは、データサイエンス力、データエンジニアリング力をベースにデータから価値を創出し、ビジネス課題に答えを出すプロフェッショナル」

つまり、データを分析する高度なスキルを持っているだけではダメで、クライアントの課題をビジネスの観点から的確に捉え、課題に見合ったデータを定義し、高度な分析をもとに問題を解決するアプローチを取れることが必要になるという理解をした。

![定義](https://ijl-cdn.shoeisha.jp/static/images/article/314/fig01a.jpg)

# 今後書いていくこと

自らをデータサイエンティストと言えるところまで持ち上げるにあたって学習したことを自分なりにアウトプットすることを目標にする。

### 機械学習

いわゆる[G検定](https://www.jdla.org/business/certificate/)レベルの知識を網羅したい

* 教師あり学習や教師なし学習の具体的な内容とか理論とか手法とか
* ニューラルネットワークやディープラーニングについて
* できれば研究や応用分野について

### コーディング

Pythonを使って、kaggleなんかに取り組みながらライブラリの使い方なんかをまとめていこうかなーと

正直日経XTECHさんに[こんな記事](https://tech.nikkeibp.co.jp/atcl/nxt/column/18/00160/012200169/)を出されてしまうとあと書くことなくなってしまうのが本音だが、自分の学習用として割り切って書いていこうと思っています。よろしくどうぞ。
Acronis Cyber Backup 12.5 でWindows OS　リストア(OS丸ごと)

# Acronis Cyber Backup 12.5 でWindows OS　リストア(OS丸ごと)

## メモ
事前に作成したブータブルメディアから起動させてリストア
ネットワークドライブにバックアップしたデータからリストア
ネットワーク環境にはDHCPサーバが動いている（動いてなければブータブルメディアで起動した際にIP設定すればOK)
スクショは、Acronisサイトからダウンロードしたものでやってます

## スクショ
1. とりあえずデータを消してみよう（本番ではやらないでね）
※下の画像はWin2003で実行した例
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/315938/691c438a-4c00-17e5-aad8-8c252bccf692.png)

2. OS上がらなくなりました
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/315938/6f1e9e82-e554-101d-ffa2-ee32593165af.png)

3. 事前に作成したブータブルメディアから起動
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/315938/a6abd5fe-9da1-4291-f133-298c21441666.png)



4. 「Manage this machine locally」を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/315938/125410ef-c03c-8e6e-8cf1-be1cd13d0b96.png)


5. 「Recover」を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/315938/72a78407-08b6-2b61-16d6-29869e973ec4.png)


6. 復元元を指定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/315938/384e0428-7ffb-d781-f1fd-79fc64375e28.png)


7. データが入っている場所を指定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/315938/c6e308d2-2143-52f4-070a-1d71747625a1.png)


8. ネットワークフォルダを指定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/315938/f6d5ee44-08a6-e9b8-a2b6-3c1ea5a12973.png)


9. 戻したいデータ（上側）と、戻したいディスク（下型）を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/315938/1c5cf28c-15f1-c653-147d-2da7f8f73ddf.png)


10. 内容を確認してOK
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/315938/d1f2a24f-3e56-d720-3f1c-93cc8e94b70d.png)


11. リストア終わるまで待つ！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/315938/34d9346c-d48c-369b-b4f3-e1e5e9523c38.png)

12. 終わった（ステータスがOKになった）のでClose
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/315938/16c6b1df-3dff-cc3b-ef6d-4c818398dd90.png)

13. Exitを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/315938/2b082297-7805-2b0b-acb6-c959e01f5143.png)


14. Reboot選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/315938/7d7fbcd6-d095-c840-9e3a-7408b923aa53.png)

15. OS上がったよ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/315938/2b82c845-ca7a-93e2-89f5-3428bb0de458.png)

16. シャットダウンの理由いれてログイン
この手のバックアップで戻した際には出るものなので気にしなくておK
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/315938/cfb307eb-04a4-c7fd-9486-77788d909fa6.png)
Railsチュートリアル第1章の「$ printf "install: --no-document \nupdate:  --no-document\n" >> ~/.gemrc」を分解

##背景

Railsチュートリアル第1章で出てきたこれについて


```
$ printf "install: --no-document \nupdate:  --no-document\n" >> ~/.gemrc
```

ちょっと分解。プログラミング初心者なので気になるところは調べてみる。
ちなみにこの設定でgemのインストールを早くするんだって。便利～

## printf 

Wikipedia様が言うには

printf（プリントエフ）は、C言語の標準入出力ヘッダー (stdio.h) で宣言されている関数である


## "install: --no-document \nupdate:  --no-document\n"

普段からドキュメントをインストールしないように指定する。


インストールするだびに

```
gem install gem名 --no-document
```

って書くのめんどくさいからね

## >> ~/.gemrc

.gemrcというファイルに対して（作成して）、追加

## 補記
むかしは

```
--no-ri --no-rdoc
```

が使われてたらしいですね（いつの話だろう）


参照
https://ja.wikipedia.org/wiki/Printf
https://www.tmp1024.com/articles/gem-not-install-document
AWS DVAを取得するまで（開発経験なし）

[AWS SAA](https://qiita.com/sicksixrock66/items/fa7be87c0dc9a6ce1e63)と[AWS SOA](https://qiita.com/sicksixrock66/items/cae927de1b41457239ca)を取得したので
さらに知識を深めるためにAWS DVAをAWS 認定デベロッパーアソシエイトを受験し取得しました。
これでアソシエイトは制覇できました。

#勉強期間
AWS DVA合格が１月１１日で翌年の２月８日に受験したので４週間ぐらい

#勉強した内容
SOAと一緒で対策の書籍はない
ので開発者向けのサービスのBlackBelt資料をひたすら読む。

https://aws.amazon.com/jp/certification/certified-developer-associate/


>推奨される知識と経験
最低でも 1 つのハイレベルプログラム言語についての深い知識
AWS の主要なサービス、使用方法および AWS の基本アーキテクチャのベストプラクティスについての理解
AWS を使用するクラウドベースのアプリケーションの開発、デプロイ、デバッグの実力
AWS のサービスの API、AWS CLI、SDK を使用してアプリケーションを記述する能力
AWS のサービスの主要な機能を説明する能力
AWS の責任共有モデルについての理解
アプリケーションのライフサイクル管理についての理解
CI/CD パイプラインを使用して AWS にアプリケーションをデプロイする能力
AWS のサービスを使用または操作する能力
クラウドネイティブアプリケーションの基本的な知識を活用してコードに記述する能力
AWS セキュリティのベストプラクティスに従ったコードを記述する能力 (例: シークレットキーやアクセスキーをコードに記述せず、代わりに IAM ロールを使用することなど)
AWS 上でコードモジュールを作成し、管理およびデバッグする能力
サーバーレスアプリケーションのコードを記述する実力
開発プロセスにおけるコンテナの使用方法についての理解

例えばサーバレスアーキテクチャ（API Gateway+Lambda）、それに付随するセキュリティの実装、ECSなどのコンテナサービス、Codeシリーズ系のマネージドサービス

あとは、定番ですが以下の模擬試験を購入し、繰り返し勉強しました、
https://www.whizlabs.com/aws-developer-associate/

#試験を振り返って
SOAよりは簡単でした。
プログラマーの方でAWSで開発をした方であれば、特に苦戦することなく合格できると思います。
わからない問題が試験中ありましたが、AWS Well-Architected Frameworkに即していると思われる答えを選ぶことが大事だと思いました。
　
#まとめ
プログラミング経験がなくとも合格はできましたが、
正直プログラミング経験がないとあまり取得する意味がない試験なのかもしてません。
ただし、アプリ側の言ってることを理解しやすくなったり、AWSの設計方針については詳しくなれたと思います。
【体験記】AWS SAA取得しました

# はじめに
[AWSソリューションアーキテクトアソシエイト](https://aws.amazon.com/jp/certification/certified-solutions-architect-associate/)に無事合格しました。

合格にあたり他の受験を考えている方達の参考までにもろもろ残しておこうと思います。
※本記事は2020年3月22日までの試験バージョンの受験記となるため悪しからず。

# 勉強時間
多分１００時間ちょっとくらいだと思います。
かなり長い期間だらだらと続けてしまってましたが、ぎゅっと凝縮したらこれくらいかと。

# 教材・勉強方法
使用した教材は以下の通りです。

###書籍
[徹底攻略 AWS認定 ソリューションアーキテクト – アソシエイト教科書](https://www.amazon.co.jp/dp/B07M7S9GDL/ref=cm_sw_r_tw_dp_U_x_ZJQpEbQE3HT8W)![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/450342/1cc7082a-8414-2384-14aa-526d55d599d7.png)
書籍としては一番使ったかもしれないです。
大事なサービスを満遍なく説明しており、模擬試験もついてます。
ただ、少し古いのとこれだけでは合格が難しい（ここに書いてないことも普通に試験にでる）ので、この本だけでは合格は厳しそうです。基礎をつけるには良いと思います。



[一夜漬け AWS認定ソリューションアーキテクト アソシエイト 直前対策テキスト](https://www.amazon.co.jp/dp/4798059463/ref=cm_sw_r_tw_dp_U_x_jQQpEbBWE08XM)![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/450342/ef106f7b-9b51-4600-d3b4-495481beb34b.png)
その名の通り試験直前にざっと全体を振り返るのに向いてます。
2020年3月以降の試験にも対応しているみたいなので新バージョンでの受験を考えられている方にもよいと思います。
また、この本でポイントとして解説しているところが試験に実際に出題されたようにも感じました。
ただこの本はそもそも各サービスの概要をさらっとしかやらないので、一番はじめにこの本から入ると理解が難しいかもしれません。
良くも悪くもAWSを理解するというよりはAWS認定に合格するための書籍といったところ。

###講座
[手を動かしながら２週間で学ぶAWS基礎から応用まで](https://www.udemy.com/course/draft/1706378/learn/lecture/10759888?start=0#overview)
udemyの講座です。
ハンズオン形式で実際にAWSに触りながら学べる講座となります。
やはり本を読むだけでは実際にイメージしにくいので実際に触ってみるのは大事に感じました。
課金サービスにも触っていくので放置すると痛い目にみるので要注意。

###問題演習
[AWS公式模擬試験](https://aws.amazon.com/jp/certification/certification-prep/)
AWSが出している公式の模擬試験です。
自宅ですぐに受験可能ですが、3000円ほどかかります。
内容としては本試験と比べてかなり簡単です。。。
ここで７割とれたから受験するってのは結構リスクありそうです。
どんな感じの試験なのかイメージを掴む分には良さそうです。
私は書籍１冊だけ読んだあと、一回だけ受験しました。（その時は７割くらいでした）

[AWS 認定ソリューションアーキテクト アソシエイト模擬試験問題集（5回分325問）
](https://www.udemy.com/course/aws-knan/learn/quiz/4632478#overview)模擬試験５回分のudemyの講座です。
作成者も書いている通り、癖のある、やや難易度の高い問題集となります。
ある程度勉強して、細かい部分を覚えるのには良さそうです。
実際にこの模擬試験ででた問題に似たようなものも本試験で出題されました。
公式の模擬試験よりもこっちのほうが本試験の難易度に近かったです。
参考までにこの模擬試験６割くらいで私は本試験合格しました。

[AWS WEB問題集で学習しよう](https://aws.koiwaclub.com/exam/)
一部の人たちで有名(？)なサイトです。
月額３０００円くらいでかなりの数の問題集を利用できます。
１セクション７問で、問題１問解くごと回答と解説が出るので、通勤中など隙間時間でサクッと勉強できるのでかなりおすすめです。
参考までにこのサイトで７〜８割取れるようになってから本試験合格できました。
そういう意味だと一番本試験の難易度に近いかも。

# 本試験でよく問われたところ
- DynamoDBの特徴とユースケース（私が受けた時たまたまかもしれませんが、DynamoDBめちゃくちゃ出ました)

- EC2の購入オプションとインスタンスタイプ
- CLBとALBの違い
- ELBのスケーリングプラン
- S3のストレージクラス

問題は受ける日とかによってランダム（なんですかね？）なので、あくまで私が受けた時はこうでしたといった感じです。
共通して言えるのは、

- どうすれば可用性が上がるか
- どれが一番低コストか
- どれが一番アプリケーションに変更を加えずに済むか
- どれが一番セキュアか

ここらへんが聞かれることは間違い無いので、学習する際にはここら辺に着目していくことが大事だと思います。
2020年Jリーグの移籍状況を可視化したいんだけど、どうする？

## 動機
* サッカーは、毎シーズン多くの選手が移籍します。
* 今シーズンの公式サイトには、1650名（2020/1/31時点）の選手が登録されています。
* また、移籍情報を公開しているサイト[J'S GOAL’Sサイト](https://www.jsgoal.jp/transfer/2020/)に移籍情報が上がっています。
* 以前から、この選手の流動状態を可視化出来ないものかと考えていました。
* Google先生に「流入流出 グラフ」と検索しても使えそうなものはヒットしませんでした。
* それを「流入流出 可視化」とすると「サンキーダイアグラム」を発見！これは使えるかも！

## サンキーダイアグラムについて
>サンキー・ダイアグラム(英Sankey diagram)は工程間の流量を表現する図表である。矢印の太さで流れの量を表している。特にエネルギーや物資、経費等の変位を表す為に使われる。

[出典: フリー百科事典『ウィキペディア（Wikipedia）』](https://ja.wikipedia.org/wiki/%E3%82%B5%E3%83%B3%E3%82%AD%E3%83%BC_%E3%83%80%E3%82%A4%E3%82%A2%E3%82%B0%E3%83%A9%E3%83%A0)

* [pythonでsankeyダイアグラム](https://qiita.com/deaikei/items/0ad3d0608077c8b3f4d5)
* [やってみよう分析！第7章： Google Charts Sankey Diagramを使ってデータ可視化](https://qiita.com/msano/items/6c3d9d10148a683c0d7b)
* [github：ipysankeywidget](https://github.com/ricklupton/ipysankeywidget)
* [demo：Exporting Images.ipynb](https://github.com/ricklupton/ipysankeywidget/blob/master/examples/Exporting%20Images.ipynb)
* [plotly: Sankey Diagram in Python](https://plot.ly/python/sankey-diagram/)
* [matplotlib: sankey](https://matplotlib.org/api/sankey_api.html)

本家`matplotlib`はさっぱりわからない、`plotly`はとても美しいがさっぱりわからない。で一番簡単な [demo：Exporting Images.ipynb](https://github.com/ricklupton/ipysankeywidget/blob/master/examples/Exporting%20Images.ipynb)でトライ！

## 写経
```sankey.py
from ipysankeywidget import SankeyWidget
from ipywidgets import Layout
```
* 事前に`pip install ipysankeywidget`でライブラリをインストールします。
* また`jupyter lab`で使用する場合は、

```
$ jupyter labextension install jupyter-sankey-widget @jupyter-widgets/jupyterlab-manager
```
と拡張機能を登録します。

```sankey.py
links = [
    {'source': 'start', 'target': 'A', 'value': 2},
    {'source': 'A', 'target': 'B', 'value': 2},
    {'source': 'C', 'target': 'A', 'value': 2},
    {'source': 'A', 'target': 'C', 'value': 2},
]
```
これがデータ部分なので、移籍のダミーデータに置き換えます。

```sankey.py
links = [
    {'source': '北海道_in', 'target': '海外_out', 'value': 1},
    {'source': '北海道_in', 'target': 'J2_out', 'value': 1},
    {'source': '北海道_in', 'target': '大学_out', 'value': 3},
    {'source': '湘南_in', 'target': '北海道_out', 'value': 1},
    {'source': 'J3_in', 'target': '北海道_out', 'value': 1},
]
```

```sankey.py
layout = Layout(width="600", height="400")
sankey = SankeyWidget(links=links, layout=layout)
sankey.auto_save_png('./img/test.png')
```
出力の画像のサイズは幅:600ピクセル,高さ:400ピクセルで、PNG形式で保存します。
![sample_sapporo.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/126042/37d1bdb8-61ba-e4d5-2044-015f13f885b9.png)

説明するまでもないですが、加入した選手が5名で移籍した選手が2名の流れが表現できました。
（見てくれはショボいですが、一応流れは表現できそうですね）

## まとめ
* 「pythonでsankeyダイアグラム」[@deaikei](https://qiita.com/deaikei)さんや[demo：Exporting Images.ipynb](https://github.com/ricklupton/ipysankeywidget/blob/master/examples/Exporting%20Images.ipynb)の二番煎じでまだ勉強が足りない。
* [J'S GOAL’Sサイト](https://www.jsgoal.jp/transfer/2020/)では、**著作権について文書・画像・映像等の複製禁止と明示しています。**なのででスクレイピング手法や可視化の結果の共有は行いません。
* サンキーダイアグラムの可視化に関して知見が得られた。
DiscordにGithubのリポジトリの変更通知を送る方法

備忘録です。

サーバーのテキストチャンネルの設定の歯車を選択し，　```Add Webhook```をします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/352824/4a4cf20d-8fc4-f7a7-53cd-d06fd7496fc2.png)

```Create Webhook```で新しくwebhookを作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/352824/d1e0b0ff-653d-77e0-0c1f-049bf9fd712d.png)

```webhook url```のところをコピーしておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/352824/64734d99-6c24-a07b-da69-dd086936b83b.png)

Githubのリポジトリを作成します。（してある場合はカット）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/352824/13d2fc44-bcb5-a97f-312b-408a35956cfd.png)

リポジトリの```Settings```の項目から```Webhooks```を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/352824/f8d08f88-4a4e-e3ec-8b2c-6434110b12c8.png)

```Payload URL```のところには先程コピーしたURLをペーストし，　末尾に"/github"と付けます。
```Content Type```はjsonを選択します。
```Which events~```の項目は好みで選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/352824/fa574c43-5d4b-adfa-f2ba-6063007920a1.png)

そして```Add Webhook```を行います。

適当にREADMEを変更すると...
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/352824/6c2ba0ec-f2a4-6c7d-e172-afd6afc7ad1e.png)

通知を送ることができました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/352824/36be75ec-a427-a72b-4d45-fc5a59dbd1f8.png)
Acronis Cyber Backup 12.5 でWindows OSバックアップ

# Acronis Cyber Backup 12.5 でWindows OS　バックアップ

## メモ
Agentが入っているので、すべてマネージャー側で設定すればOK
とりあえずデフォルトで設定しておく


## スクショ
1. バックアップを有効にするを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/315938/71c494d2-f8fe-adca-ab00-a54254bb5885.png)


2. バックアップ先を指定する必要があるので、バックアップ先をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/315938/fdde82ff-9899-e8e6-9d8e-8238c8fa0070.png)


3. ネットワークフォルダにバックアップを入れることにする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/315938/810df498-c6b3-063d-f107-dc85bb6f3f51.png)

4. 作成をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/315938/8783a753-a991-3d6f-b983-bdc5dce2ed20.png)

5. 手動バックアップ（フルバックアップ）※今すぐ実行を押す
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/315938/0e05462d-bd2e-8651-dc0c-46973d1678dc.png)


6. こんな感じでバックアップデータが取れるよ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/315938/3aa6109f-fe26-0d34-3cb4-c18692f661f1.png)
pythonでツイートにいいねしてみた。。

#**python学習アウトプット ＃３**
##1. インタラクティブシェル
ターミナルでpythonと打って実行すると(>>>)こんなやつが出てきたらインタラクティブシェルに入ってるって感じすかねぇ
####・ インタラクティブシェルとは...
インタラクティブシェルとは、オプション -c を付加されずに起動されるシェルで、標準入出力が(仮想)端末に接続されているもの、、、らしい笑
よくわかんないす。

##2.whichコマンド
####・ whichコマンドとは
コマンドが実際に実行されているパスを探してくれるらしい。
パスとは、プログラム名だけで実行できるようにするために、PATH という環境変数（設定の一種）に「このプログラムも名前だけで実行できるようにしてください」という値を追加すること、、、らしいです。

##3. twitter APIを使って、あるキーワードに引っかかったツイートに[いいね]を押してくれるプログラムを試してみました！
###結果...
ちゃんとキーワードに引っかかった方のツイートにいいねを押してくれてましたっ
まぁコードは教えてもらっている先生が書いたコードに、APIキーとキーワードを入れただけなんですけどね笑
自分でも書けるようになるために、書いてもらったコードを見たり、自分でもいじってみたりしてどれがどういう動きをしているのかしっかり勉強しますっ
react-useのuseMediaを使ったレスポンシブ対応

[react-use](https://github.com/streamich/react-use) はhooksにあると便利なものがそろっているライブラリで、スター数的にもそれなりに使われてそうな感じがするので個人で作るときには結構導入してます


```const.ts
export const mediaQuery = Object.freeze({
  xs: '(min-width: 36rem)',
  sm: '(min-width: 48rem)',
  md: '(min-width: 62rem)',
  lg: '(min-width: 75rem)',
})
```

上記のようにモバイルファーストっぽく書いた場合

```tsx
const mq = {
  match: [
    useMedia(mediaQuery.lg),
    useMedia(mediaQuery.md),
    useMedia(mediaQuery.xs),
  ],
  colmuns: [4, 3, 2],
}
const colmunIndex = mq.match.findIndex((_) => _)
// どれともマッチしない場合は1に
const colmunLength = colmunIndex === -1 ? 1 : mq.colmuns[colmunIndex]
```

こんな感じで書くと良さそう。毎回書くので自分のコピペ用として
Nuxt.jsで日本語設定(lang属性を変更)にする方法


Nuxt.jsでは、nuxt.config.jsでlang属性を変更することが可能です。
![vue.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/559347/393445d7-5de1-a077-0bb0-478578525d5e.jpeg)

nuxt.config.jsのheadに下記コードを追記します。

```
htmlAttrs:{ lang: 'ja'}
```

全体としては下記のようになります。

```js:nuxt.config.js
head: {
    htmlAttrs:{
      lang: 'ja'
    },
    title: process.env.npm_package_name || '',
    meta: [
      { charset: 'utf-8' },
      { name: 'viewport', content: 'width=device-width, initial-scale=1' },
      { hid: 'description', name: 'description', content: process.env.npm_package_description || '' }
    ],
  }

```
これでNuxt.jsでlang属性を変更することができます。
#24 チュートリアル的な初回起動時のみ表示されるViewController1例

#はじめに
個人のメモ程度の出来なのであまり参考にしないで下さい．


#環境
Xcode：11.2.1
Swift：5.1.2
2019/11


##part1
`Main.storyboard`で`segue`を選択する．

<img width="315" alt="スクリーンショット 2020-02-08 午後9.17.16.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534708/da9f4cff-1d6c-7941-69f0-8a8bac09fa33.png">



##part2
`segue`を選択した状態で，`Attributes inspector`の`Identifier`に任意の文字列を入れる．

<img width="261" alt="スクリーンショット 2020-02-08 午後9.17.25.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/534708/8531e0e5-a6a1-145f-4c51-29fad2902979.png">



##part3
`AppDelegate.swift`の`application(_:didFinishLaunchingWithOptions:)`に4行追加する．

```swift
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        
        //この下の4行を追加
        let ud = UserDefaults.standard
        let firstLunchKey = "firstLunch"
        let firstLunch = [firstLunchKey: true]
        ud.register(defaults: firstLunch)
        
        return true
    }
```


##part4
ホーム画面の`ViewController`の`StartViewController.swift`の`viewDidAppear(_)`に7行追加する．

```swift
override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        
        //この下の7行を追加
        let ud = UserDefaults.standard
        let firstLunchKey = "firstLunch"
        if ud.bool(forKey: firstLunchKey) {
            ud.set(false, forKey: firstLunchKey)
            ud.synchronize()
            self.performSegue(withIdentifier: "toAboutApp", sender: nil)
        }
}
```



##part5
チュートリアル画面の`ViewController`の`AboutAppViewController.swift`の「閉じる」ボタンのアクションにに1行追加する．

```swift
@IBAction func toback(_ sender: UIButton) {

        //この下の1行を追加
        self.dismiss(animated: true, completion: nil)
}
```
jupyterで%matplotlib inlineしなくてもinlineになっているわけ

# 背景、疑問
ただいまjupyterで機械学習についてオンラインコースで勉強しているところなのですが、そこで`%matplotlib inline`しないとcell内にグラフが表示されないよ、と教えられました。

がしかし、`%matplotlib inline`コマンド実行しなくてもcell内にグラフが表示されるので、なぜかと思ってちょっと調べてみました。

# 原因まとめ
もともとは`%matplotlib inline`する必要があったようです。
しかし、あるときからデフォルトでinlineがオンになるように修正されたようです。
コミットログとGitHubのリリースタブからipykernel 4.4.0からはinlineがデフォルトでオンになっているようです。

## コミットログ
コミットログを見ると2016/07/13にコミットされた変更のようです。

```console
$ git clone https://github.com/docker/doodle.git
$ cd ipykernel/
$ git log -1 70e096805778cb79eb1729f5bb2f9ddebf85e001
commit 70e096805778cb79eb1729f5bb2f9ddebf85e001
Author: Benjamin Ragan-Kelley <benjaminrk@gmail.com>
Date:   Wed Jul 13 19:54:24 2016 -0500

    Make inline the default matplotlib backend

    uses MPLBACKEND env (matplotlib > 1.5).

    Trigger extra IPython inline setup when inline backend is loaded.
    We can't call the simpler `ip.enable_matplotlib()` here because
    this will be triggered during pyplot import,
    and enable_matplotlib() imports pyplot which isn't ready yet.
```

## GitHubのReleasesタブ
そしてその変更がどのバージョンで取り込まれたのかをGitHubのreleasesタブで見てみると4.4.0から含まれているようです。
https://github.com/ipython/ipykernel/releases?after=4.4.1

# その他
GitHubにissueもあがっていました。(反映されていないようで、まだOpenのままですが・・・)
https://github.com/ipython/ipython/issues/6424
Unity個人的な覚書

・versionは2018.4.16f1
・UIメニューはPanelオブジェクトを作成して、その下にUIオブジェクトを配置する
・Reference Resolution 1125*2001　or　1920*1080
・Canvasの[Canvas Scaler] > [Scale With Screen Size] > [Expand]

APKの改造防止策
https://qiita.com/yukiarrr/items/764adb88f5a485f714d8

・Unityをwindowsで実行した際のパス
C:\Users\ユーザー名\AppData\LocalLow\company_name


【Unity】アスペクト比や解像度に合わせてUIの位置とサイズを固定する方法
https://pengoya.net/unity/ui-fix/

縦横フリースタイルで遊ぶ、スマホゲームの振り返り
https://www.slideshare.net/masayahamazaki/ss-91315339

CanvasにUIが表示されなくなったときの
チェックすべき１３のポイント
http://kimama-up.net/unity-ui-non-display/

【Unity】Sceneビューで表示されるGameObjectがGameビューで表示されない時の対処法
https://redfreshet.com/2015/09/09/unity_sceneview_gameview_invisible/

【Unity有料アセット】Easy Saveで解決したエラーについて
https://unity-shoshinsha.biz/archives/1111

【Unity】UnityWebRequestを使って画像ファイルをダウンロードし保存する
https://www.chuken-engineer.com/entry/2019/11/29/085421

【Unity】ネット上から画像を取得して表示してみる
https://www.hanachiru-blog.com/entry/2019/07/12/233000

UnityWebRequestTextureでテクスチャが解放されないパターン
https://spphire9.wordpress.com/2020/02/01/unitywebrequesttexture%e3%81%a7%e3%83%86%e3%82%af%e3%82%b9%e3%83%81%e3%83%a3%e3%81%8c%e8%a7%a3%e6%94%be%e3%81%95%e3%82%8c%e3%81%aa%e3%81%84%e3%83%91%e3%82%bf%e3%83%bc%e3%83%b3/

Unityのバージョン上げたら外部URLから取得した画像の表示がおかしくなったので直した。
https://qiita.com/Rwf-9DH3/items/1e5e0be356773544e8eb

Unity - コールバックの記述まとめ
https://qiita.com/kamanii24/items/b1e93b2d36a26c06530e

デリゲート(Delegate)やイベント(Event)とは【C#】
https://kan-kikuchi.hatenablog.com/entry/Delegate

Unity のコルーチンで結果を受け取る
https://qiita.com/chiepomme/items/2bccc5c6f5b803df8e57

Buttonを整列させる、キー選択をする
https://unity-shoshinsha.biz/archives/1119#Vertical_Layout_Group


Photon公式：ターンベースゲームデモ
https://doc.photonengine.com/ja-jp/pun/v1/demos-and-tutorials/package-demos/rockpaperscissors-demo

UnityにPUNを導入した際のRPC送受信エラーに対応できない
https://teratail.com/questions/258732

PunTurnManager Class Reference
https://doc-api.photonengine.com/ja-jp/pun/current/class_photon_1_1_pun_1_1_utility_scripts_1_1_pun_turn_manager.html#details


【Unity】クリックしたゲームオブジェクトを取得する
https://tech.pjin.jp/blog/2018/09/03/unity_get-clicked-gameobject/


Unity 「DOTween Pro」でUIアニメーションを作ってみた（カットイン）
https://note.com/ncfactory/n/ncc8bf41652c1










Addressable Asset System を試してみました。(ビルド方法の参考)
https://qiita.com/kamihiro/items/3e9876bd4e4462a57d1d

ResourcesのシンプルさとAssetBundleの自由度を実現したAddressable Assetsとは(脱Preview記念リライト)【Unity】【Addressable Assets】
https://kan-kikuchi.hatenablog.com/entry/Addressable_Assets_Rewrite

【Unity】Addressable Assets Systemを使ってサーバに配置したAsset Bundleを読み込む方法
https://qiita.com/nisoka/items/66308f5d1029c1f29253
casaのimmomentsの使い方


#immoments
- cubeデータを様々な方法で軸を減らすことができる**casa**のtaskの一つ
    - 例えば、cubeを積分強度や速度場、速度分散などにできる
- 公式ドキュメントは[こちら](https://casa.nrao.edu/docs/TaskRef/immoments-task.html)

##指定できるパラメーター

```
imagename           =         ''        #  Name of the input image
moments             =        [0]        #  List of moments you would like to compute
axis                = 'spectral'        #  The momement axis: ra, dec, lat, long, spectral, or stokes
region              =         ''        #  Region selection. Default is to use the full image.
box                 =         ''        #  Rectangular region(s) to select in direction plane. Default is to use the entire direction plane.
chans               =         ''        #  Channels to use. Default is to use all channels.
stokes              =         ''        #  Stokes planes to use. Default is to use all Stokes planes.
mask                =         ''        #  Mask to use. Default is none.
includepix          =         -1        #  Range of pixel values to include
excludepix          =         -1        #  Range of pixel values to exclude
outfile             =         ''        #  Output image file name (or root for multiple moments)
```

とりあえずは、

- imagename
- moments
- outfile

を指定すればよい。

momentsは以下を参考に値を指定する。

```
moments=0   - 積分強度  
moments=1   - 速度場
moments=2   - 速度分散  
moments=3   - 強度の中央値  
moments=4   - coordinateの中央値
moments=5   - スペクトルの平均の標準偏差  
moments=6   - root mean square of the spectrum  
moments=7   - absolute mean deviation of the spectrum  
moments=8   - スペクトルの最大値  
moments=9   - coordinate of the maximum value of the spectrum  
moments=10  - スペクトルの最小値  
moments=11  - coordinate of the minimum value of the spectrum
```



##参考スクリプト

- 積分強度を作成し、imageを出力

```Python3:immoments.py
import os
import pyfits

fname = "oooo.image" or "xxxxx.fits"

fn = os.path.splitext(fname)[0]
outfile = fn+"_mom０"
immoments(imagename = fname,
          moments = [0],
          outfile = outfile+".image")

exportfits(imagename = outfile+".image",
           fitsimage = outfile+".fits",
           dropdeg = True,
           overwrite = True,
           history = False)

```

---
その他の関数は[こちら](https://qiita.com/164kondo/items/052ad8dee5d9f59d5ca3)
【ふくだ学習録】アプリ制作part1【28日目】

# ふくだ学習録とは？
ふくだが学習したことの備忘録。
目に見える形で残すことによってやる気を出す個人的な作戦です。
他人に見せるように書いているわけではないので、すごく読みにくいです。

### 読了した本
[データベースエンジニア養成読本 [DBを自由自在に活用するための知識とノウハウ満載!]](https://www.amazon.co.jp/dp/4774158062/ref=cm_sw_r_tw_dp_U_x_FPphEbQFPPQRM )
[ゼロから作るDeepLearning](https://www.amazon.co.jp/dp/4873117585/ref=cm_sw_r_tw_dp_U_x_y3UiEbF3P6EG7)
[PHPフレームワーク CakePHP 3入門](https://www.amazon.co.jp/dp/4798048577/ref=cm_sw_r_tw_dp_U_x_.YIjEbS1K4JY2)
[SQLアンチパターン](https://www.amazon.co.jp/dp/4873115892/ref=cm_sw_r_tw_dp_U_x_XlokEbJQK2N7P )
[Docker入門](https://www.amazon.co.jp/dp/480071091X/ref=cm_sw_r_tw_dp_U_x_xVlmEbN8ZTHZK)


### 今読んでいる本

なし

# アプリ制作

### アプリケーション構成

[milanote](https://milanote.com/)ってアプリがすごい使いやすくて設計考えるのによかった！
大体の構成はこんな感じでいく！

![export_canvas_adgallery-200208_0900.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/356866/bf8035eb-0290-4ce1-874d-065caa802d95.png)


まずはSPA部分の制作！

### SPA部分
今回は、`Nuxt.js`ではなく`Next.js`を使用していく。
選定理由は「学習できることが多そうな方はNext.jsっぽい」という理由。

以下もうちょい詳細な理由
・Next.jsはミニマリズム、Nuxt.jsは包括的なフレームワークってイメージがある。
・Nuxt.jsの方が文献が多くあるので、学習コストが低そう。（ちなみにこれはマイナス評価）
・今回はAPIサーバを別で立てるので、Nuxt.jsの機能は機能過多になりそう。


以下選定の際に参考にした記事。（Koa.jsも検討しよ）
[TypeScript と Redux に入門しながら Next.js でサンプルアプリケーションを作ってみた](https://qiita.com/monzou/items/8ff07258a42042075d7b)
[なぜNext.jsを選んだのか？
DMMのサービスを支えるフロントエンド技術の今](https://logmi.jp/tech/articles/320546)

### SPA環境構築
下記記事を参考に環境構築を行なう。

[10分で作るNext.jsとDockerを使ったSSR+SPA環境](https://qiita.com/Yuta_Yamamoto/items/4e972621b85f45a68176)

### Next.js
下記を読んで実装していく。

[Next.jsチュートリアル翻訳](https://qiita.com/tetsutaroendo/items/31300a5e475688a2f4ec#%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3url%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AE%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%E3%82%B5%E3%82%A4%E3%83%89%E3%81%A7%E3%81%AE%E3%82%B5%E3%83%9D%E3%83%BC%E3%83%88)


# 今日の一言
dockerでNext.js動くような環境作成した！
ngnixをプロキシにnode.jsで作ったけど、なぜかngnixがnodeの方に繋いでくれへん、、、
dockerむっっっず。
Acronis Cyber Backup 12.5でブータブルメディアを作成

# Acronis Cyber Backup 12.5でブータブルメディアを作るスクショ
Acronisサイトからダウンロードも出来るのでそれ使えばいい気がする…

1. Bootable Media Builderを起動
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/315938/df04ae8c-da70-c544-943e-a34130092890.png)

2. 次へ（トライアル版で動かしてます）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/315938/5ce3d98a-911b-4789-6fe3-956b9c18e195.png)

3. メディアの種類を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/315938/ccb76d93-39e8-fa11-5803-8479d74c4770.png)
選択肢は↓
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/315938/fc722004-f476-c549-1870-5a7a2adccb7c.png)
WindowsPEを選ぶとWinADKとかいるよ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/315938/2f5d8a47-c906-a8eb-19df-8848351c88ad.png)


4. カーネルパラメーターは空白で次へ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/315938/1ff3b6bc-1c24-ba87-2428-557594acbf5d.png)


5. BackupAgentを選択して次へ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/315938/d8f46ce3-4b46-dfcb-a61f-90b00e1b5b15.png)

6. 次へ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/315938/1ff11310-b186-9348-46a3-7e1fce46763b.png)


7. ISOファイルで出力
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/315938/2966b71e-6a19-ee79-b3fc-290fc070ddcc.png)


8. 名前を付けて保存
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/315938/2bc326eb-49c0-53b7-8bae-e6e7af806d28.png)

9. 実行
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/315938/45effb29-f08d-fc73-101d-46aca884e64c.png)

10. 完成！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/315938/d927882b-cc53-11e3-c67e-f6d3c76d1212.png)
Yiiのデバッグツールでユーザーを自由に切り替えるSwitchUser

# 概要
Yii2のデバッグツールには、ユーザーを自由に切り替える機能があります。
開発中色々なユーザーで動作確認をしたいときに大変便利です。

## 前提条件
- debugツールバーが使える
- userの設定ができている

## 設定

common/config/main-local.php

```php5
'modules'=>[
    'debug' => [
        'class' => 'yii\debug\Module',
        'panels' => [
            'user' => [
                'class' => 'yii\debug\panels\UserPanel',
                'ruleUserSwitch' => [
                    'allow' => true,
                    'roles' => ['@'],
                ],
            ],
        ],
    ],
],

```

この設定でdebugツールのUserパネルにSwitchUserタブが表示されます。
【Mysql】日付カラムのデータ型はdate型?varchar型? 問題を議論してみたい

こんにちは。
データエンジニアのKotaです。
初投稿ですが、お手柔らかにお願いします。

普段僕は自社プロダクトのデータ分析チームで、
ビッグデータ分析基盤の要件定義~運用まで一気通貫で作らせて頂いてます。

そこで今回議論したいのが、表題の件。

現場によっても、下手すれば現場内のDBによってもバラバラの型をしている日付カラム。
皆さんお持ちのDBでは、どちらの型になっているでしょうか？？

#議論したいと思ったきっかけ

かくいう僕も、この問題で先日上司と軽くバトりました。
まずはその話から簡単に触れます。ちなみにエンジンはMysqlです。

ある日、別の分析基盤を作っている後輩のDB設計書をレビューする機会がありました。メンバーは後輩・僕・上司の3人。
そこで後輩が、分析用一時テーブルの日付列のデータ型を以下の様にしていました。

|*カラム名*    |*データ型*             |
|----------|--------------------------|
|CREATE_TIME(作成日) | varchar(14)    |
|UPDATE_TIME(更新日) | varchar(14)    |


恐らく一部マスタ系のテーブル以外はほぼ持っているであろうこのカラム。

これに対し、語気を強めてツッコミを入れたのが先輩です。

**「ここの2つさ、datetime型にしてよ!!!」**

お？そんな強く言うこと？
いや、てか別にvarcharで良くね？
むしろvarcharが良くね？と思ったのが僕。

その旨上司に伝えてみると、

**「いやいや絶対datetime型!!」**の一点張り。

その場で議論が始まるも、平行線。
ちなみに既存の分析基盤はdatetimeだったので、
しょうがなく僕が折れる形でdatetimeに決着しました。


#僕の言い分

事実だけ伝えられても「そっか...」って感じだと思うので、
お互いの主張の理由を見てみましょう。



まずは僕から。僕の主張の根拠は以下3つです。

**①チューニングのしやすさ**
**②業務用DBとのフォーマット合わせ**



①
僕が重視したのはこれです。
検索の際に関数を指定しなくて良くなるので非常に楽。
特に既存の分析用SQLなんかは、
件数が億に迫るテーブルから、1日分のデータを以下のように算出していました。

```
SELECT ...
FROM ...
WHERE DATE(RPAD(UPDATE_TIME,14,0)) BETWEEN DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY) AND CURRENT_DATE();
```

ちなみにこれ以外に条件はありません。中にはこれに加え、結合を行っているものも複数あります。
WHERE条件で使用しているUPDATE_TIMEをdate型に変換+謎のRPAD関数と、
関数を2ネストかましています。(恐らく不良データ対策でしょう)
当然関数を使ってるのでインデックスは効きません。
それどころかこのテーブル、UPDATE_TIMEを第一項目としたインデックスすら付与していない始末。
既に件数が億近いテーブルからこの条件でデータ抽出。よく今までやってたな...って感じです。
UPDATE_TIMEがvarcharになれば、不必要にdate変換なんてしなくて良いので、
インデックス効くようになるし。RPADは知らん。作った人辞めてて理由は誰も知らん。地獄って感じ。

②こちらの理由もあります。うちの現場、UPDATE_TIMEの扱いがDBによって違います。

**★業務用DB**

|*カラム名*    |*データ型*             |
|----------|--------------------------|
|CREATE_TIME(作成日) | varchar(14)    |
|UPDATE_TIME(更新日) | varchar(14)    |

**★分析用DB**

|*カラム名*    |*データ型*             |
|----------|--------------------------|
|CREATE_TIME(作成日) | datetime    |
|UPDATE_TIME(更新日) | datetime    |

**★分析結果可視化用DB**

|*カラム名*    |*データ型*             |
|----------|--------------------------|
|CREATE_TIME(作成日) | datetime    |
|UPDATE_TIME(更新日) | datetime    |

何で違うんでしょうね。作った人辞めてて理由は誰も知らん。地獄って感じ。
恐らく可視化の際に、BIツールでのデータソース読み込みで都合が悪そうだからdatetimeにしてるのかな...って感じはします。

今回後輩君はこの理由でvarcharにしたそうです。不良データなら可視化DBに移送する際にチェックできるし。だそうです。その通りだと思います。


#上司の言い分

一方、上司の言い分です。

**①現行踏襲**
**②不良データへのリスク**
**③設計書見て、「日付入れてるんだな」って分かりやすい**

①、③は聴き流してました。

②が彼のメイン主張。
僕のチューニングに対する言い分を聞いた上で、
「運用乗ってるし、何か変わったときに変なデータ入って処理が落ちるリスクがある」んだそう。
その辺の検証をする時間的余裕はない！って言われてしまったので、
それ以上何も言い返せず、この場は終わりました。


#モヤモヤする...。

あまりにモヤっとなのでここに書かせて頂きました。
またハードウェアに優しくない激重SQLが1つ出来上がってしまうのかと思うと...。

僕が経験してきた現場でも、ここの型にはバラツキがあったので気になります。どっちがより良いんでしょうか。


**皆さんの現場ではここのデータ型、何にしていますか？**
**どんな理由があってその型にしていますか？**

ぜひご教授頂けたら、とても嬉しいです。

最後まで見て頂いて、ありがとうございました。
【Unity】ARKit2で3Dマーカー認識をする際、出現させるオブジェクトを自由に配置したい時

下記の記事を読みながら、3Dマーカーに合わせてオブジェクトを発生させようとしたけれど、オブジェクト自体の座標やGameObjectの座標を変えても発生する場所が全く変わらなかった。

http://nn-hokuson.hatenablog.com/entry/2018/09/19/205354



どうやら、GameObjectやオブジェクト自体に設定されたパラメータに関係なく、マーカーに対して敷かれた座標系における原点に配置されるらしい。

そのため、ダミーとなるゲームオブジェクトを設定し、その中に発生させたいオブジェクトを配置するといい。
<img width="729" alt="スクリーンショット 2020-02-08 21.16.03.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/412023/3f4e1cc8-6ef2-ba34-c4a7-fab75a3527be.png">

ゲームオブジェクトを原点に設定し、そこから相対的に座標を指定すれば、オブジェクトを自由に配置できる。

<img width="727" alt="スクリーンショット 2020-02-08 21.16.38.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/412023/f8622224-2719-b670-711d-5886d60aaec9.png">
Python ブール演算の戻り値はbool型とは限らない

Pythonでブール演算を行えるのはbool型だけではなく、戻り値もbool型とは限らない。

オブジェクトの真理値を確認するには`bool()`：

```python

>>> bool(123)
True
>>> bool([1,2,3])
True
>>> bool('abc')
True
>>> bool({'a':1, 'b':2, 'c':3})
True
>>> bool((1,2,3))
True

>>> bool(0)
False
>>> bool([])
False
>>> bool('')
False
>>> bool({})
False
>>> bool(())
False
>>> bool(None)
False
```

## and
左オブジェクトの真理値が真なら右オブジェクトを返す：

```python

>>> True and True
True
>>> [1,2,3] and 'abc'
'abc'
>>> 'abc' and [1,2,3]
[1, 2, 3]

>>> True and False
False
>>> [1,2,3] and ''
''
>>> 'abc' and []
[]
```

左オブジェクトの真理値が偽なら左オブジェクトを返す：

```python

>>> False and True
False
>>> [] and 'abc'
[]
>>> '' and [1,2,3]
''

>>> False and False
False
>>> [] and ''
[]
>>> '' and []
''
```

## or 

左オブジェクトの真理値が真なら左オブジェクトを返す：

```python
>>> True or True
True
>>> [1,2,3] or 'abc'
[1, 2, 3]
>>> 'abc' or [1,2,3]
'abc'

>>> True or False
True
>>> [1,2,3] or ''
[1, 2, 3]
>>> 'abc' or []
'abc'
```

左オブジェクトの真理値が偽なら右オブジェクトを返す：

```python
>>> False or True
True
>>> [] or 'abc'
'abc'
>>> '' or [1,2,3]
[1, 2, 3]

>>> False or False
False
>>> [] or ''
''
>>> '' or []
[]

```

## not
bool型しか返さない。
オブジェクトの真理値が真ならFalse：

```python

>>> not True
False
>>> not [1,2,3]
False
>>> not 'abc'
False
```

オブジェクトの真理値が偽ならTrue：

```python

>>> not False
True
>>> not []
True
>>> not ''
True
```
macでtreeコマンドを使ったときに日本語が文字化けする問題

## 状況

treeコマンドを使ったときに日本語の名前のファイルが文字化けしてしまったので、文字化けさせずに表示させたい

## 解決方法
ググったら簡単に出てきたのでまとめておきます

```
tree -N
```

オプションをつけるだけで治るみたいですね
GKEでnodeを作る時ipたくさん取られた

# TLDR
> Reducing the maximum number of Pods per node also lets you create smaller clusters that require fewer IP addresses.

実はクラスタには`default-max-pods-per-node`というデフォルトパラメーターが付いていて、`110`に設定されています。nodeを設定する時 `max-pods-per-node`を設定して上書きしないと、nodeが作られる旅に/24のCIDRが振り分けられ（node上１１０のpodがいなくても）、たとえ/21のCIDRをsubnetに振っても８つのnodeしか作れません。

# 結論
- クラスターの`default-max-pods-per-node`を小さくし
- nodeはスペックごとに`max-pods-per-node`を設定しましょう
GMAILから特定の文字を抽出⇒スプレッドに出力する方法

##はじめに
COBOLしか触ったことがない元エンジニアがGASにてアプリケーションの開発をしてみました。鉞は投げず暖かく見守ってください。。

##【概要】
社内で飛び交っているメール群から、必要な情報だけを抽出して
スプレッドシートに書き出すプログラムを作成しました。

##【詳細】
・件名に「検索ワード１」と「検索ワード２」を持っているメールを抽出
・メール本文から、「特定の文字」の後ろにある数字（桁数ランダム、かつ先頭が0以外）
　をスプレッドシートに出力する

##【ソースコード】
```
function myfanction(){
  var mailQuery = 'subject:検索ワード１ subject:検索ワード２ newer_than:1m';
//「件名に検索ワード１、検索ワード２を持っている」「受信から１か月以内」
 
  var threads = GmailApp.search(mailQuery);  
  var messages = GmailApp.getMessagesForThreads(threads);
//条件に合致するメールを抽出  

  var sheet = SpreadsheetApp.getActiveSheet();
  
  for(var i=0; i<messages.length; i++){
    var plainBody = messages[i][0].getPlainBody();
    var hitText = plainBody.match(/'特定の文字'.*/);
//抽出したメール本文から、特定の文字を抽出

    if (hitText ==null){
      continue;
    } 
//抽出したい文字が見つからなかった場合の処理

    var deletedText = hitText[0].replace('特定の文字', '').replace(' ', '');
//特定の文字の後ろにある数字を抽出したいので、「特定の文字」は削除。
//ゴミ（スペース）も削除    

    var resultText = deletedText.match(/^\d+/);
//頭の文字から、文字が終わる箇所までを抽出

    if (resultText ==null){
      continue;
    } 

    sheet.appendRow(resultText);
  }
}
```

##大変だったこと
- hitText、resultText変数がnullだった場合の処理を怠っており、
例外が発生した
- 配列の概念をぶっちゃけ理解していなかった。（まだ出来ていないかもしれないのでこれから頑張る）


以上