OmniAICreator/Qiita-1.07M huggingface dataset:
PCを交換してもらったので、開発できる環境を整える

# PC
windows 10 pro

# 拡張子を表示する
[Windows10 - ファイルの拡張子を表示/非表示にする](https://pc-karuma.net/windows-10-show-explorer-file-name-extension/)
ついでに隠しファイルも表示しました

# タスクバー調整
「タスクバーを固定する」のチェックを外す
タスクバーを左側に移動。
「タスクバーを固定する」にチェックを入れる
vscodeをタスクバーに追加する
Cortana、タスクビュー、windows linkワークスペースボタンをすべて非表示にする

# タスクバーに日時を表示する
[Windows10 タスクバーに日付表示が出ない場合、出るようにする方法。](https://blog.goo.ne.jp/hiros-pc/e/c960e585557112e921271e4b4453832a)
これをやっても出ない場合はタスクバーの横幅の問題なので、サイズを調整する

# 画面の明るさの自動調整
[f.lux](https://freesoft-100.com/review/flux.html)


# テキストエディタ
[visual studio code](https://azure.microsoft.com/ja-jp/products/visual-studio-code/)
「今すぐ無料でダウンロードする」からダウンロード。インストール

[Visual Studio Codeで日本語化する方法[Windows]](https://qiita.com/nanamesincos/items/5c48ff88a4eeef0a8631)

### vscodeの改行コードを\nにする

``` setting.json
"files.eol": "\n"
```


# git
[Git for Windows](https://gitforwindows.org/)

インストールの途中で改行コードについての質問があるので注意。
Checkout Windows-style, commit Unix-style line endingsは選択しないようにする

[Windowsでgitの改行コード設定（Git for Windows）](https://qiita.com/kouares/items/720d377c83cf75aea027)

### git bashをvscodeのターミナルとして使用する

``` setting.json
"terminal.integrated.shell.windows": "C:\\Program Files\\Git\\bin\\bash.exe"
```

### gitbashのbeep音をとめる
```
echo "set bell-style none" >> ~/.inputrc
```


### githubに鍵を登録する
[GitHubでssh接続する手順~公開鍵・秘密鍵の生成から~](https://qiita.com/shizuma/items/2b2f873a0034839e47ce)



### ユーザー情報登録

```
 git config --global user.name hogehoge
 git config --global user.email hogehoge@hogehoge.com
```

# php
[PHPのダウンロードとインストール - Windows環境](https://webkaru.net/php/windows-php-instal/)

[PATHを設定する](https://www.javadrive.jp/php/install/index3.html)

# composer
[Windows Installer]
(https://getcomposer.org/download/)

# その他
ブックマークはすべてgoogleのブックマークに移管
サーバーにssh接続できるかどうか確認。できなければ鍵の共有など
iOSプロジェクト新規作成時によくやること一覧

自身のプロジェクト生成時によくやることを記載した備忘録です。
毎回お世話になるサイトをまとめました。

# .gitignoreの作成
gitで管理したくないファイルやディレクトリを指定することができます。
ユーザ固有のファイル(xcuserstate)等ではじくファイルを指定することができます。
https://qiita.com/anqooqie/items/110957797b3d5280c44f

プロジェクトをgitにあげた後に作成するとキャッシュが残り反映されない場合があるため、
プロジェクト導入時に最初に追加するのがおすすめです。
あとから追加する場合は以下のサイトを参考にキャッシュの削除をするとgitignoreの内容が反映されます。
https://qiita.com/fuwamaki/items/3ed021163e50beab7154

# CocoaPodsの導入
iOSのライブラリ管理ツールです。高確率で使用することが多いです。
類似でCarthageというSwift製のライブラリ管理ツールもありますが、
今回はpodsについてのみです。
https://qiita.com/ShinokiRyosei/items/3090290cb72434852460

CocoaPodsのバージョン違いで予期せぬエラーが発生することも過去にあったため、
バージョンは開発チームで揃えておいた方が安心です。
任意のpodsバージョンのインストール/アンインストールは以下を参考にしています。
https://mushikago.com/i/?p=7298

CocoaPodsのファイルを編集する際にviコマンドも調べることが多いので、
以下のリンクにviコマンドについて記載されています。
https://qiita.com/pe-ta/items/0510bee10bcfd88afeee

# Podsを用いてRealmSwiftの導入
RealmSwiftをPodsで入れる方法は以下です。
https://dev.classmethod.jp/smartphone/realmswift-introduction/

シミュレータでRealmの内容を確認したいときは、
こちらのサイトを参考にすると便利です！
https://qiita.com/i_nak/items/5d6062333b205275b85b

# SwiftLintの導入
SwiftLintとは、Realmが開発しているSwiftのLintツールです。
Lintエラーの範囲は同プロジェクト内に配置する.swiftlint.ymlファイル内でカスタマイズできます。
導入方法は以下のサイト参照
https://qiita.com/OSR108/items/4b23b13bd23feada1921
エラーや警告が出た際は全ルールのまとめを書いてくれているサイトがあるので、
サイト内から原因を探して対処します。
https://qiita.com/uhooi/items/7f5d6cf2b240f60ba1ed

# AlamofireとSwiftyJSONの導入
APIの呼び出し処理を行う時によく使うのがAlamofireです。
podで追加し、簡単な構文で呼び出すことができるので便利です。
レスポンスで受け取ったJSONで何か処理を行いたい場合はSwiftyJSONも便利です。
ただ構造体への洗い替え等であればSwiftyJSONでごにょごにょやらなくても、
Codableで容易に実装が可能です。
http://kayakuguri.github.io/blog/2016/05/26/alamofire-swiftyjson/

# Generambaの導入
これは私も自力で導入したことは1度しかありません。
ただ使いこなすことができれば非常に便利なツールです。
テンプレートを用意することで、テンプレート通りのファイルを一気に生成することができます。
VIPERアーキテクチャのようにファイル生成数が必然的に
多くなってしまうようなものには特におすすめです。
https://qiita.com/negi0205/items/6853d43a91b58845b4eb

テンプレートファイルの編集方法は以下です。
https://qiita.com/tmyk110/items/de8f2aee315b47040c5e

最初にGeneramba導入する時に質問が全て英語でくるため、
最初に何をしているのかは少しわかりません。

## LicensePlistの導入
ライセンスの条件で表示が必須の場合がよくあると思います。これらの表示処理に便利なライブラリがLicensePlistです。<br>少し詰まったので別記事にまとめました。↓
https://qiita.com/misamisa/items/64e0723a6480d2ca97db
【rails】画像の向きを整える方法(ActiveStorage)

#はじめに
初学者がポートフォリオ作成でハマったことをメモします。
投稿した画像の上下が逆になるバグが発生した。
画像アップロードにはActiveStorageを使用しています。
##環境
Ruby 2.6.3 ,Rails 5.2.4

##方法
minimagickの設定で`auto_orient: true`を記述する。


```
= image_tag review.avatar.variant(combine_options:{resize:"300x300^",crop:"300x300+0+0",gravity: :center,  auto_orient: true}).processed
```

これでEXIF情報のOrientation属性(画像の向きを規定している)を変更してくれるみたいです。

##最後に
誰かのお役にたてれば幸いです。
間違えている部分があればコメントお願いいたします。

参考にした記事
https://tutorialmore.com/questions-2589404.htm
https://qiita.com/NaokiIshimura/items/a71cc118774e06d418c4
http://dqn.sakusakutto.jp/2009/02/jpegexiforientaion.html
Golang context.Value（） でKey周りを調べた にゃ


context.WithValue() の Key はどうなのか調べた奴
メンバーに変数がないときは気をつけよう・・・・ 構造体を切り替えればオケ

  （Qiitaに書くようなレベルなのだろうか・・・）

### サンプルコード

```golang:ctx.go
package main

import "context"

type (
	plainKey struct{}
	empty    struct{}
	key      struct{ s string }
	value    struct{ s string }
)

var (
	key1  = key{s: "k1"}
	key2  = key{s: "k2"}
	pKey1 = plainKey{}
	pKey2 = plainKey{}
	ekey  = empty{}
)

func main() {

	v1 := value{s: "one"}
	v2 := value{s: "two"}
	v3 := value{s: "three"}
	v4 := value{s: "four"}

	ctx := context.Background()

	ctx = context.WithValue(ctx, key1, v1)
	ctx = context.WithValue(ctx, key2, v2)
	println("Key1:", ctx.Value(key1).(value).s)
	println("Key2:", ctx.Value(key2).(value).s)

	ctx = context.WithValue(ctx, &key1, v3)
	ctx = context.WithValue(ctx, &key2, v4)
	println("Key3:", ctx.Value(&key1).(value).s)
	println("Key4:", ctx.Value(&key2).(value).s)

	v5 := value{s: "five"}
	v6 := value{s: "six"}

	ctx = context.WithValue(ctx, pKey1, v1)
	ctx = context.WithValue(ctx, pKey2, v2)
	ctx = context.WithValue(ctx, ekey, v5)
	println("pKey1:", ctx.Value(pKey1).(value).s)
	println("pKey2:", ctx.Value(pKey2).(value).s)
	println("ekey5:", ctx.Value(ekey).(value).s)

	ctx = context.WithValue(ctx, &pKey1, v3)
	ctx = context.WithValue(ctx, &pKey2, v4)
	ctx = context.WithValue(ctx, ekey, v6)
	println("pKey3:", ctx.Value(&pKey1).(value).s)
	println("pKey4:", ctx.Value(&pKey2).(value).s)
	println("ekey6:", ctx.Value(ekey).(value).s)
}
```

### 実行

```bash
go run ctx.go 
Key1: one
Key2: two
Key3: three
Key4: four
pKey1: two
pKey2: two
ekey5: five
pKey3: four
pKey4: four
ekey6: six
```
[Unity] DOTween を使いまわしたい君へ

## 最初に

「[DOTween のシーケンスを使いまわしたい君へ](https://qiita.com/sijiaoh/items/da7cb4623c3d96fdc1ba)」と内容の９割がかぶっているので、説明を見たくばそちらをどうぞ。

## 結論

これを足す。

```cs
.Pause()
.SetAutoKill(false)
.SetLink(gameObject);
```

実行時はこれ。

```cs
tweener.Restart();
```

毎回書くのしんどいので、関数にしましょう。

```cs
using DG.Tweening;
using UnityEngine;

public static class Utilities {
    public static void MakeTweenerReusable(Tweener tweener, GameObject linkTarget) {
        tweener.Pause().SetAutoKill(false).SetLink(linkTarget);
    }
}
```

## サンプル

```cs
using DG.Tweening;
using UnityEngine;

public class Ahan : MonoBehaviour {
    Tweener tweener;

    private void Start() {
        tweener = transform.DOScaleX(0f, 1f);
        Utilities.MakeTweenerReusable(tweener, gameObject);
    }

    private void Update() {
        if (Input.GetButtonDown("Fire1")) {
            tweener.Restart();
        }
        if (Input.GetButtonDown("Fire2")) {
            tweener.Restart();
        }
    }
}
```
Kotlin入門:データクラス


##データクラス

実際にアプリを開発する場合、データ（プロパティ）のみを扱うクラスが存在します。
これをデータクラスと言います。

データクラスは以下の条件を満たしていなければいけません。
・`data`キーワードをつけること
・プライマリコンストラクターが１つ以上の引数を持っていること
・コンストラクターの引数が`var`または`val`で修飾すること

また`abstract`、`open`、`sealed`、`inner`キーワードは使用できません

データクラスを定義することで、自動的に以下のメソッドが準備されます。
`equals`、`hashCode`、`toString`、`componentN`、`copy`


###`equals`メソッド

「==」演算子によって内部的に呼び出されるメソッドです。
データクラスでは、プライマリコンストラクターで定義されたプロパティが等しい場合、
オブジェクト同士が同値であるとみなします。

入力例:

```Kotlin
data class Book(var title:String = ""){
    var price = 0
}
fun main(){
    val book1 = Book("Kotlin入門")
    book1.price = 1000
    val book2 = Book("Kotlin入門")
    book2.price = 1500
    println(book1 == book2)
}
```

実行結果は以下の通りです。

```Kotlin
true
```

###`toString`メソッド

インスタンスの文字列表現が要求された時に、呼び出されるメソッドです。
「クラス名（プロパティ=値）」の形式でオブジェクトの内容を出力します。

```Kotlin
data class Book(var title:String = ""){
    var price = 0
}
fun main(){
    val book1 = Book("Kotlin入門")
    book1.price = 1000
    println(book1)
}
```

実行結果は以下の通りです。

```Kotlin
Book(title=Kotlin入門)
```

###`conponentN`メソッド

分割代入をした時に呼び出されるメソッドです。

```Kotlin
data class Book(var title:String = "",var price:Int= 0){
}
fun main(){
    val book1 = Book("Kotlin入門",1000)
    val(title,price) = book1
    println(title)
}
```
実行結果は以下の通りです。

```Kotlin
Kotlin入門
```

###`copy`メソッド

特定のプロパティだけを変更してオブジェクトの複製を生成できます。

```Kotlin
data class Book(var title:String = "",var price:Int= 0){
}
fun main(){
    val book1 = Book("Kotlin入門",1000)
    val copied = book1.copy(title="Kotlin上級")
    println(copied)
}
```
実行結果は以下の通りです。

```Kotlin
Book(title=Kotlin上級, price=1000)
```
いいねしてくれた人の確認方法

#はじめに
いいねしてくれた方に感謝したい！！！
こちらもいいねしてくれた方の記事を見たい！
という欲望の塊の満たし方👹。

#確認方法
記事のURLの最後に”likers/”と付ける。

```bash
# ex.) [記事のURL]/likers/
https://qiita.com/Hexans/items/12c6483bbce90b470a69/likers/
```

以上のリンクは[こちら](https://qiita.com/Hexans/items/12c6483bbce90b470a69/likers/)。
みなさんありがとうございます!!
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/587891/4874118c-6b99-1376-7c4b-738064cc4f86.png)

#成果
欲望を満たした。
【AWS】構成図作成サービス一覧

#構成図作成をサポートしてくれるサービスについてまとめてみました。
・Amazon Cloud Formationデザイナー
・Cloud Craft
・Hava
・Draw.io

#Amazon Cloud Formationデザイナー（無料？）
・AWS公式が出しているサービス。
・Cloud FormationというAmazonのインフラサービスの構成、デプロイをコード化して自動化するサービスの付加機能で現在稼働中のAWS環境を図示してくれる便利なサービス。
![Cloud Formation.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/588101/48a6354d-41c4-38db-2ee3-2daf37f180b0.png)
>参考サイト
[CloudFormationデザイナーをはじめよう|Developers.IO](https://dev.classmethod.jp/cloud/aws/cfndesigner/)

#Cloud Craft（無料版、有料版：月49USドル）
・3rd partyが出しているAWSの機能を3Dに可視化できる機能。
・AWSから構成をインポートして、自動的に図を作り上げる機能。
<img width="512" alt="Cloud Craft.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/588101/7a6b86ff-3b8a-a805-fe50-da56babf60bb.png">
>参考サイト
[【AWS】構成図作成サービス Cloud Craftを使ってみた！](https://go-mount.hatenablog.com/entry/2018/10/26/134000)

#Hava（登録から2週間無料→有料版：$39～$1,999（月額））
・Cloud Craft同様、3rd partyのサービス。
・Cloud Craftは3Dで表示してくれるが、こちらは2Dで表示してくれる！（AWS公式の描画に近い印象）
・AWSから構成のインポート、自動生成もサポートしてくれる。
※対応しているAWSサービスは以下のとおり、数はそこまで多くない様子。
　・VPC(Subnet, Route Table, Security Group)
　・ELB
　・EC2
　・RDS
　・Elasticache
![Hava.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/588101/d0aaeb88-2cc7-5a76-565c-df96107d96e5.png)
>参考サイト
[「Hava」でAWSのシステム構成図を自動生成する|Developers.IO](https://dev.classmethod.jp/cloud/aws/generate-aws-architecture-diagrams-automatically-with-hava/)

#Draw.io（無料！）
・Draw.io にアクセスするだけで利用できる無料のフローチャート作成ツール。
・Visio に近い操作感。
<img width="320" alt="drawio_template-640x470.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/588101/904e103a-acf0-2175-1e6c-25732145045e.png">
>参考サイト
[Draw.io でフローチャートを書いてみよう！|Developers.IO](https://dev.classmethod.jp/etc/draw-io/)
Python3エンジニア認定基礎試験を受験して

#Pythonエンジニア認定基礎試験

### Pythonエンジニア認定基礎試験について

様々なqiitaの記事でも説明されているので、割愛します。公式サイトのリンクを貼っておきます。

[Pythonエンジニア認定基礎試験](https://www.pythonic-exam.com/exam)

Python未経験者からすると参考にはならないかもしれないですが、試験や自分の勉強について書こうと思います。

# 経歴

著者は現在（2019年度現在）2年目の社会人で、1年目から業務で初めてPythonを触れてから今まで2年近く触れています。Pythonは業務で調べながら、独学で学びました。大学時代にプログラミングには触れていたので、苦ではなかったです。
その大学時代はC言語やJavaを授業で勉強していましたが、正直、大学の授業で学んだことはほとんど業務で役に立たないと1年目から実感しました。（小並感）

# 受験経緯

受験経緯は結論から申しますと、汚い話ですが、お金が欲しかったからです。著者の会社では資格の報奨金がありましたので、受けようと思いました。__お金は裏切りません。__

# 受験までの勉強
1年以上Pythonを触っているからノー勉で行くほど、度胸はありませんでした。
まずは、qiitaの記事等で勉強の仕方を調べました。目に着いたのは`模擬試験`。そして無料。
[模擬試験](https://exam.diveintocode.jp/exam)
やってみたら、1000点満点中の450点...。ちゃんと勉強しようと決意した瞬間でした。

## 勉強法

まずは、模擬試験の間違えた問題の答えを見て、回答について理解する。できなければ、とにかくわかるまでググる。全部できたら、また模擬試験をする。間違えを理解するを満点とるまで、やります。
ここまで来ると答えだけ見ただけでも、回答がわかります。過学習ですね。
でも試験で、もしかしたら同じ問題が出るかもしれないと思ったので、満点とるまでやりました。
最後に、参考教材のドキュメントを読みました。試験の出題範囲は`オライリー・ジャパン「Pythonチュートリアル 第3版」`の掲載内容なので、読みました。web上で読むことができます。
[Pythonチュートリアル](https://docs.python.jp/3.5/tutorial/index.html)
とりあえず、全部読んで、読みながら疑問に思ったところは実際に手を動かして、動きを確認しました。

#### 未経験者
未経験者は教材を読んでから、模擬試験を受けて、もう一度教材を読むのがいいのではないかと思います。

## 受験して
結果から言うと合格しました。1000点満点中850点でした。なんとかなりました。
個人的には受けて良かったと思います。試験自体は30分以上余りました。簡単な問題が多かったと思います。これは別に覚えてなくてもいいだろうという問題もありました。
受けて良かったと思った理由は、自分の基礎力の無さを自覚できたことです。特に自分が知らなかったメソッドが実際には便利なものがあったりして、基礎の大切さを改めて実感しました。

# まとめ
この試験自体は模擬試験とドキュメントを読んでおけば、合格できると思います。
基礎はしっかり固めましょう。
poetryでSolverProblemError

## 1. 環境

```shell
(.venv) user$ python --version
Python 3.7.6
(.venv) user$ poetry -V
Poetry version 1.0.3
```

## 2. 現象
Cythonをインストールする時に以下のような`SolverProblemError`が発生．

```shell
(.venv) user$ poetry install
Installing dependencies from lock file
Warning: The lock file is not up to date with the latest changes in pyproject.toml. You may be getting outdated dependencies. Run update to update them.

[SolverProblemError]
Because annotator depends on Cython (0.29.15) which doesn't match any versions, version solving failed.
```

Cythonは`0.29.15`で指定していた．

```pyproject.toml
...
[tool.poetry.dependencies]
Cython = "0.29.15"
...
```

## 3. 解決策
`poetry add`ならいける．

```shell
(.venv) user$ poetry add Cython
Using version ^0.29.15 for Cython

Updating dependencies
Resolving dependencies... (0.4s)


Package operations: 1 install, 0 updates, 0 removals

  - Installing cython (0.29.15)
```

`poetry add`だと自動的にバージョンを`^`で指定する．

```pyproject.toml
...
[tool.poetry.dependencies]
Cython = "^0.29.15"
...
```

どうやらこれが必要だった模様．

`Cython=0.29.15`はpypiにもあるし，[ドキュメント](https://python-poetry.org/docs/versions/#caret-requirements)
によるとこの方法で指定すると`>= 0.29.15 < 1.0.0`になるはずなので`0.29.15`指定でも良さそうなものだが．．．


ちなみに`add`じゃなくても`Cython = "^0.29.15"`で指定して`install`でもいける．

```shell
(.venv) user$ poetry install
Installing dependencies from lock file

Package operations: 1 install, 0 updates, 0 removals

  - Installing cython (0.29.15)
```
Databricks Community Edition で Notebook を立ち上げる

## はじめに
**Databricks** は、特に海外で破竹の勢いを見せる**データ分析基盤**です。

- データ分析のための統合プラットフォーム
- 2000 以上のグローバル企業がビッグデータおよび機械学習パイプラインの設計に活用
- 2020 Gartner Magic Quadrant で Leader に指名 (データサイエンス及び機械学習プラットフォーム分野)
- Apache Spark、Delta Lake、MLflow の開発者が作っている


実ビジネスで利用するのであればアーキテクチャ構築や権限設計が必須ですが、オープンデータソースでまずは使用感を試したい方向けに無償プランが用意されています。有償版と無償版の違いは以下の通り (2020年2月時点)

![1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/363781/d31aa439-2684-6766-7d48-cf9ff60ebaa3.jpeg)

本稿では無償版である **Databricks Community Edition** の登録から Notebook を立ち上げるまでの手順を示します。

## アカウント作成
[Try Databricks](https://databricks.com/try-databricks) にアクセスして、GET STARTED をクリック
![2020-02-25_13h31_13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/363781/0985fe17-4f2e-56f7-6a1a-ab7d6d42cef2.png)

全ての項目を入力し、 Sign Up をクリック
![2020-02-25_13h35_01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/363781/9334a3dc-627a-c77e-537b-13b5d76da989.png)

しばらくするとこちらの画面に遷移します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/363781/c4eb9c9e-565b-d23a-5748-61ab8a0606c8.png)

メアドに届いたメールのリンクに遷移し、パスワードを設定します(初回登録でも Reset Password になるようです)。
![2020-02-25_13h39_31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/363781/60db20cf-6eee-88a3-52c7-9232d214cae4.png)

これで完了。すぐにコンソール画面が表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/363781/07fb67a1-dc59-88cb-3deb-cfba703bc226.png)

## クラスタの作成
Home 画面より、New Cluster をクリック
![2020-02-25_13h44_13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/363781/c0045032-732e-d2ed-a06b-381ab83056dd.png)

Community Edition では Driver クラスタのみ。 Cluster Name は任意で設定します。Runtime Version については、既存アーキテクチャやスクリプトとの兼ね合いを検討する必要がないのであれば、デフォルト値で良いでしょう(2020年2月25日 時点では 6.2)。
インスタンスは us-west に立ち上がるようです。どれかを選択して Create Cluster をクリック。
![2020-02-25_13h49_41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/363781/6a164279-5495-9af4-a88e-0e8f07881968.png)

ちょっと待つとこちらのアイコンが緑になります。これで Cluster の準備完了です
![2020-02-25_13h54_19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/363781/3f7300f5-0ac0-ebf8-3244-00079e60dfc1.png)

## Notebook の作成
トップ画面から New Notebook をクリックし、名称を任意で入力します。アカウントを作成したばかりであれば、先ほど作成したクラスタが選択されているはずです。Create をクリック。
![2020-02-25_13h56_17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/363781/ba35acf7-e883-38d2-0ded-27ff0a82dfef.png)

すぐに Notebook の画面が出てきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/363781/fc1ebe44-bf55-8ef6-96fd-41392c7bff9b.png)


## さいごに
一定規模以上のデータを保持していて、その解析に Spark 使っているのであれば、現時点では **Databricks 一択**になるかと思います。普段 Jupyter Notebook で分析をしている方は触っておくだけでも損はないはず。

## 参考リンク
[Databricks](https://help.databricks.com/s/?_ga=2.129907086.345809416.1582598786-1231486093.1560830909)
VScode 競プロ用スニペット(C++) 

#競技プログラミング用VScodeスニペット
CodeForces,AtCoderに参加するときによく使うスニペットを置いておきます。
(ちょくちょくどう書くのか忘れることがあったので...)

```
{
	// Place your snippets for cpp here. Each snippet is defined under a snippet name and has a prefix, body and 
	// description. The prefix is what is used to trigger the snippet and the body will be expanded and inserted. Possible variables are:
	// $1, $2 for tab stops, $0 for the final cursor position, and ${1:label}, ${2:another} for placeholders. Placeholders with the 
	// same ids are connected.
	// Example:
	"Print to console": {
		"prefix": "cpptemplate",
		"body": [
			"/**",
			"*    author:  Dooloper",
			"*    created: $CURRENT_DATE.$CURRENT_MONTH.$CURRENT_YEAR $CURRENT_HOUR:$CURRENT_MINUTE:$CURRENT_SECOND",       
			"**/",
			"",
			"#include <bits/stdc++.h>",
			"",
			"using namespace std;",
			"",
			"int main() {",
			"	cin.tie(0);",
			"	ios_base::sync_with_stdio(false);",
			"",
			"	return 0;",
			"}"
		],
		"description": "cpp_template"
	}
}
```
（一応設定方法も書いておきます！※言語設定が英語ですが日本語でも全く同じです）

VScode部分
File->Preferences->UserSnippets->cpp

![snipet5.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/374133/a4eb2ece-789e-dff9-f3b3-0fed163b036e.gif)


上のように設定して、C++用のファイルを作成します。
そこで、prefix部分に書かれた文字を打ち込むとスニペットが呼び出されます。

![snipet3.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/374133/c0afc8ad-9ba6-1145-6137-4cde43781d9b.gif)

個人的には、時間と日付部分を忘れてしまう部分なので、スニペットを用意できると楽です。
完成は以下みたいな感じ...

![VScodeスニペット.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/374133/acd04090-bc7f-327f-aed2-faee04e21111.png)

もっと、様々な部品を細かく設定できるので結構楽しいです！
C++だけでなく、様々な言語で活用できるので是非
MacでVSCodeを使ってC言語のデバッグする方法

## はじめに

Macでのみ動作確認済みです。
コンパイルして、デバッグが終了したときに、作成したファイルを消去するように設定しています。

## ファイルを作成する

```terminal
mkdir .vscode && \
touch .vscode/tasks.json && \
touch .vscode/launch.json
```

## 拡張機能 CodeLLDBを入れる

CodeLLDB - Visual Studio Marketplace
https://marketplace.visualstudio.com/items?itemName=vadimcn.vscode-lldb

## ファイルの編集
```tasks.json
{
	"version": "2.0.0",
	"tasks": [
		{
			"type": "shell",
			"label": "c_build",
			"command": "gcc",
			"args": [
				"-g",
				"${file}",
			],
			"group": "build", 
			"presentation": {
				"reveal": "never"
			}
		},
		{
			"type": "shell",
			"label": "rm_file",
			"command": "rm",
			"args": [
				"-rf",
				"a.out",
				"a.out.dSYM",
			],
			"group": "build",
			"presentation": {
				"reveal": "never"
			}

		}
	]
}
```

```launch.json
{
	"version": "0.2.0",
	"configurations": [
		{
			"name": "c_debug",
			"type": "lldb",
			"request": "launch",
			"program": "${fileDirname}/a.out",
			"args": [""],
			"cwd": "${fileDirname}",
			"preLaunchTask": "c_build",
			"postDebugTask": "rm_file"
		}
	]
}
```

## コンパイル方法

- ⌘ + Shift + b
- F5

## デバッグ
ブレークポイントを設定してから
メニューの「デバッグ」から「デバッグの開始」でデバッグがスタートします。

## 参考

tasks.jsonの設定について詳しく
[Tasks in Visual Studio Code](https://code.visualstudio.com/docs/editor/tasks)

launch.jsonの設定について詳しく
[Debugging in Visual Studio Code](https://code.visualstudio.com/Docs/editor/debugging)
【Swift】stride()を使ってループを逆に回したり、増分を任意の値にしたりしよう

stride()についての覚書です。
なんとなく使っていたので、改めてちゃんと調べました。

# ループを逆に回したい！！！！！！！
```swift
for i in stride(from: 10, to: 0, by: -1) {
    print("countdown:", i)
}

/* 出力
countdown: 10
countdown: 9
countdown: 8
countdown: 7
countdown: 6
countdown: 5
countdown: 4
countdown: 3
countdown: 2
countdown: 1 //0は出力しない
*/
```

後述しますが、stride(from:**to:**by:)だと終了条件に指定した数は含まれません。
stride(from:**through:**by:)を使うと、0まで出せます。

# 増分を任意の値にしたい
```swift
for i in stride(from: 0, to: 30, by: 3) {
    print("3の倍数のときだけ出力します……:", i)
}

/* 出力
3の倍数のときだけ出力します……: 0
3の倍数のときだけ出力します……: 3
3の倍数のときだけ出力します……: 6
3の倍数のときだけ出力します……: 9
3の倍数のときだけ出力します……: 12
3の倍数のときだけ出力します……: 15
3の倍数のときだけ出力します……: 18
3の倍数のときだけ出力します……: 21
3の倍数のときだけ出力します……: 24
3の倍数のときだけ出力します……: 27
*/
```

# toとthroughの違い
stride()を使うと、StrideTo/StrideThroughという見慣れないクラスを返します。
イメージ的にはStrideToがS..<Eで、StrideThroughがS...Eです。
ただRangeオブジェクトと違って、Strideableなオブジェクトは増分情報を持っているので、クラスとして完全に別モノとして言語設計されているみたいです。

StrideTo/StrideThroughはそれぞれイニシャライザがなく、stride()メソッドを呼び出してインスタンス化するように、とのことです。

また一つSwiftでできることが増えました😄
よかったですね。

# 公式
[`stride(from:to:by:)`](https://developer.apple.com/documentation/swift/1641347-stride)
[`stride(from:through:by:)`](https://developer.apple.com/documentation/swift/1641185-stride)
OpenTrackを使用したお手軽ヘッドトラッキング

# はじめに
TrackIRを使うと2万円近くかかるヘッドトラッキングを使用してのゲーム内視点操作ですが、OpenTrackと2千円くらいのウェブカメラを使用してお手軽に実現することができます。
またArucoマーカーを使用するので、LEDを使う方法のように複雑な形状の台座やカメラのIRフィルタを外す改造などをする必要がありません。10分くらいあれば作れるお手軽さです。

- 用意するもの
- 簡単な工作
- 設定
- 結果

と紹介していきます

# 用意するもの
### opentrack
これがないと始まりません。
[ここ](https://github.com/opentrack/opentrack/releases)から落としてきましょう。
### ウェブカメラ
https://www.elecom.co.jp/products/UCAM-C310FBBK.html
近くの電気屋さんで2000円ほどで置いてあったELECOMのカメラを使いました。理想は60fpsで撮影できるカメラです。解像度は720pあれば問題ないでしょう。
### 印刷用紙とカッター
これでマーカーを作ります
### 帽子
Arucoマーカーを貼り付けます

# マーカーを作る
OpentrackのgithubにあるAruco[マーカーの画像](https://github.com/opentrack/opentrack/blob/unstable/contrib/aruco/test3.png)をダウンロードして、適当なサイズで紙に印刷します。プリンタが無い人はコンビニ印刷、コンビニもそばに無い人は手書きで頑張ってください。適当なダンボールか厚紙に貼り付けてマーカーの完成です。自分はウェブカメラが入っていた箱に貼り付けました。
最後に帽子に貼り付けて準備完了です。
![ERl81GoU8AAItWn.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/361966/09497125-1f9f-effe-06ac-2211a1681a47.jpeg)

# 設定
ウェブカメラをパソコンに接続してカメラの初期設定を終えたらOpentrackを起動します。

設定欄のInputをArucoにします。
![キャプチャ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/361966/615629b3-44d1-ced2-c354-023ad3ac4e28.png)

Startを押してウェブカメラからの映像がOpentrackで確認できたら、マーカー付きの帽子をかぶります。

このように、認識されるはずです
![キャプチャ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/361966/da1abcb2-d5af-c2d9-1dd3-119e756140e1.png)

マーカーに枠が描画されて、右のタコが動いたら成功です。Mappingの欄で入力のカーブをお好みに設定しましょう。デフォルトでは1:1なので後ろを向けません。おすすめは30°くらいで後ろが向けるようにして、指数関数な感じに出力が180°に向かうようなカーブです。

# 結果
予想よりもしっかり動いてくれました、60fpsで映像が出力できるウェブカメラを用意すれば、TrackIR並の動作が期待できそうです。
[動画リンク](https://www.youtube.com/watch?v=hRl67WED0FM&feature=youtu.be)
![キャプチャ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/361966/575c6013-d06d-a1be-9f38-ad30e19ac7c7.png)

#まとめ
Arucoマーカーと安価なウェブカメラを使用することで、フライトシミュレータ用のヘッドトラッキングを容易に行うことができました。
LEDのマーカーを使用する方法では、LED用の回路を作成したり、カメラ側の改造が必要だったりと手を出しにくい部分がありましたが、Arucoマーカーを使用することで工作の難易度が大幅に低下しました。
CircleCIでRubocopの実行時間短縮の方法(--parallel)

# はじめに
CI上で約1700filesに対してrubocopを実行すると約3分もの時間がかかっていた。
`--parallel`を使うことでrubocopの実行時間を約1分に短縮が可能であった。

# 構成前提
* rails (5.2.3)
* rspec (3.9.0)
* rubocop (0.78.0)
* rubocop-rspec (1.37.1)
* CircleCI (2.1)
  * Resources 2CPU/4096MB

# 設定例（抜粋）
```yml:.circleci/config.yml
rubocop:
    executor: ruby
    steps:
      - attach_workspace:
          at: ~/
      - run:
          name: Rubocop
          command: bundle exec rubocop --parallel
```

[docs.rubocop.org](https://docs.rubocop.org/en/stable/basic_usage/#command-line-flags)

# 効果
## `--parallel`を使う前
![スクリーンショット 2020-02-25 14.04.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148185/101b03d9-dec7-7298-f0d3-156f32aa4fd1.png)

## `--parallel`を使った場合
![スクリーンショット 2020-02-25 14.05.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148185/9f3c5ffc-cf85-021b-eb1e-52f2b7ea3d86.png)
【Wordpress】繰り返しフィールドでコンテンツを表示させる

# ACFの繰り返しフィールドでコンテンツを表示するには
なお、当記事では以下のように各々命名するとします

フィールド名：
details

サブフィールド：
A.画像（ここではimgと名付ける）
B.タイトル（ここではtitleと名付ける）
C.詳細ページへのURL（ここではpage_urlと名付ける）

## 1.まずフィールド名からフィールド内のコンテンツを取得します

```single:single.php（例）
<?php
  $details = get_field('details');
?>
```

## 2.次に各サブフィールドコンテンツを変数に代入します

```single:single.php
<?php
      foreach ($details as $detail) {
        $img=$detail['img'];
        $title=$detail['title'];
        $page_url=$detail['page_url'];
?>
```

# 3.それぞれ埋め込みたい先に変数を使ってphpを記述します

```single:single.php
Ex)  <a href="<?php echo $page_url; ?>">参照したいリンクのページの概要</a>
```

# 4.Foreach文の終了宣言をします

```single:single.php
<?php 
}
?>
```
COTOHA でキーワードの抽出 (Golang)

[COTOHA API Portal](https://api.ce-cotoha.com/contents/index.html) の使用例です。

フォルダー構造

```text
$ tree -a
.
├── akai_rousoku.txt
├── .env
├── get_config.go
├── get_token.go
└── key_word.go
```

```go:key_word.go
// ---------------------------------------------------------------
//
//	key_word.go
//
//					Feb/25/2020
// ---------------------------------------------------------------
package main

import (
	"fmt"
	"os"
	"encoding/json"
	"net/http"
	"strings"
	"io/ioutil"
)

// ---------------------------------------------------------------
func key_word_proc(config map[string]interface{},doc string) {
	out_filename := "out01.json"
//	fmt.Printf("%s\n",doc)

	data := make (map[string]interface{})
	data["document"] = doc
	data["type"] = "default"
	str_json, _ := json.Marshal(data)
//	fmt.Printf("%s\n",str_json)

	url_base := config["url_base"]
	fmt.Printf("%s\n",url_base)
	url_target := url_base.(string) + "v1/keyword"
	fmt.Printf("%s\n",url_target)

	req, _ := http.NewRequest("POST", url_target, strings.NewReader(string(str_json)))

	req.Header.Set("Content-Type","application/json") 
	req.Header.Set("Authorization", "Bearer " + config["access_token"].(string))

	client := new(http.Client)
	resp, error := client.Do(req)
	if error != nil {
		fmt.Println("*** error *** client.Do ***")
		fmt.Println("Request error:", error)
		}

	bb, err := ioutil.ReadAll(resp.Body)
	if err == nil {
		ioutil.WriteFile (out_filename,bb,0666)

		var unit_aa map[string]interface{}
		json.Unmarshal ([]byte(string(bb)), &unit_aa)
		fmt.Printf("len(unit_aa) = %d\n", len(unit_aa))
		unit_bb := unit_aa["result"]
		fmt.Println(unit_bb)
		}	


}

// ---------------------------------------------------------------
func main() {

	fmt.Fprintf (os.Stderr,"*** 開始 ***\n")

	file_in := os.Args[1]
	fmt.Printf ("%s\n",file_in)
	buff,_ := ioutil.ReadFile (file_in)
	doc := string(buff)

	config := get_config_proc ()

	access_token := get_token_proc (config)

	config["access_token"] = access_token

	fmt.Printf("%s\n",config["access_token"])

//	sentence := "特急はくたかで富山に向かいます。それから、金沢に行って、兼六園に行きます。"

	key_word_proc(config,doc)

	fmt.Fprintf (os.Stderr,"*** 終了 ***\n")
}

// ---------------------------------------------------------------
```

get_config.go get_token.go はこちら
[COTOHA API で構文解析 (Golang)](https://qiita.com/ekzemplaro/items/18d4893e0177abcd1ff7)

実行コマンド

```bash
go run key_word.go get_config.go get_token.go akai_rousoku.txt
```

次のJSONファイルが作成されます。

```json:out01.json
{
  "result" : [ {
    "form" : "猿",
    "score" : 135.52966
  }, {
    "form" : "蝋燭",
    "score" : 83.9601
  }, {
    "form" : "花火",
    "score" : 78.08584
  }, {
    "form" : "亀",
    "score" : 43.078
  }, {
    "form" : "火",
    "score" : 42.81965
  } ],
  "status" : 0,
  "message" : ""
}
```
ruby-build で Homebrew の openssl@1.1 を使う (fish shell の場合)

結論をお急ぎの方は末尾をご覧くださいませ。

## 背景

2019年の暮れ頃から、ruby-build (rbenv install) で Ruby をインストールする際、Homebrew でインストールしている OpenSSL が使用されず、ダウンロード＆ビルドされるようになりました。

```text
$ rbenv install 2.6.4
                                                                                            
Downloading openssl-1.1.1d.tar.gz...
-> https://dqw8nmjcqpjn7.cloudfront.net/1e3a91bc1f9dfce01af26026f856e064eab4c8ee0a8f457b5ae30b40b8b711f2
Installing openssl-1.1.1d...
Installed openssl-1.1.1d to /Users/foo/.rbenv/versions/2.6.4

Downloading ruby-2.6.4.tar.bz2...
-> https://cache.ruby-lang.org/pub/ruby/2.6/ruby-2.6.4.tar.bz2
Installing ruby-2.6.4...
ruby-build: using readline from homebrew
Installed ruby-2.6.4 to /Users/foo/.rbenv/versions/2.6.4
```

詳細はこちらの PR にある通り：
[Don’t look for Homebrew openssl by gfguthrie · Pull Request #1375 · rbenv/ruby-build](https://github.com/rbenv/ruby-build/pull/1375)

互換性のないバージョンがインストールされているかもしれないし、ユーザーがどのバージョンをインストールしているかわかっていないかもしれないし、それらをいちいちケアするのが大変だということでしょうか。

一方で、上級者は `RUBY_CONFIGURE_OPTS="--with-openssl-dir=/my-openssl-directory"` オプションを指定することで ruby-build がインストールする OpenSSL を使わないようにすることもできる、と。

個別に OpenSSL がインストールされるのも別に悪くはないのですが、いちいちダウンロードしてビルドするのもなんだし、ストレージもあまり余裕がないので、どちらかというと Homebrew でインストールした OpenSSL を使いたい。

## RUBY_CONFIGURE_OPTS 変数の設定

Homebrew で ruby-build をインストール/アップグレードした際にも、Homebrew の OpenSSL をリンクしたい場合は `RUBY_CONFIGURE_OPTS` 環境変数を設定せよという補足説明が表示されますが

```text
==> Caveats
ruby-build installs a non-Homebrew OpenSSL for each Ruby version installed and these are never upgraded.

To link Rubies to Homebrew's OpenSSL 1.1 (which is upgraded) add the following
to your ~/.config/fish/config.fish:
  export RUBY_CONFIGURE_OPTS="--with-openssl-dir=$(brew --prefix openssl@1.1)"

Note: this may interfere with building old versions of Ruby (e.g <2.4) that use
OpenSSL <1.1.
```

いかんせん、上記 `export 〜` は fish shell ではエラーになりますので、

```texit:~/.config/fish/config.fish
set -x RUBY_CONFIGURE_OPTS --with-openssl-dir=(brew --prefix openssl@1.1)
```

とすれば OK です。
LINE botの作成 〜作成・デプロイ・起動まで〜

#はじめに
LINE botを作りたくなったので練習がてら、オウム返しのLINE botに挑戦。
その時のメモ、日記。

詳しい解説とコードは[LINE botの作成 〜作成・デプロイ・起動まで〜](https://www.aiprogrammers.net/entry/2020/04/19/010044)をご覧ください。
DynamoDBのプロビジョニングモードでのRCUとWCUの算出

#プロビジョニングされたキャパシティー
Dynamo DBはテーブルにスループットキャパシティーを割り当てることで性能を指定することができます。「キャパシティーユニット」という単位で指定します。アプリからDBへの読み取り回数と書き込み回数が予め想定できる場合は、プロビジョンモデルでDynamo DBを作成するとコスト管理がしやすくなるメリットがあります。

## キャパシティの算出シナリオ1
シナリオ：5,000,000回/日の書き込み、5,000,000回/日の結果整合性の読み取り、1項目のサイズは1KBの場合

* 書き込みキャパシティ（WCU）：
まずは日の書き込み回数を秒に換算します。5000000回/日 = 5000000/(24*60*60) = 58回/秒
書き込みは1キャパシティーユニットで、最大1KBに対して、書き込みの実行が1秒当たり1回ですので、最終的にWCUは58必要になります。

* 結果整合性の読み取りキャパシティ（RCU）：
同様に、読み取りも58回/秒になります
結果整合性の読み込み1キャパシティーユニットで、読み込みの実行が1秒当たり2回ですので、RCUは29必要になります。
更に、RCUは1回で最大4KBの読み取りであることから、シナリオ1のの項目（1KB）は1回で読み取れるので、最終的にRCUは29必要になります。

## キャパシティの算出シナリオ2
シナリオ：5,000,000回/日の書き込み、5,000,000回/日の強い結果整合性の読み取り、1項目のサイズは5.5KBの場合

* 書き込みキャパシティ（WCU）：
秒に換算：5000000回/日 = 5000000/(24*60*60) = 58回/秒
書き込みは1キャパシティーユニットで、最大1KBが可能なので、1項目の書き込みに必要なWCUは6。最終的にWCUは6*58 = 348必要になります

* 強い結果整合性の読み取りキャパシティ（RCU）：
上と同様に、読み取りも58回/秒になります
強い結果整合性の読み込み1キャパシティーユニットで、読み込みの実行が1秒当たり1回ですので、RCUは58必要になります。
更に、RCUは1回で最大4KBの読み取りであることから、シナリオ2の5.5KBを読み取るのに2が必要となるため、最終的にRCUは58*2=116必要になります。

## キャパシティの算出シナリオ3
シナリオ： 1回/日の書き込み、1回/日の結果整合性の読み取り、1項目のサイズは1KBの場合

* 書き込みキャパシティ（WCU）：
秒間の回数に換算して、1回/秒。
書き込みは1キャパシティーユニットで、最大1KBが可能なので、1項目の書き込みに必要なWCUは1。最終的にWCUは1必要になります

* 結果整合性の読み取りキャパシティ（RCU）：
秒間の回数書き込みと同様に読み取りも1回/秒になります
結果整合性の読み込み1キャパシティーユニットで、読み込みの実行が1秒当たり2回ですので、RCUは0.5必要になります。
更に、RCUは1回で最大4KBの読み取りであることから、シナリオ3の項目は1回で読み取りことができるので、RCUは0.5が必要になります。
ただし、WCUとRCUの設定は1 以上の正数にする必要があるので、この場合の最終的にRCUは1必要になります

## メモ
AWSの無料枠は月間25RCU/秒と25WCU/秒が提供されています。シナリオ1の場合（58WCU と29RCUに設定した場合）33WCUと4RCU分が課金される（はず）。また半月しかDynamoDBを利用しない場合は実質50WCUと50RCUになるので、シナリオ1における課金は8WCUと0RCUに対して発生されます。
COTOHA で固有名詞の抽出 (Golang)

[COTOHA API Portal](https://api.ce-cotoha.com/contents/index.html) の使用例です。


フォルダー構造

```text
$ tree -a
.
├── .env
├── get_config.go
├── get_token.go
└── proper_noun.go
```

```go:proper_noun.go
// ---------------------------------------------------------------
//
//	proper_noun.go
//
//					Feb/25/2020
// ---------------------------------------------------------------
package main

import (
	"fmt"
	"os"
	"encoding/json"
	"net/http"
	"strings"
	"io/ioutil"
)

// ---------------------------------------------------------------
func proper_noun_proc(config map[string]interface{},sentence string) {
	out_filename := "out01.json"
	fmt.Printf("%s\n",sentence)

	data := make (map[string]interface{})
	data["sentence"] = sentence
	data["type"] = "default"
	str_json, _ := json.Marshal(data)
	fmt.Printf("%s\n",str_json)

	url_base := config["url_base"]
	fmt.Printf("%s\n",url_base)
	url_target := url_base.(string) + "v1/ne"
	fmt.Printf("%s\n",url_target)

	req, _ := http.NewRequest("POST", url_target, strings.NewReader(string(str_json)))

	req.Header.Set("Content-Type","application/json") 
	req.Header.Set("Authorization", "Bearer " + config["access_token"].(string))

	client := new(http.Client)
	resp, error := client.Do(req)
	if error != nil {
		fmt.Println("*** error *** client.Do ***")
		fmt.Println("Request error:", error)
		}

	bb, err := ioutil.ReadAll(resp.Body)
	if err == nil {
		ioutil.WriteFile (out_filename,bb,0666)

		var unit_aa map[string]interface{}
		json.Unmarshal ([]byte(string(bb)), &unit_aa)
		fmt.Printf("len(unit_aa) = %d\n", len(unit_aa))
		unit_bb := unit_aa["result"]
		fmt.Println(unit_bb)
		}	


}

// ---------------------------------------------------------------
func main() {

	fmt.Fprintf (os.Stderr,"*** 開始 ***\n")

	config := get_config_proc ()

	access_token := get_token_proc (config)

	config["access_token"] = access_token

	fmt.Printf("%s\n",config["access_token"])

	sentence := "特急はくたかで富山に向かいます。それから、金沢に行って、兼六園に行きます。"

	proper_noun_proc(config,sentence)

	fmt.Fprintf (os.Stderr,"*** 終了 ***\n")
}

// ---------------------------------------------------------------
```

get_config.go get_token.go はこちら
[COTOHA API で構文解析 (Golang)](https://qiita.com/ekzemplaro/items/18d4893e0177abcd1ff7)

実行コマンド

```bash
go run proper_noun.go get_config.go get_token.go
```

次のJSONファイルが作成されます。

```json:out01.json
{
  "result" : [ {
    "begin_pos" : 7,
    "end_pos" : 9,
    "form" : "富山",
    "std_form" : "富山",
    "class" : "LOC",
    "extended_class" : "",
    "source" : "basic"
  }, {
    "begin_pos" : 21,
    "end_pos" : 23,
    "form" : "金沢",
    "std_form" : "金沢",
    "class" : "LOC",
    "extended_class" : "",
    "source" : "basic"
  }, {
    "begin_pos" : 28,
    "end_pos" : 31,
    "form" : "兼六園",
    "std_form" : "兼六園",
    "class" : "LOC",
    "extended_class" : "",
    "source" : "basic"
  } ],
  "status" : 0,
  "message" : ""
}
```
Overleafで初めて日本語の文書を書くときにするべきこと

# 日本語のための初期設定
日本語の文書をコンパイルするためにはpTeXを用いるとよい。
このために，プロジェクトを開いて，以下の設定を最初にすること。1度設定しておけば同じプロジェクトで再度せっていを行う必要はない。

1. Menu → Compiler → LaTeX
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/113168/34b661dc-ac73-c414-4ebd-2de26431c72e.png)
2. Munu → Font Family → Monaco (等幅フォントにする）
3. Mune → Spell check → Off (日本語ではスペルチェックできない)
4. 以下の内容のファイルlatexmkrcを（一番上のディレクトリに）作成する

```shell:latexmkrc
$latex = 'platex';
$bibtex = 'pbibtex';
$dvipdf = 'dvipdfmx %O -o %D %S';
$makeindex = 'mendex -U %O -o %D %S';
$pdf_mode = 3;
$ENV{'TZ'}='Asia/Tokyo';   #\today and \currenttime from the datetime package
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/113168/453ba69c-e486-a303-0106-a62b028490d1.png)

## コンパイルのやり方
次の方法でコンパイルできる．
1. \documentclass{...} を先頭に含むtexファイルを開く
2. 緑色の「Recompile」ボタンをクリックする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/113168/642ea5d0-010c-b3b8-d5cb-c9fe5f73fb8f.png)

または次の方法でもコンパイルできる．
1. メニュー→Main document に\documentclass{...} を先頭に含むtexファイルを設定する
2. \documentclass{...} を先頭に含まないファイルを開く
3. 緑色の「Recompile」ボタンをクリックする

以上で，日本語ファイルを正しくコンパイルして表示でき，カーソル位置がずれなくなった．

# 便利な設定
##  自動コンパイル
Recompileの右の下矢印 → Auto Compile → On
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/113168/354397da-1a30-389d-ef03-ba781ac52494.png)

## Gitを使ったローカルでの編集
複数人でローカルで編集する場合は、Gitを使うと便利である。最初に以下の作業を行う必要がある。

 1. 「Menu」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/113168/34b661dc-ac73-c414-4ebd-2de26431c72e.png)

 2. 「Git」をクリック

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/113168/d2ac7f26-6308-2293-1be4-526dde5e25d1.png)

 3． 表示されるコマンドをローカルの端末で実行

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/113168/b1488b18-7ae2-7ede-2c82-0016786230c2.png)

## ファイルのアップロード

 1. 左上に表示される Upload のアイコンをクリック
![スクリーンショット 2020-09-27 19.31.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/113168/ce1300d2-7d97-b4b1-9df6-0b38a02b202d.png)

 2. アップロードしたいファイルを点線で囲まれた部分にドラッグする
![スクリーンショット 2020-09-27 19.31.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/113168/8ce474c6-bcad-09fc-5e60-678cef8ce730.png)

# 次に参考にすると良いページ
- Overleaf公式の[Tutorials](https://www.overleaf.com/learn/latex/Tutorials)

# 参考にしたページ
- Overleaf Help Page: [The pTeX engine](https://www.overleaf.com/learn/latex/Japanese#The_pTeX_engine)
- Overleaf Help Page: [Does Overleaf support pTeX?](https://www.overleaf.com/learn/latex/Questions/Does_Overleaf_support_pTeX%3F)
- Overleaf Help Page: [How to use latexmkrc with Overleaf](https://ja.overleaf.com/learn/latex/Articles/How_to_use_latexmkrc_with_Overleaf)
SaaS、PaaS、IaaSの概要と違いについて

#概要
・SaaS、PaaS、IaaS について学んだので概要と各サービスの違いを残しておく。

#SaaSとは？
・「Software as a Service」の略称。「サース」または「サーズ」と呼ばれているよ。
・ベンダー（製造元）が提供するクラウドサービスにあるソフトウェアを、インターネットを経由してユーザーが利用出来るサービスのこと。

###＜SaaSの代表例＞
・Microsoft Office 365などのオフィスソフト
・GmailなどのWebメール
・Dropboxなどのオンラインストレージ

###＜SaaSの特徴＞
・インターネット環境があればどこからでもアクセスできる！
・複数のチーム・複数の人数で編集や管理ができる！

###＜SaaSのメリット・デメリット＞
・メ：ソフトウェアの開発不要で、導入コストが安い
・メ：ユーザー側の管理が不要で、ランニングコストが安い
・デ：ソフトウェアのカスタマイズ自由度が低い

#PaaSとは？
・「Platform as a Service」の略称。「パース」と呼ばれているよ。
・アプリケーションの実行に必要なプラットフォームであるネットワークやサーバーシステム、OSやミドルウェアなどを、インターネットを経由して利用できるサービスのこと。

**＜PaaSの代表例＞**
・Amazon Web Services（AWS）
・Google cloud Platform

###＜PaaSの特徴＞
・複雑で面倒な開発環境を整備する手間がなくなる！
・システム開発に注力したいという場合に適しているよ！

###＜PaaSのメリット・デメリット＞
・メ：開発に必要な言語や管理システム、OSなどのプラットフォームを利用できるので、複雑で面倒な開発環境を整備する手間がなくなる
・デ：開発言語やデータベースはベンダーが提供しているものに限られる

#IaaSとは？
・「Infrastructure as a Servic」の略称。「イアース」または「アイアース」と呼ばれているよ。
・情報システムの稼動に必要なインフラとなる、ネットワークやサーバーシステムをインターネットを経由して利用できるサービスのこと。

###＜IaaSの代表例＞
・Amazon Elastic Compute Cloud （Amazon EC2）
・Microsoft Azure
・Google Compute Engine（GCP）

###＜IaaSの特徴（メリット／デメリット）＞
・メ：ネットワークやサーバーといったインフラの運用を安価でベンダーに任せられる
・デ：インフラ設計やサーバー管理・運用のスキルといった専門知識を持った技術者が必要となる

#SaaS、PaaS、IaaSの違いとは？
・システムの構築に必要なサーバー、ネットワークを提供するのが**「IaaS（イアース）」**
・「IaaS」にプラスして、OSやミドルウェアまでを提供するのが**「PaaS（パース）」**
・上記に加えアプリケーションまで含めて、まとめて提供するのが**「SaaS（サース）」**というわけだ。

#○aaSは他にもある？あわせて覚えときたい○aaSについて
###BaaS（Backend as a service）
・スマートフォンやタブレットなど、モバイルシステムのバックエンド機能をアプリケーションサーバーが代行するクラウドサービスのこと。

###DaaS（Desktop as a service）
・アイコンやフォルダ、ウィンドウなどの環境をクラウドから呼び出し、クライアントのデスクトップ環境を提供するクラウドサービスのこと。

###IDaaS（Identity as a service）
・ネットワークセキュリティの向上と、認証情報を管理する手間を省くため、クラウド上でID管理を行うクラウドサービスのこと。

###XaaS（X as a service）
・コンピュータ処理に必要となるすべてのサービスを、ネットワークを介したサービスの形で提供する概念のこと。EaaS（Everything as a service）と呼ばれることもあるよ。

#参考サイト
>https://mercart.jp/contents/detail/12
URLのみ書かれたファイルからランダムにURLを10個抽出するPGM

改行で区切られたURLのみ書かれたファイルを読みだしてランダムに10個抽出するPGM(JavaScript)です

<hr>

参考にしたサイト
<a href="https://www.sejuku.net/blog/22432">【JavaScript入門】乱数の作り方(範囲指定/重複なし/ランダム文字列) | 侍エンジニア塾ブログ（Samurai Blog） - プログラミング入門者向けサイト</a>

<a href="https://www.ipentec.com/document/javascript-change-link-destination-dynamically">Aタグのリンク先URLを動的に変更する</a>

<hr>
githubURL:https://github.com/NanjoMiyako/RandomURLExtract

<hr>
サンプルページURL:https://nanjomiyako.github.io/RandomURLExtract/

<hr>
出力画像例:
![urlextractSampleGazo.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/412430/3683cf40-7a22-8d60-ddeb-e89f826f4af4.jpeg)
Docker Desktop for WindowsにProxyを設定した

# 解決すべき問題

Docker Desktop for Windows (v2.2.0.3) をWindows 10 PCにインストールした。`docker pull nginx`コマンドが失敗した。Proxyがある環境だったから。`%USERPROFILE%\.docker\config.json` ファイルにProxyの設定を記入した。config.jsonを反映するためにDocker Desktopを再起動した。`docker pull nginx`を再度実行したら、やはり失敗した。


# 説明

Proxyサーバによってインターネットから隔てられた会社のネットワーク上のPCでDocer for Windowsをインストールした。PowerShellのウインドウを開いてDockerAtHomeプロジェクトの 5-1 のサンプルを試みた。するとdockerコマンドがDocker Hubに通信しようとしてエラーが発生した。

```
> docker pull nginx
Using default tag: latest
Error response from daemon: Get https://registry-1.docker.io/v2/: EOF
```

Proxyの問題だろうとおもった。 https://qiita.com/2fbCvmiYKX/items/c6aab333364af25fd924 を参照した。対策として`%USERPROFILE%\.docker\config.json` ファイルにProxyの設定を追加した。

```
{
    "credsStore":"desktop",
    "proxies": {
        "default": {
            "httpProxy": "http://172.24.xx.xx:8080",
            "httpsProxy": "http://172.24.xx.xx:8080",
            "noProxy": ""
        }
    },
    "stackOrchestrator":"swarm"
}
```

`docker pull nginx`コマンドを再試行した。エラーが解消しなかった。

## 別解

もう一つのQiita記事 https://qiita.com/wryun0suke/items/1f4bbd2977ae41ee7a36 をみた。こちらの記事は「タスクトレイにあるDockerアイコンを右クリックして「Settings…」を開いた...」と書いてある。ほほう、別のやり方があるのね。でも「タスクトレイにあるDockerアイコン」って何？しばし迷ったが、最終的に問題を解決することができた。

タスクトレイとはディスクプレイに右下隅のあたりにある。上向き矢印 `^` をクリックすると隠れていたアイコンが表示される。そのなかにDockerアイコンがいた。 
![1_tasktray.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52995/20241771-1d35-55ee-b18a-0f1b66401da0.png)


Dockerアイコンを右クリックして Settings メニューを選んだ。
![2_menu_settings.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52995/dc3fe1e9-d67a-8cde-8ee7-3ed42cf078a1.png)

Settingsダイアログが表示された。メニューで Settings > Resources> PROXIES を選んだ。

Manual proxy configurationをONし、HTTPのProxyとHTTPSのProxyを設定した。
![3_settings_resources_proxies.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52995/d516d7d1-cf87-b2c5-07bd-47a747555ab5.png)

Apply & Restartボタンを押すとDocker Desktopが停止・再起動した。数分かかった。

このあとで `docker pull nginx` を再試行したところ、成功した。メデタシ、メデタシ。

# 結論

Docker Desktop for Windows v2.2.0.3 は `%USERPROFILE%\.docker\config.json` に書かれたProxiesの設定を読まない。GUIでSettingsダイアログを開き入力する必要がある。

本家のドキュメント[Get started with Docker for Windows](https://docs.docker.com/docker-for-windows/)をみると、GUIでSettingsダイアログを開いて入力しろとたしかに書いてある。ところが「.docker/config.jsonは使わない」とは書いていない。config.jsonはLinux上でdockerコマンドを動かす場合に必要になるものであって、Docker Desktop for Windowsにはまるで関係なかった。うーむ、自分がdocker初心者であることをおもい知った。
OwlCarousel2でスムーススライドショー

OwlCarousel2 2.3.4 (https://owlcarousel2.github.io/OwlCarousel2/)
を使った複数枚のスライドショーで、
デフォルトでは、1枚ずつ、画像端に来ると一時停止するようになっており、
要件では、一時停止せず、リニアに動かしたい要望があった。

リニアで調べると、オプションのslideTransitionにLinearを指定すると良いらしい。

```` javascript
slideTransition: 'linear',
````

しかし、うまく行かない。

さらに調べると、下記にあたった。
https://codepen.io/osingh/pen/wOqrPX
実装済みのようで、ちゃんと思った通りの動きをしていた。
しかし、実際おなじオプションを当ててみると、
うごきがおかしい。

さらに調べた際、
スムーズ ということばがおもいついたので、
それを調べると、Github内のページにあたった。
https://github.com/OwlCarousel2/OwlCarousel2/issues/296

読み進めると、一番最後に、一番知りたい内容が書かれていた。
https://github.com/OwlCarousel2/OwlCarousel2/issues/296#issuecomment-400703465

つまり、

```` javascript
autoplay : true,
slideTransition: 'linear',
autoplayTimeout : 4000,
autoplaySpeed : 400
````

autoplayTimeoutとautoplaySpeedを同値、
もしくは、autoplaySpeedの方を大きくするとのこと。
これにより、やりたいことが無事に実装できた。
three.jsでanimation system その3

#概要

three.jsでanimation systemを、理解したかった。
vrmを表示して、腕を動かして見た。

#参考にしたページ

https://qiita.com/superdog/items/ca8ac65d414bde6cbb99

#写真

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18104/7db0db1e-97bf-5ada-e420-ddcbe6df570c.png)


#成果物

https://embed.plnkr.co/TFwDzO2hHo4NSOcJep4C/

以上。
PHPの基礎

#はじめに
最近、phpの勉強をしています。progateでphpの学習を一通り終えましたが、あまり理解できていなかったので、記事にして、覚えにくかった場所を自分なりにまとめてみようと思います。
基本のきの部分ですので、phpこれから勉強しようかなと思われている方の役に立てばと思います。

#配列

```php:sample.php
ノーマルの配列
<?php 
    //$scoresという配列を定義
    $scores = array('70', '90', '80');
    //$colorsの一番目の要素を出力
    echo $scores[0]; //結果、７０を出力
    //$scoresに要素を追加
    $scores[] = '100'; 
    //$scoresに追加した要素を出力　
    echo $scores[3]; //結果、100を出力
?>
連想配列（要素にインデックス以外にキーを持たせる）
<?php 
    //$scoresという連想配列を定義
    $scores = array('数学' => '70', '英語' => '90', '国語' => '80');
    //インデックスではなくキーで要素を出力　
    echo $scores['英語']; //結果、9０を出力
    //国語(80)に5を足し合わせる
    $scores['国語'] += 5;
    echo $scores['国語'];//結果、85を出力
?>
```

#繰り返し(ループ)処理
###for文
```php:sample.php
<?php
    for(初期値を定義; ループの条件; 変数の更新){
      繰り返す処理;
    }
?>
例文
<?php
    //1~100までの数字を出力させる。
    for($i = 1; $i <= 100; $i ++){
      echo $i.'<br>'; //'<br>'は、改行を意味する
    }
?>
```

###while文

```php:sample.php
<?php
    初期値を定義;
    while(ループの条件){
     繰り返す処理;
     変数の更新;
    }
?>
例文
<?php
    //2~100までの数字で2の倍数のみを出力させる。
    $i = 2;
    while($i <=100){
      echo $i.'<br>';
      $i +=2;
    }
?>
```

###break文（ループを強制的に中断する）

```php:sample.php
<?php
    //1~5までの数字を出力させる。
    for($i = 1; $i <= 10; $i ++){
      if($i > 5){
        break; //$iの値が6になった時点でループを強制的に中断する命令
      }
      echo $i;
    }
?>
```

###continue文（ある条件だけスキップし、ループそのものは継続）

```php:sample.php
<?php
    //3の倍数以外の数字（１００まで）を出力させる。
    for($i = 1; $i <= 100; $i ++){
      if($i % 3 == 0){
        continue; //$iの値が3の倍数になった時だけスキップ　ループそのものは、継続
      }
      echo $i;
    }
?>
```

###foreach文

```php:sample.php
<?php
    配列の定義;
    foreach(配列もしくは連想配列 as 値変数){
      繰り返す処理;
    }
?>
例文
<?php
    //配列$dataを定義
    $data = array('東京','大阪','名古屋');
    //先頭のデータから順に繰り返し出力させる。
    foreach($data as $value){
      echo $value; //結果、東京、大阪、名古屋を出力
    }
?>
```

#関数

###代表的な関数

```php:sample.php
strlen-要素の文字数を数える
<?php
    //変数$strを定義
    $str = 'hello';
    //変数$strの文字数を出力
    echo strlen($str); //結果、5を出力
?>
count-配列の要素の数を数える
<?php
    //配列$arrayを定義
    $array = array('HTML', 'CSS', 'PHP');
    //変数$arrayの要素数を出力
    echo count($array); //結果、3を出力
?>
rand-ランダムな整数を出力
<?php
    //10~15のランダムな整数を出力
    echo rand(10,15); //結果、12を出力
?>
```

###自作の関数

```php:sample.php
シンプルな関数
<?php
    function $関数名(){
     処理;
    }
?>
例文
<?php
    //関数hello()を定義
    function hello(){
     echo' Hello, world';
    }
    //関数hello()を呼び出す
    hello(); //結果、Hello, worldを出力
?>
戻り値と引数を用いて
<?php
    function 関数名(引数){
     return 処理;
    }
?>
例文
<?php
    //関数getCircleArea()を定義
    function getCircleArea($radius){
      return $radius * $radius * 3; //今回は、5 * 5 * 3になってます。
    }   
    //関数getCircleArea()を呼び出し、$circleAreaに代入
    $circleArea = getCircleArea(5); 
    //$circleAreaを出力
    echo $circleArea; //結果、75を出力
?>
```

#最後に
今回は、構文ばっかり並べてみました。まとめながら書くことは、頭の整理に繋がり、いい感じです。
理解が遅いので早く理解できるようになりたいです。
また、早くLaravel習得してポートフォリオを作成できたらと思います。
この記事を見ておかしいんじゃないのとかありましたらどんどん指摘してください、よろしくお願いします。
Slack通知用WebAPIがワークフローでつくれるようになっていた

#まとめ
・Slackワークフローが超絶進化していた
・Incomming Webhookの設定をしなくてもワークフロー機能だけで通知が可能に
・変数が任意も設定可能

これはつまり

**POST通信で、任意の情報を変数としてSlackに通知出来るWebAPIがワークフローで簡単につくれるようになった**

ということになろうかと思います。


# 手順

## ワークフローの設定
ワークフロー作成時に「Webhookワークフロー」というものが増えています。
というかそれ以外にも沢山増えています。すごい。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/68734/b3adc500-7774-e010-a77a-59dc3737e9ac.png)


絵文字リアクションも気になりますが、今回は Webhookを選択。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/68734/1b5960a7-f296-2e04-1089-5aa5a7bfdcda.png)

## 変数の機能が凄い
Webhookで受け取るパラメータ名を自分自身で決めることができます。
ここで作った変数を、アクション時のメッセージに利用することができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/68734/f6513e8f-c7f8-ece4-46f9-0e26b3ca085e.png)

変数の「データタイプ」は2020年2月25日現在では

- テキスト
- Slackユーザーのメールアドレス
- SlackユーザーID

の3種です。後ろ2つを指定した場合、この後のメッセージの送信先に選択することもできます。すごい。

今回は**開発環境に流れ続けているダメクエリの検知** を作成しようと思うので、

- query_info
- query_time

というパラメータを設定しました。

## 設定完了画面

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/68734/bf09a615-a03e-b3ef-4cf3-b75fb1e412ab.png)

↑なんと、ご丁寧にJSON形式のサンプルまで用意してくれます。


## ステップの追加：メッセージを送信

用意したパラメータを以下のような感じで差し込むことができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/68734/f6fa04a0-e45e-c95a-86eb-2482e99dd362.png)

Slackのメッセージフォーマットで編集できるのがとても便利です。

### ボタンってなんぞ
ワークフローに対してボタンを用意することが出来ます。
これはクリックされると、クリックしたユーザー名が「押しました」と明記され、次のステップのアクションを実行することができ、今回のような用途にもうってつけです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/68734/389925d1-0c3e-3a0e-3fbf-15496a0085ea.png)

↓ボタンを押したらスレッドにメッセージを投稿、が便利過ぎますね。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/68734/79e1b08c-8c2c-3e34-d8d8-adb7e92f0c35.png)



#  できた
以上で作成完了です。公開ボタンを押します。かんたん！！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/68734/98f0ce35-3369-cee8-5df8-a75f373a9ec8.png)


この完了画面からコピーできるURLに対して、Content-Type:application/jsonでPOST通信をすれば通知されます。

## 実際に通知して見る（コマンドライン）

```
curl -H 'Content-Type:application/json'  -d '{  "query_info": "select * from no_index_fulljoina inner join no_index_fulljoinb",  "queri_time": "711"}'  https://hooks.slack.com/workflows/略
```

2020年2月25日現在だと、用意したパラメータはすべて必須となるようです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/68734/761a5116-97e2-96e4-43a2-b446fee731f2.png)


# 所感
既に声が出るくらい便利なのですが、今後更に便利になっていく事を予感させます。
通知したいデータと、Slackへ通知するメッセージのフォーマット管理を切り離せるのも便利ですし、それをワークフローで画面から出来るのも便利です。
また、シンプルに変数に対してテキストを送信するだけなのでエラーにもなり辛く、敷居が低いのもポイントかなと思います。社内活用が進みそうです。