OmniAICreator/Qiita-1.07M huggingface dataset:
ec2-userをころす

EC2インスタンスを立てて、一通りユーザー作ったりログインの設定したりした後にセキュリティ的にec2-userというみんなが知ってるユーザーがリモートログインできると心配になることがあると思います。
そんなときの対処法です。

※他のユーザーで問題なくリモートログインできることを確認した後に行って下さい！！

## ログインできなくするだけでいい場合

ころす

```bash
$ ssh $host # EC2インスタンスにログイン
$ sudo usermod -s /sbin/nologin ec2-user
```

確認

```bash
$ ssh -i /path/to/key-file -l ec2-user $host # 目的のインスタンスじゃないマシンからリモートログインを試みる
Last login: Mon Aug  7 03:56:27 2017 from xxxx.xxxx.xxxx.xxxx
       __|  __|_  )
       _|  (     /   Amazon Linux AMI
      ___|\___|___|
https://aws.amazon.com/amazon-linux-ami/2017.03-release-notes/
This account is currently not available.
Connection to yyyy.yyyy.yyyy.yyyy closed.
```

## 本当に消す

```bash
$ sudo userdel ec2-user
```

## ディレクトリも消す

```bash
$ sudo userdel -r ec2-user
```

以上です。
petalinux / microzed > スイッチSW1の状態をリードする


```txt:動作環境
Petalinux 16.02
Microzed
```
自分用メモ。

Microzed上のスイッチ(SW1)の入力をリードするため
AVNETの[手順書](http://zedboard.org/sites/default/files/documentations/MicroZed_GettingStarted_v1_0.pdf)の通りにやってみたが全く反応なし。。。

調べたらGPIO51ではなくGPIO957にする必要がある。

```
echo 957 > /sys/class/gpio/export
echo in > /sys/class/gpio/gpio957/direction
cat /sys/class/gpio/gpio957/value
```

スイッチONで１
スイッチOFFで０

がリード出来た。
Docker内でMySQLを動かす


This is how we setup docker
[dockerのセットアップは、こちらを見て下さい](http://qiita.com/joji/items/39f5488308fc166964d8 "dockerのセットアップは、こちらを見て下さい") 

```:bash
sudo docker run --privileged -d --name mysql-server centos /sbin/init
```

```:bash
sudo docker exec -it mysql-server /bin/bash
```

###inside container

```:bash
yum -y localinstall https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
```

```:bash
yum -y install mysql-community-server
```

You can check a MySQL version

```:bash
mysqld --version
#mysqld  Ver 5.7.19 for Linux on x86_64 (MySQL Community Server (GPL)
```

You can run MySQL

```:bash
systemctl start mysqld.service
```

You can check it

```:bash
ps -ef | grep mysqld
#/usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid
```

You can check a password

```:bash
cat /var/log/mysqld.log | grep root
#2017-08-08T10:43:04.940429Z 1 [Note] A temporary password is generated for root@localhost: FFETsYVzj8+s
```

You must set a new password

```:bash
mysql_secure_installation
```
petalinux / microzed > LED(D3)を点灯させる


```txt:動作環境
Petalinux 16.02
Microzed
```
自分用メモ。

Microzed上のLED(D3)をLチカさせるため
AVNETの[手順書](http://zedboard.org/sites/default/files/documentations/MicroZed_GettingStarted_v1_0.pdf)の通りにやってみたが全く反応なし。。。

調べたらGPIO47ではなくGPIO953にする必要があるとのこと。

```
echo 953 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio953/direction
```

LED点灯

```
echo 1   > /sys/class/gpio/gpio953/value
```

LED消灯

```
echo 0   > /sys/class/gpio/gpio953/value
```
テキストエディタの大ファイル事情【2017年Windows編】

- 2018/06/26 タイトルに `2017年` を入れました。
近いうちに2018年版を書こうと思います。


# やってみたこと
テキストエディタの性能で、意外と重要なのが「GB級のでかいファイルを扱えるか」です。
エンジニアであればログファイルだとかDBのダンプだとかでファイルサイズの大きなテキストを扱った経験はけっこうあるかと思います。
最近のWindowsのメジャーなエディタはどんなもんなのか、夏休みの自由研究的にやってみました。


# 環境もろもろ
## マシン
- Windows 10 Pro 64bit
- RYZEN 5 1600
- DDR4-2400 16GB (うち2GBはRAMディスク化)
- PX-256M6V (システム)
- WD30EZRZ (データ)
- ページングファイルはHDD上へシステム管理サイズに設定(2937MB)

## エディタ
- Atom 1.18.0
- Brackets 1.9
- EmEditor Professional 17.0.1
- Sublime Text build 3126
- TeraPad 1.09
- Visual Studio Code 1.14.2
- サクラエディタ 2.3.2.0
- 秀丸エディタ 8.73

## 実験素材
多少は圧縮がききそうでランダムな内容のテキストファイルを用意しました。
1行1023文字でこんな感じです。
![largetext.png](https://qiita-image-store.s3.amazonaws.com/0/118352/8a0fe172-fd04-48b7-c956-915ff48fec00.png)
サイズは100MB, 512MB, 1GB, 4GB, 8GB, 16GBのものを作りました。


# で、どうだったの
## Atom
大きいファイルを開こうとすると「しばらく反応しなくなるよ！」という警告が出ます。
100MBは全般的に数秒待たされることはありますがまあ一通り作業可能。
そして512MB以上のファイルは `Uncaught RangeError: Invalid string length` となって開けず。[このへん](https://github.com/atom/atom/issues/7210)で報告されているのでそのうち良くなるかもしれません。

余談ですが、1行がとても長いと折り返しをOFFにしていても一定の文字数で折り返されてしまうっぽい。ちょっと困りますね。

## Brackets
大きなファイルを開こうとすると `16MBを超えるサイズのファイルはBracketsで開くことはできません` と言われてジ・エンド。
無反応になったりクラッシュするよりはマシでしょうか。

## EmEditor
ファイルオープンは4GB以上だと時間がかかりますが、ファイル先頭のほうはすぐに表示されます。
オープン中でもカーソル操作、検索は快適。
巨大ファイルコントローラーという機能があり、ファイルの一部だけ開けるのが便利。
読み込み中はステータスバーにロード状況が表示され、ファイルオープンにかかる時間は1秒あたり20MB弱くらいです。
結局今回16GBファイル全体を開けたのはEm君だけでした。

## Sublime Text
1GBまでは良かったんですが4GB開こうとしたらメモリ警告が出て強制終了でした。なぜかChromeとFireFoxも道連れでクラッシュ。
ファイルオープンにかかる時間は1秒あたり10MB強くらい。
ファイルが開ければあとは快適。

## TeraPad
1GB開こうとしたら少し待ったのちメモリ不足だという警告が出て開けませんでした。
512MBまでは問題なし。

## Visual Studio Code
100MBでも `このファイルはバイナリか、非常に大きいか、またはサポートされていないテキストエンコードを使用しているため、エディターに表示されません`となってしまいました。無念。
無反応になったりクラッシュするよりはマシでしょうか。

## サクラエディタ
1GBまでは開けましたが4GB以上だと `ほかのアプリケーションで使用されている可能性があります` というエラーで開けず。
ファイルオープンにかかる時間は1秒あたり10MBくらいで、開いた後の各種操作は快適でした。
ちなみに `開こうとしたファイルが大きい場合に警告する` というオプション設定があります。

## 秀丸エディタ
最大限ファイルを開くには `編集可能な最大行数` オプションの設定変更が必要です。初期設定は100万行で最大1000万行まで設定可能。
1GB以上だと開く前にファイルの一部だけ開くかどうかのダイアログが出てきます。16GBだとおよそ1600万行あってファイル全体は開けませんでしたが、9GB分くらいは開けました。
読み込み中はウィンドウタイトル部分にロード状況が表示されるのが親切。
ファイルオープンにかかる時間は1秒あたり20MBくらいで、開いた後の各種操作は快適でした。


# まとめ
シェアウェアだけあってEmEditorと秀丸は優秀ですね。秀丸は最大行数制限があるのでEmのほうが若干上かな。
無料ものならサクラが比較的よかったでしょうか。
Atom, Brackets, VSCode 等の最近出てきたエディタはテキスト編集よりコーディングに重きを置いていることもあって大ファイルは対応が悪いようです。

他にもいいエディタご存知の方がいたらぜひ教えてください。
dynamodbのqueryパラメータを楽に書くツールを作ってみた


[Node.jsでDynamoDBを操作するためのチートシート[DynamoDB.DocumentClient][AWS]](http://qiita.com/Yuki_BB3/items/83198b4d9daca7ccd746)という感じでnodejsで色々するために前からメモを書いていますが、毎回わからなくなるので簡単なquery用のパラメータを生成するモジュールを作ってみました（初公開）

# dyqun
若さ故の過ち...とかではない。

git-hub: https://github.com/yukiGitHubAc/dyqun

# 使い方

```
npm i dyqun
```

モノとしてはパラメータを生成すだけなので生成したパラメータをDynamoDB.DocumentClient.queryのパラメータに指定して投げます。

1. Hashキーを使った検索
2. HashキーとRangeキーを使った検索
3. Hashキーのみを指定して対応するRangeキーを全て取得する検索
4. Indexを指定した検索
5. 上記検索にFilterを組み合わせて検索

を現状カバーしています。


# dyqun用パラメータ

|項目名|必須|値|メソッド|
|:---|:---|:---|:---|
| tableName |必須|検索対象のDynamoDテーブル名|query/filter|
| indexKey |任意|インデックスから検索する際のインデックス名|query/filter|
| hashKey |必須|検索対象のテーブルのHashキー情報ブロック|query/filter|
| hashKey.key |必須|検索対象のテーブルのHashキーの項目名|query/filter|
| hashKey.val |必須|検索対象のテーブルのHashの値|query/filter|
| hashKey.operator |任意|検索対象のテーブルのHashキーの検索条件defaultはイコール|query/filter|
| rangeKey |任意|検索対象のテーブルのHashキー情報ブロック|query/filter|
| rangeKey.key |任意|検索対象のテーブルのレンジキーの項目名|query/filter|
| rangeKey.val |任意|検索対象のテーブルのレンジキーの値|query/filter|
| rangeKey.operator |任意|検索対象のテーブルのレンジキーの検索条件defaultはイコール|query/filter|
| filter |必須|検索フィルター条件ブロック|filter|
| filter.key |必須|フィルターとして使用する項目名|filter|
| filter.val |必須|フィルターとして使用する項目の値|filter|
| filter.operator |任意|フィルターとして使用する項目の検索条件defaultはイコール|filter|

```javascript:config
let config = {
        tableName: '<YOUR TABLE NAME>',
        indexKey: '<YOUR INDEX NAME>' // optional
        hashKey: {
            key: '<YOUR HASH KEY NAME>',
            val: '<YOUR HASH KEY STRING VALUE>', //| <YOUR HASH KEY NUMBER VALUE> 
            operator: '= | < | > | <= | >=' // optional
        },
        /* optional
        rangeKey: {
            key: '<YOUR RANGE KEY NAME>',
            val: '<YOUR RANGE KEY STRING VALUE>', //| <YOUR RANGE KEY NUMBER VALUE> 
            operator: '= | < | > | <= | >=' // optional
        },
        filter: {
            key: '<YOUR HASH KEY NAME>',
            val: '<YOUR HASH KEY STRING VALUE>', //| <YOUR HASH KEY NUMBER VALUE> 
            operator: '= | < | > | <= | >=' // optional
        }
        */
};
```


# サンプル

```nodejs:sample.js
const AWS = require('aws-sdk');
const doclient = new AWS.DynamoDB.DocumentClient();

const dyqun = require('dyqun');


let config = {
        tableName: '<YOUR TABLE NAME>',
        hashKey: {
            key: '<YOUR HASH KEY NAME>',
            val: '<YOUR HASH KEY STRING VALUE>' | <YOUR HASH KEY NUMBER VALUE> 
        }
};
let query = new dyqun.query(config);

let params = query.get();
doclient.query(params, (err, data) => {
   if(err) console.log(err);
   if(data) console.log(data);
});
```

.get()でこんな感じのパラメータに整形して返します

```javascripts:parameter
let parameter = {
    TableName: 'test',
    KeyConditionExpression: '#hash = :hash AND #range = :range',
    ExpressionAttributeNames: {'#hash': 'hash', '#range': 'key', '#filter': 'day'},
    ExpressionAttributeValues: {
        ':hash': 'hogehoge',
        ':range': 11111111,
        ':filter': 'fugafuga'
    },
    FilterExpression: '#filter = :filter'
};
```
Docker イメージ削除 'image has dependent child images' への対処

## Docker イメージが削除できない場合

### 現在の Docker イメージの確認

```
Inohana:~ inoko$ docker images
REPOSITORY               TAG                 IMAGE ID            CREATED             SIZE
test                   0.92                85303a1d447d        23 minutes ago      1.52GB
test                   0.91                405f9f4006e7        9 hours ago         1.48GB
centos                   <none>              328edcd84f1b        4 days ago          193MB
ubuntu                   latest              0ef2e08ed3fa        5 months ago        130MB
```

### docker rmi コマンドでイメージ削除

- コンフリクトエラーとなる。

```
Inohana:~ inoko$ docker rmi 405f9f4006e7
Error response from daemon: conflict: unable to delete 405f9f4006e7 (cannot be forced) - image has dependent child images
111
```

- repository:tag で削除してみる。

```
Inohana:~ inoko$ docker rmi test:0.91
Error response from daemon: conflict: unable to remove repository reference "test:0.91" (must force) - container 55d3edcfa1ee is using its referenced image 405f9f4006e7
```
- 消えていない。

```
Inohana:~ inoko$ docker images
REPOSITORY               TAG                 IMAGE ID            CREATED             SIZE
test                   0.92                85303a1d447d        24 minutes ago      1.52GB
test                   0.91                405f9f4006e7        9 hours ago         1.48GB
centos                   <none>              328edcd84f1b        4 days ago          193MB
ubuntu                   latest              0ef2e08ed3fa        5 months ago        130MB
```

- 強制削除オプションを追加してみる。

```
Inohana:~ inoko$ docker rmi -f test:0.91
Untagged: test:0.91
```

- 削除できた。

```
Inohana:~ inoko$ docker images
REPOSITORY               TAG                 IMAGE ID            CREATED             SIZE
test                   0.92                85303a1d447d        24 minutes ago      1.52GB
centos                   <none>              328edcd84f1b        4 days ago          193MB
ubuntu                   latest              0ef2e08ed3fa        5 months ago        130MB
Inohana:~ inoko$
JINS MEME ES_Rの計測データをエクセルで開く際のトリビア

#### **課題**
JINS MEME ES_R（アカデミックパック）で計測データをエクセルで開いたときに時間の列の表記が`年：月：日：時：分：秒`になっていない.[(具体的な症状）](http://qiita.com/UJinc/items/ed9b6764dd9d678a9150#%E5%85%B7%E4%BD%93%E7%9A%84%E3%81%AA%E7%97%87%E7%8A%B6)
####  **解決方法**
* 日付の表記設定をエクセルで`hh:mm:ss.00`とする->時：分：秒の表記になる．  
[詳細：解決策＜時：分：秒への変更＞](http://qiita.com/UJinc/items/ed9b6764dd9d678a9150#%E8%A7%A3%E6%B1%BA%E7%AD%96)
* 日付の表記設定をエクセルで`yyyy/mm/dd hh:mm:ss.00`とする->年：月：日：時：分：秒の表記になる．  
[詳細：解決策＜年：月：日：時：分：秒への変更＞](http://qiita.com/UJinc/items/ed9b6764dd9d678a9150#%E8%A7%A3%E6%B1%BA%E7%AD%96%E5%B9%B4%E6%9C%88%E6%97%A5%E6%99%82%E5%88%86%E7%A7%92%E3%81%B8%E3%81%AE%E5%A4%89%E6%9B%B4)

###### おまけ
* 記録された時間はグリニッジ標準時（GMT）なので日本標準時（JST）に変換してみる．  
[詳細](http://qiita.com/UJinc/items/ed9b6764dd9d678a9150#%E6%97%A5%E6%9C%AC%E6%A8%99%E6%BA%96%E6%99%82%E3%81%AB%E5%A4%89%E6%9B%B4)

***
##### **具体的な症状**
JINS MEME ES_Rの専用DataLoggerによって記録したデータ（csv）を，メモ帳で開くと以下のようになっています．

![Screen Shot 2017-08-08 at 18.56.30.png](https://qiita-image-store.s3.amazonaws.com/0/108112/6430b6e2-31c7-6036-34fa-07fc2b61b523.png)

日付・時間関連の形式は
>年：月：日：時：分：秒

となっていることがわかります．
とりあえずグラフなどを描いてみたい，という欲求に従いエクセルで開いてみると通常以下のように時間表記が本来臨んでいない形式となります．

![Screen Shot 2017-08-08 at 18.37.26.png](https://qiita-image-store.s3.amazonaws.com/0/108112/3cc1048a-2354-363d-9aa6-1b4352a5147a.png)

このままでは面倒くさい．ということで，
>時：分：秒

の形式に直します．

##### **解決策＜時：分：秒への変更＞**
1. 時間の列（DATEが含まれるC列）を選択し，右クリック−＞”Format Cells（セルの書式設定）”を選択．
![Screen Shot 2017-08-08 at 18.39.50.png](https://qiita-image-store.s3.amazonaws.com/0/108112/d1a272ae-a126-c147-1d71-e29daf795066.png)
<br>

2. 分類項目より`Costum（ユーザー定義）`を選択し，`Type（種類）`の欄に直接`hh:mm:ss.00`と打ち込み，右下のOKボタンを押して設定終了．
![Screen Shot 2017-08-08 at 18.46.08.png](https://qiita-image-store.s3.amazonaws.com/0/108112/1ac7e0c0-22b7-8a8b-53ad-960a322d88c2.png)
<br>
4. 時間表記が`時：分：秒`に変更されているのがわかります．
![Screen Shot 2017-08-08 at 18.47.52.png](https://qiita-image-store.s3.amazonaws.com/0/108112/df144a90-d38c-b498-d4d5-c03cdabf48d9.png)
<br>

##### **解決策＜年：月：日：時：分：秒への変更＞**
1. 手順１は[詳細：解決策＜時：分：秒への変更＞](http://qiita.com/UJinc/items/ed9b6764dd9d678a9150#%E8%A7%A3%E6%B1%BA%E7%AD%96)の１と同じ．
<br>

2. 分類項目より`Costum（ユーザー定義）`を選択し，`Type（種類）`の欄に直接`yyyy/mm/dd hh:mm:ss.00`と打ち込み，右下のOKボタンを押して設定終了．
![Screen Shot 2017-08-08 at 19.28.53.png](https://qiita-image-store.s3.amazonaws.com/0/108112/ccbf1717-a6cd-1a9a-47a5-12b5b65be4d8.png)
<br>


3. 時間表記が年：月：日：時：分：秒時：分：秒に変更されているのがわかります．
![Screen Shot 2017-08-08 at 19.36.56.png](https://qiita-image-store.s3.amazonaws.com/0/108112/1ea936ae-ad23-b0af-b2c7-de4547914778.png)
<br>

##### **日本標準時に変更**
1. 日本標準時時間表示用の列を追加（今回はD列へ追加）し，任意のセル（今回はE5）にGMTとの時差である９時間＝「09:00:00.00」を記入．
2. あとは`D(n)=C(n)+$E$5`のようにE5セルを絶対参照として足し合わせていく．
![Screen Shot 2017-08-08 at 20.03.29.png](https://qiita-image-store.s3.amazonaws.com/0/108112/21532507-b434-0582-ce33-bc6b72cda8ab.png)
<br>

3. 日本標準時に直ります．
![Screen Shot 2017-08-08 at 20.04.15.png](https://qiita-image-store.s3.amazonaws.com/0/108112/5d2a70b4-ada5-9f7f-8522-53adce6b4de2.png)
Laravel 5.4 のDuskを実行するとエラーになる場合の対処

## 結論から言うと
Dusk内部で使用しているSeleniumのChromeDriverがパーミッションの問題で起動できていなかった
以下のコマンドで実行権限を付与する

```
cd [Laravelのディレクトリ]
chmod 755 vendor/laravel/dusk/bin/*
```

## 経緯
Laravleの実行環境は macOS Sierra ＋ Laradock
公式ドキュメントや各種紹介記事と同じようにDuskを導入して実行するとエラーが発生
(LaradockのworkspaceコンテナにChromeは入っていないのでDuskはMac上で実行)

エラーメッセージは特に表示されない

```
php artisan dusk
PHPUnit 5.7.21 by Sebastian Bergmann and contributors.

E                                                                   1 / 1 (100%)

Time: 366 ms, Memory: 13.00MB

There was 1 error:

1) Tests\Browser\ExampleTest::testBasicExample
```

テスト実行前に落ちてる気配がするので、例外を捕まえて無理やりメッセージを表示できるか試みる

``` php:ExampleTest.php
class ExampleTest extends DuskTestCase
{
    /**
     * A basic browser test example.
     *
     * @return void
     */
    public function testBasicExample()
    {
        try{
            $this->browse(function (Browser $browser) {
                $browser->visit('/')
                    ->assertSee('Laravel');
            });

        }catch (\Exception $e){
            echo "\n";
            echo $e->getMessage();
            echo "\n";
            throw $e;
        }
    }
}
```

エラー内容の確認に成功
（9515ポートはChromeDriverが待ち受けているはずのポート）

```
php artisan dusk
PHPUnit 5.7.21 by Sebastian Bergmann and contributors.

E                                                                   1 / 1 (100%)
Curl error thrown for http POST to /session with params: {"desiredCapabilities":{"browserName":"chrome","platform":"ANY"}}

Failed to connect to localhost port 9515: Connection refused


Time: 369 ms, Memory: 13.00MB

There was 1 error:

1) Tests\Browser\ExampleTest::testBasicExample

```

Google検索した所、ポートの競合or権限不足で起動失敗の可能性
ポートの競合はなかったので実行権限を付加したところ無事起動

duskインストールの際に`composer update`をworkspaceコンテナで実行したせいで実行権限が付加されなかったのかも？
Moodleのfeedbackで回答者一覧を取得する

# feedbackの回答者
Moodleのfeedbackモジュールでは匿名回答の場合には誰が回答したかを教師が知ることはできないようになっている。これは回答者に参加点を与えたいがプライバシーのために回答自体は匿名としたいという場合に問題となる。

# DBから回答者一覧を取得
MoodleのDBには匿名回答の場合であっても誰が回答したか記録されているため、DBから集計することで望む結果を得ることが可能となる。
Feedbackの活動を開いたときに表示されるURIが`http://moodle.yourdomain/mod/feedback/view.php?id=1234`だった場合には下記クエリのcm.id = ????は**cm.id = 1234**となる。
そのままだと回答順となってしまうため、idnumberで並び替えをしている（idnumberを利用していない場合を考慮してuser.idも利用している）。

```mysql
SELECT f.name, u.username, u.idnumber, u.lastname, u.firstname
FROM feedback AS f
LEFT JOIN feedback_completed AS fc ON f.id = fc.feedback
LEFT JOIN user AS u ON fc.userid = u.id
WHERE f.id =
(
  SELECT cm.instance
  FROM course_modules AS cm
  LEFT JOIN modules AS m ON cm.module = m.id
  WHERE cm.id = ???? AND m.name = 'feedback'
) 
ORDER BY u.idnumber, u.id ASC
```
Cognos Analytics on Cloud のご紹介

##概要
Cognos Analytics on Cloudのご紹介です。
元ネタは以下のリンクになります。

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

##内容
Cognos Analytics on Cloudには、Workgroup、Standard、Enterpriseの3つの契約形態があります。
Standardでは、Workgroupで使える機能に加えて、使用できるディスク容量が増えています。
Enterpriseでは、Standardに加えてベアメタルでの構成になり、パフォーマンスを求める形態になります。
![001.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/5532669f-2d63-fd9e-4280-6b0aafd40e07.png)

運用管理の際に、IBMの責任範囲とお客様での責任範囲になります。
IBM側で、Fixの適用や、Configuration、バックアップ・リストア、再起動、ログ収集、バージョンアップなどを行い、お客様側では、コンテンツの管理やセキュリティの管理、データソース接続の設定などが、作業範囲になります。
![002.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/f92d97b3-bc18-f2cc-c06b-3e5a846d5735.png)

参考までに、お客様がアクセス可能なCognos Administrationの画面です。
Statusタブに「system」が表示されなくなっていたり、Configurationタブにも「Dispatcher」が表示されておらず、システムの構成系の管理は、IBM側の管理になるので、お客様管理画面からは見えません。
![003.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/70d41bae-069b-8d14-22fd-20bafa208575.png)

Cognos Analyticsは、3ヶ月に1回の新バージョンのリリースが予定されています。
Cloud環境では、最新バージョンの1つ前のバージョンまでは、バージョンを維持しておく(バージョンアップをしない)事が可能です。
バージョンアップのタイミングは、2バージョン遅れになる前に、お客様の方で日付指定が可能です。
レポートがちゃんと動くかどうかは、お客様側の責任で確認が必要です。
![004.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/adb2e6ab-c1fb-d188-bffc-afd12760c9e1.png)

災害対策としてのDR、コンテンツのバックアップがサービスとして提供されます。
バックアップは、日次で7日間保持され、週次バックアップは4週間保持されます。
![005.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/5e9618f3-1e6d-a004-8f09-be5410d77465.png)

Cognos Analytics on Cloudで、使用できない機能の注意点です。
Query StudioやAnalysis Studio、Metrics Studioなど各種レガシーのStudioが使えません。
大きなところでは、CQM(互換モード)のパッケージが使用できませんので、CQMを使用の環境では、DQM(動的クエリーモード)に変更してから、Cloud環境にデプロイする必要があります。
また、SDKも使用できないので、カスタム認証などもできない事になります。
![006.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/f64451f2-e40b-3638-12de-cc20a2e44b95.png)

ファイルシステムへのアクセスはできないので、cogserver.logを見て、自分でPDをするというような事はできません。
また、レポートのファイルシステムへの保管もできません。
イメージファイルを使用したい場合は、PMRを上げて対応してもらう必要があります。
![007.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/fe8b5d60-3163-77ba-4113-8b50324e92b3.png)

バーストでもファイルシステムへのバーストは不可です。
![008.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/0802dd93-e3ac-7085-66c0-c10989a06f6c.png)

オンプレのデータベースに、データソースとしてアクセスできるかが説明されています。
オンプレのデータベースには、VPNでアクセスが可能です。
また、DashDBなどのクラウド上のデータベースにも、当然アクセス可能です。
![009.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/b8158f8c-b8db-5f32-6030-bb9f9915e6a1.png)

オンプレで使用可能なものは、データベースだけではなく、オンプレのActive Directoryも使用可能です。
全社レベルのADを持っているような環境でも、CA on Cloudで認証に使用可能です。
![010.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/84bc4e23-b212-ec37-aee9-5bbda9b47fa3.png)

ブラウザやモバイルからのアクセスはSSLやTLSで、CloudからオンプレはVPNでのアクセスになるので、セキュリティ的に考慮されています。
![012.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/52e604d8-b8fe-e6eb-8ea5-568701ee5be6.png)

というのが、Cognos Analytics on Cloudのメッセージと、使用する上での注意事項ですかね。

ざっとのご説明ですが、以上です。
GitHub Pagesを使ってサクッとWebページを公開する


## GitHub Pages用リポジトリ作成

![01.png](https://qiita-image-store.s3.amazonaws.com/0/55848/b82c8608-16d8-f7af-2872-f1bcc333d54c.png "01.png")

* + をクリック
* New repository をクリック

![02.png](https://qiita-image-store.s3.amazonaws.com/0/55848/6d27b50f-c744-cd40-43f4-2b585ea4225d.png "02.png")

* Repository name を入力。(今回はgithub-pages)
* Description を入力。(こちらは、必要に応じて)
* Create repository をクリック

## Webページを作成する

```
$ cd ~/Project/develop/github
$ git clone git@github.com:0084ken/github-pages.git
$ cd github-pages
```

* 任意の場所に先程、作ったリポジトリをcloneする

```
$ echo "Hello world GitHub Pages" > index.html
```

* htmlファイルを作成する

## GitHubへPush

```
$ git commit -m 'add:newfile up'
$ git push origin master
```

## Webページを有効にする

![03.png](https://qiita-image-store.s3.amazonaws.com/0/55848/41fc8a1d-ec1c-b9e6-f4e5-9b147eb265e5.png "03.png")

*  Settings をクリック


![04.png](https://qiita-image-store.s3.amazonaws.com/0/55848/95341f49-c5f6-2ea9-0dab-fdf66f466f91.png "04.png")

* GitHub Pages セクション内の None をクリック
* master branch を選択

![05.png](https://qiita-image-store.s3.amazonaws.com/0/55848/683e67cf-b5e5-8182-e1b5-f5d083cfba78.png "05.png")

* Save をクリック

![06.png](https://qiita-image-store.s3.amazonaws.com/0/55848/383ee51d-f669-6556-7bc3-eec3fd33464e.png "06.png")

* 生成されたページをクリック
* https://0084ken.github.io/github-pages/
 

![07.png](https://qiita-image-store.s3.amazonaws.com/0/55848/0f3a3caf-e2a5-1865-3150-68cf08e85c0a.png "07.png")


## まとめ
凄まじく簡単です。
masterブランチからできるようになり、別ブランチ(gh-pages)で管理する必要がなくなりました。
(gh-pagesブランチを使った方法も、そのまま利用可能)


## 参考文献
* [公式](https://pages.github.com/)
* [2016年新機能! GitHubのmasterブランチをWebページとして公開する手順](http://qiita.com/tonkotsuboy_com/items/f98667b89228b98bc096)
dropboxから直リンク生成すればherokuに無料で画像アップできるんじゃね？

# 茶番
## 学生の強い味方 `heroku`

皆さんご存知`heroku`は今やPaaSの代表格ですね。
個人的には`rails`で作ったWebアプリを無料で公開できて非常に助かっています。

**が、**

無料で全ての機能を満足に使えるわけないですよね。

そう、**アプリ内からアップロードしたファイルはサーバーの再起動と共に消えてしまいます。**
誰もが一度は通る道だと思ってます。

そのため、プロフィール用にユーザーがアップした画像やら、なんやらが数時間後には消えてしまうんです...
ちくしょう！！なんてこった！！！


## 学生の強い味方 `dropbox`

話を一度変えましょう、
皆さんご存知`dropbox`は今やクラウドストレージの代表格ですね。
個人的には大学の資料共有など非常に助かっています。

**ん？**

`dropbox`から直リンクを生成して`heroku`にあげればいいんじゃね...？


# `heroku`と`dropbox`が両方そなわり最強に見える

と、言うわけで本題です。
本記事では**`dropbox`にアップロードした画像(ファイル)を`heroku`で扱う**方法について説明します。


## `dropbox`から直リンクを生成する

まず直リンクの生成です。
できるのか？って方も多いかと思いますが、実はできちゃうんです。

`dropbox`から欲しいファイルの共有リンクを作成し、
URLの`www.dropbox.com`を`dl.dropboxusercontent.com`に変え、`?dl=0`を消すだけ。

**ね、簡単でしょう？**


### サンプルコード

そして、この作業を`ruby`で書くとこうなります。

```ruby:url_generator.rb 
url = 'https://www.dropbox.com/s/hogehoge/hogehoge12341234.jpg?dl=0'
parts = url.split('/')
if parts.length > 5
parts[2] = 'dl.dropboxusercontent.com'
id = parts[-1].split('?')

g_url = ''
(parts.length - 1).times do |i|
    g_url += parts[i] + '/'
end
g_url += id[0]
puts g_url
```

我ながら汚コードなので改善案があればアドバイスお願い致します...


**追記**
[taram様](http://qiita.com/taram)より提案頂いた上位互換のコードがこちらになります。

```ruby:url_generator.rb
url = 'https://www.dropbox.com/s/hogehoge/hogehoge12341234.jpg?dl=0'
puts url.sub(/www.dropbox.com/, "dl.dropboxusercontent.com").sub(/\?dl=0/, "")
```

stringに置換のメソッドあったんですね、そりゃありますよね勉強不足でした...
ありがとうございました！


## `heroku`で利用する

直リンクを生成できたので、早速利用していきましょう。

使用方法は簡単です。
例えばユーザーのプロフィール画像として扱いたければ、`User`モデルに`image_url:string`のカラムを追加し、共有リンクを貼り付けてもらうだけ！

あとは`<img src="<%= @user.image_url %>">`とでも書けば表示されます。
<br />
<br />
<br />
 

**...えぇ、おっしゃりたいことはわかります。**
  
   
そうですね、あくまで**「無料」で「練習用もしくは身内用」に** Webアプリを作る時くらいでしか有用性はありません。

**だってわざわざ外部サイトにアップロードして共有リンク生成して貼り付けなんて面倒ですもん！**


# 終わりに
筆者自身は身内用に作ったWebアプリでこの方法を利用しています。
確かに多少手間はありますが、アップした画像が消えてしまうより何倍も良いですし、特定少数での利用ですので理解して使ってくれていますので不満の声もありません。

身内利用であれば非常に有用なテクニックですので、是非ご活用ください！


※利用規約等に問題はないと思いますが、万が一問題があれば記事を加筆修正し対応致します。
vcpkg Memo


2017年8月時点の情報です。最新版では変わっていたりした場合はコメントいただけると嬉しいです。

## Tips

### ツールセットの指定方法
VCPKG_PLATFORM_TOOLSET環境変数に"v141"などを指定する。

## はまったこと
### 生成されるlib/dllのファイル名がvcpkgのルールで強制的に変えられてしまう
名前の変更を抑制することはできなさそうなので、ライブラリを使っている側で対処が必要です。

### static linkライブラリでCRTランタイムまでスタティックリンクされてしまう
既定で用意されている*-windows-static tripletがそういう設定になっているため。
static linkライブラリでDLL CRTランタイムを使用したい場合は、自分でtripletを作る必要があります。

```x86-windows-static-md.cmake
set(VCPKG_TARGET_ARCHITECTURE x86)
set(VCPKG_CRT_LINKAGE dynamic)
set(VCPKG_LIBRARY_LINKAGE static)
```

### installedフォルダにpdbファイルが入っていない
* Visual StudioのEnglish言語パックをインストールしておく必要がある
* static linkライブラリはそもそもcopy_pdbが対応していない
Python3_PyGame で2Dゲーム制作 (画像の表示)

#Python3とPyGameでゲーム制作メモ ( part2, 画像の表示 )
前回 ([Python3とPyGameでゲーム制作メモ (part1,準備編)](http://qiita.com/ken_3982/items/f06a71636ad888af699d)) の続きでゲーム制作に必要な機能をメモ．仕組みや詳細な説明は省いてありますが，知りたい場合は参考文献や他の記事などを見るとその辺はしっかり理解できると思います．

####開発環境
・macOS Sierra(10.12.5)
・Python(3.6.2)
・PyGame(1.9.3)

####参考URL
・Python公式：https://www.python.org/
・PyGame公式：https://www.pygame.org/news
・PyGameドキュメント：https://www.pygame.org/docs/
・PyGame Wikipedia：https://ja.wikipedia.org/wiki/Pygame

##画像をディスプレイに表示
画像を読み込み```
image = pygame.image.load("./img/filename.png")```
パスやファイル名は最適なものに変更してください．

メインループでそれを描画するだけ```
screen.blit(image,(20,50))```

前回のウィンドウ表示のプログラムにこの2つを追加すれば，画像が表示される．

```draw_image.py
#_*_coding:utf-8_*_                                                                                                                     
#画像を表示する                                                                                                                         
import sys
import pygame
from pygame.locals import *

pygame.init() #pygameの初期化                                                                                                           
screen = pygame.display.set_mode((400, 300)) #ウィンドウの大きさ                                                                       
pygame.display.set_caption("PyGame") #タイトルバー                                                                                      
image = pygame.image.load("./img/maru.png") #画像を読み込む(今回追加したとこ)                                                                             

# mainループ                                                                                                                           
def main():
    while True:
        screen.fill((0,0,0)) #ウィンドウの背景色                                                                                       
        #イベントの取得                                                                                                                 
        for event in pygame.event.get():
            if event.type == QUIT:
                pygame.quit() #閉じるボタンが押されたらプログラムを終了                                                                 
                sys.exit
        screen.blit(image, (20,50)) #画像を描画(今回追加したとこ)
        pygame.display.update()

if __name__ == '__main__':
    main()
```
　
　

これで画像が表示される！

![スクリーンショット 2017-08-08 16.31.26.png](https://qiita-image-store.s3.amazonaws.com/0/76122/5dd6c8fb-c065-78ef-2211-5633328202cf.png)

ここで使った画像は自分で簡易的に作ったものですが，他の画像でも正しくできます．また，今回画像サイズは大きめにしてあります．

　
　
　



####参考文献
1. 田中賢一郎 (2017) 「ゲームを作りながら楽しく学べるPythonプログラミング」 インプレスR&D
2. [Python3とPyGameでゲーム制作メモ (part1,準備編)](http://qiita.com/ken_3982/items/f06a71636ad888af699d)
3. [Python3とPyGameでゲーム制作メモ ( part3, キー操作 )](http://qiita.com/ken_3982/items/d22b6072f1af186c6aa4)
WordPress のメニューに Skype の通話リンクを追加する方法

海外からお問い合わせを受け付けるのに便利な Skype 通話ボタン。
skype:`<skype_id>`?call にリンクさせることで Skype を起動することが出来ます。

WordPress のメニューは標準で「https:」や「ftp:」以外で始まる URL を除外していますので、「Skype:」 で始まる URL を除外しないようにします。

## kses_allowed_protocols フックを利用する

WordPress が対応するプロトコルは、関数 [`wp_allowed_protocols`]([https://developer.wordpress.org/reference/functions/wp_allowed_protocols/) 内で定義されており、追加するにはフィルターフック [`kses_allowed_protocols`](https://developer.wordpress.org/reference/hooks/kses_allowed_protocols/) を利用します。
テーマの `functions.php` などの然るべき PHP ファイルに、以下のコードを追加します。


```functions.php
add_filter( 'kses_allowed_protocols', function ( $protocols ) {
	$protocols[] = 'skype';
	return $protocols;
} );
```

あとは、管理画面のメニューから「カスタムリンク」の項目を追加し、URL を「skype:`<skype_id>`?call」と指定しましょう。

> ### メモ: 本体で skype をサポートしていない理由
> 以前、WordPress 本体で [`skype:` プロトコルを使えるようにする意見](https://core.trac.wordpress.org/ticket/18268#comment:5)も挙がりましたが、悪意のあるコードを仕込まれる可能性があるため追加されませんでした。
掲示板監視api -Rails5でapi作った話(1日かかりませんでした)-

#紹介
- 高一がつくるapiにしては、夢がなく、つまりませんw
- アダルト画像ならアダルト画像を空にして返します
 - そうでない場合はもちろんそのまま返します
 - それと、怪しい場合があるのでアダルトスコア、アダルト判定も返します
 
- NGワードを指定し、もし含まれていたら、その部分を***か空にして返します

##技術的なこと
azureのcomputer visionマシンラーニングを使ってる
##使い方

画像の場合

```
https://translookout.herokuapp.com/lookouts/cover?image=画像&mode=image
```
テキストの場合

```
https://translookout.herokuapp.com/lookouts/cover?message=チェックしたいテキスト&targets[]=NGワード&mode=message
```
デフォルトだと***で返りますが空がいい場合は`&option=false`としてください
##無料なんで是非お使いください
アップデートがあり、`subscription _id=free`が、無料の場合必須になりました。
いまさら MySQL で group_concat 使い複数レコードを１行にまとめる

# group_concat って
複数レコードあるデータを１行にまとめ表示することが可能な命令です。DB2 でいうところの OCCURS っぽい感じって言っても分かる人すくないか…。

# 例えば
例えば、テーブルとカラム名のリストが欲しいっていったら、さっくり下記みたいなプログラムを書けばいいと思うのだけど（私は、phpで作っちゃう人）。

```php:
foreach ($ret_array as $key => $value ) {
$sql = <<< EOM
desc $value;
EOM;

  $stmt = $pdo->query($sql);
  $koumoku = "";
  while($result = $stmt->fetch(PDO::FETCH_ASSOC)){
    $Field = $result['Field'];
    $koumoku = $koumoku . "\t" . $Field;
  }

  echo $value . "\t" . $koumoku . "\n";
}
```

こんなことしなくても、いいよとｗ

# 簡単に実現できるのね
group_concat 使うと楽ですな。

```sql:
select TABLE_NAME, group_concat(COLUMN_NAME separator x'09')
from INFORMATION_SCHEMA.COLUMNS 
where TABLE_NAME like 'S%'
group by TABLE_NAME
order by TABLE_NAME
```

結果、横に長くなるので切ったけど、思うようにとれた。便利やわー。

```text:
+-------------------+--------------------------------------------------
| TABLE_NAME        | group_concat(COLUMN_NAME separator x'09')        
+-------------------+--------------------------------------------------
| SCHEMATA          | CATALOG_NAME      SCHEMA_NAME     
| SCHEMA_PRIVILEGES | IS_GRANTABLE      PRIVILEGE_TYPE  TABLE_SCHEMA    
| SESSION_STATUS    | VARIABLE_VALUE    VARIABLE_NAME                   
| SESSION_VARIABLES | VARIABLE_NAME     VARIABLE_VALUE                  
| STATISTICS        | CARDINALITY       SUB_PART        PACKED  NULLABLE
+-------------------+---------------------------------------------------
5 rows in set (0.02 sec)
```
INTER-Mediatorをはじめよう - バーチャルマシンの準備

+ 作成日 2017/08/12
+ 10分 （ダウンロード時間は除く）
+ YouTube: https://youtu.be/C6YPp8-6uX4
+ Doc: http://qiita.com/motofumi/items/ff94924a820e9c05b0c8

# はじめに
INTER-Mediatorでは、学習用にINTER-Mediator搭載のバーチャルマシンが用意されています。ここでは、MacBook Air(macOS Sierra)にそのバーチャルマシンをダウンロードからセットアップまで解説します。

# ゴール
VirtualBox.app (Oracle製)と INTER-Mediator-Server VM (INTER-Mediator Commitee製)をダウンロードしてセットアップします。バーチャルマシンを起動して、ホスト側(macOS)のSafari.appからバーチャルマシン側で構築されたINTER-Mediatorのサンプルページが見えれば完成です。

![INTER-Mediator 101 - バーチャルマシンの準備.001.png](https://qiita-image-store.s3.amazonaws.com/0/54439/d8e63223-6512-88b4-223b-cba750b89d20.png)


# 前提条件
* MacBook Air + macOS Sierra (10.12.6)
* インターネット接続環境
* VirtualBox.appダウンロード [VirtualBox5.1.26](http://download.virtualbox.org/virtualbox/5.1.26/VirtualBox-5.1.26-117224-OSX.dmg)
* INTER-Mediator-Server VMダウンロード [INTER-Mediator-Server VM 5.6](https://inter-mediator.com/archives/INTER-Mediator-Server-VM-5.6.ova)

# 手順
1. VirtualBox.appをダウンロード
1. INTER-Mediator-Server VMをダウンロード
1. VirtualBox.appをインストール＆セットアップ
1. INTER-Mediator-Server VMを読み込み＆セットアップ
1. INTER-Mediator-Server VMを起動
1. INTER-Mediatorの動作確認

# 参考
* Youtube [INTER-Mediatorをはじめよう - バーチャルマシンの準備](https://youtu.be/C6YPp8-6uX4) 
* Web [INTER-Mediator - バーチャルマシンの利用](http://inter-mediator.info/ja/for-novices/vm.html)

<!-- 管理用 -->
<!-- 
#ムービースクリプト
+『自己紹介』
+「ムービーを見てる方は、あわせてドキュメントも開いてください」
+ はじめにを朗読
+ ゴールを朗読
+ 前提条件を解説
+ 手順に入ったら、マシンで操作しながら解説
-->
Amazon SESで自動メール送信する

仕事でメール送信自動化のためにSESを使用使ったのでメモ


メールアドレスの認証
================


使用するメールアドレスを認証する必要があります
作成したばかりのユーザーは SES サンドボックスの中にいるため、送信元、送信先ともに認証が必要です。
後述の方法でサンドボックスの外へ移動すると、verify していない送信先へも送れるようになります。

Identity Management -> Email Addresses -> Verify New Email Address で使用するメールアドレスに認証メールを送る。

<img width="1284" alt="Screen Shot 2017-08-08 at 16.19.50.png" src="https://qiita-image-store.s3.amazonaws.com/0/15452/974b7cbb-b938-7c51-59bc-d248b91762a8.png">

メール内のリンクをクリックして、 Email の右の Status が verified になったのを確認する。



Sandbox制限の解除
======================

コンソールにログインしてサポートセンターからSES送信制限解除依頼を出します。
1~2日で解除されます。

<img width="1119" alt="Screen Shot 2017-08-08 at 16.21.44.png" src="https://qiita-image-store.s3.amazonaws.com/0/15452/c6fb6995-ad93-e4af-cb44-a14509f608c0.png">


参考: http://docs.aws.amazon.com/ja_jp/ses/latest/DeveloperGuide/request-production-access.html


送信テスト
=================

```

import boto3
 
client = boto3.client('ses', region_name='us-east-1')
response = client.send_email(
    Source='sender@example.com',
    Destination={
        'ToAddresses': ['receiver@example.com']
    },
    Message={
        'Subject': {
            'Data': 'hello',
        },
        'Body': {
            'Text': {
                'Data': 'hello ses.',
            }
        }
    })
```
続EntityFrameworkCore 1.1.2でScaffold

## 概要
- [前回の記事](http://qiita.com/AziO/items/849817324d12bf631c8a)でコマンドを使えるようになった
- どうやって`Database First`するの？（既存のデータベースからModelクラス作成）

## 解決策
- dotnet ef dbcontext scaffold "[接続文字列]" "[プロバイダ]" -o "[アウトプットフォルダ]"
    - 例
    - `dotnet ef dbcontext scaffold "Data Source=サーバー名;Initial Catalog=データベース名;Integrated Security=True" "Microsoft.EntityFrameworkCore.SqlServer" -o "Models"`


## まとめ
- プロバイダの指定を忘れないようにしよう
- みんなもQiitaに.NET Coreとかの備忘録を上げよう
NSIndexSetの使い方 Objective-C

NSIndexSetの使い方
---

#サンプル
~~~Objective-C:SampleIndexSet.m

- (void)sample {

    //変更可能な配列を生成する
    NSMutableArray *fruitBasket;
    fruitBasket = [NSMutableArray arrayWithObject:@"Apple"];
    [fruitBasket addObject:@"pear"];

    NSArray *insertedFruit;
    insertedFruit = [NSArray arrayWithObjects:
                       @"Banana", @"Orange", nil];

    long first = (long)fruitBasket.count - 2;

    //2つのオブジェクトを挿入する
    NSIndexSet *indexes;
    indexes = [NSIndexSet indexSetWithIndexesInRange:
               NSMakeRange(first, first + insertedFruit.count)];

    NSLog(@"first : %ld",indexes.firstIndex);
    NSLog(@"last : %ld",indexes.lastIndex);
    
    [fruitBasket insertObjects:insertedFruit
                 atIndexes:indexes];
    
    NSLog(@"買い物かご：%@", fruitBasket);

    //変更可能なセットを生成する
    NSMutableArray *plasticShoppingBags;

    plasticShoppingBags = [[NSMutableOrderedSet orderedSetWithObject:@"Apple"] mutableCopy];
    first = plasticShoppingBags.count - 1;

    indexes = [NSIndexSet indexSetWithIndexesInRange:
               NSMakeRange(first, first + insertedFruit.count)];

    //2つのオブジェクトを挿入する
    [plasticShoppingBags insertObjects:insertedFruit
                    atIndexes:indexes];
    NSLog(@"レジ袋：%@", plasticShoppingBags);

~~~

#実行結果
~~~LOG:NSIndexSet.log
first : 0
last : 1

買い物かご：(
    Banana,
    Orange,
    Apple,
    pear
)
レジ袋：{(
    Banana,
    Orange,
    Apple
)}
~~~
---


## 関連記事

【About】(http://qiita.com/sunstripe) - サンストライプ

---

## 制作チーム：サンストライプ

[![sunstripe_logo.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80600/322f2d60-f19d-af9e-2b6f-7290ca546848.png)](http://sunstripe.main.jp/)
http://sunstripe.main.jp/

(月１WEBコンテンツをリリースして便利な世の中を作っていくぞ！！ボランティアプログラマー/デザイナー/イラストレーター/その他クリエイター声優募集中！!)

### 地域情報 THEメディア
THE メディア 地域活性化をテーマに様々なリリース情報も含め、記事をお届けしてます！！
https://the.themedia.jp/

### ゼロからはじめる演劇ワークショップ
多様化の時代に向けて他者理解を鍛える

https://workshop.themedia.jp/

### プログラミングワークショップ・ウェブ塾の開講！！！
様々なテーマでプログラミングに囚われずに取り組んでいきます。
詳しくはこちら　↓　↓　↓　↓　↓　↓　↓　↓
[プログラミングサロン 月１だけのプログラミング学習塾](https://workshop.themedia.jp/posts/7057553?fbclid=IwAR32CfRQ7RvDOhvuogoSwqxDLMOU7Jvuzljlnx-TMc27qBPX1BnWsfLcBR8
)

### 協力応援 / 支援者の集い
## チーム：サンストライプ
#### プログラミングラボ
https://twitter.com/sunstripe2011

一緒にポートフォリオを作りませんか？現場の体験やそれぞれの立場から年齢関係なく作品を作りたい方々と一緒にチームを作って、作品を作っています。現場に行きたい人には、職場紹介や職場の体験や悩み相談なども受けております。
様々な職種からプログラミングの知識を得たい、デザインの知識を得たい、データーベースの知識を得たいという人が集まっております。
週１のミーティングにそれぞれの近況と作業報告して、たまにリモート飲み会などをしております！！

興味がある方は、DMに話しかけてみてください。

## トラストヒューマン
http://trusthuman.co.jp/
私たちは何よりも信頼､人と考えてます｡

｢コンサルティング｣と｢クリエイティブ｣の両角度から｢人材戦略パートナー｣としてトータル的にサポートします！！

キャリア教育事業
広域学習支援プラットフォーム『のびのび日和』
https://slc-lab.amebaownd.com/

#スポンサー募集
Kerasで忘れる演算とnumpyの比較

Kerasでライブラリを書こうとした際によく忘れる演算について，備忘録も兼ねてnumpyと比較しつつまとめてみました．

## ◇加算

- keras.layers.add で加算ができます．
- keras.model.addだと層を重ねる演算となるので注意．

### numpy

```python
import numpy as np
np.asarray([1,2,3]) + np.asarray([4,5,6])
# array([5, 7, 9])
```

### Keras

```python
import numpy as np
import keras
input1 = keras.layers.Input(shape=(None,))
input2 = keras.layers.Input(shape=(None,))
out = keras.layers.add([input1, input2])
model = keras.models.Model(inputs=[input1, input2], outputs=out)
model.predict([np.asarray([[1,2,3]]), np.asarray([[4,5,6]])])
# array([[ 5.,  7.,  9.]], dtype=float32)
```

## ◇減算

- keras.layers.subtractがないので，一手間必要です．

### numpy

```python
import numpy as np
np.asarray([1,2,3]) - np.asarray([4,5,6])
# array([-3, -3, -3])
```

### Keras

```python
import numpy as np
import keras
input1 = keras.layers.Input(shape=(None,))
input2 = keras.layers.Input(shape=(None,))
minus_input2 = keras.layers.Lambda(lambda x: -x)(input2)
out = keras.layers.add([input1, minus_input2])
model = keras.models.Model(inputs=[input1, input2], outputs=out)
model.predict([np.asarray([[1,2,3]]), np.asarray([[4,5,6]])])
# array([[-3., -3., -3.]], dtype=float32)
```

## ◇アダマール積

- アダマール$\odot$の関数名ってなんだっけという謎の忘れ方をしたときに．

### numpy

```python
import numpy as np
np.multiply(np.asarray([1,2,3]), np.asarray([4,5,6]))
# array([ 4, 10, 18])
```

### Keras

```python
import numpy as np
import keras
input1 = keras.layers.Input(shape=(None,))
input2 = keras.layers.Input(shape=(None,))
out = keras.layers.multiply([input1, input2])
model = keras.models.Model(inputs=[input1, input2], outputs=out)
model.predict([np.asarray([[1,2,3]]), np.asarray([[4,5,6]])])
# array([[  4.,  10.,  18.]], dtype=float32)
```

## ◇リストの連結

- 多分忘れないはずですが，念のため．

### numpy

```python
import numpy as np
a, b = np.asarray([1,2,3]), np.asarray([4,5,6])
np.concatenate((a, b), axis=0)
# array([1, 2, 3, 4, 5, 6])
```

### Keras

```python
import numpy as np
import keras
input1 = keras.layers.Input(shape=(None,))
input2 = keras.layers.Input(shape=(None,))
out = keras.layers.concatenate([input1, input2])
model = keras.models.Model(inputs=[input1, input2], outputs=out)
model.predict([np.asarray([[1,2,3]]), np.asarray([[4,5,6]])])
# array([[ 1.,  2.,  3.,  4.,  5.,  6.]], dtype=float32)
```

## References

1. [Keras](https://github.com/fchollet/keras/blob/master/keras/layers/merge.py), François, 2015
2. [How do I take the squared difference of two Keras tensors?](https://stackoverflow.com/questions/44294913/how-do-i-take-the-squared-difference-of-two-keras-tensors)
EntityFrameworkCore 1.1.2でScaffold

## 概要
- EntityFrameworkCore 1.1.2を使ってScaffold使おうとしてdotnet efしてもエラーになる
- `No executable found matching command "dotnet-ef"` と怒られる
- Scaffold-DbContextも無理
- そもそも英語ばっかり2016年の記事で古い！
- project.jsonとか知らない！

という自分のための備忘録

## ハマりポイント
- `Microsoft.EntityFrameworkCore.Tools.DotNet` をインストールしたら動くらしい
    - バージョンが最新の構成だとバージョン違いとかなんとかでエラー

**この時にNuGetを使ってはいけない**

## 解決策
- プロジェクトのcsprojを開く
- 下記をProject要素配下に書く

```csharp
  <ItemGroup>
    <DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="1.0.1" />
  </ItemGroup>
```

- `PackageReference`じゃなくて`DotNetCliToolReference`なのがミソ
- 後は適当にPowerShellとか起動して`dotnet restore`して`dotnet ef`すればOK

## まとめ
- 発展途中の技術のせいか新旧いろんな情報が交錯してわかりにくい！
- みんなもQiitaに.NET Coreとかの備忘録を上げよう

- 実際のコマンドの使い方は[続EntityFrameworkCore 1.1.2でScaffold](http://qiita.com/AziO/items/639142a9dc16d8b61808)を参照
WindowsにPolyglotをセットアップ

polyglotは固有表現抽出などを行う自然言語処理のパイプラインです。
https://pypi.python.org/pypi/polyglot

[polyglotのサイト](http://polyglot.readthedocs.io/en/latest/Installation.html)の手順に従ってインストールしようとしましたが、UnicodeDecdeErrorが出たのでその対応方法を記録しました。
### 手順
1. [https://github.com/aboSamoor/polyglot](https://github.com/aboSamoor/polyglot)から圧縮ファイル(polyglot-master.zip)をダウンロードする
2. ダウンロードした圧縮ファイル(polyglot-master.zip)を解凍する
3. 解凍したフォルダーでpython setup.py install を実行する
Twitterを"#就活"で分析してみた

#今回使ったもの
・Windowsパソコン（Surface Pro3, Windows10）
・Power BI(ダウンロードは[こちら](https://powerbi.microsoft.com/ja-jp/desktop/))
・CData ODBC Driver for Twitter（ダウンロードは[こちら](https://www.cdata.com/jp/drivers/twitter/download/odbc/)）
・自分のTwitterアカウント

#上記のものを使ってTwitterを就活をキーワードに分析してみた

8月にはいり、就活も本格的になってきました。。今はサマーインターン真っ只中ではないかと思います。そんな就活生の人ならTwitterに変化が現れるのではないでしょうか。
**めちゃめちゃ多くの就活アカウントでタイムラインが埋め尽くされていく**現象が起きていたりします。
いったいどれが人気のツイートなのか気になり、、、

今回はそれを利用して直近のツイート500個のを使って分析してみました。

過去の記事も参考にしてみるといいかもしれないです。。
CdataのExcel add in for Twitterを使ってみた
http://qiita.com/Terry3/items/14bee4554c95de3850b0
Power BI でのデータ取得からビジュアライズまで
http://qiita.com/Terry3/items/e0f1e8153e06c56600a3


#分析の始まり

##まずはCData ODBC Driver for Twitterをインストール

Dataの会社の[ホームページ](https://www.cdata.com/jp/default.aspx)から「[ODBC Driver for Twitter](https://www.cdata.com/jp/drivers/twitter/download/odbc/)」をダウンロードし、操作手順にしたがってインストール。

![スクリーンショット (27).png](https://qiita-image-store.s3.amazonaws.com/0/178136/3919c384-7487-fdcc-0531-9fdca7eadc93.png)

Twitterとの連携も併せて行う。
![ODBCDSNConfig (1).png](https://qiita-image-store.s3.amazonaws.com/0/178136/2a37fca6-f80d-098b-7d6d-cb356ad0e1ea.png)

詳しくは[こちら](http://cdn.cdata.com/help/GTB/odbc/pg_connectiono.htm)

##次にPower BIでODBC Driver for Twitterを使ってデータを持ってくる

ODBCを選択して
![スクリーンショット (28).png](https://qiita-image-store.s3.amazonaws.com/0/178136/739c3517-1190-2c0d-0145-b526ff1368d9.png)

SQLで絞り込みをかける（今回は#就活と500件の条件）
![スクリーンショット (29).png](https://qiita-image-store.s3.amazonaws.com/0/178136/ba1b9daa-a621-8d29-4448-ec9deb3ffd7a.png)



##あとはPower BIを使ってビジュアライズ
例えば、、、、

「いいね数」と「リツイート数」でグラフ化してみたり
![スクリーンショット (30).png](https://qiita-image-store.s3.amazonaws.com/0/178136/6eea6d18-5d86-ab9b-38c8-a676e5694ff5.png)


「いいね数」だけに絞ってランキング、実際のテキスト表示（Excelっぽい）をしてみたり
![スクリーンショット (31).png](https://qiita-image-store.s3.amazonaws.com/0/178136/f35785ca-ab61-fcbb-9537-ec96e2e3fd58.png)



今回は「SNSが採用基準に」という記事が人気みたいだったようです。

実際に、FacebookやTwitterのアカウントを提出させる企業もあるようで。。。。

せっかくデータ分析を学んでいるので身近なものを題材にしてみました。

#実際のPower BIはこちら
https://app.powerbi.com/view?r=eyJrIjoiNjA1YTAyOGItZGVjNy00YjZkLWE4OTEtMzBjNzRiNTdhY2I2IiwidCI6IjZjNGMxMGNiLWZlNDgtNDBiZi1hNjg3LWI1ZTRkMWY1Yzg2ZCJ9

今回使ったもののダウンロード集
・[Power BI](https://powerbi.microsoft.com/ja-jp/desktop/)
・[CData ODBC Driver for Twitter](https://www.cdata.com/jp/drivers/twitter/download/odbc/)
Docker Toolbox + Windows7 + VirtualBox でネットワーク障害が発生する場合の暫定対応策

## 主旨

Windows7 + Docker Toolbox + VirtualBoxで環境構築した際に、
ネットワーク障害が発生したら、VirtualBox上のDockerサーバの```/etc/resolve.conf```のIPアドレスをGoogle の公開DNSサーバである8.8.8.8やIPアドレス指定時に利用される10.0.2.2に変更すれば、解決するかもしれない。


## 上記の暫定策を行った経緯：

Windows7上に、開発環境をDocker Toolbox で構築している。
そして、利用しているうちに外部のネットワークが使えなくなる問題が発生した。github に接続できず困ってしまうことがあった。また、cucumberの@javascriptのテストで、phantomjsエラーが発生し、立ち上がっているサーバにアクセスできない問題も発生した。
この現象は、container内だけでなくDockerサーバのコンソール上でも同様だった。
どうすることもできなくなるため、Dockerサーバを再起動してcontainerを立ち上げなおして対応していた。

しかし、あるとき、Docker container（Ubuntu)上に立ち上げたRailsは、Windows7（ホストOS）上で立ち上げたブラウザからIPアドレス指定でアクセスできることに気づいた。すなわち、ネットワークそのものが使えなくなったわけではないことに気づいた。
（IPアドレス指定の場合、resolved.confで指定されていた10.0.2.3ではなく10.0.2.2が利用されていた）

ネットワーク障害の問題は、名前で引けなくなっているだけだった。

そこで、Googleで、「Docker Windows7 DNS 10.0.2.3 resolved.conf」 として検索したところ参照したページでたまたま、名前解決できない問題で上記の様にresolved.confを変更している記載があり、
参考に自分環境に適用してみたところうまくいった。

なぜ、DNSサーバが10.0.2.3が使っているうちに接続できなくなるのかは調査中。


参考サイト：
http://danielhnyk.cz/docker-machine-with-virtualbox-server-misbehaving/
https://developers.google.com/speed/public-dns/docs/using
.net CoreでWeb APIのパスワードなんかをGitHubとかに上げないでおく方法

settingの読み込みを以下みたいな感じで書く。

``` C#
var config =
    new ConfigurationBuilder()
    .SetBasePath(new DirectoryInfo(Directory.GetCurrentDirectory()).Parent.Parent.Parent.FullName)
    .AddJsonFile("appsettings.json")
    .AddJsonFile("secretsettings.json", true)
    .Build();
```

本物のパスワードはsecretsettings.jsonに記入し、
appsettings.jsonには「ここにパスワードを記入してください」とか書いておく。

secretsettings.jsonはGitHubなどには上げない。

というあたりが分かりやすくていいのではあるまいか。
Jupyter notebookで作成した　pythonプログラムをバッチ起動する方法

##Jyupiter notebookでpythonプログラムを書くと、拡張子がipynbとなりこのままでは、コマンドラインから実行ができない。

下記のコマンドで、拡張子がpyのプログラムを生成できます。
参考
http://qiita.com/hagino3000/items/c7781506db1dbc7ce57d

```
ipython nbconvert hoge.ipynb --to=python
```
フォームの値を配列で送りたい

```
<input value="1" type="hidden" name="book[page_ids][]" multiple>
<input value="2" type="hidden" name="book[page_ids][]" multiple>
<input value="3" type="hidden" name="book[page_ids][]" multiple>
<input value="4" type="hidden" name="book[page_ids][]" multiple>
<input value="5" type="hidden" name="book[page_ids][]" multiple>
```

こういうHTMLを作りたい。

`simple_form_for`の場合。

```erb
<% @book.pages.each do |p| %>
    <%= f.input :page_ids, as: :hidden, input_html: { multiple: true, value: p.id } %>
<% end %>
```
VMware > Dropbox 100% disk usage 問題とその影響に関して > 使用ドライブの選択

```txt:動作環境
ホストOS: Windows 10 Pro (64bit) Creators Update適用済
VMware Workstation v12.5.7
ゲストOS: Windows 8.1 pro (64bit)
ゲストOS: Windows 7 pro (32bit)
ゲストOS: Windows 7 pro (64bit)
ゲストOS: CentOS 6.8 (64bit)
など
```

VMwareにて以下のような仮想環境を使っている。

- ドキュメント関連仮想環境
    - Office使用
    - 様々な形式のドキュメントをこちらで管理
    - Dropbox同期 (仮想上のEドライブ)
- 組込み開発環境が入った仮想環境
- Windows開発環境が入った仮想環境
- 数値計算処理用Linux仮想環境
- など

上記のような仮想環境関連のファイルをホストOS上の「Nドライブ」にまとめている。


### 問題

Dropbox起動直後に仮想上のCドライブがHDD 100% 使用状態になり、その状態が数分から長くて10分程度続く。
(色々対処したが対処の効果が持続しない）。
この時、ホストOSでのNドライブが100% 使用状態になり続ける。

ホストOSでのNドライブに入っている仮想環境の一つがHDDを使い続けるため、他の仮想環境の動作がこの期間、明らかに遅くなる。

Dropboxの処理が終わるまで待たされる。

### 対応案

Dropboxを使う仮想環境(ドキュメント関連仮想環境)だけ別のドライブに移動して、そこで動作させる。

そのドライブのHDD使用状態はDropbox起動直後悪くなるが、その間でも別の仮想環境(他のドライブ上にある)に影響を与えなくなる。


### 懸念事項

HDD 100% 使用状態が続く限り、HDDを痛めている気がする (関連: [Spotifyのバグの例 @ Wired](https://wired.jp/2016/11/14/spotify-is-writing/))。何百GBのサイズではないため、どれくらいの影響かは不明ではあるが。

こういう問題が発生しないのが一番ではある。

ドキュメント関連仮想環境だけ別のドライブに置いて使用することにより、書き込みが頻発するドライブを他の仮想環境のドライブと分離することにもなる。故障するドライブを制限することにもなり良いかもしれない。
ES6以降のJSの変数宣言とスコープ

# 前置き

ES6以降は可能な限りvarを使うのをやめてconstとletを使い分ける
基本constを使い、letは状態を書き換える場合につかう（ループカウンタなど）

## var

```:var.js
var a = 1
console.log(a)
var a = 2
console.log(a)

function f(){
  var a = 3
  console.log(a)
  for(var a = 0; a < 10; ++a){
  }
  console.log(a)
}

f()
console.log(a)
```

```:結果
1
2
3
10
2
```

* 関数スコープ
* 再宣言可能
* 上記特徴のためバグが出やすく、ES6以降はあまり使われない

## let

```:let.js
let a = 1
console.log(a)
// error
// let a = 2
// console.log(a)

function f(){
  let a = 3
  console.log(a)
  for(let a = 0; a < 10; ++a){
  }
  console.log(a)
}

f()
console.log(a)
```

```:結果
1
3
3
1
```

* ブロックスコープ
* 再宣言不可能
* 値の書き換え可能

## const

```:const.js
const a = 1
console.log(a)
// error
// a = 2
// console.log(a)
// error
// const a = 2
// console.log(a)

function f(){
  const a = 3
  console.log(a)
// error
//  for(const a = 0; a < 10; ++a){
//  }
//  console.log(a)
}

f()
console.log(a)
```

```:結果
1
3
1
```

* ブロックスコープ
* 再宣言不可能
* 値の書き換え不可能
* ただしオブジェクトのプロパティや配列の追加削除は可能

```:const2.js
const obj = {}
const ary = []
obj.hoge = "huga"
ary.push("hoge")
```

### オブジェクトの中身も書き換え不可にしたい場合

```
'use strict'
const obj = Object.freeze({})
obj.hoge = "aaaa"
console.log(obj)
```

ただし以下のケースは通ってしまう

```
'use strict'
const obj = Object.freeze({
  hoge : {}
})
obj.hoge.aaa = "aaaa"
console.log(obj)
```

上記ケースに困ったらimmutable.jsがある

https://facebook.github.io/immutable-js/
NefryBT向けAzureIoTHubライブラリ紹介

#Nefry Azure IoTHubライブラリ
このライブラリではAzure IoTHubに接続することができます。
Azure IoTHubと連携することでグラフ化や人工知能などの他のAzureのサービスと連携することができます。

紹介記事：[ESP8266版　Azure IoTHubにつないでみた](http://qiita.com/wamisnet/items/4347b0794f1df51d7b5d)

##どんなことができる？
Azure IoTHubと連携することでデータの蓄積、グラフ化や人工知能などの他のAzureのサービスと連携することができます。
##関数情報

### begin

Azure IoTHubにつなぐために必要な初期化処理をします。**起動時に一度だけ呼び出してください。**
引数が違うものが2つありますがどちらか一つ呼び出してください。

####NefryのWebConfigで設定する値を設定する場合
ここの引数で設定した値がWebConfigで設定できる欄の値になります。

||||
|:---:|:---:|:---:|
|引数|int|0-9の間で入力してください。デフォルトは0になります。|
|返り値|bool|true:初期化処理成功　fales:初期化処理失敗|
|具体例||Azure.begin(1);|

####直接プログラム内で設定する値を設定する場合
プログラム内で直接値を設定する場合はこちらで設定することができます。

||||
|:---:|:---:|:---:|
|引数|String|IoTHubで取得したキーを入力します。一例として次のような値を設定します。HostName=YourHost.azure-devices.net;DeviceId=YourDevice;SharedAccessKey= |
|返り値|bool|true:初期化処理成功　fales:初期化処理失敗|
|具体例||Azure.begin("HostName=YourHost.azure-devices.net;DeviceId=YourDevice;SharedAccessKey=");|

### connect

Azure IoTHubにつなぐために必要な処理をします。

||||
|:---:|:---:|:---:|
|引数|int|リトライ回数を設定できます。デフォルトは3になります。|
|返り値|void||
|具体例||Azure.connect(1);|

### push

Azure IoTHubにデータを送信します。

||||
|:---:|:---:|:---:|
|引数|DataElement*|IoTHubに送信するデータを指定します。|
|返り値|void||
|具体例||Azure.push(&data);|

### setCallback

Azure IoTHubからデータを受信したときにコールバックされるものになります。

||||
|:---:|:---:|:---:|
|引数|GeneralFunction|コールバックで呼び出される関数を指定します|
|返り値|void||
|具体例||Azure.setCallback(azureCallback);|

##サンプルプログラム
ネットワークに接続している際に2秒ごとにA2ピンの入力値をAzureIoTHubにアップロードし、またAzureIoTHubから通知がある場合、それをシリアルポートで出力します。

```c++:AzureIoTHub
#include <NefryAzureIoTHub.h>
#include <Nefry.h>
void setup() {
  Azure.begin(); //YourKey Example:"HostName=YourHost.azure-devices.net;DeviceId=YourDevice;SharedAccessKey=" をConfigで入力します
  Azure.setCallback(azureCallback);
}

void azureCallback(String s) {
  Serial.print("azure Message arrived [");
  Serial.print(s);
  Serial.println("] ");
}

void loop() {
  if (WiFi.status() == WL_CONNECTED) {
    Azure.connect();
    DataElement a = DataElement();
    a.setValue("EspAnalog", analogRead(A2));
    Azure.push(&a);
    Nefry.println("pushed");
    delay(2000);
  } else {
    Nefry.println("Not connected to the Internet");
    delay(250);
  }
}
```
WEB-INF 配下の静的リソースが発行されなかった話

# 事の発端
レガシーな構成ですが、下記の構成のシステムをメンテナンスしていたら、WEB-INF 配下のリソース (jsp とか) のみが展開されていなかったので、そんなリソースがありません、というようなエラーが出ました。

- Eclipse
- Tomcat
- Maven
- テンプレートエンジン

## 前提
アプリケーションの発行先は、デフォルトの下記位置。WEB-INF には lib などは配備されている。。

<pre>
$PROJECT_ROOT/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/projectName/WEB-INF

ls                                        
classes          lib              log4j.properties
</pre>

# 解決策
プロジェクトを Maven Update するだけ。
単純だけど、うっかり忘れそうなので備忘録として残しておきます。
VS CodeでApp Engine/Pythonアプリを開発するときの設定

「ファイル」 > 「基本設定」 > 「設定」を開き、右側ペインの「ユーザー設定」に以下を追記します（Windows 10の場合）

```json:settings.json
    "python.autoComplete.extraPaths": [
        "C:\\Program Files (x86)\\Google\\Cloud SDK\\google-cloud-sdk\\platform\\google_appengine",
        "C:\\Program Files (x86)\\Google\\Cloud SDK\\google-cloud-sdk\\platform\\google_appengine\\lib"
    ]
```

Macのパスはわかりませんが「google_appengine」フォルダを検索すれば判ると思います。

以上です。