OmniAICreator/Qiita-1.07M huggingface dataset:
TypeScriptで`?:`の書き方はなに？それはundefinedを許可するものです。


## 結論

`?:`の書き方は`undefined`型を許可しています。

```ts
interface Hoge {
  name?: string;
}
```

## 解説

`toInt`メソッドの返り値のオブジェクトの`int`に`int?: number`を指定しています。

これは、`int`には`number`か`undefined`型が返ってくる事を表しています。

```ts

function toInt(str: string): { valid: boolean, int?: number } {
  const int = parseInt(str);
  if (isNaN(int)) {
    return { valid: false };
  }
  else {
    return { valid: true, int };
  }
}
```

### どんな時に使う

上記の例の通リ、
返ってこない可能性のある返り値の要素や
渡されない可能性のある引数に使えます。

## 参考
https://typescript-jp.gitbook.io/deep-dive/recap/null-undefined#undefined-nonawosuru
LaradockでLaravelの環境構築

# 前提環境
〇Mac
〇docker-compose使用可能
〇git使用可能

# 手順
1）Laradockのインストール
2）Laradockの.envファイル作成
3）Dockerで開発環境起動
4）Laravelのインストール
5）ブラウザにアクセス

## 1）Laradockのインストール
適当なディレクトリに移動し、以下コマンドを実行する

```
$ mkdir my_project
$ cd my_project
$ git clone https://github.com/Laradock/laradock.git
```

## 2）Laradockの.envファイル作成
Laradockの設定ファイルの1つである.envファイルを作成する

```
$ cd laradock
$ cp env-example .env
```

エディタで.envファイルを編集する

変更前

```ruby:.env
APP_CODE_PATH_HOST=../
DATA_PATH_HOST=~/.laradock/data
COMPOSE_PROJECT_NAME=laradock
```

変更後

```ruby:.env
APP_CODE_PATH_HOST=../laravel
DATA_PATH_HOST=../data
COMPOSE_PROJECT_NAME=my_project
```

## 3）Dockerで開発環境起動
以下4つのコンテナを起動する
〇workspace
〇php-fpm
〇nginx
〇postgres

Laradockディレクトリに移動する

```
$ cd ~/my_project/laradock
```

コンテナを起動する

```
$ docker-compose up -d workspace php-fpm nginx postgres
```

コマンドを実行後、たくさんのメッセージが表示され、最後に以下メッセージが表示されればコンテナの起動に成功

```
Creating laravel-sns_docker-in-docker_1 ... done
Creating laravel-sns_workspace_1        ... done
Creating laravel-sns_php-fpm_1          ... done
Creating laravel-sns_nginx_1            ... done
Creating laravel-sns_porstgres_1        ... done
```

コンテナを停止したい場合は、以下コマンドを実行する

```
$ docker-compose stop
```

## 4）Laravelのインストール
`my_project/laradock`ディレクトリで以下コマンドを実行する

```
$ docker-compose exec workspace composer create-project --prefer-dist laravel/laravel project_name
```

## 5）ブラウザにアクセス
Laravelのインストールが完了後、`localhost`にアクセスする
以下の画面が表示されれば成功
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/496467/7549fb2c-9d78-1ed1-154c-d4032ec007ff.png)
【Laravel】 データベース 続き

この記事は以下の書籍を参考に執筆しました

- [PHPフレームワークLaravel入門 第2版](https://www.amazon.co.jp/PHP%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E3%83%AF%E3%83%BC%E3%82%AFLaravel%E5%85%A5%E9%96%80-%E7%AC%AC2%E7%89%88-%E6%8E%8C%E7%94%B0-%E6%B4%A5%E8%80%B6%E4%B9%83/dp/4798060992/ref=tmm_hrd_title_0?_encoding=UTF8&qid=1595991312&sr=1-2)


##MySQLの設定

```php5:config/database.php
'database' => env('DB_DATABASE', 'forge'),
```
>出典：[PHPフレームワークLaravel入門 第2版](https://www.amazon.co.jp/PHP%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E3%83%AF%E3%83%BC%E3%82%AFLaravel%E5%85%A5%E9%96%80-%E7%AC%AC2%E7%89%88-%E6%8E%8C%E7%94%B0-%E6%B4%A5%E8%80%B6%E4%B9%83/dp/4798060992/ref=tmm_hrd_title_0?_encoding=UTF8&qid=1595991312&sr=1-2)


使用するデータベース名
SQLiteではデータベースファイルの名前だが、MySQLはサーバーに用意されているデータベース名を指定。

##.envの環境設定について
Laravelの環境変数を以下のように設定する。

```:.env
DB_CONNECTION=sqlite
```

#DBクラスの利用
###DB::selectの利用
```php5
$変数=DB::select(実行するSQL文);
```
select文を実行するものだと思えばいい
戻り値はオブジェクトをまとめた配列のためテンプレ側のforeachで表示できる。

##パラメータ結合の利用
文字列とパラメータ配列を組み合わせてSQL文を作成する

```php5
    public function index(Request $request)
    {
      if(isset($request->id)){
        $param=['id'=>$request->id];
        $items=DB::select('select * from people where id=:id',$param);
      }else {
        $items=DB::select('select * from people');
      }
      
      return view('hello.index',['items'=>$items]);
    }
```
>出典：[PHPフレームワークLaravel入門 第2版](https://www.amazon.co.jp/PHP%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E3%83%AF%E3%83%BC%E3%82%AFLaravel%E5%85%A5%E9%96%80-%E7%AC%AC2%E7%89%88-%E6%8E%8C%E7%94%B0-%E6%B4%A5%E8%80%B6%E4%B9%83/dp/4798060992/ref=tmm_hrd_title_0?_encoding=UTF8&qid=1595991312&sr=1-2)



/hello?id=とアクセスすると番号のレコードが表示される。

クエリ文字列の項目名から値を取得して
SQL分の第2引数へ配列を渡している。

##DB::insert
```php5
DB::insert(クエリ文,パラメータ配列);
```


##DB::update
```php5
DB::update(クエリ文,パラメータ配列);
```

##DB::delete
```php5
DB::delete(クエリ文,パラメータ配列);
```

上記を使ってCRDUが実現できる。

しかしこれはSQLクレイブンを使った実行の仕方でスマートとは言えない
次はクエリビルダをやってみる

#参考文献

- [PHPフレームワークLaravel入門 第2版](https://www.amazon.co.jp/PHP%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E3%83%AF%E3%83%BC%E3%82%AFLaravel%E5%85%A5%E9%96%80-%E7%AC%AC2%E7%89%88-%E6%8E%8C%E7%94%B0-%E6%B4%A5%E8%80%B6%E4%B9%83/dp/4798060992/ref=tmm_hrd_title_0?_encoding=UTF8&qid=1595991312&sr=1-2)
[Rails]Administrateでメインアプリで使っていたヘルパーメソッドを動作させる方法

# 困ったこと、やりたいこと

>**＼＼＼メインアプリのヘルパーメソッドが使えない／／／**

Railsアプリで管理画面を作成するために、**[Administrate](https://github.com/thoughtbot/administrate)というgemを使用した時のこと**です。
メインアプリのビューで使うためにhelperファイルに定義したhelperメソッドを、admin以下のビューでも使おうとしたところ、下記のエラーが…

<img width="667" alt="スクリーンショット 2020-07-21 21.00.03.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/602794/855ed18e-11c1-ce94-3b13-7bb7bbd0d275.png">

`image_present?`は、**メインアプリのビューで使用しているヘルパーメソッド(自分で`helpers/shops_helper.rb`に定義したもの)**です。
メインアプリではNoMethodErrorにならないのに…どうすればいいの？？？

## 環境
- Ruby 2.5.1
- Rails 5.0.7.2
- Administrate 0.14.0

# 結論
**1. `config/application.rb`ファイルに、下記の設定を記述する。**
**2. アプリケーション（サーバー）を再起動する**

以上。簡単でした笑


```ruby:config/application.rb
module Hoge
  class Application < Rails::Application
    # 他のconfigが書かれてるかも

    # ここから
    config.to_prepare do
      Administrate::ApplicationController.helper Hoge::Application.helpers
    end
    # ここまで
  end
end
```
※`Hoge`はアプリ名です。通常ならば、1行目の`module`の後ろにrails newした時のアプリ名が記載されているはずです。
>`Administrate::ApplicationController.helper Hoge::Application.helpers`

の`Hoge`の部分を、ご自身のアプリ名に置き換えてください。

## しっかりGitHubのIssuesに挙げられていて、解決済みだった
[Best way to include main app helper modules in administrate? #334](https://github.com/thoughtbot/administrate/issues/334#issuecomment-193806299)
<img width="925" alt="スクリーンショット 2020-07-21 20.51.34.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/602794/a4e92417-b129-7b37-7971-b99f0cfffd95.png">

# 余談
[参考記事に挙げたGitHubのIssues](https://github.com/thoughtbot/administrate/issues/334#issuecomment-193806299)を見ていると、他の方法もあるよう。

<img width="918" alt="スクリーンショット 2020-07-21 20.52.13.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/602794/116d4e7b-1d3b-2ba3-195a-2e1614163a37.png">

こちらの方法は、
1. `helpers`ディレクトリの下に`administrate`ディレクトリを作成
2. そこに`application_helper.rb`ファイルを作成
3. そこにヘルパーメソッドを再度定義する
という方法のようです。

## 試しにやってみた
```ruby:helpers/administrate/application_helper.rb
module Administrate::ApplicationHelper
  def image_present?(shop)
    if shop.shop_images.present?
      image_tag "#{shop.shop_images[0].shop_image}", class: 'top-cover-img shop-img'
    else
      image_tag asset_path('no-image.png'), class: 'top-cover-img shop-img'
    end
  end
end
```
ポイントは、`module`の宣言の際に、クラスの継承？(`Administrate::ApplicationHelper`)を記述することだそうです。
これがないとRouting Errorになります。
<img width="564" alt="スクリーンショット 2020-07-21 21.10.13.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/602794/13facb2c-c392-81d3-80b9-42d3ae87c5a5.png">

## 実現できるが、DRY原則に反する
一応上記の方法でも実現できましたが、同じヘルパーメソッドを2回定義することになるので、**DRY原則に反する**なと思いました。

無駄なファイルも作成しなくていいので、冒頭の方法をおすすめします。
【ポートフォリオを作成する方へ】ミスを減らして、読みやすいコードへ -Rubocop Airbnb-

##Rubocop Airbnbとは
書かれたコードをコーディング規約に沿っているかチェックしてくれるライブラリです。構文解析ツールとしてRubocopが有名ですが、色々な設定があるので、今回は開発現場用にカスタマイズされたrubocop-airbnbを導入していきます。

##導入

#####gemをインストール
```ruby:Gemfile
 group :development, :test do
   gem 'rubocop-airbnb'
 end
```
```
 $ bundle install
```

#####ファイル作成

Gemfileと同じディレクトリに.rubocop.yml と .rubocop_airbnb.ymlを新規作成します。

```ruby:.rubocop.yml
inherit_from:
  - .rubocop_airbnb.yml

AllCops:
  Exclude:
  - 'bin/*'
  - 'config/**/*'
  - 'db/**/*'
  - 'spec/spec_helper.rb'
```
```ruby:.rubocop_airbnb.yml 
require:
   - rubocop-airbnb
```
呼び出した際にエラーが出る時はここのファイルの"."や"_"のつけ忘れや入力ミスの可能性があるので気をつけてください。

#####rubocopの実行
```
$ rubocop --require rubocop-airbnb
```

#####自動修正方法
```
$ rubocop --require rubocop-airbnb -a
```
##まとめ
修正は後になるほど大変になるので、ぜひコードを書き始める前に導入してみてください。

##参考
https://github.com/airbnb/ruby/tree/master/rubocop-airbnb
MQTT通信でM5Stackの背景色を変更する。-UIFlowカスタムブロックの作成-

## 概要
UIFlowを使ったM5Stackの開発で、必要な機能ブロックがなかったため
こちらの記事「[自作モジュール用のUI Flowのカスタムブロックを作る](https://qiita.com/ciniml/items/618899c9065d51d5c54e)」を参考にカスタムブロックを作成しました。
　今回はM5Stack上の背景色をMQTT受信値で変更するUIFlow機能ブロックの作成方法について説明します。
　前回説明した、自作「[呼出システム](https://qiita.com/macole/items/03787c863c990756aee4)」の中で、状態を色で表現するUIに利用しています。

### M5Stack開発環境の準備(UIFlow)
M5StackのプログラムをUIFlowを使って作成します。
先にM5Stack側のファームウェアUIFlowの準備が必要です。
[こちら](https://docs.m5stack.com/#/en/quick_start/m5core/m5stack_core_get_started_MicroPython)を確認しながら環境を準備してください。開発環境の準備は下記のような手順となります。

**M5Stack側の手順**
- M5Burn最新版をダウンロード
- M5Burn内でUIFlowをダウンロード（2020年7月末、最新は1.6.0です）
- M5Stackのファーウェア書換えを行う(一緒にWifi設定も行います）
- M5StackはInternetMode(クラウド上のUIFlowと接続)モードとなります
- M5Stackが正しくネットワークに接続されているとAPIキーが画面に表示されます

>**M5StackがInternetModeになっていない場合は、一度リセットしてすぐに表示されるSetupボタン(画面右下ボタン)を押すことでモード切り替えができます**

**次にPC側の手順**
- ブラウザ上で[UIFlow](https://flow.m5stack.com/)を立上げて、M5Stackに表示されたAPIキーを入力すると、UIFlowの開発環境とM5Stackが接続されます
- UIFlowでは作成したプログラムを転送して簡易的に確認ができます。

>**MQTTブローカと通信を行う場合はUIFlowから実機にプログラムを「ダウンロード」する必要があります。
RUNだけではMQTT通信部分が機能しないためエラーとなります。**

![img0063_result.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192442/f60af8ef-ddf1-675a-8d31-e490ce54ce60.png)

## UIFlow Block Master 構成
UIFlow Block Masterの画面と各要素の説明を下記に示します。

**Block Group**

|名称|機能|備考|
|:-:|:--|:--|
|Namespace|ブロックグループ名|UIFlow上に表示される機能グループ|
|Block Color|ブロックグループ色|UIFlow上で表示される色|
|Added|グループに定義されているブロックリスト|1つのグループに複数のブロックを定義できます|

**Block Setting**

|名称|機能|備考|
|:--|:--|:--|
|Name|コード上のブロック名称|任意|
|Type|ブロックの種類|Value(値)/Execute(関数)|
|Parameter|入力とする引数|name(引数名),Type(String/Number/Variable)|
|Block Code|Pythonプログラム|任意|

> Parameterで定義した引数は${ParameterName}の形で使用する
> ブロックの追加は下部のボタン「Add Block」(追加)で行う。
> ボタンはほかに「Remove Block」(削除)、「Open.m5b」(開く)、「Download」(保存) がある

![img0012_result.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192442/66c5b249-c67b-62ac-8a8a-a6b4e8cbcb76.png)

今回作成したPythonコードは下記となります。
機能：MQTTで受取ったmsgの第一要素をColorとして取得。Circle0の背景色をColor(Integerの16ビット)に設定。

```python:BlockCode
clolor=${msg}[1:]
circle0.setBgColor(int(color,16))
```

### 自作のカスタムブロックの保存と読込
自作のカスタムブロックはWeb上に保存することはできないため、下部に設置されたボタン「Download」で行う。
「*.m5b」の形式でPCにダウンロードされます。

**保存と読込の流れ**
1. カスタムブロック作成(UIFlow) 
2. 保存(Downloadで*.m5bファイルを保存) 
3. Customブロックの読込(Custom>Open *.m5b file)
4. 利用(利用ブロックと同じくブロックグループ>ブロックで使用する)

**自作ノードを使ったブロックプログラムの例**
左下の青い部分が自作ノードとなります。
![img0049_result.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192442/00996664-0c80-e6c8-1fac-dea46625e5f8.png)

## まとめ
M5Stack開発にUIFlowを使うと、既存のブロックを組み合わせるだけですぐにプロトタイピングを作成することができます。
基本ブロックでは提供されていない制御をしたいとき、Pythoを直接書き換えるとブロックプログラムに戻れなくなってしまいます。
ですが、自作ブロックを使って既存のブロック以外の機能をPythonプログラムで組み込む・保存することができるので、
色々なIoTプロトタイプをUIFlow上で簡単に試すことができます。
初心者によるプログラミング学習ログ 377日目

#100日チャレンジの377日目
twitterの100日チャレンジ#タグ、#100DaysOfCode実施中です。
すでに100日超えましたが、継続。
100日チャレンジは、ぱぺまぺの中ではプログラミングに限らず継続学習のために使っています。
377日目は、
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">おはようございます<br>昨日の作業・やったこと⇩<br><br>●就寝前筋トレ5分、キンドル読書 10分<br>●ブログ1記事作成<br>●プログラミング学習377日目 2h<br><br>寝坊した。<br>間に合ったけど。<a href="https://twitter.com/hashtag/%E9%A7%86%E3%81%91%E5%87%BA%E3%81%97%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E3%81%A8%E3%81%A4%E3%81%AA%E3%81%8C%E3%82%8A%E3%81%9F%E3%81%84?src=hash&amp;ref_src=twsrc%5Etfw">#駆け出しエンジニアとつながりたい</a><a href="https://twitter.com/hashtag/100DaysOfCode?src=hash&amp;ref_src=twsrc%5Etfw">#100DaysOfCode</a><a href="https://twitter.com/hashtag/%E6%97%A9%E8%B5%B7%E3%81%8D%E3%83%81%E3%83%A3%E3%83%AC%E3%83%B3%E3%82%B8?src=hash&amp;ref_src=twsrc%5Etfw">#早起きチャレンジ</a></p>&mdash; ぱぺまぺ@社畜✕投資✕ブロガー (@ppmp65) <a href="https://twitter.com/ppmp65/status/1285338789225717760?ref_src=twsrc%5Etfw">July 20, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
Visual Studio Code キーボードショートカット一覧（Mac版 日本語チートシート）

#本家

Key Bindings for Visual Studio Code
https://code.visualstudio.com/docs/getstarted/keybindings

Keyboard Shortcuts Reference
https://code.visualstudio.com/docs/getstarted/keybindings#_keyboard-shortcuts-reference


#引用
@aoi70 Visual Studio Code キーボードショートカット一覧（チートシート）
https://qiita.com/aoi70/items/d61d5cf9030ac3ce55f0

Visual Studio Codeのキーボードショートカット（ショートカットキー）一覧
https://johobase.com/vscode-keyboard-shortcuts/#macOS


#Mac版　日本語チートシート
なさそうなので作ってみました。
誤字や間違いがあったらこっそりコメントで教えてください。

Visual Studio Code
Keyboard shortcuts for Mac

![vscode-mac-ja.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/678409/012c8647-4f30-003a-3b9f-bd62c9f2cd2f.jpeg)
【Ruby on Rails】Fat Controllerの解消〜まずはロジックをモデルへ〜

#はじめに
今回初投稿となります。
スクールでRuby on Railsを学習し、リファクタリングのカリキュラムもあったのですが、その時点では完成させることに必死で、ロクにリファクタリングもしていなかったので今回ControllerのロジックをModelへ移し、コントローラーをすっきりさせる方法を書いていきます。

#そもそもFat Controllerとは？
コントローラー自体の行数が多く、処理の流れを追いにくくなってしまっているControllerの状態を指します（簡単に言えば見通しが悪い）。
スクールでは全く意識せずにControllerに全てのロジックを記述していたが、「実務レベルのコードに近づけたい！」という思いから現在も個人アプリのFat Controllerと闘っています（笑）

##切り分ける手順
まずは膨大に膨れ上がったControllerのロジックを全てModelへ移してしまうくらいの気持ちでいきましょう。
Controllerに記述するpublicメソッドはアクションだけで十分です。

そしてロジックを移す先は基本的にModelで問題ないと思います。
###例：ユーザーの持つアイテムのみを引っ張ってきたい場合

切り分け前↓

```ruby:users.controller.rb
def show
  @useritems = Item.includes(:images).where(user_id:(current_user.id)).order(id: "DESC") if user_signed_in?
end
```
deviseを使用して認証機能を実装しているため、「current_user.id」で現在ログイン中のユーザーのidが取得できます。つまり現在ログイン中のユーザーのマイページ（showアクション）にユーザーのアイテムの情報を引っ張ってきたいわけです。
しかしこのデータの取得、実は「items.controller.rb」のindexアクションでも使用しています。ということでModelにメソッドを定義し、ユーザーのアイテムを取得する記述をまとめたいと思います。

まずはController

```ruby:users.controller.rb
def show
  @useritems = Item.user_items_get(current_user.id) if user_signed_in?
end
```
Model側で「current_user」は使用できないので引数で渡します。

続いてModel

```ruby:Item.rb
def self.user_items_get(user_bigint)
  Item.includes(:images).where(user_id:(user_bigint)).order(id: "DESC")
end
```

この様にする事でItemControllerのindexアクションでも

```ruby:items.cotroller.rb
def index
  @useritems = Item.user_items_get(current_user.id).limit(10) if user_signed_in?
end
```

この様に使用することができます。

Modelにメソッドを書いてControllerで呼び出すとなると、初学者は大層なことに感じてしまいがちですが、Controllerをすっきりさせる上では重要なので是非活用してみて下さい。（しまったこの例行数減ってないや、、、笑）
【お知らせ】 HeartCore Robo新バージョンお知らせとお披露目のご案内

# お知らせ

今回は新バージョンリリースのお知らせとお披露目会のご案内です。
[オンライン披露会(8/7(金))のお申し込みはこちらから!](https://www.heartcore.co.jp/webinar/rpa-usr/20200807.html)

### 新バージョン:
6.1.1

###リリース予定日:
2020/7/30

### 新機能概要:
- メールサーバーからのメール取得
- PDF/Wordファイルの解析
- ユーザーによる入力の受付
- 日付計算コマンド標準実装
- 実行ライセンス使用オプション

### 6.1.1へのアップグレード方法 (2020/7/30以降):
メニュー経由
HeartCore Robo > ツール > アップデート & アップグレード
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/254242/53691dba-1a84-6068-4c6a-605397607d52.png)

新規ユーザーの方は2020/7/30以降にお試し版を以下からお申し込み下さい
[体験版申し込みページ](https://www.heartcore.co.jp/heartcorerobo/index.html)

###新機能のデモ:
2020/8/7 (金)　オンライン形式
[オンラインセッションお申し込みページ](https://www.heartcore.co.jp/webinar/rpa-usr/20200807.html)

当日は「ロボット実行後、ユーザーがある文言を入力、文言が含まれているPDFが添付されたメールのみをメールサーバーから取得する」というシナリオを実行する予定です。

###最後に:
最近記事の更新が滞っておりました。
近々、より実践的なロボットスクリプトの公開や、出勤出来ない事態に対応出来るロボットのリモート実行・クラウド上でのロボット実行について記事を書く予定です。
PyAutoItとAutoItの違い

「[PyAutoItをちょっとだけ触ってみた](https://qiita.com/Y_MAGARI000/items/1ee35601858c3845c2fe)」では、PyAutoItについて簡単な記事を投稿しました。

今回はAutoItとPyAutoItの違いについて触れたいと思います。

# はじめに
PyAutoItは以前の記事で紹介した通り、AutoItをラップしたものとなっています。
そのためAutoItとメソッドの多くはPyAutoItでも共通しています。
しかしそのまま使えるわけではないので注意してください。

参考までにAutoItのメソッドについて参考リンクを貼っておきます。

Function Refarence：https://open-shelf.appspot.com/AutoIt3.3.6.1j/html/functions.htm
AutoItで使用可能な関数の一覧が見られます。


# AutoItとPyAutoItでの関数の違い
実際に同じ処理をそれぞれのルールに沿ってプログラミングをしてみたいと思います。

例として、下記のシナリオをそれぞれの書き方で記述してみます。
1. メモ帳を開く
2. "Hello World!"と入力する
3. 保存せずにメモ帳を閉じる

## AutoIt

```VB:AutoIt
Run("notepad.exe")    'メモ帳の起動
WinWaitActive("[CLASS:Notepad]")    'メモ帳が開くまで待機
ControlSend("[CLASS:Notepad]", "", "Edit1", "hello world!")    'hello world! と入力する
WinClose ("[CLASS:Notepad]")    'メモ帳を閉じる
ControlClick ( "メモ帳", "いいえ(&N)", "Button2")    '保存せずに終了する

```



## PyAutoIt

```Python:PyAutoIt
import autoit

autoit.run("notepad.exe")    #メモ帳の起動
autoit.win_wait_active("[CLASS:Notepad]", 3)    #メモ帳が開くまで待機
autoit.control_send("[CLASS:Notepad]", "Edit1", "hello world{!}")   #hello world! と入力する
autoit.win_close("[CLASS:Notepad]")   #メモ帳を閉じる
autoit.control_click("[Class:#32770]", "Button2")   #保存せずに終了する

```

## 比較

AutoItとPyAutoItを比較してみました。

|操作内容|AutoIt|PyAutoIt|比較|
|:-:|:-:|:-:|:-:|
|起動|Run("notepad.exe")|autoit.run("notepad.exe")|大きな違いはありませんね|
|表示待機|WinWaitActive("[CLASS:Notepad]")|autoit.win_wait_active("[CLASS:Notepad]", 3)|引数の数が違います|
|文字入力|ControlSend("[CLASS:Notepad]", "", "Edit1", "hello world!")|autoit.control_send("[CLASS:Notepad]", "Edit1", "hello world{!}")|内容はほぼ同じですが、ちょっと違いますね|
|終了|WinClose ("[CLASS:Notepad]")|autoit.win_close("[CLASS:Notepad]")|内容はほぼ同じですが、ちょっと違いますね|
|ボタン操作|ControlClick ( "メモ帳", "いいえ(&N)", "Button2")|autoit.control_click("[Class:#32770]", "Button2")|引数も内容も少々違います|

## それぞれの違いについて

比較をした表を見ると、以下のことが分かりました。

+ **関数の記述方法が違う**
pyAutoItでは、[ _ ]で関数名が分かれています。
AutoItだと「winClose」でもPyAutoItでは「Win_Close」となっているようです。

+ **引数の数が違う**
WinWaitActive , Win_Wait_Active　でそれぞで引数が違います。
なぜ違うのかは正直分かりません。

+ **プロパティの定義が少し違う**
関数内で指定するプロパティがAutoItとPyAutoItでは異なります。
何が違うのか、その法則性が分からずにいます。

# 終わりに

**AutoIt**　と　**PyAutoIt**
使える関数はほぼ共通していますが、使い方が微妙に異なるため、
AutoItの関数一覧を見ても、そのまま適用することが出来ない場合が多いです。

また、PyAutoItの関数についてまとめられているサイトや記事は私が探した限り見つからず、
正直手探りで使っていくしかないのが現状です。

だれかにまとめを作ってほしいのが正直な気持ちです...
【初心者でもわかる】テキストや文字に影を入れる方法（サンプルコード付き）

# どうも7noteです。今回は文字に対して影を入れる方法をやっていきます。

どうも7noteです。
この記事は以下へ引っ越しました。

https://naruweb.com/coding/text-shadow/
3D plotでグラフの色を途中で変える

# やりたいこと
こういうやつ
![3dcolorcv.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/118901/30e32252-fcbf-edde-0a52-e3e09b9881ce.png)

`LineCollection`の3D版である`Line3DCollection`を使います.
# 連続変化版
`Line3DCollection`に渡す`cmap`を変えて使用する配色セットを変えます.

```Python3
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d.axes3d import Axes3D
from mpl_toolkits.mplot3d.art3d import Line3DCollection

theta  = np.linspace(0, 20 * np.pi, 500)
x = np.cos(theta)
y = np.sin(theta)
z = 0.1 * theta / np.pi
points = np.array([x, y, z]).T.reshape(-1, 1, 3)
segments = np.concatenate([points[:-1], points[1:]], axis=1)

fig = plt.figure()
ax = fig.gca(projection = '3d')
norm = plt.Normalize(z.min(),  z.max())
lc = Line3DCollection(segments, cmap='viridis', norm=norm)
lc.set_array(z)
lc.set_linewidth(2)
ax.add_collection(lc)

ax.set_xlim(x.min(), x.max())
ax.set_ylim(-1.1, 1.1)
ax.set_zlim(0, 2)
plt.show()
```

# 不連続変化版
![3dcolordcv.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/118901/093376ac-ddc5-9503-e951-29bebdafd344.png)

`cmap`と`norm (BoundaryNorm)`を使って配色と閾値を調整します.

```Python3
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.colors import ListedColormap, BoundaryNorm
from mpl_toolkits.mplot3d.axes3d import Axes3D
from mpl_toolkits.mplot3d.art3d import Line3DCollection

theta  = np.linspace(0, 20 * np.pi, 500)
x = np.cos(theta)
y = np.sin(theta)
z = 0.1 * theta / np.pi
points = np.array([x, y, z]).T.reshape(-1, 1, 3)
segments = np.concatenate([points[:-1], points[1:]], axis=1)

fig = plt.figure()
ax = fig.gca(projection = '3d')
cmap = ListedColormap(['w', 'b', 'r', 'w', 'b'])
norm = BoundaryNorm([1/3, 2/3, 1, 4/3, 5/3, 2], cmap.N)
lc = Line3DCollection(segments, cmap=cmap, norm=norm)
lc.set_array(z)
lc.set_linewidth(2)
ax.add_collection(lc)

ax.set_xlim(x.min(), x.max())
ax.set_ylim(-1.1, 1.1)
ax.set_zlim(0, 2)
plt.show()
```

# 参考文献

https://matplotlib.org/3.1.1/gallery/lines_bars_and_markers/multicolored_line.html#sphx-glr-gallery-lines-bars-and-markers-multicolored-line-py

https://stackoverflow.com/questions/22078256/matplotlib-line3dcollection-for-time-varying-colors
Djangoで変数を渡すときメモ

<h2>テンプレートに値を渡す方法</h2>
<p>下記のように辞書形式で渡す。</p>
```
return TemplateResponse(request, '*****.html',
                        {"変数名": 変数})
```

<h2>引数をhtml内で使用する方法</h2>
<p>下記のように記載すれば変数と同様に扱える。</p>
```
<h1>{{ 変数名 }}</h1>
```
<p>モデル等複数要素で構成されていれば、下記のように記載すれば同様に変数として扱える。</p>
```
<h1>{{ 変数名.要素名 }}</h1>
```
struct内のstructを抜き出したい

作業で使ったので、備忘録。

## 経緯
struct balances内のBalancesを別で定義して使いたい。

```go

type balances struct {
	Time       int64  `json:"time"`
	Type      string `json:"type"`
	Balances         []struct {
		Asset  string `json:"asset"`
		Free   string `json:"free"`
		Locked string `json:"locked"`
	} `json:"balances"`
}
```

## 対応
結果として下記で対応を行った。

```go

type balances struct {
	Time       int64  `json:"time"`
	Type      string `json:"type"`
	Balances		 []struct {
		balance
	} `json:"balances"`
}

type balance struct {
	Asset  string `json:"asset"`
	Free   string `json:"free"`
	Locked string `json:"locked"`
}
```

## 課題
複数structの共通箇所の抜き出しに使用できるかと思うが、値を参照する際に
下記のようにstruct名の記載が増えるので、気になる。

```go

// berore
for _, b :=  range balances.Balances {
	b.Free
}
// After
for _, b :=  range balances.Balances {
	b.balance.Free
}
```

以上です。
いいねやQiitaやTwitterのフォローいただけると励みになります！
他にも方法がありましたら、コメントお待ちしております。
宜しくお願いします〜
cockpit HTTP化失敗


### 元ファイル

`/usr/lib/systemd/system/cockpit.service`

```
[Unit]
Description=Cockpit Web Service
Documentation=man:cockpit-ws(8)
Requires=cockpit.socket
Requires=cockpit-wsinstance-http.socket cockpit-wsinstance-http-redirect.socket cockpit-wsinstance-https-factory.socket
After=cockpit-wsinstance-http.socket cockpit-wsinstance-http-redirect.socket cockpit-wsinstance-https-factory.socket

[Service]
RuntimeDirectory=cockpit/tls
# systemd ≥ 241 sets this automatically
Environment=RUNTIME_DIRECTORY=/run/cockpit/tls
ExecStartPre=/usr/sbin/remotectl certificate --ensure --user=root --group=cockpit-ws --selinux-type=etc_t
ExecStart=/usr/libexec/cockpit-tls
PermissionsStartOnly=true
User=cockpit-ws
Group=cockpit-ws
```

### 追加するファイル

`/etc/systemd/system/cockpit.service`

以下のように変更します。
`ExecStart=/usr/libexec/cockpit-tls --no-tls --port 80`

```
[Unit]
Description=Cockpit Web Service
Documentation=man:cockpit-ws(8)
Requires=cockpit.socket
Requires=cockpit-wsinstance-http.socket cockpit-wsinstance-http-redirect.socket cockpit-wsinstance-https-factory.socket
After=cockpit-wsinstance-http.socket cockpit-wsinstance-http-redirect.socket cockpit-wsinstance-https-factory.socket

[Service]
RuntimeDirectory=cockpit/tls
# systemd ≥ 241 sets this automatically
Environment=RUNTIME_DIRECTORY=/run/cockpit/tls
ExecStartPre=/usr/sbin/remotectl certificate --ensure --user=root --group=cockpit-ws --selinux-type=etc_t
ExecStart=/usr/libexec/cockpit-tls --no-tls --port 80
PermissionsStartOnly=true
User=cockpit-ws
Group=cockpit-ws
```

### 設定の読み込み

`systemctl daemon-reload`

`systemctl status cockpit`
ExcelでSVGを開いて画像を取り出し、ペイントソフトでPNG保存する

# （まえがき）SVGをPNGに変換したいんだ！

とあるサービスの運用担当をしています。イラレとかフォトショは持ってないし、ほぼ使えません。
SNSのプロフィール設定でロゴ画像が必要になったとき、「Webページのロゴ画像を保存すればいいやん！」ってなったのですが、最近はロゴ画像とかってSVG形式なんですよね。
わざわざ誰かにイラレでちょうどいいサイズのPNGくださいっていうのも申し訳ないので、自分で簡単にできる方法を調べました。

# 必要なもの
- SVGファイル
- Excel　※私はOffice365で確認しています。
- お好みのペイントソフト　※私はpaint.netを使いました。

# Excelを使ってSVG→PNGにする方法

### １．ExcelでSVG画像を開く
ドラッグ&ドロップでは開けないようです。
[挿入]－[画像]からSVGファイルを開きましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/231781/361eb8da-fc79-1e52-c116-ba07a73c51d9.png)

### ２．コピーしてペイントソフトに貼り付けして保存
右クリックでメニューを開いて、[コピー]
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/231781/a33737a7-b303-2c5a-4338-6fcee4913c0f.png)

ペイントソフトに貼り付けして
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/231781/c8b0fd42-f183-ea27-caae-514f74428852.png)

あとは引き続き画像を編集するなり、ご自由にしてからペイントソフトで保存してください！


# （おまけ） Excelで大きさや色も変えれます！
### 好きな大きさにする
Excelで図形や画像を動かすノリで大きさを自由に変えられます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/231781/d51664d0-e427-02d3-de9c-8aae789604f7.png)

### 好きな色にする
Excelで図形の色を変えるノリで色を自由に変えられます。
・塗りつぶし→中の色
・枠線→枠の色
（そのままですね。。）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/231781/a852e8d3-a7cc-8983-c96e-69b5dcd1abe9.png)
仕事とは、お客様に付加価値を提供する事だ！

トヨタ式経営では、**お客様に付加価値を提供しない仕事や作業は仕事とは言わず、ムダだと考えている。**この事を徹底することは難しいが、それをとことん考え抜き、やり抜くのがカイゼンである。お客様に求められた製品やサービスを提供するのは当たり前の事であり、それを超えて支払われるコスト以上の付加価値を提供しなければ、本当の仕事とは言えないのである。また自分達のためにする仕事は仕事とは呼ばず、お客様のためにする事によって自分も成長できるものが仕事である。

**利益とは仕事ぶりの結果である。**

**トヨタ式経営**
					**利益＝売価ー原価**
売価は市況によって変動し、お客様のニーズによって異なるので、所定の利益を確保するためには変化に柔軟に対応して原価を変動させる場合も出てくる。このためには仕事のプロセスの管理が大切になってくる。

**一般の企業経営**
					**売価＝原価＋利益**
会社の都合で欲しい一定の利益を確保しようと、原価に必要な利益を加算させて売価を決定する会社都合の売価である。意に反して売価が変動すれば、確保しようとした利益が得られず、従業員が不幸になる。
いいね機能（Ajax）実装

自分用にまとめます。

# 実装

**コントローラー・モデル作成済み**

```ruby:routes.erb
  Rails.application.routes.draw do
    resources :posts do
      resources :comments, only: [:create, :destroy]
      resource :likes, only: [:create, :destroy]
    end
  end
```

likesはIDの付与不必要のため**resource**になる
<br><br>


```post.rb
  def liked_by?(user)
    likes.where(user_id: user.id).exists?
  end
```
いいねしたかどうかを確認できる
<br><br>

```likes_controller.rb
class LikesController < ApplicationController

  def create
    @post = Post.find_by(id: params[:post_id])
    # 連続クリック防止のための条件
    unless @post.liked_by?(current_user)
      @like = current_user.likes.new(post_id: @post.id)
      @like.save
    end
  end

  def destroy
    @post = Post.find_by(id: params[:post_id])
    @like = current_user.likes.find_by(post_id: @post.id)
    @like.destroy
  end

end
```
create,destroyそれぞれリダイレクトは不要になるので、記載している場合は削除
<br><br>


```ruby:posts/show.html.slim
#Ajax化するために必要になるのでidを付与する
div id='like_#{ @post.id }'
   # いいねアイコンをパーシャル化
   = render 'like', post: @post
```

```ruby:posts/_like.html.slim
# いいね削除
- if post.liked_by?(current_user)
  = link_to post_likes_path(post), method: :delete, remote: true do
    i.fas.fa-heart style='color: red;'
    = post.likes.count

# いいね
- else
  = link_to post_likes_path(post), method: :post, remote: true do
    i.far.fa-heart
    = post.likes.count
```
**remote: true**をつけることでJavaScriptファイルを呼び出す
<br><br>


```ruby:likes/create.js.erb
$("#like_<%= @post.id %>").html("<%= j(render 'posts/like', post: @post ) %>");
```
```ruby:likes/destroy.js.erb
$("#like_<%= @post.id %>").html("<%= j(render 'posts/like', post: @post ) %>");
```

**完成！**
Rails環境構築 Rails5.2.1 ruby2.5.1 Catalina

久しぶりの投稿です。

2019年の9月からテックキャンプに通い、2020年の7月からRails自社開発企業で働き始めました！
時間は掛かってしまいましたが、念願のエンジニアデビュー初日、支給されたMacBookの環境構築で苦労したので記録しておきます。

## 開発環境

Rails 5.2.1
Ruby  2.5.1
MacOS Catalina10.15.6

Dockerは使ってないので完全に初期状態のPCにエディタからRubyから詰め込んで行きました。
これだけで1日終わりました。


##　苦労したこと

- command line toolsの導入
- Rubyのバージョン設定
- MacOSの互換性(個人ではmojaveを使用)
- rbenvの理解

学習の基礎段階ではテックキャンプのカリキュラムで環境を構築していたので、0から自力で環境構築するのに結構時間がかかってしまいました。かなり復習になりました。

## command line tools
command line toolとは「キーボードだけで操作するプログラム」です。
要はターミナルから打ち込むコマンドですね。

Xcodeの「command line tools」をインストールします。

```:ターミナル
$ xcode-select --install
```
Xcode本体を入れなくても良いという記事がありますが、私の環境ではXcode自体もインストールが必要でした。


こちらのコマンドでバージョン確認が取れればインストール成功

```:ターミナル
$ xcodebuild -version
```

###　遭遇したエラー

```
xcode-select: error: tool 'xcodebuild' requires Xcode, but active developer directory 
'/Library/Developer/CommandLineTools' is a command line tools instance
```

こちらがXcode本体をインストールする前に遭遇したエラー

Xcode本体をインストール後に↓のコマンドで解決しました。

```:ターミナル
sudo xcode-select -s /Applications/Xcode.app/Contents/Developer
```
Xcodeのcommand line toolsに切り替えるコマンドみたいです。

[参考記事1] (https://stackoverflow.com/questions/17980759/xcode-select-active-developer-directory-error/17980786#17980786)
[参考記事2](https://sutepulu.com/how-to-switch-command-line-tools/)

## Rubyのバージョン設定

学習時はあまり意識していませんでしたが、Rubyのバージョン管理はrbenvで行います。
複数のRubyのバージョンを管理するツールです。

homebrewでインストールします。
※homebrewも初期状態ではインストールされていないので導入が必要です。
homebrewとはMac OSのパッケージマネジャです。


```:ターミナル
# rbenvインストール
$ brew install rbenv ruby-build
```

次にbashで使えるようにするのですがMacOS Catalinaではデフォルトのログインシェルが zsh　です。
mojaveでは　bash　でした。

まだ資料もbashのほうが多いのでここでbashにログインシェルを切り替えました。

ログインシェルとはログイン直後に設定されているシェルのことです。

切替コマンド

```:ターミナル
# 使用できるシェルを確認
$ cat /etc/shells

#　切替
$ chsh

# vimが開くのでファイルを修正します。
  
```
[参考記事](https://www.linuxmaster.jp/linux_skill/2012/10/post-108.html)


Catalinaではターミナルが　%表記　になっています。
mojaveでは　　$表記　です。

地味に焦りました。

いままでbashしか使ったことがなく、bashの方が日本語の資料が豊富なのでzshをbashに切り替えた訳ですが、zshはbashの上位互換という記事を目にしました。
ターミナルでも警告が出た気がします。

早くzshにして慣れた方が良さそうな気がします。

続いてbashでコマンドを使えるようにパスを通します。

```:ターミナル
$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc

$ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile

$ source ~/.bash_profile
```
これでrbenvが使えるようになります。

その後いよいよRubyやRails,DBをインストールしていくのですが、特に詰まるポイントもなかったので割愛します。
[こちらの記事](https://qiita.com/kodai_0122/items/56168eaec28eb7b1b93b)を参考にさせて頂きました。

以上です。
お付き合い頂きありがとうございました！
Dockerfileを書くメモ

### Dockerfileは、docker imageを作る(build)元の書類です。

### docker buildで作成します
```
docker image build [OPTIONS] PATH | URL | -
$ docker image build -t New_Image .
```

- -t : tag  imageの名前とタグ　name:tag の形式
- .  : パス　Dockerfileのパス '.'は、カレントディレクトリの意味

### Dockerfileの書式
- FROM : docker imageのベースになるimage、Docker Hubのregistry
    - Dockerfile では、FROMは一番最初に書く
    - FROM <イメージ>
    - FROM <イメージ>:<タグ> or FROM <イメージ>@<digest>

- USER  :  実行ユーザーの指定
- WORKDIR :   作業用ディレクトリを移動する
- RUN   : イメージビルド時に、Dockerコンテナ内で実効するコマンド
- COPY :   Hostのファイルやディレクトリをcontainer内にコピーする
- ADD  :  ADD <ソース>... <送信先>
    - ADD ["<ソース>", ... "<送信先>"]  この形式はパスに空白スペースを使う場合
- CMD  :  コンテナ内で実行するプロセス
    - CMD ["実行バイナリ・ファイル"," 引数1"," 引数2”] 
    - CMD ["ping","127.0.0.1","-c","100”]
    - CMD shell コマンド CMD ping 127.0.0.1 -c 10
- ENTRYPOINT :   CMDの引数はENTORYPOINTで実行FILEへの引数に
    - ENTRYPOINT ["ping”]
    - CMD ["127.0.0.1", "-c", "50”]
- LABEL  :  imageの作者名などに使える
    - LABEL <key>=<value> <key>=<value> <key>=<value> ...
- ENV  :  container内FR使える環境変数
- ARG  :  ビルド時に利用出来る環境変数
- EXPOSE  :  ポートのエクスポート　ポートを開ける
- VOLUME  :  ボリュームのエクスポート
- MAINTAINER  :  作成者の情報


### DeepLearningの開発環境を作った例
Dockerfile

```
FROM jupyter/scipy-notebook

USER root
RUN apt-get update && apt-get install -y build-essential graphviz-dev graphviz pkg-config

USER $NB_UID

# Install Tensorflow
RUN pip install --quiet \
    'tensorflow==2.1.0' \
    graphviz \
    pydotplus \
    torch torchvision && \
    fix-permissions $CONDA_DIR && \
    fix-permissions /home/$NB_USER
    
```

- FROM : 元になるimageを指定してます
- USER : ユーザーをrootに切り換えています
- RUN  : aptコマンドでupdateとinstallをしています
- USER : ユーザーを戻しています
- RUN  : pip コマンドでモジュールをインストールしています、最後にパーミッションを合わせています

### dockerはレイヤーの集合体なのでなのでDockerfileの命令をまとめて出す方が効率的
- imageレイヤー数が減ります
- docker imageのレイヤー構造の確認は、docker image history name:tag
- &&で命令を結合出来ます
- apt-get install --no-install-recommends オプションで推薦パッケージインストール
- apt-get install後は、rm -rf /var/lib/apt/lists/*　キャッシュ削除する方が良い
#PowerApps 3Dで表示(View in 3D)  SPOリストの添付ファイルに対応していた！

以前、Power Apps の 3Dで表示（View in 3D）を利用する際に、OneDrive for Business ＋ Excel テーブルで .glb 拡張子ファイルをアプリ上に表示する例を紹介しました。

■該当記事
　[#PowerApps 3Dで表示(View in 3D) #03 ODfB+Excel](https://qiita.com/yamad365/items/2621b4f122b0bfa286a4)

2020年5月に上記の記事を記載した際はできなかった、SharePoint Online（以降 SPO）のカスタムリスト（リスト）から添付ファイル経由で3D画像（.glb）ファイルを表示できるようになっている！というネタです。

# 公式情報
リンクは下記。

https://docs.microsoft.com/ja-jp/powerapps/maker/canvas-apps/mixed-reality-component-view-3d#loading-models-as-attachments-or-media-content

MR系が Power Apps でプレビュー公開された際は存在していなかった Docs の日本語ページも公開されていますね。下記が今回の発端となった箇所です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215892/d54e8171-b549-a34c-ba5f-a6f6c917beef.png)

ODfB ＋ Excel を利用した場合は、環境作りが非常にテマでした。しかし、上記のように SPO のリストで添付ファイルから参照できるのは便利になりますよね。

# SPO リストから3D表示してみる
実際に試してみましょう。

## 1.SPO リスト（データソース）
サイトにリストを追加しておきましょう。例では「3D」という名前にしています。単純にリストを追加して、添付ファイルを列表示させているだけです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215892/d91e224e-5736-dbb2-738f-5f45fce74feb.png)

事前に、タイトルと添付ファイルに .glb ファイルを登録しておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215892/cc075b8b-59da-9c4a-14a5-4be5bf072d5d.png)

## 2.アプリ画面
キャンバスアプリを作成します。データソースで、前述のSPO リストを追加しておきましょう。
![図1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215892/bcf92e43-4eff-9580-999b-c5a0a367a74e.png)
①ドロップダウン
　[Items] にデータソース追加してある SPO リストを指定。

②3Dで表示（View in 3D）
　[Src] に上記①のドロップダウンで選択された対象の添付ファイルを指定します。

```ViewIn3D.Src
First(Dropdown.Selected.添付ファイル).Value
```

以上です。ドロップダウンで選択した添付ファイルの3D画像を確認することが可能になります。なお、添付ファイルは複数個指定可能なので、First 関数で”1番最初のモノ”を指定しています。

## ソース（Src）で指定されている内容をチェック
アプリの編集画面で 3Dで表示の[Src]プロパティをのぞいてみると、ドロップダウン経由で指定している値が”appres://～”という形式であることが確認できます。
![図2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215892/9229332d-bbd4-ac40-73d7-f3ab39a3509e.png)
このため、MRで表示（View in MR）で MR 表示にそのまま利用することも可能になっています。便利ですねー。ODfB ＋ Excel で大変テマかけて準備してたのが、SPOリストだけで完結しますよ！

## おまけ
3Dで表示のコントロールを見て気づいた方もいるかもしれませんが、コントロールの右下に青いリフレッシュボタンが追加されています。コレ、クリックすると3Dで表示のサイズが初期サイズに戻るようになっております。
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr"><a href="https://twitter.com/hashtag/PowerApps?src=hash&amp;ref_src=twsrc%5Etfw">#PowerApps</a> MR の View in 3D（3Dで表示）にリフレッシュボタンが追加されて、デフォルト？サイズにボタン1発で戻せるようになってる！！！ <a href="https://t.co/U13L7q1j2W">pic.twitter.com/U13L7q1j2W</a></p>&mdash; やま (Yama) (@yamad365) <a href="https://twitter.com/yamad365/status/1284108648784912384?ref_src=twsrc%5Etfw">July 17, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

# まとめ
- 3D表示が SharePoint Online のリスト 添付ファイルに対応
- Power Apps の SharePoint Online コネクター経由で利用可能
- 残念ながら記事投稿時点でドキュメントライブラリには未対応
- 3Dで表示コントロールにリフレッシュ（初期化）ボタンが追加された

ちなみに、CDS でも添付ファイルに .glb ファイルを格納することで、同様の手順で同じ効果を得ることが可能です。詳しくは公式サイトをご確認ください！

SPO のリストであれば、Power Apps から登録画面を作成しやすいですし取り回しが抜群になりましたね。

それでは、皆さま。素晴らしい Power Platform Life を！
ESLintで特定のjsをignoreしてreviewdogでエラーになったら

## 結論

ESLintのWarningを全て出力対象外として構わなければ、ESLint実行時に`--quiet`オプションを付ける

## reviewdogがエラーになる理由とその対処方法

ESLintでは、`.eslintignore`に記述したファイルをチェック対象外にします。


```:.eslintignore
foo.js
```

この時、ESLintを実行すると`foo.js`に対して、以下のようなWarningが出力されます。

(下記フォーマットは、`-f checkstyle`を付けた場合。なお、わかりやすく改行とインデントを入れています)

```xml
<?xml version="1.0" encoding="utf-8"?>
<checkstyle version="4.3">
  <file name="/home/runner/work/foo.js">
    <error line="undefined" column="undefined" severity="warning" message="File ignored because of a matching ignore pattern. Use &quot;--no-ignore&quot; to override." source="" />
  </file>
</checkstyle>
```

>File ignored because of a matching ignore pattern

`ignore`したからといって何も出力されないわけではなく、`ignore`したことを警告してくれているわけですね。

このESLintの出力内容ですが、通常、`line`と`column`には数値が入り、ソースコード中のチェックにかかった位置がわかります。

しかし、`ignore`の場合は、どちらも`undefined`となります。

```xml
<error line="undefined" column="undefined" severity="warning" message="File ignored because of a matching ignore pattern. Use &quot;--no-ignore&quot; to override." source="" />
```

このESLintの出力をそのまま`reviewdog`に入力すると、内容を解析できずにparse errorとなってしまいます。

```
reviewdog: parse error: strconv.ParseInt: parsing "undefined": invalid syntax
```

reviewdogは、`line`の値を元にGitHubのPR上にコメントしてくれます。

ですので`line`の値が`undefined`では困ってしまうのだと思われます。

これを回避する手段として、ESLintのWarningを`ignore`対象に限らず、全て出力対象外として良いということであれば、`--quiet`オプションを付ける方法があります。

`--quiet`オプションを付けるとESLintのWarinigレベルは出力されなくなり、結果reviewdogのparse errorは発生しなくなります。

## 参考

- [Options - ESLint](https://eslint.org/docs/user-guide/command-line-interface#options)
CO2センサ MH-Z14Aの使い方

MH-Z14Aからデータをとってxxxな記事はあるけど、キャリブレーションをしている例がほとんどなかった
どうもデータシートのv1.0.xにはコマンドの内容までは書かれていなかったみたい
公式HPを調べてみるとv1.2のデータシートがありコマンドの説明もされているので、備忘録も兼ねて仕様等をまとめてみる
また、日本語のデータシートは無くDeepLで翻訳しながらなので内容に誤りがあるかもしれないのでその際はコメントしていただきたい

データシート：https://www.winsen-sensor.com/d/files/MH-Z14A.pdf

## 諸元
<img width="408" alt="スクリーンショット 2020-07-21 13.26.19.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/284492/c7ccfe14-f9e0-0169-dcca-abb38e49f827.png">
<img width="542" alt="スクリーンショット 2020-07-21 13.26.34.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/284492/55db2d62-0777-9e0d-bae9-05dff7295bc8.png">

## 出力別使用法
### PWM※1
検出レンジが0~2000[ppm]の場合、1000ms(±5%)周期でPWMが出力されるので、High幅(Th),Low幅(Tl)を以下の式に当てはめればいいらしい
CO2濃度[ppm] = 2000 x ( Th - 2 ) / ( Th + Tl - 4)

ただし、実際に上の式で試したところシリアルでは720[ppm]と出てるのにPWMではTh=147,Tl=854,CO2濃度=290[ppm]と明らかに低すぎる値が算出されたので2000の部分は検出レンジによって変わるっぽい
測定値が720[ppm]の場合、2000ではなく5000にするとシリアルの値とほぼ一致する
測定レンジを知る術がわからないので使いづらいかもしれない

### DAC
出力電圧0.4〜2.0[V]がCO2濃度の0〜10000[ppm]に対応するらしい、計算式は以下
CO2濃度[ppm]=(Vo(V)-0.4V)*検出レンジ[ppm]/(2.0V-0.4V)

例によって検出レンジがどれにあたるか分からないが、実際に試したところシリアルでは720[ppm]のとき出力電圧が0.62[V]で検出レンジが5000だとするとほぼ一致する値が算出出来た

### シリアル(UART)
- UART仕様
ボーレート：9600bps
データサイズ：8bit
ストップビット：1
パリティービット：無し

- コマンド一覧  
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/284492/c5449b8c-e69b-66a9-fe11-48e6b77ea824.png)

#### 0x86:CO2濃度
CO2濃度の測定値を取得できる、換気の指標にするくらいなら校正せずにこのコマンドのみでいいかもしれない
現に冒頭でも言ったように校正して使用している記事がほとんど見当たらないので

送信データ:0xFF,0x01,__0x86__,0x00,0x00,0x00,0x00,0x00,0x79
byte0：スタートバイト
byte1：リザーブ
byte2：コマンド
byte3〜7：0固定
byte8：チェックサム

受信データ:0xFF,__0x86__,0xXX,0xXX,0x00,0x00,0x00,0x00,0xXX
byte0：スタートバイト
byte1：コマンド
byte2：CO2濃度(上位1byte)
byte3：CO2濃度(下位1byte)
byte4〜7：0固定
byte8：チェックサム

#### 0x87:ゼロ点校正
ゼロ点と言っているが400[ppm]に校正するコマンド
400[ppm]のCO2で満たした箱等に入れるか屋外で20分以上稼働させた後にこのコマンドを送る
ちなみに屋外のCO2濃度が400[ppm]程度とよく言われるが、気象庁の観測結果を見ると400[ppm]前後だったのは2013年まで
2020年時点では420[ppm]付近で+5%程度高い値の為、屋外で校正する場合は考慮する必要があるかもしれない
参考：https://ds.data.jma.go.jp/ghg/kanshi/obs/co2_monthave_yon.html

送信データ:0xFF,0x01,__0x87__,0x00,0x00,0x00,0x00,0x00,0x78
byte0：スタートバイト
byte1：リザーブ
byte2：コマンド
byte3〜7：0固定
byte8：チェックサム

受信データ:無し


#### 0x88:スパン校正
上限側を校正するコマンド、2000[ppm]が推奨だが1000[ppm]以上ならokっぽい
これはゼロ点校正をしてからじゃないと使ってはいけないらしい

送信データ:0xFF,0x01,__0x88__,0xXX,0xXX,0x00,0x00,0x00,0xXX
byte0：スタートバイト
byte1：リザーブ
byte2：コマンド
byte3：校正値(上位1byte)
byte4：校正値(下位1byte)
byte5〜7：0固定
byte8：チェックサム

受信データ:無し

#### 0x79:自動校正ON/OFF
24h毎にゼロ点校正を行う自動構成機能のON/OFFをするコマンドで、出荷時にONになっている
この機能はオフィスや家庭向けに作られているっぽいけど定期的に換気がされるような環境でなければ有効に働かない気がするので切ってしまおう
データシートのnoticeを読む限り校正周期は最長6ヶ月とあるので、それくらいの周期で手動校正すればいい

送信データ(ON):0xFF,0x01,__0x79__,0xA0,0x00,0x00,0x00,0x00,0xE6
送信データ(OFF):0xFF,0x01,__0x79__,0x00,0x00,0x00,0x00,0x00,0x86
byte0：スタートバイト
byte1：リザーブ
byte2：コマンド
byte3：ON/OFF指定
byte4〜7：0固定
byte8：チェックサム

#### 0x99:測定範囲設定
測定レンジを設定するコマンド
4byteとってあるけど0~2000,0~5000,0~10000のそれぞれ0x000007D0,0x00001388,0x00002710しか設定してはいけないっぽい

送信データ(0~2000):0xFF,0x01,__0x99__,0x00,0x00,0x00,0x00,0x00,0xE6
byte0：スタートバイト
byte1：リザーブ
byte2：コマンド
byte3：0固定
byte4,5：上位2byte
byte6,7：下位2byte
byte8：チェックサム
PowerShellのプロンプトにKubernetesのカレントコンテキストを出力する

以下のようなスクリプトを profile.ps1 というファイル名で保存して
`C:\Users\<ユーザー名>\Documents\WindowsPowerShell\`に配置する。
(PowerShell Coreの場合はインストールディレクトリ直下)

```profile.ps1
function prompt() {
  $current_dir = Split-Path -Leaf (Get-Location)
  $context = kubectl config current-context
  "[$current_dir]($context) > "
}
```

この例ではカレントディレクトリをあわせて表示しているが、
`kubectl config current-context` の結果が利用できればよいのであとはお好みで。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125105/3ac356c7-c782-a8f4-e7ef-f2a3268e8970.png)

簡単ですが以上です。
Railsで日時を日本語表記に変更

## はじめに

テーブルのカラム `created_at` を使えば、データを作成した日時を取り出せます。
ところが、そのままの表記では使いづらいです。

今回は、 `2020/7/21 9:05:50` の様な表記で取り出せるようにしたいと思います。


## 作成日時を表示する

まず `posts` テーブルのデータ `@post` の `created_at` をそのまま取り出してみましょう。

```erb:posts/show.html.erb  
<p>イベント: <%= @post.event %></p>
<p>場所: <%= @post.place %></p>
<p>作成日時: <%= @post.created_at %></p>
```

place | event | created_at
--- | --- | ---
東京 | 花火大会 | 2020-07-21 00:05:50 UTC

目標としている `2020/7/21 9:05:50` の表記と大いに違うことが分かると思います。

具体的には以下の3点が異なります。

1. `UTC` (世界標準時) になっている
1. `/` のところが `-` になっている
1. `７` の表記が `07` になっている

順番に修正していきたいと思います。


## 1.世界標準時から日本時間に変更する

プログラミングは世界中で使われている為、そのままだと `世界標準時` で出力されてしまいます。
その為、`日本時間` に変更しましょう。

```rb:config/application.rb
class Application < Rails::Application
  # ***** 次の１行を追加 *****
  config.time_zone = "Asia/Tokyo"
end
```

この１行を入れることで以下のように、`世界標準時` を `日本時間` に変更することができました。

place | event | created_at
--- | --- | ---
東京 | 花火大会 | 2020-07-21 09:05:50 ＋0900

`＋0900` がついていますが、これは、日本時間と世界標準時との時差が＋9時間であることを表しています。


## 2.フォーマットを変更する

日本時間にはなりましたが、フォーマットが `2020-07-21 09:05:50 ＋0900` では分かりにくいです。変更していきましょう。

まず、多言語に対応する為の gem をインストールし、日本語に設定します。

```rb:Gemfile
# Rails6 の場合
gem 'rails-i18n', '~> 6.0'
# Rails5 の場合
gem 'rails-i18n', '~> 5.1'
```

```bash:ターミナル
bundle install
```

```rb:config/application.rb
class Application < Rails::Application
  # 略
  config.time_zone = "Asia/Tokyo"
  # ***** 次の１行を追加 *****
  config.i18n.default_locale = :ja
end
```

次に、 `rails-i18n` に用意されている `l`メソッドを使用します。

```erb:posts/show.html.erb  
<p>イベント: <%= @post.event %></p>
<p>場所: <%= @post.place %></p>
<!-- ***** l を追加 ***** -->
<p>作成日時: <%= l @post.created_at %></p>
```

さらに、config/locales/ja.ymlというファイルを作成し、フォーマットを設定しましょう。

```yml:config/locales/ja.yml
ja:
  time:
    formats:
      default: "%Y/%m/%d %H:%M:%S"
```

これにより、表記が以下のように変わり、＋0900も消えます。

place | event | created_at
--- | --- | ---
東京 | 花火大会 | 2020/07/21 09:05:50

フォーマットは自由に変更することができ、例えば、 `秒` が不要なら `:%S` を省くことで対応出来ます。

```yml:config/locales/ja.yml
      default: "%Y/%m/%d %H:%M"
```

place | event | created_at
--- | --- | ---
東京 | 花火大会 | 2020/07/21 09:05

記号 | 意味
--- | ---
%Y | 年(YEAR)
%m | 月(MONTH)
%d | 日(DAY)
%H | 時(HOUR)
%M | 分(MINUTE)
%S | 秒(SECOND)

[参考ページ] [Ruby 2.7.0 リファレンスマニュアル(strftime)](https://docs.ruby-lang.org/ja/latest/method/Time/i/strftime.html)

## 3.ゼロ（0）埋めをなくす

例えば、 `7月` が `07` と表記されるのは不自然なので `0` を削りましょう。

```yml:config/locales/ja.yml
ja:
  time:
    formats:
      # ***** %の後ろに-を追加 *****
      default: "%Y/%-m/%-d %-H:%M:%S"
```

place | event | created_at
--- | --- | ---
東京 | 花火大会 | 2020/7/21 9:05:50

`-`を入れることで以上の様に、`0埋め` をなくすことが出来ました。
GoogleColabからyoutube-dl、最高画質・音質で

#はじめに

GoogleColaboratoryからyoutube-dlを利用する方法について書きます。
動画と音声を別々でDLします。

# なんでColab使うの

GoogleDriveに直接保存するのが簡単だからです。
SSDの小さいPCから実行したかったんです。

#コード

###youtube-dlインストール

Colabで新規ファイルを作成したら、まずはyoutube-dlをインストールします
"!"を先頭につけることで、コマンドプロンプトと同じコマンドが使えます。

```
!pip install youtube-dl
```

このコマンドはColabを開くたびに1度だけ実行しないといけません。


###Driveマウント

次にGoogleDriveをマウントします。
このノートブックに自分のDriveを使ってもいいよと許可するイメージです。

```ytdlbest.py
from google.colab import drive
drive.mount('/content/drive')
```

これを実行するとURLを提示されるので、そこにアクセスして色々許可します。
すると文字列が提示されるので、それをコピーしてColabに戻り、コードの下の入力欄に入力すればマウント完了です。

###動画(音声なし)のダウンロード

マイドライブ(Driveのトップのフォルダ)の下にprojectsフォルダを作成していることを前提とします。

```ytdlbest.py
def videodl(url:str):
    vdl_opts = {'outtmpl':'/content/drive/My Drive/projects/%(title)s_video.%(ext)s','format':'bestvideo'}

    vdl = youtube_dl.YoutubeDL(vdl_opts)
    vdl.extract_info(url,download=True)
```

youtube-dlのディレクトリ指定は、`outtmpl` オプションから行います。
このオプションは保存するファイルの名前を指定するものですが、保存先の指定にも使えます。

更にフォーマットを`bestvideo` にすることで、最も画質の高い動画をDLできます。

###音声のダウンロード

マイドライブ(Driveのトップのフォルダ)の下にprojectsフォルダを作成していることを前提とします。

```ytdlbest.py
def audiodl(url:str):
    adl_opts = {'outtmpl':'/content/drive/My Drive/projects/%(title)s_audio.%(ext)s', 'format':'bestaudio/best'}

    adl = youtube_dl.YoutubeDL(adl_opts)
    adl.extract_info(url, download=True)
```

動画の場合と同様です。

本来音声のみのDLはffmpegのインストールが必要なのですが、GoogleColaboratoryにはデフォルトで入っているようなので、このままで通ります。
Colab素晴らしいですね。

###実行

```ytdlbest.py
def main():
    url = "https://www.youtube.com/watch?v=hogehoge"

    videodl(url)
    audiodl(url)
    print("DL完了")

if __name__ == "__main__":
    main()
```

`url =` 以下にYoutubeのURLを貼り付けてください。
そしたら実行できます。お疲れさまでした。

#その他
動画と音声をくっつけたいなら、

How to get information from youtube-dl in python ??
https://stackoverflow.com/questions/23727943/how-to-get-information-from-youtube-dl-in-python

このあたりを参考に保存する動画/音声のファイル名を取得して、ffmpegで合成すれば出来ると思います。
JavaScriptで設定したCookieはLaravelで単純にRequestから取れないので注意

# 概要
JavaScriptで設定したCookieはLaravelで単純にRequestから取れない。`$request->cookie('flag')`などするとnullが帰ってきてしまう。

# 詳細
JavaScriptで以下のように設定したCookie。

```JavaScript
Cookie.set('flag', 'true');
```

LaravelでCookieの中身を見た場合。

```Controller.php
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;

class IndexController extends Controller
{
    public function index(Request $request)
    {
        dd($request->cookie());
    }
}
```

出力は以下のようになる。


```
array [▼
  "flag" => null
  ~略~
]
```

# なぜ起こるか

Laravelは自分で設定したCookieについては暗号化している。
なので仮に暗号化していなかった場合には、Cookieを復号しようとして失敗する。失敗するとnullが返る。

該当の処理は以下のところ。
Laravelバージョンはv6.9.0のコード。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144064/2a5e152d-70c9-2eff-655c-05aa50668bac.png)


# 対処法

MiddlewareのEncryptCookiesにおいて、暗号化されていないと期待するリストをかけるので追加する。

```EncryptCookies.php

use Illuminate\Cookie\Middleware\EncryptCookies as Middleware;

class EncryptCookies extends Middleware
{
    protected $except = [
        'flag'
    ];
}

```


# おまけ

`$_COOKIE` を取得すれば生のものが取れるよ、という情報もstackoverflowなどでちらほら見られます。
確かに `$_COOKIE` はPHPの組み込み変数なので、確かに復号の仕組みが入っていないので生のCookieを取得できますが、Laravelを使っているのであればLaravelの仕組みの上に乗ったほうが良さそうです。

参考: https://www.php.net/manual/ja/reserved.variables.cookies.php
【超初心者用】Laravel用のサーバーを起動する

###Apacheを使用しなくてもいい
Apacheは8000をリッスンしている。

Apacheを起動してブラウザに`localhost`を入力すると、ルートディレクトリを開くことになるので、設定しているファイルが開かれる。

自分の場合は`top.php`というファイルが開かれる。


###Laravelを使うときにもサーバーをたちあげる必要あり
動画なので説明をみていると、MAMPを使っていたり、いきなりlocalhostにアクセスすることで

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/668402/b381ead9-f323-97ad-1b1c-a316159fd87c.png)

この画面が起動していましたが、自分はApacheを使用してサーバーを立ち上げていて、8000をlocalhostに設定していました。

なので当然上記の画面が表示されませんでした。


###ポートを指定してサーバーを立ち上げる？！
ウェブ職人のためのPHPフレームワーク。というサイトにちゃんと便利なことも書いてありました。
http://laravel.jp/

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/668402/f32957ca-2f17-af0b-65ad-5227e2f9fd64.png)

https://readouble.com/laravel/4.2/ja/quick.html


```
$ php artisan serve --port=8080
```

後ろの`--port=8080`というのが`8080をポート番号に指定する`ということらしい。
これにより、複数のサーバーを立てる場合はこのポート番号をかぶらないように指定すればいいみたいですね。
kintone カスタマイズビューを使用せずにレコード毎に個別に設定してボタンなどを表示する方法

kintoneの一覧画面にボタンを設置したいけど・・・
チュートリアルにはヘッダーにボタンを表示する方法しか書いてない・・・

何とか**カスタマイズビューを使用せずに**、レコード毎にボタンかリンクを個別に設定を変えて設置できないだろうか・・・？

方法あります。
jQueryを使用すれば、レコード毎に設定することができます！

```
for(let i = 0; i<event.records.length >0; i++){
  $('tr').eq(i).append(`<a href="${link[i]}">hoge</a>`);
}
```
kintoneの画面では、一覧はテーブル要素で表示されている。
ため、上記の方法が有効です。
trの何番目か分からない場合は、F12でDOMを調べてください。

※前に「.value-{DOM上の番号}」で書いていましたが、不安定な書き方のため、オススメできません。

こうすることで、カスタマイズビューを使用せずとも、設定できます！

どなたかのお役に立てればと思います！

不明点があれば、ご質問も受け付けております。
AWS Elastic File Systemのアップデートについて

#EFSの自動バックアップがデフォルト設定に
[Announcing automatic backups for Amazon Elastic File System](https://aws.amazon.com/jp/about-aws/whats-new/2020/07/announcing-automatic-backups-for-amazon-elastic-file-system/)

今までEFSをバックアップする場合は、AWS BackupでVaultを手動で作成する必要がありましたが、上記アップデートによりバックアップ設定を自動で作成してくれるとのこと。

#EFSの作成が簡単にできる新しいコンソール
[New Amazon Elastic File System console simplifies file system creation and management](https://aws.amazon.com/jp/about-aws/whats-new/2020/07/new-amazon-elastic-file-system-console-simplifies-file-system-creation-and-management/)

今まで諸々と設定を入れなければならなかったEFSが2クリックで作成できるようになっております。
勿論、前述のバックアップもデフォルトで設定。逆に細かい設定をする場合は、カスタマイズという項目を選べばOK。
バックアップの可否も決めることが可能。

##簡単作成について
まずは新しいコンソール画面。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/536700/2cbc0851-d6e8-9871-7780-c3cc8f9243da.png)
[ファイルシステムの作成から]…
![2.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/536700/c58368a6-49c7-35e4-dffe-83a5f8c9e6ff.jpeg)
[作成]。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/536700/e9d2f62c-721a-b937-d0ff-1abb3c9b00f3.png)
**もうできた！！**

##自動バックアップについて
ちなみに自動バックアップの設定は以下。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/536700/4d3d8566-1407-f225-0743-f48f35d82aaa.png)
増分バックアップですが、毎日取得のライフサイクル5週間なので、
費用を抑えるなら1週間とかに変えた方が良さそう。

##
標準入力・まとめ/python,ruby

自分用メモとしてpaizaのスキルチェックやAtCoderなどでよく使いそうな標準入力をまとめました。

#基本
###文字

```python:input.py
s = input()
```
```rb:input.rb
s = gets.chomp
```

###数値
```python:python
n = int(input())
```
```ruby:ruby
n = gets.chomp.to_i
```
#スペースで区切られてる場合
###スペースで区切られた値を個別の変数に数値として入力

```py:input
1 2 3 
```

```py:python
a,b,c = map(int,input().split())
#int カンマ　input ドット　split に注意
```
```ruby:ruby
a,b,c = gets.chomp.split.map(&:to_i)
```



###スペースで区切られた値を個別の変数に文字として入力
```py:input
red blue yellow 
```
```py:python
a,b,c = input().split()
```
```ruby:ruby
a,b,c = gets.chomp.split
```

###スペース区切りの値をリストに入力（文字・数値）
```py:input
spring summer autumn winter
101 102 103 104
```
```python:python
x = input().split()
y = list( map(int,input().split()) )
```
```ruby:ruby
x = gets.chomp.split
y = gets.chomp.split.map(&:to_i)
```
```py:output
#x
["spring","summer","autumn","winter"]
#y
[101,102,103,104]
```
#複数行
入力：n（行数）
　　　i1
　　　.
　　　. 
　　　in


### ｎ行の値をリストに入力  [i1,i2,i3,.....,in]
```python:python
n = int(input())
I = [ input() for i in range(n) ]
```
```ruby:ruby
n = gets.chomp.to_i
array = []
n.times do
 i = gets.chomp
 array.push(i)
end
```