OmniAICreator/Qiita-1.07M huggingface dataset:
Powershell get-wmiobject 実行時の結果取得に関して 

みなさん、こんにちは。
Powershell初心者です。

Powershell　version 5.1 (x86 ISE)on Win7 を使っています。

2つ疑問があります。
1．下記コマンドを実行したときに、Nameという（property名?)がついてきてしまいます。　
MYPCJP-123345　だけを結果としてとりたい場合にはどうしたらいいでしょうか。　結果を変数に入れたいと思っています。

Get-WmiObject -query "select * from win32_computersystem" | select name

name          
----          
MYPCJP-123345

2.Get-WmiObject -query "select name from win32_computersystem"

上記で　name だけを選択しているはずなのに、結果に他のものも付いてくる理由

__GENUS          : 2
__CLASS          : Win32_ComputerSystem
__SUPERCLASS     : 
__DYNASTY        : 
__RELPATH        : Win32_ComputerSystem.Name="MYPCJP-123345"
__PROPERTY_COUNT : 1
__DERIVATION     : {}
__SERVER         : 
__NAMESPACE      : 
__PATH           : 
Name             : MYPCJP-123345
PSComputerName   : 

Googleで検索してみたのですがうまく答えを探せ出せませんでした。

Powershellにお詳しい方、アドバイス頂けると幸いです。
その他必要な情報があればおしらせください。

どうぞよろしくお願い致します。
【Python】K-meansによるクラスタリング結果をPCAで次元削減して散布図にプロットする

ありそうで無かったので記事にしてみた。
4次元の特徴量を持つデータが6つあったとする。

```sample.csv
1,2,3,4
1,2,3,5
1,2,4,5
4,3,2,1
5,3,2,1
5,4,2,1
```

これをK-meansによりクラスタリングした上で、PCAで次元削減して散布図にプロットする。
K-meansのドキュメントは[ここ](http://scikit-learn.org/stable/modules/generated/sklearn.cluster.KMeans.html)、PCAのドキュメントは[ここ](http://scikit-learn.org/stable/modules/generated/sklearn.decomposition.PCA.html)、pyplotのドキュメントは[ここ](http://matplotlib.org/users/pyplot_tutorial.html)。

```sample.py
# -*- coding: UTF-8 -*-
import numpy as np
from sklearn.cluster import KMeans
from sklearn.decomposition import PCA
import matplotlib.pyplot as plt

# sample.csvを読み込む
users = np.loadtxt('./sample.csv', delimiter=",")

# K-meansによるクラスタリング
model = KMeans(n_clusters=2).fit(users)

# PCAで次元削減
pca = PCA(n_components=2)
users_r = pca.fit_transform(users)

# 結果を散布図にプロット
plt.figure()
for (i, label) in enumerate(model.labels_):
    if label == 0:
        plt.scatter(users_r[i, 0], users_r[i, 1], c='red')
    elif label == 1:
        plt.scatter(users_r[i, 0], users_r[i, 1], c='blue')
plt.show()
```

次のような散布図が得られる。
![figure_1.png](https://qiita-image-store.s3.amazonaws.com/0/127582/c15a0fd0-2ec9-7d29-19a4-3b650d5661d5.png)
CentOSの古いバージョンでyumを固定

# CentOS系のバージョンを固定したい
## 課題点
CentOS6.5でyum updateを打つと現在CentOS6.8となってしまうが、
CentOS6.7としたい。

##解決方法
`/etc/yum.repos.d/CentOS-Base.repo`をちょこっと変更
ひとまず、、、、
`cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.BAK`
って感じでバックアップ作っておく

３点修正する
１．mirrorlistを変更
`mirrorlist`をコメントアウトにし、
`baseurl`のコメントアウトを外す

２．baseurlの変更
`baseurl=http://mirror.centos.org/＊＊＊＊＊`
↓
`baseurl=http://vault.centos.org/＊＊＊＊＊`

３.$releaseverを変更
`$releasever`
↓
`6.7`

この状態で`yum update`をかけると。。。
`6.7`でアップデートがかかります(๑•̀ㅂ•́)و✧

旧バージョンのリポジトリは、`vault.centos.org`にお引越しするとのこと！
コレで出来たっぽい。。。。。。？？？？
IPsec / XAuth でサクッと VPN サーバを立てる

手軽に VPN をサーバを立ててみようと思い、比較的サクッと作れそうな IPsec XAuth PSK を strongSwan で作ってみたのでメモ。

OS は Ubuntu 16.04 。

# strongSwan を設定する

## インストール
```
# apt install strongswan strongswan-plugin-xauth-generic
```

## 設定
``` :/etc/ipsec.conf
config setup
    nat_traversal=yes

conn %default
    leftsubnet=0.0.0.0/0
    auto=add
    # クライアントに割り振られる IP の範囲
    # サーバが所属するネットワークのアドレスと被らないようにする
    rightsourceip=192.168.0.0/24
    rightdns=8.8.8.8
    dpdaction=clear

conn XAuth
    leftauth=psk
    rightauth=psk
    rightauth2=xauth
```

## 共有鍵とユーザーの設定
``` :/etc/ipsec.secret
: PSK "ABABABABA" # ここに共有鍵を入れる

foo : XAUTH "foo_user_password"
bar : XAUTH "bar_user_password"
```

# ポートを開ける
- UDP 500 (IKE)
- UDP 4500 (IPsec NAT-T)

今回は XAuth なので必要ないが L2TP を使う場合は UDP 1701 も開ける必要がある。

# Virtual IP の経路を設定する
この時点で VPN へ接続することはできるが、まだ VPN からインターネットに出ることができない。VPN クライアント(今回の場合 192.168.0.0/24)からのパケットをインターネットに繋がるネットワーク(今回の場合 eth0)に流すために NAT の設定をする。

Ubuntu の場合は ufw という iptables のラッパーが入っているのでそれを使う。

``` :/etc/ufw/sysctl.conf
net/ipv4/ip_forward=1 # コメントアウトを外す
```

before.rules に NAT 設定を追加する。
今回の場合、VPN クライアントには `192.168.0.0/24` を割り当て、インターネットに繋がるインタフェースは `eth0` だったので以下のように設定した。

``` :/etc/ufw/before.rules
# NAT table rules
*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE
COMMIT
```

## ufw を使っていなかった場合
サーバーの手前にファイアウォールがあったり AWS でセキュリティグループを設定していたりして ufw は有効になっていない(有効にする必要がなかった)場合では、NAT の機能は使いたいが IP 制限などはかけてほしくないので以下のように設定を変更する。

``` :/etc/default/ufw
DEFAULT_INPUT_POLICY="ACCEPT"
DEFAULT_FORWARD_POLICY="ACCEPT"
```

## ufw を有効にする
ここで設定をミスっていると ssh できなくなったりするので注意

```
# ufw enable
```

# クライアントを設定する
Mac の場合はこんな感じで。

![](https://qiita-image-store.s3.amazonaws.com/0/16369/c6256f12-a63f-65df-d5b3-2880cfee08cd.png)

![](https://qiita-image-store.s3.amazonaws.com/0/16369/d994be69-b696-c655-c575-137c349e5cae.png)

# 補足： 他の認証方式について
実ははじめは IKEv2 (IPSec EAP MSCHAPv2) で作っていたのだが、クライアントの問題で XAuth で作り直すことにした。
Android は OS 標準で IKEv2 には対応しておらずクライアントアプリを入れる必要があったり、[Mac OS X El Capitan では IKEv2 が使えないバグ](https://forums.developer.apple.com/message/55851)があったりして、まだ「とりあえず IKEv2 にしておけば良い」という世界観ではなさそう。

ちなみに L2TP/IPsec もやってみたが、XAuth ほど簡単ではないもののそれほど難しくなかった。ググッて出てくる情報も多いし L2TP でも良いと思う。

- [strongSwan + xl2tpd でVPN(L2TP/IPsec)を構築する - Qiita](http://qiita.com/namoshika/items/30c348b56474d422ef64)
- [strongSwanでVPN (IKEv2)を構築する - Qiita](http://qiita.com/namoshika/items/472560b18ea417add2d0)

# [追記1] Windows 10 だと XAuth IPsec 使えんかった＼(^o^)／
Windows 10 でテストしようと思ったら選択肢が「PPTP」「L2TP/IPsec RSA」「L2TP/IPsec PSK」「SSTP」「IKEv2」しかなく、見事に爆死。
幅広い OS に標準で対応している方式を選ぶなら結局 L2TP/IPsec にするしかないようだ。

# [追記2] ついでに各 OS の対応状況をまとめた
[IPsec 認証方式の各 OS の対応状況 - Qiita](http://qiita.com/hoto17296/items/4c8f1cce60bb476e4e15)
Pythonのselfがよくわかんないから徐々に理解していくノート

#はじめに
Selfって？ -> オブジェクト指向をちゃんと理解して -> よくわかんない。というループの繰り返しなので、長い目で見て理解出来るようにノートをつけていく。


##Self
- This みたいなもの
- クラスの中でselfをつけておけばクラス内の他の関数からもアクセス出来て便利


#走り書き
Symbol#&

前にこういう話をしました。

[Symbol からレシーバを後挿しできる Proc を得られるようにするとブロックなし Ruby が捗る](http://qiita.com/aoitaku/items/24e80575bdb0cef512bf)

```rb
p [[1,2,3],[2,4,6],[5,7,9]].map(&:select.(&:odd?))
```

こういうふうに書けるようになるやつは、たぶんこれを追加するともっと楽しいです。

```rb
class Symbol
  def &(callable)
    call(&callable)
  end
end
```

```rb
p [[1,2,3],[2,4,6],[5,7,9]].map(&:select&:odd?)
```

たのしいですね。

受け取るのはブロックにすることが可能なものならなんでもいいので `Proc` を渡してもよいです。たとえば任意のブロックを受け取るメソッドで

```ruby
:instance_exec&proc
```

というイディオムを使うことで、後挿したレシーバのコンテキストで実行される `Proc` を作ることができるようになります。いつ使うんだろう。

以上です。おわります。
うちのカワイイSurfacePro4たんがRedStone 1(Windows10 Anniversary Update)をイヤイヤして困るんだが

# エラーコードを見る

[MediaCreationTool](https://www.microsoft.com/ja-jp/software-download/windows10) を利用してwindows updateすると、エラーコードを表示してくれる。
（どうしてここまでしないとエラーコードすらうまく見れないのかしら…？）。

```
0x80070002 - 0x20007
INSTALL_DRIVERS 操作中にエラーが発生したため、インストールはSAFE_OSフェーズで失敗しました
```

# 結論

[Windows 10 Anniversary Update適用中に勝手に復元【Ver1607】](http://answers.microsoft.com/ja-jp/windows/forum/windows_10-update/windows-10-anniversary/3fb16e5e-f96e-40d5-8aa4-74b3f5e55366)

「コマンドプロンプト(管理者)で以下のコマンドを実行してからアップデートしたまえ」とのこと。

```
rundll32.exe pnpclean.dll,RunDLL_PnpClean /DRIVERS /MAXCLEAN
```

実行しても特にリアクションがないので不安になります。が、このあとupdateすると無事updateされました。

[0x8007042B - 0x3000D MIGRATE_DATE 操作中にエラーが発生したため、インストールは FIRST_BOOT フェーズフェーズで失敗しました【Ver1607】](http://answers.microsoft.com/ja-jp/windows/forum/windows_10-update/0x8007042b-0x3000d-migratedate/98d8c8cd-1e47-4fb8-80c2-cb308c58b675)

にあるように、下記のようなことが推奨されていたりしますが、同じエラーコードの人は上記のみでupdateできそうな感がします。

* アンチウィルスソフトをアンインストール
* USBデバイスを外す（タイプカバーも忘れずにね！）
* システムファイルチェッカーや破損ファイルの修復
* 高速スタートアップ無効化

# というわけで

上記URLを見ろというまったく記事にする必要はない記事だけど、Qiitaに定期であげることに慣れようと思っているのでお試しとして記事にしました。

あと自分で組んだデスクトップは普通にupdateできるのにMicrosoft製PCがうまくいかないのが納得いかない怒りがそうさせました。

以上です。
非同期でエラーチェックするサンプル (ESLint)

job機能を使って非同期にエラーをチェックできるサンプルコードを書きました。
ESLintでJavaScriptのコードをチェックするサンプルを2通り掲載します。
**:w**などでバッファの内容をファイルに書き込む時、非同期でエラーをチェックし、エラーがあればQuickFixにエラーを表示させます。

job機能が利用できるVimが必要です。
```:echo has('job')```で0が返るVimでは動作しません。

# テンポラリファイルにエラーを書き出すパターン

```js:sample.js
if () {
```

```vim:check.vim
function! s:callback(file, channel) abort
    execute 'cgetfile ' . a:file
    cwindow
    wincmd p
    echo 'finish'
endfunction

function! s:check() abort
    set errorformat=%f:\ line\ %l\\,\ col\ %c\\,\ %m,%-G%.%#
    let l:file = tempname()
    let job = job_start(add(split('eslint -f compact'), expand('%')), {
                \ 'out_io': 'file',
                \ 'out_name': l:file,
                \ 'close_cb': function('s:callback', [l:file]),
                \ })
endfunction

augroup sample
    autocmd!
    autocmd BufWritePost *.js call <SID>check()
augroup END
```

```bash:Vim起動
vim -Nu NONE -S check.vim sample.js
```

ここで**:w**でファイルに保存するとQuickFixにエラーが表示されます。

```:QuickFixの内容
js|1 col 5| Error - Parsing error: Unexpected token )
```

# バッファにエラー内容を出力するパターン

```js:sample.js
if () {
```

```vim:check2.vim
function! s:callback(channel) abort
    execute 'cgetbuffer ' . s:bufnr
    cwindow
    wincmd p
    execute 'bwipeout ' . s:bufnr
    unlet s:bufnr
    echo 'finish'
endfunction

function! s:check() abort
    set errorformat=%f:\ line\ %l\\,\ col\ %c\\,\ %m,%-G%.%#
    new
    let s:bufnr = bufnr('')
    setlocal bufhidden=hide
    setlocal buftype=nofile
    hide
    let job = job_start(add(split('eslint -f compact'), expand('%')), {
                \ 'out_io': 'buffer',
                \ 'out_buf': s:bufnr,
                \ 'close_cb': function('s:callback'),
                \ })
endfunction

augroup sample
    autocmd!
    autocmd BufWritePost *.js call <SID>check()
augroup END
```
ウィンドウを表示せずにバッファを開く方法が分からなかったので**:new**でバッファを作成した後、**:hide**でそのバッファのウィンドウを閉じています。
**:1new**で小さいウィンドウを作成したほうが良いのか迷いましたが、**:new**から**:hide**まで違和感がなかったのでサイズ指定せずに**:new**でウィンドウを作成しました。

```bash:Vim起動
vim -Nu NONE -S check2.vim sample.js
```

ここで**:w**でファイルに保存するとQuickFixにエラーが表示されます。
テンポラリファイルを利用したサンプルと同様のエラー内容が表示されました。

```:QuickFixの内容
js|1 col 5| Error - Parsing error: Unexpected token )
```

## 非同期ではないサンプル

おまけ。
チェックが終わるまでカーソルを動かせません。

```vim
function! s:check() abort
    set errorformat=%f:\ line\ %l\\,\ col\ %c\\,\ %m,%-G%.%#
    cgetexpr system('eslint -f compact ' . fnameescape(expand('%')))
    cwindow
endfunction

augroup sample
    autocmd!
    autocmd BufWritePost *.js call <SID>check()
augroup END
```
SequenceTypeについての備忘録

## 使いどころ

配列のように扱うクラスや構造体で `for in` や `map` などを使いたいとき

## ポイント

SequenceTypeプロトコルに準拠するためには`generate()`を実装する必要がある。

`generate()` の返り値 は`AnyGenerator`を利用することで専用の構造体等を実装する必要が無くなる。

Swift3.0からは`SequenceType`は`Sequence`に、`AnyGenerator`は`AnyIterator`にリネームされるなどゴソッと置き換わる模様


## 実装サンプル

Swift 2.2

```swift

struct Cowntdown {
    let start: Int
}

extension Cowntdown : SequenceType {

    func generate() -> AnyGenerator<Int?> {

        var times = 0

        return AnyGenerator {

            let nextNumber = self.start - times
            guard nextNumber > 0 else{
                return nil
            }

            times += 1

            return nextNumber
        }
    }

}

let threeTwoOne = Cowntdown(start: 3)
for count in threeTwoOne {
    print("\(count!)...")
}
```

Swift 3.0

```swift
struct Cowntdown {
    let start: Int
}

extension Cowntdown : Sequence {

    func makeIterator() -> AnyIterator<Int?> {

        var times = 0

        return AnyIterator {

            let nextNumber = self.start - times
            guard nextNumber > 0 else{
                return nil
            }

            times += 1

            return nextNumber
        }
    }

}

let threeTwoOne = Cowntdown(start: 3)
for count in threeTwoOne {
    print("\(count!)...")
}

```

## 参考にさせて頂いた記事
* http://swiftandpainless.com/implementing-sequencetype/
* http://tech.vasily.jp/entry/swift_sequence_2_2
* http://blog.sgr-ksmt.org/2016/03/22/any_generator_future/
* http://swiftdoc.org/v3.0/protocol/IteratorProtocol/
Android のチャットUIライブラリを作ってみた

新しくチャット機能のあるアプリを開発しようと思って、iOSだと[JSQMessagesViewController](https://github.com/jessesquires/JSQMessagesViewController)とかでチャットのUIが作れるライブラリがあって便利なんだけど、Androidでも同じように作ろうと思ったらいい感じのライブラリを見つけられなかったので、ないなら作ろうと思って作ってみた。

##ChatMessageView
今回作ったライブラリは[ChatMessageView](https://github.com/bassaer/ChatMessageView)というライブラリで完成形はこんな感じ。

<img src="https://qiita-image-store.s3.amazonaws.com/0/118567/7fb8bfc6-eda1-2f00-6c2f-eb6f407ce255.png" width="270">

数行のコードで使えます！

レイアウトファイルに追加する。

```xml:activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="match_parent"
              android:layout_height="match_parent">

    <jp.bassaer.chatmessageview.MessageView
        android:id="@+id/message_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

</LinearLayout>

```

あとはメッセージクラスに必要なパラメータを設定して

```java
messageView.init(messages);
```

MesseageViewにセットすればOK!

サンプルコード

```java:MainActivity.java

public class MainActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Bitmap icon1 = BitmapFactory.decodeResource(getResources(), jp.bassaer.chatmessageview.R.drawable.face_1);

        Message message1 = new Message();
        message1.setUserIcon(icon1);
        message1.setUserName("Michael");
        message1.setMessageText("hey! how are you?");
        message1.setRightMessage(true);

        ArrayList<Message> messages = new ArrayList<>();

        messages.add(message1);

        MessageView messageView  = (MessageView) findViewById(R.id.message_view);

        messageView.init(messages);
    }
}

```

##リポジトリ
https://github.com/bassaer/ChatMessageView

##最後に
今回作成したライブラリはメッセージ部分のUIを作りましたが、今後はJSQMessagesViewControllerのように、入力部分もセットで実装予定です。
よかったら使ってみてください！
改善の余地が多々あるのでコメント・フィードバック等頂けると幸いです。

##追記
コメントでご指摘いただいたスクロールの問題の修正とJSQMessagesViewControllerのような入力部分もセットにしたViewも追加しました。

![screens.png](https://qiita-image-store.s3.amazonaws.com/0/118567/a912b0d4-438b-bce3-84fa-3a07e23cd939.png)

これからもアップデートしていきます！
UbuntuでPythonの環境構築(pipがデフォルトでなかったとき)

記念すべきQiita初投稿はやっぱり自分用メモ。

DockerとかAnsibleとか触ってみたいなあと思い
とりあえず仮想環境の構築に挑戦したときに通った道。


## vagrantの準備
VirtualBoxは自分の環境にもともと入ってたのでそれをそのまま採用。

[公式サイト](https://www.vagrantup.com/downloads.html)からvagrantのイメージをダウンロード、
実行してインストールしてから

```
$ vagrant init ubuntu/trusty64; vagrant up --provider virtualbox
```

でUbuntuが入る。

そのまま母艦のTerminal上で

```
$ vagrant ssh
```

でsshでログイン。

## Pythonの現状確認
さっそくPythonの確認.


```
$ python -V
Python 2.7.6
$ python3 -V
Python 3.4.3
```
デフォルトで2.x系と3.x系が入っているようなので次はpip。

```
$ pip
The program 'pip' is currently not installed. To run 'pip' please ask your administrator to install the package 'python-pip'
```

また、

```
$ which pip3
```
で何の反応もないのでどうやらこのboxからとったUbuntuに
pipは入っていないらしい。

##pipインストール

```
$ curl -kL https://bootstrap.pypa.io/get-pip.py | sudo python3
```

参考
[Virtualenvwrapperの導入](http://qiita.com/_rdtr/items/5f3a9a9e2cb5a24f284e)
[vagrantコマンド一覧](http://qiita.com/htano/items/0c2ebde44e3fc92b223a)
python3.4のpathlib.Path.mkdirのメソッドをスワップして3.5の挙動を再現する

Python3から導入された`pathlib`を便利に使っています。しかし`Path.mkdir()`メソッドは3.4と3.5で引数の仕様が異なります。3.5では`exist_ok`が追加されて`True`を指定すると既にファイル・ディレクトリが存在していても`FileExistsError`が発生しません。

```py3
# python 3.4
Path.mkdir(mode=0o777, parents=False)
# python 3.5
Path.mkdir(mode=0o777, parents=False, exist_ok=False)
```

この3.5の仕様を3.4で使いたく工夫をしてみました。やってることは`Path.mkdir()`を入れ替えているだけです。

マルチスレッドの状況で安全かどうかは確かめていませんがまあ使えています。

```py3:mypathlib.py
import pathlib
import sys

def mkdir_ex(self, mode=0o777, parents=False, exist_ok=False):
    # python 3.5 以上の場合はオリジナルのメソッドを呼ぶ
    if sys.version_info >= (3,5):
        self.mkdir_orig(mode, parents, exist_ok)
    else:
　　　　　# python 3.5 未満の場合は exist_ok で例外をもみ消す
        try:
            self.mkdir_orig(mode, parents)
        except FileExistsError as e:
            if not exist_ok:
                raise e

# オリジナルのメソッドと新しいメソッドをスワップする
pathlib.Path.mkdir_orig = pathlib.Path.mkdir
pathlib.Path.mkdir = mkdir_ex
```

```py3:usage.py
from pathlib import Path
# Pathのメソッドをスワップするためにインポートする
import mypathlib

# スワップされたメソッドがコールされる
p = Path('make/new/directory')
p.mkdir(parents=True, exist_ok=True)
```
unknown error: path is not canonicalを回避した時のメモ

ローカルにあるファイルをアップロードするテストで下記のエラーが出た
（firefoxでは出なかったがchromedriverで実行したら出た)


```
Selenium::WebDriver::Error::UnknownError:
       unknown error: path is not canonical: /Users/username/reponame/../SampleFiles/xxxx.jpg

```
"path is not canonical"とは「パスの表記が不正」の意味らしい。
この場合は".."の部分があやしい（親のディレクトリを指定する ".."がそのまま文字列認識されている？)と思って、

テスト用ファイルが入っているディレクトリ指定を
↓これから
```file_path = File.join(File.dirname(__FILE__), '/../SampleFiles/')```

↓こう変えたら
```file_path = Pathname(File.dirname(__FILE__)).parent + 'SampleFiles/'```


ChromeでもFirefoxでもエラーが出なくなった。
new String() と String() の違い

PHPStormでJavaScriptのコードを書いていて

```javascript
var name = new String("hoge");
```

みたいなコードを書いたら
>Primitive type object wrapper used
>Checks for improper usage of wrappers for JavaScript primitive types. Also, warning will be produced when property of primitive type is modified, as assigned value will be lost.

という警告が表示された。で、

```js
var name = String("hoge");
```

と new を消したら警告も消えた。
new String() と String() で何が違うのかわからなかったので調べた。

# new String()
new String("hoge") は "hoge" という値を持ったStringクラスのオブジェクトを生成して返す。

# String()
String("hoge") はStringクラスのオブジェクトではなく、プリミティブデータ型の文字列の値を返す。

# プリミティブデータ型の文字列とオブジェクトの文字列
* プリミティブデータ型の文字列に対してそのラッパークラスがある。
* プリミティブデータ型の文字列は不変。例えば "hoge".substr(1, 2) は値を変更しているのではなく、元の文字列から新しい文字列を作っている。
* プリミティブ型のStringに対してメソッドを呼ぶと、プリミティブ型のStringはラッパークラスのオブジェクトの自動的に変換される。
* メソッドによっては文字の並びは同じでも型がプリミティブ型がラッパークラスかで結果が異なるものがある。eval()とか。
* 文字列を作るとき、あえてStringクラスのオブジェクトを使う理由はなさそう。

# 参考サイト
[String - JavaScript | MDN](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/String)
[データ構造 - JavaScript | MDN](https://developer.mozilla.org/ja/docs/Web/JavaScript/Data_structures#Strings)
PowerPoint(2011) for Macで組込みじゃないフォントスタイルを利用する方法


Windowsなら

> デザイン
> 　\> フォント
> 　　\> 新しいテーマのフォント パターンの作成

でユーザー定義のフォントスタイルが作成可能ですが、
MacのPowerPointではこれができません。

でもやる方法はあります。
面倒ですが。。

## ステップ

1. XMLを用意
2. 所定の場所に置く
3. PowerPoint for Macを起動

## XMLを用意

以下のテンプレートを編集してユーザー定義のフォントスタイルを作成します。
※UTF8です。

```xml:ユーザー定義用XMLフォーマット
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<a:fontScheme xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" name="$ユーザー定義名$">
    <a:majorFont>
        <a:latin typeface="$英数字用の見出しフォント$"/>
        <a:ea typeface="$日本語文字用の見出しフォント$"/>
        <a:cs typeface=""/>
    </a:majorFont>
    <a:minorFont>
        <a:latin typeface="$英数字用の本文フォント$"/>
        <a:ea typeface="$日本語文字用の本文フォント$"/>
        <a:cs typeface=""/>
    </a:minorFont>
</a:fontScheme>
```


下記5箇所を修正します。
> - $ユーザー定義名$
> - $英数字用の見出しフォント$
> - $日本語文字用の見出しフォント$
> - $英数字用の本文フォント$
> - $日本語文字用の本文フォント$


Windows版の↓この編集画面に入れるものと同様です。
![pp_20160809-214558.png](https://qiita-image-store.s3.amazonaws.com/0/130681/7aef690f-0f21-cd17-f34b-edf0b8c6a0a9.png "pp_20160809-214558.png")


> フォント名は正しく入力してください。

## 所定の場所に置く

下記の場所へ置きます。

> ~/Library/Application Support/Microsoft/Office/ユーザー テンプレート/個人用テーマ/Theme Fonts/

### アクセス方法
Finderで　`Shift+Command+G` を押す。
出てきたダイアログに上記を入力して`Enter`。



## PowerPoint for Macを起動

再起動後

> テーマ
> 　\> フォント

のプルダウン内に追加したフォントスタイルが ユーザー定義 として追加されています。
PHP 7.1からデフォルトで有効になる「Zend Signals」とは何か

下記PHP Internals MLでの議論によれば、今後「Zend Signals」がデフォルトで有効になる予定です。少なくとも7.1.0beta2時点では有効になっており、特に問題が見つからなければこのままリリースされるはずです。

- [\[PHP\-DEV\] Enable Zend Signals by Default](https://www.mail-archive.com/search?l=internals@lists.php.net&q=subject:%22%5C%5BPHP%5C-DEV%5C%5D+Enable+Zend+Signals+by+Default%22&o=newest)

# で、Zend Signalsって何？

「Zend Signals」または「Zend Signal Handling」というのはZend Engineの内部的なシグナルハンドリングの仕組みです。PHP言語の世界に新たな関数を追加するようなものではありません。

この有効・無効は`phpinfo()`で確認することができます。

![zend_signal_handling.png](https://qiita-image-store.s3.amazonaws.com/0/46856/59f40a2a-b448-c272-f607-908412b60783.png)

先ほど紹介したML上での議論によれば、ざっくり次のような話のようです（かなり端折ってます）。

> Dmitry「Zend Signalsを有効にすればOPcacheのシグナルハンドリングがマシになって、共有メモリに変なデータが残らないようにできる」
> Dmitry「さらに"safe execution timeout"の導入でZend Engineでの余計なチェックが要らなくなる」
> Dmitry「今日Zend Engineの無駄なチェックを外して、OPcacheに少しチェック足したりした」
> Dmitry「なので、Zend Signalsをデフォルト有効にしたいんだけど」
> Rasmus「賛成。それ入れたら7.0でセグフォ出るの治ったりしないかな」

サラっとRasmusが爆弾発言をしている気がします。7.0を高負荷環境で使っている方は要チェックかもしれません。

# 資料らしきもの

下記RFCによれば「Zend Signals」は5.4時代から実装されていたようですが、みんな存在すら忘れてたのを今回掘り起こして流用したような感じなんでしょうか。

https://wiki.php.net/rfc/zendsignals

正直なところ、このRFCを読んでもよくわからん印象ですよね…。

# php.ini設定

Zend Signals有効だと`zend.signal_check`という設定値が増えます。

> `zend.signal_check` `boolean`
> 置き換えられたシグナルハンドラを、シャットダウン時にチェックします。
>
> http://php.net/manual/ja/ini.core.php#ini.zend.signal-check

マニュアルの説明だと完全に意味がわからないんですが、PHPのスタートアップ時に設定したシグナルハンドラがシャットダウン時に置き換えられていないかをチェックして、万一置き換えられていたら警告を出すという機能のようです。Zend Signals自体のデバッグ用といった感じでしょうか。

# まとめ

この修正により、PHP 7.1以降でOPcacheまわりの安定性が増しているのかもしれません。全体的に謎が多めの印象です。
inputTypeに指定できる属性値


|値 | 内容 |
|:-----------|:------------|
|none|入力不可|
|text|普通のテキストを入力|
|textCapCharacters|すべて大文字で入力する|
|textCapWords|単語の先頭を大文字で入力する|
|textCapSentences|文章の先頭を大文字で入力する|
|textAutoCorrect|文字の入力を自動で修正する|
|textAutoComplete|文字の補完入力をする|
|textMultiLine|文字を複数行入力する|
|textImeMultiLine|通常の文字入力時は複数入力を許可せず 、IMEによって複数行入力を設定する|
|textUri|URLを入力する|
|textEmailAddress|メールアドレスを入力する|
|textEmailSubject|メールの件名を入力する|
|textShortMessage|ショートメッセージを入力する|
|textLongMessage|ロングメッセージを入力する|
|textPersonName|人名を入力する|
|textPostalAddress|住所を入力する|
|textPassword|パスワードを入力する|
|textVisiblePassword|パスワードを見える状態で入力する|
|textWebEditText|HTMLを入力する|
|textFilter|他のデータでフィルタされた文字を入力|
|textPhonetic|発音記号を入力する|
|number|数値入力する|
|numberSigned|符号付きの数値を入力する|
|numberDecimal|小数入力する|
|phone|電話番号を入力する|
|datetime|日付時刻を入力する|
|date|日付を入力する|
|time|時刻を入力する|

![スクリーンショット 2016-08-09 20.18.39.png](https://qiita-image-store.s3.amazonaws.com/0/39073/9e09dd30-7c1d-4877-44e7-a014ba3a1271.png "スクリーンショット 2016-08-09 20.18.39.png")
【Objective-C】データベースに保存した日付と今日の日付を比較する【XCode】

NSDateで取得した日付をカスタマイズした形式で表示したい。
日付だけを比較したいのに時刻が邪魔でうまくいかない…
そんな状況に陥ったので解決した方法を記しておきます。
いくつか方法はあると思いますが、取得したデータの時刻は比較しないようにすることで対処しました。
##実装

```objc
NSDateFormatter *dateFormatter = [NSDateFormatter new];

//GMTとの差を加えない
[dateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];

//表示させる形式を指定
[dateFormatter setDateFormat:@"yyyy年MM月dd日"];

//dateFormatterを使い今日の日付を一度文字列にしてからNSDate型にする
NSDate *today = [dateFormatter dateFromString:[dateFormatter stringFromDate:[NSDate date]]];

//データベースにTEXTで保存しておいたdbSampleDateをdateFormatterを使いNSDate型にする
NSDate *formatSampleDate =[dateFormatter dateFromString:dbSampleDate];

//todayとformatSampleDateを比較する
NSComparisonResult result = [today compare : formatSampleDate];


NSLog(@"今日：%@ と　期限日:%@ と 元データ:%@" , today , formatSampleDate , dbSampleDate);
NSLog(@"比較結果:%ld" , (long)result);
```


![スクリーンショット 2016-08-09 20.53.37.png](https://qiita-image-store.s3.amazonaws.com/0/133946/8a497d16-c792-8e24-ffb8-a237061f9161.png)



```
-1 = NSOrderedAscending
0  = NSOrderedSame
1  = NSOrderedDescending
```


あとは`result`を煮る（`swich`）なり焼く（`if`）なり好きにして〜
##参考
[日付をNSComparisonResultで比較するときに、NSDateから時間部分を取り除く](http://onot.tumblr.com/post/82876666413/%E6%97%A5%E4%BB%98%E3%82%92nscomparisonresult%E3%81%A7%E6%AF%94%E8%BC%83%E3%81%99%E3%82%8B%E3%81%A8%E3%81%8D%E3%81%ABnsdate%E3%81%8B%E3%82%89%E6%99%82%E9%96%93%E9%83%A8%E5%88%86%E3%82%92%E5%8F%96%E3%82%8A%E9%99%A4%E3%81%8F)
2つのディレクトリ間で差分のあるファイルパスをCSVにまとめるシェルスクリプト

# 2つのディレクトリ間で差分のあるファイルパスをCSVにまとめるシェルスクリプト

## 概要

2つのディレクトリの間で差分のあるファイルパスを出力するシェルスクリプトの紹介です。
今回はShift_JISのCSVにまとめます。

## 差分の比較
diffコマンドを使用します。
使用するオプションは下記です。

|オプション|内容|
|--:|:--|
|-r|ディレクトリ配下を再帰的に比較します。|
|-q|差分のあったファイルパスと、どういう差（「片方のディレクトリのみ存在する」「ファイルの内容に差がある」）なのかをのみ表示します。|

## 文字コードの変換
今回はnkfコマンドを使用します。
使用するオプションを変更すれば別の文字コードにも変換可能です。
今回使用するオプションは下記です。

|オプション|内容|
|--:|:--|
|-s|Shift_JISへ変換します。|
|--overwrite|引数に指定したファイルを文字コードを変換した内容で上書きします。|

（文字コードを変換できればなんでも良いです。iconvでも大丈夫です。）

## CSVに出力される内容

### 「片方のディレクトリのみ存在する」場合
```
Only in,/var/www/html/production/: file1.txt
```

###「ファイルの内容に差がある」場合
```
differ,/var/www/html/production/file2.txt and /var/www/html/staging/file2.txt
```

## 実際のシェルスクリプト

`diff`の実行部分で`LANG=en`を指定しているので、サーバの言語設定が`en`以外の場合でも
実行時は`en`の結果が`sed`に渡ります。

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

check_diff() {
  local dir1=$1
  local dir2=$2
  local export_path=$3

  local now=$(date "+%Y%m%d_%H%M%S")
  local file_name='diff_'${now}'_sjis.csv'
  local working_dir=$(cd $(dirname $0); pwd)

  # 出力先に指定がなければ実行場所に出力します
  if [ -n "$3" ]; then
    export_path=${working_dir}
  fi

  export_path=${export_path}${file_name}

  echo 'DIR1                : '${working_dir}/${dir1}
  echo 'DIR2                : '${working_dir}/${dir2}
  echo 'EXPORT PATH         : '${working_dir}/${export_path}

  export_diff ${dir1} ${dir2} ${export_path}
  convert_encoding ${export_path}
}

export_diff() {
  local dir1=$1
  local dir2=$2
  local export_path=$3

  LANG=en diff -qr ${dir1} ${dir2} | sed \
    -e 's:Only in :Only in,:' \
    -e 's:Files :differ,:' \
    -e 's: differ$::' \
    > ${export_path}
}

convert_encoding() {
  local export_path=$1

  nkf -s --overwrite ${export_path}
  echo 'CHARACTER ENCODING  : '$(nkf -g ${export_path})
}

readonly DIR1=$1
readonly DIR2=$2
readonly EXPORT_PATH=$3

echo 'Check diff start ...'
check_diff ${DIR1} ${DIR2} ${EXPORT_PATH}
echo 'Check diff end.'

exit 0

```
## 使い方
check_diff.sh に実行権限を与え、下記のように実行します。

第一引数に比較したいディレクトリ１
第二引数に比較したいディレクトリ２
第三引数に比較結果を出力したいディレクトリ（指定しない場合は実行したディレクトリに出力されます）

```sh
./check_diff.sh /var/www/html/production/ /var/www/html/staging/
```

## 実行結果
実行結果として下記が表示されます。

+ 比較対象のディレクトリ
+ 出力先のパス
+ 出力した結果ファイルの文字コード

```sh
[root@XXXXXX ~]# ./check_diff.sh /var/www/html/production/ /var/www/html/staging/
Check diff start ...
DIR1                : /var/www/html/production/
DIR2                : /var/www/html/staging/
EXPORT PATH         : /var/www/html/diff_20160809_181206_sjis.csv
CHARACTER ENCODING  : Shift_JIS
Check diff end.
```

## 参考
+ [Man page of DIFF](https://linuxjm.osdn.jp/html/gnumaniak/man1/diff.1.html)
+ [nkfを使ってファイルの文字コードを変換する ｜ Developers.IO](http://dev.classmethod.jp/tool/exchange-file-encode-by-nkf/)
after_commitで変更されたカラムの情報を取得する

callbackで変更されたカラムの情報を利用したい場合、

after_saveまではchanges で取得できるが

after_commit では当然だが変更が完了しているため取得できない。

previous_changesを使うことで取得できる

```rb
class User < ApplicationRecord
  after_save do
    p "after_save"
    p "changes"
    p self.changes
    p "previous_changes"
    p self.previous_changes
  end

  after_commit do
    p "after_commit"
    p "changes"
    p self.changes
    p "previous_changes"
    p self.previous_changes
  end
end

u = User.find 1
u.name = "BBB"
u.save

# "after_save"
# "changes"
# {"name"=>["AAA", "BBB"], "updated_at"=>[Tue, 09 Aug 2016 10:57:44 UTC +00:00, Tue, 09 Aug 2016 10:58:51 UTC +00:00]}
# "previous_changes"
# {}

# "after_commit"
# "changes"
# {}
# "previous_changes"
# {"name"=>["AAA", "BBB"], "updated_at"=>[Tue, 09 Aug 2016 10:57:44 UTC +00:00, Tue, 09 Aug 2016 10:58:51 UTC +00:00]}
```
.NET Framework 4.6.1 を Windows7 にインストールする手順

# やりたいこと

* .NET Framework 4.6.1 を Windows7 にインストールする。

# 前提環境

* OS: Microsoft Windows 7 Professional 6.1.7601 Service Pack 1 (SP1) ビルド 7601 x64

# インストールするソフトウェア

* .NET Framework 4.6.1

# 手順

## インストーラをダウンロード

[Windows 7 SP1、Windows 8、Windows 8.1、Windows 10、Windows Server 2008 R2 SP1、Windows Server 2012、Windows Server 2012 R2 用の Microsoft .NET Framework 4.6.1 (Web インストーラー)](https://www.microsoft.com/ja-jp/download/details.aspx?id=49981) で **ダウンロード** を選択します。

![image](https://qiita-image-store.s3.amazonaws.com/0/112128/4bdfb5fa-cdb9-3cb5-d6e2-cd78d0b0e966.png)

## インストーラを実行

ダウンロードされたインストーラ **NDP461-KB3102438-Web.exe** を実行します。

- [x] 同意する

**インストール** を選択。

![image](https://qiita-image-store.s3.amazonaws.com/0/112128/b7fb3053-5e8b-a496-b091-2cfaa751d3ec.png)

**完了** を選択。

![image](https://qiita-image-store.s3.amazonaws.com/0/112128/8a66087b-dc94-ceb4-cdc7-e43e5c59be80.png)

# 完了

# 参考文献

- [.NET Framework のインストール](https://msdn.microsoft.com/ja-jp/library/5a4x27ek(v=vs.110).aspx)
Spring Data Restで取得結果にもIDを追加する


# Spring Data Restで取得結果にもIDを追加する

## あれ？IDどこいった？

Entityには定義しているのに、取得したデータにIDが入っていなくて驚きました。
Linkの方に含まれているので、データの指定時には問題なかったのですが、
View側にデータを渡すときにIDも渡せたほうが都合がよかったので、どうやってやるんだろうと調べていました。

以下のようなクラスを定義してあげるだけで、設定することができました。

```
@Configuration
public class RepositoryConfig extends RepositoryRestMvcConfiguration {
  @Override
  public void configureRepositoryRestConfiguration(RepositoryRestConfiguration config) {
    config.exposeIdsFor(User.class, Depertment.class);

  }
}
```
最近のUbuntu（15.04以降）でDockerの--insecure-registryの設定

systemd が導入されて以降の Ubuntu (15.04以降) で、Dockerのプライベートレジストリを立てる時の`--insecure-registry`の設定方法

やりたいことは（HTTPSじゃなくて）素のHTTPでプライベートレジストリを立るってこと。
Dockerはじめたばかりで、Ubuntuもそんなに触らないので、調べながらやってたら、思いの外はまったので、まとめてきます。

# ネタ元
結局は、以下のブログ記事の内容で、できました。
「[Changing the Docker daemon options in systemd on Ubuntu 15.04](http://www.artificialworlds.net/blog/2015/08/27/changing-the-docker-daemon-options-in-systemd-on-ubuntu-15-04/)」

## 設定ファイル

以下の設定ファイル

```text:
[Service]
ExecStart=
ExecStart=/usr/bin/docker daemon -H fd:// --insecure-registry=myreg.example.com:5000
```

を、次のいずれかの方法で配置する。
（`myreg.example.com`は、適宜、変更のこと。）

### 手で配置

上記ファイルを`/etc/systemd/system/docker.service.d/`下に設定ファイルを置く。
（ファイル名などの習慣は、よく知らない...）

### `systemctl`を使う

あるいは、以下のコマンド

```shell-session:
$ sudo systemctl edit docker
```

で立ち上がったエディタを使って打ち込み、保存、エディタを抜ける。
（ちなみに、上記ディレクトリには`override.conf`というファイルができた。）

## Dockerの再起動

設定ファイル配置のあと、Dockerサービスを再起動する。

```shell-session:
$ sudo systemctl daemon-reload
$ sudo systemctl restart docker
```

# リファレンス

https://github.com/docker/docker/issues/23228
本家のバグ報告。
「それ`systemd`だから」「できた」で解決済みになってる。

https://docs.docker.com/engine/admin/systemd/
本家サイトの systemd 対応文書。
分かってから読むと、こういうことが書いてあったんだなと思う（けど、初見では難しいな）

http://docs.docker.jp/engine/articles/systemd.html
Docker ドキュメント日本語化プロジェクトのsystemdのページ。

[【Docker】プライベートレジストリ`--insecure-registry`OSごと設定まとめ](http://qiita.com/okamu_/items/d9d3f825a8afc3f14c32)
いろんなOSごとの設定まとめ。
Docker for Macでもはまったので、助かった。
FirebaseのDatabaseで詰まったとこ

CocoaPodsにインストールしたりjsonファイルを入れたりと、コンソールで指示されたことを一通りやったあと

```swift:ViewController.swift
import UIKit
import Firebase

class ViewController:UIViewController{

    let ref = FIRDatabase.database().reference()

    override func viewDidLoad() {
        super.viewDidLoad()
```

みたいな感じに書こうとすると

```
Terminating app due to uncaught exception 'FIRAppNotConfigured', 
reason: 'Failed to get default FIRDatabase instance. 
Must call FIRApp.configure() before using FIRDatabase.'
```
というエラーが出てしまった。
FIRApp.configure()が呼ばれる前にFIRDatabaseを使おうとしてるのがいけないらしい


AppDelegate.swiftでFIRApp.configure()をdidFinishLaunchingWithOptionsに書いてたので

init()を追加して、その中に移すとちゃんと動いてくれた

```swift:AppDelegate.swift
    override init() {
         super.init()
         FIRApp.configure()
    }

```
rubocop がなんかちゃんと動いてくれない（後で調べる）


ruby 2.3.1 
rubocop 0.42.0
vim に syntastic いれて使ってる。

へんなエラーが出るしなんかちゃんと動いてないっぽい。。

```
hoge_controller.rb:1:1: C: Missing frozen string literal comment.
require_relative '../base_controller'
^
fuga_controller.rb:46:1: E: unexpected token $end
(Using Ruby 2.3 parser; configure using TargetRubyVersion parameter, under AllCops)

```


 
### 追記（一応解決）

Missing frozen string literal comment ってやつはこれ追加したらでなくなった。
なぜかというと Ruby3.0 に備えて Ruby2.3 だとうんぬんかんぬんって話みたいなので適当にぐぐってください。

```
Style/FrozenStringLiteralComment:
    Enabled: false
```

で、よくわからないのが unexpected token $end って方で、rubocop.yml をいじっていたらでなくなっていた。どういうことだろう。。。これも後で調べるかもしれない。
Atomでコードジャンプしたいときは、Goto Definition というパッケージを使うと便利

:warning: Goto Definition は deprecated なパッケージになってしまいました。
GitHub のリポジトリもアーカイブ済みなので、今後メンテナンスされることはもうありません。
お気をつけください :pray: 

---

Atomでもコードジャンプしたいと思って調べてたら、symbols-viewというパッケージが最初から入っていることが分かって使おうと思ったのですが、これctagsが必要なんですね。
出来ればパッケージの機能はそれだけで完結させたい...。ということで何かないかなーと探していたところ、ありました。

https://atom.io/packages/goto-definition
https://github.com/faceair/atom-goto-definition

Atom上では`goto-definition`で検索すれば出てきます。
これを入れるだけでメソッドの定義元にジャンプすることができます。
macならメソッドのところにカーソルを置いて`Alt+Cmd+Enter`で飛べます。
対応している言語は

```
JavaScript(ES6 && JSX), CoffeeScript, Python, Ruby, PHP, KRL
```

です。(KRLってなんだ...？)
導入も使い方もシンプルでした。
Androidでナビゲーションバーを一時的に隠したい

一時的にナビゲーションバーを隠す実装が必要だったので、色々試してみました。

## SYSTEM_UI_FLAG_HIDE_NAVIGATION
呼ばれた画面でナビゲーションバーを隠す方法。

```java
View view = getWindow().getDecorView();
view.setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);
```

ただ、`SYSTEM_UI_FLAG_HIDE_NAVIGATION`だけだとバーを一時的に隠すだけ（＝画面をタッチしたりインタラクションがあるとバーが下から現れる）ので、`SYSTEM_UI_FLAG_IMMERSIVE`も一緒に書いてあげると良い感じになります。

## SYSTEM_UI_FLAG_IMMERSIVE
ナビゲーションバーを隠して、インタラクションがあっても非表示にし続ける方法。

```java
View view = getWindow().getDecorView();
view.setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_IMMERSIVE);
```

`Immersive`には「没入」という意味があって、「バーを非表示にし続けることでユーザを邪魔しないでアプリに没入させる」という意図があるっぽい。

だがしかし、この`SYSTEM_UI_FLAG_IMMERSIVE`、API level 19 (Android 4.4: KitKat) からのサポートなので、Android 4.3以下では使えず。なんてこった。
仕方ないので、理想動作はAndroid 4.4以上でのみ実現としました。

## IMMERSIVE効かない問題
`SYSTEM_UI_FLAG_IMMERSIVE`をセットしてる画面でダイアログを表示すると、隠れていたはずのナビゲーションバーが表示されてしまう問題がありました。:pensive:
前面に別のWindow貼ってるのでそりゃそうだって感じですが、ダイアログ側に下記のように書くと解消できました。（ダイアログは`DialogFragment`を継承しています。）

```java
@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);

    Window window = getDialog().getWindow();
    window.addFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE);
}
```

## 参考サイト
- KitKat (Android 4.4) の UI について
http://y-anz-m.blogspot.jp/2013/11/kitkat-android-44-ui.html
- Android Immersive モードを使ってみた
http://extra-vision.blogspot.jp/2016/04/android-immersive.html
Datastoreに外部からアクセスする方法

GAE/pyな環境でDatastoreにアクセスしていますが、GCEやローカル環境からアクセスしたくなることもあります。

方法は2つくらいあると思います。

- GAEのRemote API (remote_api_shell.py)
- Google Cloud Datastore API (gcloud-python)

他にもアプローチはありそうですが。。

- Google Cloud Datastore RPC APIのラッパーライブラリ
- GAEのTask Queue

など。

# Remote APIを使う

[Accessing App Engine with Remote API ](https://cloud.google.com/appengine/docs/python/tools/remoteapi)
標準の機能としてRemote APIがあります。
gcloud sdkでpython sdkを入れる？と`remote_api_shell.py`にパスが通っていると思います。
さらにGAEのapp.yamlに

```yaml:app.yaml
application: PROJECT_ID
version: 1
runtime: python27
api_version: 1

## ここを追加
builtins:
- remote_api: on
```
のようにbuiltinsのremote_apiを有効にします。

その状態でdeployが完了すると、

```
$ remote_api_shell.py PROJECT_ID
```
とすることでローカルのpython環境からリモートのdatastoreなどに直接触れると思います。
ローカル環境で`google.appengine.ext.ndb`がimportできる環境だと、ndbのモデルもimportしてAppEngine上と同じようにアクセスできて便利です。

```py
from google.appengine.ext import ndb

class MyModel(ndb.Model):
    number = ndb.IntegerProperty(default=42)
    text = ndb.StringProperty()

# GAE上で取得するようにリモートのデータを取得できる。
models = MyModel.query().fetch()
```

ただし、注意点として、かなり遅いです。
原因を調べようとしてGAEのログを見ると、
<img width="552" alt="スクリーンショット 2016-08-09 17.57.32.png" src="https://qiita-image-store.s3.amazonaws.com/0/42594/024da87e-5fb7-1426-cdc9-fb1145d94fa8.png">

のように、`/_ah/remote_api`あてにhttpリクエストが発生しています。おそらくquery単位でhttpリクエストをたくさんしているためにオーバーヘッドが大きくなって処理が重いのかな、と思います。

# Cloud Datastore APIを使う。

今年になってリリースされたGoogle Cloud Datastore APIを使うとパフォーマンスの問題は解決しそうです。
[Google Cloud Datastore API 新ベータでパフォーマンスが大幅アップ](http://googlecloudplatform-japan.blogspot.jp/2016/04/google-cloud-datastore-api.html)

こちらの記事を見ながらやると分かりやすいです。
[Getting started with the Google Cloud Datastore API ](https://cloud.google.com/datastore/docs/datastore-api-tutorial)

gcloudコマンドが有効な状況で

```
$ pip install gcloud
```
とするとgcloud-pythonがインストールできます。

gcloudのauthが有効ならpythonのスクリプトやコンソールからdatastore関連のライブラリをimportして使うことができます。

```py
from gcloud import datastore

client = datastore.Client(PROJECT_ID)
# こうするとqueryでiteratorが取得できる。
task = cli.query(kind='Task').fetch()
```
使い方はチュートリアルや以下のgithubページを確認してください。
[gcloud-python](https://googlecloudplatform.github.io/gcloud-python/#/)

まずremote apiに比べてパフォーマンスがいいです。
また、datastoreにセッションを貼ったままなのか、iteratorも遅延fetchでcursorがそこに来るたびに通信して取得しているようです。
そのため、Remote APIのようにたくさんの情報を取得しようとすると固まったり、することが少ないです。

### 注意点

注意点としてはまだbeta版なので仕様などは色々変更になる可能性があります。
また、gcloudの認証が通っている環境である必要があります。
さらに、ndbのようなORMapperがないので、ちょっと編集などがしづらく、GAEのコードに影響を与える可能性もあります。

とはいえ、GCE環境からアクセスするときなどには都合がいいので、これからは是非こちらのAPIを使うべきでしょう。
正式リリースではndb等が使えるようになるかもしれません。


# Google Cloud Datastore RPC APIのラッパーライブラリ

Datastore RPC APIのpythonラッパーライブラリが公式に用意されています。
[GoogleCloudPlatform/google-cloud-datastore :googledatastore
](https://github.com/GoogleCloudPlatform/google-cloud-datastore/tree/master/python)

一応、RPC APIのアップデートに追従してメンテは細々とされているようです。

ただ、authenticate credentialが必要だったり、interfaceがすこし古い感じなので、あまりお勧めはできなさそうです。

# Task Queue

Push Queueなどを上手く使えば外部トリガーでDatastoreの情報の書き換えなどはできます。
ただ、あらかじめtaskを用意しておいたり、taskの時間制限等があるので、アクセスできている、という感じではないです。
NVIDIA Jetson TX1でOpenCV3をビルドする

0. CUDAなどをインストール(JetPack参照)
1. OpenCVをダウンロード

    ```bash
wget https://github.com/Itseez/opencv/archive/3.1.0.zip -O /tmp/opencv-3.1.0.zip
cd /tmp
unzip opencv-3.1.0.zip
cd opencv-3.1.0
git clone --depth 1 https://github.com/Itseez/opencv_contrib.git opencv_contrib
cd opencv_contrib
git fetch origin --tags --depth 1
git checkout 3.1.0
```
2. 依存パッケージのインストール

    ```bash
sudo apt-get -y -qq install cmake git libgtk2.0-dev ocl-icd-opencl-dev qt5-default
```
3. ビルド設定

    ```bash
mkdir build && cd build
cmake .. \
    -DWITH_OPENGL:BOOL=ON \
    -DWITH_QT:BOOL=ON \
    -DWITH_CUDA:BOOL=ON \
    -DCUDA_ARCH_BIN="5.2" \
    -DCUDA_ARCH_PTX="5.2" \
    -DCMAKE_BUILD_TYPE=RelWithDebugInfo \
    -DCMAKE_INSTALL_PREFIX=/usr/local \
    -DBUILD_TESTS:BOOL=OFF \
    -DBUILD_PERF_TESTS:BOOL=OFF \
    -DWITH_FFMPEG:BOOL=OFF \
    -DENABLE_NEON:BOOL=ON \
    -DBUILD_EXAMPLES:BOOL=ON \
    -DINSTALL_C_EXAMPLES:BOOL=OFF \
    -DINSTALL_PYTHON_EXAMPLES:BOOL=ON \
    -DOPENCV_EXTRA_MODULES_PATH=../opencv_contrib/modules
```
4. ビルド

    ```bash
make -j4
```
5. インストール

    ```bash
sudo make install -j4
sudo ldconfig
```

6. 環境変数を更新

    ```bash
echo 'export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH' >> ~/.bashrc
```

### テスト

```bash
cd opencv-3.1.0/samples/gpu
g++ `pkg-config --libs
Bash on Ubuntu on Windows 上で GROMACS 最新版をビルド

人柱シリーズその２。
※ その１ → [Qiita: Bash on Ubuntu on Windows 上で PyMOL をインストールして起動したまでは良いものの分子を表示できなかった話](http://qiita.com/inferist/items/0546c04812c51acdd2bb)

Bash on Ubuntu on Windows のインストール自体については [その１](http://qiita.com/inferist/items/0546c04812c51acdd2bb) や [他記事](http://qiita.com/Aruneko/items/c79810b0b015bebf30bb) をご参照ください。

ちなみに、最新版でない GROMACS (v4.6) は apt-get でそのまま入るのでビルド作業は要りません。

#下準備
基本的に [公式インストラクション](http://www.gromacs.org/Documentation/Installation_Instructions_5.0) の通りにやれば大丈夫です。

"CMake version 2.8.8 or later" を入れておけと書いてあるので入れます。

```
sudo apt-get install cmake
```

あと、make の段階で 「"makeinfo" が無い」 と怒られたので追加しました。

```
sudo apt-get install texinfo
```

※ texinfo に makeinfo が含まれているようです。

GROMACS の最新版ソースは [公式](http://www.gromacs.org/Downloads) からダウンロードしてください。

#ビルド
[公式インストラクション](http://www.gromacs.org/Documentation/Installation_Instructions_5.0) の通りにやるだけです。
[オプション](http://www.gromacs.org/Documentation/Installation_Instructions_5.0#typical-gromacs-installation) はお好みで。

```
tar xfz gromacs-5.x.x.tar.gz
cd gromacs-5.x.x
mkdir build
cd build
cmake .. -DGMX_BUILD_OWN_FFTW=ON -DREGRESSIONTEST_DOWNLOAD=ON
make
make check
sudo make install
source /usr/local/gromacs/bin/GMXRC
```

make check で走る regressiontests も
![image](https://qiita-image-store.s3.amazonaws.com/0/54184/59f51909-ccef-1ff7-b49a-7cb1092e3854.png)
大丈夫そう。

![image](https://qiita-image-store.s3.amazonaws.com/0/54184/c5a48d11-da41-7a03-d93f-711f7f87aa2e.png)

![image](https://qiita-image-store.s3.amazonaws.com/0/54184/6c6072e5-2619-173e-69e6-dbda5f9f4d44.png)

はい。

#その他
Windows で GROMACS を動かす試み

[産総研: 「GROMACSと連携ソフトウエアによる分子動力学計算 updated」](https://staff.aist.go.jp/makoto-yoneya/MDforKOUBUNSHI/)
　これは MinGW、tdm-gcc でビルドしてるっぽい。
[GROMACSをVisual Studioでビルドする話](http://sage-t.tumblr.com/post/83732368436/gromacs%E3%82%92visual-studio%E3%81%A7%E3%83%93%E3%83%AB%E3%83%89%E3%81%99%E3%82%8B%E8%A9%B1)
　苦労したみたいです。

今後は Bash on Windows 上での実行も選択肢としてアリかもしれませんね。
現状 対応していない GPU は使えませんが。
機械学習怖い話

これは、私が実際に体験した話なんですがね。

---

その時私は、ニューラルネットワークを使って、
特定の文章を機械が読める特殊な形式に変換する、
という実験をやってたんだ。

---

でも何しろニューラルネットワークなんて大学でちょびっと習ったっきりなもんで、
処理ソフトについてるチュートリアルをやってみたり、インターネットに転がってるサンプルコードを読んでみたり、

---

とにかくいろいろやってみるしかない、ってんでいろいろ勉強して、
やーっと、それらしいものが動くようになった。

---

あるところからもらってきたデータセット、これを仮にデータAさんとしましょうか、データAさんでニューラルネットワークを学習してあげたあとに、それらしい入力をニューラルネットに与えてみる。
そうすると、けっこう面白い結果が出てくるようになったんですね。

---

いろいろ悩んでやってみた結果ちゃんとした出力が出てきたわけですから、それはもううれしかった。

---

これはいいな〜、すごいな〜、っていうんで、こんどは別のデータ、こちらはデータBさんとしましょうか、こいつでも学習させてみて、結果を見てみようということになった。

---

さっそくデータBさんをニューラルネットワークに与えたいとこなんですが、そのまえに簡単な下処理をしないといけない。

---

データBさんから必要な列だけをとってくる。
するとたまに、べらぼうにデータが長い行があるんで、そういうのは取り除いてあげる。
それから全角英字だの半角カタカナだのというのを正規化して、
最後にデータの4分の3を学習用に、4分の1を検証用のデータに分けてあげた。

---

ニューラルネットワークを学習用に動かす。

ぶうーーんとファンの音がなって、学習が始まった。

---

学習の途中では、進み具合を知るために200ステップごとにモデルの評価値が出てくるんです。
最初の200ステップは、
お、76.64か・・・
次は、31.04。
この評価値は低いほどいいんで、数字が減るように固唾を呑んで見守るんですね。

---

27.35。
26。
24.38。
少ーしずつ数字が減っていく。
ニューラルネットワークが変換パターンを覚えていくのが見えるようで、そりゃ、うれしいもんです。

---

10.62。
9.53。
8.68。
8.38。
7.86。
7.53。
7.19。
どんどんどんどん下がっていく。

---

評価値がだいたい下がりきったところで、学習を止めた。

---

そしたら学習した結果が見てみたくなった。
なにか適当な入力を与えると、それに対応した表現が出てくるかを確認するんですね。

---

それで、どんなテキストで検証しようかなー、と、
参考にするために、まずは学習用に与えたデータを見てみた。

---

するとね。なーんか様子がおかしいんだ。

データBさんってのは、入力と出力がペアになってて、
機械に読ませるための表現を出力するとはいえ、
人間が見ても出力が入力のどのへんと対応するかはわかるようになってる。

---

でも、ニューラルネットワークに与えたデータを見てみると、
入力と出力がまるでちんぷんかんぷんで、噛み合ってない。

アチャー、やっちゃった。

---
データBさんを下処理する段階で、処理の方法を間違えて、行と列の対応がめちゃめちゃになっちゃっていたんだ。

---

はあー、データの下処理からやり直しか。時間、ムダにしちゃったな。
そう思いながら、こんどは間違えないように、もう一回下処理をやっていく。

---

と、ふと作業の手がとまった。

---

アレッ、おかしいぞ・・・？

---

入力と出力の対応がめちゃめちゃってことは、そこに意味のある法則はないはずなんだ。

---

でもさっき、学習の評価値はどんどん下がっていった。
あれは確かに、**「何か」**を学習していたんだ。

---

それじゃあボクのニューラルネットワーク、
一体**「何」**を学習していたんだろう・・・？

---

# キャーーー！！！

---

# 教訓

* データの下処理は慎重に。
    * 特に教師あり学習に使う入力と正解の組み合わせはずれないように細心の注意を払う。
* ニューラルネットワークは自由度が高いので、入力と正解がずれててもそこそこの評価値が出たりするらしい。

---

# 終
node.jsで秘密鍵で署名して公開鍵で検証する

    var cryptor = require('crypto');
	var sign = cryptor.createSign('RSA-SHA256');
	sign.update('some data to sign');
	var privateKey = fs.readFileSync(path.resolve('./signkey/secret.key'), "utf8");
	var signedData = sign.sign(privateKey, 'base64');

	var verify = cryptor.createVerify('RSA-SHA256');
	verify.write('some data to sign');
	verify.end();
	var publicKey = fs.readFileSync(path.resolve('./signkey/public.key'), "utf8");
	console.log(verify.verify(publicKey, signedData, 'base64'));

sign時とverify時でフォーマットをbase64ならbase64で合わせないと検証に失敗します。
iOSSimulatorと実機でフォントが違う現象


# 現象
実機とSimulatorでフォントが変わっている

# 原因
主要言語によってフォントが変わる為
英語で設定している場合、日本語を表示する際に下記ロジックになるようです。

1. 英語フォントで日本語表示できない
2. 代わりに中国語のフォントで対応する

→優先順位の高い中国語フォントで表示される

# 解決方法
## とりあえずSimulatorだけ直す場合
Simulatorの使用言語を日本語に変更
設定 > 一般 > 言語と地域 > iPhoneの使用言語
を日本語に設定
使用する言語の優先順位で日本語が一番上にあればOK

## Codeで修正する場合
下記を参考

http://qiita.com/usagimaru/items/46c27c42e862fb8aba7e#%E5%AE%9F%E8%A3%85
xymonクライアントインストール

サーバ監視ツールのxymonを監視対象のサーバにインストールしましたが、再起動後になぜかステータスが更新されない。。
そもそもサービスが起動していないじゃないか！？ということがありました。。
頻繁に再起動なんてしないですので忘れがちですよね。

毎回 手作業で実施するのも面倒なので、色々参考にしながらサーバ再起動時にxymonクライアントも一緒に起動させるようにしてみました。
備忘録ですが、ご指摘あればよろしくお願い致しますm(_ _)m

参考：クライアントのインストールについては下記サイト参照
http://www.server-kanshi.net/install/xymoninst.html

※以下作業は、CentOS6.8にて実施しています。
(CentOS7.xだと、多少記述が変わると思います)

実際の作業はここから

$ cd /etc/rc.d/init.d

・以下ファイル名で作成(ファイル名はご自由にどうぞ)
$ vi xymonclient

```shell-session
#!/bin/sh
#
# chkconfig: 2345 87 87
# description: xymon client

# /usr/local以下にクライアントをインストールした場合
HOBBITHOME=/usr/local/xymon

case $1 in
  start | stop | restart )
    [ -x $HOBBITHOME/runclient.sh ] && \
    $HOBBITHOME/runclient.sh $1
  ;;
  *)
    $HOBBITHOME/runclient.sh start
  ;;
esac
exit 0
```


$ wq!

・パーミッション変更
$ chmod +x xymonclient

・サービスに追加
$ chkconfig --add xymonclient

・サービスON
$ chkconfig xymonclient on

・リストにいるか確認
$ chkconfig --list

・念のためステータス確認
$ /usr/local/xymon/runclient.sh status

・ONになっているようであればstopする
$ /usr/local/xymon/runclient.sh stop

・再起動
$ reboot

・再度ステータスを確認し、起動していれば成功
$ /usr/local/xymon/runclient.sh status
laravel　テーブル最終更新日からの経過日数の計算


laraveのeloquentで標準でついてくるタイムスタンプを利用し、テーブル最終更新日からの経過日数を計算する処理のメモ。

処理としては、・・value('created_at')まででデータベースから最後のレコードの追加日を取得。取得したcreated_atはcabonクラスなのでcarbonのdiffindaysメソッドを使い経過日を計算。というものです。

```php:
    //経過日数の計算
    $diff_day = HistoryList::orderBy('code', 'desc')->value('created_at')->diffInDays( Carbon::now() );
```

経過日数に応じてメッセージを表示するコントローラーを作る場合は・・

```php:controller.php


     public function test() {
    	//経過日数の計算
    　　$diff_day = HistoryList::orderBy('code', 'desc')->value('created_at')->diffInDays( Carbon::now() );
    	//メッセージの表示
    	if($diff_day > 30) {
    		$message = "これほどまでに更新しないとは。。。。<br>何のために作ったのでしょうか？";
    	}elseif($diff_day > 14) {
    		$message = "旅行にでも出かけているのでしょうか？それとも・・。<br>せめて1週間に1回以上は入力しましょう。";
    	}elseif($diff_day > 7) {
    		$message = "少し更新が滞っている様です。なるべく毎日の更新を心がけましょう。";
    	}else {
    		$message = "";
    	}
    	return view('pages.home',compact('message','diff_day'));
    }
```

※[localdisk](http://qiita.com/localdisk)さんのコメントと[Laravelで日付時刻の処理を書くならCarbon（カーボン）を使え](https://apecell.com/2016/02/08/id/219)を参考に追加編集しました。
Loop date with day, using foreach

###Loop Date with Foreach###
**Usage :** 
> We have a lot of data for user register action, 
> now I want to know how money people sign up on our system each day.
> and I need do this in code

**Method 1**

```PHP
$begin = new DateTime( '2010-05-01' );
$end = new DateTime( '2010-05-10' );

$interval = DateInterval::createFromDateString('1 day');
$period = new DatePeriod($begin, $interval, $end);

foreach ( $period as $dt )
  echo $dt-> format( "Y-m-d" );
  
```


**Method 2**


```PHP
$startTime = strtotime( '2010-05-01 12:00' );
$endTime = strtotime( '2010-05-10 12:00' );

// Loop between timestamps, 24 hours at a time
for ( $i = $startTime; $i < = $endTime; $i = $i + 86400 ) {
  $thisDate = date( 'Y-m-d', $i ); // 2010-05-01, 2010-05-02, etc
}
```
字符转换

* 数值类型（Int、Float）和字符类型（Sting）相加（＋）时，结果为数值类型。
  数值结果取决于字符串的第一部分的字符类型（PHP 支持以类似数组使用下标获取操作字符串）。
  * 如果是数值类型，则做正常的数学运算；
  * 如果不是，该字符串会当作零（0）来处理。
  见下面的示例:
  
  ``` PHP
  <?php
    $foo = 1 + "bob-1.3e3";           // $foo is integer (1)
    $foo = 1 + "10 Small Pigs";       // $foo is integer (11)
    $foo = "10.0 pigs " + 1.0;        // $foo is float (11)
    $foo = 4 + "10.2 Little Piggies"; // $foo is float (14.2)
  ?>
  ```
  
* 将一个变量转换为null类型的方法：
  (unset) - 转换为 NULL (PHP 5)
php解析xml

#PHP SimpleXML - Get Node Values

```xml

<note><to>Tove</to><from>Jani</from><heading>Reminder</heading><body>Don't forget me this weekend!</body></note>

```
Example

```php
 <?php
$xml=simplexml_load_file("note.xml") or die("Error: Cannot create object");
echo $xml->to . "<br>";
echo $xml->from . "<br>";
echo $xml->heading . "<br>";
echo $xml->body;
?> 
```

The output of the code above will be:
Tove
Jani
Reminder
Don't forget me this weekend! 

#Another XML File

Assume we have an XML file called "books.xml", that looks like this:

 
```xml

<?xml version="1.0" encoding="utf-8"?>
<bookstore>
  <book category="COOKING">
    <title lang="en">Everyday Italian</title>
    <author>Giada De Laurentiis</author>
    <year>2005</year>
    <price>30.00</price>
  </book>
  <book category="CHILDREN">
    <title lang="en">Harry Potter</title>
    <author>J K. Rowling</author>
    <year>2005</year>
    <price>29.99</price>
  </book>
  <book category="WEB">
    <title lang="en-us">XQuery Kick Start</title>
    <author>James McGovern</author>
    <year>2003</year>
    <price>49.99</price>
  </book>
  <book category="WEB">
    <title lang="en-us">Learning XML</title>
    <author>Erik T. Ray</author>
    <year>2003</year>
    <price>39.95</price>
  </book>
</bookstore> 
```

Example


```php

<?php
$xml=simplexml_load_file("books.xml") or die("Error: Cannot create object");
echo $xml->book[0]->title . "<br>";
echo $xml->book[1]->title;
?> 
```

he output of the code above will be:
Everyday Italian
Harry Potter 

more in:http://www.w3schools.com/php/php_xml_simplexml_get.asp
CPI ACE2015 MySQL5.6のmysql access denied なんちゃら～

PDOでMySQLに接続する時に出たエラーについて。

今までの接続方法でポートを省略してた場合、接続エラーになります。
正確にはエラーではなく、3306ポートつまりMySQL5.5を見に行っており、該当のデータベース名が無いため
mysql access denied for なんちゃら～　となります。

PDOの接続にきちんと ```;port:3307``` を足してやりましょう。

```php:DBConnect.php
try {
    parent::__construct(
    'mysql:dbname='.$dbname.';host='.$dbhost.';port='.$dbport, $dbuser, $dbpassword,
    array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES '.$this->charset)
    );
} catch(PDOException $e){
    exit('システムエラー1' . $e->getMessage());
}
```
Stringから文字のストリームを生成する

文字列を文字のリストとして表現する関数型言語では、個々の文字に対する処理を`map`で書けるので便利です（Haskellとか）。同じことをJavaのStream APIでやろうとした時に手間取ったのでコード例の形でメモしておきます。
結論から言えば、`chars()`と`mapToObj()`とキャストを使います。


### コード例

```java
class Main {
    public static void main(String[] args) {
        String str = "abcde";
        str.chars()
           .mapToObj(i -> (char)i)
           .map(Character::toUpperCase)
           .forEach(System.out::println);
    }
}
```
### 出力
```bash
$ java Main
A
B
C
D
E
```

何はともあれループを使わなくて済んだのは良かったです。

## 参考リンク
[Why is String.chars() a stream of ints in Java 8? - Stack Overflow](
http://stackoverflow.com/questions/22435833/why-is-string-chars-a-stream-of-ints-in-java-8)