OmniAICreator/Qiita-1.07M huggingface dataset:
Google Cloud Platform 、Console アクセス時の Multi-Factor Authentication

GCP Console login時にMFAを追加
# 方法はたくさんある
詳しくはhttps://cloud.google.com/solutions/securing-gcp-account-security-keys
私はiPhoneなので[Google Authenticator](https://itunes.apple.com/jp/app/google-authenticator/id388497605?mt=8)をダウンロード

# 至って簡単なのでやるべし
1. 上記ドキュメントに従って設定したいGoogleアカウントの2要素認証を”有効”にする
2. PINコードを飛ばす、受け取る、画面に戻り入力する
3. 今回はAuthenticator appを使うのでリンクをクリック、二次元バーコードが出てくる
4. iPhoneでGoogle Authenticatorを起動、二次元バーコードを読み取る
![GCP_MFA_3rd_Q.png](https://qiita-image-store.s3.amazonaws.com/0/149993/1966821d-d412-d4b3-cbec-e440e42af834.png)
5. Googleアカウントの設定を完了する

# 試す
1. GCP consoleを一旦、ログアウト
2. GCP consoleへログインすると、2要素認証画面へ遷移して6桁のコード入力が求められる
![GCP_MFA_4th.png](https://qiita-image-store.s3.amazonaws.com/0/149993/216ab8a8-ef6a-a507-4dff-60bf2206e329.png)

無償で全て完結するのでGCP Consoleを守る為、最低限やれる事はやりましょう。

## 備考
iPadにGmail等アプリ、二要素認証をiPhoneで受け取るとる、受け取った人以外はログインできない様にする？とかがスタンダードだとすると特に目新しくはないですか、ね。
JSのProxyでCallableなクラスを作る

## はじめに

例えばD3.jsを使っていると以下のようなコードがたくさん現れます。

```javascript
const manyBody = d3.forceManyBody()
  .strength(200)
  .distanceMax(400)
  .distanceMin(60)

manyBody(0.5)
```

メソッドチェインでオブジェクトを初期化して、作成されたオブジェクトは関数として呼び出すことができます。
このようなオブジェクトを綺麗に実装するのが目標です。

## 従来の方法

いわゆるES5でのやり方は大雑把に以下の通りです。

```javascript
var myPlugin = function () {
  var plugin = function () {
    // 関数として呼び出した時の処理
    // ...
  }

  plugin.aMethod = function () {
    // インスタンスのメソッド
    // ...
    return plugin
  }

  return plugin
}
```

まず `plugin` の実体を返す `myPlugin` 関数で全体を括ります。
関数として呼び出した時の振る舞いを `plugin` 関数として実装します。
そして、 `plugin` のメソッドを追加していき、最終的に `plugin` を `myPlugin` の戻り値として返します。
D3.jsの実装も大体このようになっています。

使い方は以下のようになります。

```javascript
var p = myPlugin()
  .aMethod()

p()
```

## classを使った実装

最近のJSに慣れているとclassを使って実装したい気持ちになると思います。
まずは以下のように素直に実装します。

```javascript
class MyPlugin {
  constructor () {
    // インスタンスの初期化
    // ...
  }

  aMethod () {
    // インスタンスのメソッド
    // ...
    return this;
  }

  execute () {
    // 関数として呼び出した時の処理
    // ...
  }
}

const myPlugin = () => new MyPlugin()
```

さて、classを使ってしまうと作成したインスタンス `p` を `p()` のように呼び出すことはできません。
ここでは、代わりに `execute` メソッドを追加し、その役割を持たせることにします。
また、最初のバージョンと同じ使い勝手にするために、インスタンスを生成する `myPlugin` 関数を作っておきます。

使い方は以下のようになります。

```javascript
// const p = new MyPlugin() としてもOK
const p = myPlugin()
  .aMethod()

p.execute()
```

これでも十分かなとは思うのですが、D3.jsでは特定のメソッドやプロパティを持っていて、なおかつ呼び出し可能なインスタンスを引数としてとるAPI（例えばd3-forceのプラグインを作るう場合など）が存在するため、単純なclassベースの実装では対応できません。

## classとProxyを使った実装

さて、前述の課題を克服するために、いよいよ本題のProxyを使った実装を行います。
ProxyはES2015で追加された機能です。
(参照：https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Proxy)

最初に実装を示します。

```javascript
class MyPlugin extends Function {
  constructor () {
    super()

    // インスタンスの初期化
    // ...

    return new Proxy(this, {
      apply (target, thisArg, argumentsList) {
        return target.execute(...argumentsList)
      }
    })
  }

  aMethod () {
    // インスタンスのメソッド
    // ...
    return this;
  }

  execute () {
    // 関数として呼び出した時の処理
    // ...
  }
}
```

変更箇所は2箇所です。
1つ目は `constructor` で `this` をラップしたProxyインスタンスを返すようにしたことです。
Proxyのハンドラで `apply` メソッドを定義することで、インスタンスの呼び出しをトラップすることができます。
2つ目は `MyPlugin` が `Function` を継承するようにしたことです。
これは、Proxyで `apply` をトラップするためには、ターゲットオブジェクトが呼び出し可能である必要があるためです。

`apply` メソッドの第1引数の `target` は、Proxyでラップされていない `MyPlugin` インスタンスです。
そのため、 `target.execute(...argumentsList)` と実装することで、`p()` が `p.execute()` と同じ動きになります。
`MyPlugin` に `execute` メソッドを持たせたくない場合は、クラス内ではなくてプレーンな関数としても問題ありません。

実は、Functionを継承すればProxyを使うことは必須ではありません。
ただし、Functionクラスを使用する場合、その実装を文字列として与える必要があり、使い勝手が良いとは言い難いです。

さて、これでES5版と同じように使うことができるようになりました。

```javascript
const p = myPlugin()
  .aMethod()

p()
```

## おわりに

今回は触れませんが、従来版では外部からアクセスできないprivateなフィールドを作るという意味合いもありました。
ES2015クラスで同様のことを行う場合はWeakMapを使ったprivateなフィールドの実現などが可能です。
ただし、その際にはProxyでラップされたインスタンスとオリジナルのインスタンスの違いなどを意識しなければなりません。
この辺りは[class-fields](https://github.com/tc39/proposal-class-fields)の実装が進めばもう少し楽になるでしょう。
C++ Builder > difference > ControlとComponentの違い

```txt:動作環境
Rad Studio 10.2 Tokyo Update 2
```

Visual StudioでWindow上に配置するものは「Control」と認識している。

Rad Studioではそれは「Component」と認識していたが、Tokyoを使い始めて「Control」の表記が気になった。

ControlとComponentの違いについて調べたところ、以下が分かりやすかった。

http://www.delphigroups.info/2/3/706418.html
> TComponent is the common ancestor of all component objects in Delphi.
TControl is the abstract base class for all visual components.
Everything that goes into the component palette is a Component.
Everything that goes into the component AND is something that the USER of
the program can control by using mouse or keyboard is a Control.
...

以下のように認識した。

- TTimerはComponent
- TEdit, TLabelなどはControl (Componentと呼んでも間違いではない)
ラズパイでオフィス環境をセンシングしてグラフ化する【概要編】(1/4)

ラズパイで気温、湿度、気圧、照度、co2濃度を計測してSaaSでグラフ化してみました。
すでに先人の知見がまとめられているネタですが・・
![mig.jpg](https://qiita-image-store.s3.amazonaws.com/0/26808/df5a1594-cb4b-55c9-03cd-e94f8ab2ca11.jpeg)


## 用意したハード
次の通りです。

|ハード|補足|
|:-----------------|:------------------|
|センサー 数種|後述|
|ラズパイ 一式|Raspberry Pi 3 Model B、microSDカード、電源|
|その他|ブレッドボード、ピンヘッダ、ジャンパ線など|

WiFi環境だったので上記のラズパイを選択しました。
OSは次の通り。


```bash
pi@raspi-is:~ $ cat /etc/os-release 
PRETTY_NAME="Raspbian GNU/Linux 9 (stretch)"
NAME="Raspbian GNU/Linux"
VERSION_ID="9"
VERSION="9 (stretch)"
ID=raspbian
ID_LIKE=debian
HOME_URL="http://www.raspbian.org/"
SUPPORT_URL="http://www.raspbian.org/RaspbianForums"
BUG_REPORT_URL="http://www.raspbian.org/RaspbianBugs"
```

また開発中は上記のほかにHDMIモニターやはんだごて等も必要になります。


## 用意したセンサーと測定対象
次の通りです。

|測定対象|センサー|ラズパイとの接続|購入元|
|:--|:--|:--|:--|
|気温(℃)|BME280|I2C|[秋月電子](http://akizukidenshi.com/catalog/g/gK-09421)|
|湿度(%)|↑|↑|↑|
|気圧(hPa)|↑|↑|↑|
|照度(lux)|TSL2561|↑|[秋月電子](http://akizukidenshi.com/catalog/g/gM-08219/)|
|co2濃度(ppm)|MH-Z19B|UART|[AliExpress](https://ja.aliexpress.com/item/1PCS-module-MH-Z19-infrared-co2-sensor-for-co2-monitor-Free-shipping/32371956420.html)|

なるべく接続や計測が簡単そうなものを選びました。
BME280は単体で気温、湿度、気圧が計測が出来ます。

co2センサーはECサイトではMH-Z19と記載されていましたが、
届いたものにはMH-Z19Bと記載されていました。


## 全体図
次の通りです。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/26808/3247b38f-84c1-e9cc-a433-00a2f049ec8e.png)

## 成果物
![DSC_0234.JPG](https://qiita-image-store.s3.amazonaws.com/0/26808/d36a682b-3797-ce9f-c365-e85d1b8d73a5.jpeg)
段ボールに入れるとがらくた感が増します。

## 出来たグラフ
![無題2.png](https://qiita-image-store.s3.amazonaws.com/0/26808/30fe9829-3853-553d-dd9e-51ff8bc14e3f.png)

https://ambidata.io/ch/channel.html?id=2813

照度は置き場所を少しずらすと大きく変わります。
最近加湿器が導入されましたが、数メートル離れると意味が無いぽいです。

MH-Z19のキャリブレーションは面倒なので端折りました。
（今のところ一番低い測定値で393ppmでした)

## 作り方

下記にまとめましたので参照してください。

- [ラズパイでオフィス環境をセンシングしてグラフ化する【ハード準備編】(2/4)](https://qiita.com/tnagao3000/private/3cc049d2de9d2986d7f2)
- [ラズパイでオフィス環境をセンシングしてグラフ化する【センサー値取得編】(3/4)](https://qiita.com/tnagao3000/private/b453811224caab9eb315)
- [ラズパイでオフィス環境をセンシングしてグラフ化する【簡易グラフ化編】(4/4)](https://qiita.com/tnagao3000/private/b9b9990f8e655b2b7208)


以上です。
SublimeText3でPackageControlからインストールができなくなった


## 困った
PackageControlは開くものの、Packageのインストールを実行しても、いつも下の方で動いてくれるプログレスバーがうんともすんとも言わなくなってしまった。案の定インストールもされてない。
困った。

## 原因究明
おもむろに`View > Show Console`からコンソールを開きエラーを探る。
するとそれっぽいエラーを発見。

```
ImportError: No module named 'package_control'
```

つまり

``` SublimeText.3
「package_control？ 知らない子ですね...」
```

ということである。
そんな...長年連れ添ってきたやん...

## 対応
我々はSublimeちゃんの記憶を復元すべくSettingsの奥地へ向かった。
`Preferences > Settings`を見てみると、こんな項目を発見。

```Preferences.sublime-settings
	"ignored_packages":
	[
		"0_package_control_loader",
		"Vintage"
	]
```	

何故か`0_package_control_loader`が`ignore`されている。
何かの拍子で入ってしまったらしい。

これを削除して再度インストールを実行すると無事インストールが完了！
めでたしめでたし。

## 参考
[Sublime Text: disable all packages
](https://stackoverflow.com/questions/30856557/sublime-text-disable-all-packages)
それって契約社員？？

こんにちは。
先日、日本で約３年働いている、韓国籍、中国籍のＩＴエンジニアの方お二人とお話をする機会がありました。お話の中で、

現在どのような雇用形態で働いているのですか？

と尋ねたところ、お二人とも

>契約社員として働いています

との回答だったので、

>契約社員だったら社会保険、労働保険にも加入しているでしょうから、フリーの方より何かあった時（傷病、失業時等）は安心できますね

と話をしたところ、

>社会保険、労働保険には加入していません

とのこと。

※お二人の雇用条件は、社会保険、労働保険に加入すべき条件でしたが未だに意味不明な雇用契約が存在するのですね。
このような雇用契約を締結する会社側に大きな問題があるのは当然ですが、外国籍の方々も自分自身を守る為に、日本の制度をよく理解された方が良いと思います。例えば、前述のケースの場合、会社が行政から社会保険加入の指導等を受けたとすると、お二人は社会保険加入となり、社会保険料が給与から天引きされますので、手取額は少なくなることが想定されます。

※参考：https://ten-navi.com/hacks/way-of-working-3-4154
改めて、自分と会社はどのような契約を締結しているのかを確認してみてください。
Python2.7 メモs

# overview
python2.7を使った時に使ったメゾットなどのまとめ的something

# List

* pythonでシェルコマンドを使う(subprocess)
* 文字列を分割する(split())


# pythonでシェルコマンドを使う(subprocess)
いわゆるシステムコールってやつです。`os.system`や`commands.getstatusoutput`等もあるようですが、推奨はされていないようで、`subprocess`を使うのがいいようです。
それぞれのメゾットの引数は配列であればいいようなので、

```py
#No.1
cmd = [ "ls","-l" ]
var = subprocess.check_output(cmd)

#No.2
cmd = "ls -l"
var = subprocess.check_output(cmd.strip().sprit(" "))

#No.3
var = subprocess.check_output(["ls","-l"])
```
どの形式でも動くようです。個人的には、No.3が見やすいかな？と思っていたりします。（場合による）
参考URL:
 [公式リファレンス](https://docs.python.jp/2.7/library/subprocess.html)
 [python上でunixコマンドを実行する](https://qiita.com/tdrk/items/9b23ad6a58ac4032bb3b)
 [pythonでコマンド実行するには- それマグで！](http://takuya-1st.hatenablog.jp/entry/2014/08/23/022031)


# 文字列を分割する(split())
split()メゾットは、文字列を与えられた区切り文字で区切り、配列にしてくれます。
`<文字列>.split("区切り文字")`といった感じです。

```py
>>> text = "hello world"
>>> array = test.split(" ")
>>> print array
['hello','world']
```
参考URL:
[【python入門】split関数で文字列の分割の仕方](https://qiita.com/Morio/items/38701038ad098dd5dc3d)
redis centos7 外部接続

redis を外部から接続するには 6379ポートを開ける必要がある。
どこにも乗っていなかったので、書いときます。

よくわからんが tcp として指定するみたい。
redisとは指定しないようだ。

```


[]# firewall-cmd --add-port=6379/tcp --zone=public --permanent
success
[]# firewall-cmd --reload
success


```
【Unity拡張】Projectビューにnamespaceを表示するエディター拡張

# はじめに
スクリプトコードを書いてると、
**「このスクリプトのnamespaceってなんだっけ？」** 
といったことがよくあります。

スクリプトをクリック選択してnamespaceを確認するのも悪くないですが、スクリプトの数が多いと確認するのも一苦労です。

そこで、Projectビューのスクリプトの横に**namespace**を表示するエディター拡張を作ってみました

# つくったもの
スクリプトファイルの右側にスクリプトのnamespaceが表示されます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/44288/d07fb463-5161-6b57-ea5e-b8bc22a88dac.png)

# 環境
Unity2017.2.0f3
Windows 10

# ソースコード
プロジェクト内にEditorフォルダを作成し以下のスクリプトを入れてください。

```csharp:ProjectWindowNamespace.cs
namespace ProjectWindowNamespace
{
    using UnityEngine;
    using UnityEditor;

    public static class ProjectWindowNamespace
    {
        [InitializeOnLoadMethod]
        static void OnLoad()
        {
            EditorApplication.projectWindowItemOnGUI += ProjectWindowItemOnGUI;
        }

        static void ProjectWindowItemOnGUI(string guid, Rect rect)
        {
            var path = AssetDatabase.GUIDToAssetPath(guid);
            var script = AssetDatabase.LoadAssetAtPath(path, typeof(MonoScript)) as MonoScript;
            if (script == null) { return; }

            var scriptClass = script.GetClass();
            if (scriptClass == null) { return; }

            int width = 300;
            rect.x = rect.x + rect.width - width;
            rect.width = width;

            // namespaceを表示
            EditorGUI.LabelField(rect, scriptClass.Namespace);
        }
    }
}

```
floor, ceil, astype(int) and trunc in numpy

```python
Z = np.random.uniform(-10,10,10)
print(Z)
print (Z - Z%1)
print ("floor:"+str(np.floor(Z)))
print ("ceil:"+str(np.ceil(Z)))
print ("astype(int):"+str(Z.astype(int)))
print ("trunc:"+str(np.trunc(Z)))
```
* e.g.

```
[ 6.65572819 -2.55515039 -8.61852149 -8.06517355 -5.94545719  7.47744468
  1.02568278  9.17595997 -6.76675254  0.30123903]
[ 6. -3. -9. -9. -6.  7.  1.  9. -7.  0.]
floor:[ 6. -3. -9. -9. -6.  7.  1.  9. -7.  0.]
ceil:[  7.  -2.  -8.  -8.  -5.   8.   2.  10.  -6.   1.]
astype(int):[ 6 -2 -8 -8 -5  7  1  9 -6  0]
trunc:[ 6. -2. -8. -8. -5.  7.  1.  9. -6.  0.]
```
# Refs.
* [マイナス値のfloor,trunc,ceil,roundとキャストの違い](http://blog.jojo.jp/?eid=1424790)
* [round,floor,ceil](http://www.php-ref.com/bapi/05_round.html)
RUNDECKのジョブをAPI経由でオプション指定して実行(Python)




```
import requests

api_token = 'XXXXXXXXXXXXXXX'
base_url = "https://www.example.com:8888"
job_id = "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXXXX"
url = base_url + "/api/12/job/" + job_id + "/executions"

headers = {'X-Rundeck-Auth-Token': api_token}

# messageという名前のオプションにHELLOを指定する場合
payload = {"argString": "-message HELLO"}

response = requests.post(url, headers=headers, data=payload)
print(response.status_code)
print(response.text)
```
form_forにclass名をつける


Rails勉強中です。
とにかく勉強になったことはQiitaに投稿してします。


先日は「Railsチュートリアル」を全部やりました。

https://medium.com/%E8%99%8E%E8%A6%96%E7%9C%88%E3%80%85%E3%81%A8/rails-%E3%83%81%E3%83%A5%E3%83%BC%E3%83%88%E3%83%AA%E3%82%A2%E3%83%AB%E3%82%92%E5%85%A8%E9%83%A8%E3%82%84%E3%81%A3%E3%81%9F%E8%A9%B1-5cead29b43f1

## form_forにclass名をつける

```erb

<%= form_for @order, html: { class: "foo" } %>

```

これで自分はclass名をつけることができました。


## form_forのf.submitの方にclass名をつける

ちなみにf.submitの方にclass名につける場合はこれでできました。

```erb

<% f.submit 'hogebutton', class: "btn" %>

```

誰かの力になれば。
XcodeでPrint(ログ)のスニペットを作成する

# Print Snippet
XcodeのPrintのスニペットを使うのですが、
プロジェクトが変わり、マシンも変更するとき、いちいち調べて作るのが面倒なので、備忘録のために書いておきます。

## 今回のゴール
Xcode環境でPrintのスニペットを設定し、
ビルド&Runした時に、
ログがコンソールに出てくること。

## 動作環境
MacOS High Sierra
Xcode9.1
Swift3.1

## スニペットとは
言葉の正しい定義というよりは、今回扱うという意味での定義としては、
スニペットとはコーディング中に繰り返し使うコードをすぐ呼び出せるエディタの機能のこと。
Xcodeでは例えば、変数を作ろうと思って<br>
(こんな簡単なのであてにして使う人はいないと思いますが、)<br>
`va`
まで打つと、
![スクリーンショット 2017-12-26 10.19.30.png](https://qiita-image-store.s3.amazonaws.com/0/13599/e5b1c0b9-8793-b2af-c845-dda3287a5ca8.png)

この下に出てくるカンペみたいなやつです。
今回はこれを自作しようと思います。

## XcodeでPrintのスニペットを作成する
①Xcodeの右ドロワ(ユーティリティエリア)を表示し、下の{}のボタンをタップし、スニペットのウィンドウを出します。

②真ん中のエディタ領域でログのコードを打ち、先ほどのスニペットのウィンドウにドラッグ&ドロップします。

```
print("\n",
    "<#コメント#>",
    "\n",
    <#parameter#>
    )
```
<##>で囲まれている部分がログで出したいときの変数になります。<br>
都度変更してください。<br>

![スクリーンショット 2017-12-26 10.19.30.png]
(https://qiita-image-store.s3.amazonaws.com/0/13599/881c64ae-f068-125a-1c28-b2b14fddce54.png)
③スニペットの情報入力画面が出るので、それぞれ情報を入力し、Doneボタンを押します。<br>
・Title:スニペットのタイトル。スニペットの予測の時に表示される今回は「ログ(詳細)」とします<br>
・Summary:スニペットの要約。今回は特に書かない。<br>
・Platform:スニペットを出すプラットホーム環境(iOSとか)。今回は特に触らない。<br>
・Language:スニペットを出す言語環境。今回は特に触らない。<br>
・Completion Shortcut:スニペットの自動補完予測で出すとのショートカットキー。今回は「print」とする<br>
・Completion Scopes:スニペットを補完するときのスコープ。今回は触らない<br>

④エディタ領域でprintと打つと、スニペットの予測補完がされます。ビルドすると、ログが出力されます。
Flash(Animate)使いのためのglslメモ

# はじめに
glslがあれば、Flash CC(Animate CC)が出来ることは何でもできます。そう、理論上はね。

但し、Flash CC(Animate CC)の機能を自分glslで実装する必要があります。
これはFlasherのためのメモです。

イージング関数を使うかどうかで、アニメーションの見栄えがぐっと変わってきます。

尚、glsl自体は状態の保存が出来ないので、動画の生成には向いていません。

# イージング関数

イージング関数早見表

* http://easings.net/ja

glslによるイージング関数の実装方法のサンプルはこちら

* https://thebookofshaders.com/examples/?chapter=motionToolKit

こちらで用意されているイージング関数は入力される引数tが0～1の間になっています。
というのも、開始時間を0秒、終了時間を1秒とすると、例えば、easeInCubicはt^3ですがt=1のときに返り値が1になって都合がいいからですね。
但し、アニメーションの時間が1秒ジャストである場合には良いのですが、例えば2秒とかになった場合にこのままだと使えません。

```glsl
float linearstep(float begin, float end, float t) {
    return clamp((t - begin) / (end - begin), 0.0, 1.0);
}
```

そこで、アニメーションの秒数が1秒ではない場合、linearstepという関数を使って任意の時間を0～1に置き換えてから各イージング関数を使います。

```glsl
easeInCubic(linearstep(5.0, 5.25, t)) * 2.0;
```

そして、アニメーション速度を変更したい場合は、全体を掛けたり割ったりすればいいですね

ライブラリはこちら

* https://github.com/glslify/glsl-easings

# シェイプのモーフィング
本当のプログラムは自動生成されるべし！！

#はじめに
最近、プログラムが同じのが多いんで
新しいことをしようと思いやっていこうと
プログラムとはコンピュータへの命令のことなので、それを作るプログラムとなるとコンピュータへの命令を作るコンピュータへの命令を作ることに
なりますね。
ＡＩでは案外、自動変更しているだけのことが多いですよ。
けれど、それでは幅広い分野で対応することができませんよね。
出来たら苦労しないんですが・・・
#仕組み
１  まず計算、判断の能力があるプログラム（ニューラルネットワークを持っているとか）を作る。（それぞれ違ったものが順番をもって作られる。プログラムは計算結果を自分のプログラム、全てに変更できる。
２　上下関係をもつ、データを交換できるグループを作る。

３ 共通のデータが与えられる。

４　データの交換はそのプログラムより新しいプログラムにしかできない

５　出力する場所は一つ

６　データの交換できる数は決まっている（出力と教師データとの誤差を少なくするために）

７　データの交換先は保存、交換できる　（先の交換も数に入れる、一部のみの交換も可）

８　データを交換されなくなったプログラムは消滅

　こうすることでデータによってグループができていくと考えられ
　データごとの関係が記録しやすいと考えています（もうあるかもしれないけど）
　データの交換先の交換によりデータの変化がしやすくなる
　入力と出力と教師は汎用的に使えると思われる。
　ランダムにはじめは作るのでまったくうまくいかないと思われる
#終わりに
誰か指摘や、同じもの
似た物をおしえてください。
pythonで仮想環境(venv)を作った時のメモ

#venvを使ってみる
```
#仮想環境の作成(エラー発生)
$ python3 -m venv <dir>
Error: Command '['/Users/kimurakouichi/workspace/a/new/bin/python3', '-Im', 'ensurepip', '--upgrade', '--default-pip']' returned non-zero exit status 1.
```

anaconda上のpythonでvenvを使うと何やらよくないことが起こるらしい。

```
$ . bin/activate
-bash: bin/activate: No such file or directory
```
activateが作られてない


#解決方法
(http://nsaito-nmiri.hateblo.jp/entry/2017/08/14/183045)
↑こちらの記事を参考にすると

```
# 仮想環境の作成（pipなし）
$ python -m venv <dir>--without-pip

# get-pip.py の取得
$ curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 1558k  100 1558k    0     0  2940k      0 --:--:-- --:--:-- --:--:-- 2939k

```
でクリア

```
$ . bin/activate
```
でちゃんと仮想環境に入れた。
きみはTensorFlowでフレンズをとらえて揃えてたのしー！アプリなんだね！

メリークリスマス。フレンズのいない家でファミチキを一人食べる寂しさに怯えてはいませんか？
フレンズは待っていてもやってきません！外に出てフレンズを捕まえよう！そう思い立ち開発されたのが今回紹介するクソアプリ、「けものぷよ」です。

![tanoshii.gif](https://qiita-image-store.s3.amazonaws.com/0/25990/c27af460-96a8-4003-5830-e3536e00491b.gif)

[Special Thanks to けものフレンズ](http://kemono-friends.jp/)

# たのしいしくみ

* 外に出る
* 手持ちの携帯でフレンズを取る
* フレンズが落ちてくる
* フレンズが3つそろうと消える
* たのしー！

(きえてしまってはフレンズが集まらないのでは・・・という指摘は受け付けません。かれらは夢のパークへいったのだと思います)。

# たのしいアーキテクチャ

![architecture.png](https://qiita-image-store.s3.amazonaws.com/0/25990/43f1208e-49e4-1a8a-c219-db752f78af08.png)

* 写真を撮る
* IFTTTで画像を転送
* TensorFlow Object Detection APIでフレンズを発見する
* 物理エンジンでフレンズが落ちてくる
* たのしー！

# たのしいを実現するフレンズ

## TensorFlow Object Detection API

TensorFlowでは、物体認識のための学習済みモデルが提供されています。それが、Object Detection APIになります。

[tensorflow/models](https://github.com/tensorflow/models/tree/master/research/object_detection)

![object_detection.png](https://qiita-image-store.s3.amazonaws.com/0/25990/4219bde8-821a-5819-cfd9-887097e9b10d.png)

こちらを利用すれば、すぐにフレンズを見つけることができます。最初はDarkNetのYOLOを使おうかなと思ったんですが、Pythonとの親和性に難がある印象だったので、こちらに切り替えました。Jupyter Notebookのチュートリアルを改造し、WebAPIとして使えるよう[Tornado](https://github.com/tornadoweb/tornado)アプリケーションの中に組み込んでいます。物体検知のAPIを作って利用したいというシーンはそれなりにあるかもしれないので、実装が参考になれば幸いです。

https://github.com/icoxfog417/kemono_puyo
（Starをいただければクソアプリを生む励みになります m(_ _)m）

## IFTTT

デバイスで撮影された写真をWebAPIへ飛ばすのに、今回は[IFTTT](https://ifttt.com/line)を使用しました。
既にご存知の方も多いかもしれませんが、IFTTTは「xxしたらyyする」という連携処理を簡単に実装することができます。今回は、「iPhoneで撮影したら」「アプリにリクエストを飛ばす」という形で実装しました。通常リクエストを飛ばすには当然グローバルなアドレスが必要ですが、[ngrok](https://ngrok.com/)を使用することでlocalhostでも受信が可能になります。

## Matter.js

[Matter.js](http://brm.io/matter-js/)は、JavaScript製の物理エンジンです。こちらを利用することで、すでにあるオブジェクトとの衝突判定や、ぶつかった際の動きなどを表現することができます。

Matter.jsについて書かれた記事は少なく、またあっても内容が古かったりして結構実装に苦労しました。公開後頂いたコメントでは[p2.js](https://github.com/schteppe/p2.js/)の方がいいというものもありました(Matter.jsの方がメジャーそうではありますが)。

## AITalk

無音だとすごい悲しい気分になったので、フレンズが来るたびに鳴き声がでるようにしました。また、消える時に「たのしー！」というようにしています。以下の動画で音声を確認できます。

https://www.youtube.com/watch?v=TetxYBS316M

音声には、[AITalk](https://www.ai-j.jp/products/sdk/)を使っている・・・のですが、実はハッカソンでの特別対応として、個別に声を作っていただきました(神対応)。その時のwavファイルで音声を出しています。

「たのしー！」の再現度はなかなかのものだと思います。すごいぞAITalk!(お世話になったので宣伝)。

なお、動画では「これの何がおもしろいのか・・・﻿」というコメントをいただきましたが、それこそクソアプリにとって最高の褒め言葉です。ユーザー様のエクスペリエンスなんざ知りません。オレ自身がたのしー！こと。それがクソアプリにとって一番必要なことです。

# おわりに

このアプリは、[ハッカソンで審査員をやっている時](https://mashupawards.connpass.com/event/65581/)に作ったものです。ハッカソンでは技術サポートに徹して何か物を作るのは控えようと思っていたのですが、やはりハッカソンの熱にあてられると何か作らずにはいられませんでした。

![hackathon.png](https://qiita-image-store.s3.amazonaws.com/0/25990/0c8a8e1b-ab88-394d-e641-bda3e6885a93.png)

[おおがきロボット×AI ハッカソン予選 #MA_2017 AI・ロボットで作る未来のライフスタイル](https://togetter.com/li/1156456)

ハッカソンは最近多くの場所で開催されていて、個人的には何を目的にして、受賞後どうサポートすべきなのかといった「種を蒔いた後」の話も必要なのではないかと思っています。
ただ、難しいことは抜きにして、限られた時間内で自分/自分達がいい！すげー！と思える物を作るのはエンジニアにとって最高に刺激的な体験です。それが体験できる場所が多くなることは、とても良いことだと思います。

ハッカソンに参加したことがないという方は、ぜひ一度参加してみることをお勧めします。きっと多くのたのしー！フレンズに出会えると思います。彼/彼女らは、3つそろっても消えることがないので安心してください(うまくまとめた)。
phpのtmpfile()が返すファイルのパスを取得する

# 確認環境

- PHP 7.0.8 (cli)


# 使う物

[stream_get_meta_data](http://php.net/manual/ja/function.stream-get-meta-data.php)


# 例

```php
$tmp_fp = tmpfile();

$meta = stream_get_meta_data($tmp_fp);
$tmp_path = $meta["uri"];

var_dump($tmp_path);

fclose($tmp_fp);
```
```
string(14) "/tmp/phpRlrxyr"
```
Google検索結果のショートカットキー

# 結論

chromeに[Google検索キーボードショートカット拡張](https://chrome.google.com/webstore/detail/google-search-results-sho/dchaandmcifgjemlhiekookpgjmkcelg?hl=ja)を入れれば快適

|![スクリーンショット 2017-12-26 10.49.38.png](https://qiita-image-store.s3.amazonaws.com/0/152901/81d38b06-04ea-cdb3-5d84-840eef8de237.png)|
|:-:|

# 経緯

元々インスタント検索機能を有効にしていると、jkで検索結果のフォーカスができていたのが、今春くらいからのアップデートにより機能が削除された（ユーザごとに段階的に実施していたようです）。
[vimium](https://chrome.google.com/webstore/detail/vimium/dbepggeogbaibhgnhhndojpepiihcmeb)で耐えていたものの、使い勝手がやはり違うため違和感を残したままだった。

# Google検索キーボードショートカットでできること

Google検索結果画面で次のキーが有効になります

|キー|機能|
|---|---|
|j|次（下）のリンク|
|k|前（上）のリンク|
|l|検索結果の次ページ|
|h|検索結果の前ページ|
|/|検索窓にフォーカス|

# 注意事項

わかると思いますが、キーアサインがvimiumとコンフリクトしているので、vimiumの除外urlに``https?://www.google.co.jp/search*``を忘れずに

# 謝辞

作者の[miyaoka](https://github.com/miyaoka/google-search-results-shortcuts)さん、ありがとうございます。
parcel installしようとしてNo matching version foundエラー

```
> npm install --save parcel
npm ERR! code ETARGET
npm ERR! notarget No matching version found for aws-sdk@0.9.x
npm ERR! notarget In most cases you or one of your dependencies are requesting
npm ERR! notarget a package version that doesn't exist.
npm ERR! notarget
npm ERR! notarget It was specified as a dependency of 'parcel'
npm ERR! notarget
```

入れるパッケージを間違っている

× `parcel`
○ `parcel-bundler`

[🐛 npm install error on aws-sdk dependency · Issue #295 · parcel-bundler/parcel](https://github.com/parcel-bundler/parcel/issues/295)

ヨメ
[parcel-bundler/parcel: 📦🚀 Blazing fast, zero configuration web application bundler](https://github.com/parcel-bundler/parcel)
Photoshopを使いのためのglslメモ

# はじめに
glslが使えれば、Photoshopで出来ることはなんでも出来ます。そう、理論上はね。

但し、Photoshopの機能を自分でglslで実装する必要があります。
このメモはPhotoshopのあの機能を実装するにはというメモです。

# ブレンド(合成)モード

* レイヤーA(背景用)

![layerA.png](https://qiita-image-store.s3.amazonaws.com/0/135381/6afbf2bb-a941-84c2-63e0-391676f14ff4.png)

https://goo.gl/Ex81hX

* レイヤーB(重ね合わせ用)

![layerB.png](https://qiita-image-store.s3.amazonaws.com/0/135381/47d5b758-06c4-320a-2c54-3820edc6c8b0.png)

https://goo.gl/YvUmUu

* 普通

![blend_normal.png](https://qiita-image-store.s3.amazonaws.com/0/135381/28dcdf3f-c2b6-ca79-17be-777994ec6d06.png)

https://goo.gl/VYrMEG

```glsl
precision mediump float;
uniform vec2  m;       // mouse
uniform float t;       // time
uniform vec2  r;       // resolution
uniform sampler2D smp; // prev scene

void main(void){
    vec2 p = (gl_FragCoord.xy * 2.0 - r) / min(r.x, r.y);
    vec2 q = p;
    p*=4.;
    float a = mod(floor(p.x)+floor(p.y),2.0);
    float b = step(0.,1.-length(q));
    vec3 A = vec3(q.x*a,q.y*a,a);
    vec3 B = vec3((1.-q.x)*b,(1.-q.y)*b,b);
    //gl_FragColor = vec4(A*(1.-b)+B*b, 1.0);
    gl_FragColor = vec4(mix(A,B,b), 1.0);
}
```

~~普通は加算と比べると意外とめんどくさいです~~
mix関数使えば簡単でした!!

```glsl
    gl_FragColor = vec4(mix(レイヤーA,レイヤーB,Bのアルファ), 1.0);
```

* 3つ通常合成する場合

![3normal.png](https://qiita-image-store.s3.amazonaws.com/0/135381/6df58711-a49b-fa73-35f8-e3c79afde6c5.png)

https://goo.gl/aNqGqX

```glsl
precision mediump float;
uniform vec2  m;       // mouse
uniform float t;       // time
uniform vec2  r;       // resolution
uniform sampler2D smp; // prev scene

void main(void){
    vec2 p = (gl_FragCoord.xy * 2.0 - r) / min(r.x, r.y);
    vec2 q = p;
    p*=4.;
    float a = mod(floor(p.x)+floor(p.y),2.0);
    float b = step(0.,1.-length(q));
    float c = step(0.,1.-(abs(q.x)+abs(q.y)));
 
    vec3 A = vec3(q.x*a,q.y*a,a);
    vec3 B = vec3((1.-q.x)*b,(1.-q.y)*b,b);
    vec3 C = vec3(q.x*c,q.y*c,c);
    vec3 color = mix(A,B,b);
    color = mix(color,C,c);
    gl_FragColor = vec4(color, 1.0);
}
```

* 覆い焼き(加算)

```glsl
float a;
float b;
float c;
c= a + b;
```

本当に加算するだけですね。

* 乗算

```glsl
float a;
float b;
float c;
c= a * b;
```

本当に乗算するだけですね。

* その他

 glslのライブラリになっているのでこちらを参考に
 https://github.com/jamieowen/glsl-blend

* 参考

 ブレンドモードの仕組みはこちらを参考に
 [Photoshopの描画モード(ブレンドモード)を理解するための、画像合成は計算だという話](http://www.cg-ya.net/2dcg/aboutimage/composite-is-math/)


* 注意点
 
連続して合成する場合でPhotoshopと同じ結果を期待するのであれば、合成後、saturate=clamp(x,0.,1.)を必ず掛けてください。浮動小数点なので、1.0を超えていても表示結果は変わりませんが、データ自体は保持されている為、意図しない結果になることがあります。基本的には、事故を防ぐため、合成後は必ず、saturateを掛けておくといいでしょう。逆に意図してsaturateを掛けない場合があります。

# マスク
アルファで乗算するだけ
超簡単

# 雲模様
* ヴァリューノイズを作ります。
*
C++ Builder 10.2 Tokyo > IDEの色をDarkから変更する

```txt:動作環境
Rad Studio 10.2 Tokyo Update 2
```

Tokyoインストールを「Dark」テーマで実行した。

![qiita.png](https://qiita-image-store.s3.amazonaws.com/0/32870/bcc69c14-d4c3-61a3-6fec-fac5ca86190e.png)

白の背景に灰色の文字は見えにくい。
色を変えるにはどうするか?

http://docwiki.embarcadero.com/RADStudio/Tokyo/en/IDE_Theme_Manager

オプションの「Theme Manager」を「淡色」にする。

![qiita.png](https://qiita-image-store.s3.amazonaws.com/0/32870/7ded64c8-7bdf-d9c0-6990-8713718c78b5.png)

エディタの色は「Dark」のままだったので、別途、下記を設定しなおした。

- オプション > エディタ設定 > 色
    - 表示色のスピード設定
        - Dark から デフォルト に変更

エディタだけDarkにするのは見やすいかどうか。


### エディタのDarkテーマ
(追記 2017/12/28)

エディタのDarkテーマをしばらく使ってみたが、デフォルトに戻した。

Darkテーマにおいては、現在行の表示色が背景色と大きく異なる。
デフォルトテーマでは、現在行の表示色が背景色に近い。
【New Year Calendar】GCPで新しいプロジェクトを作る際のプロジェクト名とID

**New Year Calendar 1日目**

業務が詰まってたこともあり、今年はQiita Advent Calendarに参加しなかった自分。
その悔しさを晴らすべくという程でもありませんが、今日から勝手に自分一人によるQiita New Year Calendarを始めることにしました:sunglasses:
あとは毎日Qiita記事を書くという年末年始のチャレンジでもあります:writing_hand_tone2:
一応1月1日までは毎日書くつもりですが、気分によって伸びたり縮んだりするかも。

それでは1日目の記事いってみまっしょーい:runner_tone3:

#GCPでプロジェクトを作る時
![image.png](https://qiita-image-store.s3.amazonaws.com/0/71113/2745d871-845a-57b6-fc81-dfb94d1be338.png)

プロジェクト作成ページを開くとサンプルのプロジェクト名とプロジェクトIDが表示されます。
プロジェクトIDはプロジェクトに付けられたグローバルに固有なIDです。
このプロジェクトIDはアプリケーションやAPIリクエストの識別子として利用します。
gcloudコマンドでプロジェクトを特定する際もプロジェクトIDを使用しますので、冗長なプロジェクトIDにしちゃった場合は必ず後悔します苦笑
**プロジェクトの作成後にプロジェクトIDを変更することは出来ませんので気をつけましょう**
※プロジェクト名は後から変更可能です。

プロジェクトを作る際主に二つのパターンがあると思います。

- プロジェクト名とプロジェクトIDを同じにしたい
- プロジェクト名とプロジェクトIDを自由に決めたい(プロジェクトIDを自動的に決められたくない

##プロジェクト名とプロジェクトIDを同じにしたい
プロジェクト名の入力だけ行う場合、プロジェクトIDはプロジェクト名に基づいて自動的に設定されます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/71113/e6e057b9-cfd8-2797-18f3-fe04da7703c7.png)

設定されるIDは`小文字に変換したプロジェクト名`-`{連番}`の形式です。

ただこの「-`{連番}`」は邪魔なので取り除きたい・・！
取り除くにはハイフンをプロジェクト名に含める必要があります。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/71113/2b9538b6-0697-dc25-715e-706e8bd3ee80.png)

これでプロジェクト名とプロジェクトIDを同じにすることが出来ました。

##プロジェクト名とプロジェクトIDをそれぞれ自由に決めたい
↑に貼った画像を見てお気づきの方もいるかもしれませんが、プロジェクトIDは任意で設定することが出来ます。(「そっちを早く教えろ」というね汗)

編集リンクをポチッと押してみましょう。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/71113/4dbff4de-0cff-1173-9fb6-aace034f056d.png)

するとプロジェクトIDの入力欄が現れました。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/71113/cc46e78c-1f61-811a-f603-92184cf7baf1.png)

自由にプロジェクトIDを入力しちゃってください。


#最後に
ぶっちゃけこれらはTipsでも何でもありませんが、前述した通りプロジェクトIDは変更出来ないのでくれぐれも慎重に決めましょう。

明日はもっとちゃんとしたの書きます:sweat_smile:
スマホで同時に撮影した動画が動画編集ツールで編集する時にずれる問題


チャットアプリのデモ動画を作るために、2つの端末でチャットしながらAZ Screen Recorderで2分ほどの動画を撮影しました。
横に並べて1つの動画にするために、Adobe Premiere Pro CCで編集しようとしたのですが、タイムラインをすすめると動画にずれが出てきて、2つの端末の操作にずれがでてきました。(まだチャット送信してないのに、もう一方の端末では受信しているような状態)

本エントリーではこの動画のズレの原因と解決方法を説明します。

# 原因
動画作成界隈では常識なようですが動画には、VFRモードとCFRモードがあります。
VFRは可変フレームレート、CFRは固定フレームレートです。
そしてVFRは動画編集ツールではサポートされていないことが多いようです。Adobe Premiere Proも例外ではありませんでした。
今回スマホでスクショした動画はVFRだったので、ズレが生じたのですね。これが原因です。

ちなみにQuickタイムで同時に再生した時はこのようなズレになりませんでした。

# VFR/CFR確認方法
MediaInfoというソフトウェアで調べることができます。
ビデオ -> モード の値です。
[参考](http://aviutl.info/cfr-vfr/)

# VFR -> CFR に変換する
Adobe Premiere Proで編集できるようにCFRに変換します。
今回は`ffmpeg`で次のようなコマンドを使用しました。

```bash 
ffmpeg -i demo1.mp4 -crf 18 -r 29.97 demo1_cfr.mp4
```

[参考](http://www.yy-yako.net/tr/h264.html)

以上です。
機械学習論文読みメモ_109


[Failures of Deep Learning](https://arxiv.org/abs/1703.07950)
最近においてはdeep learningの手法は様々な分野においてSOTAを出し，広く使われるようになってきた．
しかし，理論と実際の双方において，一般的の手法やアルゴリズムに関する限界や難しさを知っておく事は重要である．
本論ではそうした手法・アルゴリズムに関して生じる４種類の失敗ケースについて述べる．
一つ目は無情報勾配の存在で，どのような構造のモデルに対しても，どのパラメータ点においてもその勾配がほぼ変わらない問題が存在し，其の場合には学習には失敗する．
２つ目はend-to-endかdecompositionして別々に学習するのが良いのかについてで，最適化の観点から見た場合，end-to-endのアプローチは勾配値の低SN比に苦しむ事になり，学習時間に大きく影響を及ぼしてしまう．
したがってdecompositionして別々に学習する方がはるかに高速な学習が可能であると言える．
３つめはArchitectureとConditioningに関してで，問題のcondition numberの観点から考えて，ネットワーク構造を上手く選び，最適化のconditioning technique、Adam等勾配の正則化に関する手法？、と組み合わせて計算量やconvergence rateへ大きく影響を与える事が出来る．
4つめはFlat activationの問題で，activation関数がsaturationを起こすために損失関数自体がflatになり，それがvanishing gradientを誘発する．この問題はより深い構造で顕著になる．
この問題はRNNなどでactivation関数にsigmoidを使う場合などで顕著である。

[Snapshot Ensembles: Train 1, get M for free](https://arxiv.org/abs/1704.00109), ICLR2017
Deepnetのアンサンブルは単体での予測と比較して高性能であることが知られている．
本論では，学習コストを上げる事なくアンサンブルを実現する手法を提案する．
この手法は一つのネットワークを学習していくにあたって，途中いくつかの局所解へあえて収束させその時のパラメータを保存しておく．
そのためにcyclicなlearning rateを用いる．
この手法はシンプルながら大きな効果を発揮する．

[Outlier Detection with Autoencoder Ensembles](http://epubs.siam.org/doi/abs/10.1137/1.9781611974973.11)
ニューラルネットの問題点の一つは、大量のデータを必要とする事と、
ノイズに対して敏感であるということが挙げられる。
そのため、異常検知に対しての応用例は少ない。
本論では、autoencoderを用いた異常検知を考え、
特にネットワークの接続関係をランダムに変化させる事で性能向上を
可能にする。
またadaptive samplingと組み合わせる事で効率性を向上させた。
XMLストリームの定義をインポートするのに必要なサンプルファイルを準備する

# はじめに

コンポーネントの出力ストリームでXMLを定義するときに、複雑なXML構造だと手入力するのが大変なことがあります。
手元にサンプルのXMLファイルがあれば、ストリームペインの右クリックメニューから[インポート]
![XMLインポート01.png](https://qiita-image-store.s3.amazonaws.com/0/180292/8b468ac9-f531-d43c-39bb-50b7bc23c0bc.png)

すれば簡単ですが、このサンプルファイルが手元にない場合、フロー実行でとりあえずサンプルファイルを入手する方法を考えてみました。

# 環境
- OS:Windows Server 2012 R2
- ASTERIA WARP:1703
- Java:1.8.0_121

# フローイメージ
mcapiを実行するフローで`server/info/show`のレスポンスXMLを解析したかったのですが、後続のMapperのマッピングで取り出すにはXMLストリームを定義する必要がありました。
![XMLインポート02.png](https://qiita-image-store.s3.amazonaws.com/0/180292/6adb0e2d-4796-e4ca-88ce-e1b4245f07dd.png)

※mcapiのレスポンスはjson,xmlで受け取れますが、今回はxmlで受け取ってます。

mcapiのリファレンスは
https://help.asteria.com/documentation/warp/ja/current/flow/mcapi/server.html#info/show
を参考にしています

# サンプルのXMLファイルを作る
### 1. XMLストリームの定義なしでEndResponseにつなげる
![XMLインポート03.png](https://qiita-image-store.s3.amazonaws.com/0/180292/51699d3f-2eb1-7ab9-9f69-45032f6e3760.png)

Mapperでマッピングする必要がなければそのままEndResponseにつなげてもOKのようです。

### 2. 実行画面の実行結果タブにある出力ストリームを[ローカルに保存]でファイルパスを指定する
![XMLインポート04.png](https://qiita-image-store.s3.amazonaws.com/0/180292/6e35885f-db8e-84ca-b927-47b90b85e98f.png)

実行画面の実行結果タブにある出力ストリームを[ローカルに保存]でファイルパスを指定します。

### 3. 実行して実行結果をファイルに出力する
![XMLインポート05.png](https://qiita-image-store.s3.amazonaws.com/0/180292/8ee989f5-fa7f-1337-5bda-79fd4754c9a5.png)

その状態でフローを実行し、サンプルのXMLファイルを入手します。

### 4. サンプルファイルをインポートして出力ストリームの定義を設定
![XMLインポート06.png](https://qiita-image-store.s3.amazonaws.com/0/180292/4a7e7e7b-df30-2a6b-c225-033012d03a93.png)

サンプルファイルをインポートして出力ストリームの定義を設定します。

### 5. Mapperコンポーネントでマッピングする
![XMLインポート07.png](https://qiita-image-store.s3.amazonaws.com/0/180292/d8baf2f8-fba3-414b-1f77-4f8d2fc4e788.png)

あとは、後ろにMapperを置いてXMLの要素を取得できるようになりました。

# 終わりに
XMLストリームはフィールド定義しなくてもFilePutやEndResponseにつないで出力することはできるようなので、他のコンポーネントでもXML構造が複雑だったり、手入力するのが面倒なときには一度、定義なしでファイル出力してみると開発しやすくなると思います。
RaspbianでRaspberry Pi Configurationが使えなかった時の対策

# 前置き(?)

ラズパイに色々してるとたまに、設定ツールのRaspberryPiConfigurationが使えなくなることがある。
おそらく一番ある例は、Piユーザーを削除した事によるものだと思う。以下のような内容のプロンプトが出ました。

```text
The Raspberry Pi Configuration application can only modify a 
standard configuration.

Your configuration appears to have been modified by other 
tools, and so this application cannot be used on your system.

In order to use this application,you need to have the latest
firmware installed,Device Tree enabled, the default "pi" user
set up and the loghtdm application installed.
```

つまり簡単に訳せば

```text
Raspberry Pi Configurationアプリケーションは基本的な設定しか変更できません。

あなたのシステムの設定は他のツールによって変更されているようです。
そのため、このアプリケーションは使用できません。

このアプリケーションを使うためには、最新版のファームウェアをインストールている事、
Device Treeが有効になっている事、デフォルトの"pi"ユーザーが有効である事、
そしてloghtdmアプリケーションがインストールされている事が必要です。
```

だそうな。僕の場合、"pi"ユーザーを消去していたので、使えなかったという事でした。

# 本題:CLIで設定を行う
"pi"ユーザーを元に戻す気は微塵もなかったので、代わりにCLIで変更する事にしました。
そこで使うのが**raspi-config**コマンドである。うん。
`$ raspi-config`と打つと、CLI上でGUIが出てきます。(表現あってるのかな...)
細かいところについては、以下のページがわかりやすかったので丸投げします。
[Raspberry Pi公式ドキュメントを日本語訳-五十嵐システムズ](http://igarashi-systems.com/sample/translation/raspberry-pi/configuration/raspi-config.html)


# おまけ(?): Minecraft Pi Editonの表示がずれる場合の対処
Minecraft Pi(以下MCPi)、使ってますか。僕は遊びがいがあるのでpython使って遊んでます。
勉強しながらね。その事についてはまた記事書くかもです。
MCPi使っていると、本来のウィンドウとずれて表示されることがあります。
僕の場合は左上に向かってずれてました。
どうにかできないかとggった結果、
**オーバースキャンという設定をdisableすれば良い**ということがわかりました。
上の`raspi-config`を使った場合、`Advanced Options`の中にあります。
これをするだけで、直りました。
ただ、LXTerminalを使っている場合、LXTerminal上に残ります
![CLI上に残るMCPiの図](https://qiita-image-store.s3.amazonaws.com/0/222594/1919acf3-d9c4-060f-f4f0-a1aa98de2bb1.jpeg)
こんな風に。これはどうにかなるのかわかんないけど、でも見やすくて便利なのでいいです。
Windows 10 > バージョン 1709 (2017-12-26) | バージョン1803(2018-08-29) > ドメイン参加方法

```txt:動作環境
Windows 10 Pro バージョン 1709 (Fall Creators Update)
```

Windows 10で「ドメイン参加」方法を検索すると、古いバージョンの情報が出てくる。

バージョン1709での手順は以下なのだろう。

1. 設定を開く
2. アカウントを選択
3. 職場または学校にアクセスする、を選択
4. +接続、を選択
5. 「このデバイスをローカルのActive Directory ドメインに参加させる」を選択

以降、必要な事項を入力してドメイン参加することができる。

### バージョン 1803
(追記 2018-08-29)

```txt:動作環境
Windows 10 Pro (64bit) バージョン 1803 (April 2018 Update)
```

上記のバージョンでも同じ操作で実施できる。
LINEのデコ文字に変換するやつを作りました

### :point_up: はじめに
LINEのデコ文字、使ってますか。
<img width="295" alt="Screen Shot 2017-12-26 at 1.11.18.png" src="https://qiita-image-store.s3.amazonaws.com/0/98379/ee71ec96-c33c-fbd5-28eb-8b3013dbd601.png">

文章にゆるさを足せますが、文章が長くなるにつれて打つのがだるくなりますよね。
そんなわけで、テキストからデコ文字に変換できるライブラリを作りました。
変換された文字列をLINEのテキスト欄に貼り付けるとデコ文字として表示されます。
(iOSだと送信しないと表示されないかも)

### :eyes: LINEのデコ文字の構造
![a.jpeg](https://qiita-image-store.s3.amazonaws.com/0/98379/6312f71f-30bd-b07e-e17a-d8e9dad26546.jpeg)
という文字を出す場合を例にします。

文字列的には
`􂘁􀄛あ􏿿`
という文字になります。

バイナリを解析してみると、

<img width="604" alt="line.png" src="https://qiita-image-store.s3.amazonaws.com/0/98379/42a62fdc-93ca-d925-8859-5f35580d49f0.png">

こんな感じの構造になっているみたいでした。
なるほど、という感じですね。

補助文字(先程の例でいうと、`あ`の部分)はなくてもデコ文字が表示可能だったため、
ライブラリでデコ文字を生成する際には取り除いています。

### :sparkling_heart: デモ
実際の動作は下記サイトで確認できます。
https://re-fort.net/line-deco-converter/

[GitHub](https://github.com/re-fort/line-deco-converter)

<img width="211" alt="Screen Shot 2017-12-26 at 1.34.53.png" src="https://qiita-image-store.s3.amazonaws.com/0/98379/68c7d212-5bed-ea2c-5670-a39a561085b1.png">
課題レポート：【アルゴリズム】本を管理するアプリをつくってみよう　ver.2

```book.rb

def input_book_info(books)
  book = {}
  puts "本の名前を入力してください："
  book[:name] = gets.chomp
  puts "本の値段を入力してください："
  book[:price] = gets.to_i
  puts "著者を入力してください："
  book[:author] = gets.chomp
  books << book
end


def show_book_info(books)
  unless books.empty?
    index = 0
    books.each do |book|
      puts "番号:[#{index}], 本の名前: #{book[:name]}"
      index += 1
    end

    puts "本の番号を入力してください："
    input = gets.to_i
    book = books[input]
 puts "本の名前: #{book[:name]}\t|値段: #{book[:price]} 円\t|著者: #{book[:author]}"
  else
    puts "本が登録されていません。"
  end
end

def end_program
  puts "ご利用ありがとうございました"
  exit
end


books = []

while true do
  puts "登録された本の数：#{books.length}"
  puts "[0]:本の情報を入力する"
  puts "[1]:本の名前を一覧表示する"
  puts "[2]:プログラムを終了する"
  input = gets.to_i

  if input == 0
    input_book_info(books)
  elsif input == 1
    show_book_info(books)
  else
    end_program
  end
end

```

二回目ということもあり、メソッドの配置などはうまくでき、引数の理解も深まった。
指摘された通りに、ハッシュ、配列関係の理解が乏しい。
book、booksも混合が多くあり、理解できているとはいえない。
動画カリキュラムの他に副教材などで理解に努めたい。
＃の使いどころなど、あやふやなところがいまだ多くあった。
サーバーログイン時のメッセージ設定 /etc/motd

ログイン時のメッセージ設定を行う場合に、/etc/motdを設定します。
どのサーバーにアクセスしているかが、わかりやすいので、作業ミス防止などに使ったりします。
今回は、気分を上げるために使います。

# 実行環境
* PC:iMac 2011 mid
* OS:macOS High Sierra
* Homebrew:1.4.1
* Go:1.9.2

goはGOPATHも設定しておいてください。

# ansizeでグラフィカルにする。
まずansizeというライブラリで画像のアスキーアートを作成します。
変換する画像はgoogleで適当に持ってきましょう。「〜 png」とかで検索するとたくさん出てきますので。
私はミニオンが好きなので、[こちら](http://www.imagenspng.com.br/2427/filmes-e-desenhos/minions/)から拾ってきたミニオンの画像を使います。

ansizeは透過画像も変換できるので、きれいなアスキーアートができます。
go get でライブラリから持ってきます。

```commnad
$ go get github.com/jhchen/ansize
```

以下のコマンドのように表示されればOKです。

```
$GOPATH/bin/ansize
Usage: ansize <image> <output> [width]>
```

goいれたけど、　`echo $GOPATH`で表示されなくて、どこいったんじゃいというときは

```:command
$ go env
```
で確認しましょう。
　
さっそく作成してみます。

```:command
$ $GOPATH/go/bin/ansize ./Pictures/minions.png ./minions.ascii
```
![スクリーンショット 2017-12-26 8.35.13.png](https://qiita-image-store.s3.amazonaws.com/0/63125/dc6b07e5-0776-6460-00e2-8bab4b75a091.png)
第３引数で幅も指定できます。
デフォルトは100なのかな。
半分の50にすると少し荒くなりました。

```:command
$ $GOPATH/go/bin/ansize ./Pictures/minions.png ./minions.ascii 50
```
![スクリーンショット 2017-12-26 8.39.04.png](https://qiita-image-store.s3.amazonaws.com/0/63125/41cf4693-716f-8b33-d75c-5772c9f2187b.png)

これを使うことにします。
/etc/motd に出力します。
```:command
$ $GOPATH/go/bin/ansize ./Pictures/minions.png ./minions.ascii 50 >> /etc/motd
```


# figletでメッセージを生成する。
figletは文字をアスキーアート化してくれます。
テクい感じじゃなくて普通に使用します。こちらはbrewコマンドでインストール。

```
$ brew install figlet
```
インストールしたらすぐに使用できます。
引数でアスキーアート化したい文字列を渡します。

```
$ figlet Welcome to iMac
__        __   _                            _          _ __  __            
\ \      / /__| | ___ ___  _ __ ___   ___  | |_ ___   (_)  \/  | __ _  ___ 
 \ \ /\ / / _ \ |/ __/ _ \| '_ ` _ \ / _ \ | __/ _ \  | | |\/| |/ _` |/ __|
  \ V  V /  __/ | (_| (_) | | | | | |  __/ | || (_) | | | |  | | (_| | (__ 
   \_/\_/ \___|_|\___\___/|_| |_| |_|\___|  \__\___/  |_|_|  |_|\__,_|\___|
                                              
```

これも/etc/motdに追記しましょう。
そしてターミナルでログイン！
![スクリーンショット 2017-12-26 8.45.36.png](https://qiita-image-store.s3.amazonaws.com/0/63125/509bfee1-4288-506b-c91b-fc60484e3c83.png)

コンソールのデフォルトサイズで全体がきれいに表示されるようにするといいと思います。
[React Native]VSCodeでPrettierを入れる

### 背景 

- [この記事](https://qiita.com/mizchi/items/bcb1aef8d1f14f8d0b4a#prettier-%E3%82%92%E4%BD%BF%E3%81%86)を読んでprettierを入れてみたくなった

### 前提

- React開発向けの内容


### 手順メモ

- 必要なモジュールをインストール

```:npmの人
npm i --save-dev eslint babel-eslint eslint-config-airbnb eslint-plugin-jsx-a11y eslint-plugin-react eslint-plugin-import prettier-eslint prettier-eslint-cli eslint-plugin-jest
```

```:yarnの人
yarn add -D eslint babel-eslint eslint-config-airbnb eslint-plugin-jsx-a11y eslint-plugin-react eslint-plugin-import prettier-eslint prettier-eslint-cli eslint-plugin-jest
```

- VSCodeでPrettierの拡張機能を追加

<img width="652" alt="スクリーンショット 2017-12-26 7.44.13.png" src="https://qiita-image-store.s3.amazonaws.com/0/175213/1ef29bde-3182-0987-e0f5-7f974bed8f1f.png">

- ファイル保存時にフォーマッターがかかるように設定追加

<img width="619" alt="スクリーンショット 2017-12-26 7.46.34.png" src="https://qiita-image-store.s3.amazonaws.com/0/175213/d703bcf5-c58c-553b-b6e6-b2804cb4d466.png">

- 以下のようにするとeslintの設定と平仄がとれるようになる

```json

{
    "editor.formatOnSave": true,
    "javascript.format.enable": false,
    "prettier.eslintIntegration": true
}
```

- eslintの設定ファイルは最小限だとこれくらい？

```json:.eslintrc
{
  "extends": "airbnb",
  "parser": "babel-eslint"
}
```

- これで保存時にフォーマッタがかかるようになる

### 参考記事

- [Configure ESLint, Prettier, and Flow in VS Code for React Development](https://hackernoon.com/configure-eslint-prettier-and-flow-in-vs-code-for-react-development-c9d95db07213)
- [WebStormにPrettier導入してReactNativeでの開発環境を改善する - Qiita](https://qiita.com/kouchi67/items/6d3b5cf66f57c4ff6600)
AURのchrome-remote-desktopにパッチをあてる

# 発端
arch linuxでいつものように

```bash
$ yaourt -S chrome-remote-desktop
```
でインストールしようとしても失敗

# 原因
PKGBUILDが参照しているdebファイルが古いらしい

# 解決策
まずはAURを覗きます。
[AUR (en) - chrome-remote-desktop](https://aur.archlinux.org/packages/chrome-remote-desktop/)

コメント欄にて有志がパッチを公開していらっしゃるようです。
[Chrome remote desktop AUR patch: 63.0.3239.17](https://gist.github.com/starain/d4a413826cd957384a2bbc744c4325c5)

yaourtでのインストール時にPKGBUILDのsourceをいじってもいいけれど今回は```yaourt -G```でPKGBUILDを落としてpatchコマンドでパッチを当てます。

```bash
$ yaourt -G chrome-remote-desktop
$ cd chrome-remote-desktop/
$ curl https://gist.githubusercontent.com/starain/d4a413826cd957384a2bbc744c4325c5/raw/646e00af8ab8a723793ac5a71e44c011177deb77/PKGBUILD.patch > PKGBULID.patch
$ patch < PKGBUILD.patch
$ makepkg
```
Pitagora Meetup に参加してみよう

[以前の記事](https://qiita.com/oraryotas/items/8a32457a62a292b9dd72)で Pitagora Meetup を紹介しましたが、はじめに参加するときには、何からはじめるのがよいでしょうか。 Pitagora Galaxy の Wiki を見てみましょう。

![スクリーンショット 2017-12-26 3.15.11.jpg](https://qiita-image-store.s3.amazonaws.com/0/191970/0de9643c-14fd-2940-df98-c1e089aa4e3b.jpeg)

イベントページの[Meetup の過ごし方ガイド](http://wiki.pitagora-galaxy.org/wiki/index.php/Events#Meetup_.E3.81.AE.E9.81.8E.E3.81.94.E3.81.97.E6.96.B9.E3.82.AC.E3.82.A4.E3.83.89)にも書かれている通り、Pitagora Meetup で Galaxy に携わっている方には、Galaxy でデータ解析をしたい方と Galaxy 用のツールを開発したい方がいます。

いずれの場合も、まずは Galaxy（できれば Pitagora Galaxy）を使えるようにしておく必要があります。公共サーバーにアカウントを作っておくだけでも大丈夫ですが、特にツール開発者の場合にはお手元もしくはクラウド上でご自分の Galaxy が使えると便利です。仮想マシンをダウンロードする場合は、[ダウンロード](http://wiki.pitagora-galaxy.org/wiki/index.php/Versions)ページをご参照ください。

[はじめてガイド](http://wiki.pitagora-galaxy.org/wiki/index.php/Get_Started)のページには、はじめて Galaxy を使う人のためのハンズオンや、ツール開発のためのハンズオンが置かれていますので、Meetup でこれらを試してみてください。

あとはツールを使ったり作ったり、わかったことをどんどん Wiki に記載頂ければ、きっと多くの皆さんの役に立ちます。参加希望の方は、admin [at] pitagora-galaxy.org までお気軽にご連絡ください！
Android Studioが突然 "write access is allowed from event dispatch thread only" と言いだした話

## 概要
表題の通りです。それなりにハマったのでメモしておきたいと思います。

## きっかけ
デバッグしていたら突然 `write access is allowed from event dispatch thread only` というメッセージがIDEの右下表示されました。

## 試したこと
### JDK Locationの設定
とりあえずググってみたら以下の記事がヒットしたので試してみました。

- [Gradle error : Write access is allowed from event dispatch thread only in android studio - Stack Overflow](https://stackoverflow.com/questions/39828043/gradle-error-write-access-is-allowed-from-event-dispatch-thread-only-in-androi)

この記事の方法だと `Use embedded JDK (recommended)` をチェックすると書いてあるのですが試したところ効果がありませんでした。

![スクリーンショット_2017-12-26_3_14_15.png](https://qiita-image-store.s3.amazonaws.com/0/185323/5e972b5a-dce5-ae49-d017-30dfc90ad5fd.png "スクリーンショット_2017-12-26_3_14_15.png")

### Android Studio 再インストール
しばらく調べてみたのですがこれといった解決策が見つからず、とりあえずAndroid Studioを削除してみることにしました。ついでに以下も削除しました。

- ~/.android
- ~/.gradle
- ~/Library/Android

そしてAndroid Studioを起動してみたところ…同じ現象に遭遇しました。

### .gradleのキャッシュを削除
最後に試したのは以下の記事の方法です。

- [Android - gradle関係でエラーが出ているのですが、この画像のように設定がされていないのは、まずいですか？(69887)｜teratail](https://teratail.com/questions/69887)

Android Studioを再インストールしたときに削除していたのできっと同じ結果になるかもと思いながら試してみたところ意外にも解決しました。

ちなみに削除したのは `~/.gradle/caches` です。

## 最後に
おそらくその時々で解決方法は違ってくるのかもしれませんが今回は **gradleのキャッシュ** を削除することで解決しました。お役に立てば幸いです。
Pitagora Meetup とは

今回は Pitagora Meetup についてご紹介します。

Pitagora Meetup はもともとは日本の Galaxy ユーザーが集まって、Galaxy についての情報交換をする場として、毎月一度開催されていました。Galaxy ユーザーはそれぞれ公開したいツールが有るため、これらをひとつの仮想マシンに入れて配布する仕組みを作ろうとしたわけです（下図）

![about_en.png](https://qiita-image-store.s3.amazonaws.com/0/191970/c4b10e2c-cb86-b6b2-5e25-c1922af47fc8.png)

それと同時に、ここで共有されたノウハウを [Wiki](http://wiki.pitagora-galaxy.org/wiki/index.php/Main_Page) で公開し、さらに誰でも使える[公共サーバー](http://try.pitagora-galaxy.org/galaxy/)を立ち上げました。仮想マシンも Wiki からダウンロードすることができます（下図）

![スクリーンショット 2017-12-26 3.15.11.jpg](https://qiita-image-store.s3.amazonaws.com/0/191970/216f27a0-1a60-d2ff-d837-c56eafa86883.jpeg)

現在では、Pitagora Meetup は Galaxy に留まらず、Docker コンテナや CWL（Common Workflow Language: 詳細は [CWL の Advent Calendar](https://qiita.com/advent-calendar/2017/cwl) へどうぞ）も用いて **データ分析の再現性** を議論する場となっています。

ご興味のある方は admin [at] pitagora-galaxy.org までお気軽にご連絡ください！
how to install GHC for Android [termux]

#はじめに

```pkg``` や ```apt``` でインストールできなくて、
ソースからコンパイルとかも試しても結局できなくて苦戦したので
備忘録を残しときます。

結局はubuntuを入れて、そこで```apt ```するだけのお話です。

#手順

\* androidアプリ「termux」で実行します。
\* デバイスは「Galaxy S8」で行いました。




```
#pythonのインストール
pkg update
pkg install python
pkg install python2
```

```
#gitからLazymuxを手に入れる
apt-get install git
git clone https://github.com/Gameye98/Lazymux.git
```

```
#lazymuxからubuntuをインストール
cd Lazymux
python2 lazymux.py
#インストールできるものの一覧が表示されるのでubuntuを選択
#記載の時点では[39]がubuntu
```

```
#ubuntuを起動する
cd termux-ubuntu
./start.sh
```

```
#以下,起動したubuntuで実行
#gccとghcをインストール
apt update
apt install clang
apt install gcc
apt install ghc
```
論文っぽい英単語のまとめ

#はじめに
この記事は [Real Sakai Lab Advent Calendar 2017](https://qiita.com/advent-calendar/2017/rsl)の25日目の記事です。
間違いや追記した方が良い等ございましたらお気軽にお申し付けください。
随時追加していく予定です。


#概要
ここ１年弱自然言語処理や機械学習系の論文を読んで
出てきた論文特有な単語を備忘録がてらまとめてみる。
これを読むことで論文の初心者が少しでも英語の論文を読めるようになることを望む。

#対象
英語の論文を全く/ほぼ 読んだことの無い人。


## abstract/conclusion
意味:概要/結論
論文の最初の章と最後の章。
両方共論文の全体の流れが書いてあるので
ここに目を通してから論文を読み始めると
理解が早まる。

## et al
意味:ら 等
論文は何人もの著者による共著の場合が多く
全員書くと長くなるので代表の数人だけ書いて
後はet al省略することがしばしある。
et alさんではない。
「Steve Jobs,Bill Gates,et al」とあったら
Steve JobsさんとBill Gatesさんが第一,第二著者で他にも携わっている人がいる。

##empirical
意味:経験的な
empirical result って形で「著者たちが今までやってきた結果」
が多い気がする。


##baseline
意味:基準
提案手法がどれくらい優れているかを示すための
比較対象。

##State of the art
意味:最先端の
既存手法や既存手法の結果の紹介のところで
「今までで一番良かったのは」のような意味で使われる。
大体これになんらかの問題や欠点があるので
提案手法でこれの克服が行われる。

##Significance testing
意味:有意差の検定
提案手法によって得られた結果が本当に
既存の結果に対して有意かを調べる作業。

## drawback
意味:弱点
既存手法の紹介の部分でこの単語が出てきたら
提案手法の紹介の部分でこれを克服する方法が
結構な確率で出てくる。

## future work
意味:今後の課題
○○ is a future work とあったら○○はまだ解決していない問題である。
今後の論文の題材に使えるかも。
OpenFOAMで計算するネタがない時の探し方

#はじめに
アドベントカレンダー最終日に何か書こうと思ったが、手持ちのネタがなかった。
そこで逆転の発想で、ネタがない時のネタの探し方をまとめてみることにした。

よく身の周りでOpenFOAMを勉強したいけど、ネタがなくて計算できないという人がたまにいる。そんな人向けに今回は私がよく使うネタの作り方をまとめてみた。

最終日になんてネタ出してry

#誰も触っていない機能を使ってみる
べたなネタ作りの手段。その割には有用な情報となりやすいので、ネタとしては簡単に容易できやすい。
ネックは誰も触っていないので、たまに地獄を見ること。

#チュートリアルケースプロジェクトに参加する
チュートリアルの中身を読んで理解するのも立派な勉強である。以下のOpenFOAMチュートリアルドキュメント作成プロジェクトは複数の有志によって書かれている。大変参考になる。

OpenFOAMチュートリアルドキュメント作成プロジェクト
https://sites.google.com/site/freshtamanegi/home

#人のネタを自分なりにやってみて違う観点でまとめてみる
たまにやる。というのも他の方が書いた記事を参考にすることも多いが、基本的には信用しないことにしている。

情報ソースが一つしかないときは特に気を付けるようにしていて、自分でも同じことをやってみて、どんな知見や感想を得られるかを確かめてみる。で、得た知見や感想をアウトプットする。

この場合、新規性は薄れるが、役に立つ情報は重複していても良いと思う。まるかぶりはだめだけど、似た情報がいくつもあるというのは情報の確度が高まるという観点では重要であると思う。

#TwitterでOpenFOAMを検索する。
TwitterでOpenFOAMのキーワード検索をすると、たまに「誰かやってくれないかな」的なつぶやきを見つけることがある。これに乗ってしまう。なにせ、目的は人が用意してくれているので、あとはやるだけである。ネタを新たに考える必要ない。

OpenFOAMと同じオープンソースのCAEソフトであるCode-Asterのバリデーションプロジェクトは最初は他愛もないつぶやきとそれに乗った人間たちから始まった(現在停滞中)。

ただし、アイデアの強奪には気を付ける。揉める。

なお、今回のOpenFOAMアドベントカレンダーもTwitterのつぶやきに悪乗りしたものです。


#OpenFOAM Google Groupで質問に回答する
これも先日やった。質問に答えるというのは何かと勉強になる。相手から情報をどのように引き出すか、どういう問題であるのか、どのようにわかりやすい回答をするのかなど、多角的に考えさせられることが多い。

少し、OpenFOAMに慣れてきたら自分の知識を整理する意味合いでも、質問の回答者になってみると新たな発見がある。

なお、回答者になるときは仏の心が必要な時もある。

#自分で簡易試験装置を作ってみる
私が参加しているオープンCAE勉強会＠関西では、簡易風洞を作ったり、流しそうめん機を改造して回流水槽を作ったりした。
あの時のムーブメントはすごかった。やはり何か形になるものを作るのは盛り上がりやすい。

3Dプリンターも最近は安価で手に入るのでこれを使うのもいい。CADの練習もできる。

先日のオープンCAEシンポジウム(http://www.opencae.or.jp/activity/symposium/opencae_symposium2017/) でも学生向けの教育として3Dプリンターで供試体を作り、計算させてより目的に合ったものを作らせるという興味深い話を聞いた。物を作りながら計算するというの学習という点では理解しやすいものなのかもしれない。

#作る時間がない時はAmazonで「実験キット」を探してみる
最近使った手。Amazonでは簡単な実験を行えるようなキットが売っている。
真空状態を作るキットや風を吹かしてスチロールの球を浮かすものなど、いろいろあってみているだけでも楽しい。ものが手元にあると計算もしやすいし、寸法計測などをしていると解析モデルでここはいらないだろうとか考えることができる。

最近チェックしたのは以下のキット。

[空気実験マジックキット (科学と学習PRESENTS)](https://www.amazon.co.jp/%E7%A9%BA%E6%B0%97%E5%AE%9F%E9%A8%93%E3%83%9E%E3%82%B8%E3%83%83%E3%82%AF%E3%82%AD%E3%83%83%E3%83%88-%E7%A7%91%E5%AD%A6%E3%81%A8%E5%AD%A6%E7%BF%92PRESENTS-%E7%A7%91%E5%AD%A6%E7%B7%A8%E9%9B%86%E5%AE%A4/dp/4057503889/ref=sr_1_11?ie=UTF8&qid=1514220307&sr=8-11&keywords=%E5%AE%9F%E9%A8%93%E3%82%AD%E3%83%83%E3%83%88)

[色んな力発見キット](https://www.amazon.co.jp/%E3%82%A2%E3%83%BC%E3%83%86%E3%83%83%E3%82%AF-55767-%E8%89%B2%E3%82%93%E3%81%AA%E5%8A%9B%E7%99%BA%E8%A6%8B%E3%82%AD%E3%83%83%E3%83%88/dp/B00BF7MCRG/ref=sr_1_28?ie=UTF8&qid=1514220830&sr=8-28&keywords=%E5%AE%9F%E9%A8%93%E3%82%AD%E3%83%83%E3%83%88)

[アーテック 気圧・気温変化実験器 008019](https://www.amazon.co.jp/%E3%82%A2%E3%83%BC%E3%83%86%E3%83%83%E3%82%AF-008019-%E6%B0%97%E5%9C%A7%E3%83%BB%E6%B0%97%E6%B8%A9%E5%A4%89%E5%8C%96%E5%AE%9F%E9%A8%93%E5%99%A8/dp/B0041JEJWQ/ref=sr_1_1?ie=UTF8&qid=1514220871&sr=8-1&keywords=%E5%AE%9F%E9%A8%93%E3%80%80%E7%9C%9F%E7%A9%BA)

#勉強会で何かやりたがっている人のところに乗っかってみる
最近だとOpenFOAMのコードリーディング研究会とか、2018年3月にはオープンCAEハッカソン(予定)とかがある。

自分でネタを思いつけないときは誰かと一緒になってやってみて、その中で自分のネタを見つけていくのもいいと思う。

# まとめ
計算するネタがない時は広くアンテナを伸ばして興味があることを見つける。勉強は持続すること重要だと思っているので、なるべく飽きないように工夫していくことが、続けていく秘訣だと思う。

個人で勉強していると、計算のネタがない時が一番つらく、つまらない時である。そんな時は勇気を出して各地の勉強会に行ってネタを探すのも手だと思う。

来年も良いOpenFOAMライフを！
 
 
 
 
 
本当はサンタクロースが煙突に入っていく様子をオーバーセットで計算しようとしましたが間に合いませんでした！またどこかで公開します。
Vagrantで起動したゲストOSにTeraTermからSSH接続するマクロ

Vagrantで起動したゲストOSへ、TeraTermからアクセスするには以下のマクロ実行すれば良い。
シェル(コマンドプロンプト or PowerShell)から`vagrant ssh`でも良いが、TeraTermからsshしたい人向け。

```
;; デフォルトのIP/ポート
HOST_ADDR = '127.0.0.1:2222' 
;; ユーザ名／SSHキー
USER_NAME = 'vagrant'
getdir KEY_FILE
;; このマクロファイルを置いた場所からの相対パスを記述
strconcat KEY_FILE '\..\.vagrant\machines\default\virtualbox\private_key'
 
COMMAND = HOST_ADDR 
strconcat COMMAND ' /ssh /2 /auth=publickey /user=' 
strconcat COMMAND USER_NAME 
strconcat COMMAND ' /keyfile="' 
strconcat COMMAND KEY_FILE
strconcat COMMAND '"' 
 
connect COMMAND
settitle '[任意のウインドウタイトル]'
end
```