OmniAICreator/Qiita-1.07M huggingface dataset:
UITableViewCellの領域外にUIをはみ出させたい

特定のセルからはみ出すかたちでUIを設置したところ、他のセルの裏側に入って切れてしまった。

そこで、セルのlayerのzPositionの値を変えて一番手前に持ってくることで他のセルの裏に入ることを防ぐことができた。

```
cell.layer.masksToBounds = false
cell.layer.zPosition = 1
```
ubuntuでusbメモリをマウント

linuxではusbを指しただけでは接続できない場合があります。
その場合は手動で接続してあげる必要があります。


#認識しているデバイスを探す
usbを差した時に増えてるデバイス名を確認します。

```
sudo fdisk -l
```

#mount先のディレクトリを作る

```
sudo mkdir /mnt/sdc1
```

#mountする
usbのファイルシステムの形式を指定しないとダメな場合もある。
-t ntfs-3gなど。windowsならvfatだったり、デバイスによって少し違う形式を指定しないといけない場合がある。

```
sudo mount /dev/sdc1 /mnt/sdc1
```

mountができたらdf -hで見るとmountが出来ているかがわかる。あとは増えた領域でファイル操作をしてumountして作業終了。


#使い終わったらumount
mountしているフォルダのパスからは抜けておくこと。

```
sudo umount /mnt/sdc1
```


#参考
http://d.hatena.ne.jp/knaka20blue/20100712/1278903653
http://uubunt.blogspot.jp/2012/02/usb.html
Androidでバッテリー残量とバッテリー温度を取得したい

Androidでバッテリー残量とバッテリー温度を取得したかったので調べました。
ざっくり言うとアクション名`Intent.ACTION_BATTERY_CHANGED`のIntentを受け取るブロードキャストレシーバーを登録して、レシーバーの中の処理でIntentから`BatteryManager.EXTRA_LEVEL`, `BatteryManager.EXTRA_SCALE`, `BatteryManager.EXTRA_TEMPERATURE` を取得すれば良いです。

```java:コード例
// フィールド
int batteryLevel;
float batteryTemperature;

private final BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {

        int rawLevel = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
        int scale = intent.getIntExtra(BatteryManager.EXTRA_SCALE, -1);

        if (rawLevel != -1 && scale != -1) { // ↑で渡しているデフォルト値の-1でないことを確認
            float batteryLevelFloat = rawLevel / (float) scale;
            batteryLevel = (int) (batteryLevelFloat * 100); // 0-100 の batteryLevel 値を設定
        }

        // バッテリー温度を取得
        // BatteryManager.EXTRA_TEMPERATURE で取得できる値は ℃x10 なので、
        // 例えば 275 という値が取れた場合は 27.5℃ を表す。
        batteryTemperature = intent.getIntExtra(BatteryManager.EXTRA_TEMPERATURE, 0) / 10.0f;
    }
};

// onResume などで呼ぶ
IntentFilter intentFilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
context.registerReceiver(broadcastReceiver, intentFilter);

// バッテリーの監視が不要になったら呼ぶ
// onPause など
context.unregisterReceiver(broadcastReceiver);
```

`unregisterReceiver`を呼び忘れるとメモリリークなどの原因になるので気をつけてくださいね！
[JAWS-UG CLI] IAM #85 インスタンスプロファイルへのロール追加 (opsworksインスタンス用)

前提条件
========


IAMへの権限
-----------

IAMに対してフル権限があること。


AWS CLIのバージョン
-------------------

以下のバージョンで動作確認済

* AWS CLI 1.11.14

```bash:コマンド:
aws --version
```

結果(例):

      aws-cli/1.11.34 Python/2.7.10 Darwin/15.6.0 botocore/1.4.91

バージョンが古い場合は最新版に更新しましょう。

```bash:コマンド:
sudo -H pip install -U awscli
```


0. 準備
=======


0.1. 変数の確認
---------------

プロファイルが想定のものになっていることを確認します。

```bash:変数の確認:
aws configure list
```

結果(例):

            Name                    Value             Type    Location
            ----                    -----             ----    --------
         profile       lambdaFull-prjz-mbp13        env    AWS_DEFAULT_PROFILE
      access_key     ****************XXXX shared-credentials-file
      secret_key     ****************XXXX shared-credentials-file
          region        ap-northeast-1        env    AWS_DEFAULT_REGION


0.2. インスタンスプロファイルの指定
-----------------------------------

インスタンスプロファイルを指定します。

```bash:変数の設定:
IAM_INSTANCE_PROFILE_NAME='aws-opsworks-ec2-role'
```


0.3. IAMロールの指定
--------------------

インスタンスプロファイルにアタッチするIAMロールを指定します。

```bash:変数の設定:
IAM_ROLE_NAME='aws-opsworks-ec2-role'
```


1. 事前作業
===========

インスタンスプロファイルを確認します。

```bash:コマンド:
aws iam list-instance-profiles-for-role \
        --role-name ${IAM_ROLE_NAME} \
        --query 'InstanceProfiles[].InstanceProfileName'
```

結果(例):

      []


2. ロールのアタッチ
===================

インスタンスプロファイルにロールをアタッチします。

```bash:変数の確認
cat << ETX

        IAM_INSTANCE_PROFILE_NAME: ${IAM_INSTANCE_PROFILE_NAME}
        IAM_ROLE_NAME:             ${IAM_ROLE_NAME}

ETX
```

```bash:コマンド:
aws iam add-role-to-instance-profile \
        --instance-profile-name ${IAM_INSTANCE_PROFILE_NAME} \
        --role-name ${IAM_ROLE_NAME}
```

結果:

      (戻り値なし)


3. 事後作業
===========


インスタンスプロファイルの確認
------------------------------

```bash:コマンド:
aws iam list-instance-profiles-for-role \
        --role-name ${IAM_ROLE_NAME} \
        --query 'InstanceProfiles[].InstanceProfileName'
```

結果(例):

      [
          "aws-opsworks-ec2-role"
      ]


完了
====
kintoneプラグイン『Gmail自動送信』使ってメール送信を行う

[『Gmail自動送信』](https://spica.tokyo/marron)を使います。

#Gmail APIのクライアントIDを作る
こちらを参考にDeveloper Conosleで設定します。
・[Gmail APIでクライアントIDを有効にするまでの手順](https://spica.tokyo/product/275)

#リフレッシュトークンを取得するまで
作成したクライアントIDとクライアントシークレットを各入力欄へ入力して、
『API認証を行い認証コードを取得する』ボタンをクリックすると、認証を求められます。
![marron_qiita_01a.png](https://qiita-image-store.s3.amazonaws.com/0/67365/08c40e5f-800a-2751-4740-0abeaf1c6192.png)

許可するとページがリダイレクトされるので、URL末尾のcodeをコピー。
（code=**************** の **************** の部分）
認証コード入力欄へ貼り付けし、『トークンの取得（認証）』ボタンをクリック。
![marron_qiita_02a.png](https://qiita-image-store.s3.amazonaws.com/0/67365/081dc42e-0ec0-7872-b94b-b3515c6367c0.png)

入力内容に間違いがなければ「認証されました」とメッセージが表示され、入力ボックスが閉じます。
（※この段階ではまだプラグイン設定は保存されていません）

#送信内容を設定する

「メール送信内容」のタブを選択し、設定を選択または入力していきます。
![marron_qiita_03.png](https://qiita-image-store.s3.amazonaws.com/0/67365/afcfae2a-6baa-05a1-d79c-f0b6254bf76f.png)

●To、Cc、Bcc にはフィールドのデータ、設定での直接入力、ログイン中のアカウントのメールアドレス、を設定可能
●件名、本文 にはフィールドのデータ、設定での直接入力のどちらかを指定
![marron_qiita_04.png](https://qiita-image-store.s3.amazonaws.com/0/67365/63d37abc-67a4-40b1-cd93-0287f53ed03e.png)

この入力例では、
　To に「toフィールド」を選択
　Cc を直接入力
　Bcc にログインアカウントの設定されているメールアドレス
　件名 に「subjectフィールド」を選択
　本文 を直接入力
としています。

#送信する条件を指定
メール送信を行いたい条件をチェックボックスで選択します。
![marron_qiita_05.png](https://qiita-image-store.s3.amazonaws.com/0/67365/c0c48993-4346-5170-3cd4-4f2396f1ca7b.png)
●レコード作成時に送信
レコードを新規作成した時に自動的に送信を行います。

●レコード編集時に送信
レコードを編集保存した時に自動的に送信を行います。
新規作成時の自動送信と同時に選択されていても送信される回数は１回です。

●送信ボタンを表示
レコード詳細画面に「メール送信」ボタンが表示されます。
手動の操作でメール送信を行います。

#送信結果メッセージ

メール送信が行われた後の送信結果表示についての設定を選択します。
![marron_qiita_06.png](https://qiita-image-store.s3.amazonaws.com/0/67365/d9b785f6-808c-80ac-2a08-4366a1a79422.png)

●送信完了メッセージを表示する
送信が完了した際にメッセージを表示します。
「送信中」のメッセージは必ず表示されます。

●送信失敗時にレコード保存を中断するかどうか選択する
新規作成および編集保存での自動送信で送信に失敗した場合に、レコードをそのまま保存するか、レコード保存をキャンセルするか、が選択できるようになります。
このチェックボックスをチェックしていなくても、送信失敗のメッセージ自体は必ず表示されます。

#非同期処理を行った際の挙動について

外部APIの利用や、レコード数チェックを行う自動採番、その他の非同期処理を行った場合、プロセスの実行順は保証されません。
これらを使用してパラメータ入力（送信先や本文の生成など）を行ってメール送信を行おうとした場合、想定通りのパラメータにならない可能性がありますのでご注意下さい。

[『機能拡張スタンダード All-In』](https://spica.tokyo/bluelaunch)が提供する機能については、非同期処理を含めてプロセスの実行順は保証されます。
自動採番を本文中に利用したい場合などにはこちらが使用できます。

・[kintoneプラグイン『機能拡張スタンダード All-In』を使って自動採番を行う](http://qiita.com/spica/items/803af7cd540ae0b8f718)
準拠法を日本法、管轄裁判所を東京地方裁判所に変更する

Day2 基調講演 (5月31日）
準拠法に言及するのは18:14~
https://youtu.be/F72ckAz6two?t=18m10s

<iframe width="560" height="315" src="https://www.youtube.com/embed/F72ckAz6two" frameborder="0" allowfullscreen></iframe>


[カスタマーアグリーメント](https://aws.amazon.com/jp/agreement/)を更新するのは大きなパワーが必要のようで、公式サイトではまだ更新されていません。

```13.4準拠法
本契約およびサービス利用者とアマゾンの間に生じるすべての種類の紛争は、抵触法の原則にかかわらず、アメリカ合衆国ワシントン州法に準拠する。国際物品売買契約に関する国際連合条約は本契約には適用されない。
```

# 概要
クライアントがEnterpriseな場合、「準拠法が日本法であること」が100%要件に入ります。実際にはAWSの使用を見送ったり、未決事項としてAWSを使用したりするパターンがあるかと思います。

# 要件
* 無条件に変更は出来ない
	1. ビジネス要件に求められているか
	2. 変更できるのは準拠法と管轄裁判所の2件のみ

# 流れ
フロー：AWSサポートに変更の意思表示 => AWSから覚書受理(英語) => AWSへ申請
期間：2~5週間

# 所感
書面に不利な内容が書かれておらず、後々トラブルにならないように目的の変更が記述されているかどうかをしっかり確認すべき

# Update
2017/11から`AWS Artifact`でリアルタイムに準拠法と管轄裁判所変更が出来るようになりました...!
![image.png](https://qiita-image-store.s3.amazonaws.com/0/58788/b4175a8d-d783-c15b-8c76-b1f61b17f909.png)
コマンドラインの出力結果をクリップボードに　--pbcopy--

LinuxやMacにはpbcopyというコマンドがあります。
コマンドラインの出力結果をパイプで渡すことでクリップボードにコピーできます。
例えば,

```shell-session:
$ pwd | pbcopy
```

公開鍵のコピーにも便利:

```shell-session:
$ pbcopy < ~/.ssh/id_rsa.pub
```
まだTinkerの名前空間で消耗してるの？

タイトルはテンション上がったので付けてしまいました。

# 問題

Laravelで `php artisan tinker` を頻繁に使っているが、毎回名前空間を指定するのが辛かった。

こんな感じ。

```php
>>> App\Models\User::find(1)->toSql()
=> "select * from `users` where `users`.`deleted_at` is null"
```

面倒なのでGoogle日本語入力の単語登録をしていたが、エンジニア的なアプローチとしては適切ではないように思っていた。つまりダサい。

# 解決策

調べていたら、Laravelの Class aliases は動的に設定できるらしい。

これを利用して、下記のファイルを Tinker を呼び出す時に読み込ませてあげればよい。

```php:.tinker
<?php

$loader = Illuminate\Foundation\AliasLoader::getInstance();
$loader->alias('User', 'App\Models\User');
```

こうなる。

```php
php artisan tinker .tinker

>>> User::find(1)->toSql()
=> "select * from `users` where `users`.`deleted_at` is null"
```

かなり打ちやすくなった。

# 参考

- https://laracasts.com/discuss/channels/laravel/dynamic-class-aliases-in-package
- https://softonsofa.com/tinker-like-a-boss-aliases/
ServiceNow Jakartaアップデートトピックス - ユーザ名横の写真が小さくなった -

ServiceNowのバージョン「Jakarta」での変更点。
[まとめはこちら](http://qiita.com/Kisaragi13/items/3f332bb2a5b2a561f423)

# ユーザ名横の写真が小さくなった
微妙に小さくなった。
Istanbul → Jakarta
![image.png](https://qiita-image-store.s3.amazonaws.com/0/175688/fb3c01b5-2f9b-5584-e2a2-3e3bfb8247df.png)

# 関連記事
> - [ServiceNow Jakartaアップデートトピックスまとめ](http://qiita.com/Kisaragi13/items/3f332bb2a5b2a561f423)

# 参考サイト
> ServiceNow Product Documentation - Jakarta release notes -
https://docs.servicenow.com/bundle/jakarta-release-notes/page/release-notes/jakarta-release-notes.html
HTML5 > 記事の文章にルビをふる (「読み」を付ける) > rubyタグ

http://qiita.com/Kouta777123/items/7284a5ddf3ad839a44af
の @SaitoAtsushi さんのコメントをよく見ると「読み」が付いていました。

Chromeの「ページのソースを表示」機能を使って、下記のようなコードで「読み」を付けることができると分かりました。
(追記: `<rb>`の記載がありますが、後述のようにHTML5では`<rb>`は不要です)。

`
現在の<ruby><rb>知識</rb><rp>(</rp><rt>ちしき</rt><rp>)</rp></ruby>とかの問題でなく、<ruby><rb>姿勢</rb><rp>(</rp><rt>しせい</rt><rp>)</rp></ruby>の問題ですね。
`

現在の<ruby><rb>知識</rb><rp>(</rp><rt>ちしき</rt><rp>)</rp></ruby>とかの問題でなく、<ruby><rb>姿勢</rb><rp>(</rp><rt>しせい</rt><rp>)</rp></ruby>の問題ですね。

[関連 @ Stackoverflow](https://ja.stackoverflow.com/questions/21716/%E6%97%A5%E6%9C%AC%E8%AA%9E%E3%81%AE%E6%96%87%E7%AB%A0%E3%81%AB%E5%AF%BE%E3%81%97%E3%81%A6%E3%81%B5%E3%82%8A%E3%81%8C%E3%81%AA%E3%82%92%E4%BB%98%E3%81%91%E3%82%8Bruby%E3%81%AE%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA%E3%81%AF%E3%81%82%E3%82%8A%E3%81%BE%E3%81%99%E3%81%8B)

<hr>
(追記 2017/06/27)

Rubyコードでなく、HTML5タグということを @cia_rana さんの[コメント](http://qiita.com/7of9/items/c9ebac5bf06c0175f1cf/#comment-f267a6e6ad7d78a20882)にて教えていただきました。
情報感謝です。

http://www.htmq.com/html5/ruby.shtml

@SaitoAtsushi さんの[コメント](http://qiita.com/7of9/items/c9ebac5bf06c0175f1cf\#comment-f267a6e6ad7d78a20882)にてrbタグはHTML5で標準では使わないと教えていただきました。
情報感謝です。

`
<ruby>Thank you very much. I appreciate it.<rp>(</rp><rt>ありがとうございます。感謝です。</rt><rp>)</rp></ruby>
`

<ruby>Thank you very much. I appreciate it.<rp>(</rp><rt>ありがとうございます。感謝です。</rt><rp>)</rp></ruby>
pythonを仮想空間上で行う方法（MacOS用）

この記事は、macOSにて、pythonを仮想空間上で行う方法が書かれています。

事前準備：Homebrewのインストール

初めに、Homebrewを用いて、pyenvとpyenv-virtualenvをインストールする。
ターミナルに次のコマンドを入力する。

```
$brew install pyenv
$brew install pyenv-virtualenv
```

仮想環境を扱うためのツールが導入することができた。

次に.bash_profileに以下のコードを追加する。

```py3:
export PYENV_ROOT=${HOME}/.pyenv
if [ -d "${PYENV_ROOT}" ]; then
    export PATH=${PYENV_ROOT}/bin:$PATH
    eval "$(pyenv init -)"
    eval "$(pyenv virtualenv-init -)"
fi
```

これを読み込む。

```
$ source ~/.bash_profile
```

pyenvの中に、好きなPythonのバージョンをインストールする。

```
$ pyenv install 3.x.y
```

次に、pyenvの中に存在するPythonのバージョンを指定して、仮想環境を構築する。

```
$ pyenv virtualenv 3.x.y test
```


好きなディレクトリ上に、test環境を指定する。

```
$ pyenv local test
```

これで、そのディレクトリに移動する自動的にtest環境で指定したPythonが実行できる。
ServiceNow Jakartaアップデートトピックス - 自動テスト（スケジュール）でブラウザを選択できるようになった -

ServiceNowのバージョン「Jakarta」での変更点。
[まとめはこちら](http://qiita.com/Kisaragi13/items/3f332bb2a5b2a561f423)

# 自動テスト（スケジュール）でブラウザを選択できるようになった
![image.png](https://qiita-image-store.s3.amazonaws.com/0/175688/ef7fbb5c-6aa5-d1c3-3276-42e49021265b.png)

## ページ遷移
アプリケーションナビゲータより
**自動テストフレームワーク -> スケジュール -> 新規**
スイートスケジュールを設定し、「**保存**」ボタンをクリックする。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/175688/4724bafd-635d-b93f-41dc-5ebbcaa894cb.png)

スケジュール済みのスイートリストから「**新規**」ボタンをクリックする。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/175688/8d41bd6f-89e7-8d9b-c018-91edf687fe91.png)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/175688/ef7fbb5c-6aa5-d1c3-3276-42e49021265b.png)

# 関連記事
> - [ServiceNow Jakartaアップデートトピックスまとめ](http://qiita.com/Kisaragi13/items/3f332bb2a5b2a561f423)

# 参考サイト
> ServiceNow Product Documentation - Jakarta release notes -
https://docs.servicenow.com/bundle/jakarta-release-notes/page/release-notes/jakarta-release-notes.html
【 Node.js 】インストール済みパッケージ一覧表示 (npm list)

__Node.js__のパッケージマネージャー(npm)で、
1. パッケージがグローバルインストールされているかCLIから確認したい場合

```js
$ npm -g list | find "確認したいパッケージ名"
```

2. 依存パッケージ名を表示させたくない場合は、```オプション : --depth=0``` を追加。

```js
$ npm -g list --depth=0 | find "確認したいパッケージ名"
```

__<font color="gray">※ ローカルインストールされているパッケージを確認したい場合は、__```グローバルオプション : -g``` __を省く。</font>__
AWSCLIを使用してアンマウントせずにEBSボリュームを変更する

# 目的
* EBSボリュームを活性変更する

# 環境
* [aws-cli/1.11.111](http://docs.aws.amazon.com/cli/latest/reference/ec2/)以上で使用可能
    * `aws-cli/1.11.112 Python/2.7.13 Darwin/16.5.0 botocore/1.5.75`
        * `$ pip install --upgrade --user awscli`でupdate

```
SYNOPSIS
            modify-volume
          [--dry-run | --no-dry-run]
          --volume-id <value>
          [--size <value>]
          [--volume-type <value>]
          [--iops <value>]
          [--cli-input-json <value>]
          [--generate-cli-skeleton <value>]
```
* インスタンスタイプは[現行世代](http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html)で使用可能

# 設定
* 100GB => 150GBに変更

```
$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/xvda1       99G   86G   14G  87% /
(snip)
$ aws ec2 modify-volume --volume-id <volume-id> --size 150 --volume-type gp2
```

* 確認

```
$ lsblk
NAME    MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
xvda    202:0    0  150G  0 disk
└─xvda1 202:1    0  100G  0 part /
```

* パーティション拡張

```
$ sudo growpart /dev/xvda 1
CHANGED: disk=/dev/xvda partition=1: start=4096 old: size=209711070,end=209715166 new: size=314568670,end=314572766
```

* ファイルシステム拡張

```
$ sudo resize2fs /dev/xvda1
resize2fs 1.42.12 (29-Aug-2014)
Filesystem at /dev/xvda1 is mounted on /; on-line resizing required
old_desc_blocks = 7, new_desc_blocks = 10
The filesystem on /dev/xvda1 is now 39321083 (4k) blocks long.
```

* 確認

```
$ lsblk
NAME    MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
xvda    202:0    0  150G  0 disk
└─xvda1 202:1    0  150G  0 part /
$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/xvda1      148G   86G   63G  58% /
(snip)
```

# 所感
* 50GBの増設で約50分ほど必要でした。1TBだと6時間くらいだそうです。
そもそも、容量追加なんてのは要件として緊急性がないので、時間がかかっても平気ですけど、商用環境以外ならumountした方がいいですね。
[JAWS-UG CLI] IAM #84 インスタンスプロファイルの作成

前提条件
========


IAMへの権限
-----------

IAMに対してフル権限があること。


AWS CLIのバージョン
-------------------

以下のバージョンで動作確認済

* AWS CLI 1.11.14

```bash:コマンド:
aws --version
```

結果(例):

      aws-cli/1.11.34 Python/2.7.10 Darwin/15.6.0 botocore/1.4.91

バージョンが古い場合は最新版に更新しましょう。

```bash:コマンド:
sudo -H pip install -U awscli
```


0. 準備
=======


1.1. 変数の確認
---------------

プロファイルが想定のものになっていることを確認します。

```bash:コマンド:
aws configure list
```

結果(例)

            Name                    Value             Type    Location
            ----                    -----             ----    --------
         profile         iamFull-prjz-mbp13        env    AWS_DEFAULT_PROFILE
      access_key     ****************XXXX shared-credentials-file
      secret_key     ****************XXXX shared-credentials-file
          region                         ap-northeast-1  env    AWS_DEFAULT_REGION

AssumeRoleを利用している場合はprofileが '<not set>'と表示されます。 そ
れ以外のときにprofileが '<not set>' と表示される場合は、以下を実行して
ください。

   変数の設定:

         export AWS_DEFAULT_PROFILE=<IAMユーザ名>


1. 事前作業
===========


インスタンスプロファイル名の決定
--------------------------------

```bash:変数の設定:
IAM_INSTANCE_PROFILE_NAME='aws-opsworks-ec2-role'
```

同じ名前のインスタンスプロファイルが存在しないことを確認します。

```bash:コマンド:
aws iam get-instance-profile \
        --instance-profile-name ${IAM_INSTANCE_PROFILE_NAME}
```

結果(例):

      A client error (NoSuchEntity) occurred when calling the GetInstanceProfile operation: Instance Profile aws-opsworks-ec2-role cannot be found.


2. 本作業
=========


インスタンスプロファイルの作成
------------------------------

```bash:変数の確認:
cat << ETX

        IAM_INSTANCE_PROFILE_NAME: ${IAM_INSTANCE_PROFILE_NAME}

ETX
```

```bash:コマンド:
aws iam create-instance-profile \
        --instance-profile-name ${IAM_INSTANCE_PROFILE_NAME}
```

結果(例):

      {
        "InstanceProfile": {
          "InstanceProfileId": "AIPAxxxxxxxxxxxxxxxxx",
          "Roles": [],
          "CreateDate": "2017-02-13T01:23:45.678",
          "InstanceProfileName": "aws-opsworks-ec2-role",
          "Path": "/",
          "Arn": "arn:aws:iam::XXXXXXXXXXXX:instance-profile/aws-opsworks-ec2-role"
        }
      }


3. 事後作業
===========


インスタンスプロファイルの確認
------------------------------

```bash:コマンド:
aws iam get-instance-profile \
        --instance-profile-name ${IAM_INSTANCE_PROFILE_NAME}
```

結果(例):

      {
        "InstanceProfiles": [
          {
              "InstanceProfileId": "AIPAJRUJIZXNNQU4R6VZM",
              "Roles": [],
              "CreateDate": "2017-02-13T01:23:45Z",
              "InstanceProfileName": "aws-opsworks-ec2-role",
              "Path": "/",
              "Arn": "arn:aws:iam::XXXXXXXXXXXX:instance-profile/aws-opsworks-ec2-role"
          }
        ]
      }


完了
====
「Kotlin入門までの助走読本」を読んで助走した話

この記事は [cloudpackあら便利カレンダー](https://cloudpack.github.io/benri2017/) の19日目の記事です。


#前置き

先日、[「Kotlin入門までの助走読本」](http://goo.gl/5vUT7o)を紹介していただきましたので、助走しました！のご報告を兼ねて助走結果についてお伝えしたいと思います。


#本題

結論から書きますとしっかりと助走出来たと思います。
助走して Kotlin を使用した開発の入り口へ立てたと思いますし、Kotlin への興味は強くなりました。

ので、どんな感じで助走出来た感があるかを挙げておきます。


###Kotlin の始め方がわかります
何はともあれ初めの一歩をスタートするための情報があります。
各所の記事にもありますが、とりあえず助走すれば良いと思います。

###Kotlin がどんな言語か雰囲気がわかります
しかもサクッと。
何せ助走ですから短時間で雰囲気をつかむことが出来ます。
個人的にはデータクラスやオブジェクトの項で良いね！と思いました。

###Java との共存方法がわかります
Android の開発での活用をイメージしていましたので、Java との共存は気になっていましたが、共存戦略からコードサンプルまで記述があります。

###次のステップについての言及があります
助走後に気になる学習、コミュニティ、現在の助走に含まれなかったトピックについての記述があります。
これらでもって助走後にも走り続けることが容易になると思います。


#助走を終えて
私は Kotlin で Android の開発をするぞーと思って助走を始めましたが、さすがに助走だけではそこまでたどり着きませんでした。なんせ入門までの助走ですし。
ですので、せっかく助走したのだからともう少し走り続けるために取り掛かったことを挙げておきます。

###「Kotlin スタートブックー新しい Android プログラミングー」
助走本にも次のステップの１つとして紹介があります。
全１８章中の１４章から Kotlin で Android アプリを作る内容です。
助走終わってるんでいきなり１４章でもいいですよね！

###Android Studio でいろんなタイプの Activity を作って Kotlin 化
簡単なサンプルとしてはもってこいなんじゃないかと思ってるんですがどうですかね。
少なくともちゃんと動きますし。

###公式にはこれから行きます！
助走終わりでも強くおすすめされているのに行ってませんでした。
ので、行きまーす！



#以上
助走した話でした。

助走前、誰かのストレッチの補助になったら幸いです。
Railsでテーブルにリレーションを貼りたい＆カラム名をテーブルとは別名にしたい場合。

リレーションを作成する際、基本的にはカラム名は"[table名（単数系)]_id"となります。フォロー/フォロワー関連のテーブルの様に、１つのテーブルで複数のUserテーブルとのリレーションが必要になる場合、カラム名を変更しなくてはいけません。
今まで、integerでカラムを追加していたのですが、referencesで別名をつけることができる様です。
最近までこのやり方を知らなかったので、メモとして投稿させて頂きます。

UserテーブルとRelationshipテーブルを作成する例を記載します。
Migrationファイルのテーブル定義のコードになります。

## テーブル作成
### Userテーブル
```
create_table :users, unsigned: true do |t|
  t.string :email,              null: false, default: ""
  t.string :encrypted_password, null: false, default: ""
  t.string :name

  t.timestamps null: false
end
```

### Relationshipテーブル
```
create_table :relationships, unsigned: true do |t|
  t.references :follower, foreign_key: { to_table: :users }, null: false, unsigned: true
  t.references :following, foreign_key: { to_table: :users }, null: false, unsigned: true

  t.timestamps null: false
end
```

```foreign_key: { to_table: :users }``` というリレーション（外部キー）の書き方を知りませんでした＞＜

###【補足】
例として記載していますので、実際このままmigrateできるかは試していません。
あくまでメモとして・・・
Apache Kafkaインストールからチュートリアルまで

## Apache Kafkaとは？

> Apache Kafka is an open-source stream processing platform developed by the Apache Software Foundation written in Scala and Java. The project aims to provide a unified, high-throughput, low-latency platform for handling real-time data feeds. (https://en.wikipedia.org/wiki/Apache_Kafka)

Apache Kafkaは、ScalaとJavaで書かれたApacheソフトウェア財団によって開発されたオープンソースのストリーム処理プラットフォームである。このプロジェクトは、リアルタイムのデータフィードを処理するための、高スループット、低レイテンシのプラットフォームを提供することを目指している。

> What is Kafka good for?

> It gets used for two broad classes of application:

> * Building real-time streaming data pipelines that reliably get data between systems or applications

> * Building real-time streaming applications that transform or react to the streams of data

Kafkaを使うことで

* システムまたはアプリケーション間で確実にデータを取得するリアルタイムのストリーミングデータパイプラインの構築が可能
* データストリームを変換または反応するリアルタイムのストリーミングアプリケーションを構築が可能

## GitHub

https://github.com/apache/kafk


## Installing Kafka


### Download the code

```zsh
$ wget http://ftp.riken.jp/net/apache/kafka/0.10.2.0/kafka_2.11-0.10.2.0.tgz
$ tar -zxf kafka_2.11-0.10.2.0.tgz
$ cd kafka_2.11-0.10.2.0
```

### Install java
```zsh
$ yum search openjdk
$ yum install java-1.8.0-openjdk-devel
```

## Tutorial 

Kafkaのコマンドラインクライアントから、メッセージをKafkaクラスタに送信する。

### Start the server
```zsh
# start ZooKeeper server
$ bin/zookeeper-server-start.sh config/zookeeper.properties
# start Kafka server
$ bin/kafka-server-start.sh config/server.properties
```

### Create a topic
```zsh
$ bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test
# see the topic
$ bin/kafka-topics.sh --list --zookeeper localhost:2181
```

## Send messages

```zsh
$ bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test
```

上記コマンド実行後、以下のメッセージをコンソールに続けて入力する。

```zsh
$ bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test
This is a message
This is another message
```

## Receive messages(start a consumer)

メッセージ送信したクライアントとは別のクライアントを立ち上げ、以下のコマンドを実行する

```zsh
$ bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning
```

すると、メッセージ送信で入力したメッセージが受信される。

```zsh
$ bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning
This is a message
This is another message
```


### references

* https://kafka.apache.org/quickstart
レスポンシブの％の計算をjQueryで作成してみたメモ

めんどくさい計算をプログラムで書いてみたので、残します。

```js
      $('input').keyup(function(){
      	var firstValue = parseFloat($(任意id名).val());
      	var secondValue = parseFloat($(任意id名).val());
      	var thirdValue = parseFloat($(任意id名).val());
      	$(任意id名).html(firstValue / secondValue * thirdValue);
      });
```
```html
    <input type="number" id="任意id名" placeholder="eg: 100" />
    <input type="number" id="任意id名" placeholder="eg: 960" />
    <input type="hidden" id="任意id名" value="100" />

    <div class="任意のclass名">Total:</div>
    <div class="任意のclass名"><span id=任意id名></span>%</div> 
```

inputは必須かと思います。

keyupは、キーボードのキーが押され、上がった際に呼び出されます。 
parseFloatは引数の文字列を解析し、浮動小数点数を返します。

var thirdValue は、お分かりかと思います。

あとは、計算です。
例）
10 / 960 * 100 = 1.0416666666666665%

いちいち電卓もしくはiphon スマートフォンを使うより、ブラウザに表示させながら計算した方が楽かもです。

では、参考までに
[Linux][date] dateコマンドを使ってcron形式で現在時刻を取得

cronとかJenkins向けに設定する際に、デバッグ用の時間を簡単に取得したかったため、dateからcron形式に変換する方法を調べたメモ

# 現在時刻を取得

```console:実行例
$ date +"%M %k %d %m *"
33 16 25 06 *
```
| フォーマット記法 | 概要 |
|:-:|:--|
| %k | 時 ( 0～23) |
| %M | 分 (00～59) |
| %d | 日 (01～31) |
| %m | 月 (01～12) |
| %u | 週の何日目かを表す値 (1..7); 1 が月曜日 |
| %w | 週の何日目かを表す値 (0..6); 0 を日曜日とする |

cronは日曜日は0でも7でも良いらしいので曜日を指定する場合はどちらでも良い
ただし、日付と曜日を同時に指定するとXX日と毎週◯曜日の両方で動作するようになるため、同時指定はしないようにする。

[第25回　cron周りのベストプラクティス（1）：Perl Hackers Hub｜gihyo.jp … 技術評論社](http://gihyo.jp/dev/serial/01/perl-hackers-hub/002501)

# 2分後の値を取得
デバッグでよくある2分後に設定する例

## 2分後の時刻を取得

```console:2分後の値を取得
$ date --date '2 minutes' +"%M %k %d %m *"
44 16 25 06 1
```

## 2分後に実行するcronジョブを設定する例

```console:実行例
$ date --date '2 minutes' +'%M %k %d %m * echo $(date) > /tmp/hoge.log' | crontab -
$ crontab -l
15 17 25 06 1 echo $(date) > /tmp/hoge.log
```

# 参考
[Linuxコマンド集 - 【 date 】 日付や時刻を表示，設定する：ITpro](http://itpro.nikkeibp.co.jp/article/COLUMN/20060227/230739/)
[dateコマンドで時刻計算（ネタ） - Librabuch](https://librabuch.jp/blog/2013/01/date-command-tips/)
[date コマンドで相対日付で目的の日をパパっと計算する。 - それマグで！](http://takuya-1st.hatenablog.jp/entry/20121121/1353527425)
C++ Builder > Error: モジュール '何がしのプログラム.exe'のアドレス0044392Eでアドレス000005B5に対する読み取り違反がおきました。' > 原因の特定 | 原因

```txt:動作環境
C++ Builder XE4
```

### エラー

フォームの追加作業をしていた。
プログラム実行直後に以下のエラーが出るようになった。

> モジュール '何がしのプログラム.exe'のアドレス0044392Eでアドレス000005B5に対する読み取り違反がおきました。'

上記のダイアログでOKを押すと、プログラムは実行する状態。

### 原因の特定

- プログラムを一時停止する
- 「検索 > 指定アドレスに移動」を選択する
- $を付けて、アドレスを入力する
    - (例: $0044392E)
    
該当のcppファイルの行が表示される。

(スタックなどのアドレスの場合は、対応行が表示されない場合もある)

### 原因

FormCreate()時にメンバ変数の値を元にif文の処理をしていた。

フォームの数が少ないときは「偶然」うまく動いていたのだろう。
(メンバ変数の生成タイミングがたまたま良かった?)

FormCreate()時にメンバ変数の参照をやめるようにしたら、エラーは出なくなった。
(代わりにFormShow()での処理に変更した)
【Salesforce初心者】環境差分を特定するコマンドー＞複数ファイルのdiffを取る

途中に入ったPJで、デプロイをするときに、予定外の環境差分があることが発覚されました。
余計なゴミとかデプロイしたくないので、手取り早く差分を特定する方法を調べてみました。

下記のリンクを参考にしました：
http://qiita.com/7of9/items/e97a8581bdf40eec5030

clsファイルや、xmlファイルなどの差分を特定するときに有効。
linuxやUnixの環境が必要ですが、
シェルとか書く必要がなくそのまま使えるので、とても便利です。

```
diff -r folderA folderB
```

```
//diffのあるファイル名を表示
diff -r folderA folderB | grep diff
//上記のファイル数をカウント
diff -r folderA folderB | grep diff | wc -l
```

```
//片方のフォルダにしか存在しないファイル名を表示
diff -r folderA folderB | grep Only
//上記のファイル数をカウント
diff -r folderA folderB | grep Only | wc -l
```
Spring で簡易プラグイン機構、に順序も考慮する

Spring を使った簡易プラグイン機構としては、以下に書かれている通りでとても簡単に実現できる。

DIコンテナで実現する簡易プラグイン機構
https://blog.ik.am/entries/331

ここでは、更にプラグインの適用順序も考慮してみる。
やり方はとても簡単で `@Priority` を付けて順番を定義するだけ。

```java:MyPlugin.java
public interface MyPlugin {
    String execute();
}
```

```java:MyPluginService.java
@Service
public class MyPluginService {
    @Autowired
    List<MyPlugin> plugins;

    public List<String> execute() {
        return plugins.stream().map(p -> p.execute()).collect(Collectors.toList());
    }
}
```

```java:PluginController.java
@RestController
public class PluginController {
    @Autowired
    MyPluginService myPluginService;

    @GetMapping("plugins")
    public List<String> plugins() {
        return myPluginService.execute();
    }
}
```

```java
@Component
@Priority(10)
public class Fuga1Plugin implements MyPlugin {
    @Override
    public String execute() {
        return "Fuga1Plugin";
    }
}

@Component
@Priority(50)
public class Hoge1Plugin implements MyPlugin {
    @Override
    public String execute() {
        return "Hoge1Plugin";
    }
}

@Component
@Priority(100)
public class Fuga2Plugin implements MyPlugin {
    @Override
    public String execute() {
        return "Fuga2Plugin";
    }
}

@Component
@Priority(200)
public class Hoge2Plugin implements MyPlugin {
    @Override
    public String execute() {
        return "Hoge2Plugin";
    }
}
```



```:実行結果
$ curl http://localhost:8080/plugins | jq .
[
  "Fuga1Plugin",
  "Hoge1Plugin",
  "Fuga2Plugin",
  "Hoge2Plugin"
]
```

ちなみに、Spring 4.1 からは `@Order` ではなく `@Priority` 推奨とのこと。
また、`@Conditional` を使えば、適用条件も書けたりするが、あまり使う機会はなさそう。
これは〇〇語のページです、翻訳しますか？とサイトに表示されてしまう場合の対処

# 自サイトにおいてこれは〇〇語のページです、翻訳しますかとChromeが言ってくる

![image.png](https://qiita-image-store.s3.amazonaws.com/0/69647/8f21b8c0-6f2e-77a2-893a-456432790b0e.png)


すごく基本的なことですが、そんなときにの対処方法。を2点紹介

## HTMLタグにlangを指定する

```html:index.html
<html lang="ja">
</html>
```

## 文字コードをセットする

```html:index.html
<html>
　　<head>
　　　　<meta charset="UTF-8">
　　</meta>
</html>
```

上記２つ実施した上でブラウザをキャッシュごと削除して更新すると日本語として認識してくれるようになると思います
Angular2のi18nを使ってみた

## ざっくり3行
- 「[Internationalization (i18n)](https://angular.io/guide/i18n)」をななめ読みし
- Angular CLIでサクッと
- 日本語翻訳したプロジェクトを動かす

## プロジェクトの作成
```
$ ng new angular2-i18n
$ cd angular2-i18n
```

## ツールのインストール
```
$ npm install @angular/compiler-cli @angular/platform-server --save
```
```json:package.json
"scripts": {
  "i18n": "ng-xi18n"
}
```

## 翻訳元となるHTMLファイルに手をくわえる
`i18n`属性を加えた箇所が翻訳対象となります。
また`@@`から始まるIDを予め振っておくと管理しやすくなると思います。（指定しない場合、辞書ファイル生成時に自動でIDが振られます）

```html:app.component.html
<h1>
  {{title}}
</h1>
```
↓

```html:app.component.html
<h1 i18n="@@hello">
  Hello world
</h1>
```

## 辞書ファイルの作成
```
$ npm run i18n -- --i18nFormat=xlf  --outFile=src/locale/messages.ja.xlf
```

## 辞書ファイルの修正
HTML側に振ったIDを持つ要素の`target`に和訳を入れていきます。

```xml:messages.ja.xlf
<trans-unit id="hello" datatype="html">
  <source>
    Hello world
  </source>
  <target/>
  ...
</trans-unit>
...
```
↓

```xml:messages.ja.xlf
<trans-unit id="hello" datatype="html">
  <source>
    Hello world
  </source>
  <target>
    こんにちは世界
  </target>
  ...
</trans-unit>
...
```


## 起動
```
$ ng serve --aot --locale ja --i18n-format xlf --i18n-file src/locale/messages.ja.xlf
```
<img width="350" alt="Angular2I18n_🔇.png" src="https://qiita-image-store.s3.amazonaws.com/0/67377/03fbcfc6-d12d-c334-33f0-e2018e9bdac6.png">
MacBookでハイパースレッディングを無効にする

昨日、SkylakeとKabylakeでハイパースレッディングに問題ありという投稿がありました。
https://lists.debian.org/debian-devel/2017/06/msg00308.html

そこで対策として有効かわかりませんが、ハイパースレッディングを無効にする方法です。

1. XCodeをインストール
2. Instrumentsを起動
3. PreferencesからCPUsタブを選択してHardware Multi-Threadingのチェックを外す

これで無効になるようです。
Relationship of space and argument

Let's  see the following code.


```ruby
def times_two(arg1);
  puts arg1 * 2;
end

def sum(arg1, arg2);
  puts arg1 + arg2;
end
```
```ruby
times_two 5
times_two(5)
times_two (5)
sum 1, 2
sum(1, 2)
sum (1, 2)
```
when call the functions above, which returns error?

Result...

```ruby
10
10
10
3
3
SyntaxError: (irb):14: syntax error, unexpected ',', expecting ')'
sum (1, 2)
       ^
```
Why??

Because there is a space between function and parenthesis of arguments, Ruby parser find it as a single argument, but it is invalid, so returned error.
オブジェクトのクラス名を取得

## Explode
```php
public function getName() {
    $path = explode('\\', __CLASS__);
    return array_pop($path);
}
```

## ReflectionClass
```php
(new \ReflectionClass($this))->getShortName();
```

## Substring
```php
return substr(strrchr(__CLASS__, "\\"), 1);   
```

## The winner
|Method Name      |Iterations    |Average Time      |Ops/second      |
|:--------------|  ------------  |--------------    |-----------------:|
|testExplode    |10,000     |0.0000020221710 |494,518.01547 |
|testSubstring  |10,000     |0.0000017177343 |582,162.19968 |
|testReflection |10,000     |0.0000015984058 |625,623.34059 |
netifacesを使ったCONFIGにIPアドレスを書き込むコード

Python3で書く、IPアドレスをCONFIGファイルに書き込むプログラム。
ターミナル上に以下のコードを入力する。
```pip3 install netifaces
```

```py3:
import netifaces
def main():
    i = 0
    f = open('CONFIG', 'w')
    str = "import multiprocessing" +  '\n'
    f.write(str)
    for iface_name in netifaces.interfaces():
        iface_data = netifaces.ifaddresses(iface_name)
        ip_adressList = iface_data.get(netifaces.AF_INET)
        if ip_adressList != None:
            print(ip_adressList[0]['addr'])
            ip_address = ip_adressList[0]['addr']
            str = "bind = " + "\"" +ip_address + "\"" + '\n'
            f.write(str)
    str = "workers = multiprocessing.cpu_count() * 2 + 1"
    f.write(str)
    f.close()

main()
```

訂正後

```py3:
import netifaces

def main():
    f = open('CONFIG', 'w')
    f.write("import multiprocessing" +  '\n')
    for iface_name in netifaces.interfaces():
        iface_data = netifaces.ifaddresses(iface_name)
        ip_adressList = iface_data.get(netifaces.AF_INET)
        if ip_adressList != None:
            ip_address = ip_adressList[0]['addr']
            text = 'bind = "%s"\n' % ip_address
            f.write(text)
    f.write("workers = multiprocessing.cpu_count() * 2 + 1")
    f.close()

main()
```

結果、CONFIGファイルに以下のコードが書き込まれる。

```text:
import multiprocessing
bind = "127.0.0.1" #ローカルIPアドレス
bind = "◯◯◯.◯◯.◯◯.◯◯◯" #IPアドレス
workers = multiprocessing.cpu_count() * 2 + 1
```
Cognos Framework Manager モデルファイルの簡単な復活手順 (MotioPIの紹介)

##概要
Cognos BIでFramework Managerでモデルを作成し、Cognos Connection上にパッケージを配布したけど、長年経ったらFramework Managerのファイルを無くしたり、どれが最新だかわからなくなり、いざモデルを拡張しようとした時に非常に困る事があります。

Cognos Connection上のパッケージから、FMモデルファイル復活のために、以下の様なTechnoteもありますが、
**How to recover a corrupted or lost Framework Manager model.**
http://www-01.ibm.com/support/docview.wss?uid=swg21505488

Motioという知る人ぞ知るベンダーの、MotioPIというフリーツールで簡単にFMモデルの復活ができますので、MotioPIの紹介も兼ねて投稿します。

##手順
まずは、MotioのWebサイトにアクセスします。
https://www.motio.com/

この中の「Blog」の中の記事に、FMモデルを復活させる手順の記事がありますので、ご参照下さい。
「Free Software」からユーザー登録し、MotioPIをダウンロードします。
![027.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/41037692-5a20-4247-cee4-ce9dd25b7a82.png)

ユーザー登録します。Emailはフリーメールのドメインでは駄目で、自社のメールを登録しました。
![002.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/3be8b01f-61e8-5014-8892-9d1cf6ce3f48.png)

登録するとメールが来ますので、MotioPIをダウンロードし、インストールします。
![006.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/676254eb-44c4-eeb1-0a7e-9bf39ab1b792.png)

インストール画面。なんだか忍者が大好きなベンダーのようです。
![008.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/d5c09ed0-19fd-fbde-552e-79f23aad931b.png)

こんな感じにスタートメニューに入ります。
![014.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/74b3fa89-e61f-1558-ab36-687dbb9f17fa.png)

次に、とりあえずFramework Managerを起動して、新規プロジェクトからどこかにプロジェクトを作成し、そのまま閉じます。
![013.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/ad2bbf93-8670-bd92-a9c0-6670137ea1d5.png)

とりあえず、一式ファイルが作成されます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/147246/6887ac5d-8520-b4c1-8805-2bc6ee5d8c18.png)

スタートメニューからMotioPIを起動し、「Free Mode」を選択し「Continue」。
![015.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/f12ccf57-d6d5-7cc3-e048-d8f726ff5726.png)

DispacherURIやGatewayURI、Namespace、Username、Passwordを指定し「Login」します。
![017.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/b24aca96-0a3d-22a4-c808-fb6b6ba65896.png)

「Model」を選択します。
![018.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/b307808c-7e1a-f2c0-c827-f6ba67f700ac.png)

「Package Selector」を選択します。
![019.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/2b5e60fd-92d4-ff52-a35c-116697b1b662.png)

復活したいFMモデルのパッケージを選択します。
![020.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/85f1f13a-8238-68d9-6e87-e660c880f305.png)

「Save Local」して、適当なフォルダを指定します。
![021.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/f661a86c-07ea-3035-7f68-11e35e143478.png)

指定したフォルダに、model.xmlファイルが保存されますので、コピーして。
![023.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/362bf5fb-0541-751a-2520-f6d5bb2cde52.png)

先に作成した、空のFMモデルファイルに上書きします。
![024.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/e83f2b6a-d47c-1640-8634-ee425686fe1e.png)

Framework ManagerでこのフォルダのCPFファイルを指定して、モデルを開いてみます。
素晴らしい！FMモデルが復活しています。
![026.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/bd6e39de-2a34-8f19-5673-edaa2625f76a.png)

今回はFramework Managerモデルの復活機能をご紹介しましたが、MotioPIは他にも色々な管理機能を提供しているようなので、気に入ったら是非使ってみると良いかと思います。
![028.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/57db5e69-be6e-c4e3-5855-13bcc2315e39.png)
Svelteでコンポーネント間のやりとりメモ

# 背景
Svelteを勉強中です。なかなか面白いと感じましたが、親子関係にあるコンポーネントのデータ（＆イベント）やりとりが[公式サイトのガイド](https://svelte.technology/guide)を見てもピンと来なかったので、メモ。
# 動作環境
Node v7.4.0
svelte-cli version 1.3.4
svelte version 1.9.1
OS windows10 64bit
# まずは簡単なデータやりとり（プロパティ）から
ユーザー情報を親コンポーネントからeachで逐次受け取って表示するように連携させます。

```apps.html
{{#each users as user}}
    <UserProfile user={{user}} />
{{/each}}

<script>
	import UserProfile from './UserProfile.html';

	export default {
		components: {
			UserProfile
		},
		data(){
			return {
				users: [
					{name: 'test1', age : 30},
					{name: 'test2', age : 40},
					{name: 'test3', age : 50}
				]
			}
		}
					
	};
</script>
```
```UserProfile.html
<p>ユーザー名：{{user.name}}[{{user.age}}歳]</p>
```
```
// 結果

ユーザー名：test1[30歳]
ユーザー名：test2[40歳]
ユーザー名：test3[50歳]
```

上記のように、単なるプロパティの受け渡しは、コンポーネント呼び出しの際に`プロパティ名=値`の形式で書いておけば、子供のコンポーネントからは、そのまま`{{コンポーネント名}}`で受け取れます。先頭にpropsやoptsなどは必要ありません。

#子供で発生したイベントを親側で検知したい
次は、イベントのやりとりです。例として、googleの[Material Design Lite](https://getmdl.io/index.html)を利用した汎用コンポーネントを作成したいとします。例として、その中から[text field](https://getmdl.io/components/index.html#textfields-section)を取り上げます。
子供のコンポーネントは、サイトを参考にベタで書くと

```mdl-textfield.html
<div class="mdl-textfield mdl-js-textfield mdl-textfield--floating-label">
    <input class="mdl-textfield__input" type="text" name={{name}} id={{name}}>
    <label class="mdl-textfield__label" for={{name}}>{{label}}</label>
</div>
```

こんな感じでしょうか。プロパティとしてnameやlabelを受け取るようにしています。
ここで、inputに入力された情報を親コンポーネントに送りたい、とします。
その場合は、componentメソッドのうち、fireを利用します。

```mdl-textfield.html
<div class="mdl-textfield mdl-js-textfield mdl-textfield--floating-label">
    <input class="mdl-textfield__input" type="text" name={{name}} id={{name}}
    on:keyup="fire('changevalue', {val: event.target.value})">
    <label class="mdl-textfield__label" for={{name}}>{{label}}</label>
</div>
```
fireの第１引数は発火するイベント名を、第２引数では親コンポーネントに引き渡すデータ名をObject形式で記述します。ここでは例としてキーを１文字入力するたびにイベントを発火するようにしています。
こうしておくと、親コンポーネントは次のように書けます。

```apps.html
<MdlTextfield on:changevalue="update(event.val)" name="test" label="あなたの名前は？" />
<p>名前は{{val}}ですね</p>

<script>
  import MdlTextfield from './mdl-textfield.html';

  export default {
    components: {
      MdlTextfield
    },
    data(){
      return {
        val: ''
      }
    },
    methods: {
      update(val) {
        this.set({val: val})
      }
    }

  };
</script>
```
コンポーネント側では、子供が発火したイベント'changevalue'を受け取り、updateメソッドに渡しています。その際、親側のeventオブジェクトには、子供のオブジェクトが渡したデータ名でデータが入ってきます。（子供側で`{category: 'test'}`と渡すと、親は`event.category`で'test'が受け取れます)。

![capture.png](https://qiita-image-store.s3.amazonaws.com/0/26556/efc6df0c-1e82-df7e-bf98-e95085e2ee22.png)


#まとめ

これで親↔子供間でデータやりとりができます。
新しくサーバーを立た時用メモ

# ユーザーを追加する

```
useradd testuser
passwd testuser
```

追加したユーザーをsudu権限を持ったグループに追加

```
- gpasswd -a wheel testuser
+ usermod -aG wheel testuser
```


## wheelの設定を確認

コメントアウトを削除。

```diff
visudo

- #%wheel        ALL=(ALL)       ALL
+ %wheel        ALL=(ALL)       ALL
```
 
# SSHの設定を変更する

SSHのポートを変更して、rootユーザーでのログインを禁止。

```diff:/etc/ssh/sshd_config

- Port 22
- PermitRootLogin yes
- PasswordAuthentication yes

+ Port 2222
+ PermitRootLogin no
+ PasswordAuthentication no
```

再起動して設定を反映。

```
systemctl restart sshd
```

firewallから古いポート（22）の設定を削除。

```
sudo firewall-cmd --permanent --remove-service=ssh
```


# firewalldに設定を追加

元のファイルをコピー。

```
sudo cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/ssh-2222.xml
```
新しいポートを指定。

```diff:/etc/firewalld/services/ssh-2222.xml
-  <port protocol="tcp" port="22"/>
+  <port protocol="tcp" port="2222"/>
```

新しいポート設定をfirewallに追加。

```
sudo firewall-cmd --permanent --add-service=ssh-2222
```

追加した設定をfirewallに反映。

```
sudo firewall-cmd --reload
```

```
firewall-cmd --list-all

public (default, active)
  interfaces: eth0
  sources:
  services: dhcpv6-client ssh-2222
  ports:
  masquerade: no
  forward-ports:
  icmp-blocks:
  rich rules:
```

firewalldが自動で起動するようにする。

```
systemctl enable firewalld
```

# 秘密鍵を追加

```
su testuser
ssh-keygen -t rsa -b 4096 -C "email@example.com"
chmod 700 ~/.ssh
cd ~/.ssh
mv id_rsa.pub authorized_keys
chmod 600 authorized_keys
```

## 参考

- [CentOS7.1 SSH接続許可(rootユーザ)](http://qiita.com/ToraLin/items/ea1a7e28928d58e51e69)
- [CentOS7でSSHのポート番号を変更する](http://qiita.com/fk_2000/items/019b62818e34be973227)
Deployerでサブディレクトリをデプロイする


Laravelアプリケーションのデプロイに [deployer](https://deployer.org/) を使い始めました。deployerにはLaravel用のレシピがあるのですぐに始められました。キューワーカーの再起動も1行追加すれば動きます。

## サブディレクトリのデプロイができない

標準のdeployerはGitリポジトリのルートにアプリケーションが配置されていることが前提になっています。composer.jsonがルートに存在しないとエラーでデプロイできませんでした。
以下の構成のように webapp/ にアプリケーションを配置しているとき、deployerの標準設定ではエラーになります。

```
git@grohiro.github.com/myapp/
  webapp/ # ウェブ用のアプリ
    coposer.json
    app/
    ...
  api/ # API用のアプリ
    composer.json
    app/
  docs/ # 開発ドキュメントなど
    README.md
    ...
```
*myappの階層で`composer install`を実行してエラーになる。webapp/の下で実行したい。*


## release_path 変数を書き換える

deployerのワーキングディレクトリは変数 `release_path` で定義されています。composer コマンドもここで実行されるのでエラーになります。
では `release_path` を書き換えればいいじゃないかと考えるんですが、ここを書き換えるとGitリポジトリからcloneしてくるディレクトリも変わってしまうので別の箇所がエラーになります。

git cloneが正常に動くようにしたままサブディレクトリをデプロイするため、git cloneが実行されたあとに`release_path`を書き換えてしまいましょう。deplyerでは`after()`関数を使用します。

```php
// deployer.php
task('change_cwd', function () {
  $subdir = get('release_path') . DIRECTORY_SEPARATOR . 'webapp';
  set('release_path', $subdir);
  run('cd {{release_path}}');
});

after('deploy:update_code', 'change_cwd');
```

`deploy:update_code`タスクの後にディレクトリを変更することで`composer install`も動くようになりました。

## 参考

リポジトリに登録されているレシピは以下のようなものがあります(2017年6月)。

- CakePHP
- CodeIgniter
- FuelPHP
- Laravel
- Symfony
- Wordpress
- Yii

### リンク

- [deplyer](https://deployer.org/)
- [deployer Github](https://github.com/deployphp/deployer)
- [deplyerレシピ](https://github.com/deployphp/deployer/tree/master/recipe)
Inevitable ja Night インターネットの次に来るもの

# 概要
Google Cloud に代表されるクラウド技術の進化によって引き起こされるその先の世界を、機械学習、VR / AR、IoT などの領域で活躍されているスタートアップの方々と一緒に議論する。

# ディスカッション
Googleブログに文字起こしがあったのでリンク。

- [ディスカッション01](https://developers-jp.googleblog.com/2017/08/inevitable-ja-night-discussion01.html)
- [ディスカッション02](https://developers-jp.googleblog.com/2017/08/inevitable-ja-night-discussion02.html)
- [ディスカッション03](https://developers-jp.googleblog.com/2017/09/inevitable-ja-night-iotaivr03.html)

# IoTのこれから
- 製品レベルで一般に使えるものを出していく

# AIの未来
- AlphaGoが顕著な事例
- 「人間では理解できないがこちらの方がいい」ということがたくさん出てくる
- クラウドAI
- AIは中間レイヤーが必要

# コグニティブサービス
- 静止画の顔認識サービスを使うのは簡単
- ただ、動画で画像認識になるとコストがかかる
- アップロードにも時間がかかる → そこをどう解決する？
- 処理によって必要な回線を使い分けて、組み合わせてやる。

# データ量
- 転送量がどんどん増えていく
- 必要なデータの総量も増えていく
- 両方の方向性
 - 1本の線で扱える量を増やす
 - 多くのデバイスが繋げられる
- 通信回線はどんどん早く、安くなっている
- そういう流れは避けられない
- できるだけ使いやすく、手頃な値段で提供したい

# VR
- どんどんリアルになっていく
- 本質が伝えられるようになっている
- 出張・時差がしんどい
 - VRで自分の活動範囲を世界中に広げてほしい
- 人間がこれまでやってきた知見を集めていく作業が難しい
- すごい職人がいる
 - なぜかOK、なぜか駄目という独特な感覚
 - それをAI化
 - ただし、それを知らないというのは非常にまずい
 - 人間と機械双方が知っているハイブリッドな状態が理想
 - 事例：工場・工房の制作物の品質の見極め
- AIの視点で見るVR
- 職人芸のAI化
- InstaVR : クリエイター部門のAI化
- 観覧車を止める
 - 手で行っている職人芸（危険）
- ヘッドセットとモバイルの通信に5G
 - クラウド上で編集
 - 加工したり、クライアント側で処理して出す

# クラウド
- ぜひ使おう
- 大きなパブリッククラウドはどれも使いやすい
- もちろんGCPはおすすめ
- ダウンタイムの心配はない
 - 自社で持っていた方が危険


# 起業という選択について
- 2009年に起業→その頃ディープラーニングというキーワードで反応する人はゼロ
- 2013年あたりに注目され始めた
- スタートアップのExitについて
 - IPOで上場
 - 事業売却
- ソラコムに関して言うと通信プラットフォームの提供がミッション
 - IPOであれ、Exitであれ、グローバルプラットフォームを実現するためによりよい道を選ぶ
- エンジニアが入りたい起業がだんだん増えてきている
- どういったスタートアップに魅力を感じるか（買収したいと思うか）
 - テクノプレナー＝起業家精神を持った技術者。ある分野における高度な専門知識を活かしながら、革新的なビジネスを創出する人材。
 - テクノロジストだけだと儲からない。逆もそう。
 - 両方マッチしている企業がGoogle。
 - 希少価値がある
 - 省電力の広域通信が注目されている（LoRaWAN）
     - 非常に高いテクノロジーを持っている会社と提携して進めている

# まとめ
- パッションを追いかけてたら今みたいになった
 - みんなにも追いかけてほしい
- テクノロジーは止まらない（Inevitable）
- テクノロジーの進化からエンジニアは逃げられない
 - 目を見開いて、自分のパッションを活かしてほしい
- 少しでも多くの日本のエンジニアにそういう道を選んでほしい
- 色んなことに興味を持って、いろんなことに全力投球すると何か見つかる
- InstaVR: 楽したいから作った→割と大変
 - 特許とかも読むので無駄な道を踏まない
- できないのは訓練してないだけ。気にしないで起業してもらえれば。
- いろんなことがつながっていく。
- 継続した勉強を続けながら、技術で解決していく未来を。

# 関連リンク
- [Inevitable ja Night](https://cloudplatformonline.com/inevitable-ja-night.html)
MFクラウド給与からSmartHRの給与明細にインポートするためのCSVを変換するスクリプト

__[2017-08-04]__ このスクリプトを使う必要はもう無くなりました！本家同士が連携されました。めでたしめでたし！→ [クラウド人事労務ソフト「SmartHR」が「MFクラウド給与」との連携範囲を拡大 | SmartHR -【シェアNo.1】無料から使えるクラウド労務ソフト](https://smarthr.jp/release/8942)


## MF給与から給与明細CSVをダウンロードする

「帳票一覧」→「支給控除一覧表」→SmartHRにインポートしたい支給日を選ぶ→「表示項目設定」で「合計が0の項目」のチェックを外す→「CSV」ボタンを押してダウンロード。payment_deduction_report.csvという名前でダウンロードされる。

## SmartHR向けに変換する

```rb:convert.rb
require 'csv'

NOKOSU = %w(
  従業員コード
  課税支給合計
  非課税支給合計
  支給合計
  控除合計
  差引支給合計
)

csv = CSV.table('payment_deduction_report.csv', encoding: 'Shift_JIS:UTF-8', header_converters: nil)
csv.delete(-1) # 集計行を削除
csv.by_col!.delete_if do |c, v|
  !(NOKOSU.include?(c) || c.end_with?('(支給)') || c.end_with?('(控除)'))
end
puts csv.headers.map {|h| h.gsub /\((支給|控除)\)$/, '' }.to_csv
puts csv.to_s write_headers: false
```

`ruby convert.rb > smarthr.csv`を実行してファイルを作り、SmartHRにアップロードする。
HashMap内にHashMapがある場合のデータ取得方法メモ

個人的なメモとして

特に何もないHashMapの取得方法は以下だけど

```java:HashMapSample1.java
import java.io.*;
import java.util.*

public class Sample {
    public static void main(String[] args){
         HashMap<Integer, String> hashMap = new HashMap <>();
         for(int key : hashMap.KeySet()) {
             System.out.println(hashMap.getkey));
         }
     }
}
```

HashMap内にHashMapが合った場合の値の取得方法は以下

```java:HashMapSample2.java
import java.io.*;
import java.util.*

public class Sample {
    public static void main(String[] args){
         HashMap<Integer i, HashMap<String, String>> hashMap = new HashMap<>();
         for(int key : hashMap) {
             System.out.println(hashMap.get(key).get(target));
         }
     }
}
```
【質問です】railsのdeviseでメールを使わずパスワードリセットを行う方法

現在railsのバージョン4.2.5にて、deviseを用いて簡単なアプリケーションの開発をしているのですが、メールを使わずにパスワードをリセットをする必要が出てきました。
そこで、usersテーブルに秘密の質問とその答えのカラムを用意し、以下のような手順でパスワードリセットを作ろうと考えました。

①deviseのログイン画面にあるパスワードリセットのリンクを書き換えて、ここをクリックすると、全ユーザから自分の名前を選択する画面に移動。
②名前を選択すると、秘密の質問を選択するフォームと答えを入力するフォームの画面へ移動。
③質問と答えを送信し、それがあらかじめ登録しておいたものと同じ場合、パスワード変更の入力フォームとパスワード確認用のフォームを表示(無ければその旨を伝える文を表示)
④新しいパスワードを入力し送信すると、パスワードが変更されたことを伝え、ログイン画面に移動

今この中で③の条件分岐までは作れたのですが、パスワードを変更するフォームの作り方が分からない状況です。
そこで質問なのですが、まずそもそもdeviseにおいてメールを使わずにパスワードリセットを実装することは可能でしょうか？
またもし可能であれば、どのようにすればパスワードを変更する事が出来るでしょうか？
まだ初めて一か月程度で全然知識がない状況なので、難しいことだと分からないかもしれないですが、ご回答のほどよろしくお願いいたします。
Tensorflow API: tf.truncated_normal

https://www.tensorflow.org/api_docs/python/tf/truncated_normal

## 概要

±2σの切断正規分布からランダムに取り出したテンソルを生成する。

~~~
truncated_normal(
    shape,
    mean=0.0,
    stddev=1.0,
    dtype=tf.float32,
    seed=None,
    name=None
)
~~~

* shape: 戻り値のテンソルの次元 (1次元のintegerリストもしくはテンソルを指定）
* mean: 生成する切断正規分布の平均値
* stddev: 生成する切断正規分布の標準偏差
* dtype: 戻り値のテンソルの型
* seed: integerを指定すると、sessionが変わっても都度同じ値を抽出するようになる
* name: operationの名前

## 使用例

~~~python:ipython
import tensorflow as tf

x = tf.truncated_normal(shape=[2, 2], mean=0.0, stddev=1.0, dtype=tf.float32)
with tf.Session() as sess:
    x.eval()
~~~
雑に TensorBoard を起動する Docker イメージの作り方

いつも TensorFlow を使うときは GPU 環境[^aws-gpu]に NVIDIA Docker で TensorFlow コンテナを起動して学習させているが、Docker を使っていると TensorBoard を使いたい場合に別コンテナで起動する必要があって、そのやり方をメモとして書いておく。

TensorFlow のログの吐き方については書いていないので調べて欲しい。

[^aws-gpu]: [趣味でディープラーニングするための GPU 環境を安上がりに作る方法 - Qiita](http://qiita.com/hoto17296/items/16f57b319a0293bd2688)

## イメージを作る
[TensorFlow の公式 Docker イメージ](https://hub.docker.com/r/tensorflow/tensorflow/) をそのまま使っても良いんだけど、TensorBoard を使う分には必要ないものが色々入っていて重いので Python3.5 イメージから作る。

``` Dockerfile:Dockerfile
FROM python:3.5

RUN pip install tensorflow

WORKDIR /logs

ENTRYPOINT ["tensorboard", "--logdir", "/logs"]
CMD []
```

``` console
$ docker build . -t tensorboard
```

## イメージを起動する
いくつかオプションを指定して先程ビルドしたイメージを起動する。

- `-v` TensorFlow のログが吐かれるディレクトリをマウントする
- `-p` ホスト側に公開するポートを設定する

ちなみに TensorBoard を使うだけなら GPU は必要ないのでここは NVIDIA Docker で起動する必要はない。

``` console
$ docker run --rm -it -v <ログディレクトリ>:/logs -p 6006:6006 tensorboard
```

`CMD` ではなく `ENTRYPOINT` で TensorBoard を起動しているのでオプション追加もできる

``` console
$ docker run --rm -it -v <ログディレクトリ>:/logs -p 6006:6006 tensorboard --reload_interval 2
```

起動したら http://<ホスト>:6006/ で TensorBoard が見れると思う。
Surface Laptop Windows 10 Pro & 日本語化等

Amazon us で購入した Surface Laptop が 6/24 に届いたので、環境設定をメモしておきます。
6/15 販売開始で、7/5 着予定でしたが、予定よりかなり早く届きました。
Windows 10 Pro化 & 日本語化で、問題なく使えます。

# PC スペック

[Microsoft Surface Laptop (Intel Core i5, 8GB RAM, 256GB) - Burgundy](https://www.amazon.com/gp/product/B0716J3CYJ/ref=od_aui_detailpages00?ie=UTF8&th=1)

英語キーボード版が欲しくて購入。日本のストアでは、英語キーボード版を選択できません。
日本への配送料を含めても約16万円、日本版価格とそれほど違いはありませんでした。

# Windows 10S のセットアップ

英語版 Windows 10S の初期設定で、言語選択で日本語はありませんでした。
English(US), español(Mexico), français(Canada) 

とりあえず、English で進めます。

Windows 10Sは、ぱっと見では、通常の Windows 10 と同じように見えます。
ただ Windows 10S だと、開発環境には出来ませんのであまり触っていません。

# Windows 10 Pro に変更

2017/12/31 まで、無料で windows 10 pro に変更できます。

![switchWindows10Pro.png](https://qiita-image-store.s3.amazonaws.com/0/100572/b038f6c7-6354-ad9d-5a0e-d7186e5e43e3.png)

特にダウンロードすることも無く、切り替えが始まります。
Windows 10 Pro の機能も初めから組み込まれているようです。

# 日本語化

設定画面の language に日本語を追加して、option にある download and install language pack と IME をインストール後に、OSリスタートします。

最初 option 指定せずに、リスタートしたところ、日本語表示されませんでした。
日本語化してしまうと、通常の windows 10 日本語版と変わりません。

# 開発環境

Windows オプション設定

- Bash on Ubunts on Windows 
- Hyper-V (Docker of windows用)

とりあえず、入れたもの。

- Google chrome
- git
- Sublime Text3
- Docker of Windows
- Visual Studio Community 2017
 
# Surface Laptop レビュー

普通のラップトップPCとして、問題なく使えます。
デザインは、結構高級感もあり、気に入っています。
アルカンターラ素材は、ほこりが付きやすいか気になっていましたが、手ではらえるので気になりません。
大きさは、私が持っている ThinkPad E470 14インチと MacBook 12インチの中間ぐらいで使いやすいサイズ。
重さは 約1.2kg で、持つと見た目通りの重量感。

解像度が、2256 x 1504 ですが、スケーリング 150% 表示推奨だと、文字サイズも適正です。
タッチスクリーンが使えますが、PCとしてはあまり使わないかも。

キーボードは、見た目通りのプラスチック感触。
PageUp, PageDown のキーが Functionキーのところに配置されているのが少し使いにくい。
慣れれば問題ないと思います。

電源コードは、かなり柔らかく、電源本体もコンパクト。
PCに取り付ける部分は、磁石でくっつくしくみで、向きは手前方向と奥方向のどちらでもOK。

起動時にファンの音が少し気になりますが、落ち着くと静か。
パフォーマンスは、i5 相応のもので、問題なし。
メモリが 8G で、もう少し余裕が欲しいですが、 値段で妥協した結果なのでしょうがないですね。