OmniAICreator/Qiita-1.07M huggingface dataset:
Slack sidebarのカスタマイズ例

ふだんの配色に飽きてきたので、自分用にカスタマイズメモ。
（画像がずれずれですみません）

* ピンク系
　#FFC9DC,#ff91b8,#FFC9DC,#ffffff,#ffe8f0,#e85d8e,#E85D8E,#ffffff
![screencapture-fourmix-slack-messages-C033DKQJK-1507105892021.png](https://qiita-image-store.s3.amazonaws.com/0/60452/da436bc4-a998-e81d-a88a-7c1274408082.png)


* きいろ系
　#fff0b5,#ffcc4d,#bce3aa,#ffffff,#fff9e3,#e85d8e,#a9e7f5,#ffffff
![screencapture-fourmix-dev-slack-messages-C10636XAS-1507106091715.png](https://qiita-image-store.s3.amazonaws.com/0/60452/a814052f-1a28-def6-0e58-f99216f822bb.png)

* むらさき系
　#f7f7ff,#ffffff,#8177bf,#ffffff,#A6A6DE,#a6a6de,#A6A6DE,#C7C7F0
![screencapture-fourmix-pub-slack-messages-C1CLBNNQ1-team-U1CLBNLL9-1507106035460.png](https://qiita-image-store.s3.amazonaws.com/0/60452/52ec628c-102e-ed4c-15d1-30e56d95a116.png)



設定方法はこちらに紹介があります。
https://qiita.com/gatespace/items/e735c58e3d32ce331800

私がslackを始めたころにはなかったのですが、
最近はテーマをとりあつかったサイトもあるようで。
http://slackthemes.net
なんておしゃれ...！
もっとはやくしりたかった。。
React で作る input その2

#React で作る input その2

1. 未入力の場合はフィールドの値が未入力の場合に色を変える → [前回](https://qiita.com/choro/items/0accd74352a7cbfa24f3)
2. 全ての値が入力されたら次の画面へ進む


## Input を継承して新しいコンポーネントを作成
このままだと実装できないので前回のinputを継承してInput2を作る
` valueCheck ` をオーバーライドして確認用のログを表示

```javascript:Input2.jsx

import React from 'react';
import Input from './Input';

class Input2 extends Input {
  valueCheck(event){
    console.log("test");
  }
}

export default Input2;
```

## フォーム画面を作成

```jsx.jsx
import React from 'react';

// components
import Input2 from './Input2';

class Form extends React {
  render() {
    return (
      <div>
        <form action="">
          <Input2 />
          <Input2 />
        </form>
      </div>
    );
  }
}
export default Form;
```

## 判定用のフラグリスト

ここからはちょっとゴリ押し気味で好きじゃないんだけど
画面内のinputの入力フラグの状態を保持する配列を作ります

```
<Input2 />  ←　こいつだけ入力されていると仮定
<Input2 />
```

` [true,false] ` こんな感じで画面内のInput2の状態を保持している配列を作成

全てが入力された状態になっているかどうかを判定するフラグも作成します
それをInput2にpropsで渡します

```jsx:Form.jsx

class Form extends React {
  constructor(props) {
    super(props);
    this.state = {
      flagList: [false,false], //初期値
      checkFlag: false //名前がイケテナイ
    }
  }
  render() {
    return (
      <div>
        <form action="">
          <Input2 index={0} list={this.state.flagList}/> //indexを無理やり固定値で渡す・・・
          <Input2 index={1} list={this.state.flagList}/>
        </form>
      </div>
    );
  }
}
export default Form;
```

## 全て入力されていたらフラグを変更
・値が変更されたら、その要素のListのフラグを変更
・全てのフラグがtrueになったら ` checkFlag ` を true にする
・親で定義したメソッッドを子のInput2にpropsで渡す

```jsx:Form.jsx
class Form extends React {
  constructor(props) {
    super(props);
    this.state = {
      flagList: [false,false], //初期値
      checkFlag: false //名前がイケテナイ
    }
    this.flagListUpdate = this.flagListUpdate.bind(this);
    this.stateEvery = this.stateEvery.bind(this);
  }
  flagListUpdate(list,index, flag){
      list[index] = flag
      this.setState({flagList: list});
      this.setState({checkFlag: this.state.flagList.every(this.stateEvery)});
  }
  stateEvery(element){
    return (element === true);
  }
  render() {
    return (
      <div>
        <form action="">
          <Input2 index={0} list={this.state.flagList} flagListUpdate={this.flagListUpdate} /> //indexを無理やり固定値で渡す・・・
          <Input2 index={1} list={this.state.flagList} flagListUpdate={this.flagListUpdate} />
        </form>
      </div>
    );
  }
}
export default Form;
```


##渡されたpropsとメソッドをカーソルが離れた瞬間に実行


```javascript:Input2.jsx

import React from 'react';
import Input from './Input';

class Input2 extends Input {
  valueCheck(event){
    this.props.flagListUpdate(this.props.list, this.props.index, !!event.target.value)
  }
}
export default Input2;
```


あとは全てのInput2に値が入力されれば `checkFlag` がtrueになるので

```

{ checkFlag ? <input type="submit"> : <div /> }

```
上のようにボタンの表示を切り替えれば問題なしです




とりあえず、こんな感じでclassの継承を使ってInputに影響を与えることなく
別機能のInputコンポーネントができました

classとReactの相性がよくてとても使いやすいですね〜
結構冗長な書き方になってしまったので何かこうしたら方がスッキリするなどのアドバイスがあれば宜しくお願い致します！！
Siera bundle install error


http://qiita.com/akito19/items/e1dc54f907987e688cc0

``` mysql
$ bundle config --local build.mysql2 "--with-ldflags=-L/usr/local/opt/openssl/lib --with-cppflags=-I/usr/local/opt/openssl/include"
```

``` nokogiri
$ brew link --force libxml2
$ bundle config build.nokogiri --use-system-libraries
$ brew link --force libxml2
```
Redux-Saga


```
function* counterSaga() {
  while(1) {
    yield effects.take('INCREMENT_ASYNC')
    yield effects.call(delay, 1000)
    yield effects.put({type: 'INCREMENT'})
  }
}
```

take => ActionListener (イベントアクションの発行を待つ)

call => 非同期処理、WebAPIをコール。

put => ReducerAction。非同期処理のレスポンスを受けてstateを

run => Sagaを起動？＝リスナーをセット？
React v16に関するメモ


- ライセンスの変更：BSD -> MIT
- エラー処理：componentDidCatch デフォルトではUnmountされるだけ
componentDidCatch(err, info)
- Portal： new API ReactDom.createPortal => Modal の表示非表示が楽になる？
- Browserify ->  Rollup
- Deprecated Direct Import  react/lib/xxx.js ?
- ReactDom.render() -> ReactDom.hydrate()
- Warning: className={false} -> stripされる
- Removed React.createClass in v16
- Fiber
更新処理をスケジュール管理できる。チャットで入力中にサーバーから非同期でデータを取得した際にViewを更新しないようにするとか。。。
- 更新の優先度を設定する => 入力（高い）、APIレスポンス（低い）とか
- requestIdleCallack
- Sync, Task High, Low, OffScreen
- Commit phase で副作用をまとめてUIに適用する（同期的）
- OffScren Priority => Tab A をレンダリングするまで他のTabのコンテンツはAPIコールしないとか。
- React.flushSync()
- rendererを書き換えられる。モンキーパッチ
- ReasonReact => messanger app
Djangoでmanage.pyを使うときのメモ

#コマンド一覧

python manage.py runserver

サーバーを動かすコマンド

python manage.py inspectdb

外部からのdbをdjangoのmodelにするためのコマンド

python manage.py createsuperuser

スーパーユーザーを作るコマンド

python manage.py migrate

データベースをマイグレートするコマンド

python manage.py makemigrations

マイグレーションファイルを作る

更新します、、、、
Pandas自分用メモ

随時更新

##encodingチートシート
参考：https://docs.python.org/3/library/codecs.html#standard-encodings


| Codec       |       備考 |
|:-----------------|:-----------------|
|cp932              |              よく使う |
|utf8           |            よく使う② |
|sjis             |              Windowsでつくったcsvにありがち |
|eucjp               |                あんま見ない |

##SettingWithCopyで怒られた
###エラー内容

```python:警告文
 SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead

See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy
  self[name] = value
```
要は、あなたが入れたと思ってる値、正しくはいらんかもしれないですよ～って意味。
.loc[]を使えと言っているが使っても同様のエラーが出た。
↓のDataFrameのAge列を同じ長さのndarrayで埋めようとしたら発生。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/203205/69eeba41-f252-2c69-c59e-6c0daf17b33d.png)

indexがバラバラなのがだめみたい。
###解決法
reset_indexした。

```python:解決
aaaaa_df = aaaaa_df.reset_index(drop=True)
```

(drop=Trueをいれないと、現在のindexがcolumnに追加されてしまう)

↓reset_index後のDataFrame
![image.png](https://qiita-image-store.s3.amazonaws.com/0/203205/62c57f74-b9f8-2fe2-e92e-107ca3c1bc9c.png)
React で作る input その1

#React で作る input

全画面で使える共通のinput
1. 未入力の場合はフィールドの値が未入力の場合に色を変える
2. 全ての値が入力されたら次の画面へ進む([次回](https://qiita.com/choro/items/5ff8aa76fe715ddde0b2#%E6%B8%A1%E3%81%95%E3%82%8C%E3%81%9Fprops%E3%81%A8%E3%83%A1%E3%82%BD%E3%83%83%E3%83%89%E3%82%92%E3%82%AB%E3%83%BC%E3%82%BD%E3%83%AB%E3%81%8C%E9%9B%A2%E3%82%8C%E3%81%9F%E7%9E%AC%E9%96%93%E3%81%AB%E5%AE%9F%E8%A1%8C))


## input コンポーネントを作る

```javascript:input.jsx

import React from 'react';

class Input extends React {
  render() {
    <input type="text"/>
  }
}

export default Input;
```


##入力されたか判定するフラグを初期値で設定

```javascript:input.jsx

class Input extends React {
  constructor(props) {
    super(props);
    this.state = {
      isSet: true
    }
  }
  render() {
    return (
      <input style={{ backgroundColor : this.state.isSet ? "white" : "gray"  }} type="text" onBlur={this.valueChecker}/>
    );
  }
}

```

##カーソルが離れた時に値によってstateを変更

```javascript:input.jsx

class Input extends React {
  constructor(props) {
    super(props);
    this.state = {
      isSet: true
    }
    this.valueCheck = this.valueCheck.bind(this);
  }
  valueCheck(event){
    this.setState({isSet: !!event.target.value});
  }
  render() {
    return (
      <input style={{ backgroundColor : this.state.isSet ? "white" : "gray"  }} type="text" onBlur={this.valueCheck}/>
    );
  }
}

```
querySelectorAllの返り値がforEachできない問題でハマった

# 問題
 - webviewアプリでiphone一部端末にて発生
 - チームメンバーでの端末では発生しない

# 調査
 - ios10.2で再現した
 - プログラム実行コードに問題がありそう。（コンパイルエラーは出ていない）

# 原因
 - `element.querySelectorAll("").forEach` ここでエラーになっていた

# この記事で全てが解決した
 - https://qiita.com/yugo-yamamoto/items/b87470f118ac62dc6a8d

# 感想
 - ios11だと何でエラーにならないのか謎すぎた。
Javaのコンストラクタで呼び出す変数初期化メソッドはオーバーライドしてはいけないという話

Androidの某ライブラリで普通に使われてたので。

# 問題

突然ですが、皆さんは以下の実装の出力結果がわかりますか？

```java
public class Main {

    static class Foo {

        public Foo() {
            init();
        }

        protected void init() {
        }
    }

    static class Bar extends Foo {

        private int val1;

        private int val2 = 0;

        @Override
        protected void init() {
            val1 = 1;
            val2 = 2;
        }
    }

    public static void main(String... args) {
        Bar bar = new Bar();

        System.out.println(bar.val1);
        System.out.println(bar.val2);
    }
}
```

この出力結果は以下になります。

```
1
0
```

# 事象

`Foo`クラスはコンストラクタで、`init()`メソッドを呼び出しています。

`Bar`クラスは`Foo`のサブクラスで、`Foo`の作った`init()`メソッドをオーバーライドして、メンバ変数を初期化しています。

`Bar.init()`でメンバ変数`val1`, `val2`にはそれぞれ、`1`、`2`が代入されています。

この`Bar`クラスをインスタンス化して、それぞれの値を出力させると、`val1`は見たとおり`1`が入っていますが、`2`を代入したはずの`val2`の値は`0`となっています。

# メンバ変数の初期化に潜む罠

この現象を紐解く鍵は2つあります。

1つはメンバ変数の定義、もうひとつはJavaにおける変数の初期化タイミングです。

## メンバ変数の定義

問題のコードでは、`Bar`クラスのもつメンバ変数は以下のように定義されています。

```java:Bar
private int val1;

private int val2 = 0;
```

メンバ変数の定義について、明示的な初期化を行わない場合プリミティブであれば`0`、クラスであれば`null`が代入されます。
しかし、`0`で初期化されると言っても、明示的に初期化をするかしないかでその振る舞いは変化します。

## Javaのメンバ変数の初期化タイミング

Javaにおいてメンバ変数の初期化はコンストラクタで行われます。問題はコンストラクタ内のいつ行われているのかです。

普段なにげなく書いていると思いますが、じつはメンバ変数の初期化は**親クラスのコンストラクタ呼び出し直後**に行われます。

つまり

```java:Foo
static class Foo {

    public Foo() {
                    ← ココ
        init();
    }
}
```

です。

何も見えないと思いますが、Javaのコンストラクタでは**コンストラクタの先頭で親クラスのコンストラクタの呼び出しが必須**となっています。
ただし、これは省略できる条件があり、その条件が**親クラスがデフォルトコンストラクタを定義している**ことです。
デフォルトコンストラクタとは、引数を取らないコンストラクタです。
(厳密には親のコンストラクタでなくてもいい場合もあるのですが、割愛します)

そのため、上のコードの場合、矢印の位置には`super()`呼び出しが存在しているのと同じことになります。

# 問題の記述

以上を踏まえて問題のコードで踏んだ罠について解説します。

罠を踏んだのは`Bar`クラスです。

```java:Bar
static class Bar extends Foo {

    private int val1;

    private int val2 = 0;

    @Override
    protected void init() {
        val1 = 1;
        val2 = 2;
    }
}
```

このクラスを省略せずに書くと以下のようになります。

```java:Bar
static class Bar extends Foo {

    private int val1;

    private int val2 = 0;

    public Bar() {
        super();
    }

    @Override
    protected void init() {
        val1 = 1;
        val2 = 2;
    }
}
```

`Bar`のコンストラクタでは`super()`、つまり`Foo`のコンストラクタが呼び出されます。
`Foo`のコンストラクタでは、`init()`を呼び出していますが、これは`Bar`クラスがオーバーライドしているため、`Bar.init()`の呼び出しになります。

このフローを雑に展開すると

```
Bar() {

  super() {
    
    Bar.init() {
        Bar.val1 = 1;
        Bar.val2 = 2;
    }
  }
  
  Barのメンバ変数の初期化() {
      Bar.val2 = 0;
  }
}
```

という流れになります。

`val1`は`super()`後に`0`で初期化されないのか？と思うかもしれませんが、定義時に初期化していないものは、`super()`後の初期化処理自体が行われません。


# 補足

ちなみに、`Bar.init()`の`val2`を値代入前に参照すると`0`が返ります。
メンバ定義の初期化に関係なくすべてのメンバ変数は`0`または`null`が代入されていて、`super()`後に明示した値が代入されると思ってください。

そもそも、最初に貼った実装は糞コードなので、継承を理解してからオーバーライド使おうな？


# 参考

(公式に書いてあったはずだけど、リンクを失念しました。見つけたら貼ります…)
torを複数起動して同時に複数のIPでアクセスする方法

torを複数並行して起動する方法です。同時に複数IPアドレスからアクセスしたいときに便利です。

macでbrew 経由でインストールした状態を想定しています。

```bash
$ tor --version
Tor version 0.3.1.7 (git-6babd3d9ba9318b3).
```

## 通常の起動

```
$ tor 
```

デフォルトは9050のポートで起動します。

## テスト方法

```
 curl --socks5-hostname localhost:9050 http://ifconfig.io
```
torはhttpプロキシではなく、socksプロキシで起動するため、このよう設定になります。
上の例は、http://ifconfig.io にアクセスすることで、IPアドレスがいつもと違うことを確認しています。

普通に起動しただけだと、9050ポートが使用されているために、torは複数起動できません。
なので、起動時に別のポートで起動します。

##  設定ファイルにポートを指定

設定ファイル
（ディレクトリは適宜読み替えてください）

```torrc.1
SocksPort 9060
ControlPort 9061
DataDirectory /Users/yugo/tor/data/tor1
```

設定ファイルを指定しながら起動

```
$ tor -f /Users/yugo/tor/torrc.1  
```

設定ファイルで別のポートが指定されているのなら、同時起動が可能です。

## 余談

torは匿名化アクセスとはいうものの、torから来ているというのはIPみれば分かるはなしなので、tor経由でアクセスできないところもあります。
ImageMagick > pngファイルの透明色をwhiteに変換してppmファイルにする  | ラベル追加できない場合の一次処理

```txt:動作環境
Xeon E5-2620 v4 (8コア) x 2
32GB RAM
CentOS 6.8 (64bit)
openmpi-1.8.x86_64 とその-devel
mpich.x86_64 3.1-5.el6とその-devel
gcc version 4.4.7 (とgfortran)
NCAR Command Language Version 6.3.0
WRF v3.7.1を使用。
Python 2.6.6 (r266:84292, Aug 18 2016, 15:13:37) 
Python 3.6.0 on virtualenv
GNU bash, version 4.1.2(1)-release (x86_64-redhat-linux-gnu)
```

### 前置き

convertコマンドにてpngファイルにラベルを追加しようとするが、ラベルが追加されない。

```
$ identify src.png 
src.png PNG 430x360 430x360+80+62 8-bit DirectClass 120KB 0.000u 0:00.000
```

- gimpで開いた時に、画像がずれて表示される
- 透明色がある

### ppmに変換

いったんppmに変換してみるとどうか。

変換については以下を参考にしました。
[ImageMagickのconvertコマンドで特定の色を置換する @ Aggressive Engineerさん](http://blog.tanarky.com/2009/08/imagemagickconvert_19.html)

情報感謝です。

以下のように使いました。

```
$ convert -fill white -opaque none src.png dst.ppm
```

### ラベル追加テスト

```
$ convert -annotate +80+20 "TEST" dst.ppm dst.png
```
上記ではラベルが追加された。

```
$ identify dst.ppm 
dst.ppm PPM 430x360 430x360+0+0 8-bit DirectClass 464KB 0.000u 0:00.000
```
PostgreSQLからスキーマを指定してデータを参照する

RからPostgreSQLのデータベースに接続するには主に**DBI**、**dplyr (dbplyr)**、**sf**の3つの方法だと思う。各方法についてまとめるとともに、表題のスキーマ指定でのデータ参照の方法を整理しておく(2017年10月現在の状況なので、今後対応状況が変わるかもしれない)。

記述しているデータベースの情報についてはダミーなので、参考とする際は適宜利用するものに書き換えてほしい。

コネクションの確立
------------------

データベースへの接続(コネクション)はいずれも**DBI**を通して行う。ここでもドライバとして**RPostgreSQL**、**odbc**のいずれかか、`RPostgreSQL::PostgreSQL()`をラップした`dpyr::src_postgres()`が選択できる。

``` r
library(DBI)
con <- DBI::dbConnect(RPostgreSQL::PostgreSQL(),
                      dbname = "database",
                      host = "localhost",
                      port = 5432,
                      user = "username",
                      password = "password")
class(con)
# [1] "PostgreSQLConnection"
# attr(,"package")
# [1] "RPostgreSQL"
```

`odbc::odbc()`を利用する場合、引数名が異なる。

``` r
con <- dbConnect(odbc::odbc(),
                 driver = "PostgreSQL",
                 database = "database",
                 servername = "localhost",
                 port = 5432,
                 uid = "username",
                 pwd = "password")
class(con)
# [1] "PostgreSQL"
# attr(,"package")
# [1] ".GlobalEnv"
```

``` r
library(dplyr)

con <- src_postgres(
  "database",
  host = "localhost",
  port = 5432,
  user = "username",
  password = "password")
class(con)
# [1] "src_dbi" "src_sql" "src" 
```

データ取得
----------

コネクションを利用してテーブルのデータを取得する。PostgreSQLではスキーマが利用でき、publicのテーブルとスキーマ内のテーブルを参照する方法が異なる。

DBI
---

ポピュラー(?)な方法。後述の**dplyr**も**sf**もこれを利用している。`dbReadTable()`や`dbGetQuery()`という関数が利用できる。

``` r
# publicテーブルはテーブル名を指定するだけ
con %>% dbReadTable("table")

# 対象がスキーマの中にある場合、c()を使って参照する
con %>% dbReadTable(c("schema", "table"))
# con %>% dbGetQuery("SELECT * FROM schama.table")
```

dplyr & dbplyr
--------------

`tbl()`を使ってデータベースのテーブルを参照する。ただ、スキーマの場合、`c()`ではできない。schema.tableのようにしてもだめ。さて困ったぞ、という時に`dbplyr::in_schema()`が使える。

``` r
con %>% tbl(from = "table")

con %>% tbl(from = dbplyr::in_schema("schema", "table"))
```

`in_schema()`はPostgreSQLだけでなく、SQLiteのようなスキーマが利用可能なデータベースに対応しているようだ。

sf
--

**DBI**と同じく、スキーマのテーブルには`c()`を使う。`dbplyr::in_schema()`には未対応なようだ。

``` r
sf::st_read_db(con, table = "table")

sf::st_read_db(con, table = c("table", "schema"))
```

体感速度としてdbplyrの関数を利用した方が高速に読み込みができているような気がする。とわいえgeometryの扱いは**sf**だけが対応している状況なので、PostgreSQLの魅力でもあるgeometryを扱う場合は**sf**から読み込んだ方が良さそう、という結論。

RStudio Connectionタブを利用
----------------------------

便利すぎて泣いた。コネクションは一度作っておけば再利用できるし、GUI操作でテーブル構造の確認やデータの確認まで行える。

![AVOOBkPAnC.gif](https://qiita-image-store.s3.amazonaws.com/0/19462/8e71e988-87d5-5e2d-4dbb-d92ff9d152ed.gif)
仮想通貨の歴史と今後の展望

キムシンさんとbitflyerの代表加納さん
超雑にICOカンファレンスの内容メモを最速であげてみる。

##メモ
bitflyerの事業内容

```
ブロックチェーン技術：to B
取引所：to C
```

sh : 就職のときOB訪問とかしてたから感慨深い。なぜ仮想通貨の世界に？
K : 2010年からビットコイン知ってた。13年の10月にバーナンキが容認発言。そこで暴騰した。それでこれだと思った。価値の移転、保存、尺度という３つの要件はもともと満たして居た。でも政府とかの賛同が得られないと思って居た。そこで始めた。14年4月くらいから開始？

sh : 当時VC回っても断られまくって居た。なぜいけると思った？
K : 14年はMt. Goxのせいでかなりしんどかった。ブロックチェーンもビットコインも必ずくる。この二つは必ずメジャーテーマになる、と確信していた。ビットコインに価値がつくかどうかは難しい。ハッキングが難しい、ということが勝ちの根拠にはなっているものの、人々がビットコインの価値を認めるかどうか、というのは別の話だった。だから価値がつくかどうかは難しいと思った。システムは信用できた。

sh : 価格はどのくらいが適正だとか、今後どうなっていくと考えている？
K : 長期的には伸びると思っている。基本的には買いからしか入れない。ユーザーが増えると価格が上がる。発散系。ある値に収束する要素というのがあまりない。株とかは配当の率とか金額で原点に回帰する力が生じる。でも仮想通貨は発散系。上に跳ねるか下に暴落するか、というふうに動きやすい。今までフェアバリューを探そうとした人はいる。Gマン、バンカメ、Merrill Lynchとかのレポート。Gマンが$1300くらいじゃないか、と試算していた。

sh : JP モルガンの発言は正しくない？
K : Gマンの人が言ったのは、「まだ結果は出ていない」。好きな言葉は「金が紙幣に変わった時も、人々はやはり懐疑的だった」。新しい通貨が生まれる瞬間というのは人々は信じづらい。その上で、まだ答えは出ていないんだろうなと思っている。

sh : ビットコインはゴールドなのか通貨なのか？それとも両方の性質を持っているのか？
K : これは同じことを言っていると思っている。ゴールドは物として使えないと仮定する。CPUの配線とかには使われているけど。ビットコインには実用価値は基本的にはないけど、コモディティなのか、通貨なのか。

sh : 使われ方としては価値保存として使われるのか、決済・送金として使われるのか？
K : 価値保存はされるという前提で、決済なのかスペキュレーションなのかという話で言えば、最初はスペキュレーション。投機。でも投機が行われるのは決済で使えるという前提があるから。でもtxサイズだったり、既存の仕組みをディスラプトできるのか、というのはまだ課題。

sh : bitflyerの話に。こないだ1.5兆円とか取引あったけど、2年前はどれくらいでしたか？
K : 一ヶ月何十億とかだったかな。

sh : 取引所としてどういうポジションを取っていきたい？日本の中でどういうことをやっていきたい？
K : 取引所だけでなく、いろいろやっていきたい。ユニバーサルというカテゴリ。取引所はメインエンジン。そこに付随する決済サービス、ポイントとの交換、資金移動、etc...取引所をエンジンとしたグローバルユニバーサルカンパニーにしたい。売上もほぼなく、メンバーも6人くらいでユーザーもいないのにアメリカで子会社立てたり前のめりだった。グローバルに。横展開しやすいし、横展開しないと意味ない。今までの銀行業とかは規制産業だった。でも仮想通貨は誰がやろうが一緒。手数料競争になるのは目に見えてる。それを横展開して新たなサービス乗っけてバリュー出すっていうふうにしていかないと勝ち抜けないと思う。ビットコインで言うと世界シェアの10~20%。bittrex、polo、韓国などある中で、どういう攻め方を考えている？ビットコインとETHはやるとして、アルトコインはどうするかは国によって変わるかと。日本のアルトコインのホワイトリストが割とゆるい。pepeキャッシュもあるし。この辺は面白いと思う。この辺が緩いといろんなことができる。トークンとかがどう広がっていくかにも注目している。国によって規制が違うのでその国に合わせたものしか提供できない。

sh : アルトコインがだいぶ増えてきて、どういう攻め方をするのか？というのが気になる。ビットコイン一本槍というのもあるし。今後取引所で規模を拡大していく中で、銀行があって証券があって色々な金融の機能がある。仮想通貨の世界にはまだ取引所くらいしかない。ウォレットもあるけど。今bitflyerは法定通貨と仮想通貨の間にいるけど、仮想通貨の世界でどういう金融の仕組みを作り上げていこうと思っていますか？
K : ICO面白い。既存の投資手段では証券会社、銀行、主幹事証券、投資家、取引所、監査法人etc...関与する人が多くて、いろんなコストがかかっている。icoでは投資家保護されていないので危ないですけど。投資が民主化されるというのはいいですよね。証券のシステムは面白いことできるんだろうな。と。銀行は送金とかローンとか。保険もいろいろ。システムとしてブロックチェーンを使うというのもあるけど、ブロックチェーンじゃないとできないことも出てくると思う。単にブロックチェーンを使う、というのもあるけど。ブロックチェーンでしかできないことというのはエンドユーザーに直接アクセスできて、契約がまけて、お金も徴収できるという仕組み。

sh : マイニングは考えてない？
K : マイニングは実は内緒でやっている。ずっとテストしている。どっかでマイニングハッシュパワーを売りたいなと。その辺もいじっている。国内は電気代高いので無理ですね。

終了〜。

##投銭
読んだ人はビットコインくださいネ。
![bitcoin_address.png](https://qiita-image-store.s3.amazonaws.com/0/44151/8c88d7a5-d3a3-d908-a0a8-be7dc953a586.png "bitcoin_address.png")

1HJCFE2hEqvU56dZz8CpocjcJX86guMmXW
型変換(16進数文字列 → 2進数文字列)


備忘

16進数で格納された文字列を2進数文字列(タブ区切り)に変換する必要だったので備忘

```sample:sample.py
input_line = input()

ori_data = []
for data in input_line:
    data16 = int(data, 16) # 10進数に変換
    data2 = bin(data16)[2:] # 2進数に変換
    s_data2 = data2.zfill(4) # 0埋め4桁表記
    #s_data2 = '{0:04d}'.format(data2) # data2が文字列の場合
    
    print(data, data16, data2, s_data2)
    ori_data.append(s_data2) 
    
out2 = ''.join(ori_data) 
print(out2)

for out in out2:
    print(out, end="\t")
```
よく使う WP-CLI コマンド

コマンド中の [] 内は任意の値。 [] は実際には入力しない。

### 置換（サイト引っ越し時など）

~~~
wp search-replace [old] [new]
~~~

### ディレクトリ移動

該当のプラグインディレクトリに移動（ [] は不要 ）

~~~
$ cd $(wp plugin path --dir [xxxx])

// ExUnitの場合
$ cd $(wp plugin path --dir vk-all-in-one-expansion-unit)
// BillVektor
$ cd $(wp theme path --dir bill-vektor)
// vws
$ cd $(wp theme path --dir lightning)
// vws
$ cd $(wp theme path --dir lightning-pro-child-vws)
~~~

### VCCWでPHPUnitを動かすためにインストールする

~~~
$ bash bin/install-wp-tests.sh wordpress_test root 'wordpress' localhost latest
~~~
※ プラグインやテーマの bin ディレクトリに install-wp-tests.sh がある前提

## テーマ・プラグイン

プラグインの作成

```
$ wp scaffold plugin sample
```

プラグインの有効化

~~~
$ wp plugin activate my-plugin
~~~

## ユーザー関連

#### ユーザーリストを表示

~~~
$ wp user list
~~~

#### 権限を指定してユーザーを表示

~~~
$ wp user list --role=administrator
~~~

#### ユーザーを削除

~~~
# wp user delete 7 --reassign=1
~~~

※ reassign は投稿を引き継ぐユーザーのID

#### ユーザーを追加

~~~
$ wp user create admin admin@example.com --role=administrator --user_pass=admin
~~~

####ユーザーパスワードのアップデート

~~~
$ wp user update 1 --user_pass=[xxxx]
~~~

### ユーザー権限

ユーザーロールをリセット

~~~
$ wp role reset administrator editor author
~~~

### オプション値の編集・削除

~~~
// オプション値 xxxx を削除
$ wp option delete xxxx
// オプション値を変更
$ wp option update blogname "Random blog name"
~~~
scaladocとグラフ

# scaladoc
- apiドキュメントを出力してくれるツール
- 公式 https://docs.scala-lang.org/style/scaladoc.html

## install(macの場合)
- scalaをインストールしたとき突っ込まれてる

```
> brew install scala
> which scaladoc
/usr/local/bin/scaladoc
```

## usage
- scalaのプロジェクト上

```
scaladoc src/**/*.scala
```

## ドキュメントにしたコード
https://github.com/ryota0624/comic_sample

```scala
/**
  * ヒーロー!コミックブックの主役
  */
trait Hero {
  /**
    * ヴィランをやっつけることで話が進む
    * @param viran
    */
  def defeatViran(viran: Viran): Unit

  /**
    * 良いことをするものがヒーロー
    */
  def goodActivity(): Unit
}
```

## ドキュメントを見る
- `scaladoc`を実行したディレクトリに出力される`index.html`を開く!
- Heroトレイトに対するコメントが表示されている
    ![スクリーンショット 2017-10-02 21.45.05.png](https://qiita-image-store.s3.amazonaws.com/0/153296/888926cc-ed31-5a39-b311-c5c87313ed44.png)
- Heroトレイトのドキュメント内ではメソッドへのコメントが表示されている！![スクリーンショット 2017-10-04 00.30.19.png](https://qiita-image-store.s3.amazonaws.com/0/153296/a9bf9437-5ae1-d596-4ceb-c5f9a988456c.png)


## 図が欲しいなあ！
- ドキュメントを見ると丁寧にクラスの関係が出てきたりしている...
![スクリーンショット 2017-10-04 00.51.32.png](https://qiita-image-store.s3.amazonaws.com/0/153296/8862d535-bcf5-1df2-03ac-9c86e4c2d20f.png)


 
- 図とかでないかなぁ

### ヘルプを見る
- グラフを出力するっぽいオプションがあるぞ‥！

```
> scaladoc -help
~略~
 -diagrams       Create inheritance diagrams for classes, traits and packages.
~略~
```

## Try! グラフ出力

```
> scaladoc -graph src/**/*.scala
```

- めっちゃ怒られた‥下の文言がめっちゃでてきた
    - 図を作る時にエラーが起こっているらしい

```
Graphviz dot encountered an error when generating the diagram for: Hero
```

- めちゃくちゃ出てきた文言の最後の方にゴールのための一言が

```
Please note that graphviz package version 2.26 or above is required.
```

- `graphviz`ってのが必要らしいな

### graphviz

- brewでインストールできる

```
> brew install graphviz
```

- グラフを描画するためのパッケージ
    - wikiに日本語ページがある‥[wiki](https://ja.wikipedia.org/wiki/Graphviz)
    
## ReTry! グラフ出力
```
> scaladoc -graph src/**/*.scala
```
- とくにエラーメッセージは出ず‥！
- scaladocを見ると

![スクリーンショット 2017-10-04 00.54.04.png](https://qiita-image-store.s3.amazonaws.com/0/153296/ee55bb10-db55-231f-3f2f-860ea326043c.png)



- 感動！グラフが出てきた！

## 戦いは続く
- sbtからscaladocを作りたい

### scaladoc from sbt

- sbtからコマンド１つで出来ました
- sbtプロジェクト上で
 
```
> sbt 
sbt> doc
```

- しかし、これで出力したドキュメントには図が乗っていない...
    - つまり実行オプションに`-graph`がないという状況なのだろう

- sbtのdocコマンドから呼ばれるscaladocにはbuild.sbtでscalacOptionsとして定義されたものが渡される
    - [sourceコードリンク](https://github.com/sbt/sbt/blob/4b8d31a9ea861e14922c640d1aa3935a7f33a8fb/main/src/main/scala/sbt/Defaults.scala#L1277)
    

- build.sbtを書き換える

```build.sbt
~略~
scalacOptions in (Compile,doc) := Seq("-diagrams")
~略~
```


## まとめ
- scalaをインストールしたとき付いてくるscaladocでapiドキュメントが出力できる
- クラス図をだしたかったら
    - graphvizをインストール
    - オプション`-graph`をつけてscaladocを実行する
- sbtから利用したいときは`doc`タスクを使う
    - scaladocのオプションを渡したいときは`build.sbt`で`scalacOptions`に定義をしておく
Jupyter Notebook で TOC(2) のオプションが利かない？

# 結論

`*.ipynb` ファイルの後ろの方、オプションを収めたオブジェクトを修正する。

```json:notebook.ipynb
{
 "metadata": {
  "toc": {
   "number_sections": true,
   "skip_h1_title": true
  }
 }
}
```

以下、蛇足。

# Jupyter Notebook は便利だね

Jupyter Notebook はとっても便利。

Python を使っていて、作業メモを残しておきたいなら文句なくオススメ。
markdown 記法に慣れているとか、数式を埋め込みたいなら、特に。
（UMLのような図も埋め込めるとさらに良いのだけど）

さらに、extentions を使うともっと書きやすくなるし便利になる。

…なんだけど、ちょっとハマったのでメモ。

# Table of Contents (2) 拡張は便利だね

それぞれのノートで、Markdown セル内の heading 行（行頭が `#` で始まる行）から、自動的に目次を作成してくれる拡張機能。
いろいろオプションがあるが、番号を振ってくれる機能が便利。

- **Automatically number notebook's sections：** heading 行に章番号を振る。
- **Skip h1 headings from numbering：** `#` が 1 個の行には番号を振らず、2個ある行から番号を振る。

上の二つをオンにすると、

```markdown
# Title of Notebook
## the 1st chapter
### the First Section
### the Second Section
## the 2nd chapter
### the Third Section
```

このように書いたノートが、

```
Title of Notebook
1. the 1st chapter
1.1 the First Section
1.2 the Second Section
2. the 2nd chapter
2.1 the Third Section
```

のように表示される。

# オプションが利かない？

TOC(2) 拡張を有効にしてノートを開くと、ノートのタイトルも含めてすべての heading 行に番号が振られる。
Auto numbering オプションがデフォルトでオンになっているためだ。

タイトルには番号を振りたくないので、TOC(2) 拡張のオプションを眺めて、Skip h1 headings をみつけてオンに切替えた。
ところが、依然としてタイトルに番号がついている。
Cell → Run All としても、File → Close and Halt としてから開きなおしても、Jupyter Notebook を再起動しても変わらない。
他のページを開いてみたり、新しいページをつくってみると、ちゃんとタイトル行には番号がない。
どうやら、ブラウザ上でノートをいじっても関係ないらしい。

そこで、`*.ipynb` ファイルをエディタで開いてみると、オプションの値らしきものが保管されているのを見つけた。

```json:notebook.ipynb
{
 "metadata": {
  "toc": {
   "number_sections": true,
   "skip_h1_title": true
  }
 }
}
```

これらの値は、ノートを最初に保存したときに TOC(2) 拡張のオプションが保存され、その後は更新されないらしい。
テキストエディタで直してやると、思い通り、タイトルから番号がなくなった。
hashのキーの存在確認を正規表現で

## keyの存在確認
keyが存在するかどうかは一般的に以下で確認できる。

```irb
irb(main):051:0> h = { test: 3 }
=> {:test=>3}
irb(main):052:0> h.key?(:test)
=> true
```

## 部分一致するkeyの存在確認がしたい
指定した文字列が含まれるkeyが存在するかどうかを確認したい。

```irb
irb(main):053:0> h.keys.find{ |key| key =~ /te/ }
=> :test
```

true/falseで返すならこんな感じ。

```irb
irb(main):054:0> !!h.keys.find{ |key| key =~ /te/ }
=> true
```

もちろん正規表現使えます。

```irb
irb(main):055:0> h.keys.find{ |key| key =~ /^[a-z].+t$/ }
=> :test
```
jQueryのload( url, data, callback )に関して

この記事で使用したjQueryのバージョンですが

1.3.2

となっております。

***
最近は

```
$(document).ready(function(){
・・・
}
```
こっちを使っていて、loadの方はあまり使わないんですが
以前は結構使ってたんですよね～

久々に使ってみたら結構はまった部分もあったので
備忘録的な感じでまとめておこうかと思います。

では早速。
とにもかくにもhtmlのソースになります。

これで動くのでこのソースが皆さんの参考になればうれしいです。


```html:index.html
<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <title>サンプル</title>
  <script src="jquery.min.js" type="text/javascript"></script>
  <script>
    function funcGet(){
      callLoad("#areaGet","/load/get","text=getgetgetget",function(){});
    }

    function funcPost(){
      callLoad("#areaPost","/load/post",{text: "postpostpost"},function(){});
    }

    function callLoad(area,url,param,func){
      $(area).load(
        url,
        param,
        func
      );
    }
  </script>
</head>
<body>
  <div>
    <dl>
      <dt>GETでやってみる</dt>
      <dd>
        <div id='areaGet'></div>
        <script>funcGet()</script>
      </dd>

      <dt>POSTでやってみる</dt>
      <dd>
        <div id='areaPost'></div>
        <script>funcPost()</script>
      </dd>
    </dl>
  </div>
</body>
</html>
```

あれこれやりながら書いてみました。
ちなみに
↓動かした結果の絵がこちらです。

![jquery_load.png](https://qiita-image-store.s3.amazonaws.com/0/201928/494b05cb-692a-6bdc-6caa-985dc91c46ed.png)


サーバ側の処理は
textパラメータで受け取った文字列を大文字にして返却する
というものになります。


で、途中いくつかはまったのでそれを書いていきます。

##はまった箇所1：GET/POSTの送り分け

load関数はパラメータの送り方によって
GETかPOSTかが決まります。
オブジェクトならPOST、文字列ならGET。

最初どう指定するのか分からず・・・
本家サイトのドキュメントを確認したらちゃんと書いてありました。
[.load() | jQuery API Documentation](http://api.jquery.com/load/)

困った時に読みに行くんじゃなくて使う前に読めって感じですよね。。

##はまった箇所2：サーバの返却値が反映されない！

サーバ側からちゃんと返してるのに
HTMLに反映されない！

まぁこれは自分のHTMLの書き方が問題だったのですが

```
      <dt>GETでやってみる</dt>
      <dd>
        <script>funcGet()</script>
        <div id='areaGet'></div>
      </dd>
```

最初こんな感じで書いてたんですが
loadが動いたとき（funcGet関数が呼ばれた時）にはまだ #areaGet がdocument上にないため
サーバから受け取った文字列が反映できなかった、ということでした。

scriptタグを後ろに移動することで無事に反映。

でもドキュメントには

>$( "#result" ).load( "ajax/test.html" );
>If no element is matched by the selector — in this case, if the document does not contain an element with id="result" — the Ajax request will not be sent.

セレクタ部分がないとloadは動かない的なことが書いてあるんだけどなぁ
セレクタを存在しないのに変えてもサーバ側には送られちゃってるし。。
最後の
Ajax request will not be sent.
はそういう意味じゃないのかな。

##こんな使い方

冒頭で
>以前は結構使ってたんですよね～

と書きましたが、使っていたところを見直してみたら
結構いい感じに使ってたのでご紹介します。
（というか本来はこう使うべきか・・・）

とある管理画面で、
商品の詳細画面を開くと最初は概要だけ表示され、
[詳細を見る]ボタンを押すと、**画面遷移せず**にデータが補完される感じです

流れ的にはこんな感じ
1. 詳細を見るボタンを押してload関数をキック
2. サーバ側の処理が動いて詳細情報を取得し、別Viewが呼ばれる（遷移する）
3. 別View（遷移先）にてサーバから返却された詳細データの体裁を整える
4. loadに指定されたセレクタにそのViewを表示する

別Viewは詳細を表示する部分だけのHTMLになるイメージです


以上です。
クリンゴン語に関する技術 > Klingonska Akademien | 翻訳の疑問点 | 言語体系

2017年9月26日にNetflixにてStar Trek: Discoveryが閲覧可能になっていた。

最初のエピソードのため注力しているのか、あるいはCG技術の発展のおかげか、エンタープライズ(2005年)の時よりも、映像が進歩しているように感じた。
特にOPの映像は素晴らしい。

面白いと感じたのが「字幕：クリンゴン」が用意されていること。
45分の間、クリンゴン語が表示される。

例として、装備の正常(英語ではnominal)を表すクリンゴン語は

> 英語: Oxygen-nitrogen saturation: Nominal.
> クリンゴン語: ylnSlp-voQslp DuDmoHwl': Qapachu'.

のようにQapachu'が使われるようだ。

http://klingonska.org/dict/?q=Qapchu%27
> they'd say Qapchu’, even though that's a bit redundant.) In TKD, Qap is translated as succeed, work, function. 

KLINGONSKA AKAMEMIENでの検索

- Oxygen : yInSIp
- nitrogen : voQSIp
- saturation: 該当なし

### 技術的な疑問点

- どの言語データベースを使ったのか
    - google検索で見つかるいくつかのデータベースでQapachu'を検索してもNominalにはならない
    - DuDmoHwl'に対応する英語が見つかるデータベースが見つからない
- どのように翻訳したのか?
    - 人力
    - 機械学習
- 言語体系
    - 英語と同様のヘッド・イニシャルなのか
    - 日本語と同様のヘッド・ファイナルなのか
    - 参考: [日本語と英語の言語体系の違いからくるロジックの違い](http://www.iecs.co.jp/blog/2014/07/000027.html)
    
### 補足1

英語圏ではクリンゴン語での閲覧はできないという記事がある。
https://io9.gizmodo.com/if-youre-outside-the-us-you-can-watch-star-trek-disco-1818732487

エピソード３でもクリンゴン語の字幕付きだった。
1stシーズン中はクリンゴン語の字幕付きなのだろうか。

### 備考

- 言語データベースが整備されている
- 英語と文法体系が同じ

上記のような条件が合えば、機械学習を用いてある程度の精度までの翻訳はできそうな気がする。
（自分では実施できないが)


> umqu' ghot Krillin-----!!!!

が以下のように翻訳できる日もそう遠くはないとみている。

> クリリンのことか---っ!!!!

http://tradukka.com/translate/en/tlh
new String()の文字列初期化を""(ダブルクォート)形式に置換する

Javaソースをリファクタリングする際に、
new String()による文字列初期化から""(ダブルクォート)による文字列初期化に
置き換えるケースがよくある(ない)。
よくあるのだけれど、手打ちで消していくのはしんどかったりする。
この場合、正規表現を使って以下で置換すればおk.

```
置換前　new String\((.*)\);
置換後　$1;
```
ImageMagick | Python 2 (v2.6.6) > ファイル名から日時を取得し、画像に日時ラベル追加 > label_image_171005.py v0.1 > subprocess.callにて項目の一つに空白がある場合は、それを避けて.split()する

```txt:動作環境
Xeon E5-2620 v4 (8コア) x 2
32GB RAM
CentOS 6.8 (64bit)
openmpi-1.8.x86_64 とその-devel
mpich.x86_64 3.1-5.el6とその-devel
gcc version 4.4.7 (とgfortran)
NCAR Command Language Version 6.3.0
WRF v3.7.1を使用。
Python 2.6.6 (r266:84292, Aug 18 2016, 15:13:37) 
Python 3.6.0 on virtualenv
GNU bash, version 4.1.2(1)-release (x86_64-redhat-linux-gnu)
```

### 関連

[Python > regex | slice > AAA_20170228_030000_BBB.png というstringから 2017/02/28 03:00:00 というstringリストの取得 > 使わないグループは()をはずしていい | re.search() | join()+for | re.sub()での文字置換](https://qiita.com/7of9/items/ab2ecf9697ae6d64b25e)

### 処理内容

- ファイル名
    - 例: AAA_20170228_030000_BBB.png
- 画像に`2017/02/28 03:00`というラベルを追加する。

### 参考

[ImageMagick 画像中に文字を入れる](https://qiita.com/hsagae/items/1b72fb9f3d6024ba46f0)

### code v0.1


```label_image_171005.py
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
import sys
import re
import sys
import subprocess as sb

# on Python 2.6.6
#    ImageMagick 6.7.2-7
# coding rule: PEP8

# v0.1 Oct. 5, 2017
#   - execute convert command to add label to the image
#   - add get_datetime_label()
#   - add debug_make_dummy()


def debug_make_dummy():
    acmd = "convert -size 430x360 xc:white AAA_20170228_030000_BBB.png"
    sb.call(acmd.split())


def get_datetime_label(filename):
    # input(filename): e.g. AAA_20170228_030000_BBB.png
    #
    date_hhnn = re.sub(r'.*_(\d{4})(\d{2})(\d{2})_(\d{2})(\d{2})(\d{2})_.*',
                       r'\1/\2/\3 \4:\5',
                       filename)
    return date_hhnn

# @spec
# convert -pointsize 20 -annotate +80+50 '2017/02/28 03:00'
#   AAA_20170228_030000_BBB.png out_labeled.png

SEPARATOR = "="  # prevent separation by " " of the date_hhnn

IMG_CMD = "convert"
PARAM = "-pointsize 20 -annotate +80+50"
aparam = PARAM.replace(" ", SEPARATOR)
TEXT = "WHITE"
SRC = "AAA_20170228_030000_BBB.png"
DST = "out_labeled.png"

#debug
debug_make_dummy()
#

albl = get_datetime_label(SRC)
print(albl)

acmd = "=".join([IMG_CMD, aparam, albl, SRC, DST])
cmdlist = acmd.split(SEPARATOR)  # prevent separation by " " of the date_time
print(cmdlist)

sb.call(cmdlist)
```

```txt:run
2017/02/28 03:00
['convert', '-pointsize', '20', '-annotate', '+80+50', '2017/02/28 03:00', 'AAA_20170228_030000_BBB.png', 'out_labeled.png']
```

out_labeled.pngが生成される。

生成画像
---
![out_labeled.png](https://qiita-image-store.s3.amazonaws.com/0/32870/fbaa1120-1c0a-417b-83ad-b5992cc9299c.png)
---

### はまった点

sb.call(cmdlist)時にsplit()とすると「2017/02/28 03:00」文字列中の空白も分離対象となった。
"="をセパレータにすることで対処した。すっきりした方法ではない。

### 教えていただいた項目

@shiracamus さんの[コメント](https://qiita.com/7of9/items/75e04bcc6baafe62b6f6/#comment-be2987660c3ca252328d)ですっきりした方法を教えていただきました。

情報感謝です。
[laravel] isDirty()メソッドの使い方


24歳初心者です。

フォーム入力画面でユーザーが特に項目を変更しないまま、保存ボタンを押しちゃった場合
、「サーバーサイドでどのようにそれを検知すればよいのか」ということを調べていたらisDirtyメソッドに辿り着きました。

##isDirtyメソッドとは何か?
→~~Eloquentモデルをデータベースで照会して編集されたかどうかを調べる事が出来る。~~
Model::originalという連想配列の中には「編集前の」データを持っていています。
Model::attributesには「現在保持している」データがあります。
isDirtyメソッドはこの２つのデータを比べて一致しなければ真を返します。

##実用例

```
$change = Change::findOrFail($id);
$other_model = OtherModel::findOrFail($id);

$change->tall = 160
//値の更新

if($change->isDirty())
{
 $change->update();
 $other_model->update();
}
```


上記は$changeの更新で他のDBのレコードを更新するか否かを判断する場合の書き方です。
isDirty()メソッドの処理をupdate()メソッドよりも上に記載することによってDBにレコードが保存される前にチェックする事が出来ます。

ただisDirtyメソッドはCollectionなど配列で返ってくるものに対しては機能しないので、foreachなどで一個ずつ取り出す処理をしてあげないといけません。


参考URL
http://www.larajapan.com/category/eloquent%E3%82%92%E3%82%88%E3%81%8F%E7%9F%A5%E3%82%8B/
https://stackoverflow.com/questions/28836013/what-does-isdirty-means-in-laravel
【SharePoint】リスト一覧でリストアイテムにリンクを設定する方法

# リスト一覧からアイテム詳細に飛べたらなぁ
Webパーツの挿入からリスト一覧を出すところまでは簡単ですが、
例えばリストのタイトル項目からリストアイテム詳細に飛べたら便利だなー、と思ったわけです。

## JSリンクで何とかしてみる
Webパーツの詳細設定でこんなJavascriptを書いたファイルを読み込みます。

```javascript:list_view.js
(function () {
var context = {};
context.Templates = {};
context.Templates.Fields = {
"Title": {
"View": viewTemplate
}
};
SPClientTemplates.TemplateManager.RegisterTemplateOverrides(context);
})();

function viewTemplate(ctx) {
var propValue = ctx.CurrentItem[ctx.CurrentFieldSchema.Name]; //リストアイテムのタイトル
var propID = ctx.CurrentItem["ID"]; //リストアイテムのID
return '<a href="リストURL/DispForm.aspx?ID=' + propID + '">' + propValue + '</a>';//リストアイテム１つずつ回してリンクを生成
}
```

そうするとこんな感じでタイトル列にリンクが設定されます※一部モザイク処理
![list_view_pre.jpg](https://qiita-image-store.s3.amazonaws.com/0/184921/8e29cbfa-1b24-6ebc-8e7f-6b853ce4af42.jpeg)

## こちらを参考にしました
>JSLink でアイテムのプロパティ値を取得してビューの列の表示をカスタマイズする &#8211; Japan SharePoint Support Team Blog
>https://blogs.technet.microsoft.com/sharepoint_support/2015/07/14/jslink-3/
Go言語でコマンドを実行し、一定時間内に終了しなかったらプロセスを強制終了する

```go:main.go
package main

import (
	"log"
	"time"
	"os/exec"
)

func main() {
	//実行するコマンドを設定
	cmd := exec.Command("コマンド", "オプション")
	//コマンドを実行するときのカレントディレクトリを設定
	cmd.Dir = "コマンドを実行するときのカレントディレクトリ"

	//コマンドを実行開始
	if err := cmd.Start(); err != nil {
		log.Printf("err: %s", err)
	}

	//タイマーを設定
	ticker := *time.NewTicker(XXX * time.Second) //強制終了までの時間を設定

	//並行処理間とステータスを共有するチャンネルを設定
	exit := make(chan bool, 2)

	//並行処理１：タイマーに設定された時間が経過した際に、プロセスを強制終了し、ステータスにTRUEを送信
	go func() {

		//無限ループでタイマーの時間経過をキャッチ
		for {
			select {
				//タイマーに設定された時間が経過した
				case <-ticker.C:

					//タイマーを終了
					ticker.Stop()

					//cmd.ProcessStateは、cmd.Wait()するまでnil
					if cmd.ProcessState == nil || !cmd.ProcessState.Exited() {

						//プロセスを強制終了
						if err := cmd.Process.Kill(); err != nil {
							log.Printf("err: %s", err)
						}

						//ステータスにTRUEを送信
						exit <-true
					}
					return
			}
		}
	}()

	//並行処理２：コマンドが実行終了するまで待ち、終了したらステータスにFALSEを送信
	go func() {

		//処理の終了時にステータスにFALSEを送信することを強制する
		defer func() {exit <-false}()

		//コマンドが実行終了するまで待つ
		if err := cmd.Wait(); err != nil {
			log.Printf("err: %s", err)
		}
	}()

	//チャンネルにステータスが送信するまで待つ
	isKilled := <-exit

	//受信したステータスに応じて処理を分岐
	if isKilled {
		//プロセスが強制終了した際の処理
		log.Print("killed")
	} else if cmd.ProcessState.Success() {
		//コマンドが正常終了した際の処理
		log.Print("success")
	} else {
		//コマンドがエラー終了した際の処理
		log.Print("fail")
	}
}

```
####参考ページ
コマンドの各種リファレンス：https://golang.org/pkg/os/exec/
タイマーのリファレンス：https://golang.org/pkg/time/#Ticker
チャンネルあれこれ：https://qiita.com/najeira/items/47539ab346fa0c00dc62

####変更履歴
2017/11/07
　コマンドを実行するカレントディレクトリの指定方法を、os.Chdir()からcmd.Dirの指定へ変更しました。
Pandasのread_csvをした際にある列をdatetimeとして読み込む

# はじめに
pandasを用いて、csvファイルを読み込む際に、ある行をdatetimeとして読み込みたい。
ただし、dtypeに `datetime` と記入してもダメだった。

# コード
下記のように `parse_dates` を用いて、datetimeとして扱いたい列を指定する。

```test.py
holiday = pd.read_csv(HOLIDAY_FILE,
                      encoding="cp932",
                      header=None, 
                      dtype={0: str,1:str},
                      parse_dates=[0])
```

すると、下記のようにdatetimeとして読み込めた。

```
holiday[0][0]
-> Timestamp('2010-01-01 00:00:00')
```

# おわりに
ありがとうございました。

# 参考サイト
[datetime dtypes in pandas read_csv](https://stackoverflow.com/questions/21269399/datetime-dtypes-in-pandas-read-csv)
Azure Functionsでのトリガーの流量制御

ストレージキュートリガーとかサービスバストリガーとかの場合、デフォルトで１インスタンスあたりの同時実行数は１６。

従量課金プランやAppServiceプランの複数インスタンス環境ではインスタンス数倍となる。

ひたすらにスピードを求める処理の場合にはどんどんスケールしてくれればいいけど、APIアクセスなどで相手方を労わらなければならない場合には流量制御が必要になる。

方法論としてはサービスバスキューでもストレージキューでもhost.jsonでbatchSizeを指定すれば、１インスタンスあたりの同時実行数を指定することができる。

けれどインスタンスがスケールしてしまう場合には厳密に指定できない。

そこでSingletonAttributeを用いる。

https://github.com/Azure/azure-webjobs-sdk/wiki/Singleton

SingletonAttributeを使うとデフォルト設定の場合にはトリガー実行時にロック制御を行い、一つのFunctionしか実行されなくなる。

インスタンス関係なく同時実行数は１。

ただしオーバーヘッドが結構ある。　正確には測ってないけど処理結果を見てる感じだと700msecくらいオーバーヘッドありそう。

SingletonAttributeをSingletonMode = Listnerで使用するとスケールする環境だとしても設定した関数は１インスタンスでのみリスニングが行われるので実質１インスタンスでの実行を保証できる。

よってスケールしてしまう環境下で同時実行数を制御したい場合にはSingletonAttribute(Mode=Listner) + BatchSizeの指定が最もコントロールしやすい設定でないかと思う。
riot router

# riot router

## npm

```sh
npm i --save riot-router
```

## main.js

```javascript
var route = require('riot-route')

//デフォルトのbaseは”#”です
//route.base('#')

route(function (collection, id, action) {
    console.log('collection: ' + collection)
    console.log('id: ' + id)
    console.log('action: ' + action)
})

// `#hello`のみに一致
route('hello', function (name) {
    console.log('hello')
    riot.mount('content', 'sample')

})

route.stop() // 古いコールバックを解除
route.start() // 再起動
```

## 参考：

- [API · ルータ](http://riotjs.com/ja/api/route/)
- [Riot.js 3.3 と Lumen 5.4 でつくる 初めてのSPA　フロントエンド編](https://qiita.com/yjhm214/items/62652d235ae0327ebf5d)
Mac oh-my-zsh で補完するとおかしくなるとき

# 概要

`ls a` と打った後に、タブで保管すると

```
lsls a
```

みたいな表示になってしまう。

これを解決したい

# まとめ

`LC_ALL` を設定したらなおった。

.zshrc に以下を書いてみた。

```
export LC_ALL=ja_JP.UTF-8
```

他の環境変数でも良いのかもしれないが、これでうまくいった。

# 追記

`.zshrc` の中に以下のような記述があったので、コメントアウトしたところ、これでも動いた。

`LANG` でもよいようだ

```zsh
# You may need to manually set your language environment
export LANG=en_US.UTF-8
```
docker-composeでangular-cliの環境を作ってみる

## 概要
開発環境作成ついでにコンテナ内で動くAngularを作成してみる

先日
https://qiita.com/friedaji/items/93813e765dddcb9680a0
色々はまってたものを、別のコンテナを作ったことで作り直してみたのでまとめ直し

+ 10/6 ローカルインストールと、環境変数に対応修正


## 構成

buildとservでワーキングディレクトリを変えたかったので
composeファイルをオーバーライドするように設定

```:ファイル構成
　├ data/
　│　└ app/              ------ アプリケーションインストール用ディレクトリ
　├ nodejs/
　│　└ nodejs.dockerfile ------ コンテナ定義
　├ .env                 ------ 環境変数定義
　├ docker-compose       ------ ベースのcompose
　├ docker-compose.init.yml  -- アプリケーションインストール定義
　└ docker-compose.serv.yml  -- サービス起動用
```

### コンテナ
node.jsのオフィシャルコンテナにユーザーを追加し、PATHを通しておく

```yaml:nodejs.dockerfile
FROM node:8.6

ARG NODE_USER 
ARG DATA_DIR

RUN useradd -s /bin/false -m ${NODE_USER}

RUN mkdir -p /var/app
RUN chown -R ${NODE_USER}:${NODE_USER} /var/app

USER ${NODE_USER}
ENV PATH $PATH:./node_modules/.bin
WORKDIR ${DATA_DIR}
```

### Docker-compose

#### ベース

```yaml:docker-compose.yml
version: "3.3"
# angular cli
services:
  angular:
    #buildのみ
    build:
      args:
        - NODE_USER=$NODE_USER
        - DATA_DIR=$DATA_DIR
      context: ./nodejs
      dockerfile: nodejs.dockerfile
    volumes:
      - type: bind
        source: $HOST_DIR
        target: $DATA_DIR
      - type: bind
        source: ./logs
        target: /var/log/syslog
    logging:
      driver: "json-file"
      options:
        max-size: "50M"
        max-file: "10"
```

#### インストール用
ローカルインストールをしようとするとホスト側とのバインドのタイミングがbuildの後になる為、Dockerfileのほうでバインドしなければならないが、Windowsベースではややこしくなる為、build後に改めて実行にしています
(containerから直接見えるのはDocker-for-WindowsのHyper-V上のホストな為、環境依存な記載をする必要が有りそう？)

```yaml:docker-compose.init.yml
version: "3.3"
# angular cli
# angular本体のインストール、プロジェクト作成
services:
  angular:
    command:
      - /bin/sh
      - -c
      - |
        npm install @angular/cli
        ng new ${APP}
```

#### 開発サーバ起動用
live reloadが有効にならず色々見た所
https://github.com/angular/angular-cli/issues/1610
pollを有効に、という事だったのでオプションに追加
また、デフォルトではコンテナ外から繋げない為、hostも指定する

```yaml:docker-compose.serv.yml
version: "3.3"
# angular cli
services:
  angular:
    environment:
      - "APP_DIR=${APP_DIR}"
    ports:
      - "$CPORT:$LPORT"
    working_dir: ${APP_DIR}
    #poll --- 単位ミリ秒で指定、且つwatching有効化
    #host --- コンテナ外からアクセスできるようにするため、全てのアドレスで待ち受ける
    command: ng serve --host 0.0.0.0 --poll=2000
```

```ini:.env
NODE_USER=appuser
APP=test-app
CPORT=4200
LPORT=4200
DATA_DIR=/var/app
APP_DIR=/var/app/test-app
HOST_DIR=./data/app
```

## 起動のしかた

### ビルド

コンテナのビルドを行い、ワーキングディレクトリをバインドする

```
docker-compose build
```

### アプリケーションの作成

インストール用の定義を実行する

```
docker-compose -f docker-compose.yml -f docker-compose.init.yml up
```

### サーバの起動

起動用のcomposeでベースをオーバーライドし、サーバーを起動する

```
docker-compose -f docker-compose.yml -f docker-compose.serv.yml up -d
```

### 動作確認

http://localhost:4200
Webサーバから謎のバイナリが返ってくる場合の対処法

# 事象

PHPで、JSON文字列を返すAPI用のテストを書いたけどなぜか動かない。
そこで画面にレスポンスを表示してみたら・・・

![image.png](https://qiita-image-store.s3.amazonaws.com/0/135266/23ed7a95-eb71-56cf-a2f0-46809cc62dcd.png)

＿人人人人人人人人人人＿
＞　**突然のキリル文字**　＜
￣Y^Y^Y^Y^Y^Y^Y^Y^￣
キリル文字：Й　←こんなの

# 検証
確か、バイナリデータをコンソールに表示しようとすると、こんな文字化けっぽい現象を起こしていたはず・・・
しかし、なぜバイナリになるのか分からない。
デバッグしてもデバッグしても、分からない。

ふとレスポンスヘッダを眺めてみるとこんな一文を発見。

**`Content-Encoding: gzip`**

＿人人人人人人人＿
＞　**突然のgzip**　＜
￣Y^Y^Y^Y^Y^Y￣

# 検証２
さらに、リクエストヘッダ（自分でテストに書いた）も眺めてみると、こんな一文を発見。

**`Accept-Encoding:gzip, deflate, sdch`**

なるほどなるほど。
gzipで寄越していいよってリクエストをした結果、サーバ側でgzipで返してあげたってことだね。
調べてみると、そういう仕様があるらしい。
参考：[Apacheのmod_deflateでコンテンツを圧縮してサイトを高速化する方法](http://oxynotes.com/?p=6519)

# 結論
リクエストヘッダから
`Accept-Encoding:gzip, deflate, sdch`
を削除したら、文字列で結果を受け取れました。

mod_deflateを導入した覚えもないんだけど、テスト環境だしまぁいっか。


# 反省
- ブラウザのログからのコピペをリクエストヘッダに設定していた。よく見よう。
- デバッグの前に、今分かる情報をよく見よう。
Mac | peco でシェルのコマンド履歴からクリップボードにコピーする

# コマンド例

```
$ history 1 | sort -k1,1nr | perl -ne 'BEGIN { my @lines = (); } s/^\s*\d+\*?\s*//; $in=$_; if (!(grep {$in eq $_} @lines)) { push(@lines, $in); print $in; }' | peco | tr -d '\n' | pbcopy
```

履歴からコピーして

![image.png](https://qiita-image-store.s3.amazonaws.com/0/89618/e40a1243-2303-cb45-2892-27a623094bc9.png)

他のエディタなどにペーストできる。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/89618/51dc9a62-6a93-4939-f3d1-4eec37b94b7f.png)

# エイリアス登録

`.bash_profile` などに。

```
alias pp="history 1 | sort -k1,1nr | perl -ne 'BEGIN { my @lines = (); } s/^\s*\d+\*?\s*//; \$in=\$_; if (!(grep {\$in eq \$_} @lines)) { push(@lines, \$in); print \$in; }' | peco | tr -d '\n' | pbcopy"
```

# 環境

- peco version v0.5.1
- Mac OSX Sierra








<!-- Update From Qiita API -->

# チャットメンバー募集


何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
jqueryで入力文字数を取得して、画像を切り替える方法

#keyupを使用して入力文字を検知

	$('inputを指定する').keyup(function() {
		var length = $("inputを指定する").val().length
	});

#入力文字を比較する。
	if(2 <= length) {
		// 実行した処理を記載する。
	}

#表示を切り替える
	// display:noneをblockに変更する
	$("display:noneをblockをしたい箇所を指定").show();
	// display:blockをnoneに変更する
	$("display:blockをnoneをしたい箇所を指定").hide();


#上記の部分を合わせると入力文字数により表示を切り替えれる。
	$('inputを指定する').keyup(function() {
		var length = $("inputを指定する").val().length
		if(2 <= length) {
			$("display:noneをblockをしたい箇所を指定").show();
			$("display:blockをnoneをしたい箇所を指定").hide();
		}
		if(1 >= length) {
			$("display:noneをblockをしたい箇所を指定").show();
			$("display:blockをnoneをしたい箇所を指定").hide();
		}
	});
Atom1.21.0でサポートされたLanguage Server Protocolの使い方


日本時間で10月4日の深夜，Atom 1.21.0がリリースされました．

1.21.0の[リリースノート](https://github.com/atom/atom/releases/tag/v1.21.0)によると，

> - Language Server Protocol support and integration via [atom-languageclient](https://github.com/atom/atom-languageclient) and [atom-ide-ui](https://github.com/facebook-atom/atom-ide-ui).

とのことで，Language Server Protocolがサポートされたようです．

今回は，この機能をTypeScriptのプログラムで試してみます．



## Atom IDEのセットアップ

リリースノートによると，`atom-ide-ui`をインストールしておく必要があるようです．

また，TypeScript向けのLanguage Serverの機能を提供する`ide-typescript`もインストールしておきます．

````bash
apm install  atom-ide-ui ide-typescript
````

`ide-typescript`は，[sourcegraph/javascript-typescript-langserver](https://github.com/sourcegraph/javascript-typescript-langserver)を利用してLanguage Serverの機能を提供しているようです．



## ide-typescriptを使ってみる

[ide-typescriptのREAMDE](https://github.com/atom/ide-typescript#features)によると，以下の機能が使えるようです．

> - Auto completion
> - Diagnostics (errors & warnings)
> - Document outline
> - Find references
> - Go to definition
> - Hover

順番に試してみます．

### Auto Completion

IDE等でよく見るオムニ補完です．vscodeだとIntelliSenseと呼ばれたりします．

![auto-completion.png](https://qiita-image-store.s3.amazonaws.com/0/28859/274847bc-7097-48df-7180-643f1cee88c9.png)


### Diagnostics

直訳すると「診断」となりますが，**エラーやコーディングスタイルに関する警告等**を表示させることができます．

![diagnostics.png](https://qiita-image-store.s3.amazonaws.com/0/28859/3275cba3-d230-fe67-2c31-4176fe7c3550.png)




### Document Outline

そのファイルで定義されている変数やクラス等を表示してくれます．

![outline.png](https://qiita-image-store.s3.amazonaws.com/0/28859/d5e1cd55-aab5-7b33-5d1e-8fc10298c3d1.png)



### Find references

変数等がどこから参照されているのか調べることができます．

対象のシンボルを右クリックして，`Find References`をクリックすると

![find-references-menu.png](https://qiita-image-store.s3.amazonaws.com/0/28859/9819c586-e7df-55a2-b1e7-384e385a2803.png)

画面下部にパネルが開き，参照している場所の一覧が表示されます．

![find-references.png](https://qiita-image-store.s3.amazonaws.com/0/28859/910d377e-49de-b493-0f4c-efc78325efb5.png)



### Go to definition

シンボルの上でCtrlを押しながらクリックするとその定義元にジャンプすることができます．

![goto-definition.gif](https://qiita-image-store.s3.amazonaws.com/0/28859/4891bd9d-f66a-1c88-08a5-2c49f7964b87.gif)

### Hover

シンボル上にマウスを置くと，その型情報を確認することができます．

![hover-1.png](https://qiita-image-store.s3.amazonaws.com/0/28859/dd435c97-3862-6376-6cd4-63dcdd655f33.png)


また，右端のピンマークをクリックすると，マウスを移動しても消えなくなり，複数のシンボルの型情報を表示させておくことも可能です．

![hover-2.png](https://qiita-image-store.s3.amazonaws.com/0/28859/435183ff-a82a-219c-59bf-b9728b99b00d.png)



## TypeScript Extensibilityについて

TypeScript2.3から使えるようになった，Typescript Extensibilityという機能があります．

Language Serverのコア部分に手を入れることなく，簡単に機能を追加できる，というものです．

例えば，この機能を使ってtslintやAngular Language Service等の機能を利用できます．

しかしAtomでは，現時点でこの機能を利用することができません．

`ide-typescript`がLanguage Serverの機能を提供するために内部的に使用している[sourcegraph/javascript-typescript-langserver](https://github.com/sourcegraph/javascript-typescript-langserver)が，TypeScriptの2.3より古いバージョンを利用するようになってしまっているためです．

ただ，既にissueには上がっていて，議論されている途中のようなので期待したいところです．

[use the typescript version that is adjacent to the `tsconfig.json` #350](https://github.com/sourcegraph/javascript-typescript-langserver/issues/350)
CISCO Wireless Networkにログインするのがめんどいのでシェルで解決

学校の学内ネットワークに毎回ログインするのがとても面倒なので以下のように.zshrcに設定した。

```bash:.zshrc
alias login='curl -Ss --ciphers AES256-SHA --data "buttonClicked=4&username=<USERNAME>&password=<PASSWORD>&Submit=Submit" <LOGIN URL>'
```

使うときは`<USERNAME>`と`<PASSWORD>`と`<LOGIN URL>`は適宜変更して。

JSを読んだら案外簡単に実装できたのでカキコ。


また、以下と組み合わせると自動ログインが実装できる。

[NetowrkManagerで特定のWiFiに繋がったタイミングで自動でコマンドを実行させる
](https://qiita.com/onokatio/items/d9297e567e9cc75586ed)