OmniAICreator/Qiita-1.07M huggingface dataset:
FLASK 　キャラクターの行動メニューを表示する【Windows.ver】



目標：共通テンプレートを使って、ブラウザで下記のようにキティの行動が表示されるようにする
<img width="315" alt="2019-06-22 (16).png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/355304/ddef4f95-b398-d3cd-bd8a-72db12375f65.png">

共通テンプレートの作り方はこちらの記事☞[FLASK 　共通テンプレートの作り方【Windows.ver】](https://qiita.com/Lavieestbelle/items/288c9234c9ab3dbef23c)


1.行動の指示をだすためのファイルを作成
●新規ファィルを作成　ファイル名：Character_menu.py
●下記のようにコードを書く
<img width="415" alt="2019-06-22 (18).png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/355304/032df13a-24c8-2436-05bb-8affb2fc5cc7.png">

2.新規でhtmlのファィルを作成
共通テンプレートのファィルlayout.htmlはすでに作成してあるので、それをextendsで引っ張ってくる
行動をhtmlの中に記述。

<img width="439" alt="2019-06-22 (20).png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/355304/384f17db-20c4-4233-64a9-07d9da314f24.png">


※ここまできたら、ブラウザでちゃんと表示するか確認をする！
<img width="315" alt="2019-06-22 (16).png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/355304/3dcf2747-f083-5cf1-c251-d384142b7acf.png">

しかし、リンクを押すとエラーになります！
なぜならリンク先を指定していないから。

リンク先に行動が表示されるようにコードを書いていく
<img width="710" alt="2019-06-22 (25).png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/355304/a82c3593-dc9b-597b-2b86-99bac73ea4e0.png">

action.htmlという新しいファィルを作成する
これはmenu.htmlをコピーして
コードを編集するとよい
<img width="304" alt="2019-06-22 (26).png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/355304/eb8c8ac3-57e0-4d57-cb39-1f0661e202bc.png">

ブラウザにアクセスすると
<img width="315" alt="2019-06-22 (16).png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/355304/ddef4f95-b398-d3cd-bd8a-72db12375f65.png">

「自転車に乗る」と「タクシーに乗る」をそれぞれクリックすると
<img width="398" alt="2019-06-22 (27).png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/355304/5a4a9ae7-a33e-8f8d-b4cf-f09e015bac3c.png">

<img width="382" alt="2019-06-22 (28).png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/355304/8614c149-7bcb-829e-21ba-55fa91eb0b50.png">
kotlinの集合操作の計算速度


kotlinで集合を操作するためにコレクション操作関数として[intersect](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/intersect.html), [subtract](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/subtract.html), [union](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/union.html)が準備されている

サーバサイドでkotlinを用いた処理を書いているときに数十万件のリスト同士の重複を取得する処理を書く場所が出たので計算量とかって大丈夫なんだっけ？となった


## tl; dr 
よほど
 ・大規模データ
 ・性能的な制約が厳しい
場合でない限り大丈夫そう

## intersect

使用例

```kotlin
    val a = listOf(1, 2, 3)
    val b = listOf(2, 3, 4)

    println(a.intersect(b)) // -> [2, 3]
```

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/200942/ad518562-89a7-1818-36bb-becdcce256a9.png" width="50%">
集合同士の重複を取得できる


#### 定義

```kotlin
public infix fun <T> Iterable<T>.intersect(other: Iterable<T>): Set<T> {
    val set = this.toMutableSet()
    set.retainAll(other)
    return set
}
```

内部的にはsetに変換してからretainAllしている
retainAllの実行速度はjvmによって異なる？（https://stackoverflow.com/questions/2845176/what-is-the-worst-case-big-oh-using-list-retainall）



#### 簡単に試してみた

手元の環境で試すのが早いと思ったので↓のようなコードを書いた

```kotlin
    val sizeList = listOf(
        Pair(100, 100),
        Pair(1000, 1000),
        Pair(10000, 10000),
        Pair(100000, 100000),
        Pair(1000000, 1000000),
        Pair(10000000, 10000000),
        Pair(1000000, 10000),
        Pair(10000,1000000)
    )

    sizeList.forEach { listSize ->
        val lista = List(listSize.first, { it }).shuffled()
        val listb = List(listSize.second, { it }).shuffled()

        val start = Instant.now().toEpochMilli()
        lista.intersect(listb)
        val end = Instant.now().toEpochMilli()

        println(end - start)
    }
```

実行結果

| lista | listb | end-start(ms) |
|:-----------|:------------|:------------|
| 100 | 100 | 5 |
| 1000 | 1000 | 2 |
| 10000 | 10000 | 10 |
| 100000 | 100000 | 67 |
| 1000000 | 1000000 | 801 |
| 10000000 | 10000000 | 14757 |
| 1000000 | 10000 | 253 |
| 10000 | 1000000 | 135 |

`(100000, 100000) -> (10000000, 10000000)`
辺りがサンプル数として適していそうだが、見ても爆発はしていない（ここだけを見るならばO(n)に近い？）
 -> 常識的な範囲内で利用するなら大丈夫な模様
ゲーム向けバックエンドサービス Microsoft Azure PlayFab

[PlayFab \| Microsoft Azure](https://azure.microsoft.com/ja-jp/services/playfab/)

> Azure PlayFab は、ライブ ゲームを構築して運用するための完全な LiveOps バックエンド プラットフォームです。複数のクラウド、デバイス、ゲーム エンジンにまたがる分析や配信など、さまざまなサービスが用意されています。

PlayFab（プレイファブ）は、ゲームのバックエンドを構築・運用するためのサービス（BaaS）。2018年1月に Microsoft が買収、Azure に統合されました。

# 提供するサービス

[Features • Game Services \| Microsoft Azure PlayFab](https://playfab.com/features/game-services/)

* マルチプレイヤーサービス
* プレイヤー認証とアカウント紐づけ
* プレイヤーデータの保存と管理
* プレイヤーのセグメンテーション
* リーダーボード
* ゲーム内キャラクター
* プッシュ通知の送信
* ゲーム内の商取引
* 仮想通貨の作成と追跡

# SDK （対応言語、ゲームエンジン）

[Microsoft Azure PlayFab documentation \- PlayFab \| Microsoft Docs](https://docs.microsoft.com/ja-jp/gaming/playfab/index#pivot=documentation&panel=sdks)

* ActionScript
* Android Studio Project (Java)
* C#
* Cocos2D-x
* Java
* JavaScript
* Lua (Corona, Defold)
* NodeJS
* Objective-C
* Phaser.io (Javascript)
* PHP
* Postman
* Python
* Unity3D
* Unreal Engine
* Xamarin (C#)
* Cross platform C++

# 登録する

[Microsoft Azure PlayFab \| Full Stack LiveOps, Real\-time Control](https://playfab.com/)

「SIGN UP」から無料で登録できます。

# 管理画面

## 言語設定

1. 右上のアカウント名をクリック
![ss1-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78583/7b9bfcf9-0591-fd46-272f-7fc8ca8b568b.png)
2. My Profile を選択
3. Language で「日本語」を選択
4. SAVE PROFILE をクリック

## ダッシュボード

![ss3-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78583/52623e65-f915-14e4-8359-eedb5a5b63a2.png)

## 設定 > API機能

* タイトル ID
* API エンドポイント
* EntityID

![ss4-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78583/016d6163-3a0e-34ca-10b0-103011318af1.png)

## 設定 > シークレットキー

![ss5-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78583/f0545689-4cae-bc90-2178-a60164dffcec.png)

# 公式ドキュメント

* [Microsoft Azure PlayFab documentation \- PlayFab \| Microsoft Docs](https://docs.microsoft.com/en-us/gaming/playfab/)
* [API References \- PlayFab \| Microsoft Docs](https://docs.microsoft.com/en-us/gaming/playfab/api-references/)

# 技術記事

* [個人のゲーム開発者がAzurePlayFabに入門してみた4つの理由 \- Qiita](https://qiita.com/_y_minami/items/6baa0445c2b161aeec65)
* [UnityからPlayFabのユーザーデータをCRUDする \- Qiita](https://qiita.com/_y_minami/items/5914b2ef89a8c83444b7)
* [UnityでPlayFabのタイトルデータを取得して表示する \- Qiita](https://qiita.com/_y_minami/items/3396f832d868d52bbbaf)
* [PlayFab始めました \- Qiita](https://qiita.com/ume67026265/items/380e7068e9a2b60b26bc)
* [PlayFabでUnityを動かしてみる \-その1下準備編\- \- Qiita](https://qiita.com/ume67026265/items/c89b391e36855f45586f)
* [PlayFabでUnityを動かしてみる \-その2 APIコールを作ってみる\- \- Qiita](https://qiita.com/ume67026265/items/b9313c696ceaa301baa8)
* [UnityでPlayFabを使ってみる：導入とユーザー管理](https://torikasyu.com/?p=1213)
* [【PlayFab入門】UnityでPlayFabサーバーとデータの送受信 \- QUEST LAB](https://questgames.hatenablog.com/entry/2019/04/28/191122)
【GitHub】少人数のチームで開発するときのGitHubのブランチ運用Flow

#概要
少人数のチームでGitHubを用いてプロダクト開発するときのブランチ運用フローについて．

[GitHub Flow](https://gist.github.com/Gab-km/3705015)を参考にシンプルさと運用のしやすさを重視している．

チームの全員が6つのルールを守るだけで，masterが綺麗な状態で保たれる．

#全体像
<img width="724" alt="graph.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/390000/b1ed5902-206f-1383-75ed-1e58034460b3.png">

#6つのシンプルなルール
####1. master は本番環境にデプロイされているバージョン
####2. develop はテスト環境にデプロイされているバージョン
####3. feature ブランチ（作業ブランチ）は develop から分岐する
####4. feature ブランチは頻繁に push する
####5. pull-request（PR）で develop にマージする
####6. マージされた feature ブランチは削除する

#実際の作業例
###1. develop からある機能を実装する作業ブランチを作る
```
//developブランチにて
$ git branch hogehoge
$ git checkout hogehoge
```

###2. ローカルの作業ブランチで開発を進めつつ，頻繁にリモートの作業ブランチに push する
```
//hogehogeブランチにて
$ git push origin hogehoge
```

###3. ある程度実装できたらPRをdevelopに飛ばす
GitHubのウェブサイトでPull requestをdevelopに発行する
<img width="196" alt="スクリーンショット 2019-06-22 19.29.01.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/390000/bcdf7f08-a32b-9c46-948e-0161cf6f6258.png">


or

hubコマンドをインストールしていれば

```
//hogehogeブランチにて
$ hub pull-request -b develop
```

###4. PRが承認されてマージされれば作業ブランチを削除する
<img width="773" alt="スクリーンショット 2019-06-22 19.31.35.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/390000/a1764c77-520e-9af6-bf6a-fd5d4ba8ecd4.png">


###5. 管理者がdevelopをテスト環境にデプロイする


###6. 管理者がdevelopを本番環境にデプロイする


###7. 管理者がmasterにdevelopをマージする

#追記：本番環境でバグが発生した場合の対処方法
###1. masterブランチからhotfixブランチを切る
###2. hotfixでバグを修正してmasterにPR -> コンフリクト修正 -> マージ -> デプロイ
###3. 完了したらhotfixをdevelopにPR -> コンフリクト修正 -> マージ -> デプロイ
###4. hotfixブランチを削除

#Happy Hacking :sunglasses: !

#参考
https://gist.github.com/Gab-km/3705015
RDSスナップショットを別のリージョンにコピーするラムダ(Python3.7)

RDSのスナップショットを別リージョンにコピーするラムダ関数の備忘録です。
Python 3.7で、環境変数に以下をセットしています。Javascriptでやろうとしましたが、PythonがシンプルだったのでPython素人ですが採用しました。

|Key|説明|
|---|---|
|DESTINATION_REGION|コピー先のリージョン名(ex:us-east-1)<br>[AWS のリージョンとエンドポイント][0]|

AWSの公式でも公開してました。2017/8/28の記事ですが、現在(2019/6/22)でも有効です。
[Cross-Region Automatic Disaster Recovery on Amazon RDS for Oracle Database Using DB Snapshots and AWS Lambda][1]

```python
import botocore
import json
import boto3
import os

destinationRegion = os.environ['DESTINATION_REGION']

def lambda_handler(event, context):

     sourceRegion = event['region']

     rds = boto3.client('rds', region_name = destinationRegion)

     #Build the Snapshot ARN - Always use the ARN when copying snapshots across region.
     sourceSnapshotARN = event['detail']['SourceArn']
     sourceSnapshotARN = sourceSnapshotARN.replace(":db:", ":snapshot:")

     #build a new snapshot name
     sourceSnapshotIdentifer = event['detail']['SourceIdentifier']
     targetSnapshotIdentifer = "{0}-ManualCopy".format(sourceSnapshotIdentifer)
     targetSnapshotIdentifer = targetSnapshotIdentifer.replace(":","-")

     #Execute copy
     try:
         copy = rds.copy_db_snapshot(
             SourceDBSnapshotIdentifier = sourceSnapshotARN,
             TargetDBSnapshotIdentifier = targetSnapshotIdentifer,
             SourceRegion = sourceRegion)
         print("Started Copy of Snapshot {0} in {2} to {1} in {3} ".format(
             sourceSnapshotIdentifer,
             targetSnapshotIdentifer,
             sourceRegion,destinationRegion)
         )
     except botocore.exceptions.ClientError as ex:
         if ex.response['Error']['Code'] == 'DBSnapshotAlreadyExists':
             print("Snapshot {0} already exist".format(targetSnapshotIdentifer))
         else:
             print("ERROR: {0}".format(ex.response['Error']['Code']))

     return {
         'statusCode': 200,
         'body': json.dumps('Opearation Complete')
     }

```

[0]:https://docs.aws.amazon.com/ja_jp/general/latest/gr/rande.html
[1]:https://aws.amazon.com/jp/blogs/database/cross-region-automatic-disaster-recovery-on-amazon-rds-for-oracle-database-using-db-snapshots-and-aws-lambda/
現場で使うコントローラーの作成方法

#概要
プログラミングスクールなどで習う`rails g controller コントローラー名`というコマンドでのコントローラー作成方法は、実際の現場では使用する頻度が少ないという。では実際の現場で使うコントローラー作成方法をどのようなものなのか。簡単にまとめてみた。

#なぜ現場では`rails g controller コントローラー名`というコマンドで作成しないのか？

***結論！！余計なファイルができると管理しづらい！***

これに尽きるということ！

では実際はどうやるのか…

#現場で使うコントローラー作成方法とは

####１.app/controllers/の中に新しいファイルを作成。

app/controllers/ディレクトリの中に`コントローラー名_controller.rb`という新しいファイルを作成する。

####２.`コントローラー名_controller.rb`に、コントローラークラスを作成していく。

```ruby
class コントローラー名Controller 
   
end
```

これだけだと、クラスを定義しただけなので、コントローラーとして機能しない。

なので、app/controllers/application_controllerの機能を引き継いであげる。(`< ApplicationController`を追加)

```ruby
class コントローラー名Controller < ApplicationController
  
end
```
これで、コントローラー名Controllerが、コントローラーとしての役割をしてくれるため、


**結果**　→　　**コントローラー作成!!（ApplicationControllerの機能をすべて引き継いだ）**

#まとめ

以上、現場で使うコントローラー作成方法をまとめてみた。今回は実際に現場で働いた実績のあるフリーランスエンジニアの方の方法を自分なりに噛み砕いて、アウトプット。初学者ないし、これからエンジニアとして現場に入る方の参考になれば幸いです。
credentials.yml.encでRails環境変数の管理

前にdotenvを使ったRails環境変数の設定方法について記事を書いた
（[dotenvを使ったRails環境変数設定](https://qiita.com/akizora001/items/2aa3670dfa4c3dfa5e6b)）ところ、
Rails5.2以降ならcredentials.yml.encで環境変数管理ができると教えて頂いたので、備忘録を兼ねて書きます。

## 参考記事
[Rails5.2から追加された credentials.yml.enc のキホン](https://qiita.com/NaokiIshimura/items/2a179f2ab910992c4d39)

## credentials.yml.encの編集

`config`配下に`credentials.yml.enc`というファイルがアプリを作成した時に作られている。ここに認証情報を定義する。

`credentials.yml.enc`を編集するためには`rails credentials:edit`を実行する必要がある。（ここではEDITORが未指定なので`EDITOR="vi"`としている）

ルートディレクトリで以下を実行

```terminal
$ EDITOR="vi" bin/rails credentials:edit
```

## 認証情報を記載
hoge_keyを追加

```ruby:credentials.yml.enc
# aws:
#   access_key_id: 123
#   secret_access_key: 345

 hoge:
    hoge_key:hogehogehoge

# Used as the base secret for all MessageVerifiers in Rails, including the one protecting cookies.
secret_key_base: 43f416e170882b7f2d3422e9c8d74c81664d9728851531.......
```

認証情報を取り出す時

```ruby:
hoge_key = Rails.application.credentials[:hoge_key]
```

`credentials.yml.enc`はmaster keyを利用して暗号化・復号され、master keyの値は`config/master.key`に記載されている。
`master.key`はデフォルトで`.gitignore`に含まれており、master keyがGitリポジトリに含まれないようになっている。


`.gitignore`を確認

```:.gitignore
# Ignore master key for decrypting credentials and more.
/config/master.key
```

これで認証情報を含んだソースをGitに上がるのを防ぐことができた。
Google Cloud Speech-to-Textの英語リスニング力について

# はじめに
* Google Cloud Speech-to-Textの実力を検証しました。
* 音声文字変換モデルをプレミアムなモデルにするとさらに精度がUPしました。
* ほとんどの日本人が正しく聞き取れないネイティブの英語を100%の精度で変換することができました。

検証に使用したのは私が英語のリスニング強化のためにいつも使用しているYouTubeサイトです。
ニック式英会話
英語　リスニング：このドラマ、聞き取れますか？21（SUITS）
https://www.youtube.com/watch?v=qcwH6LR7OKM

Google Cloud Speech-to-Textは下記サイトから誰でも簡単に試用することができます。
（UPLOAD音声は60秒以内の制限あり）
Cloud Speech-to-Text
https://cloud.google.com/speech-to-text/

# 1. 音声モデル default
![model_default.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60838/4af7dad3-08f1-7462-f117-dc13413cb660.jpeg)
# 2. 音声モデル video
![model_video.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/60838/bde11c68-9c40-8013-f6cb-bf511ec632f3.jpeg)

# 結果比較
正解
I told him that Louis put me up to it and that he couldn't trust him

音声モデル default　※<font color="Red">赤字</font>は間違っている単語
I told him that <font color="Red">Lewis</font> put me up to it and <font color="Red">then you can</font> trust <font color="Red">it</font>

音声モデル video  ※ミスがありません。
I told him that Louis put me up to it and that he couldn't trust him

# その他
1. サンプルに使用した音声は、PCの再生音を録音し作成しました。そのままでもほぼ完ぺきな認識率でしたが、音声編集ソフトAudacityでコンプレッサーをかけ、推奨のLINEAR16に変換したところ100%になりました。
2. 日本語の変換には音声モデルがありません。精度も英語と比べると劣ります。漢字の変換ミスが多いです。同音の漢字が多いので英語に比べて難易度が高いのではないかと思います。
3. APIを使用すれば、長時間音声、マルチ言語音声も変換が可能です。マルチ言語のAPIベータ版を日本語と英語がミックスされた音声で試してみましたがこちらの変換精度はいまいちでした。人が聞けばすぐに日本語か英語か区別できるのにAIはうまく区別できていないようでした。
【Linux】権限設定の777とか755って何？って話。

# chmod 777とか755ってよく見るけど何？
二進数を元に権限のことを表しているんですよね。
詳しくは追記します。

# 以下は2019/09/15に追記しました！

## 実際に権限を表示
```terminal:ターミナル
drwxr-xr-x
```

## わかりやすく分ける
```terminal:ターミナル
d rwx r-x r-x
```

rwxとr-xとr-xという風に、
3文字ずつで左から分かれています。
左から順に **オーナー(owner)**、**グループ(group)**、**アザー(other)**です。

## rwxの意味
**rは読み込み(read)**、**wは書き込み(write)**、**x(execlution)**は実行です。

## 数字で権限をふる

```terminal:ターミナル
sudo chmod 777 ファイル名
```
こんな感じで権限が変更できます。
数字は3桁で一番左から**オーナー(owner)**、**グループ(group)**、**アザー(other)**に対して権限をふる数字になっています。

## 数字の意味
コンピュータとしては二進数で処理するものを
十進数表記にしています。
1であればスイッチオン、0であればスイッチオフのイメージです。

以下がそれぞれの数字を十進数表記から二進数表記に変えたものです。

```
0　→　000
1　→　001
2　→　010
3　→　011
4　→　100
5　→　101
6　→　110
7　→　111
```

これについては[こういうもの](https://hogehoge.tk/tool/number.html)を弄って慣れるのがいいかも。

## 4 2 1
2進数をしっかり理解しておくと色々便利ですが、
権限の事だけ覚えるなら、
一番左点いていると4、その右が点いていると2、一番右が点いていると1
という風に覚えて足し算するので十分かも。

## 具体例
今までの知識を使って権限を付与する具体例です。

```terminal:全部権限を開く
sudo chmod 777 ファイル名
```

```terminal:全部権限を閉じる
sudo chmod 000 ファイル名
```

```terminal:オーナーのみ読み書き可能
sudo chmod 600 ファイル名
```

## 最後に

```
chown
chgrp
```
こういうのもあるんで、関連して覚えると記憶が強くなりそう。
後数字でなく+rだとかで（曖昧）権限を変更できる方法もあったはず。
【イベント開催リポート】TECH::Survivorもくもく会 #1  ｢30代未経験でも転職できた！｣｢KotlinでAndroid開発が今熱い｣｢SESでも自社サービスでもあんまかわらなくね？｣｢最初にやる言語｣「公務員からエンジニアになりたい」他

# はじめに
こちらは2019/6/22に開催したTECH::Survivorのもくもく会のレポートです。
場所は渋谷、会場はこちらを使わせていただきました。

当日の雰囲気はひたすらもくもくと言うより、雑談やキャリア相談、最近熱い仕事など、活発に意見や情報交換が行われました。
夜はビールを飲みながら、ごくごく会。

## andworks
会場はこちらをお借りしました。
https://www.xandwork.com/shibuya

## TECH::Survivorとは？
TECH::Survivor、我々はエンジニアのキャリアを考え、ゆるーく繋がるコミュニティです。(となりたい)
http://techsurvivor.top

# 出た話題
## 30代でも独学メインで勉強会参加してたりしてたら転職できた！
  - 1年ぐらい準備していた
  - 転職活動自体は1ヶ月ぐらいガッツリと
  - 15,6社受けた
  - PHPとかLinuxを勉強した
  - 仕事はJava

## SESでもSIer、受託でも自社サービスでも最終的にいきつく場所は同じ
  - SESは残業がヤバいのは嘘、月の勤務時間は契約で縛られてる
  - むしろ残業がヤバいのは受託、自社サービス
  - 誰かの課題を解決するのがエンジニアの仕事
  - それをどうやるかが問題で業態は関係ない

## 最初にやる言語
  - Twitterでアンケートとったら未経験者の方の半数はRubyだった
  - Ruby難しくない？
  - 言語やFWもそうだし、仕事で求められるもののハードルが高い
  - PHPは？
  - 仕事は多い、けどオブジェクト指向とかは身につきづらいかも
  - Javaは？
  - オブジェクト指向を理解しやすいし、型やデザインパターンを意識したプログラミングも身につきやすい
  - 仕事も多い、他の言語へのコンバートもしやすい
  - 結局どの言語でも、ちゃんと勉強すればOKだと思う
  - 大事なのは根底にある考え方を理解すること、プログラミングに慣れること

## 仕事獲得の方法
  - 正社員でもフリーランスでも選択肢は持っておいたほうが良い
  - SNSを有効活用するのもあり！
  - 友人伝手も強い！知人伝手でRailsの案件を獲得！でも辛い…

## Kotlinを使用したAndroid開発
  - Android開発案件の案件が単価が高い
  - 格安スマホが増えたため、需要アップ！
  - できる人があまりいないのでワガママ聞いてもらえる

## キャリアチェンジ/キャリアアップ
  - 公務員からエンジニアに転職したい！
    - 群馬から来ました！
    - 公務員は場所にもよるが、いるところは本当お役所
    - 何が何でも脱出したいんで、エンジニアになる！
  - 組み込みからWebにキャリアチェンジしたい
    - ジャンルが違うので、完全未経験と考えて頑張る！
  - フリーランスだけどプロジェクトマネジメントにチャレンジしたい
    - 会社員としてステップアップしていくのが通常
    - しかし、少ないがチャレンジするチャンスはある

## フリーランスになりたい
  - 漠然とフリーランスになりたい
  - フリーランスになるにはどれぐらい時間があればよいか
    - 業務経験にもよるが、割と誰でも２，３年経験していればなれる
  - フリーランスで稼ぎたい
    - フリーランスは稼げるといってもたかが知れてる
    - フリーランスはいつまでもやるまでもないし次への繋ぎ

# 終わりに
TECH::Survivorは定期的にもくもく会やキャリア相談をやっています。
お気軽にお立ち寄りください。
文字化けについて

##日本語が文字化けしてしまう・・
charset="UTF-8"を設定しているが、日本語部分が文字化けしてしまう

```html:qiita.html
<!DOCTYPE html>
<html>
 <head>
  <meta charset="UTF-8">
  <title>HTML</title>
  <link rel="stylesheet" type="text/css" href="test.css">
 </head>
<body>
 <p>123だーっ</p>
</body>
</html>
```
##文字化けが起こる理由

htmlファイルとブラウザとで文字コードが異なっていた。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/175699/fc73cbb1-a1ee-775a-2046-be87bdd20ae7.png)
【参考URL】[ウェブサイトが文字化けしてしまう理由とその対応について](https://design-plus1.com/tcd-w/2019/03/textgarbling.html)
toioを動かす(Node.js)

<blockquote class="twitter-tweet" data-cards="hidden" data-lang="en"><p lang="ja" dir="ltr">toio動いたー <a href="https://t.co/Vsdoo7a7RF">pic.twitter.com/Vsdoo7a7RF</a></p>&mdash; kazukinakamura (@kazukinakamur14) <a href="https://twitter.com/kazukinakamur14/status/1142352564232441857?ref_src=twsrc%5Etfw">June 22, 2019</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>


公式
https://github.com/toio/toio.js#computer-prerequisites

## 動作環境
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/253014/7b88d976-763f-2fa8-bc4a-551929434655.png)

```
node -v
v8.16.0
```

## 動作確認

```
git clone https://github.com/toio/toio.js.git   # clone repository
cd toio.js                                      # move to repository root
yarn install                                    # install dependencies
yarn build                                      # build @toio/* packages
yarn example:keyboard-control                  # start sample application (see below)

```

yarnがないときは適宜

durationに0を設定すると楽しい！
AWSのSSL化(https)について教えて下さい

ウェブサイトをAMSで運用したいと思い、下記のサイトを見て試したんですが

https://note.mu/mossmuss/n/ne846c1b1f0da

ステップ６．CloudfrontでSSLを設定

ここで完全に詰まり、先に進めなくなりました。

このようなエラーがでます。

com.amazonaws.services.cloudfront.model.InvalidViewerCertificateException: To add an alternate domain name (CNAME) to a CloudFront distribution, you must attach a trusted certificate that validates your authorization to use the domain name. For more details, see: https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/... (Service: AmazonCloudFront; Status Code: 400; Error Code: InvalidViewerCertificate; Request ID: 33c1a60a-94d3-11e9-9e59-414ad5adae14)

調べても訳が分かりません。

わかる方いらっしゃいましたら、お教えください。
(エンジニア向け) Windows10 をインストールした後に設定すること

#自己紹介
初めまして、でえもん木村と申します。
Qiitaを始めたので最初にWindows 10の初期設定について記載していきます。
少しでも参考になれば幸いです。

※あくまで個人的な意見です。設定は自己責任でお願いします。

###作業環境：Windows 10 Pro ver1903

##(1)高速スタートアップの無効化
「コントロールパネル」→「電源オプション」→「システム設定」
Windows 10からデフォルトで高速スタートアップが有効になっています。
高速スタートアップでは起動時間を短縮するために、今までのシャットダウンとは動作が異なります。
ソフトウェアのインストール時など、シャットダウンしただけでは正常に動かないことがあるので無効にすることがおすすめです
![システム設定 2019_06_22 18_29_52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/436464/cac07b2a-e762-b178-59fb-06db0a1952f4.png)

##(2)電源プランを高パフォーマンスに変更する
Windows10のデフォルトでは、電源プランが「通常」になっています。
この状態だとCPUが使用できる電力に制限がかかり、CPUがマックスまで動作しません。
（PCメーカーによって設定が異なります。）
当然 消費電力は増えますが、快適に動かすために高パフォーマンスにします。
![電源オプション 2019_06_22 18_26_38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/436464/a8505ae7-e189-0d3c-3303-7e19878e4de4.png)


##(3)「システムの詳細設定」から「パフォーマンスを優先する」に変更
「コントロールパネル」→「システム」→「システムの詳細設定」→「パフォーマンス」

文字のギザギザが気になる人は、「パフォーマンスを有効にする」を選択してから
「スクリーンフォントのふちを滑らかにする」にチェックを入れれば大きく見た目は変わりません。
![システムのプロパティ 2019_06_22 18_41_44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/436464/25f4bd26-90bc-e7e1-8ca8-0f6a4ff663f0.png)![システムのプロパティ 2019_06_22 18_41_57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/436464/7ffc190d-344d-c536-2c74-776f60f5b282.png)

以上がWindows 10を最初にインストールしたときに、
パフォーマンスを最大にするために設定している内容です。

今後も定期的にQiitaに記事を投稿していこうと思います。
ありがとうございました。
【初学者向け】プログラミングで処理を実装する時は流れを考えよう！

#はじめに
初学者向けに書いています。
一連の処理を作るときの考え方を書きました。

#意識して欲しいこと
###実装の要素を分解し、流れを考える
何かを実装したいと思ったら、その実装に必要な要素やフロー（流れ）を考えて書き出してみましょう。

料理で例えましょう。
あなたは**「カレーを作りたい」**と思った時、魔法使いでも無い限りいきなりカレーを空間に出現することはできないと思います。
きっと手順として頭の中で以下と似た様なフローを思い描くと思います。
(※食材の調達や細かい工程は割愛しています。~~カレールゥじゃ無くてスパイスからとかレトルトをチンするとか言わない。~~)

1. 具材を切る
2. 具材を炒める
3. カレールゥを入れて煮込む

プログラミングも同じです。
何かを実装したいと思ったら上記の様にフローを思い描いてから実装に取り組んでみましょう。
そうすればどんな処理が必要か、何の値が必要かと行ったことが明確になり、実装中に迷子にならずに済みます。

#具体例
あなたは唐突に**「ユーザーに入力させた数字を二乗にして表示したい」**という気持ちに駆られたとします。
この処理をフローで書き出しましょう。大体以下の様になるかと思います。

1. ユーザーに数字を入力させる
2. 数字を二乗する
3. 答えを表示する

というわけで早速実装しましょう。
慣れるまでは作業ファイルにコメントアウトでフローを書いておくのもありですね。

```ruby:作業ファイル
# 好きな数字を入力させる
# 二乗する
# 表示する
```
丁寧に描くとこんな感じ。

```ruby:作業ファイル
# 好きな数字を入力させる
input = gets.to_i
# 二乗する
answer = input ** 2
# 表示する
puts "二乗した結果#{answer}になりました。"
```
もちろんプログラミングは自由に書いて良いので上記が絶対では無いです。
３行も書くのは勿体無いなというストイックマンは１行で実装するかもしれないし

```ruby:ストイックマン
puts "二乗した結果#{gets.to_i ** 2}になりました。"
```
丁寧な人は、入力させる前にユーザーに分かりやすいようアナウンスを入れて、尚且つ二乗処理を使い回せる様にメソッドにするかもしれません。


```ruby:丁寧な人
def multi(number)
  number ** 2
end

puts "好きな数字を入力してください。"
puts "二乗した結果#{multi(gets.to_i)}になりました。"
```

どの様に書いても結果良ければ全てよし！ではありますが、ゆくゆくは他人と一緒に開発することを想定して読みやすく、無駄なく書く様心がけましょう。



#まとめ
今回の具体例はフローを書くまでもなくとても簡単な処理ですが、複雑な処理になると初学者は何を書いているか見失いがちです。
実装したいことに向けてしっかりと必要な要素、フローを書いて落ち着いてして一つ一つ実装して行きましょう。


#最後に
「ここが分かりにくかった」「これは何？」などの質問や、レイアウト等の書き方にアドバイスがある方はお気軽に（優しく）コメントを頂けると助かります。
json わからない!!

##教えて下さい!!
```test.json
{"index": {"_id": 1}}
{"title": "The quick brown fox", "price": 5}
{"index": {"_id": 2}}
{"title": "The quick brown fox jumps over the lazy dog", "price": 15}
{"index": {"_id": 3}}
{"title": "The quick brown fox jumps over the quick dog", "price": 8}
{"index": {"_id": 4}}
{"title": "Brown fox and brown dog", "price": 2}
{"index": {"_id": 5}}
{"title": "Lazy dog", "price": 9}
```

こんな感じで一つ一つの辞書を改行して書き込みし、jsonファイルにする方法を教えて下さい!!
[CircleCI] 特定のディレクトリに差分がなければ job を正常終了する

## 差分チェックスクリプト

```scripts/circleci/is_changed_directory.sh
#!/bin/bash
# See: https://blog.hatappi.me/entry/2018/10/08/232625

if [ "${CIRCLE_BRANCH}" = "master" ]; then
  DIFF_TARGET="HEAD^ HEAD"
else
  DIFF_TARGET="origin/master"
fi

DIFF_FILES=(`git diff ${DIFF_TARGET} --name-only --relative=${1}`)

if [ ${#DIFF_FILES[@]} -eq 0 ]; then
  exit 1
else
  exit 0
fi
```

## `.circleci/config.yml`
```..circleci/config.yml
script_setup: &script_setup
  command: |
    echo 'export PATH=$PATH:${CIRCLE_WORKING_DIRECTORY}/scripts/circleci' >> $BASH_ENV

jobs:
  sample_job:
    steps:
      - checkout
      - run:
          <<: *script_setup
      - run:
          name: 後続の job 実行継続判定
          command: |
            if ! is_changed_directory.sh "foo/bar" -a "${CIRCLE_BRANCH}" != "master"; then
              echo "foo/bar に変更がありません"
              circleci step halt
            fi
```

## 参考
* [CircleCIで特定のディレクトリ配下にコミットされた時にjobを実行したい](https://blog.hatappi.me/entry/2018/10/08/232625)
* [CircleCI | Orbs FAQ Failing Builds](https://circleci.com/docs/2.0/orbs-faq/#failing-builds)
Raspberry Pi で 動画を再生するには

## はじめに

OpenCVなどでavi形式に保存した動画を再生する方法をまとめてみた。

## 方法

まず最初にMPlayerを導入したのですが、

```
sudo apt-get install mplayer
```
再生してみると、動きがもっさりします。

で、別のツールでomxplayerを導入すると動きがスムーズになりました。下記がインストール方法です。

```
sudo apt-get install libpcre3 fonts-freefont-ttf
sudo apt-get install fbset
wget https://omxplayer.sconde.net/builds/experimental/omxplayer_0.2.6~boblight~git20130425~03cfbee7_armhf.deb
sudo dpkg -i omxplayer_0.2.6~boblight~git20130425~03cfbee7_armhf.deb
```

起動方法ですがシンプルに

```
omxplayer ./output.avi
```

とすると動画が再生されます。

## Reference
[RaspberryPiにいれるべきおすすめアプリまとめ25選](https://www.kabegiwablog.com/entry/2017/09/19/180000#Firefox-ESR)
[raspberryPi でMP4動画の快適再生するコマンド omxplayer とその使い方（キーボード操作](http://takuya-1st.hatenablog.jp/entry/2014/10/13/030759)
ABC129で初めてC問題を解いた(python)

弱小Pythonistaなので、一度もAtCoderに出場したことはないのですが、
そろそろ戦わないとと奮起し、AtCoderに取り組んでみた。

A,B問題は簡単なのでどうでもいい
僕からするとC問題は難しい

そこでAtCoder129のC問題に取り組んでみた。

#AtCoder129のC問題
<img width="1116" alt="スクリーンショット 2019-06-22 17.49.05.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/332317/d644b919-6ec4-583a-b7c1-479b39328241.png">


####なるほど、面白い。
僕の頭の中では数Aの範囲の最短経路問題が浮かんだ
![最短経路.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/332317/28922f19-2bc9-0d72-b465-745dd7590f12.png)

こういうやつ、よく解きましたよね。
P地点を通って、AからBまで行くときの最短経路は何通りか、という問題。

AからPまでの行き方の総数と、PからBまでの行き方の総数を掛け算すれば求められる。
懐かしいですね〜


ここでABCの問題に戻ると
壊れた床同士の間にある床でそれぞれ何通り移動方法があるか求めて、
それらを掛け合わせれば良い。
簡単やん！と思ったが、

####移動方法は何通りだ？？
と我に返る。
いつだって僕の人生は行き当たりばったりで、一喜一憂を繰り返しているのだ。

そこで床の個数が1の場合、2の場合、、、と頭の中で計算をすると

| 続いている床の個数   |       移動方法の数 |  
|:-----------------:|:------------------:|:------------------:|
| 1            |              1|        This        |
| 2           |            2 |       column       |
| 3            |              3 |        will        |
| 4              |                5 |         be         |
| 5            |             8 |       center       |
| :          |           :|      aligned       |


###フィボナッチ先生！！
フィボナッチ数列と言えば、

F0 = 0,
F1 = 1,
Fn + 2 = Fn + Fn + 1 (n ≧ 0)

皆さん大好きなこの漸化式。

自然界の至る所に見かけられますが、
有名なものだとひまわりの種の個数とか、オウムガイの螺旋構造とか、
黄金比にも行き着く、この素晴らしい数学の世界よ。


というわけで、もう頭の中では答えが完成。
あとはコードを書けばいいだけ。


```python:ABC.py
#配列内の全ての数値の積を求める際に必要
from operator import mul
from functools import reduce
 
# リスト内包表記で入力を変数やリストに代入
n, m = [int(i) for i in input().split()]
arr = [int(input()) for i in range(m)]
 
#始点（0）と終点（n）をarrに追加するが、壊れた床間の差分をとる際にずれるので、視点は-1,終点は+1しておく
arr.append(n+1)
arr.insert(0, -1)
#壊れた床同士間にある床の数をリストに内包
div_arr = [arr[i+1]-arr[i]-1 for i in range(len(arr)-1)]

#フィボナッチ数列を定義
def Fib(n):
    a, b = 0, 1
    if n == 1:
        return a
    elif n == 2:
        return b
    else:
        for i in range(n-2):
            a, b = b, a + b
        return b
      
#div_arr内の全ての数をフィボナッチ数列の関数に入れ、それらを全て掛け合わせる
print(reduce(mul, [Fib(i+1) for i in div_arr])%1000000007)
```

以上、ABCのC問題の僕なりの解法でした。
Oracleマスター Silver 12ｃ DBCAを使用したデータベースの作成

※用語はなるべく、Oracle® Databaseリファレンス　12c リリース1 (12.1) より抜粋しております。

###■公式チェックリストより出題範囲
■DBCAの使用によるOracle Databaseの作成
・DBCAを使用してデータベース作成スクリプトを生成する
・DBCAを使用してデータベース設計テンプレートを管理する

■試験内容　チェックリストから除外されたトピック
　－Database Configuration Assistant(DBCA)を使用してデータベースを作成する。
　－DBCAを使用してデータベース・オプションを設定する

－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－

###要点
DBCAはデータベースを作成するためのSQLスクリプトを作成できること。
スクリプトの役割、名前

データベースを作成する手順、作成する際に設定する項目（キャラクタセットなど）は出題されないと思われる。

スクリプトは覚えることは少ないので確実に覚えよう。
データベーステンプレートは、それぞれどのような目的で使用するか、他のテンプレートと比べてどのような利点があるかを把握しよう。

－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－

###■DBCAを使用してデータベース作成スクリプトを生成する

####orainstRoot.sh
orainstRoot.shは**インベントリポインタファイル（/etc/oraInst.loc）を作成する**
インベントリポインタファイルはインベントリの場所と管理グループが書かれたファイル。

####root.sh
root.shは**oratab**の作成とOracle用の環境変数を変更するスクリプト**oraenv,coraenv**のコピーを行います。
oratab：Oracleソフトウェアを格納するディレクトリがデータベースごとに書かれています。

###■DBCAを使用してデータベース設計テンプレートを管理する
####データベーステンプレート
目的別に事前定義されたデータベース定義で、新規データベースの作成に使用できる。

●**汎用またはトランザクション処理**：トランザクションを処理して、データを中期的に保存する。
●**カスタムデータベース**：多目的データベースで利用する。
●**データウェアハウス**：データを長期間保存し、読取り操作でそれらを取得する。

■汎用またはトランザクション処理・テンプレートの特徴
　　－**多数のトランザクションを同時に実行する環境に適したデータベースを作成するテンプレート。**可用性や、同時実行性、リカバリ可用性が重要視される。

■カスタムデータベース・テンプレートの特徴
　　－**各種設定を個別に行うテンプレート。**データベースの作成に時間がかかる点に注意

■データ・ウェアハウス・テンプレートの特徴
　　－**大量のデータに対して複雑な問合せを実行する環境に適したデータベースを作成するテンプレート。**速い応答時間や高い可用性が求められる検索処理に適したデータベース構成になる。

####テンプレートの追加
【重要】3パターンの内容をしっかり把握すること。

　●既存のテンプレートを使用：既存のテンプレートをコピーし、初期化パラメータや、記憶域パラメータ、カスタムスクリプトなどを変更する。
　●既存のデータベースを使用（構造のみ）：既存のデータベースの構造情報（データベースオプション、表領域、データファイル、初期化パラメータなど）を保存する。
スキーマ定義やデータは保存しない点に注意。
　●既存のデータベースを使用（データおよび構造）：構造情報と物理データファイルの両方を保存する。データベースファイルはバックアップとして保存され、**保存する位置は指定することができる。**
（ファイルパスについては、OFAを使用するか、既存のファイルパスを指定できます）

出題例：DBCAのテンプレートに関する説明として正しいものを2つ選択しなさい
→既存のデータベースファイルのファイルパスはOFAを使用するか既存のファイルパスを維持するかを選択することが出来る
→既存のデータベースを使用（データおよび構造）を使用して、テンプレートを作成する場合、ソースデータベースはローカルのデータベースを使用する

【理解】
・既存のデータベースを使用したテンプレート作成ではソースデータベースはローカルにある必要がある
・ファイルパスはOFAまたは既存のファイルパスを選択できる
・既存のデータベース（構造のみ）を指定した場合、スキーマ定義やデータは保存されない
－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－
###データベースの削除
【重要】
データベースを削除するには、**データベースはオープンされている必要があります。**
さらに、DROP DATABASE文の条件として、データベースを**RESTRICTモード**でマウントしておく必要があります。
以下が同時に削除されます。
・データファイル
・オンラインREDOログ
・制御ファイル
・初期化パラメータファイル
Pythonで画像ファイルを扱う際のTips

Pythonでネット上にある画像をダウンロードして、Twitterなどのapiを使ってアップロードすることがたまにあるのですが、一度ローカルストレージにファイルを保存してからアップロードのが通常かと思います。

コードにするとこんな感じ。

```Python
import requests

imgUrl = 'https://www.python.org/static/img/python-logo.png'
r = requests.get(imgUrl)
with open('sample.png', 'wb') as f:
    f.write(r.content)
```
ストレージにPythonのロゴの画像がダウンロードされるはずです。

で、今回は***ストレージに画像を保存しないでそのままアップロードする方法***を見つけたのでシェアハピします。

標準ライブラリのio.BytesIOに画像のバイナリデータを渡してあげるだけです。

```Python
import requests 
from io import BytesIO

imgUrl = 'https://www.python.org/static/img/python-logo.png'
r = requests.get(imgUrl)
img = BytesIO(r.content)
```
変数imgにはインメモリーで扱えるファイルオブジェクトが入ります。これにより保存する必要がないファイルの場合にはストレージを圧迫しなくて済みます。GAEなどのread-onlyなPaaSなどで画像ファイルを扱う際にはめちゃくちゃ便利です。

試しにTweepyで画像をアップロードしてみます。

```Python
import tweepy
import requests 
from io import BytesIO

consumer_key = 'your_consumer_key'
consumer_secret = 'your_consumer_secret'
access_key = 'your_access_key'
access_secret = 'your_access_secret'
auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_key, access_secret)
api = tweepy.API(auth)

# 通常
imgUrl = 'https://www.python.org/static/img/python-logo.png'
r = requests.get(imgUrl)
with open('sample.png', 'wb') as f:
    f.write(r.content)

api.update_with_media('sample.png', status='test')


# BytesIOを使う場合
imgUrl2 = 'https://www.python.org/static/img/python-logo.png'
r2 = requests.get(imgUrl2)
img2 = BytesIO(r2.content)

result_img = api.media_upload(filename='sample2.png', file=img2)
api.update_status(status='test2', media_ids=[result_img.media_id])
```

通常ローカルストレージにある画像指定してアップロードするメソッドである、`update_with_media`ではファイルオブジェクトを扱うことができないので`media_upload`メソッドを使います。これによりアップロードされた画像のmedia_idを通常のツイートメソッドである`update_status`のmedia_idsの引数に渡すことでツイートが完了します。

ちなみにですが[Tweepyの公式リファレンス](https://kurozumi.github.io/tweepy/api.html)のupdate_with_mediaメソッドの欄を読むと
>
Deprecated: Use API.media_upload() instead. Update the authenticated user’s status. Statuses that are duplicates or too long will be silently ignored.
(非推奨：代わりにAPI.media_upload（）を使用してください。 認証済みユーザーのステータスを更新します。 重複している、または長すぎる状況は黙って無視されます。)（Google翻訳）

だそうです。update_with_mediaは画像を一枚アップロードするだけなら一行で済むので便利でしたが、今後はmedia_uploadを使ったほうが良さそうです。
WordPressにAmazon Payを実装してみた

こちらは、2019年6月22日（土）、アマゾンウェブサービスジャパン 大阪支社にて行われた Kansai WordPress Meetup Osaka の第2回に登壇した時の資料です。

https://www.meetup.com/ja-JP/Kansai-WordPress-Meetup/events/261449604/

------

# 自己紹介
井坂 久子

フリーランスのエンジニアです。
PHPやJavascriptを利用したWebアプリケーション開発を行なっています。

WordPressのプラグイン開発
WordPressカスタマイズ
kintone アプリ作成やカスタマイズ
Xamarinや kotlinなどを使用したスマホアプリ開発
Microsoft ExcelやAccessなどの VBA開発なども行なっています。

-----

# Amazon PayをWordPressに導入する場合には

1. Amazonが提供しているAPIを利用し独自に実装を行う。
2. プラグインを利用する。

- ECサイト用の有料のプラグインを購入
- WooCommerce用のAmazon Pay決済プラグインを利用

-----

# 今回の事例
導入サイト：　NPO団体寄付サイト

- 現在、既にWordPressにてサイトを構築し、クレジットカードにて寄付ページを持っている。
- 今回初めてAmazonPayを導入するので「ワンタイムペイメント」のみで導入したい。
- 寄付する時にAmazonPayが使えればもっと寄付がしやすくなる！！
- Amazon Seller Centralという、プラットフォームがあり、使い勝手がいい！:blush:

-----

# どうして独自実装になったのか

1. ECサイト（WooCommerce）ではないのでプラグインが使用できない。:no_good:
2. 寄付サイトなら商品発送などが不要なので即時請求できるから処理が簡単！
   
   配送があると

   `Order Reference→Authorize→商品出荷→売上請求(→返金)`

   注文された商品を出荷してから売上請求しなければならない
   寄付などであれば商品発送がないので

   `Order Reference→Authorize→売上請求(→返金)`

   即時請求が可能！！

   ↓

処理フローが少ないのでなので予算内で実装できるかも！？

-----

# 今回の処理フロー

Amazon Payボタンとログイン画面の表示
　　　　　　　↓
Amazon.co.jpによる購入者認証
　　　　　　　↓
寄付金額を入力し支払方法を選択
　　　　　　　↓
寄付完了

-----

# 今回の実装概要

1. JavaScriptでログインボタンボタンを実装。
2. ボタンを押すと、AmazonのJSがアカウントを認証し、指定したコールバックURLにリダイレクト、クエリパラメータでアクセストークンがついてくる。
3. アクセストークンを使って、ユーザー情報を取得したり、支払い処理を実行する。

-----

# 注意点


1. 法人でないとアカウント解説できない。
　　　→ただし、開発環境が欲しいとの事を伝えればアカウントを開設できる。
2. Amazon Paymentsのアカウント開設前に、すぐに使えるテスト環境はないため、事前の技術検証がほぼできない。
3. https(SSL)でないと使用できない。
4. メール文章の改行などは指定できない。


-----

# まとめ

1. デジタルコンテンツ販売やサブスクライブなどであれば処理フローが短いのでとっても導入しやすい！
2. Auto Payを使えば年会費などにも使えそう！
3. SDKやSANDBOXもちゃんと用意されているので開発しやすい！
4. Documentが豊富で問い合わせした場合もとっても親切に対応してくれる。
5. 仕様はオープンだが、ネットでの実装事例はなくて、完成イメージを持てずに苦労することもあった。
6. 個人的にAmazonをよく使っていることもあり、Amazonログイン→支払いはとにかく簡単。
7. PHPなどのSDKがあるのでAPIを使用しての独自実装もやりやすい！

-----

　　　　



　　　　　
　　　　　ご静聴ありがとうございました。
オブジェクト指向についての考え方[自分用]

# そもそもなんでオブジェクト指向にするの？

全部手続き型でいいじゃん！組みやすいし！
グローバル変数でいいでしょ！！！

えぇ、私も正直最初期はそう思ってました、というかそうでしょ楽に実装できるし
簡単に作成可能だし。
一回きりならそんなんでいいんじゃないの？みたいな

実際問題最初のうちなら別にいいんですけども、
そのうちこれを長期間使うかも
みたいなことになった時に死にます。

このコード何してるの…って。

# 簡単なオブジェクト指向の説明

今更ながらにこれは自分用なので他の記事見たほうがいいんじゃないでしょうかね？
まぁ、私のがトップに出ると思いませんが。

閑話休題
そもそもオブジェクトってなにっていうところで私もわかりません、
細かい事柄はグーグルさんにでも、

基本的には物体とかいう意味だったはずです。
物体事に考える思考と思えば。

ゲームとかだと主人公はHPをもっててー武器を持っててーみたいな感じで分かりやすいですよね

```ts
Instance Hero{
 HP:int;
 MP:int;
 Attack():void;
}
```

こんな感じで
でも実際作業時の場合ってなかなかこんな風に考えにくくないですかね、
というか私は無理でしたが。


さてコードでの説明はこれ以降しないとして

オブジェクト指向、ものみたいな考え方です。
までを認識すればとりあえずはOKです。

# ものみたいな考えとは

例えばなんですけど
今ならばみさなん携帯持ってますよね？

電源と音量キー
電源キーを押したらスリープから覚めるし
音量キー押せば音が大きくなったり小さくなったりと

でもその中身は知らない、
音量キーを押してなんで音が大きくなった、小さくなった
電源長押ししたら電源切りますか？の文が出てくるがなぜ出てくるかは知らない。
でも使える。

これがオブジェクト指向です！！

**わかるわけねぇだろ**

いや初心者にはほんとわかんないです、意味が
言葉で説明されても画像で見たって正直なところ理解なんてできません。
書いて身に着けるしかない…。あぁ、もっとチートみたく技術習得できないの？

# 身近にあるもので例えましょう。

そう、例えばおうちの中、
基本的に読んでる人は家に住んでいると思っています。
いや別に会社とかでもいいんですけれども…

電気を入れるためのスイッチがあって、コンセントがあって…


スイッチを押せば電気がついて押せば電気が消える、
+因子がこうなってて～とかになると物理なので私は知らないですが。
こうすればこう動く、ということは知っています。

その状態に作っていくことをオブジェクト指向です。

何かをすれば結果が返ってくる
でも細かい中身は知らない。

結局のところ作るっているのはその知らなくてもいい中身なのでアレなんですけども
でも状態がわかっりさえすればいいです。

Aボタンを押した、だからジャンプした
この流れさえわかってればゲームが遊べる。
その形にしていくというのがオブジェクト指向である、と

# まとめ

オブジェクト指向は正直1日で身についたら凄いと思います。
私なんてゆるゆるやって2年ぐらいかかってる気がしますし

→ボタンを押せば右に動く、
その中身でもまた色々とオブジェクト指向がー…となりますが
とりあえずのとっかかりとして、

音量ボタンを押せば音量が上がる、下がる、
中の配線がどうのこうのを知らなくても
私たちは生活ができている、

ものみたいな考え、オブジェクト指向はまさに現実になぞらえた考え方です。
まとめもまとめられてませんけど取り敢えず自分用として、ポストはしておきましょう。
芸術のためのプログラミング言語「Processing」

プログラミングは芸術だ！
芸術のためのプログラミング言語「Processing」！
![スクリーンショット 2019-06-22 18.15.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/379795/1575f7d9-39e0-ccfd-6abe-476edb24cb3c.png)

## Processing とは

Processingは、電子アートとビジュアルデザインのためのプログラミング言語です。
アーティストによるコンテンツ制作作業のために、詳細な設定を行う関数を極力排除し、
直感的にコードを書いていけるよう作られているのが特徴の１つです。

![スクリーンショット 2019-06-22 18.14.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/379795/0c8db125-bd69-f107-0954-db1e7f9d6c57.png)

また、書いたコードを実行すれば、視覚的な実行結果を即確認できるので、
初めてプログラミングを学習する方から熟練エンジニアまで、幅広い層の方が、
楽しんでコードを書くことができるのも大きな魅力です。


## Processing でできること

- プログラミングで、絵を描くことができます。
- IDE（統合開発環境）が無償で提供されていますので、環境構築は簡単、すぐにコードを書いて実行していけます。
- 点、線、円、四角形といった図形描画に役立つ命令が多く存在します。
- マウスやキーボード入力等のイベントドリブン型の処理を書けるので、アート表現だけでなくゲーム等を作成することも可能です。
- プログラムの実行結果は、pngなど画像出力が可能です。


## Processingのインストール（Mac）

まずは、Processingの公開サイトへアクセスしましょう。
https://processing.org/
![スクリーンショット 2019-06-22 16.55.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/379795/fa2ccc13-39e9-5533-0f1c-be6e559c0a8c.png)

TOPページ中央にある「Download Processing」をクリックすると、
OS別に分かれたIDEのダウンロードページへ遷移します。
現行の最新バージョンは、3.5.3です。

![スクリーンショット 2019-06-22 16.57.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/379795/31c8def8-86ca-a1a1-04ef-d4d4744da456.png)
Windows、Mac、Linuxの３種が用意されていますので、環境に応じたものをダウンロードします。

私はMacを利用していますので、ここではMac版をDLします。
ダウンロードしたファイルをダブルクリックして解凍、
あとはファイルをアプリケーションフォルダに入れればインストールは完了です。

Processingを実行してみましょう。
実行画面が開くことが確認できるかと思います。
![スクリーンショット 2019-06-22 17.56.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/379795/13168dc8-660c-4204-17fe-6a7d285ef717.png)

## サンプルコードを動かしてみよう

まずは何かコードを動かしてみましょう。
Processingは、サンプルコードが多数用意されていますので、
こちらを実行してみます。

メニューより「ファイル」→「サンプル」を選択します。
![スクリーンショット 2019-06-22 17.29.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/379795/417a8caa-77ed-8496-9f93-ed60f53396b9.png)

ここでは基本的な処理の書き方や、グラフィカルな動きが楽しめるデモコード等、
多数のコードが準備されています。
![スクリーンショット 2019-06-22 18.17.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/379795/a24f68dd-4f63-7767-ad91-0bc17dd10b43.png)

今回は「Demo」の１つ「DepthSort」を選択します。

これで「DepthSort」のコードがエディタ上に展開されました。
コードを実行してみます。

七色の三角形が円を描くように描画されるアニメーションが確認できました。
![スクリーンショット 2019-06-22 18.20.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/379795/2ea107dc-67f7-55a5-b2dd-731850c3e7d0.png)


既存のサンプルを一部書き換えたりしていくと、
実行結果も大きく変化していきます。トライ＆エラーを繰り返し、
Processingの理解を深めていくのも楽しさの１つです。


## 基礎から勉強してみたいなら

Processingの情報は、Gitやコミュニティ等でも広く発信されており、
情報量は比較的多い環境となっています。公式の情報は英語が多いと思います。

手元に書籍を置いて勉強したいなら、以下の書籍がおすすめです。

数学から創るジェネラティブアート - Processingで学ぶかたちのデザイン
https://gihyo.jp/book/2019/978-4-297-10463-4

コードを書く際に必要な数学的要素を、基礎から分かりやすく、
美しいビジュアルの実行結果と併せて解説している書籍です。

## まとめ

Processingは、誰でも簡単に環境を立てることができ、
かつ、直感的にコードを書いて実行していけるのが最大の魅力です。
まずはお手元の環境に、Processingを入れてみるところから始めてみませんか！
Scratchでクラウドリストを作ろう

#はじめに
初投稿です。
伝わりにくいところもあるかもしれませんがその場合はコメントでも書いていただけると嬉しいです。
また、今回作ったものは[ここで](https://scratch.mit.edu/projects/318172494/)公開しています。

#クラウドリストis何
Scratchには「クラウド変数」という画期的な変数が存在します(1作品最大10つまで作成可能)。
これは、変数の値がサーバーに保存され全てのユーザーで共有されるというものです(New Scratcherだと使えない)。
しかし、このクラウド変数は数値しか保存できず(ユーザーが勝手にチャットなどを作られると規制が難しいため)このままだと使い勝手が悪いです。
そのためにリスト(配列)を数字に変換しクラウド変数に保存すればクラウドでリストが使えるじゃないかということから生み出された技術？です。
今回はその初歩的な部分としてクラウド変数1つを用いたクラウドリストを制作します。

#クラウド変数の仕様
クラウドリストを作るためには、クラウド変数の仕様を知ることが重要ですので、表にまとめました。

||~2018/2|2018/2~2019/1|2019/1~|
|:-:|:-:|:-:|:--:|
|長さ(桁数)|10240|128|256|
|数の種類|16進数(0~F)|10進数(0~9)|10進数(0~9)|
|反映制限|なし※|なし※？|[100ms](https://github.com/LLK/scratch-gui/pull/3916)|
※あまりにも短期間に多く値を変えると反映されない

このように以前(~2018/2)に比べ制限が相当厳しくなっていることがわかります。
実際は、1作品で最大10つのクラウド変数を扱えるため桁数は単純に10倍になりますが、反映制限があるためあまり使いたくはないです(保存するときにデータが壊れる可能性があるため)。

#仕組みの説明
このクラウドリストではリスト→文字列(数字)、文字列(数字)→リストという2つの機能を実装しなければなりません。
ここで「符号化」という考えを用います。
簡単に言うと表のように、aを01, bを02, cを03, ...といったものが考えられます。

|符号化前|符号化後|
|:--:|:--:|
|a|01|
|b|02|
|c|03|
|d|04|
|...|...|

1桁の数の先頭に0をつける理由は "a" を`1`としてしまうと、"aa"は`11`となりアルファベットで11番目の "k" とどちらか判別できなくなるためです。"a"を`01`とすることで"aa"は`0101`となり符号化前に戻すことが出来ます。
これで文字列を数字の羅列に変換できますが、今回作るものは「リスト」であるためどこが要素の終わりかというものも符号化しなければなりません。
(例)![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/329204/f69b6924-34ad-ca67-3114-968fb0cb1cb6.png) → `010203040506`

例のようにしてしまうとリストに戻すときにabcdefのどこからが次の要素であるか判別できなくなるため要素の終わりには`00`を入れるようにします。

#実装
このクラウドリストには多くの実装方法があります。多くの人が作っているので「中を見る」のも良いと思います(残念ながら制限の変更や3.0のアップデートで壊れてしまったものも多い...)。
ここでは一例として説明します。
まず、リスト→文字列(数字)です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/329204/43b8368a-5732-053a-8a44-c5e8b87b9499.png)
解説すると、
1番外側のループが1要素ずつ進めて要素が変わったときに`00`を挟む
2番目のループがその要素内で1文字ずつ進めて文字を符号化したものをtempに保存
3番目のループが文字を符号化
最後にtempからクラウド変数に代入
という実装になっています。

次に、文字列(数字)→リストです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/329204/30a2e92c-27fb-a067-a159-c503db48ba43.png)
こちらも解説すると、
1, 最初にリストに空要素を追加して、`00`が来るまで最後の要素で文字を復号化する
2, `00`が来たらリストに空要素を追加する
という実装になっています。

#最後に
今回のクラウドリストは最も簡単？なものです。

実際に使ってみるとわかると思いますが、このクラウドリストには多くの問題があります。
例えば、
・1つのクラウド変数の限界である256桁に到達した後はデータが溢れてしまう
・大文字小文字に対応できない
・ループの回数が多すぎる
が挙げられますが、これらは全て解決可能です。
いろいろな人のクラウドリストを見て学んでいきましょう！

P.S. カスタムレポーターブロックまだですか？
Vue.jsバージョン3はこう変わるかもしれない

Vue.jsのRequest For Commentsが公開されました。
https://github.com/vuejs/rfcs/blob/function-apis/active-rfcs/0000-function-api.md

これらのアイディアはまだ「コメントを求める」段階であるため決定したわけではありませんが、Vue使いの方々は内容を知っておくべきでしょう。

# setupメソッド
今まで別々に分かれていたdataやwatch、methodsが全てsetupに集約されます。

```vuejs
<template>
  <div>
    <span>count is {{ count }}</span>
    <span>plusOne is {{ plusOne }}</span>
    <button @click="increment">count++</button>
  </div>
</template>

<script>
import { value, computed, watch, onMounted } from 'vue'

export default {
  setup() {
    // reactive state
    const count = value(0)
    // computed state
    const plusOne = computed(() => count.value + 1)
    // method
    const increment = () => { count.value++ }
    // watch
    watch(() => count.value * 2, val => {
      console.log(`count * 2 is ${val}`)
    })
    // lifecycle
    onMounted(() => {
      console.log(`mounted`)
    })
    // expose bindings on render context
    return {
      count,
      plusOne,
      increment
    }
  }
}
</script>
```

# なぜこんなことに？
Vueの良さはわかりやすさにありました。ReactやAngularに比べてどこで何をするかが分かり易かったため、特に初学者に対して敷居が低く好まれてきました。
この劇的な変化は分かりやすさという点において後退が見られます。

しかしこのsetupメソッドに全てを集約する記述によって、カプセル化を行うことができるようになります。
例えば、マウスの位置を扱う処理は次のようにuseMouse()の中にカプセル化できるようになるのです。

```vue
function useMouse() {
  const x = value(0)
  const y = value(0)
  const update = e => {
    x.value = e.pageX
    y.value = e.pageY
  }
  onMounted(() => {
    window.addEventListener('mousemove', update)
  })
  onUnmounted(() => {
    window.removeEventListener('mousemove', update)
  })
  return { x, y }
}

// in consuming component
const Component = {
  setup() {
    const { x, y } = useMouse()
    return { x, y }
  },
  template: `<div>{{ x }} {{ y }}</div>`
}
```

これは従来の記述と比較するとそのカプセル化を理解できます。
マウスの位置を取得するための処理やデータが、data,mounted,methodsとバラバラになっていました。コンポーネントが肥大化した時にスパゲティコードになりがちになっていました。

```vuejs
<template>
    <div>
        {{ x }} {{ y }}
    </div>
</template>

<script>
export default {
  data() {
    return {
      x: 0,
      y: 0,
    };
  },
  mounted() {
    window.addEventListener('mousemove', this.update);
  },
  beforeDestroy() {
    window.removeEventListener('mousemove', this.update);
  },
  methods: {
    update(e) {
      this.x = e.pageX;
      this.y = e.pageY;
    },
  },
};
</script>
```

# もっと
今までのVueはTypescriptの型推論を適切にサポートできていませんでした。しかし今回提案されたカプセル化によってVueにTypeScriptの恩恵が導入されます。
さらに、関数名と変数名は標準の最小化で短縮できるため（オブジェクト/クラスのメソッドとプロパティではできません）、コードはよりよく圧縮できるようになります。


# 最後に
今回のVueの変更の提案はかなりドラスティックで面白いと思いました。
SwiftUIでもそうでしたが、フロント側の技術はパラダイムシフトのように大きく変化するのでキャッチアップしていきたいです。
僕自身は今回のVueのこの変更の提案はすごく面白いと思いますし、さらなるVueの進化につながると思います。

参考 : https://dev.to/stefandorresteijn/vuejs-is-dead-long-live-vuejs-1g7f
Warning: Some installed formulae are not readable:   ghc@8.0: unknown version :lion

```
brew doctor
```
で
Warning: Some installed formulae are not readable:   ghc@8.0: unknown version :lion
と出たので

```
brew uninstall ghc@8.0
```
した。

すると、

```
brew doctor
```
で
Please note that these warnings are just used to help the Homebrew maintainers
with debugging if you file an issue. If everything you use Homebrew for is
working fine: please don't worry or file an issue; just ignore this. Thanks!

Warning: Your Xcode (10.1) is too outdated.
Please update to Xcode 10.2.1 (or delete it).
Xcode can be updated from the App Store.


Warning: Your Xcode (10.1) is outdated.
Please update to Xcode 10.2.1 (or delete it).
Xcode can be updated from the App Store.

となった。

# 次にやること

Xcodeのダウンロード。
Pythonで序数詞(自然数)

Pythonで序数詞，というと既にあちこちにあるが，とりあえず考えてみた．

- 1,2,3で終わる場合は，それぞれ,-st,-nd,-rd
- 11,12,13については，それぞれ11th,12th,13th
- それ以外は -th

というので，辞書ベースではこうなるか．

```python:ordinal.py
def ordinal(i):
    return str(i)+({1:"st",2:"nd",3:"rd"}.get(i if 14>i>10 else i % 10) or "th") 
```

もしくは，同じロジックだが，

```python:ordinal2.py
def ordinal(i):
    return str(i)+({1:"st", 2:"nd", 3:"rd"}.get((i%10)*(1-14>i>10)) or "th") 
```

これで，以下のようになる．

```python:testord.py
In [2]: [ordinal(i)  for i in range(0,32)] 
Out[2]: 
['0th',
 '1st',
 '2nd',
 '3rd',
 '4th',
   :
 '9th',
 '10th',
 '11th',
 '12th',
 '13th',
 '14th',
   :
 '20th',
 '21st',
 '22nd',
 '23rd',
 '24th',
   :
 '31st']
```
#Rails で has_many の association に対してネストしたハッシュを得る

こんな感じ。

```
Author.eager_load(:books).first.serializable_hash(include: :books)
```


# Original by Github issue

https://github.com/YumaInaura/YumaInaura/issues/2215








<!-- Update From Qiita API -->

# チャットメンバー募集


何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
HTML超入門：基礎知識とマークアップ

##はじめに
大学４年法学部法律学科のど文系です。
プログラミングはまったくの初心者ですが、訳あって新卒エンジニアとして採用されたので入社前に一から勉強しようかな、と
備忘録的な感じなので、間違ったところがあれば訂正してほしいです～！


プログラミングはじめるなら、ということでまずはHTML/CSS勉強します。
この二つに関しては「いちばんよくわかるHTML5＆CSS3デザイン　きちんと入門」という本で勉強しました。


##HTMLとは
HTMLはWebページを作成するためのコンピュータ言語。Webページの正体はHTMLタグを使って構成されている文書であり、これがブラウザで読み込まれることでWebページが表示される。
開始タグと終了タグでコンテンツを囲むのが基本的な書式で、これをぜんぶまとめて要素という。

##基礎知識とマークアップ
**・見出しを立てる`<h1>`**
記事の中には見出しが必要。ないと見づらい。`<h2>`から`<h6>`タグは重要度が低く、記事の一部を部分的に要約する。

```html
<h1>これは見出し１</h1>
<h2>これは見出し２</h2>
<h3>これは見出し３</h3>
```
これが
#これは見出し１
##これは見出し２
###これは見出し３
こんな感じになる


**・段落を作る`<P>`**

**・箇条書きを作る`<ul><li>`**
`<ul>と<li>`でマークアップすると、`<li>~</li>`で囲まれるテキストの先頭には自動的には自動的に「・」がつく

```html
<ul>
 <li>場所</li>
 <li>日時</li>
 <li>入場料</li>
</ul>
```
これが
・場所　
・日時
・入場料
こんな感じ

**・強調する**`<strong>`
テキストを太字にする場合には`<b>`タグを使用する。タグで囲むテキストが重要な場合には、`<strong>`を使用する。

```html
<strong>これは重要です</strong>
```
これは
**これは重要です**
こうですね～

**・すべてのHTMLに共通する基礎部分**

```html
<!DOCTYPE html>
<html lang="ja">
<head>
<mata charset="utf-8">
<mata name="description" content="ページの概要をここに書く">
<title>タイトル</title>
</head>
<body>
<article>
・・・
</article>
</body>
</html>
```

・`<!DOCTYPE html>`　どのタイプのHTMLで書かれてるかを示している
・`<html lang="ja">`　Webページで使用する主な言語を指定している
・`<meta charset="utf-8">`　文字コードを指定。現在はUTF=8が標準
・`<article>`　記事全体をこのタグでひとまとめにする

##最後に
HTMLの基礎をばーっと勉強しました。内容自体はそこまで難しくなかったけど、Qiitaに記事を書くほうが大変だった、、、難しい、使いこなすのに時間がかかりそう、、、
プログラミング完全初心者がChainerでディープラーニングを学んでみた

#環境
この記事では、Python3.6以上であることが前提です。
実行はGoogle Colaboratory というサービスを利用し、ブラウザ上で実行しています。
Chainerページ: [1.はじめに-ディープラーニング入門](https://tutorials.chainer.org/ja/01_Welcome_to_Chainer_Tutorial.html)
#学んだこと
はじめは`型(type)`の説明があり、次に`算術演算子(+,-,*,/)`を学びました。
`メゾット(method)`や`format()`、`list tuple dictionary`などもありました。
僕みたいな完全な初心者にもわかるように、一つ一つ丁寧に説明があり、とてもすすめやすかったです。
他にも`if文`や`for文`などpythonのほぼすべてを学ぶことができるので、プログラミングが全くわからない状態でディープラーニングをやってみたいというかたにおすすめです。