OmniAICreator/Qiita-1.07M huggingface dataset:
位置メモ

transformを使う時にいろいろわけがわからなくなるのでメモ。

#カメラのTransform
<img width="584" alt="スクリーンショット 2018-12-04 20.09.07.png" src="https://qiita-image-store.s3.amazonaws.com/0/322674/2fb9adcc-3951-774c-caa4-d9c217d9b08a.png">

Xは横、Yは縦、Zは奥行き。
カメラの場合は、3Dで作る場合
Sizeというのが映している画面に影響している。

このSizeをいじるとカメラの「映す範囲」が変わるので
映される側のTransformをいじりまくっても解決しない時に
意外とこれでいけたりする。


#テキストのRect Transform
<img width="567" alt="スクリーンショット 2018-12-04 20.11.05.png" src="https://qiita-image-store.s3.amazonaws.com/0/322674/c7746c76-e39a-5a11-6231-189e1fb0ffa8.png">

Widthが横幅、Heightが縦幅。
これの設定をせずにテキストサイズを大きくすると
範囲外のデカさになって何も表示されなかったりするのでまずこれを適切に設定。

そして適当にやってもなんとかなっちゃうので
あまり設定をちゃんとしてない人も多いPivot。
それとテキストの配置（ParagraphのAlignment）。

AlignmentはこのTextの範囲の中で
左寄せか、センタリングか、右寄せか
上揃えか、中央揃えか、下揃えかを設定してくれます。

後々このText範囲を大きくしたりする時に
文字の位置が動いたりするのはPivotによるものです。

PivotがX0、Y1ならText範囲が下に大きくなっても文字の位置は変わりません。
PivotがX0.5、Y0.5ならText範囲が大きくなった時、
その大きくなった範囲の中央に文字がいきます。

Textは可変式にする事が出てくるので
改行した時に文字がどういう位置にいくかを
知っておいた方があとになって悩まないかもです。


#座標
座標は３つあってスクリーン座標、ワールド座標、ビューポート座標があります。

スクリーン座標は0,0,0が一番左下で一番右上は画面によって変わります。
もし720x1280（携帯でよくあるサイズ）の場合は右上は720,1280,0です。

ワールド座標は中央が0,0,0のやつで、
何も設定してなければ普段Unityをいじってる時の数字です。

ビューポート座標は左下を0,0,1として、右上1,1,1としたものです。
ビューポート座標の使い方は今の所よくわかりません。



ちなみにクリックやタップした位置を取得する
Input.mousePositionはスクリーン座標で取得します。

3Dのオブジェクトにクリックしたポイントがどこに当たったかを判定する場合
私はこんな感じにしてます。（他にもいろいろ方法があるみたいです）

```C#
	private RaycastHit hit;
	private Ray ray;

	void Update () {
		if (Input.GetMouseButtonDown (0)) {
			ray = Camera.main.ScreenPointToRay (Input.mousePosition);
			if (Physics.Raycast (ray, out hit, 100f)) {
				Debug.Log(hit.point);
			}
		}
	}
```
クリックが何かにぶつかった場合、「hit.point」にワールド座標が返ってきます。
(0.1, -0.2, -0.5)
こんな感じで。

キャラクターをそこに走らせたりする時に使うのですが、
Input.mousePositionだとスクリーン座標なので奥行きがないので
カメラからray（光線）を出して
ぶつかったところはどこかを感知して、
その奥行きを入れたワールド座標を返してます。

***
といった感じで、座標はなんだかわけがわからなくなりがち。
なので、こんな感じでメモ的にいろいろ書いていこうかと思います。
こちらも初心者なので出来るだけ難しくない書き方をする予定です。

間違いの指摘や何かアドバイスをくださる方、大歓迎ですヽ(・ω・*)
v-for でリスト要素 (Object[]) の状態が変化しても反映されない現象

親から `props` 経由で渡される `Array<{ item: string, value: string|number, checked: boolean }>` みたいな物を `v-for` で回してチェックボックスを描画した際に、 `checked` の状態が変化しても HTML 要素として意図通りに描画されなくて困ったので、解決方法をメモします。

## 状況

`v-for` を使ってチェックボックスのリストを描画している時に、
取り回している配列内の Object が変化しても、担当のチェックボックスの見た目上の状態が変化しなかった。

コードはざっくり以下のような感じ。

```vue:some.vue
<dl>
  <dt> hogehoge </dt>
  <dd
    v-for="item of list"
    :key="`item-${item.value}`"
  >
    <input
      :id="genDdId(item.value)"
      :checked="item.checked"
      :name="item.value"
      type="checkbox"
      @click.prevent="handleItemClick($event, item.value)"
    >
    <label :for="genDdId(item.value)">
      {{ item.label }}
    </label>
  </dd>
</dl>
```

`:checked="item.checked"` の真偽値が変化する度にチェックボックスの `checked` 属性が変化して欲しいけど、してくれない。
`$forceUpdate` を試したけど変化無し。

## 原因と解決方法

### 原因

配列の変化は見てるけど、その各アイテムであるオブジェクトのプロパティまでは監視していないよ、という事だと推測。
普通に Vue.js の仕様に引っ掛かってしまっただけかも。


`v-for` で繰り返し表示させる際は `key` が必要になるわけだけど、この `key` はリスト内の位置までしか担当してくれてないのかな。

> Vue が各ノードの識別情報を追跡できるヒントを与えるために、また、先ほど説明したような既存の要素の再利用と並び替えができるように、一意な key 属性を全てのアイテムに与える必要があります。
> 
> (https://jp.vuejs.org/v2/guide/list.html#key)

### 解決方法

`key` が違うなら異なる要素なので描画されるよね、と考えて、
状態により `key` が常に変化するように仕組んで解決しました。
以下のイメージ。

```vue:some.vue
<dd
  v-for="item of list"
  :key="`item-${item.value}--checked-${item.checked ? 1 : 0}`"
>
```
ポケモンターミナルを天気予報化する

この記事は[信州大学 kstm Advent Calendar 2018](https://qiita.com/advent-calendar/2018/kstm)の6日目の記事として書いています．

#はじめに
皆さん，唐突ですが，[ポケモンターミナル](https://github.com/LazoCoder/Pokemon-Terminal)というものをご存知でしょうか．
iTerm2等で背景画像をポケモンにすることができるものです．
しかも，そのポケモンの数は719種類対応しており，ほとんどのポケモンを網羅しています．
話は変わりますが，最近，異常気象多いですよね．
研究室の学生をやっていると「雨が降る」とか「雷雨になりそう」となった時は早く帰りたくなるものです．
そこで，普段使うターミナルが「天気によって背景が変わるといいな」と思ったので今回の記事に至りました．
（要は暇つぶしです．）

#準備
[ポケモンターミナル](https://github.com/LazoCoder/Pokemon-Terminal)をインストールしてください．
注意点として，Python 3.6以上の環境でないと動かないようです．
事前に環境を整えておくと良いでしょう．
詳しくはリンク先にインストール方法，より詳しい注意点などが書いてあるのでそれを参照して下さい．
筆者はiTerm2とTilix（OSはArchLinux）上での駆動を確認しています．

#天気を取得する準備
今回は天気を取得する上で[OpenWeatherMaps](https://openweathermap.org/)というサイトで提供されているAPIを使用します．
**注意点として無料プランではAPIを叩くのは1分間60回までが上限とされています．
後々コードは示しますがコード自体はターミナルのタブを1つ開く毎に1回コールします．
~~1分間に連続して，タブ60個も開かないよね！？~~**
1. [こちら](https://home.openweathermap.org/users/sign_up)からアカウント登録して下さい．無料なので安心して下さい．
2. 登録完了後，ユーザーページに行くと下の項目にAPI Keyという項目(下の画像の黒いバーの部分）があります．この項目を控えて置いて下さい．あとで使用します．


<img width="997" alt="api key.png" src="https://qiita-image-store.s3.amazonaws.com/0/153113/72852681-36f8-aae3-2870-742679ec68c7.png">

#天気予報化のコード
まず，先ほど控えたAPI KeyをWEATHERAPPID，
天気予報して欲しい地域のエリア名をWEATHERPLACEという名前の環境変数で記録しておいてください．
天気予報して欲しい地域のエリア名の例は[こちら](https://openweathermap.org/)のページで設定してみたい地域を調べて，出てきた結果に応じてやって見てください．
<img width="1030" alt="Screen Shot 2018-12-05 at 14.48.33.png" src="https://qiita-image-store.s3.amazonaws.com/0/153113/3dfd3324-50b7-b015-ac77-c7b81391a4a8.png">
東京の場合は環境変数が以下のようになります．

```shell-session
WEATHERPLACE="Tokyo, JP"
```

下記コードについて，簡単に説明します．

実装時に天気で姿が変わるポケモンが適していると思ったので， 
 
快晴：ポワルン　晴れの姿
曇り：ポワルン　普通の姿
雨・霧雨：ポワルン　雨の姿
雷雨：サンダー（~~伝説のポケモンだし，低確率でいいよね？~~）
雪：ポワルン　雹の姿
その他：ポワルン　普通の姿
  
という感じにテキトーに組みました．
見にくいとか気に食わない点があれば，自分で別ポケモンの画像に差し替えてください．
~~あまりにもテキトーに組んだので文字が見にくいとかが発生してる．自分でも別ポケモンの背景選定している最中．~~

```pokemonTerminalByweather.py
# -*- coding:utf-8 -*-
import os
import subprocess
import shlex
import urllib.request
import json

if __name__ == "__main__":
    api_key = os.environ.get('WEATHERAPPID')
    area_name = os.environ.get('WEATHERPLACE')
    url = "http://api.openweathermap.org/data/2.5/forecast?"+"q="+area_name+"&units=metric"+"&appid="+api_key
    source = urllib.request.urlopen(url)
    data = json.loads(source.read())
    num = data['list'][2]['weather'][0]['id']
    if num/100 == 8:
        if num%100:
            cmd = "pokemon castform" #cloud
        else:
            cmd = "pokemon castform-sun" #clear
    elif num/100 == 6:
        cmd = "pokemon castform-hail" #snow
    elif num/100 == 5 or num/100 == 3:
        cmd = "pokemon castform-rain" #rain or drizzle
    elif num/100 == 2:
        cmd = "pokemon Zapdos" #thunderstorm
    else:
        cmd = "pokemon castform" #other
    cmd = shlex.split(cmd)
    ret = subprocess.check_output(cmd)
    print(ret)
```

上記のコードを利用する場合，.zshrcや.bashrcへ以下を記入して終了です．

```shell-session
python pokemonTerminalByWeather.py
```

お疲れ様でした．
DockerコンテナでPythonのWEBフレームワーク「responder」を起動する

#はじめに
responderはPythonのWebフレームワークです。何かすごいらしいです。詳細は<a href="https://qiita.com/tani_AI_Academy/items/8dbf575bb90993d329ed">responder入門</a>を見てください。今回はresponderをDockerコンテナ内で起動してみました。

#Docker準備
```
FROM python

RUN pip install responder && \
    pip install starlette==0.8
```
`pip install starlette==0.8`をしないと`ModuleNotFoundError: No module named 'starlette.lifespan'`になってしまうようです。詳細はhttps://github.com/kennethreitz/responder/issues/255 を見てください。

```
docker build -t responder .
```

#Hello, World!
```
import responder

api = responder.API()

@api.route("/hello/{who}")
def hello_to(req, resp, *, who):
    resp.text = f"hello, {who}!"

if __name__ == '__main__':
    api.run(address= "0.0.0.0")
```
User Guides通りに、`api.run()`のまま実行すると「このページは動作していません」と表示されてしまいます。Dockerコンテナ内で起動する場合には、`api.run(address="0.0.0.0")`とする必要があります。

#実行
```
docker run -it -p 5042:5042 responder /bin/bash
```

http://localhost:5042/hello/world にアクセスすると、「hello, world!」と表示されます。
Firebase RealtimeDatabaseのルールの親子関係まとめ

* 参考 : [Realtime Databaseのドキュメント（データのセキュリティ保護）](https://firebase.google.com/docs/database/security/securing-data?hl=ja#read_and_write_rules_cascade)

---
* 子は親が宣言しているものに対して権限を追加で付与できる。
* 子は親のアクセス権を上書きして消すことができない。
* 但し、 親のアクセス権が無い場合でも子はアクセス権を持つことができる。



* 特定のパスでアクセス権を付与した場合、その子、孫のすべてにアクセス権を付与する。
  * なので親のアクセス権は極力`false` にした方が良い。
* 子でアクセス権を設定してもその親でアクセス権を設定しなければ親にアクセスすることはできない。
Djangoのテンプレートのurlタグにパラメータをつける方法

Python 3.5.2
Django 2.0

今までurlにパラメータ渡すときは何も考えずこんな風に書いてました。

```html:html
 <a href="{% url 'somefunc' %}?param={{param}}">
```


でもこんな風にもかけることを今日知りました。

```html:html
 <a href="{% url 'somefunc' param %}">
```

```python:urls.py
urlpatterns = [
    path('somefunc/<int:param>', views.somefunc, name='somefunc')
]

```

知らなかった。
知らないと｢PhpStormのライセンス料をドブに捨ててる｣も同然のショートカットキーを教えてください

覚えておかないと損するショートカットキーを教えてください。

---

### Search Everywhere

<kbd>Shift</kbd> 2度押し

![search-everything.gif](https://qiita-image-store.s3.amazonaws.com/0/889/f8e56015-00c2-d731-15e7-341a4f3f17ce.gif)

ファイル名、クラス名、メソッド名、プロパティ名・・・なんでも検索できる。

---

### Reformat Code

![apple] <kbd>option</kbd> <kbd>⌘</kbd> <kbd>L</kbd>　![windows] <kbd>Ctrl</kbd> <kbd>Alt</kbd> <kbd>L</kbd>

![reformat.gif](https://qiita-image-store.s3.amazonaws.com/0/889/7607bbf3-e5ba-a220-674c-5bcb484b0439.gif)

コーディング規約に合わせてスタイルを整えてくれる。範囲選択すれば、そこだけスタイル調整することもできる。

---

### Toggle Case

![apple] <kbd>⌘</kbd> <kbd>shift</kbd> <kbd>U</kbd>　![windows] <kbd>Ctrl</kbd> <kbd>Shift</kbd> <kbd>U</kbd>

![toggle-case.gif](https://qiita-image-store.s3.amazonaws.com/0/889/3a293d64-fcc6-d0d5-d9f8-605713375932.gif)

小文字を大文字に、大文字を小文字に変換できる。定数を小文字でタイピングして、あとで大文字にするといった場面で便利。

---

### Show intention actions and quick-fixes

![apple] <kbd>option</kbd> <kbd>return</kbd>　![windows] <kbd>Alt</kbd> <kbd>Enter</kbd>


![intention.gif](https://qiita-image-store.s3.amazonaws.com/0/889/c691a0b9-d95c-76f6-e51a-1937fa053274.gif)

キャレットが当たっているところで実行できるインテンションメニューを出す。インテンションとは、コードの潜在的な問題点の修正案の提示や、修正を行ってくれる機能のこと。

---

#### コンストラクタ引数からメンバー変数を自動生成する例

![2018-12-06 00.48.15.2018-12-06 00_49_47.gif](https://qiita-image-store.s3.amazonaws.com/0/889/bfd975ac-709b-073d-2414-0f44e81351ba.gif)


---

### Refactor This

![apple] <kbd>control</kbd> <kbd>T</kbd>　![windows] <kbd>Ctrl</kbd> <kbd>Alt</kbd> <kbd>Shift</kbd> <kbd>T</kbd>


キャレットが当たっているところをリファクタリングするメニューが出てくる。

---

### Comment with Line Comment 

![apple] <kbd>⌘</kbd> <kbd>/</kbd>　![windows] <kbd>Ctrl</kbd> <kbd>/</kbd>


![comment-out.gif](https://qiita-image-store.s3.amazonaws.com/0/889/9c10c3c9-1e60-94c1-ec41-8a89675f6ea9.gif)


行コメント`//`でコメントアウトしたり、逆にコメントアウトを外したりできる。

---

### Move Statement Up/Down 

![apple] <kbd>⌘</kbd> <kbd>shift</kbd> <kbd>↑</kbd> <kbd>↓</kbd>　![windows] <kbd>Ctrl</kbd> <kbd>Shift</kbd> <kbd>↑</kbd> <kbd>↓</kbd>


![move.gif](https://qiita-image-store.s3.amazonaws.com/0/889/89a8f0c4-2397-8f1f-c207-2737def2fe79.gif)

メソッドなどのステートメントを上下移動できる。コピペがしなくて済むのが良い。

---

### Generate Code

![apple] <kbd>⌘</kbd> <kbd>N</kbd>　![windows] <kbd>Alt</kbd> <kbd>Ins</kbd>

![2018-12-06 00.42.33.2018-12-06 00_44_21.gif](https://qiita-image-store.s3.amazonaws.com/0/889/bc9ff6bc-22f3-3d2a-ada5-76ef01482c4a.gif)

コンストラクタやゲッター/セッター、抽象メソッドの実装などを自動生成できる。

---

### Add multiple carets

![2019-04-17 13.36.44.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/889/ad59ef0b-2bf5-bab0-9723-cc68f7baf8c6.gif)

* [PhpStormでキャレットを増やして複数行を同時に編集する - Qiita](https://qiita.com/suin/items/b0275e434858e29f25e0)

---

こういう便利なやつを知りたい。

[windows]: https://qiita-image-store.s3.amazonaws.com/0/889/9a760bea-7de3-f110-2e30-5b431e04089b.png
[apple]: https://qiita-image-store.s3.amazonaws.com/0/889/47d014f8-3c15-745f-785d-389c5f650c2f.png
SQLインジェクションとクエリの書き方について考える

今年新卒で弊社に入社してからやっと戦力になってきて、結構大規模なSQLを触ったりするときに指摘されることがあったのでまとめてみました。仕事ではPHP(フレームワーク)とMySQLを使っておりますので、その場合の対策を書き留めたいと思います。

## SQLインジェクションとは？
SQLインジェクションの脆弱性がある場合、悪意あるリクエストにより、データベースの不正利用をまねく可能性があります。　悪意のある人が入力フォームから不正な値(データベースへの命令文を構成する値)を送信し、データベースが消去されたり改ざんされたりしてしまいます。
**(例)**
「名前」が「apple」である商品を検索するには、以下のような SQL 文を実行します。 

```
SELECT * FROM items WHERE name = 'apple'
```
これをアプリケーションで様々な単語で検索したい場合、

```php:
$query = 'SELECT * FROM items WHERE name = ' . $name;
```
となるわけですが、この　$name に不正な値を入力して見ます。

```php:
$query = 'SELECT * FROM items WHERE name =  'apple'';
```
などとしてシングルクォートを入れたり、

```php:
$query = 'SELECT * FROM items WHERE name = apple; UNION ALL SELECT mail_address AS id, password AS name FROM users';
```
と入力されてしまうと、文法エラーが起きたり個人(機密)情報の流出の原因となってしまいます。

## 対策
### バインド機構を使う
ユーザー入力を受け取ってSQL文を動的に生成する場合は プレースホルダ　と　プリペアドステートメントを用いバインドしなければなりません。

- **プレースホルダ**
実際の内容を後から挿入するために、とりあえず仮に確保した場所のことです。

- **プリペアドステートメント**
直訳すると「予約語」と言う意味です。あらかじめ実行するクエリを予約します。この時プレースホルダを用い、クエリにユーザー入力を後から挿入する場所を指定することができます。


```php:例
$stmt = $pdo->prepare('SELECT * FROM items WHERE name = ? AND price = ?');
$stmt->bindValue(1, $name);
$stmt->bindValue(2, (int)$price, PDO::PARAM_INT);
$stmt->execute();

// または
$stmt = $pdo->prepare('SELECT * FROM items WHERE name = ? AND price = ?');
// 型を明示していないので、$priceはここでは文字列扱いとなります。
$stmt->execute([$name, $price]);
```
**文字列以外のものを扱う際には明示的なキャストが必要になり、省略すると文字列として扱われます。**

## 複文の禁止
[PDOのオプション](http://php.net/manual/ja/ref.pdo-mysql.php)で複文が禁止できるようになったらしいです。 (v5.5.21 および v5.6.5以降)

>PDO::MYSQL_ATTR_MULTI_STATEMENTS (integer)
FALSE にすると、PDO::prepare() や PDO::query() でのマルチクエリの実行を無効にします。

この定数が使えるのは、データベースハンドルを新規作成する際の driver_options 配列内だけであることに注意しましょう。


## バインド機構が使えない時の対策
### バリデーション
フォームから入力された値に対して、徹底的なデータバリデーションを適用するべきです。不正な入力を拒否することによって、ユーザーデータの破壊的な変更の必要性がなくなります。
数字なら数字の、日付なら日付などそれぞれの型に合わせたバリデーションが必要になってきます。[PHPのフィルタ拡張](https://secure.php.net/filter)を使ったり、各フレームワークの機能を使用してバリデーションを適用してあげましょう。
### エスケープ
上記の様な「フォームから取得する型が決まっている時」にバリデーションを適用するのは簡単ですが、自由検索など「フォームの値の型が決まっていない時」は、バリデーションを適用するのは困難です。その場合は、値をエスケープすることでSQLインジェクションの可能性を下げることができます。もしユーザ入力に特殊文字(スラッシュやクォートなど)が入っていた場合にエラーを起こさせないためです。[PDO::quote](https://secure.php.net/manual/ja/pdo.quote.php)や[mysqli::real_escape_string](https://secure.php.net/manual/ja/mysqli.real-escape-string.php)などを使用してエスケープしましょう。

## その他クエリを書く時に気をつけていること
・文字列リテラルを式展開する(単純に見やすい)

```PHP:PHP
$query = "SELECT * FROM items WHERE name = {$name}";
```
・標準SQLではテキストはシングルクォートで囲むこと

MySQLではダブルクォートでも動きますが他のRDBMSでは動かないので、シングルクォートで書くほうが無難です。
○ `SELECT * FROM items WHERE name = 'apple'`
× `SELECT * FROM items WHERE name = "apple"`


## 参考にした資料
>安全なSQLの呼び出し方
https://www.ipa.go.jp/files/000017320.pdf

など
Fabric を使って FreeBSD に pkg をインストールする方法

構成管理ツールのFabricを使ってFreeBSDにpkgをインストールしてみます
fabricのcuisineを使って冪等性を持たせます（下記の記事を参考にしました）
https://qiita.com/techys/items/71983349a84683959e86

fabricを実行するホストのOSはFreeBSD以外でも大丈夫ですが
今回はFreeBSDから実行してみます

pkgを使ってfabricとcuisineをインストールします

```
$ sudo pkg install py27-fabric py27-cuisine
```



fabfile.pyを下記の内容にします

```
# coding: utf-8
from fabric import api as fab
import cuisine

# この3行を設定しておけばfabricはFreeBSDで動作しそう
fab.env.shell = '/bin/sh -c'
cuisine.select_package("pkgng")
cuisine.select_os_flavour("bsd")

def install():
        cuisine.package_ensure('zip ja-nkf')
```

fabricを実行

```
fab -H "リモートホスト名" install
```
これでリモートホストにzip ja-nkfがインストールされます
ng add で始める Ignite UI for Angular

*2018/12/04(Wed) 時点の情報に基づいています*

## `ng add` を使った超簡単な方法
Ignite UI for Angular は v7.0.2 で `ng add` に対応したので、初期セットアップがとても楽になりました。
https://github.com/IgniteUI/igniteui-angular/releases/tag/7.0.2


### 新規プロジェクトから始める
これから初めてアプリケーションを作ろうという人はこちら。

```
ng new my-app　--style=scss
cd my-app
ng add igniteui-angular
```
たった3行で完了です！


### 既存プロジェクトから始める
既に作った、あるいは、作りかけのアプリケーションがある人はこちら。

```
cd existing-app
ng add igniteui-angular
```
たった2行で完了です！

### エラーが出る場合
Windows 環境で確認している事象ですが、以下のエラーメッセージが表示されることがあります。

>The package that you are trying to add does not support schematics. You can try using a different version of the package or contact the package author to add ng-add support.

その場合、明示的に最新バージョンを指定することで解消できます。

```
ng add igniteui-angular@latest
or
ng add igniteui-angular@7.0.2
```

### プロジェクトに追加した際の注意点
`nd add` を行なった場合、以下のファイルに変更が入りますが、
- package.json
- angular.json
- src/index.html
- src/app/app.module.ts
特に `angular.json` の変更に注意が必要です。

```
  "scripts": [
    "./node_modules/hammerjs/hammer.min.js"
  ]
```
`HammerJS` を `scripts` オプションに追加していますが、これが問題となることがあります。

例えば、`Angular Material` など、`HammerJS` への依存があるパッケージを使用している場合、`main.ts` や  `pollyfill.ts` などで既に import している場合があると思います。それだと二重でバンドルされてしまうことになるので import を削除するか、あるいは `scripts` の方を削除してください。

## igx-grid を表示してみよう
セットアップが爆速で完了したので、何か表示してみたいと思います。 Ignite UI for Angular の目玉のグリッドコンポーネントである `igx-grid` でやってみます。

- src/app/app.module.ts
- src/app/app.component.ts
- src/app/app.component.html

に手をいれます。

```typescript:app.module.ts
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';


import { AppComponent } from './app.component';
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';

// igx-grid を使うためにモジュールを import
import { IgxGridModule } from 'igniteui-angular';

@NgModule({
  declarations: [
    AppComponent
  ],
  imports: [
    BrowserModule,
    BrowserAnimationsModule,
    // ココ
    IgxGridModule
  ],
  providers: [],
  bootstrap: [AppComponent]
})
export class AppModule {}
```
```typescript:app.component.ts
import { Component } from '@angular/core';

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})
export class AppComponent {
  // データを用意
  data = Array.from({ length: 1000 }).map((_, i) => {
    const item = { id: i + 1 };
    Array.from({ length: 99 }).forEach((__, j) => {
      item[`column${j + 1}`] = j + 1;
    });
    return item;
  });
}
```
```typescript:app.component.html
<div style="width: 100vw; height: 100vh; padding: 16px;">
  <!-- データのバインド -->
  <!-- 列定義はデータから自動生成 -->
  <igx-grid [data]="data" [autoGenerate]="true"></igx-grid>
</div>
```
はい、出来上がりです！本当に簡単です！
![image.png](https://qiita-image-store.s3.amazonaws.com/0/70618/74b3a0a5-d352-406e-1af9-0e3721558e50.png)


## Ignite UI for Angular が気になった方はこちら
デモサイトで様々なサンプルを試すことができますので色々試してみてください！
https://jp.infragistics.com/products/ignite-ui-angular/angular/components/grid_virtualization.html
SPSS Modeler 18.2

SPSS Modelerの新バージョンの18.2が2018/12/4にリリースされました。


IBM Knowledge Center - IBM SPSS Modeler 18.2 の新機能
https://www.ibm.com/support/knowledgecenter/ja/SS3RA7_18.2.0/modeler_mainhelp_client_ddita/clementine/whatsnew.html

###〇新しいルック アンド フィール:
見た目は変わりましたが操作や機能は変わりませんでした。日本語GUIです。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/223763/70c9b047-0bde-0609-3662-605cad840d08.png)


18.1.1以前の見た目にすることもできます。
ツール＿オプション＿ユーザーオプションを選びます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/223763/b41681eb-b604-a6ae-1b44-dc10cb111b3b.png)

表示タブの外観の設定で「SPSSスタンダード」を選び、OKで閉じ、Modelerを再起動します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/223763/6f087f76-142a-0ea9-af17-18629dd37bab.png)

以下のように18.1．1以前の見た目に戻ります。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/223763/09584201-d1d5-3072-878e-7126c9aa6586.png)

###〇新しいデータ ビュー
右クリックで様々なグラフやデータ検査で見ていたような情報をみることができるようになりました。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/223763/7eba8351-b48e-4c2b-253f-aaa99188bd4b.png)


![image.png](https://qiita-image-store.s3.amazonaws.com/0/223763/c71455ed-cba9-1880-5d68-85d58dc38ca9.png)

以前からリクエストのあった相関行列も表示できます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/223763/69f68bd1-3130-12ac-08cc-f8dfd39b4132.png)


なお、上の機能をノード化してほしいと思われた方は以下でぜひVoteをお願いします。

https://ibm-data-and-ai.ideas.ibm.com/ideas/MDLR-I-321

###〇IBM Data Warehouse
Db2 Warehouseでデータベース内マイニングが可能になりました。大量データの分析に有効です。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/223763/2a261f05-9cf9-d0b4-06a1-5c2aef560b8c.png)


###〇新しいモデリングノード
-ガウス混合ノード
-カーネル密度推定 (KDE) ノード
-Hierarchical Density-Based Spatial Clustering (HDBSCAN) ノード
-多層パーセプトロンAS

###〇JSON ノード
JSONデータの読み書きがサポートされました。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/223763/84066e3c-3d62-975e-81c5-d6d2746834c5.png)

注意：
テストをした環境は18.1.1が入っていたのですが、18.1.1をアンインストールしてからでないと導入に失敗しました。環境依存の問題かもしれませんが、念のため記載します。


＜参考＞
発表レター
https://www-01.ibm.com/common/ssi/ShowDoc.wss?docURL=/common/ssi/rep_ca/2/760/JAJPJP18-0592/index.html&request_locale=ja

Release Notes - IBM SPSS Modeler 18.2
http://www-01.ibm.com/support/docview.wss?uid=ibm10720105

Downloading IBM SPSS Modeler 18.2
http://www-01.ibm.com/support/docview.wss?mhq=modeler%2018.2&mhsrc=ibmsearch_a&uid=ibm10720109

Detailed system requirements for a specific product
https://www.ibm.com/software/reports/compatibility/clarity/softwareReqsForProduct.html
2018/12/5 11時時点ではまだ情報がありませんでした。
ただ18.1.1でなくなっていたModeler ServerのAIX版のモジュールが用意されていることは確認しました。

また、Analytic Server 3.1.2とCADS8.2も同時にリリースされています。

# SPSS Modelerのリリース履歴 - Qiita 

https://qiita.com/kawada2017/items/a1a8c639fc8f6c53e3b6
Rad Studio > Documentation > FMXタグとFireMonkeyタグが混在する状況の今後


- [VCL の概要](http://docwiki.embarcadero.com/RADStudio/Tokyo/ja/VCL_%E3%81%AE%E6%A6%82%E8%A6%81)
- [FireMonkey](http://docwiki.embarcadero.com/RADStudio/Tokyo/ja/FireMonkey)
    - `注意： FireMonkey（FMX）とビジュアル コンポーネント ライブラリ（VCL）は互換性がないため`...


今後もQiita上においてFireMonkey(FMX)の記事が増えていくと思われる。

問題は、FireMonkeyタグとFMXタグのどちらを使うのか?

公式の和訳ヘルプ自体がFireMonkeyという記載が多く、FMXを使う例は同サイトの[表示]ボタンで見つかる一例しかない (英語版）。
http://docwiki.embarcadero.com/Libraries/Tokyo/en/FMX

情報の検索者はどちらのタグを使って探すのか？
毎回二つのタグを探すことになるのだろうか。

可能であるなら

- 二つのタグをつけておく
    - Qiitaのタグが5つという制限にひっかかる?
- 一つのタグの場合、いずれかのタグに統一する

### 私見

VCLはVisual Component Libraryとして検索する人は少ない。
それに合わせてFMXがいいと思う。

一方で、IDE上のメニュー表記自体は「FireMonkey」。

どちらを使うか迷うところ。
カスタム django-admin コマンドを実装して、外部からアプリ内のモデルを使う


# 背景
cronを使ったバッチ処理などで、アプリ内のモデルを使ってDBを読み書きしたい場合があります。
しかし、コマンド用の.pyファイルを上位ディレクトリに置いて、アプリ内のモデルをimportして使おうとすると、```ValueError: attempted relative import beyond top-level package``` とエラーが出て、アプリのディレクトリ外からは呼び出せません。

そこで、カスタム django-admin コマンドとして実装します。

詳しくは、公式ドキュメントの「[カスタム django-admin コマンドの実装](https://docs.djangoproject.com/ja/2.1/howto/custom-management-commands/)」に解説があります。

環境は、Python 3.7.0、Django 2.1.3 です。　

# 作成手順

- アプリ内に、maangement/commands ディレクトリを作成する
- その中に、コマンド名.pyを作成する(以下では、crawler.py)

以下のようなフォルダ構成になります。

```
├── app1
│   ├── __init__.py
│   ├── admin.py
│   ├── apps.py
│   ├── management
│   │   └── commands
│   │       └── crawler.py ★これ
│   ├── models.py
│   ├── urls.py
│   └── views.py
├── myproject
│   ├── __init__.py
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
└── manage.py
```

- コマンド名.pyの中身を記述する


```crawler.py
from django.core.management.base import BaseCommand, CommandError
from app1.models import Topic

class Command(BaseCommand):
  help = 'crawler for test.'

  def handle(self, *args, **options):
    t = Topic.objects.all()
    self.stdout.write(self.style.SUCCESS("all Topic=%s" % t))
```

- 詳細
    - ```from django.core.management.base import BaseCommand, CommandError```
   - handleメソッドに、実行したい内容を記述
   - モデルもimportして利用できる
   - 文字列を出力したい場合は、self.stdout経由で出力
   - help変数に説明を記述


# 確認

- ```$ python manage.py help```で表示されるコマンド一覧に、追加したコマンドが表示される

```
Type 'manage.py help <subcommand>' for help on a specific subcommand.

Available subcommands:

[auth]
    changepassword
    createsuperuser

[app1]
    crawler
(略)
```

- ```$ python manage.py help crawler```で、作成したコマンドのヘルプが表示される

```

usage: manage.py crawler [-h] [--version] [-v {0,1,2,3}]
                         [--settings SETTINGS]
                         [--pythonpath PYTHONPATH] [--traceback]
                         [--no-color]

crawler for test.

optional arguments:
  -h, --help            show this help message and exit
  --version             show program's version number and exit
  -v {0,1,2,3}, --verbosity {0,1,2,3}
                        Verbosity level; 0=minimal output, 1=normal output,
                        2=verbose output, 3=very verbose output
  --settings SETTINGS   The Python path to a settings module, e.g.
                        "myproject.settings.main". If this isn't provided, the
                        DJANGO_SETTINGS_MODULE environment variable will be
                        used.
  --pythonpath PYTHONPATH
                        A directory to add to the Python path, e.g.
                        "/home/djangoprojects/myproject".
  --traceback           Raise on CommandError exceptions
  --no-color            Don't colorize the command output.
```


- ```$ python manage.py crawler```で、実行する

```
all Topic=<QuerySet [<Topic: テスト記事1>]>
```

# バージョン？？

ヘルプで出るように、```$ python manage.py crawler --version```でバージョンが表示されますが、何も定義しないと、Djangoのバージョンが表示されるようです。

# 公式ドキュメント

- [カスタム django-admin コマンドの実装](https://docs.djangoproject.com/ja/2.1/howto/custom-management-commands/)


# カスタム django-admin コマンドに、独自引数を追加する

続きを書きました。[カスタム django-admin コマンドに、独自引数を追加する](https://qiita.com/jansnap/items/459e73af774a5dc8edf8)
Helm cheat sheet

# Helm cheat sheet

よく忘れるからメモる

- [helmを使える状態にする](#cluster作成後にhelmを使える状態にする)
- [変数(values)を見てみたい](##chartで設定できる変数(values)を見てみたい)
- [chartの中身を見てみたい](#chartの中身を見てみたい)
- [installする](#installする)



## cluster作成後にhelmを使える状態にする

~~~sh
$ kubectl create -f ./rbac-config.yaml
$ helm init --service-account tiller

# コケたら多分 role作る権限がない
~~~

## chartで設定できる変数(values)を見てみたい

~~~sh
$ helm inspect values stable/prometheus > prometheus_values.yaml
~~~

## chartの中身を見てみたい

どんなmanifestが作られるのか

~~~sh
$ helm fetch ${chart_name}    # e.g. stable/prometheus
$ helm template ${chart}.tgz  # default
$ helm template ${chart}.tgz  -f prometheus_values.yaml # 指定したvaluesを適用した場合
~~~

## installする

~~~
$ helm install ${chart_name} --name ${install_name} --namespace ${k8s_namespace}  --values {values_file}

# e.g.
# helm install stable/prometheus --name prometheus --namespace prometheus --values prometheus/values.yaml
~~~
golangとHDLで協調シミュレーションする

　去年と全く同じ内容であれですが、今年はgolangで環境構築してみました。

# 概要
- goからexportされたfunctionをverilogから実行
- verilogのTaskをgoから実行


# 環境
- Linux環境（CentOS）
- Modelsim Intel FPGA Starter Edision 10.5b

# verilog
 verilogは、DPI-Cを使うのでSystemVerilogです。事前にコンパイルして`dpiheader.h`を吐くようにします。

```verilog:top.sv
`timescale 1ns/1ps

module top();
    import "DPI-C" context task go_test_func(input int,output int);
    export "DPI-C" task sv_test_task;

    bit [10:0] m;

    initial begin
        go_test_func(8,m);
        $display("m is %0d",m);
        $finish();
    end

    task sv_test_task(int n);
        $display("Hello World @SystemVerilog %0d",n);
    endtask

endmodule
```

# golang
　cgoで`dpiheader.h`を読み込んで一緒にmodelsim-GCCのincludeを参照するようにします。
また、LDFLAGには、`-shared`のオプションが必要でした。

```golang:test.go
package main

/*
#cgo CFLAGS: -I/XXXXX/modelsim_ase/include
#cgo LDFLAGS: -shared
#include "dpiheader.h"
*/
import "C"
import "fmt"

func main() {}

//export go_test_func
func go_test_func(n C.int, m *C.int) C.int {
        fmt.Println("HelloWorld @golang", n)
        C.sv_test_task(n)
        *m = 10
        return 0
}
```

# Makefile

 Makefileです。verilogは`dpiheder.h`を吐くようにします。
go側はModelsimが32bitバイナリである必要があるためGOARCHで386を指定する必要があります。


```:Makefile
Source
SV_FILE = top.sv
TOP_NAME = top
SRC = test.go
DPI_OBJ = golib
#Tool
VLIB = vlib
VLOG = vlog
VSIM = vsim

all : vlib vlog vsim

vlib:
        $(VLIB) work

vlog:
        $(VLOG) -sv -dpiheader dpiheader.h $(SV_FILE)

vsim: $(DPI_OBJ).so
        $(VSIM) -c -sv_liblist lib.txt $(TOP_NAME)  -do "run -all; quit -f"

$(DPI_OBJ).so :
        GOOS=linux GOARCH=386 CGO_ENABLED=1 go build -buildmode=c-shared -o $(DPI_OBJ).so $(SRC)

clean:
        rm -rf work $(DPI_OBJ).so $(OBJ) transcript *.wlf dpiheader.h
```

ライブラリリストのテキストも以下のように準備します。

```:lib.txt
#!SV_LIBRARIES
golib
```

# 実行結果
 きちんと実行できました。

```
vsim -c -sv_liblist lib.txt top  -do "run -all; quit -f"
Reading pref.tcl

# 10.5b

# vsim -c -sv_liblist lib.txt top -do "run -all; quit -f" 
# Start time: 20:04:36 on Dec 03,2018
# Loading /tmp/XXXX_dpi_22180/linuxpe_gcc-4.7.4/export_tramp.so
# Loading sv_std.std
# Loading work.top
# Compiling /tmp/XXXX_dpi_22180/linuxpe_gcc-4.7.4/exportwrapper.c
# Loading /tmp/XXX_dpi_22180/linuxpe_gcc-4.7.4/vsim_auto_compile.so
# Loading ./golib.so
# run -all
# HelloWorld @golang 8
# Hello World @SystemVerilog 8
# m is 10
# ** Note: $finish    : top.sv(12)
#    Time: 0 ps  Iteration: 0  Instance: /top
# End time: 20:04:37 on Dec 03,2018, Elapsed time: 0:00:01
# Errors: 0, Warnings: 0
```

# 雑感
　golangは今年から勉強を始めましたがc/c++の代替としては非常に魅力的だと思いました。
本当はLinuxとWindowsとで同一環境にするためgolangを使えたらいいなと思ったのですが現時点では難しそうでした。
（Windowsではcgo込の場合、共有ライブラリが吐けない?)
verilogのみの場合だと環境がどうしてもしょぼくなってしまうので、golangの豊富なライブラリが手間なく利用できるのは今後も役立ちそうです。
VoiceUI / VoiceUX デザイン 改善チェックポイント

## はじめに
多くのVUIアプリが世に出ていますが、その大半がVUIの設計を疎かにしています。
肝心要の機能をきちんと使ってもらえる様、今回は高クオリティのVUI設計を行うポイントについて解説します。

VUI/VUXの基本については、[VoiceUI / VoiceUX デザインことはじめ](https://qiita.com/Funyapu/items/1b4ba646573b57b09aa3)を御覧ください。

## 応答のチェックポイント
* 回答するべきタイミングが正確にわかるか
* 次に何をするべきか、なんと回答するべきか明確になっているか
* 自然な話し言葉になっているか、回答方法を強制していないか
* 適切なUIモジュールを利用しているか

### 回答するべきタイミングが正確にわかるか
応答の途中に質問を挟んでいないか、また最後が質問になっているかきちんと確認してください。

```
NG: 「こんにちは。寒いですが体調はいかがですか？今日はxxアプリをご利用頂きありがとうございます。」
NG:「こんにちは。xxアプリへようこそ」
```
※AoGでは短い選択肢の列挙を質問の後を行っても問題ありませんが、AlexaではNGとなりました。

### 次に何をするべきか、なんと回答するべきか明確になっているか
応答の最後、質問を聞く際に、アプリを知らないユーザーでも何を答えるか明確にわかるようになっている必要があります。
解決の方法としては、選択肢を提供、何・いつ・どこ等何を答えるか提案するなどがあります。
また、この質問のFallbackでどのように回答するか誘導するのもおすすめです。
（最初の応答に入れるのは、初回のみなど最小に留めるのが最適と思います）

### 自然な話し言葉になっているか、回答方法を強制していないか
どのプラットフォームにおいても、機械的になることを避けるよう指示があります。
なるべく、普段の会話の応答に近づけてください。「〜を選択してください」などは会話の応答ではありませんのでご注意下さい。

他によく見かけるのが、「〜と言ってね」「〜とお応えください」などの特定の言い方に強制するのは、機械的な応答とされますのでお避けください。

### 適切なUIモジュールを利用しているか
画像の表示や、SuggestionChipやリスト、カルーセルの表示など、提供されているUIを盛り込んでください。
特に選択系のUIの利用率は高く、ユーザーの利便性に大きく貢献するため、必ずご利用ください。
（オープン・クエスチョンの場合でも、例や頻繁に入力される内容を、SuggestionChipsに表示ください）
また、UIを利用する場合、音声デバイス用に選択肢を読み上げるのも重要です。

## 入力のチェックポイント
* クエリ・カバレッジ
* 自由な行動がとれるか

### クエリ・カバレッジ
VUIは自由なインターフェイスです。これまでのUIとは違い、ユーザーは思い思いに操作を行います。
どのようなユーザーの入力にも耐えられるよう、適宜クエリの追加を行います。
Intentの内容によって異なりますが、目安として、30フレーズは初期に設定ください。

また、EntityやSlotに名詞以外の、動詞や接続詞などをいれる設計がみられますが、その場合、MLがうまく動かない可能性があります。

### 自由な行動がとれるか
自由な命令を行いたいVUIのユーザーに、順番を強制するのは苦痛です。
必要なコンテキストの取得は適宜行ってください。

```
「三人で中華のお店行きたい」
「中華食べたい」『何人ですか』「3人」
「3人で行けるお店探して」『どのジャンルにしますか』「中華」
```

## 終わりに
遅刻しました。また思いついたら足します。
ところで今年のAdvent Calendar、スマートスピーカー関連が割れてる…
それだけ皆さんの関心が高いってことですね！
デザイナーによるプログラミング_コマンドラインの使い方(初級編)

今回は、コマンドラインの中から基礎的なコマンドを紹介させていただきます。

#コマンドラインとは？

文字だけでコンピューターを操作する技術で、開発を行う為に必要なツールです。
コマンドと呼ばれる命令を使ってコンピューターにプログラムを実行させます。(Macを使っている方は、「ターミナル」を使います。)



ターミナルを起動させると以下の様な画面が表示されます。


<img width="429" alt="default.png" src="https://qiita-image-store.s3.amazonaws.com/0/314179/0302455f-a54c-27a5-748b-73ceab5f693b.png">

#コマンド一覧


###$pwd

自分が今いる場所を調べるコマンド。(下記のケースだと/Users/akinoriotooが自分のいる場所となります。)

<img width="546" alt="スクリーンショット 2018-12-04 14.37.34.png" src="https://qiita-image-store.s3.amazonaws.com/0/314179/dec92ef1-0fc2-41e6-3c3f-b59226c3ace5.png">



###$ls

ディレクトリの中身を表示するコマンド。
<img width="596" alt="ls.png" src="https://qiita-image-store.s3.amazonaws.com/0/314179/60a6f194-a865-8c1b-0d93-4cec4ea63413.png">




###$cd [path]
change directory の略称で、ディレクトリを移動できます。(Desktopに移動してみました。)
<img width="529" alt="cd.png" src="https://qiita-image-store.s3.amazonaws.com/0/314179/df826388-ee23-a71c-1bee-d50e957fbaec.png">





###$mkdir [dir]

ディレクトリを作成します。(test_Aというディレクトリを作成してみました。)
<img width="589" alt="mkdir.png" src="https://qiita-image-store.s3.amazonaws.com/0/314179/2a71b300-f160-1f71-626f-2640247c73d2.png">





###$mv [file][dir]

ファイルやディレクトリを移動するとき、名前を変更するときにも使います。(test_Aのディレクトリ名をtest_Bに変更してみました。)
<img width="619" alt="mv.png" src="https://qiita-image-store.s3.amazonaws.com/0/314179/c108c872-9da0-a034-d041-25b0e0b5e82e.png">



###$cp [file][dir]

「copy」の略語で、ファイルをコピーします。(test_Bというディレクトリをコピーしてtest_Aというディレクトリを作成しました。)

※ディレクトリのコピーの為、オプションコマンドで、cpの後に-rを付けています。
<img width="644" alt="cp.png" src="https://qiita-image-store.s3.amazonaws.com/0/314179/503e3616-33c3-1670-a1f7-19260fa311bb.png">




###$rm [file][dir]

「remove」の略語で、ファイルを削除します。(test_Bというディレクトリを削除しました。)

※ディレクトリ削除の為、オプションコマンドで、rmの後に-dを付けています。
<img width="582" alt="rm.png" src="https://qiita-image-store.s3.amazonaws.com/0/314179/ca590dc5-aa21-f69b-6cb2-4c21cffcef2b.png">




###$touch [file]

空のファイルを作成します。(test.htmlというhtmlファイルを作成しました。)
<img width="598" alt="touch.png" src="https://qiita-image-store.s3.amazonaws.com/0/314179/21a47e8a-1e7a-6da8-3c1d-f9d493a8c029.png">




###$vi  [file]

ファイルを編集する。(**i**を入力し、インサートモード移行後にtest.htmlの中身を記述しました。)

※**:wq**で上書き保存。

<img width="345" alt="vi.png" src="https://qiita-image-store.s3.amazonaws.com/0/314179/0705a380-9bed-9414-c986-71bd96ed31b6.png">


###$exit

ターミナル終了
<img width="500" alt="exit.png" src="https://qiita-image-store.s3.amazonaws.com/0/314179/e673cdbb-6326-63cc-f20f-5a3423e3cbc1.png">





###まとめ

コマンドラインは、コンピュータに対するプログラムの実行や操作を全て文字だけを使って行います。キー入力の手間やユーザーが覚えておく必要のある知識などを考えると、やや上級者向きであり、時代に逆行する感もありますが、アプリケーション起動時のスイッチの指定やシステムの設定などGUIでは難しい処理も、コマンドラインでは簡単に行うことができ、慣れると各作業も早くなるので、デザイナーでも覚えておいて損はないかと思います。
合成数列の和 Advent Calendar 2018 bash 編

__注意: [「合成数列の和 Advent Calendar 2018」](https://qiita.com/advent-calendar/2018/composite-number)の9日目の記事になります。__

詳細な問題内容はアドベントカレンダーの該当記事に譲るとして、ごく簡単にまとめておくと「100以下の自然数nが与えられたとき、1番目からn番目までの合成数の和を求めなさい」というもの。本記事ではbash編で、回答は以下の通りです。

```bash:qiita.sh
#!/bin/bash
n=$1
yes | awk '{print NR}' | factor | awk 'NF>2{print NR}' | head -${n} | paste -sd+ | bc
```

これを`qiita.sh`として保存し、実行した結果は次の通りになります。

```bash
$ bash qiita.sh 2
10
$ bash qiita.sh 4
27
$ bash qiita.sh 10
112
$ bash qiita.sh 100
7059
```

***

以下は簡単な解説になります(´・ω・)

`yes | awk '{print NR}'`ですが、ここでは上限を設けず、自然数の数列を生成しています。`awk`の`NR`は現在読み込んでいる行の行番号を保持する組み込み変数で、行を読み込むたびに1,2,3,...と増えていきます。そして「読み込む」ための行を生成するために`yes`コマンドを利用しています。(参考:[「上限を設けずに整数列を生成したい」](https://qiita.com/neko_the_shadow/items/00574464fb8f6b698deb))

`factor`は与えられた入力を素因数分解するコマンドで、その出力形式は次のようになっています。

```bash
$ seq 1 10 | factor
1:
2: 2
3: 3
4: 2 2
5: 5
6: 2 3
7: 7
8: 2 2 2
9: 3 3
10: 2 5
```

ところで合成数とは「2つ以上の素数の積で表される数字」と定義することができ、上記の例では4,6,8,9,10が合成数であるといえます。つまり`factor`の結果が3列以上になるものが合成数であり、それを`awk 'NF>2{print NR}'`でフィルタリングしています。

`head`は入力の先頭N行を標準出力に返すコマンドで、ここで「N番目までの合成数」を確定させています。

「N番目までの合成数」が確定したところで、これを合計する必要があります。`awk`を利用するのが一般的だと思いますが[^1]、せっかく(?)なので別の方法を採用しました。`paste`コマンドの`-s`オプションは標準入力から入力されたすべての行を結合して1行にするもので、結合時のデリミタは`-d`オプションで指定します。つまり`paste -sd+`では、入力される改行区切りの数列を`+`区切りに変換するということで、たとえば`4+6+8+9+10`というような結果を得ることができます。あとはこれを計算式として評価するだけなので、`bc`コマンドに食わせています。

[^1]: 例: `awk '{sum += $0} END{print sum}'`
PhpStormでコンストラクタインジェクションを手早く作る

※Windowsのキーで説明します。Macの方は適宜置き換えてください。

# 事前状態
* `HogeManager`

```php
class HogeManager
{
}
```

* `FugaRepository`

```php
class FugaRepository
{
}
```

## やりたいこと
`FugaRepository`を`HogeManager`にコンストラクタインジェクションしたい。

# 手順

`HogeManager`の中で`__`（アンダースコアを2回）を入力
→入力候補が出てくる
※もしフォーカスが外れるなどして入力候補が消えてしまった場合は、文字の最後にカーソルを移動して`Alt`+`スペース`
![01.png](https://qiita-image-store.s3.amazonaws.com/0/68159/74d4c8f1-ae66-bb0a-8425-ac5ca0c7875f.png)
`public function __construct(){...}`を選ぶ
→コンストラクタが作られる
![02.png](https://qiita-image-store.s3.amazonaws.com/0/68159/16ba5159-dbe1-6820-1d45-13c56c0c2f9a.png)
コンストラクタの引数に`Fuga`と入力
![03.png](https://qiita-image-store.s3.amazonaws.com/0/68159/5f7df7ad-93ee-2648-4c8c-a036438f4c57.png)
`FugaRepository`を選ぶ
![04.png](https://qiita-image-store.s3.amazonaws.com/0/68159/3b71d1e0-a875-0823-ec8b-a17cc80a3998.png)
スペースを空けて`$`と入力
![05.png](https://qiita-image-store.s3.amazonaws.com/0/68159/ae32e447-9c17-46a6-a5a4-d1606f487b96.png)
`fugaRepository`を選ぶ
![06.png](https://qiita-image-store.s3.amazonaws.com/0/68159/c81c025f-50cd-0097-794e-0ae3a0cd6e71.png)
`$fugaRepository`にカーソルが合っている状態で`Alt`+`Enter`
![07.png](https://qiita-image-store.s3.amazonaws.com/0/68159/f3aa16e9-6ffb-6879-be81-9eb4d75b9043.png)
`Initialize fields`を選ぶ
![08.png](https://qiita-image-store.s3.amazonaws.com/0/68159/3fcc468a-51c4-8da3-eb4a-a13dfa2152b4.png)
そのまま「OK」（`Enter`）
→プロパティ定義、プロパティのPHPDoc、コンストラクタ内での値の代入が作られる
![09.png](https://qiita-image-store.s3.amazonaws.com/0/68159/b665e6b7-8797-7d27-e3b4-53d3dcb56c74.png)
もう一度、`$fugaRepository`にカーソルが合っている状態で`Alt`+`Enter`
今度は`Generate PHPDoc for function`を選ぶ
→コンストラクタのPHPDocが作られる。
![10.png](https://qiita-image-store.s3.amazonaws.com/0/68159/957f0c76-c38d-6a79-76b3-38067dd382db.png)
完成
![11.png](https://qiita-image-store.s3.amazonaws.com/0/68159/80943fe5-0201-2a2c-e8d4-594d353f8af1.png)

ここまで、ほとんど自分でコード書いてません。
**It's cool!!**

# その他のよく使うショートカット

とりあえずこれだけでも覚えておくと捗ります。

* 入力補完は`Alt`+`スペース`
* 波下線が出てたら`Alt`+`Enter`
* 定義元にジャンプは`Ctrl`+`b`
* 名前の変更は`Shift`+`F6`
* `namespace`の変更は`F6`
ブラウザ上でコードを試すコードサンドボックス系サイトまとめ

本記事は[OPENLOGI AdventCalendar](https://qiita.com/advent-calendar/2018/openlogi) 5日目の記事です。

8月からオープンロジ社に入社したエンジニアの @ykhirao です。
前職までRails＋Vueだったので、現職のReact+Laravel or Vue/Nuxt+Laravelに慣れるのに必死です。

優秀な[メンバー](https://qiita.com/organizations/openlogi/members)が20人くらいいてかなり相談しやすい環境なので助かっています。

さて本題、

# ブラウザ上でコードを試すコードサンドボックス系まとめ

## 問題

この時期、アドベントカレンダーの検証用に、たくさんnode環境を作らないといけないじゃないですか。

その上で

```
Fryday, November 30th
Munetaka [10:58 AM]

vueをsfcでブラウザのみで動かす方法ってあるんすか 
アドベントカレンダーの記事のリソース検証すんのに、わざわざnode環境作るのめんどい :thinking: 
```

Slackでこんな発言を観測したので、環境構築いらずに始めれるサービスを並べてみようと思います。

`めんどい` : 怠惰はエンジニアに欠かせない資質のひとつなので彼はいいエンジニアですね。

## JSFiddle

![Screenshot from 2018-12-05 13-21-23.png](https://qiita-image-store.s3.amazonaws.com/0/112929/93dce45e-aa74-b92a-b95b-f1038388445a.png)

![Screenshot from 2018-12-05 13-21-47.png](https://qiita-image-store.s3.amazonaws.com/0/112929/e1ec44e9-6da8-76c5-c021-53dd99c56995.png)

一瞬でVue.js環境作成できました。

## CodePen

![Screenshot from 2018-12-05 13-28-01.png](https://qiita-image-store.s3.amazonaws.com/0/112929/af07259e-9ba7-c569-1b17-18bc0ad20937.png)

html, css, jsのサンプルコードを共有するにはいい感じのサービスかと思います。

## CodeSandbox

![Screenshot from 2018-12-05 13-29-02.png](https://qiita-image-store.s3.amazonaws.com/0/112929/427c80ec-8ff4-056e-e4eb-3a8ce3451e32.png)

![Screenshot from 2018-12-05 13-29-13.png](https://qiita-image-store.s3.amazonaws.com/0/112929/81499205-47a6-1898-4e22-f0ddd82eb666.png)

こちらもJSFiddleと同じでテンプレートから選択してすぐにVueファイルが作成されました。

例えば[こちら](https://codesandbox.io/s/6lm4248qjr)はVue-test-utilsのチームが使っているコードサンドボックスで、何か問題があるとこのテンプレートで問題を再現してからIsuue立てたりしています。すでにJest+Vue-test-utilsでのテストが書かれているので、試したい方はぜひ使ってみてください。

https://codesandbox.io/s/6lm4248qjr


## PLAYCODE

![Screenshot from 2018-12-05 13-31-36.png](https://qiita-image-store.s3.amazonaws.com/0/112929/05a0b252-fb05-b4b3-ce5f-cfe385b40d7f.png)

Vue系のプラグインを入れることもできます。テンプレート選択式ではないです。

## 最後に

作ってから気づいたのですが2017年度版はpaizaさんがまとめてくれてました。[こちら](https://paiza.hatenablog.com/entry/2017/01/30/%E3%80%902017%E5%B9%B4%E7%89%88%E3%80%91%E3%83%96%E3%83%A9%E3%82%A6%E3%82%B6%E4%B8%8A%E3%81%A7%E4%BD%BF%E3%81%88%E3%82%8BJavaScript%E9%96%8B%E7%99%BA%EF%BC%86%E5%AE%9F%E8%A1%8C%E7%92%B0%E5%A2%83Web)






.
Nuxt.jsで作ったWebサイトをささっとGithub Pagesに公開する

# 設定系

## gitignoreからビルド先フォルダを外す

~~dist/などが登録されている事が多いので、先に外しておきましょう。~~

~~dist配下をpushすることができないとGithub Pagesでは公開できません。~~

ビルドフォルダはpushしないしgh-pagesに配下のみを全てpushするのでもしかしたらいらないかも

## nuxt.config.jsを編集


### faviconのパスにリポジトリ名を記述

```javascript
  head: {
    title: pkg.name,
    meta: [
      { charset: 'utf-8' },
      { name: 'viewport', content: 'width=device-width, initial-scale=1' },
      { hid: 'description', name: 'description', content: pkg.description }
    ],
    link: [
      { rel: 'icon', type: 'image/x-icon', href: '/リポジトリ名/favicon.ico' }
    ]
  },
```

### routerのbaseにリポジトリ名を記述

```javascript
  router: {
    base: '/リポジトリ名/'
  }
```

ここを編集するとlocalhostで立ち上げて見るときのパスも変わってしまうので注意です。
 `localhost:3000/リポジトリ名` になるはず

また、static配下のパスにbaseのurlを付けていないとエラーが出て参照できなくなってしまうので地味に注意です。

# ビルド、デプロイ手順

## ビルドコマンド実行

何も変えていなければnpm scriptsにgenerateが登録されているので、それを使います。

```
npm run generate
or
yarn generate
```


## ビルド先フォルダのみをgh-pagesブランチに切り離してリポジトリにpushする

何度も叩くのであればこのコマンドもnpm scriptsに登録してもいいかもしれません。

```
git subtree push --prefix dist/ origin gh-pages
```

## 参考リンク

[GitHub Pages へデプロイ - Nuxt.js](https://ja.nuxtjs.org/faq/github-pages/)

[Github pages に 特定のディレクトリだけデプロイする - Qiita](https://qiita.com/mizchi/items/17e2eb04c34b18aff921)

[tmp: Nuxt.js を GitHub Pages で使う](https://fiahfy.blogspot.com/2017/12/nuxtjs-github-pages.html)
Donkey Car Commandメモ

# 関連Qiita

- [Donkey Carの作り方(RasPi側)
](https://qiita.com/akira-sasaki/items/c37468e88c9bbd739a65)
- [Donkey Car PS3 Joystick(RasPi側)](https://qiita.com/akira-sasaki/items/987ba17060637cff2c3e)
- [Donkey Carで動きそうなラジコン](https://qiita.com/akira-sasaki/items/753106d6ad9f62a31a40)
- [Donkey Carの作り方(Mac側)
](https://qiita.com/akira-sasaki/items/66f31a969712d8dea758)
- [Donkey Carの作り方(Windows側)](https://qiita.com/akira-sasaki/items/dc06b0ca21821fc8ef48)
- [Donkey Car Emulator(Mac側)](https://qiita.com/akira-sasaki/items/5e838b4f5125e25b4523)
- [Donkey Car学習(Mac側)](https://qiita.com/akira-sasaki/items/e0cc64dae5565b38987d)
- [Donkey Car Commandメモ](https://qiita.com/akira-sasaki/items/4097f9bdea46fb654a04)
- [Donkey Car Officialのドキュメント(リンク)](https://docs.donkeycar.com/)
- [AWS DeepRacerまとめ](https://qiita.com/akira-sasaki/items/c29282c281ca274d2691)

# donkeycar/management/base.py

```
donkey createcar

```

## Findcar

DonkeyCarのIPアドレスを調べてくれる。

```
donkey findcar

using donkey v2.5.1 ...
Looking up your computer IP address...
Your IP address: 192.168.2.24 
Finding your car's IP address...
Your car's ip address is:
```

## Calibrate

Donkey Car実機でのみ有効

```
donkey calibrate --channel 0
```

## Tubclean

```
donkey tubclean
```

## Tubhist

```
donkey tubhist
```

## Tubplot

``` 
donkey tubplot
```

## Tubckeck

```
donkey tubcheck
```

## makemovie

``` 
donkey makemovie
```

https://github.com/imageio/imageio-binaries/blob/master/ffmpeg/ffmpeg-osx-v3.2.4

のffmpeg-osx-v3.2.4を/Users/akira/Library/Application Support/imageio/ffmpegにコピー。

データの番号がつながっていないとうまくいなかない。

## Sim

Simulatorへのデータの流し込み。

```
donkey sim --type=categorical --model=/models/mypilot
```
実はbackground-imageにもinheritは使える

CSSの値継承で使われる `inherit` が `background-image` でも使えた話。

## サンプル

<p data-height="450" data-theme-id="5973" data-slug-hash="wQbpYp" data-default-tab="result" data-user="KazuyoshiGoto" data-pen-title="background inherit test" class="codepen">See the Pen <a href="https://codepen.io/KazuyoshiGoto/pen/wQbpYp/">background inherit test</a> by Kazuyoshi Goto (<a href="https://codepen.io/KazuyoshiGoto">@KazuyoshiGoto</a>) on <a href="https://codepen.io">CodePen</a>.</p>
<script async src="https://static.codepen.io/assets/embed/ei.js"></script>

よくあるサムネイルの一覧表示では `background-size:cover` で背景画像を敷き詰めるという方法があります。この手法は一般的ですが、表示幅によって見切れが発生します。

その見切れがイヤ！となると `background-size:contain` で対応できるのですが、`contain` の場合は幅が余ります。

|backgroud-size|効果|メリット・デメリット|
|---|---|---|
|cover|背景画像の短辺ベースではめ込まれる|要素内が隙間なく背景画像で埋め尽くされるが、画像が見切れる|
|cntain|背景画像の長辺ベースではめ込まれる|画像の全体が確実に表示されるが、要素内に余白ができる|

上記サンプルの手法は、

* `:before` に親要素の背景を継承し `cover` で見切れても引き伸ばす
* `:after` に親要素の背景を継承し `contain` で見切れず表示する

というハイブリッドな手法で実現しています。

## CSS

```css
.art {
  position: relative;
  width: 500px;
  height: 300px;
  margin: 30px auto 0;
  border-radius: 4px;
  overflow: hidden;
  background-size: contain;
  background-repeat: no-repeat;
  background-position: center center;
}
.art:before, .art:after {
  content: "";
  position: absolute;
  background-image: inherit;
  background-repeat: inherit;
  background-position: inherit;
}
.art:before {
  width: 110%;
  height: 110%;
  top: -5%;
  left: -5%;
  background-size: cover;
  filter: blur(10px);
  /*
  サイズを少し大きくしてネガティブマージンを取っているのは、
  blurによるフチのボケを回避してきれいに見せるため。
  */
}
.art:after {
  width: 100%;
  height: 100%;
  background-size: contain;
}
```

親要素の `.art` にはWordPressなど動的にサムネイルを設定する実用シーンを考慮しHTMLで `background-image` を埋め込んでいます。

疑似要素へ動的に背景をはめ込められないか考えたところ、 `inherit` を試したらうまく行ったという寸法です。

## まとめ

`inherit` の仕様上当然のことかもしれないのですが、「値を継承する」という先入観から画像も継承できることに目からウロコだったのでつい書き残しました。

画像パスもただの文字列なので値っちゃ値ですね。
プログラミングの勉強を始めました。。

# 簡単に自己紹介
PC使用歴は10年以上と長く、自作PCを組み立てたり、PCのことはとても好きなのですが、プログラミングは難しそうでなかなか足を踏み出せませんでした。
最近までミニ四駆とかピアノを趣味としていたのですが、大分落ちついてきたので、なにか新しいことを始めようと思いプログラミングを学んでみようということに・・・

ちなみに<a herf=http://pianoandlife.seesaa.net/>こちら</a>がピアノのブログ

#目標
WEBサービスやアプリ、スマホアプリを開発できるようになりたいと思っています。


# 何から始めようか・・
あるサイトで半年でアプリ開発ができるようになったと書かれており、最初に初めたのがPHPとのこと。
いろいろ検索してみたのですが、RubyやJAVAやPythonがいいなど書かれており迷ったのですが、
とりあえずホームページをHTML、CSS、PHPで作成して言語に慣れていこうかなと思いました。
PHPは初心者には向いているようなので・・・
もし間違っているようでしたらご意見いただければ嬉しく思います！

# やり始めたこと。
まずPHPでおすすめされていた「いきなりはじめるPHP」本と「スラスラわかるHTML＆CSSのきほん」という本を購入し、PHPの基本を今勉強中です。
OSはWINDOWS10　エディタはATOM　ブラウザはChrome
総合開発環境を使うべきなのかはまだわかっておりません。。
またWEB系だとサーバーを利用するのでOSはLINUXを使うべきなのかどうかもわかっておりません；
アドバイスいただけると嬉しいです！
AWS S3を使ったSFTP選手権 ～AWS Transfer for SFTP vs goofys vs s3fs～

##はじめに
S3にデータを保存してSFTPで取りに行きたい。。。
でも、何を使っていいのかわからない。。
そこでAWS  <font color="Tomato"> **SFTP選手権** </font> を開催することにしました！

##SFTP選手権 参加選手
 **①AWS Transfer for SFTP** 
　AWS Transfer for SFTPでユーザが使用できるS3のバケットを指定する
　リージョンは東京を利用する
 **②goofys** 
　本サービスはEC2インスタンス上でS3のバケットを指定し、マウントして使う
　インスタンスの種類はt2.microでAmazon Linux 2 AMI (HVM), SSD Volume Typeを使う
　リージョンは東京を利用する
**③s3fs** 
　本サービスはEC2インスタンス上でS3のバケットを指定し、マウントして使う
　インスタンスの種類はt2.microでAmazon Linux 2 AMI (HVM), SSD Volume Typeを使う
　リージョンは東京を利用する

##SFTP選手権 ルール説明
・下記項目の3本勝負とする
 **①コスト** 
　1時間の使用料、1GBのデータ転送料金を比較
　S3の使用料は考えないものとする
 **②パフォーマンス** 
　FileZillaを使い1GBのテキストファイルをアップロード / ダウンロードした際の速度を比較
 **③その他機能** 
　それぞれのサービスのメリット、デメリットを比較

##サービスの説明

###AWS Transfer for SFTP
AWS推奨のAmazon S3と連携したマネージドなSFTPサービス
2018年11月26日にローンチされたばかりの最新のサービスです
詳しくはこちら↓
https://aws.amazon.com/jp/blogs/news/new-aws-transfer-for-sftp-fully-managed-sftp-service-for-amazon-s3/

###goofys
EC2インスタンス上からAWS S3をNFSマウントするツール
インストールはこちらから↓
https://github.com/kahing/goofys

###s3fs
EC2インスタンス上からAWS S3をNFSマウントするツール
インストールはこちらから↓
https://github.com/s3fs-fuse/s3fs-fuse

##①コスト
| サービス名 |基本使用料(1時間)|データ転送料 in&out(1GB)|
|:------------:|:------------:|:------------:|:------------:|
| **AWS Transfer for SFTP**       |＄0.3       |＄0.04    |
| **goofys (EC2)**       |＄0.0152        |＄0*       |
|**s3fs (EC2)**        |＄0.0152        |＄0*      |

*基本使用料 (1ヵ月)は2018/12/5 のレート
*EC2のデータ転送料は1GB以降課金が発生

  **→EC2インスタンス立てる方が安そう…** 

##②パフォーマンス
| サービス名 |アップロード(1GB)| ダウンロード(1GB) |
|:------------:|:------------:|:------------:|
| **AWS Transfer for SFTP**       |156秒<br>(平均6.4MB/s)   |713 秒<br>(平均1.4MB/s)     |
| **goofys (EC2)**       |117秒<br>(平均8.5MB/s)   |141秒<br>(平均7.0MB/s)    |
|**s3fs (EC2)**        |131秒<br>(平均7.6MB/s)  |173秒<br>(平均5.7MB/s)   |

  **→goofysの勝ち！** 

##③その他機能
###AWS Transfer for SFTP
<メリット>
・読み書きの権限、ホームディレクトリなどをPolicyで定義し、ユーザーごとに割り当てることができる
・CLIでの設定がいらない
・サーバの冗長化がされている
・サーバの冗長化や冗長したサーバ間での同期が不要
<デメリット>
外部からのIP制限をAWS Transfer for SFTPだけで行うことができない

###goofys
<メリット>
・EC2インスタンスのため外部からのIP制限をルートテーブル、プロトコルの制限をセキュリティグループで行える
<デメリット>
・マウント後に対象ディレクトリにてchmodができないためユーザーグループごとに権限の設定が不可能
・goofysのインストールに、go1.9の環境が必要
・冗長構成にするにはインスタンスがもう一つ必要

###s3fs
<メリット>
・chmod/chownによる権限の変更が可能
・EC2インスタンスのため外部からのIP制限をルートテーブル、プロトコルの制限をセキュリティグループで行える
<デメリット>
・冗長構成にするにはインスタンスがもう一つ必要

##まとめ
「Linuxは苦手！GUIで簡単に設定、運用をしたい！」→**AWS Transfer for SFTP！** 
「何よりも転送スピード重視！」→  **goofys！** 
「ユーザへの権限、IPの制限を自分でカスタマイズしたい！」→ **s3fs！**
バグ追跡ツール Bugsee 試して見た

これは [ゆめみ Advent Calendar 2018](https://qiita.com/advent-calendar/2018/yumemi) の7日目の投稿です。

# Bugsee
[https://www.bugsee.com/](https://www.bugsee.com/)

「Bugsee」は、アプリのバグやクラッシュのレポートツールです

## 特徴

- アプリの動作情報(画面やログ)を収集
    - 端末のスペック、ビルド、OSバージョン等の情報
    - 画面を(タッチ動作を含む)動画で自動保存
    - ネットワークトラフィック、リクエストとレスポンスが見れる
    - 簡単セットアップ
        - iOS, AndroidはCodeで1行追加
- 簡単な報告機能
    - スクリーンショットやシェイク(オプション)
- 多彩なプラットフォーム
    - iOS, Android, Cordova, React, Unity, Xamarin, Chrome

## 導入方法(iOS Swift)

https://docs.bugsee.com/sdk/ios/installation/

- インストールはCocoapods, Carthage対応済み

```swift
import Bugsee

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    // ...other initialization code

    Bugsee.launch(token:"### your token ###")

    return true
}
```

## 報告方法

- スクリーンショットを取るだけ
    - 動画やログは自動で収集、報告されます

## 管理画面

- ダッシュボード
<img width="1317" alt="dashborad.png" src="https://qiita-image-store.s3.amazonaws.com/0/228438/fd7ef308-9bb3-8109-13bb-b00312b13ae2.png">

- レポート詳細
<img width="830" alt="detail.png" src="https://qiita-image-store.s3.amazonaws.com/0/228438/2c1e5546-0e70-1a7e-f2ea-b6bc4c487515.png">

## 連携統合

- slack、Hipchat
- JiraとかRedmine、Trello、Github、Gitlabなど

## プライス
[Pricing](https://www.bugsee.com/pricing/)
![price.png](https://qiita-image-store.s3.amazonaws.com/0/228438/5be5a300-4692-65a5-203b-6d361d85dc5f.png)

- LITE
    - 無料
    - 基本機能
    - 5デバイスまで
    - データ保持3日間
    - 30日間まで

## 感想

- テスターからのバグ報告で動画が付いているから、再現方法や操作など聞く必要が少ない
- 個人で使うには高い
- Feedback機能として使うにはちょっと設定が必要
- これだけでバグ管理するにはダッシュボードがよわい感じ
PowerApps で Twitter クライアントを作ろう！（投稿編）

# とりあえずあとでしっかりまとめます！

PowerApps のTwitter コネクタの使い方はこちらのサイトを参考
https://docs.microsoft.com/ja-jp/powerapps/maker/canvas-apps/connections/connection-twitter

だが、これ本当なのか？って疑うレベルで怪しいｗ

なので、以下にとりあえず箇条書き

```
Twitter.Tweet(UploadedImage1.Image,{tweetText:"ツイートテキスト")})
```

なお、UploadedImage1.Image は
こちらのコントロールを使用しました。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/269159/b0413e1c-2d40-91ec-56b0-2c90203e8073.png)

とりあえず以上！