OmniAICreator/Qiita-1.07M huggingface dataset:
Touch Bar搭載Mac Book Proでハマったこと-外部ディスプレイ編-

USB-Cで外部ディスプレイをつなげようとして、ハマりました。
### Cinema Displayがつかえない
[Apple純正のコネクタ](http://www.apple.com/jp/shop/product/MMEL2AM/A/thunderbolt-3usb-c-thunderbolt-2%E3%82%A2%E3%83%80%E3%83%97%E3%82%BF?fnode=8b)でつなげば映ると思っていたんですが、Cinema Display側がThunderboltに対応していないらしく、接続しても映りませんでした。
[Appleのページ](https://support.apple.com/ja-jp/HT207266)に詳細な説明が書いてあります。

Mini DisplayportしかないCinema Displayは対応していないのだそう。
Thunderbolt Displayなら映るようです。
Appleは自分で自分の製品を平気で切ってくるから怖い…

### Apple Storeに駆け込んでみた
近所のApple StoreでCinema DisplayとMac Book Proを接続できないか聞いてみました。
すると[上記のApple純正コネクタ](http://www.apple.com/jp/shop/product/MMEL2AM/A/thunderbolt-3usb-c-thunderbolt-2%E3%82%A2%E3%83%80%E3%83%97%E3%82%BF?fnode=8b)を差し出されました。
嫌な予感がしましたが、純正コネクタで映らなかったこととCinema Displayとつなぎたいことを伝えると、「新型Mac Book ProはMini Display portには対応していません」とのことでした…

### 一縷の望みをかけて純正品ではないコネクタで試してみた
[マーサリンクのUSB C - Mini DisplayPort 変換アダプタ](http://item.rakuten.co.jp/mahsalink/10000051?scid=me_ich_conf_order_03&_mpt=101&_mpe=318864-20161227-0745362258) これを買って試しに接続したらなんと映りました。

Apple Storeの店員さんに伝えたい。
javascriptで数字を２桁で表示する方法

時刻表示に時に少し詰まったのでメモ

```
1 => 01
0 => 00
```
みたいな感じ

### 数字を常に２桁で表示にする関数

```js
getdoubleDigestNumer(number) {
  return ("0" + number).slice(-2)
}
```

`String.prototype.slice()`を使ったらすごいシンプルにかけた。
最初は↓のような関数を定義してました...

```js
const getdoubleSecond = (second) => {
  if (second < 10) {
    const {doubleSecond} = '0' + {second}
    return {doubleSecond}
  } else {
    return {second}
  }
}
```

### String.prototype.slice()

`String.prototype.slice()`は文字列の一部を取りだしてくれるメソッドで

１つ目の引数は取り出す文字列の始点
２つ目は終点です。
ただし、二つとも0から始まるインデックスです。

```js
var numer = "123456789"

//4文字目からを取り出す
numer.slice(3)
=> "456789"

// 下3文字目から取り出す
numer.slice(-3)
=> "789"

// ３文字目まで取り出す
numer.slice(0,3)
"123"

// 下三文字目まで取り出す
numer.slice(0,-3)
"123456"

// 2文字目から7文字目まで取り出す
numer.slice(2,7)
"34567"
```

すごい便利ですね。
果たして「下○文字目」という日本語はあるのろうか(数字でいいう「
下○桁」という意味です。)

#### 参考

https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/String/slice
Atomのフォント変更は"Fonts"を使おう

RPGとかCOBOLのソースを分析することになりました。
ソースを閲覧しつつ、分析用のshell scriptを書きたいと思ったのでATOMを使うことにしました。

RPGやCOBOLは桁位置が重要な意味を持ちますので、等幅フォントにしたいと思い色々調べましたがうまくいきません。settingやconfigの内容がうまく反映されないのです。
（うまくいかない原因を調べるのはあきらめました・・・。）

その名も"fonts"というパッケージを使ったらうまくいきました。
https://atom.io/packages/fonts

主要なフォントはバンドルされています。私は"Source Code Pro"というフォントを使用しました。
サーバーにユーザーを追加する時にたまーーーーーーに使うスクリプトを置いておく

## 基本的にこんなスクリプトを使う時代じゃぁありませんが、、、
AWS とか使うようになってから、ユーザーを追加するなんて事は基本していないですけど、
前から使ってる VPS でうんちゃらする必要が出て他の人を追加したするようにスクリプトを書いたので備忘録として。
sudo 権限が必要なうろ覚えのコマンドを直打ちするのは怖すぎるので、スクリプトを書いておくと安心。

```bash:createuser.sh
#!/bin/bash -e

usage() {
        echo "$0 <user> [group]"
}

if [ $# -lt 1 ]; then
        usage
        exit 1
fi

readonly user=$1
readonly group=${2:-$user}

echo "# User information #"
echo "user: $user"
echo "group: $group"
echo -n "Are you sure to make this user? [y/N] "
read yn

case $yn in
        y|Y|yes|Yes|YES) ;;
        *) echo "Aborting..." && exit 2 ;;
esac

goption="-g $group"
if [ "$user" == "$group" ]; then
        goption="--user-group"
fi

echo "# Command information #"
echo "Here is the command to run. Are you really sure to continue?"
echo "useradd --create-home $goption $user"
echo -n "[y/N] "
read yn

case $yn in
        y|Y|yes|Yes|YES) ;;
        *) echo "Aborting..." && exit 2 ;;
esac

useradd --create-home $goption $user
```

```bash:grant.sh
#!/bin/bash

usage() {
        echo "$0 <user>"
}

if [ $# -lt 1 ]; then
        usage
        exit 1
fi

user=$1
echo "# User information #"
echo "user: $user"
echo -n "Are you sure to grant wheel permission to this account? [y/N]"
read yn

case $yn in
        y|Y|yes|Yes|YES) ;;
        *) echo "Aborting..." && exit 2 ;;
esac

usermod --append --groups wheel $user
```

ええ、そうです。CentOS です。なにか？

```bash:sshkey.sh
#!/bin/bash -e

usage() {
        local u=${1:-<user>}
        local pk=${2:-<public-key>}
        echo "This script assume your home directory is /home/$u"
        echo "$0 $u \"$pk\""
        echo "NOTE: You need to quote your public key"
}

if [ $# -lt 2 ]; then
        usage $@
        exit 1
fi

user=$1
publickey=$2
echo "# User information #"
echo "user: $user"
echo -n "Are you sure to set public key to this user? [y/N] "
read yn

case $yn in
        y|Y|yes|Yes|YES) ;;
        *) echo "Aborting..." && exit 2 ;;
esac

readonly sshdir=/home/$user/.ssh
if [ ! -d $sshdir ]; then
        echo "Making directory"
        mkdir $sshdir
        chown -R $user $sshdir
fi

readonly authfile=$sshdir/authorized_keys
touch $authfile
chmod 600 $authfile
chown -R $user $sshdir

echo "Installing public key to auth file: $authfile"
echo $publickey >>$authfile
echo "This is an installed key: $publickey"
```
rental server ことはじめ


# まえがき

あけましておめでとうございます。
年が明けたので [XREA](https://www.xrea.com/) でレンタルサーバーを借りたのですが、何しろ初心者なので右も左もわからず、てんぱりまくっております。この投稿は、自分がやったことについての記録で、あとから見返して勉強できるようにするためのものです。作業をするごとに更新していく予定です。

# Day1

## レン鯖じゃ

[XREA](https://www.xrea.com/)でサーバをお借りいたしました。
説明がわかりやすくて、鯖を借りてSSHログインするところまですんなり～。


## は？rbash？bashに変更じゃ[^1]

ログインしてからが辛かった、、
rbashって何？なんで `cd`出来ないの？
というわけで、bashにしませう。
ちなみに、zshは駄目らしい

```
chsh
```

して、しばらくすると

```
Enter the new value, or press returen for the default.
Login Shell [/bin/rbash]: 
```

と聞かれるので、すかさず

```
/bin/bash
```

と入力。

## gitを~~入れる~~ 入れたつもりになる[^2]

**入れたつもりになっていただけで、入っていませんでした！！Day2&3でちゃんと入れ直しましたのでそちらをどうぞ**

>gitが入ってないし、そもそもOSが分からんからyumもaptも出来ない！！
>ソースからコンパイルじゃ！
>
>1. local/srcをつくり、そこに移動
>1. gitのソースを引っ張ってくる
>
>```
> wget --no-check-certificate https://www.kernel.org/pub/software/scm/git/git-2.11.0.tar.gz
>```
>
>1. 展開ともろもろ
>
>```
>tar gz zxf git-2.11.0.tar.gz
>cd git-2.11.0/
>```
>
>1. コンパイル&インストール
>
>```
>./configure --prefix=$HOME/local
>gmake
>gmake test
>gmake install
>```
>
>最後に`git version`とか叩いて入ってることが確認できればOK

# Day 2 & Day 3

Day1で頑張ってgitを入れた **つもり** になっていました。そのあといろいろとエラーが出てしまい、2.3日目は必死で直していましたｗ
ということで、その記録は[こちら](http://qiita.com/chari/items/2f327eabe0b9bda124ca)

# Day 4

VIM8.0をソースからluaでビルドするなどしました。まだ記事にできていません！！

# **更新記録**

Markdownを書くのにkobitoを使用しているのですが、kobitoから直接Qiitaに投稿すると更新コメントがつけられないので、ここに書きます。

1. 1月4日　記事の投稿
1. 1月8日　Day1の内容の訂正、Day2~4の追加、　更新記録の追加 細部の修正

# 参考資料＆注釈

[^1]: [rbashからbashへの変更に関する参考サイト](http://www.moteblog4u.com/rbash%E3%82%92chsh%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%81%A7bash%E3%81%AB%E5%A4%89%E6%9B%B4%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95.html)
[^2]: [gitインストールに関する参考サイト](http://wiki.exatto.org/index.php?Prog%2FGit%2FSetupXrea#c26b390e)
ClassとInstanceについて

Classとは、設計図のようなもの。そこに必要な情報（関数など）が記述されている。
ここで大切なことは、クラス自体は（コード上で直接）使用しないということ。

クラスのインスタンスとは、前述のクラスを「init関数」によって初期化したもの。（もう一つのクラス）
()を記述することで、そのインスタンスから（実際の）クラスへアクセスできる。そして、クラス内の関数を使うことができる。
インスタンスは、実際にコード上で使用するもの。

クラスを設計図以外で例えると、「クッキーを作る型」と言える。実際に食べるのは、「型」ではなく「クッキー自体」であり、
この「クッキー自体」をインスタンスと表現できる。また、クッキーの型は一つだが、それを用いて多くの「クッキー」を作る行為も、
同様である。必要に応じて型から作られた「クッキー」を用いて、「食べる」「デコレーションする」「好きな人にプレゼントする」など実行する。
『UNIXという考え方』を読んで，覚えておきたいと思った5つのこと

# はじめに
[UNIXという考え方―その設計思想と哲学](https://www.amazon.co.jp/UNIX%E3%81%A8%E3%81%84%E3%81%86%E8%80%83%E3%81%88%E6%96%B9%E2%80%95%E3%81%9D%E3%81%AE%E8%A8%AD%E8%A8%88%E6%80%9D%E6%83%B3%E3%81%A8%E5%93%B2%E5%AD%A6-Mike-Gancarz/dp/4274064069)という本を読んで，
今後に活かせそうだと感じた点をまとめてみました．:writing_hand: 

# その①：Small is beautiful (定理1より)
* 大きな何かよりも小さい何かの方が，人間にはわかりやすいし，理解しやすい  
* 当然，保守も容易で結果的に費用対効果が大きくなる
* システムリソースを小さく
* 他のツールと簡単に結合・再利用できる

# その②：1つのプログラムには1つのことをうまくやらせる (定理2より)
* やるべきことの本質を理解できているはず．このプログラムが書けないならば，それは理解できていないということ
* 小さくするには，目的を絞る必要がある
* 1つのプログラムで1つの問題を解決

# その③：できるだけ早く試作を作成する (定理3より)
* アイデアがものになりそうかどうが，目に見える現実的な場面でテストするには試作が一番．試作以前のアイデアは憶測の域をでない．
* 完璧を待ちすべてが遅れてからやるより，まだ万事が流動的な初期段階から変更する方が良いにきまっている
* 試作を作ってみれば，何がうまくいくか？そしてより重要なことに，何がうまういかないかがわかる
* 試作は，1つのことだけ行う小さなプログラムを使い，徐々に進めていくといい．何かの機能が必要になるたびにそれを小さなプログラムとして追加していけばいい

# その④：効率より移植性 (定理4より)
* ソフトウェアは作るものではなく，成長していくもの
* 新しいアーキテクチャを採用できるよう，試作では効率よりも移植性を優先させる．結果，移植できるものは生き残る

# その⑤：ソフトウェアの梃子を有効活用する (定理6より)
* よいプログラマは良いコードを書く．偉大なプログラマは良いコードを借りてくる．
* コードを他社が梃子として使うことを認める
* すべてを自動化する
* プログラマの仕事の結果は，誰のどのような仕事であれ，複利計算で増大し，大きな梃子の効果を発生させる
* 梃子の効果を最大限に発揮するためにも，独自技術症候群を絶対に避ける
* 誰かがすでにやっていることを改めてやり直すのは，時間の無駄
* 今日，世界に尊大するソフトウェアは偉大な共有資産．種をまくだけでなく，実った稲穂は刈り取ろう．もちろん合法的な方法で

# メモ：UNIXの考え方の定理
定理1：Small is beautiful
定理2：1つのプログラムには1つのことをうまくやらせる
定理3：できるだけ早く試作を作成する
定理4：効率より移植性
定理5：すべてのファイルはASCll形式で保存する
定理6：ソフトウェアの梃子を有効活用する
定理7：シェルスクリプトを使うことで梃子の効果と移植性を高める
定理8：過度の対話的インタフェースを避ける
定理9：すべてのプログラムをフィルタにする
【Auto Layout】制約のアウトレット接続【Xcode8.x】

実は制約も部品のようにアウトレット接続が可能なのです。自分的メモなのでザックリ掲載。

### 制約をコードから操作するシンプルなデモ
黄色いラベルの横サイズとスーバービューとの上マージンを操作しています。緑のLabelには黄色いLabelとのマージンとEqual Bottomが指定されているので黄色いラベルの移動に伴って一緒に移動します。
![demo.gif](https://qiita-image-store.s3.amazonaws.com/0/151314/f9a6d915-f6d7-121c-7bc6-bf1e39499273.gif)

ViewController.swift

```swift

//
//  ViewController.swift
//  Constraint
//

import UIKit

class ViewController: UIViewController {
    
    
    var toggle1:Bool = true
    var toggle2:Bool = true
    var toggle3:Bool = true
    
    @IBOutlet weak var label1:UILabel!
    
    @IBOutlet var constraintLabelWidth:NSLayoutConstraint!
    @IBOutlet var constraintLabelTopMargin:NSLayoutConstraint!
    
    @IBAction func changeConstraint(_ sender:UIButton){
        
        toggle1 = toggle1 ? false : true
        let value:CGFloat = toggle1 ? 100 : -100
        
        constraintLabelWidth.constant += value
        
    }
    
    @IBAction func changeConstraintWithAnimation(_ sender:UIButton){
        
        toggle2 = toggle2 ? false : true
        let value:CGFloat = toggle2 ? 100 : -100
        
        self.view.removeConstraint(constraintLabelWidth)
        constraintLabelWidth.constant += value
        label1.addConstraint(constraintLabelWidth)
        UIView.animate(
            withDuration: 1.0,
            delay:0.5,
            options:UIViewAnimationOptions.curveEaseOut,
            animations: {() -> Void in
                self.view.layoutIfNeeded()
            },
            completion: nil
        )
    }
    
    @IBAction func changeConstraintTopMarginWithAnimation(_ sender:UIButton){
        
        toggle3 = toggle3 ? false : true
        let value:CGFloat = toggle3 ? 100 : -100
        
        self.view.removeConstraint(constraintLabelTopMargin)
        constraintLabelTopMargin.constant += value
        view.addConstraint(constraintLabelTopMargin)
        UIView.animate(
            withDuration: 0.5,
            delay:0.0,
            options:UIViewAnimationOptions.curveEaseOut,
            animations: {() -> Void in
                self.view.layoutIfNeeded()
            },
            completion: nil
        )
    }
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }
    
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
    
    
}


```

アウトレット・アクション接続
<img width="2145" alt="4.png" src="https://qiita-image-store.s3.amazonaws.com/0/151314/96678aa1-2407-30ab-e89a-d0e72456457f.png">
hack　色々 メモ

#■safari
/* Safari 9.0+ (non-iOS) */

```

_:-webkit-full-screen:not(:root:root), body {
    .navFixed {
        right: 60px;
    }
}

```

/* Safari 9.0+ */

```

_::-webkit-:not(:root:root), body {
    .navFixed {
        right: 60px;
    }
}

```

だったかな？



#■firefox
```
@-moz-document url-prefix() {
    .m-modal__table--ffff td.company {
        width: 649px !important;
    }
}
```

#■IE
/* IE9,8 */

```
.m-modal__table--aaaa th.company {
    width: 465px\9 !important;
}
```

/* IE10以降に適用される, Edge */

```
@media all and (-ms-high-contrast:none)
{
    .m-modal__table--aaaa th.company {
        width: 465px !important;
    }
}
```

/* Edgeだけに適用する */

```
    @supports (-ms-ime-align:auto) {
        .header--lower .gnav__list {
            top: 58px !important;
        }
    }
    @supports (-ms-accelerator:true) {
        .header--lower .gnav__list {
            top: 58px !important;
        }
    }
```




#■IE8でnth-child(*)使いたい
```
.thumb__list--2 {
    position: absolute;
    top: 0;
    right: 0;
    ul {
        position: relative;
        li {
            position: absolute;
            &:nth-child(1) {
                top: 30px;
                right: 190px;
            }
            &:nth-child(2) {
                top: 190px;
                right: 210px;
            }
            &:nth-child(3) {
                top: 190px;
                right: 30px;
            }
            &:nth-child(4) {
                top: 300px;
                right: 180px;
            }
        }
    }
}
```

/* IE 8 hack */

```
.thumb__list--2 {
    ul {
        > *:first-child {
            top: 30px;
            right: 190px;
            & + * {
                top: 190px;
                right: 210px;
            }
            & + * + * {
                top: 190px;
                right: 30px;
            }
            & + * + * + * {
                top: 300px;
                right: 180px;
            }
        }
    }
}
```

#■window(os)のchrome(ブラウザ)とか

https://github.com/rafaelp/css_browser_selector

<script src="../script/css_browser_selector.js" type="text/javascript"></script>

```
.win {
    &.chrome {
        .schedule--07 {
            .checkpoint--second {
                &-03 {
                    .checkpoint_arrow {
                        top: 50px !important;
                    }
                }
            }
        }
    }
}
```

▼その他
.mac .chrome p {
    color:black;
}
.win .chrome p {
    color:white;
}
Linux service関連　基本コマンドメモ

Ubuntu 14.04 やCentOS等の
/etc/init.d　配下にサービスの起動に関わる
スクリプトがまとめられています。
基本的な内容ですが覚えておくのは必須と言えるでしょう
備忘録として書いておいて困るものでもありませんので
メモしておきます。


例えばhttpdサービス（デーモン）の状態を知りたいときには以下のようにします。
/etc/init.d以下のスクリプトを直接実行で同じ処理

##CentOSのバージョン
[root@mysql ~]# cat /etc/redhat-release
CentOS release 6.7 (Final)


##1.スクリプトパス直接指定
```
[root@mysql ~]# /etc/init.d/httpd status
httpd (pid  2202) is running...
```

##2.service コマンドから状態確認
```
[root@mysql ~]# service httpd status
httpd (pid  2202) is running...
```

##3.サービス起動

```
[root@mysql ~]# service httpd start
                                                           [  OK  ]
```

##4.サービス再起動

```
[root@mysql ~]# service httpd restart
Stopping httpd:                                            [  OK  ]
Starting httpd:
                                                           [  OK  ]


```

##5.サービス停止

```
[root@mysql ~]# service httpd stop
Stopping httpd:                                            [  OK  ]
```

##6.全サービス状態表示
--status-allオプションつけてgrepすると
名前があやふやなサービスも抽出出来ます

```
[root@mysql ~]# service --status-all | grep rpc
rpc.svcgssd is stopped
rpc.mountd is stopped
rpc.rquotad is stopped
rpc.statd (pid  1801) is running...
grep: /proc/fs/nfsd/portlist: No such file or directory
rpcbind (pid  1731) is running...
rpc.gssd is stopped
rpc.idmapd is stopped
rpc.svcgssd is stopped
```

##7.chconfigで起動時の設定確認

各ランレベルで初期起動されるサービスの設定はchkconfig [サービス名]　--listで確認出来ます。

```
[root@mysql ~]# chkconfig httpd --list
httpd          	0:off	1:off	2:on	3:on	4:on	5:on	6:off
```

##8.初期設定のOn/off
chkconfig でランレベル指定して初期起動のon/offが出来ます。

```
[root@mysql ~]# chkconfig --level 5 httpd on
[root@mysql ~]# chkconfig httpd --list
httpd          	0:off	1:off	2:on	3:on	4:on	5:on	6:off
```

ちなみにランレベルを指定しないと現在起動しているランレベルの
初期設定がon/offされるようです。
下記はrunlevel5で起動した後実行

```
[root@mysql ~]# chkconfig httpd off
[root@mysql ~]# chkconfig httpd --list
httpd          	0:off	1:off	2:off	3:off	4:off	5:off	6:off
[root@mysql ~]# chkconfig httpd on
[root@mysql ~]# chkconfig httpd --list
httpd          	0:off	1:off	2:on	3:on	4:on	5:on	6:off
```



#参考ページ
[serviceコマンドでサービス（デーモン）のステータスを確認する](http://itpro.nikkeibp.co.jp/article/COLUMN/20070605/273736/)
C#とCoreTweetを使ってあけましておめでとうを自動でツイートさせてみた

#はじめに
あけましておめでとうございます。
今年もよろしくお願いします。

今回は新年ということで、CoreTweetという簡単にTwitterAPIをC#から扱えるライブラリを用いて、年が変わる瞬間に自動でツイートさせてみました。
#実際に書いていく
以下のように実装してみました。

```C#:code.cs
using System;
using CoreTweet;


class Program
{
        static void Main(string[] args)
        {
            Tokens tokens = Tokens.Create("consumer key", "consumer secret", "access token", "access token secret");

            for (;;)
            {
                if (DateTime.Now.Hour == 0 && DateTime.Now.Minute == 0 && DateTime.Now.Second == 0)
                {
                    tokens.Statuses.Update(status => "あけおめ！！！");
                    break;
                }
            }
        }
}
```

DateTimeをつかって現在時間を取得してツイートさせてみました。
若干のタイムラグが発生してしまうのでそこは調節が必要です。
自分はこれでツイートさせてみたのですがなんと去年の23:59分にツイートされてしまいました...
来年はリベンジしたいです。
Cognos BI レポート参照時のプロンプト選択を監査する方法

Cognos BIで、誰が、いつ、どのレポートを実行したかをログしておく、監査機能があります。

この監査情報は、通常はレポート実行時に、レポートの名称はログされますが、レポートの中のプロンプトで、どのような条件選択をしたかを取得する事はできませんが、以下の手順によりプロンプトの選択内容も監査ログに含める事ができます。

監査の要件で、プロンプトの選択内容も含めたいという要件のプロジェクトで、是非ご活用下さい。

##手順

※監査DBはDB2での手順です。

**まずは普通に、DBに監査ログを指定します。**
![003.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/65131671-1281-aded-ba21-4e8f88b1d126.png)

**ログ出力レベルは全て「標準」にしています。**
![004.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/8fa24e85-4acf-ee20-3d78-374556954e49.png)

**ReportServiceの詳細に　パラメーター RSVP.PARAMETERS.LOG　値 true　を設定します。**
![005.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/fc3c19c4-67a0-b4c4-e7b0-44d1828cd8a8.png)

**Logging Selected Report Parameters in the Audit DB**
https://www-01.ibm.com/support/docview.wss?uid=swg21706083

**プロンプトを含むレポートを実行すると、
COGIPF_PARAMETER表のCOGIPF_PARAMETER_VALUE_BLOB列に以下のような出力がされます。**
※「ゴルフ用品」というプロンプト選択をした場合

\<parameterValues xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:bus="http://developer.cognos.com/schemas/bibus/3/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema" xsi:type="SOAP-ENC:Array" SOAP-ENC:arrayType="bus:parameterValue[1]">
\<item xsi:type="bus:parameterValue">
\<bus:name xsi:type="xs:string">pPL\</bus:name>
\<bus:value xsi:type="SOAP-ENC:Array" SOAP-ENC:arrayType="bus:parmValueItem[1]">
\<item xsi:type="bus:simpleParmValueItem">
\<bus:inclusive xsi:type="xs:boolean">true\</bus:inclusive>
\<bus:display xsi:type="xs:string">ゴルフ用品\</bus:display>
\<bus:use xsi:type="xs:string">ゴルフ用品\</bus:use>
\</item>
\</bus:value>
\</item>
\</parameterValues>

**Framework ManagerでCOGIPF_PARAMETER表を参照する「クエリー・サブジェクト」をデータ・ソースタイプで作成します。**
![002.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/5f8b1536-5e68-6b47-f222-e9065f5e158d.png)

**SQLの記載は以下にします。**

select 
COGIPF_LOCALTIMESTAMP,
COGIPF_SESSIONID,
COGIPF_REQUESTID,
COGIPF_SUBREQUESTID,
COGIPF_STEPID,
COGIPF_OPERATION,
COGIPF_TARGET_TYPE,
COGIPF_PARAMETER_NAME,
COGIPF_PARAMETER_VALUE,
XMLCAST(XMLQUERY('declare namespace bus="http://developer.cognos.com/schemas/bibus/3/"; $c/parameterValues/item/bus:value/item/bus:display' passing XMLPARSE(document COGIPF_PARAMETER.COGIPF_PARAMETER_VALUE_BLOB) as "c") as varchar(40)) as PARAMETER 
from 
COGIPF_PARAMETER

**SQLタイプを「ネイティブ」に指定します。**
![006.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/609042c8-93c0-487d-469b-6e23f38d16c0.png)

##結果
プロンプト入りのレポートを何個か実行した時の、このクエリー・サブジェクトの出力結果です。
赤枠は、互換モードのパッケージで、プロンプトページ付きで単数選択の場合
青枠は、互換モードのパッケージで、レポートページ内に自動送信プロンプトを配置し単数選択の場合
緑枠は、互換モードのパッケージで、プロンプトページ付きで複数選択の場合
ピンク枠は、動的モードでプロンプトページ付きで複数選択の場合
となります。
![001.PNG](https://qiita-image-store.s3.amazonaws.com/0/147246/a792910f-7438-1460-0787-dd177e6a7e49.png)

後はFramework Manager内で適宜リレーションを定義しておけば、自由にプロンプト値を取り出す事ができますので、是非ご活用下さい。
Nightwatch.jsでページのelementsをデバイス毎に切り替える

# Background / Issue

弊社では，PC・スマホ・タブレットサイトといったデバイス毎のEnd to End UIテストを自動化しています。

Nightwatch.jsを使ってPage Objectパターンで実装しているのですが，
デバイス毎にページHTMLが異なる場合に，デバイス数 × ページ数のページファイルを作成する必要がでてきました。

Page Objectパターンでは，シナリオとページを分離することでテストコードをシンプルにすることができるのですが，
Nighwatch.js((v0.9.11))のPage Object機能はデバイス別ページの概念が無いため，デバイス毎にページを切り替えるしくみがありません。
単純に対応するとすると，下記のようにデバイス別のファイルが大量に作られカオスになること必死です。

* pages/
  * top-mobile.js
  * top-tablet.js
  * login-mobile.js
  * login-tablet.js

# Solution
まず，デバイス毎にシナリオは変わらないので，Page Objectパターンを利用しつつ，ページ内で完結する方法を考えました。
デバイス毎による差異はページ側で吸収させたいので，デバイス毎のelementsを各ページ内で定義し，オブジェクト生成時にelementsを生成するビルダーを作って対応しました。

* [element-builder.js on Gist](https://gist.github.com/oikwsat/43e34aba9f792eded17010a76ec79fbe)
  * **どのデバイスのelementsを生成するかは，タスクランナー(Gulp)でprocess.env.DEVICEを定義しておく**
  * デバイス毎のelementsの差異があるページのみで使えばよく，element-builderは必須ではない
  * mobile と tablet の2種類のデバイスを想定して実装

# Usage
1 pageファイルで element-builder をrequireします

```
const builder = require('../utils/elements-builder');
```

2 elementsを定義します

```
const elements = {
  link: {
    mobile: 'div.mobile > a',
    tablet: 'div.tablet > a'
  }
};
```

3 pageファイルのelementsにビルダーをセットします

```
elements: builder.build(elements),
```

4 完成ページサンプル

```
const builder = require('../utils/elements-builder');

const elements = {
  link: {
    mobile: 'div.mobile > a',
    tablet: 'div.tablet > a'
  }
};

module.exports = {
  url: function() {
    return this.api.launchUrl + '/login';
  },
  elements: builder.build(elements)
};
```

# Appendix
* [Nightwatch Developer Guide # Working with Page Objects](http://nightwatchjs.org/guide#page-objects)
* [element-builder.js on Gist](https://gist.github.com/oikwsat/43e34aba9f792eded17010a76ec79fbe)
スライサー（FDM式３Ｄプリンタ向け）の作成　其の９（インフィルアルゴリズム）

* [スライサー（FDM式３Ｄプリンタ向け）の作成　目次](http://qiita.com/isTwt/items/5d40286eec73296ea790)

-----

# １．はじめに
　今回は、[其の７](http://qiita.com/isTwt/items/129ee9d06d79ee38d871)，[其の８](http://qiita.com/isTwt/items/9a0703a4fa27bbcc7379)で求めたスライス面（閉領域），閉領域の縮小領域（インフィルの領域）から出力結果（インフィル）となる要素を求めていきます。

# 2．求めるもの
　現状本ソフトでは、１種類のインフィル形状になります。（Simplify3Dで[Infill]タブのInternal Fill PatternをRectilinear指定した場合と同等になるはずです。
　今回のインフィルもそうですが、基本的には一筆書きの線（パス，ルート，経路）を求める方が印刷結果が良くなります。（これについては別途記載するかもしれません）
　インフィルは以下の様になります。（パラメータとしては45度/-45度）

三角形状の場合
![tra.JPG](https://qiita-image-store.s3.amazonaws.com/0/157557/a40109b5-118f-3fe4-b1a3-9b8f6a8e5119.jpeg)

四角形状の場合
![sq.JPG](https://qiita-image-store.s3.amazonaws.com/0/157557/de6a4aaf-7a0e-de81-a4a1-c12e229f4c05.jpeg)

# ３．基本的な考え方
　求めるもので示した様な四角形状の場合を例に説明します。

1. まずは其の８で説明した閉領域の縮小を繰り返し、インフィルとなる閉領域を求めます。
![a1.JPG](https://qiita-image-store.s3.amazonaws.com/0/157557/c39b2b23-e0fc-2005-0001-4e18012461fd.jpeg)

1. この閉領域のある点をスタート地点とします。（右上に上がる斜め線の場合は左下の点，左上に上がる斜め線の場合右下の点が良いと考えます。）
![a2.JPG](https://qiita-image-store.s3.amazonaws.com/0/157557/ec52e1aa-93bd-6bf2-9104-e48a6b392b48.jpeg)

1. 次にインフィルの網目となる斜線部分をパラメータの角度から生成します。（紫色がイメージ。ここでは、S地点を通過する斜線のみ）
![a3.JPG](https://qiita-image-store.s3.amazonaws.com/0/157557/dee00bda-264a-354e-5e47-90e348d97165.jpeg)

1. まず、斜線を１ステップ（今回は）右へ移動させます。そして、スタート地点から、L1と交差する斜線部分までの線を経路登録します。
![a4.JPG](https://qiita-image-store.s3.amazonaws.com/0/157557/43927be0-bb44-7611-c6f0-fc5d4ea177c3.jpeg)

1. 次に、斜線部分をそのまま経路とします。（終点はL4との交差まで）
![a5.JPG](https://qiita-image-store.s3.amazonaws.com/0/157557/b1ed00cf-1a5e-a2f2-1fe3-29d1de2eecd9.jpeg)

1. 斜線を１ステップ（今回は）右へ移動させます。そして、斜線部分とL4が交差する点までを経路とします。
![a6.JPG](https://qiita-image-store.s3.amazonaws.com/0/157557/f1014604-7ab7-4716-1f09-aa9b184abc80.jpeg)

1. 次に、斜線部分をそのまま経路とします。（終点はL1との交差まで）
![a7.JPG](https://qiita-image-store.s3.amazonaws.com/0/157557/0a8211a3-857f-dc5e-2d37-0ce62c2631ea.jpeg)

　以降は、開始地点からと同じ要領(4~)で繰り返しです。

※補足
　処理中は、S地点のとき、当該頂点を含むL1/L4の稜線と斜線となる線を保持します。
　そしてアルゴリズムを繰り返すうちに、（今回の場合）L4と斜線が交差しなくなります。このときL4の代わりにL3を保持することになります。
　同様にL1の次はL2となります。
　アルゴリズムの終了はこの閉領域が終了する点（L2/L3に含まれる頂点）になります。

　簡単な閉領域の場合、この基本となるアルゴリズムのみで良いのですが、少し複雑な形状などでは、一筋縄ではいきません。
　なので、また別の機会にでも考慮点などを説明できればと思います。
　ただ、別のよいアルゴリズムが無いかとも模索しています。

# ４．斜線の移動量について
　上記例では、S地点から一定間隔で右へ移動させています。
　この一定量はどのように計算するのか。
　ちなみに２項の絵は、ノズル径0.4[mm]の20[%]インフィル設定時の場合です。

　まず、インフィルが100[%]の場合を考えます。
![a8.JPG](https://qiita-image-store.s3.amazonaws.com/0/157557/6da4380c-38d6-a202-9e68-0c9903225c1c.jpeg)
　この場合、ノズル径の幅で経路となる斜線が移動します（斜め基準で）。つまり図中Xは三角関数でパラメータの角度とノズル径から得られます。
　では50[%]の場合は？．．．線有り，線無しと経路を描く事になります。よって、100[%]時の倍の移動量です。（本当はL1上など繋ぐ部分もあるので本当の充填率とは異なる）
　充填率の逆数を100[%]時の移動量に掛ければよいと思います。
　※インフィル0[%]時は処理自体しません。

# ５．おわりに
　これで、１層当たりの基本的なスライス結果が得られました。
　この１層当たりのスライスをモデルの全高さ分繰り返し、あとは結果をG-Codeとして出力すれば良いことになります。
　※本当ならもっと考慮する点は多々あるのですが、まずはきっかけ部分のみで。
Google Chrome 拡張機能の開発 - 2 - 早速自作したものに機能追加していく

# 前回作成した拡張機能を拡張する
前回、次の記事で、タイトルとURLをクリップボードへコピーする拡張機能を作りました。
[Google Chrome 拡張機能の開発 - 1 - はじめのいっぽ - Qiita](http://qiita.com/rrryutaro/items/bcfc0e593914e8ba0a9a)

同様の拡張機能は沢山あるかと思いますが、とことん自分好みにしたいのなら作った方が早いです。
しかもめちゃくちゃ簡単です。（もっとも自分は、そのやり方を紹介して下さっていた方のおかげです！）

さて、自分はQiitaと、はてなブログをやっています。しかもはてなブログははてな記法でやっています。
リンクのルールはそれぞれ違うので、前回に加え、はてな記法でのコピーをするようにします。

以下、その内容です。
## manifest.json
```json:manifest.json
{
  "manifest_version": 2,
  "name": "R Chrome Extension",
  "version": "1.0",
  "browser_action": {
    "default_popup": "popup.html"
  },
  "permissions": [
    "tabs",
    "clipboardWrite"
  ]
}
```
<font color="#0000ff">manifest.jsonは変更なし</font>

## popup.html
```html:popup.html
Get Title&URL<br>
<button id="Qiita">Qiita</button><button id="はてな">はてな</button>
<textarea id="text"></textarea>
<script src="jquery-3.1.1.min.js"></script>
<script src="./popup.js"></script>
```
<font color="#ff0000">ラベルを追加して、はてな用のボタンを追加するとともに、名称変更等。</font>

## popup.js
```js:popup.js
$(function(){
  function copyText(val){
      $("#text").val(val);
      $("#text").select();
      document.execCommand('copy');
  }
  $("#Qiita").on("click", function(){
    chrome.tabs.getSelected(null, function(tab){
      copyText("[{0}]({1})".replace("{0}", tab.title).replace("{1}", tab.url));
    });
  });
  $("#はてな").on("click", function(){
    chrome.tabs.getSelected(null, function(tab){
      copyText("[{1}:title={0}]".replace("{0}", tab.title).replace("{1}", tab.url));
    });
  });
});
```
<font color="#ff0000">テキストエリアとクリップボードへのコピー用の処理を関数化し、それぞれのボタンはフォーマット化したテキストを関数へと渡すように変更。</font>

![image](https://qiita-image-store.s3.amazonaws.com/0/156225/444807e3-20dd-256a-525b-280dc06d5b86.png)

こんな感じで簡単に機能追加していけるので、鼻血が出そうになります。

以上

|前回|一覧|次回|
|:--|:--:|--:|
|[はじめのいっぽ](http://qiita.com/rrryutaro/items/bcfc0e593914e8ba0a9a#_reference-3bf2614c502705f1a84c)|[シリーズ一覧](http://qiita.com/rrryutaro/items/015b67568ddd947ec2b5)|[保存できるようにする](http://qiita.com/rrryutaro/items/4b996b4594e3fafcc77d)|
プログラマ向け記号の読み方(ピックアップ)

初心者とペアプロするとキーボード上の記号がうまく伝わらないことがたまにある。
そこで気になった記号だけ再確認を兼ねてまとめた。

## クォート

|記号|読み方|
|---|---|
|'|シングルクォート|
|"|ダブルクォート|
|`|バッククォート|

## カッコ
|記号|読み方|
|---|---|
|()|丸カッコ、パーレン|
|{}|波カッコ、ブレース、カーリーブラケット|
|[]|角カッコ、スクエアブラケット|
|<>|山カッコ、大なり小なり、(アングルブラケット)|

## 他
|記号|読み方|
|---|---|
|~|チルダ|
|^|キャレット、ハット、サーカムフレックス|
|&#124;|パイプ、バー|
|$|ドル、ダラー|
|&|アンド、アンパサンド|
|#|シャープ、ナンバー、パウンド、ハッシュ|
|\\|バックスラッシュ|
|_|アンダーバー、アンダースコア|
|-|ハイフン|


|記号|読み方|
|---|---|
|.|ピリオド、ドット|
|,|カンマ|
|:|コロン|
|;|セミコロン|

## キーボード
|キー|読み方|
|---|---|
|alt|オルトキー|
|←↑→↓|カーソルキー|
はじめてのrunC

Dockerについて理解を深めるために、runCについても知っておく必要がありそうだったのでメモ。


## [runC](https://runc.io/)とは
[OCI仕様](https://github.com/opencontainers/runtime-spec)に基づいて、コンテナ生成・実行などを行うコンテナランタイム。

runCのコードは、
https://github.com/opencontainers/runc
にあり、仕様が変更されるとこのコードも変更される。

## runCとDockerの関係
Docker(containerd)は、コンテナの管理などを行い、コンテナ生成・実行はrunCが行っている。

https://qiita-image-store.s3.amazonaws.com/0/13002/02de6fd8-ea0d-2fc9-a18f-817109819baf.png

が、わかりやすい。


## Getting Started

https://github.com/opencontainers/runc/blob/master/README.md

に書いてあることを実行しただけ。

### インストール
runCは、golangで実装されており、Go version 1.6以上のインストールが事前に必要。

```
$ go get github.com/opencontainers/runc
$ cd $GOPATH/src/github.com/opencontainers/runc
$ make
$ sudo make install
$ runc -v
runc version 1.0.0-rc2
commit: c441a2fe0ccfce89d5781e894de783727d6743ee
spec: 1.0.0-rc3
```

### コンテナ実行
runCでコンテナを実行するためには、root filesystemが必要。すでにDockerを利用している場合は、Dockerコマンドを利用して
exportして試してみるのが手軽。

```
$ mkdir /mycontainer
$ cd /mycontainer
$ mkdir rootfs
```

次に、configurationを生成。

```
$ runc spec
```

config.jsonの詳細は、[仕様](https://github.com/opencontainers/runtime-spec)を参照。

実行やコンテナ状態の確認は以下のとおり。使い勝手はDockerとさほど変わらない。

```
$ sudo runc run mycontainerid
/ # 
$ sudo runc list
ID              PID         STATUS      BUNDLE                         CREATED
mycontainerid   13503       running     /mycontainer                   2017-01-04T05:25:00.254835235Z
$ sudo runc ps mycontainerid
UID        PID  PPID  C STIME TTY          TIME CMD
root     13503 13495  0 14:24 pts/0    00:00:00 sh
$ sudo runc state mycontainerid
{
  "ociVersion": "1.0.0-rc3",
  "id": "mycontainerid",
  "pid": 13503,
  "status": "running",
  "bundle": "/mycontainer",
  "rootfs": "/mycontainer/rootfs",
  "created": "2017-01-04T05:25:00.254835235Z"
}
```

`runc spec` で生成したconfig.jsonでは、コンテナを実行すると、シェルが実行される。DOCKERFILEなどと同じ感覚で、config.jsonを修正することでコンテナ実行時の挙動を変えることができる。

例えば、以下の変更を加えると、コンテナ起動後5秒間経つと、コンテナが停止する。

```
--- a/config.json
+++ b/config.json
@@ -5,7 +5,7 @@
                "arch": "amd64"
        },
        "process": {
-               "terminal": true,
+               "terminal": false,
                "consoleSize": {
                        "height": 0,
                        "width": 0
@@ -15,7 +15,7 @@
                        "gid": 0
                },
                "args": [
-                       "sh"
+                       "sleep", "5"
                ],
                "env": [
                        "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
```

確認コマンドは以下のとおり。

```
$ sudo runc create mycontainerid
$ sudo runc list
ID              PID         STATUS      BUNDLE                         CREATED
mycontainerid   13663       created     /mycontainer   2017-01-04T05:38:54.182455265Z
$ sudo runc start mycontainerid
$ sudo runc list
ID              PID         STATUS      BUNDLE                         CREATED
mycontainerid   13663       running     /mycontainer   2017-01-04T05:38:54.182455265Z
$ sudo runc list  // 5秒後に実行
ID              PID         STATUS      BUNDLE                         CREATED
mycontainerid   0           stopped     /mycontainer   2017-01-04T05:38:54.182455265Z

```
rbenv+ruby-build で ruby のバージョンを2.4.0 に上げたときのメモ

## 内容
rbenv+ruby-buildでruby 2.4.0 にupdateする際の方法メモ
毎度手順を忘れて、ruby-buildのREADMEを読んでいるので、ここにメモとして残しておく

## 前提 
rbenv + ruby-buildを下記の手順でインストールしていること
https://github.com/rbenv/ruby-build#installing-as-an-rbenv-plugin-recommended

## 手順
https://github.com/rbenv/ruby-build#installation
>  To update ruby-build, run git pull to download the latest changes.

ということで対象ディレクトリにある、ruby-buildを git pull すれば良いとのこと。

```bash:インストール手順
% cd .rbenv/plugins/ruby-build
% git pull origin master
% rbenv install -l | grep 2.4.0 #2.4.0 が存在することを確認
% rbenv install 2.4.0
% rbenv global 2.4.0                                                                                                                                                      
% rbenv rehash                                                                                                                                                            
% ruby -v                                                                                                                                                                 
ruby 2.4.0p0 (2016-12-24 revision 57164) [x86_64-darwin15]
```

以上で update完了
[Javaの小枝] combination (組合せ)を列挙する

# 組合せの列挙
[こういう](http://qiita.com/NoBall/items/b6ae147d9a61b592240a)需要があるということは順列でなくて組合せの需要もあるに違いないということで記事化する。弊社内でこの小さなコードは金融商品をいくつか組合せてポートフォリオというものを作り、その中から性質の良いものを選びだす、といった用途の製品に使われている。動作原理は前記事とほとんどかわらない。

```Combination.java
	private enum Operation {add, remove};
	private static<T> Set<T> apply(Set<T> src, Operation operation, T item) {
		Set<T> result = new HashSet<T>(src);
		if (Operation.add == operation) result.add(item);
		if (Operation.remove == operation) result.remove(item);
		return result;
	}
	
	private static<T> Set<Set<T>> _combination(Set<T> selected, int depth, Set<T> pool) {
		if (depth == 0) return apply(new HashSet<>(), Operation.add, selected); // 選択済みのもののみ要素に持つ集合をかえす
		Set<Set<T>> result = new HashSet<Set<T>>();
		for (T item : pool) {
			result.addAll(
					_combination(
							apply(selected, Operation.add, item), // item を選択済みに変更
							depth - 1, 
							apply(pool, Operation.remove, item)  // pool の中からは取り除く
					)
			);
		}
		return result;
	}
	public static<T> Set<Set<T>> combination(Set<T> src, int k) {return _combination(new HashSet<T>(), k, src);}
```

#使い方
こんな感じ。

```Main.java
	public static void main(String[] args) {

		Set<Integer> src = new HashSet<Integer>() {{
				add(0); add(1); add(2); add(3); add(4); add(5);
		}};
		
		System.out.println(combination(src, 2)); // 上記集合のなかから2つを取りだした集合を全て列挙する
		
	}
```
awsコマンドでS3のバケット名に「.(ドット)」が入ってる場合にlsする方法

「.(ドット)」が入っているバケットをlsしようとすると以下のようなエラーが出る場合がある

```
A client error (PermanentRedirect) occurred when calling the ListObjects operation: The bucket you are attempting to access must be addressed using the specified endpoint. Please send all future requests to this endpoint:
```

.aws/config　にてリージョンを指定すると見れるようになる


東京リージョンの場合は以下

```
[default]
region = ap-northeast-1
```
iOSプロジェクトのテストバンドルに存在するファイルを取得する


Xcode 9.2, Swift 4で動作確認済み

# アプリケーションバンドルに存在するファイルを取得する

アプリケーションバンドルに存在するファイルは、以下のコードで取得できる。

```Swift
let path = Bundle.main.path(forResource: "foo", ofType: "json")
let data: NSData? = try? NSData(contentsOfFile: path!, options: .uncached)
```

ユニットテスト等でテストバンドルに存在しているファイルを取得するにはこの方法ではうまくいかない。

# テストバンドルに存在するファイルを取得する

以下の方法で取得できる。

```Swift
let testBundle = Bundle(for: type(of: self))
let path = testBundle.url(forResource: "bar", withExtension: "json")
let data: NSData? = try? NSData(contentsOf: path!, options: .uncached)
```

## プロジェクト構成

![resource.png](https://qiita-image-store.s3.amazonaws.com/0/39720/b4df4b49-6010-d977-cefd-3451e2598416.png)


参考：
http://stackoverflow.com/questions/19309092/nsurl-to-file-path-in-test-bundle-with-xctest
pythonのnfcpyのnfc.ContactlessFrontend()のメモ


# サンプルプログラム

``` Python:SimpleSample.py
# coding: utf-8

import sys
import os
sys.path.append(os.path.dirname(__file__) + '/nfcpy')
import nfc

# カードがタッチされたときに実行する関数
def hello(tag):
    print 'hello'

clf = nfc.ContactlessFrontend('usb')            # USB機器ということだけを指定
#clf = nfc.ContactlessFrontend('usb:054c:06c3')  # ベンダIDを指定(SONYのPaSoRiのベンダID)
#clf = nfc.ContactlessFrontend('usb:001')        # バス番号を指定。このバスで最初に該当するものを選ぶ
#clf = nfc.ContactlessFrontend('usb:001:011')    # バス番号とデバイス番号を指定

rdwr = {'on-connect':hello}

print 'start'
clf.connect(rdwr=rdwr)
print 'end'
```

# clf = nfc.ContactlessFrontend() について
`clf = nfc.ContactlessFrontend()`でカードリーダと接続を行うが、引数の部分にはいくつか種類がある。

| 引数 | 例 | 意味 |
|:-:|:-:|:-:|
| 'usb' | 'usb' | デバイスな中から（一番初めに？）見つかったものに接続 |
| 'usb:ベンダID' | 'usb:054c:06c3' | 指定のベンダIDのデバイスの中から（一番初めに？）見つかったものに接続 |
| 'usb:バス番号' | 'usb:001' | 指定のバス番号のデバイスの中から一番初めに見つかったものに接続 |
| 'usb:バス番号:デバイス番号' | 'usb:001:011' | 指定のバス番号とデバイス番号のデバイスに接続 |

ベンダIDやバス番号、デバイス番号は`lsusb`コマンドで調べることができる。

```bash
$ lsusb
Bus 001 Device 010: ID 054c:06c3 Sony Corp.
Bus 001 Device 011: ID 054c:06c3 Sony Corp.

# Bus [バス番号] Device [デバイス番号]: ID [ベンダID] [メーカ名]
```

※デバイス番号については、カードリーダを抜き差しするごとに更新されてしまう。
BugsnagのAPI KEYがPHP5.4の環境で使えるか確認

## 概要
自分が携わっているWEBサービス(PHP)にて、Bugsnagを導入するにあたり、
発行したAPI KEYが使用可能か確認する必要がありましたので、確認手順を備忘録を残します。

## 前提
・BugsnagのAPI KEYは発行してあること。
・PHPのバージョンは"5.4"であること。

## 1. Composerを使ってインストール
```
$ composer require "bugsnag/bugsnag:^2.9"
```

※注意
Bugsnagのバージョン：3.0からは、PHP5.6以上じゃないと動作しません。
なので、2.9を指定する必要があります。

## 2. BugsnagのClientインスタンスを生成します。
```
$bugsnag = new Bugsnag_Client('YOUR-API-KEY-HERE');
```
'YOUR-API-KEY-HERE'の箇所に発行したAPI KEYを設定してください。
Composerを使ってインストールする場合は、requireとかする必要もなく、そのままコードをPGMに書いてOKです。

## 3. エラーレポートを発生させるために例外を発生させます。
```
try {
    // Some potentially crashy code
} catch (Exception $e) {
    $bugsnag->notifyException($e);
}
```

## 4. しばらくして、ご自身のBugsnagのダッシュボードでエラーレポートを確認します。
rex0220 郵便の宛先プラグイン

いわゆる郵便番号から住所変換を行うプラグインです。

- 郵便番号の入力時に応じて、住所項目を自動設定
- 郵便番号のハイフン自動補完
- 郵便番号全角数字入力を半角変換
- 都道府県にドロップダウン項目を指定可能
- 都道府県項目の入力抑止を指定可能
- 半角・全角のカタカナ住所項目を指定可能
- 複数の郵便番号と住所を指定可能
- サブテーブル内の項目も複数指定可能
- 一覧編集画面では、郵便番号変更不可
- PC・モバイル対応

※住所変換は、「[jquery.jpostal.js](https://github.com/ninton/jquery.jpostal.js)」をベースに機能追加のカスタマイズをしています。

Ver.7
・プラグイン設定画面のデザイン変更対応
・プラグイン設定に、「説明」設定機能を追加

[rex0220 stores で、販売中です。](https://rex0220.stores.jp/)


![2017-01-04_13h06_21.gif](https://qiita-image-store.s3.amazonaws.com/0/100572/d677b110-c833-7b9c-2b0b-7be1849b6a62.gif)

# 編集画面

![2017-01-04_13h15_13.png](https://qiita-image-store.s3.amazonaws.com/0/100572/d1fbbfed-ccf6-a1af-937f-5622f0af98b1.png)

# 一覧編集画面

![2017-01-04_13h25_18.png](https://qiita-image-store.s3.amazonaws.com/0/100572/9774f5cc-1b26-f04d-2d29-f1ab521f3090.png)


# スマホ入力例

![2017-01-04_13h32_55.gif](https://qiita-image-store.s3.amazonaws.com/0/100572/7d75a286-4654-2e56-c3a1-a637d023834c.gif)

# スマホ編集画面

![2017-01-04_13h40_26.png](https://qiita-image-store.s3.amazonaws.com/0/100572/1c88430c-98a8-9e6e-f318-cd27d8bd57c3.png)



# プラグインの追加

- 「kintone システム管理 > プラグイン」で追加します。
- 「アプリの設定 > プラグイン」で、アプリに追加します。


# プラグインの設定
対象アプリで使用する機能を選択して、「保存する」をクリックします。

- プラグイン設定画面において、郵便番号と住所項目を指定します。
- 項目の入力エリアをクリックすると、テキスト項目が一覧表示されますので選択します。
- 郵便番号: テキスト項目を指定
- 都道府県（オプション）： テキストまたはドロップダウン項目を指定
- 都道府県入力抑止：　都道府県のマニュアル入力を抑止
- 市区町村（オプション）： テキスト項目を指定
- 住所（都道府県、市区町村）町域： テキスト項目を指定
- カナ住所（都道府県、市区町村、町域）： テキスト項目を指定
- 全角カナ：　カナ住所を全角カナに指定
- ハイフン：　ハイフンの補完指定

※フォーム変更時は、本番環境にフォーム変更を反映後に、本プラグイン設定を行ってください。

![2023-03-07_10h17_20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100572/3fc76f3f-d34c-1c12-fad6-33d66db0e53e.png)


# 注意事項
- 既に、JavaScript によるカスタマイズを行っているアプリの場合、処理が競合して、エラーになる場合があります。その場合は、該当するアプリでプラグインの使用を中止してください。
完全素人が年末年始にARとVRを作ってみた(using Unity)

日曜プログラマーですが、年末年始を利用して流行りのARとVRをUnityで作ってみました。
とりあえずサクッと動くものが作りたいという人向けの記事です。

下記が作ったものです。
※といってもほとんど参照先のサンプルコードを参考にして作っただけですけど(^^;

1.雑誌の上にポケモンが出現するAR
2.敵機が襲来して撃ち落とすAR
3.草原を駆け抜けるVR

全てUnityで作成し、Iphone実機上で動かすアプリです。
ではそれぞれどういうアプリなのか、どういう風に作ったのか、簡単に説明していきます。

#開発環境
unity 5.4.2
xcode 8.2.1
Google CardBoard (Oculusは高い)

#1.雑誌の上にポケモンが出現するAR
マーカーとして登録しておいた雑誌(部屋にあったおとなの週末)をスマホで映すと、
サワムラーが出現するアプリです。
![s_IMG_0577.jpg](https://qiita-image-store.s3.amazonaws.com/0/44747/e52c7813-532b-2daf-8521-ef730849e875.jpeg)

**大まかな作成の流れ**
1.unity起動
2.ARを無料で制作できるライブラリ「Vuforia」のアカウント開設、SDKのダウンロード、マーカー登録
3.ImageTarget,ARCameraの設定
4.サワムラーをimport。ImageTargetの子オブジェクトにする

※2,3はほぼ参照先と同様のことを書く形になるので、参照先をご参考にして下さい。

**参照先:**
[Unity＋ARで何ができるのか](http://www.atmarkit.co.jp/ait/articles/1508/24/news025.html)
[3D pokemon](http://roestudios.co.uk/project/3d-pokemon-models/)←こちらで3Dのポケモンがダウンロード可能です。

恥ずかしながらマーク型とマークレス型の概念を始めてここで知りました。
このアプリはマーク型なのでマークレス型も作ってみたい！ということで、2つめのアプリに続きます。

#2.敵機が襲来して撃ち落とすAR
自分の周囲をスマホで映すと敵機がいっぱいいて、撃ち落とすゲームです。
真ん中の赤いボタンを押すとミサイルが出ます。撃っている画像は重くて載せられませんでしたが。
![IMG_0564.PNG](https://qiita-image-store.s3.amazonaws.com/0/44747/0da7ce93-92c9-d604-825d-0e38ae7ed4c6.png)

**大まかな作成の流れ**
1.unity起動
2.メインカメラの設定
3.敵機の移動空間の作成、敵機の移動スクリプトの作成
4.UIのCanvasを使って、コクピット作成
5.コクピットのミサイル発射ボタンの作成、設定
6.当たり判定の設定

※下記参照先の動画を参考に作れば、できます。

**参照先**:
[How To MARKERLESS Augmented Reality App Tutorial for Beginners with Unity 3D!!(動画)](https://www.youtube.com/watch?v=T6bd_MQ2ass&list=LLrlvXEMOYjOxDPhzOzksWxg&index=2)
[Script,Game Assets](http://wirebeings.com/markerless-augmented-reality.html)
30分の動画ですけど、分かりやすいです。


#3.草原を駆け抜けるVR
自分が向いた方向に進むというアプリです。
写真では分かりにくいかもしれませんが、ゆっくり移動しています。
![fullsizeoutput_92.jpeg](https://qiita-image-store.s3.amazonaws.com/0/44747/6bfde569-a0b4-faa1-44a2-3c16c75ef15c.jpeg)
下から見上げるの図
![IMG_0563.PNG](https://qiita-image-store.s3.amazonaws.com/0/44747/c39a338a-5aad-64e7-c6c6-206ac579b7c4.png)


**大まかな作成の流れ**
1.Unity起動
2.Terrainで空間の作成(地面に起伏、テクスチャのペイント、草のテクスチャ、地面に木)
3.Cardboard用VRカメラの作成
VRカメラ用のGameObjectを作成し、MainCameraを子オブジェクトに。
[Google VR SDK for Unity](https://developers.google.com/vr/unity/)からパッケージをimportし、PrefabsフォルダーにあるGvrViewerMainを作成したらGameObjectにドラッグし、子オブジェクトにする。
その後GameObjectのinspectorパネルでApplyボタンをクリックすれば、VR用カメラに。
4.視線の方向への移動
VRカメラオブジェクト用のスクリプトを作成。```Camera.transform.forward```によって現在の方向をチェック、VRカメラのオブジェクトをその方向に移動。
5.頭の上げ下げで移動の開始と終了

※コードは下記サンプルコードの6章に記載があります。

**参照先**:[UnityによるVRアプリケーション開発。](https://www.oreilly.co.jp/books/9784873117577/)オライリー本です。
[サンプルコード](https://github.com/oreilly-japan/unity-virtual-reality-projects-ja)はこちらにあります。

#所感
手を動かして作ってみることでVR,ARが少し身近に感じることが出来ました。
今後も空いた時間に触っていきたいと思います。
Excelに画像を書くスクリプトを書いた

Excelに画像を貼って上司に提出したら、

「画像を張るなんてお客様に失礼だ、温かみが足りない。画像は各セルを塗りつぶして書きなさい。」

なんて言われたときのために画像をExcelに書き込むスクリプトをRubyで書きました。


```ruby
# coding: utf-8
require 'axlsx'
require 'chunky_png'

# USAGE: ruby scripts/draw_picture_to_excel.rb <input file>
filename = ARGV[0]
image = ChunkyPNG::Image.from_file(filename)
working_image = image.dup

Axlsx::Package.new do |package|
  # create workbook
  package.workbook do |workbook|
    # define styles
    workbook.styles do |style|
      # draw cells
      workbook.add_worksheet(name: "sample") do |sheet|
        row_pix_count = 1
        pix_colors = []
        working_image.pixels.map! do |pixel|
          if image.width == row_pix_count
            # write per image width size
            pix_colors << style.add_style({bg_color: ChunkyPNG::Color.to_hex(pixel, false).sub(/#/, '')})
            sheet.add_row Array.new(image.width, ''), style: pix_colors, sz: 10
            pix_colors = []
            row_pix_count = 1
          else
            # create color style of Axlsx
            pix_colors << style.add_style({bg_color: ChunkyPNG::Color.to_hex(pixel, false).sub(/#/, '')})
            row_pix_count += 1
          end
        end
      end
    end
  end
  # create file
  package.serialize("sample.xlsx")
end

```

これを実行すると、この画像が

![lena_std_res.png](https://qiita-image-store.s3.amazonaws.com/0/13609/b7fb5329-33ca-8f51-352f-e1df3db59a7e.png)

Excel上でこうなります

![スクリーンショット 2017-01-04 13.51.24.png](https://qiita-image-store.s3.amazonaws.com/0/13609/8c6700fb-248a-2b0b-eaf8-e889b2f9b278.png)


仕組みは単純でRubyからPNG画像を楽に操作するための[chunky_png](https://github.com/wvanbergen/chunky_png)を使って、各ピクセルのRGB値を取得し、RubyからExcelを楽に操作するための[axlsx](https://github.com/randym/axlsx)を使って、そのRGB値でセルを塗りつぶしていくだけです。

ただ全ピクセルをセルに反映するのでメモリをかなり使います。最大でも100x100の画像くらいが表示限界かもしれないです。
Windows上で VirtualBox + Vagrant + Ubuntu (+ Docker) 環境構築（バージョン依存関係）

VirtualBox と Vagrant はバージョン依存性がとても強いので、どちらも安易なバージョンアップは控えるべし。

今のところ以下の組み合わせで上手く動いている。（2017/01/04現在）

 - Windows7 x64
 - VirtualBox5.0.30 ★最新ではない
 - Vagrant1.8.4 ★最新ではない
 - Ubuntu16.4(Xenial) [Official Ubuntu 16.04 daily Cloud Image amd64](http://www.vagrantbox.es/)を使用
 - Docker1.12.5

参考サイト: [Vagrantのインストール - Qiita](http://qiita.com/shimitei/items/31b65fd63a6e369568de)

### VirtualBox
5.1系はなんかダメだった。Ubuntu14のaufs問題との絡みっぽい… ※[参考サイト - Qiita](http://qiita.com/kaakaa_hoe/items/602f0cef1fa50ebdcbfc)
結局5.0.30 に戻した。

### Vagrant
最終的には Vagrant1.8.4 でOK。ついでにSSH認証がpasswordではなく、private key になってくれた。

###### 1.7系
Ubuntu16.4のprivate_networkでIPアドレスが設定できなかった
参考: [VagrantでUbuntu16.04を上げようとしたらipアドレスを固定できなかった - Qiita](http://qiita.com/kaz29@github/items/f16c61d615080132c8c3)

###### 1.8.5
sshに関する(?)バグがある模様。参考: [Windows10でVagrant(1.8.5)を使ってCentOS 7仮想マシンを構築する - Qiita](http://qiita.com/ringo0321/items/faaf0947a2c4113913e6#vagrant-185%E3%81%AE%E3%83%90%E3%82%B0%E3%81%AB%E8%B5%B7%E5%9B%A0%E3%81%99%E3%82%8B%E5%95%8F%E9%A1%8C)

###### 1.9系
Ubuntu16.4が起動すらしなくなった。

### Ubuntu
最終的には16.4(xenial)でちゃんと動くようになった。

###### 14系(Trusty)
httpd のインストールが出来ない。aufsのバグ？が原因？

###### 16系(Xenial)
以下の問題があったが、全て解決できた。

 - デフォルトでvagrantユーザーがない[^1]
 - SSH認証が password になっている
 - vagrantでIPアドレスが固定できない

----
[^1]: ユーザー作成, Vagrantファイル編集, ssh key 作成/交換など、色々やったので、何をやったのかちゃんと書けなくなってしまった(-_-)
UIの下に配置してあるSpriteにマウスイベントを発生させない方法

OnMouseDownはUIの下に配置してあるSpriteにもマウスイベントが発生してしまう。
UIの下に配置してあるSpriteにマウスイベントを発生させたくない場合はOnMouseDownの代わりに
Physics 2D Raycasterを使う。

手順
１．カメラにPhysics 2D Raycasterをアタッチ
２．マウスイベントを発生させたいSpriteオブジェクトにEvent Triggerをアタッチ
３．Add New Event Typeから好きなイベントを追加

以上。

こちらの記事を参考にさせて頂きました。
http://qiita.com/seka/items/f9bfe60ccb0a5508ff49
ESP8266 / Slack / Amazon Dash Button > バッテリー試験 > code(v0.2):14時間だけ動作した / code(v0.3):10時間＋α / code(v0.4):14時間弱

http://qiita.com/7of9/items/9bcdfa8223b6ec791a5c
のコードを用いたバッテリー試験。

~~WIP (Work in Progress)~~終了 (2017/01/04 19:18 JST)

Amazon Dash Button(以下ADB)を押下していき、ESP8266の電池のもちを試験する。

## v0.2コードでの試験

http://qiita.com/7of9/items/9bcdfa8223b6ec791a5c
のコードv0.2を用いたバッテリー試験。

### 試験内容

以下による消費電流が関係しそう

- promiscuousモードでの処理
   - ほとんどがこちら
- slackへの通知
   - ADB押下時のみ
   - 1日3回押すことにした

電池はCR123A ([公称容量 1400mAh @ pdf](https://industrial.panasonic.com/cdbs/www-data/pdf2/AAA4000/AAA4000C288.pdf))

1ヶ月持つのか、1年持つのか。

promiscuousモードでどれくらい消費するかは、情報を探しているが、今のところ見つかってはいない。
プロバイダのWiFiに接続していることによる電力消費があるのではと思っている。
同じWiFiにつなげているMacbook airやiPad mini4の通信も影響するかもしれないが検討していない。

### 実施中

2017/01/03 16:08 JSTに開始。

![qiita.png](https://qiita-image-store.s3.amazonaws.com/0/32870/bf5ab28c-edd1-dd27-ef4e-62e86dee527a.png)

~~適宜更新する予定です。~~


### 試験終了

2017/01/04 19:18 JSTにADB押下。
Slack更新なし。
ESP8266の電源電圧をデジボルで測定。1.05Vに落ちていた。

開始が2017/01/03 16:08 JSTで、
Slack通知を最後に確認できたのが2017/01/04 06:11 JST
ということで、14時間だけ動作を確認できた。

promiscuousモードでの消費電力が大きいのだろう。

### 考察

1400mAhの公称容量。
過去５年程度に経験したバッテリー試験から、だいたい　７割程度の容量は使えそうかと推測する（個人の考えですが）。

1400mAh * 0.7 = 980mAh

これを14時間(＋不明の数時間)で消費するとすると、

980mAh / 14h = 70mA
程度の消費になる。


## v0.3コードでの試験

http://qiita.com/7of9/items/9bcdfa8223b6ec791a5c
のコードv0.3を用いたバッテリー試験。

- v0.3の変更
  - promiscuousモードを20% duty cycleで実施
      - 1/5の消費電力になるかどうか

### 実施結果

2017/01/04 20:36 JST - 開始
2017/01/05 06:10 JST - ADB押下 >> Slack通知あり
2017/01/05 20:12 JST - ADB押下 >> Slack通知なし
(電池電圧: 1.197V)

外出のため、Slack通知が最後に確認できたのは01/05 06:10。開始から10時間。


## v0.4コードでの試験

http://qiita.com/7of9/items/9bcdfa8223b6ec791a5c
のコードv0.4を用いたバッテリー試験。

- v0.4の変更
   - Light-Sleep使用により省電力とする
  
2017/01/06 06:11 JST - 開始
2017/01/06 06:11 JST - ADB押下 > Slack通知あり
2017/01/06 19:51 JST - ADB押下 > Slack通知あり
2017/01/06 21:50 JST - ADB押下 > Slack通知なし
2017/01/06 21:52 JST - ADB押下 > Slack通知あり (2.74V)
2017/01/07 06:30 JST - ADB押下 > Slack通知なし
2017/01/07 06:30 JST - ADB押下 > Slack通知なし (1.24V)

Light-Sleepを使った（と思われる）が、ADB押下を正常に検知できたのは01/06 21:50までであった。
14時間弱しか正常動作しなかった。

本当にLight-Sleepになっているか確認するには、消費電流を測定しないといけないだろう。
プロジェクト内のJavaScriptを厳格にするシェル

カレントディレクトリ内の全ての`*.js`ファイルの先頭に`"use strict"`を挿入します。

全てのJSファイルに対してforを回す

```zsh
for f in **/*.js; do sed -i '1i"use strict"' $f ; done
```

Gitで管理されてるファイルのみなら以下の書き方のほうがいい

```zsh
for f in git ls-files **/*.js; do sed -i '1i"use strict"' $f ; done
```
AWS Tools for Windows PowerShellでクロスアカウントアクセス

確認したVersion: AWSPowerShell 3.1.95.0

---

```ps1
Use-STSRole -RoleArn "arn:aws:iam::000000000000:role/aws-cross-account-role" -RoleSessionName "foo"
Set-AWSCredentials -Credential $role.Credentials
```
RoleSessionNameはなんでもいい。
iturm メモ

■テーマ変更
vi .zshrc

> ZSH_THEME="*******"

・candy
・robbyrussell
etc...


■プロフィール設定
「⌘ + o」

カラー変更
https://github.com/mbadolato/iTerm2-Color-Schemes
.itermcolorをインポート


■タブ結合
「⌘ + alt + shift」
C++ Builder XE4, 10.2 Tokyo > bug? > 行コメントにおいて、HHHはHHhになる

```txt:動作環境
C++ Builder XE4
   Windows 7 pro (32bit)

RAD Studio 10.2 Tokyo Update 2 (追記: 2017/12/28)
```

XE4にて以下のようなコメントを書いていた。
(変数名は公開用に変えています)

```cpp
double xxx; // XXX / XXXRH
```

そのコードを再度見直すと以下となっていた。

```cpp
double xxx; // XXX / XXXRh
```

休み明けで頭が働かずに入力ミスしたと思い、再度「XXXRH」と入力した。そしてそのコードからカーソルを動かすと以下となった。

```cpp
double xxx; // XXX / XXXRh
```

何かよく分からないが、**「コメントの一部の大文字を小文字に変換する機能」**が動いているようだ。

`XXXRHH`を入力すると`XXXRHh`になる。
`XXXRHHH`を入力すると`XXXRHHh`になる。

こういう機能は**「ない方が良い」**

### UIとしての問題点

- 変更したことを明示していない
- 変更しないという選択肢がない
   - オプションの何かをOFFにすればいいかもしれない

### 対処 (17/01/08)

最後のHの後ろに空白文字を1つ入れることで、hに変化する不具合を回避できる。

と思ったが、行を移動した途端に不具合が発生する。

最後のHの後ろにピリオド(.)を1つ入れる場合は行を移動しても不具合が発生しないが。。。