OmniAICreator/Qiita-1.07M huggingface dataset:
オフラインリアルタイムどう書くE11 「ツリーの中の距離」の解をPrologで書いた



問題はこちら: http://nabetani.sakura.ne.jp/hena/orde11tredis/
みなさんの回答はこちらから: http://qiita.com/Nabetani/items/10b2ccc28301e44e09e6

```prolog:solver.pro
factor1(N, F) :- 
  N2 is N div 2 + 1,
  between(3, N2, F),
  N mod (F - 1) =:= 0.

route([N|NS], RS) :-
  factor1(N, F),
  route([F, N|NS], RS).
route(NS, NS).

distance(RA, RB, D) :-
  append(SA, R, RA),
  append(SB, R, RB),
  length(SA, LA),
  length(SB, LB),
  D is LA + LB.

distance(N, A, B, D) :-
  findall(R, route([N], R), RS),
  member([A|RA], RS),
  member([B|RB], RS),
  distance([A|RA], [B|RB], D).

parse(Input, N, A, B) :-
  append(NS, [0':|ABS], Input),
  append(AS, [0',|BS], ABS),
  number_codes(N, NS),
  number_codes(A, AS),
  number_codes(B, BS).

solve(Input, Result) :-
  parse(Input, N, A, B),
  findall(D, distance(N, A, B, D), DS),
  min_list(DS, MD),
  number_codes(MD, Result),
  !.
```

```prolog:orde11.pro
% $ gplc orde11.pro
% $ ./orde11

:- initialization(main).
:- include(solver).

judge(_, Expected, Expected) :-
  write(.),
  !.
judge(Input, Expected, Actual) :-
  format("~ninput    ~s~nexpected ~s~nactual   ~s~n", [Input, Expected, Actual]).

test(Input, Expected) :-
  solve(Input, Actual),
  judge(Input, Expected, Actual).

main :-
  test("50:6,3", "1"),
  test("98:5,11", "4"),
  test("1000:33,20", "7"),
  test("514:9,18", "8"),
  test("961:5,4", "3"),
  test("1369:1369,3", "2"),
  test("258:16,12", "5"),
  test("235:13,3", "2"),
  test("1096:19,17", "8"),
  test("847:7,17", "6"),
  test("1932:3,5", "2"),
  test("2491:4,8", "3"),
  test("840:421,36", "2"),
  test("1430:37,111", "3"),
  test("496:17,9", "2"),
  test("891:6,10", "1"),
  test("1560:196,21", "2"),
  test("516:20,12", "5"),
  test("696:30,59", "2"),
  test("1760:5,441", "2"),
  test("1736:11,26", "5"),
  test("1518:17,34", "4"),
  test("806:63,16", "5"),
  test("1920:3,97", "2"),
  test("1150:13,22", "4"),
  test("920:116,5", "1"),
  test("2016:7,337", "2"),
  test("408:9,25", "2"),
  test("735:36,8", "2"),
  test("470:5,31", "2"),
  test("2100:12,351", "3"),
  test("870:36,10", "1"),
  test("1512:253,13", "2"),
  test("697:12,15", "3"),
  test("1224:5,14", "2"),
  test("986:125,17", "3"),
  test("864:12,13", "3"),
  test("500:21,51", "2"),
  test("819:33,21", "4"),
  test("594:55,3", "2"),
  test("638:17,24", "3"),
  nl,
  halt.
```

GNU-Prolog のコンパイラ `gplc` でコンパイルして、できた実行ファイルを起動します。

```
$ gplc orde11.pro
$ ./orde11
```
webブラウザでBigQueryから大きなデータをダウンロードする


BigQuery のコンソール画面からデータをダウンロードする際、大きすぎるデータは BigQuery の制約により直接ダウンロードすることができません。ダウンロードする場合は Google Cloud Storage を利用できます。

## クエリ結果を別テーブルに保存する
まず、検索した結果を別テーブルに保存しておきます。
結果画面から `Save as Table` を押します。

![1.png](https://qiita-image-store.s3.amazonaws.com/0/14918/a2b85cce-4b6c-bf81-614f-f7e7bf0af3ae.png "1.png")


ポップアップが出てくるので、任意のデータセット(この場合は`analysis`)に保存します。権限がない場合は管理者に申請する必要があります。権限がある限りプロジェクトやデータセットをまたいで保存することができます。

![2.png](https://qiita-image-store.s3.amazonaws.com/0/14918/59ad57cf-af3e-9d81-d06c-6a3ba82167b8.png "2.png")


`Job History` をみると、テーブルがコピーされていることがわかります。（アイコンが緑）
エラーになっている場合もここに表示されます。（アイコンが赤）

![3.png](https://qiita-image-store.s3.amazonaws.com/0/14918/3cf691ea-b942-58c9-dffe-8260577bfe41.png "3.png")


## テーブルを Cloud Storage にエクスポート

次に、先程コピーしたテーブルを Cloud Storage にエクスポートします。
テーブルを選択し、`Export Table` を押します。

![4.png](https://qiita-image-store.s3.amazonaws.com/0/14918/ad21bdd0-eba1-7b01-684a-3b859cb6a182.png "4.png")


ポップアップが出てくるので、自分が保存する権限を持っているバケットの下に任意の名前をつけて保存します。例えば `gs://[bucket名]/[key名]` など。バケットがない場合や権限がない場合は作成するか管理者に申請する必要があります。

![5.png](https://qiita-image-store.s3.amazonaws.com/0/14918/06a4dad1-6731-c208-6e41-4db19a49263d.png "5.png")


`Job History` をみると、エクスポート中になっています。（アイコンが黒や黄色）

![6.png](https://qiita-image-store.s3.amazonaws.com/0/14918/362264b6-d372-647d-5f9b-10bc7be61aa4.png "6.png")


しばらく待ってから更新するとエクスポートが完了していることがわかります。（アイコンが緑）
エラーの場合もここに表示されます。（アイコンが赤）

![7.png](https://qiita-image-store.s3.amazonaws.com/0/14918/c3011306-a402-cc42-97bd-6456ac618b7d.png "7.png")


## ローカルへのダウンロード

Cloud Storage に保存ができたので、ローカルにダウンロードできるようになりました。
https://console.cloud.google.com/ から `Cloud Storage` を選択します。

![8.png](https://qiita-image-store.s3.amazonaws.com/0/14918/e857ad5a-4630-a5f4-1bb8-b0b452be7281.png "8.png")


バケットの中に作成したファイル(キー)があるので、クリックするとダウンロードできます。

![9.png](https://qiita-image-store.s3.amazonaws.com/0/14918/5a134568-d29e-3670-c9e0-3657a135277f.png "9.png")
Gradle3.4のIDEプラグインがバグっていてIntelliJでデバッグが不可になる

# 現象

この不具合は、Gradle3.4にて発生する。

IntelliJ（等 ScopeをサポートしているIDE）でGradleプロジェクトのDependencyを読み込むと、compileスコープで設定しているはずのDependencyがProvidedとして読み込まれるなどして、実行/デバッグ時にJarが見つからない不具合が起きる。

# 対処方法

Gralde 3.3以下を使う。またはバグの修正を待つ。

# 参考

* [気づいたツイート](https://twitter.com/aya_eiya/status/833975489391841282)
* [反応の会話](https://twitter.com/mike_neck/status/833976112086552577) - w/ @mike_neck
* [多分原因のコミット](https://github.com/gradle/gradle/commit/8cb2b1541438c951f59d1322014db4b7ade1aa95#diff-0fa13ec419e839ef2d355b7feb88b815)
様々な言語における並行、並列処理(PHP編)

PHPは最近の他の言語とは違ってシングルスレッドなので、一回のリクエストで複数の処理を同時に実行したりといったことは通常はできない。

##プロセスフォーク
```php:process_fork
<?php
$pid = pcntl_fork();
if($pid == -1){
	die("Cannot fork");//フォーク失敗
}else if($pid){
	echo "I am parent!\n";//親プロセス側
	pcntl_wait($status);//子プロセス終了を待機しゾンビプロセス化を防ぐ
}else{
	echo "I am child!\n";//子プロセス側
}
?>
```

##マルチスレッドプログラミング
ここではpthreadsモジュールを用いる。

```php:pthread
<?php
class ThreadTest extends Thread{//Threadを継承したクラスがスレッドオブジェクトに
    //start時に呼び出される
    public function run(){
        sleep(10);//10秒待機
        echo "Thread finished.\n";
    }
}
$th1 = new ThreadTest();
$th1->start();//開始

var_dump($th1->isRunning());//Thread::runがまだ実行中か->true

$th1->join();//スレッドが終わるまで待機

//$th1->kill(); //スレッドの強制終了。非推奨

echo "Finished.\n"
?>

>引用: http://qiita.com/rana_kualu/items/02f380f2f3d5020051bb
```
Postgres使い方

* Start server

```Bash
pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start
```

* ログインするには
    * はじめに, all usersを見る
    
    ```bash
    psql -U "admin name" -l
    ```
    
    * set user passwd
    
    _default user always be postgres_
    
    ```bash
    sudo -u postgres psql postgres
    ```
    
    _psqlの中では_
    
    ```
    \password postgres
    ```

* データベース削除
    * with login

    ```
    drop database <.name>;
    ```
    
    * without login
        
    ```bash
    dropdb -e <database.name>
    ```
使いやすい命令(随時更新)


## find file
```
find ./
```
## find with name
```
find ./ -name 'file.name'
```
## 

## Zip directory
```bash
zip -r <name>.zip <dir_name>/
```

unzip

```
unzip <file>.zip
```

## リモートからファイルコピー

```
scp <username>@<address>:<path> ./
# <path>は絶対pathでも相対pathでもいい、ただし相対はリモートの自分のdirから始まる
# ./は現在のpathを意味、同じく絶対/相対pathでもOK

# -r でdirを持ってくる

# 逆も可能
scp ./<file> <username>@<address>:<path>
```

## apache basicサーバセットアップ

簡単なサーバを構築するのであれば

```bash
yum install httpd # CentOS
apt-get install httpd # Ubunut/Kali
```

```bash
/etc/init.d/httpd start
or
service httpd start
```

ルート設定

```
vi /etc/httpd/conf/httpd.conf
# find DocumentRoot change to absolute path like /var/www/<sitename>
```

## su ユーザー変更

```cmd
# about detail u can see from
man su

su - user # login to user with passwd

cat /etc/passwd # check all users
cat /etc/group # check all group

w / who # see who is login

```
Rails

# 0001
## Limit vs Take
* take return array
* limit return ActiveRecord relation which can used to chain

## How to Use CSV in ruby for write to file

```ruby

require 'csv'

HEADERS = ['x', 'y', 'z']

CSV.open('file', 'w', headers: HEADERS) do |csv|
    csv << [x, y, z]
end

# or

test = CSV.open('file', 'w', headers: HEADERS)
test.puts [x, y, x]
test.close

```

## present? vs blank? (nil?, empty?)
* nil? 単純にnilか
* empty? は[], {}, '', ""を判断 not nil
* blank?は nil? + blank?
* present?は blank?の逆、でもonly for ruby

# 0003

## Rails単一継承(STI)とサブdir構成を実現する方法

### 方法1

```
app/models/parent.rb
app/models/parent/mother.rb
app/models/parent/father.rb

class Parent < ApplicationRecord; end
class Parent::Mother < Parent; end
class Parent::Father < Parent; end

# rails consoleで検索するには
Parent::Mother.all
Parent.where(type: 'Parent::Mother')

```

### 方法2

```
# add this to config/application.rb
config.autoload_paths += Dir[Rails.root.join('app', 'models', 'parent')]

app/models/parent.rb
app/models/parent/mother.rb
app/models/parent/father.rb

class Parent < ApplicationRecord; end
class Mother < Parent; end
class Father < Parent; end

# rails consoleで検索するには
Mother.all
Mother.where()

```

# 0004

* HiveQL [Hive入門 ](http://dev.classmethod.jp/hadoop/hadoop-advent-calendar-06-hive-introduction/)
* [Apache Hadoop](https://ja.wikipedia.org/wiki/Apache_Hadoop)
* [vender directory for development](https://tommcfarlin.com/the-vendor-directory/)


## development method

* DDD develop
* TDD (test-driven)
* FDD ()

* [arkency Blog](http://blog.arkency.com/products/)

# 0005 

* Real time application implement [example](http://qiita.com/moriyaman/items/bb9af15a73846aa16590)
* Webpack separate front from back [explain](http://rochefort.hatenablog.com/entry/2016/12/09/080000)
Ansible の unarchive でリモートのアーカイブの中から1つのファイルだけ展開する

サクッとできそうでできない。

```yaml
- unarchive:
    src: https://github.com/prometheus/node_exporter/releases/download/v0.13.0/node_exporter-0.13.0.linux-amd64.tar.gz
    dest: /usr/local/bin/
    creates: /usr/local/bin/node_exporter
    remote_src: yes
    owner: root
    group: root
    extra_opts:
      - --strip-components=1
      - node_exporter-0.13.0.linux-amd64/node_exporter
```

要するに下記とだいたい同じ。

```sh
curl -s http://shs-opr:8080/next/thirdparty/prometheus/node_exporter-0.13.0.linux-amd64.tar.gz |
  sudo tar xvzf - --no-same-owner --directory=/usr/local/bin \
    --strip-components=1 -- node_exporter-0.13.0.linux-amd64/node_exporter
```

`extra_opts` でがんばるのが泥臭いしこれなら `shell` で良いんじゃない？、という気もします。
test kitchen で、port forward を設定する

# 概要

test kitchen でテスト環境をつくったときに、
外から接続したいので、ポートフォワードしたい

# 結論

公式に書いてあるのでそれをみるのがよいが、以下のようになる

```
driver:
  network:
    - ["forwarded_port", {guest: 80, host: 8080}]
```

* [test-kitchen/kitchen-vagrant: Vagrant driver for Kitchen](https://github.com/test-kitchen/kitchen-vagrant#-network)
ArduinoとNode.jsでシリアル通信で文字列を送受信するスクリプト

低価格なArduino互換機などを使って、サーバーのステータスを電光掲示板やLEDで表したいとか、逆にArduinoの光センサや温度センサの値をサーバーで処理したいってことはよくあるんじゃないかと思います。

その際に、毎回用意するのがUSBを利用したシリアル通信で文字列を送受信する実装です。よく使うのでテンプレートを用意しておきました。

[sifue/arduino-serial-js](https://github.com/sifue/arduino-serial-js)

コードは、以上のリポジトリに置いてあります。

git cloneして、npm install。 [serialport](https://www.npmjs.com/package/serialport) をそのまま使っています。

Node.js のコードは、

```js
'use strict';

// シリアルポートに定期的に書き込んではデータを受け取る
// パーストークンは \n
// 1秒おき送信

const SerialPort = require('serialport');
const port = new SerialPort('/dev/cu.usbmodem14141', {
  parser: SerialPort.parsers.readline('\n'),
  baudrate: 9600
});

port.on('open', function () {
  console.log('Serial open.');
  setInterval(write, 1000, 'OK\n');
});

port.on('data', function (data) {
  console.log('Data: ' + data);
});

function write(data) {
    console.log('Write: ' + data);
    port.write(new Buffer(data), function(err, results) {
      if(err) {
        console.log('Err: ' + err);
        console.log('Results: ' + results);
      }
  });
}
```

こんな感じ。writeメソッドを1000ミリ秒ごとに定期実行してます。ここでは、パーストークンを\nにして、1秒おきに送受信。レートやシリアルポートのパスはArduino IDEとか見つつ適宜書き換えて下さい。

Arduinoのコードは、

```ino
#define LED  13
int recieveByte = 0;
String bufferStr = "";
String okStr = "OK";

void setup() {
  pinMode(LED, OUTPUT);
  Serial.begin(9600);
}

// シリアルポートに定期的に書き込んではデータを受け取る
// パーストークンは \n
// OK を受け取ったら 13 LED点灯、それ以外を受け取ったら削除
// 1秒おきループ

void loop() {
  bufferStr = "";
  while (Serial.available() > 0) {
    recieveByte = Serial.read();
    if (recieveByte == (int)'\n') break;
    bufferStr.concat((char)recieveByte);
  }

  // 受け取ったデータがあるなら送りかえしてスイッチ操作
  if (bufferStr.length() > 0) {
    Serial.print("I received: "); 
    Serial.println(bufferStr);
    if (okStr.compareTo(bufferStr) == 0) {
      digitalWrite(LED, HIGH);
    } else {
      digitalWrite(LED, LOW);
    }
  }
  
  delay(1000);
}
```

こんな感じでとりあえず13ピンのLEDの反応だけ書いて、受け取ったものを\nでパースしてそのまま返す感じ。それを1秒おきループで実装。これをコンパイルして送信。

これで、

```sh
~/w/arduino_serial_js $ node index.js
Serial open.
Write: OK

Data: I received: OK
Write: OK

Data: I received: OK
Write: OK
```

こんな感じにArudinoとNode.jsを動かしているマシンでシリアル通信して、文字列をやり取りするようにできます。LEDも送っている文字列がOKならば光ります。これをひな形にいろいろおもしろいもの作っていきましょう。
カラム【自分用】



##カラムの追加と削除の場合

```
rails generate migration クラス名 カラム名:データ型( カラム名:データ型)
```

##カラム追加

```
rails generate migration AddDetailsToTitles price:integer author:string
```

##カラム削除

```
rails generate migration RemoveAuthorFromTitles author:string
```
Pythonのマルチプラットフォーム開発はElectronが最適解


Python界隈を後から追従しようとして、ドツボにはまったアカウントがこちらです。
色々調べて回っていたら、Qiitaに[Pythonでデスクトップアプリを作る with Electron](http://qiita.com/yoshizaki_kkgk/items/da9711c26e71522ad289)という記事が上がっていたので、試してみることにしました。

ほぼ全てがbrewとpipで片が付くので、オススメです。

素直にElectron、HTML5、JavaScriptをやってもいいのでしょうけど、Pythonを使って何か作りたい、勉強したい並びに業務の改善効率に役立てたいという気持ちがありました。
なお、HTML5やCSS3はHTML3から追従できなくなったので、どうせやるならpythonでやろうかな、とか考えたわけです。(pythonの勉強にもなる)

# Python界隈のマルチプラットフォーム開発環境の状況 2017年2月21日現在


腐ってやがる…早すぎたんだ。


もうPython周りの情報に振り回されるのは疲れました。
下記の理由でPythonだけで完結することは不可能と感じています。

- PyQt5(with Python3.6)を試そうとしたらPyInstallerが3.6系に追従できてないためアプリ化できない
- PySideは3.4.6で動かない(2.7は動いたけど、2019年でサポート切れる)
- wxPythonを試したらどのバージョンもダメだと返してくる
- kivyはUIがOpenGLなのでどちらかというと、2Dゲーム3Dゲーム向きなので、趣旨が違う

もしかしたら他にも開発方法はあるのかもしれませんが、もうPython3系がボロボロ状態なので追従できている気がしませんでした…

# Electronに逃げることにします。

[Pythonでデスクトップアプリを作る with Electron](http://qiita.com/yoshizaki_kkgk/items/da9711c26e71522ad289)の通り、ビルドしたらPython2でもPython3でもちゃんと動きました。
***神を見つけた気分になりました。***
JavaScriptもやらなきゃならなくなりますけども…。
それぐらい頑張ろうという気持ちにもなるってもんです。

## Mac版のインストール手順

brewのインストール

```
$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
```

定期的に実行すると幸せになれる呪文

```
$ brew update;brew upgrade;brew prune;brew cleanup; brew doctor
```

Pythonとnpmのインストール作業

```
$ brew install python python3 npm
```

この時の状態としては、下記の通りです。

```
$ python -V
2.7.13
$ python3 -V
3.6.0
$ npm -v
4.1.2
```

FlaskとElectronのインストールからは[Pythonでデスクトップアプリを作る with Electron](http://qiita.com/yoshizaki_kkgk/items/da9711c26e71522ad289)の通りです。

ぼくはこうしましたが。

```
$ pip install -U pip wheel setuptools Flask
$ pip3 install -U pip wheel setuptools Flask
```

記事中にある。サンプルコードのhello.pyも下記のように書き換えて動作確認済みです。

```
#!/usr/bin/env python
もしくは
#!/usr/bin/env python3
```

Mac版はOKでした。

## Linux版(CentOS7)

最低限、[CentOS7にpython3系のインストール](http://qiita.com/glostuan/items/6030e309542615470e0d)でセットアップしてから取り掛かります。

Macと同様に下記のコマンドを叩きます。

```
$ pip install -U pip wheel setuptools Flask
```

```
$ python -V
3.6.0
$ npm -v
3.10.10
```

下記が追加で必要でした。

```
sudo yum install libXScrnSaver
```

他は、Macで実施した時の対応で全部いけます。
OKOK。
いいっすね。

## Windows版(Win10 Pro)

最低限、[Node.js / npmをインストールする(for Windows)](http://qiita.com/taipon_rock/items/9001ae194571feb63a5e)と[Pythonをインストールする（for Windows）](http://qiita.com/taipon_rock/items/f574dd2cddf8851fb02c)でセットアップしてから取り掛かります。

共通作業を実施します。

```
$ pip install -U pip wheel setuptools Flask
```

pythonでnpmのバージョンは下記の通りです。

```
> python -V
2.7.13
> npm -v
4.1.2
```

他は、Macで実施した時の対応で全部いけます。

Windowsでのアプリ起動おっそいな…。
と、思ったら3.6系入れてて、調べたら、「[Windowsは3.6系はまだ動かないよ、バッキャロー](http://heimdal.hatenablog.com/entry/electron-setup-sqlite3)」と言われました。
というわけで、`python 2.7.13` を入れ直したんですけど、windows側もpython 3.x系が動かないとやばくね？というのはあるものの、いけそうな気がしてきたのでまあいいか…。
Javascriptで巨大なテキストファイルを少しずつ読み込む

[stack overflow](http://stackoverflow.com/questions/25810051/filereader-api-on-big-files?answertab=active#tab-top "stack overflow")のコードをアレンジして実現。

``chunk_size``ずつファイルを読み込み、読み込んだファイルを一文字ずつ変数に追加、改行を見つけたら ``callback``を適用して変数のメモリを解放する。なお、全ての改行コードに対応しているが、出力時には \n に統一される。

残念ながら改行のないテキストデータには使えない。javascriptの変数に格納できる文字数の最大値（Chromeであれば268,435,440文字）を超えた時点でエラーが起きる（その前にタブが落ちる可能性もあるが）。

```javascript
readBigTextForEachLine = (file, callback, chunk_size = 1024) => {
	let offset = 0;
	let text = "";
	let slice = "";
	let fr = new FileReader();

	fr.onload = (event) => {
	    if(typeof fr.result === "string") {
	        callback(text + fr.result.replace(/\r/g, "\n"));
	        return true;
	    }

		let view = new Uint8Array(fr.result);

		for(let i=0, l=view.length; i<l; i++) {
            if(view[i] === 13) { // \n = 10 and \r = 13
                if(view[i+1] === 10) {
                    i++;
                }

                callback(text + "\n");
                text = "";
                continue;
            }

			text += String.fromCharCode(view[i]);
		}

		seek();
	};

	fr.onerror = () => {
		callback("Failed to read file.");
	};

	let seek = () => {
		if (offset + chunk_size >= file.size) {
		    slice = file.slice(offset);
		    fr.readAsText(slice);
		} else {
			slice = file.slice(offset, offset + chunk_size);
	    	fr.readAsArrayBuffer(slice);
		}

		offset += chunk_size;
	}
	seek();
}
```

使い方の例は以下。第二引数に``console.log``を指定しているので、改行を見つけるたびにコンソールに内容が出力される。

```html
<script>
	document.getElementById("upload").onchange = (e) => {
		let file = e.target.files[0];
		readBigTextForEachLine(file, console.log);
	};
</script>

<html><body>
	Upload Big File: <input type="file" id="upload">
</body></html>
```
How to integrate MS Office with Alfresco nonSSL


## set Windows Registry below
```
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\WebClient\Parameters]
"BasicAuthLevel"=dword:00000002
```

## Setting up Alfresco Office Services using a non-SSL connection
http://docs.alfresco.com/aos1.1/tasks/aos-config-nonSSL.html
BCC(Block Checking Character) > Link > BCCの付ける位置 > ETXの後ろ

関連 http://qiita.com/7of9/items/b099245fd56d71cd1b6d
関連 http://qiita.com/7of9/items/a91a396f03fac9516814

BCC(Block Checking Character)を`<ETX>`の「前」と「後」のどちらにつけるか。

http://japan.renesasrulz.com/cafe_rene/f/forum19/2166/sum-stx-etx
> うちの製品はBCCは外ですね。理由としてはJISを参考にしています。ここのページの図11がわかりやすいです。www.kurejbc.com/.../technical-8.htm

図11はリンク切れのため閲覧できなかった。

「JIS」はどのJISなのか疑問であったが、別の項目検索時に以下を見つけた。

JIS X 5002:1975 基本形データ伝送制御手順
http://kikakurui.com/x5/X5002-1975-01.html
JIS X 5001:1982 伝送回線上のキャラクタ構成と水平パリティの用法
http://kikakurui.com/x5/X5001-1982-01.html

後者から引用

> `5. 水平パリティの用法
> ...
> (5) 伝送順序  ブロックチェックキャラクタは，ETB 又は ETX に続いて伝送し，その間には SYN も含め ていかなるキャラクタも挿入してはならない。
80ポート以外のHTTPリクエストをHTTPSリクエストにリダイレクトする設定

80ポートだけじゃなくて、3000ポートとか4000ポートでくるHTTPリクエストもHTTPSリクエストに変換したい場合。

## やること
```
server {
    if ($http_x_forwarded_proto = "http") {
      return 301 https://$host$request_uri;
    }
}
```

## 参考
http://serverfault.com/questions/733166/redirect-all-http-traffic-to-https-when-using-the-https-load-balancer-on-googl
DynamoDBのupdateItemのValidationException解消方法

#AWSマネジメントコンソールでDynamoDBのテーブル作成する場合

<img width="850" alt="スクリーンショット 2017-02-21 18.20.12.png" src="https://qiita-image-store.s3.amazonaws.com/0/87871/85626427-6567-7cf4-efb0-966ef9f8c37a.png">




#idはプライマリキーパーティションキーになっています。下記のソースをupdateItemすると

```
let updateParam = {
                        "TableName" : "test",
                        "Key" : {
                            "id" : {"S" : "12345"}
                        },
                        "UpdateExpression" : "SET #name =:name",
                        "ExpressionAttributeNames" : {
                            "#name" : "name"
                        },
                        "ExpressionAttributeValues" : {
                            ":name" : {"S" : "Jane"}
                        }
                    };
dynamodb.updateItem(updateParam, function(error, data) {
        if(error) {
            logger.error('error=' + util.inspect(error, false, null));
            if (error.retryable) {
                 //retry 
                 return;
            } else {
                //todo
                return;
            }
        } else {
            logger.info('update succeed');
        }
    });
```
##ValidationException
下記のvalidationエラーが出ます。

```
ValidationException: The provided key element does not match the schema
```
##原因
AWSのドキュメントをみたら

```
You can query only tables whose primary key is of hash-and-range type
```
マネジメントコンソールから作成されたテーブルのプライマリキーはシンプル (パーティションキー) または複合 (パーティションキーとソートキー) になっています。UpdateItemはサポートされたプライマリキーはハッシュかハッシュ&レンジです。

##解決方法
コマンドでテーブル作成、プライマリキーのtypeを指定することです。

```
aws dynamodb create-table --table-name test --attribute-definitions '[{"AttributeName": "id", "AttributeType": "S"}]' --key-schema '[{"AttributeName": "id", "KeyType": "HASH"}]' --provisioned-throughput '{"ReadCapacityUnits": 5, "WriteCapacityUnits": 5}'

```
もう一回上記のnodeを実行したら、正常に更新できました。

```
[2017-02-21 16:00:06.062] [INFO] [default] - update succeed
[2017-02-21 16:00:06.063] [INFO] [default] - update succeed
[2017-02-21 16:00:06.063] [INFO] [default] - update succeed
[2017-02-21 16:00:06.065] [INFO] [default] - update succeed
[2017-02-21 16:00:06.065] [INFO] [default] - update succeed
[2017-02-21 16:00:06.083] [INFO] [default] - update succeed
[2017-02-21 16:00:06.084] [INFO] [default] - update succeed
[2017-02-21 16:00:06.085] [INFO] [default] - update succeed
[2017-02-21 16:00:06.087] [INFO] [default] - update succeed
```
Swift備忘録

#思ったこと・気づいたことを書きなぐる

- Viewの階層を調べる
　→ view.performSelector("recursiveDescription")   
    
- ViewのAutoLayoutを調べる
 → 垂直方向：constraintsAffectingLayoutForAxis(.Vertical)
 → 水平方向：constraintsAffectingLayoutForAxis(.Horizental)
  
- tryがあるのにcatchが無いのはなぜ？
→「do { try xxx }catch」が基本構文
　「try!」で記載した場合はエラーが起こらないものという明示的な表記になる

- [weak self]と[unowned self]について
→ ボタンタップなどの同期処理にはunowned
→ クロージャーやハンドラーなど非同期処理の場合はweakにする
　┗ 非同期処理内で**self**を参照したい場合は以下のようにunwrapしておく
```guard let `self` = self else { return }```
  
- タブ切り替えなどで`addChildViewController`をした場合
→ そのあと必ず`didMoveToParentViewController`の記載を忘れないようにする
UniRxのシンプルなサンプル その13 (IObservableを作成する Create)

# IObservableを作成する #

ソースコードが吹き飛んで心が折れたので、更新していなかったのですが1年ぶりに記事だけの提供にします。

CreateはIObservableの挙動を定義して文字通り好きなIObservableを定義するメソッドです。
これを理解するにはそもそものIObservableとIObserverの理解が必要になります。

[ColdなIObservableとは何なのかソースコードを読んで理解してみる](http://qiita.com/Marimoiro/items/5feaab9f2ce75ae0fd6e)

自分で書いた記事ですが、とりあえずIObservableとIObserverが何をしているかを書いているので読んでみるといいかも。


# Createメソッドとは #

簡単に言うとIObservableの役割はSubscribeされたときに引数のIObserverに対して、各々決められたタイミングでOnNext,OnError,OnCompleteの処理をしてそれを中断するキャンセルトークンであるIDisposableを返すことです。

ですからCreateはこのSubscribeされたときの挙動をそのまま指定してIObservableを作成するメソッドになります。
そうみるとCreateの以下の定義は素直にSubscribeされたときの挙動を定義する。ということが見て取れます。

```csharp
public static IObservable<T> Create<T>(Func<IObserver<T>, IDisposable> subscribe)
```

# 作ってみる #

実際に
1,1,2,3,5とデータが流れてくるIObservableを作成してみます。

```csharp:SimpleCreate

            Observable.Create<int>(observer =>
            {
                observer.OnNext(1);
                observer.OnNext(1);
                observer.OnNext(2);
                observer.OnNext(3);
                observer.OnNext(5);

                return Disposable.Empty;
            }).Subscribe(i =>
            {
                Debug.Log(i);
            });

```

このような形でSubscribeしてきたobserverにOnNextしていけばいいわけです。

今回はキャンセルするものがなかったので、Emptyを返していますが、RxにはいくつかのIDisposableクラスが用意されているのでそれを使って返します。

このメソッドが使えるとどんなものも簡単にRx化できるので大変便利です。
（まぁぶっちゃけ、かなりのことがこのメソッド使わずにできるので使うことあんまないんですけどね）
Chrome拡張でAWSコンソールでのオペミスを防止する

## 対象

以下のようにAWSのリージョンでプロダクション環境/開発環境と使い分けて運用している人

```
東京(ap-northeast-1) => プロダクション環境
バージニア(us-east-1) => 開発（ステージング）環境
```


## 概要

AWSのリージョンによってプロダクション環境/開発環境と使い分けている場合、「開発環境だと思って操作したら実は本番だった」というオペミスが起こり得ます。
もちろんコンソール上部のリージョン名で区別がつきますが、これだと心もとないのでChrome拡張で本番環境の場合に警告を表示するようにしました。

![kore-honban-desuyo.png](https://qiita-image-store.s3.amazonaws.com/0/100092/89b555a4-765c-ea69-5c1d-4f991b88d954.png)


※本来はIAMで適切に権限を絞るべきだと思います。

## Chrome拡張の作り方

[公式ドキュメント](https://developer.chrome.com/extensions)がありますが、時間がなかったので[こちらの記事](http://qiita.com/edit-mode/items/26d7a22233ecdf48fed8)を参考にさせていただきました。

スクリプトを任意のページで実行できる「Content script」というのが今回の用途にあっていたので、コンソールのヘッダー部分に特定のリージョンを表す文字列が入っていたら警告を出す、というスクリプトを実行するようにしました。

```manifest.json
{
  "manifest_version": 2,
  "name": "これ本番ですよ",
  "description": "AWSコンソールがプロダクション環境(東京リージョン)の場合に警告を表示します",
  "version": "1.0",

  "content_scripts": [
    {
      "matches": ["https://*.console.aws.amazon.com/*"],
      "js": ["jquery.min.js", "script.js"]
    }
  ]
}
```


```script.js
/**
 * Created by Takuhiro Yoshida
 */
$(function() {
    console.log($(".nav-elt-label").text());
    var tokyo = /東京/;
    var global = /グローバル/;
    if($(".nav-elt-label").text().match(tokyo)) {
        $("#h").after('<div style="background-color:#FF0000;text-align:center;"><h3>これ本番ですよ！これ本番ですよ！これ本番ですよ！これ本番ですよ！これ本番ですよ！これ本番ですよ！</h3></div>');
    } else if($(".nav-elt-label").text().match(global)) {
        $("#h").after('<div style="background-color:#FFFF00;text-align:center;"><h3>これグローバルですよ！これグローバルですよ！これグローバルですよ！これグローバルですよ！これグローバルですよ！これグローバルですよ！</h3></div>');
    }
});
```

以下のようにディレクトリ、ファイルを作成し、Chromeの設定->その他ツール->拡張機能で「デベロッパーモード」をオンにして、「パッケージ化されていない拡張機能を読み込む」でこのディレクトリを指定すると使えるようになります。
jqueryはダウンロードしてきてください。


```
$ ls kore-honban-desuyo
jquery.min.js manifest.json script.js
```

(追記)Githubで公開しました => [これ本番ですよ](https://github.com/r-bies/kore-honban-desuyo)

## 最後に

今回Chrome拡張を初めて作りましたが、簡単なので他にもちょっとしたブラウザ操作の効率化に使えそうです。

## 参考

* http://qiita.com/edit-mode/items/26d7a22233ecdf48fed8
Reactを使うメリットとデメリット

Reactとは？
------
1. 最近はHTMLとjQueryのセットが当たり前な時代
2. 動きのあるページを作ろうとするとjQueryのプログラム部分が複雑になってしまう
3. それならば最初からJavaScriptがベースでいいのでは？でできたのがReact（Facebookが開発。FacebookのページはReactでできている
4. JavaScriptでHTML(DOM)を出力する方法にJSXを使う

JSXとは？
------
- ReactでHTML(DOM)を出力するための独自構文
- HTMLの構文を知っていれば使えるレベル
    - ちょっとした違い
        - classがclassName
        - styleを使う時は {{}} を使う、「-」は使えない
            - {{margin-bottom:"1px"}} -> {{marginBottom:"1px"}}
        - 変数を使う時は {} で囲う

Reactを使うメリット
------
- 脱jQuery
- 最近のJavaScriptな書き方でかっこいい
- サクサク動く
- Reactの書き方がパーツ単位のため
    - 再利用性が高い
    - 保守性が高い
    - 最近流行りのアトミックデザインと相性がいい
- Reactを覚えてしまえばReactNativeでスマホアプリが作れる

Reactのデメリット（２年前にできたのに日本であまり普及しない理由
-------
- 公式のドキュメントが英語
- HTMLベースではないのでPHPとの併用はできない
- 今まで使っていたJSライブラリが使えない場合がある
    - react-xxxx的なモジュールが作られていることが多いのでnpmでインストールすれば使える
- バージョンアップによって書き方がちょっと変わってくる
    - 現在のバージョンは15.xx
        - ひとつ前のバージョンは0.14です
        - 最近はそこまで大きな変更はないので本腰いれて覚えても大丈夫そう
- Reactを使える環境を作るのがめんどくさい
    - Windowsだとほぼ無理
    - Node.jsをインストールする必要がある
    - babelやwebpackなど色々なライブラリが必要
        - [create-react-app](http://qiita.com/chibicode/items/8533dd72f1ebaeb4b614)というスターターキットがある
            - babelやwebpackが標準実装された環境が作れる
        - 一度環境を作ってしまえばあとは楽
- Ajax処理が苦手
    - jQueryのajaxを使うのが一番簡単
        - React内でもjQueryを読み込んで使うことはできる
        - もちろんjQueryを使わない方法もある
            - [SuperAgant](http://qiita.com/hashrock/items/3113690bb3de5bba639b)などを使う
- ES6(JavaScriptの新しいバージョン)を覚える必要がある
    - いろいろあるけど変更箇所はだいたい下の２つくらい
        - var -> let、const
        - function() -> ()
    - ※今まで使ってきたJavaScriptをES6に書き換えて使おうとしてもbabelを使わないと動きません

React習得レベル
----------
- Lv.0 ES6の記述を学ぶ
- Lv.1 create-react-appでReactを動かしてみる
- Lv.2 Reactのチュートリアルかサンプルコードを使って動かしてみる
- Lv.3 react-routerでページ切り替えを学ぶ
- Lv.4 Reduxを覚える
- Lv.5 react-reduxでReactとReduxの接続を学ぶ（Reduxのチュートリアル）
- Lv.6 redux-routerでRedux時のページ切り替えを学ぶ
- Lv.7 react-sagaでRedux時のAjax処理を学ぶ

Reduxとは？
-------
- プログラムの処理の流れや管理を綺麗に分割したフレームワーク
- Reactと相性が良いためよく使われている
    - Reduxの前は同じようなものでFluxが使われていた
- みんなが理解できればコードの保守性が上がるが、レベルが１段階上がるため学習コストなどを考えると・・・？
    - Reduxを知らない人がReduxのコードを見ると、なぜこのような書き方なのか理解できないレベル
- Reactに限らず他の言語にも浸透/影響していっている
    - RubyでもReduxが使われ始めている
- 小規模な開発や必要になるまでは、Reactだけでも十分
- 使いたくなるタイミングとして、ページ間で共通のデータを使いたい時など
    - Reduxはデータやイベントなどを１箇所で管理しているため簡単にやり取りができる 


まとめ
----
- 静的メインなページならばjQueryの方が圧倒的に簡単
- アプリのような動的なページを作るならばReactがいい

React勉強おすすめサイト
--------
- [Javascript-style-guide（ES6の書き方）](http://mitsuruog.github.io/javascript-style-guide/)
- [webpackとは？+ ES6の書き方](http://geta6.hatenablog.com/entry/2016/01/27/193413)
- [Reactの基礎](http://basic-react.axlight.com/html)
- [すべてのReact.js初心者が知っておくべき9つのポイント](http://qiita.com/ossan-engineer/items/3622e57ceb70c7f12295)
- [メンテナブルな React Component を目指すための小技集](http://qiita.com/inuscript/items/372727448b58d4738018)
- [create-react-appの使い方](http://qiita.com/chibicode/items/8533dd72f1ebaeb4b614)
WebView#pauseTimers() の罠

```java
WebView webView = new WebView(context).pauseTimers();
```
というコードがあったとして、 `pauseTimers()` はインスタンス化された webView だけに適用されるのではない件に注意。
`WebView#resumeTimers()` が呼ばれるまで停止する。

https://developer.android.com/reference/android/webkit/WebView.html#pauseTimers()

> Pauses all layout, parsing, and JavaScript timers for all WebViews. This is a global requests, not restricted to just this WebView. This can be useful if the application has been paused.
ライセンスサーバーのポートへの接続を確認する方法の覚え書き

CAEアプリケーションでライセンスサーバーへの接続に失敗して起動できないケースがよくある。
ライセンスサーバーへの接続の調べ方を残しておく。

#### 前提条件
ライセンスサーバーのホスト名とポート番号は仮に下記とする。
- ホスト名: theserver
- ポート番号: 8888

## ネットワークの接続確認
まずはpingコマンドでホストに接続できるかどうかを確認する。

```:コマンドプロンプト
ping theserver
```

## ポートの接続確認
ホストへの接続が確認できたらポートへの接続を確認する。

### PowerShell
```ps1:PowerShell
$tcp = New-Object System.Net.Sockets.TcpClient
# $tcp = New-Object tcpまで打ち込んでTabキーを押すと補完される。
$tcp.Connect("theserver", 8888)
$tcp.Connected
```
```:接続できた場合
True
```
```:接続できない場合
False
```

### Python
```py3:IPython
import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect(('theserver', 8888))
```
```:接続できた場合
(出力なし)
```
```:接続できない場合
ConnectionRefusedError: [WinError 10061] 対象のコンピューターによって拒否されたため、接続できませんでした。
```
【leJOS】mindstorm-EV3をJavaでプログラミングしよう【環境構築前編】

## 概要
EV3があればJavaでロボットの組み込みプログラミングに挑戦できます！
leJOSはJavaでmindstorm-EV3を制御するためのシステムです。
EV3に専用のOSをインストールすることで簡単にJavaによるEV3の制御を楽しむことができます。
この記事では前編、後編の２回にわけて環境構築方法を解説します。
前編ではインテリジェントブロック本体へのLeJOSインストール方法を解説します。

## 環境
- mindstorm-EV3
- PC : MacBook OS X


##必要なもの

- LEGO mindstorm-EV3
- USBドングル  
BUFFALO WLI-UC-GNM2
- microSDカード  
 Verbatim SDHC8GYVB1

USBドングル、microSDカードについてはお手持ちのものをお使い下さい。
## leJOSインストール手順

### leJOSのダウンロード

[https://sourceforge.net/projects/ev3.lejos.p/files/](https://sourceforge.net/projects/ev3.lejos.p/files/)
URLから最新のleJOS_EV3_0.9.1-beta.tar.gzをダウンロードし、解凍します。

解凍するとこのようなファイル構成になっているはずです。
![スクリーンショット 2017-02-21 16.05.00.png](https://qiita-image-store.s3.amazonaws.com/0/149019/07526ff1-1643-dfb1-e435-d9044324166a.png)

### microSDカードにイメージファイルを書き込む

先程のファイル内のsd500.zipを解凍するとイメージファイルsd500.imgが出てきます。
これをmicroSDカードに書き込みます。書き込みには[Etcher](https://etcher.io/)を使いました。

![スクリーンショット 2017-02-21 12.48.21.png](https://qiita-image-store.s3.amazonaws.com/0/149019/6f88fd57-8ba4-6b59-f707-cb0a5aeefc65.png)

### 必要なファイルをmicroSDカードに保存
先程のleJOS_EV3_0.9.1-beta.tar.gzを解凍したファイルの中にあるlejosimage.zipを解凍します。解凍先のフォルダに移動し、これらのファイルを全てmicroSDカードのルートディレクトリに保存します。
![スクリーンショット 2017-02-21 16.15.22.png](https://qiita-image-store.s3.amazonaws.com/0/149019/9ff505fd-a3c7-8358-b439-37a6635f5530.png)

次にlejos用のJavaをOracle JRE(下記URL)からダウンロードします。
[http://www.oracle.com/technetwork/java/embedded/downloads/javase/javaseemeddedev3-1982511.html](http://www.oracle.com/technetwork/java/embedded/downloads/javase/javaseemeddedev3-1982511.html)

ダウンロードにはアカウント登録が必要です。
ダウンロードしたファイル(ejre-7u60-b19-ejre-7u60-fcs-b19-linux-arm-sflt-headless-07_may_2014.tar.gz)を解凍せずにmicroSDカードのルートディレクトリに保存します。

この時点でmicroSDカードのファイル構成はこうなっているはずです。
![スクリーンショット 2017-02-21 16.33.09.png](https://qiita-image-store.s3.amazonaws.com/0/149019/72907a87-bc2b-12be-811c-311a48fae69a.png)

## 起動
SDカードをEV3に挿入して起動させます。最初はモジュールのインストールなどに時間がかかるため１０分くらい立つと起動します。

起動画面
![1 (1).jpg](https://qiita-image-store.s3.amazonaws.com/0/149019/0fd21fb4-d4b5-157c-7305-904eb7d240de.jpeg)


## WiFiの設定
leJOSをネットワークに接続しましょう。USBドングルをEV3本体に挿し、画面のWiFiボタンを選択します。GUIに従ってネットワークのSSIDを入力すればネットワークに接続されIPアドレスが表示されます。

IPアドレス(192.168.2.91)が表示されています。
![1.jpg](https://qiita-image-store.s3.amazonaws.com/0/149019/8bcb480d-6dc6-9216-8b4d-ad7d44adf945.jpeg)

## SSH接続

```
$ ssh root@192.168.2.91
root@192.168.2.91's password: 
root@EV3:~# 

```

デフォルトでパスワードは設定されていません。IPアドレスは各自の環境に置き換えて下さい

## まとめ
leJOSではデフォルトでいくつかのサンプルコードが入っています。画面のSamplesを選択して色々と試してみると面白いでしょう。
環境構築はそれほど難しくないので是非試して見て下さい。

## 参考
>
[https://sourceforge.net/p/etroboev3/wiki/lejosev3_mac_eclipse_section02/](https://sourceforge.net/p/etroboev3/wiki/lejosev3_mac_eclipse_section02/)
>
[https://sourceforge.net/p/lejos/wiki/Installing%20leJOS/](https://sourceforge.net/p/lejos/wiki/Installing%20leJOS/)
Goのローカル環境構築（ソース変更をリロードのみで確認できるようにする）

# ゴール

- HotReloadにより毎回```go run```し直さなくて良い状態にする

# godoによるHot Reload構築手順

サンプルのソースはmain.goのみのあるシンプルな構成です。
echoライブラリを利用

```bash:プロジェクト構成
├── Gododir
│   ├── godobin-2.0.9
│   └── main.go // godoのmainファイル ※2
├── glide.lock
├── glide.yaml
├── main.go // メインのHello Worldを表示するソース ※1
└── vendor // 外部ファイルの置き場所
    ├── github.com
    └── golang.org
```

```go:main.go（サンプルのメインソース）※1
package main

import (
	"net/http"
	"github.com/labstack/echo"
)

func main() {
	e := echo.New()
	e.GET("/", func(c echo.Context) error {
		return c.String(http.StatusOK, "Hello, World!")
	})
	e.Logger.Fatal(e.Start(":8081"))
}
```

http://localhost:8081
にアクセスしたらHello World!を表示するためのシンプルなソース

## glideにて関連パッケージをインストール

### glide.ymlの作成
```glide create```

### パッケージのDL
```glide up```

## godoをインストール

```
go get -u gopkg.in/godo.v2/cmd/godo
```

### godoの監視ソースの作成

Gododir親ディレクトリのmain.goの変更を監視するスクリプト

```main.go（godo)※2
package main

import (
	do "gopkg.in/godo.v2"
)

func tasks(p *do.Project) {

	p.Task("server", nil, func(c *do.Context) {
		// rebuilds and restarts when a watched file changes
		c.Start("main.go", do.M{"$in": "./"})
	}).Src("*.go", "**/*.go").
		Debounce(3000)
}

func main() {
	do.Godo(tasks)
}
```

## 監視のテスト

```
cd (Projectのroot)
godo server --watch
```

http://localhost:8081
にアクセスしてから、対象のmain.goを書き換えてから、ブラウザReloadにて反映するかを確認


# 参考

http://blog.flup.jp/2016/02/18/golang_docker_hot_reload/
様々な言語における並行、並列処理(C#編)

##並行処理
####Threadを使った方法
.NET 1.1時代のもの。
`Thread thread1 = new Thread( new ThreadStart( method ) );`
のようにして使えるが、
- コストが掛かる
- 制御が難しい
等の理由があるので現在は非推奨。

####Taskとasync・await

執筆中…
gitレポジトリ内のディレクトリを別のgitレポジトリ以下に移動する

## 具体的には

repo-A/dir1/dir2/dir3
を
repo-B/dir4/
以下に入れたい。
つまり、
repo-B/dir4/dir3
としたい。

## repo-Aの履歴を書き換え、移行後の形に整える
```
cd /tmp
git clone https://github.com/repo-A
cd repo-A/
git filter-branch -f --subdirectory-filter dir1/dir2/dir3/ -- --all　# dir3以外のファイルを消し、dir3以下のファイルがrepo-A以下に展開される。
git filter-branch -f --tree-filter "mkdir dir3 && git mv -k * dir3/" # 履歴の書き換え。dir3ディレクトリを作って、mv。
git filter-branch -f --tree-filter "mkdir dir4 && git mv -k * dir4/" # さらに成型。dir4を作って、mv
```
lsして、repo-A以下が移行したいフォルダ構成になっているか確認.

```
/tmp/repo-A/dir4/dir3
 $ ls
file1 file2
```

## 作った(移行したい)レポジトリ(repo-A)を、移動先(repo-B)のリモートに登録する。

```
cd tmp
git clone https://github.com/repo-B
cd repo-B
git remote add work file:///tmp/repo-A
```
リモートの確認.

```
git remote -v
origin	https://github.com/repo-B/ (fetch)
origin	https://github.com/repo-B/ (push)
work	file:///tmp/repo-A (fetch)
work	file:///tmp/repo-A (push)
```

## 移行後のレポジトリ(repo-B)にマージして、pushする
```
git checkout -b work-branch # ブランチを切って作業
git fetch work # work（リモート)を取り込む
git merge work/master
git push user work-branch # work-branch(リモートブランチ)にpushする
```
gitでpushする時にパスワードを聞かれないようにする方法


# 問題

sshで接続しているのにpushしようとすると毎回秘密鍵のパスワードを聞かれるようになってしまった。

# 解決法

ssh-agentにgitで使っている秘密鍵を登録すれば良いです。

秘密鍵の登録状況を確認

```
$ ssh-add -l
```

秘密鍵を登録

```
$ ssh-add ~/.ssh/[秘密鍵の名前]
```

# 参考

[ssh-agentを利用して、安全にSSH認証を行う](http://qiita.com/naoki_mochizuki/items/93ee2643a4c6ab0a20f5)
[BashにてSSH鍵のパスフレーズ入力を初回のみにする](https://takanosho.wordpress.com/2013/01/11/input-ssh-key-passphrase-only-once-on-git-bash/)
CentOS7の自動起動設定でエラーが出た時の対処法

## 環境
・CentOS 7.3
・MySQL 5.7

## 前提
CentOS7に標準のMariaDBが入ってて、最初はそれを使う予定だったんですが、途中で変更になってMriaDBを削除、MySQL5.7を入れました。

で、自動起動設定をしようと思い、自動起動設定コマンド叩くとなぜか怒られました。

```
# systemctl enable mysqld.service
Failed to execute operation: Too many levels of symbolic links
```

サービスの自動起動設定の一覧見てみても、

```
# systemctl list-unit-files -t service|grep mysql
mysql.service      bad
mysqld.service     bad
```

だいぶ残念なことになってる。何ですか、badって。

## 解決策
なんか余分なシンボリックリンクが残っていたようです。
サービスが登録してあるディレクトリを見ると、

```
# pwd
# /etc/systemd/system
# ls -la
...
mariadb.service.d
multi-user.target.wants
mysql.service -> /usr/lib/systemd/system/mariadb.service
mysqld.service -> /usr/lib/systemd/system/mariadb.service
...
```
あ、なんかシンボリックリンクが………。
mysql.serviceとかがmariadbを見てる。

ってことで、シンボリックリンクを削除。

```
unlink mysql.service
unlink mysqld.service
```

これで、無事にmysqldの自動起動設定が出来るようになりました。

```
# systemctl enable mysqld.service
Created symlink from /etc/systemd/system/multi-user.target.wants/mysqld.service to /usr/lib/systemd/system/mysqld.service.

# systemctl is-enabled mysqld.service
enabled
```

CentOS7はいろいろと変更が多くて、いろんな所で地味に時間を取られそうです。

## 参考
http://qiita.com/chroju/items/4aff0a895f2790f8df8e
Ansible Tower のインストールメモ

Ansible を使っていて、Ansible Tower も使ってみたくなったので、そのインストール時のメモ。

# 事前準備
Ansible Tower の使用には、まず[ここ](https://www.ansible.com/tower)でユーザ登録をして Ansible Tower をダウンロード（"ansible-tower-setup-latest.tar.gz"）し、同時にライセンスを入手しておく必要があります。

# どのディストリビューションを使うか
Ansible Tower は Ansible を使ってインストールされます。そのため、事前に Ansible のインストールが必要になります。今回様々なディストリビューションで試しましたが、Ubuntu 14.04 が最も簡単でした。下記、試したディストリビューションです。

- Ubuntu 16.04: Ubuntu は 14.x までのサポートというメッセージがでてエラー終了。
- CentOS 7: そもそも Ansible が yum のレポジトリにないので、そこからセットアップ。その後も iptable 関連のエラーなどで苦戦。
- Ubuntu 14.04: 何事もなく成功しました。

ということで、ここでは、Ubuntu 14.04 にインストールした時のメモをまとめます。
 
# Ubuntu 14.04 へのインストール
Ubuntu server 14.04 をインストール後、Ansible Tower の tar.gz ファイルを展開。その後、inventory ファイルのパスワードを 3 箇所（下記 my_password となっている部分）を編集します。

```

# cat inventory 
[primary]
localhost ansible_connection=local

[secondary]

[database]

[all:vars]
admin_password='my_password'
redis_password='my_password'

pg_host=''
pg_port=''

pg_database='awx'
pg_username='awx'
pg_password='my_password'

```

その後、setup.sh を実行するだけで完了です。apt で Ansible を含め、必要なファイルをすべて取得してきてくれます。しばらく時間がかかるので辛抱強く待ちましょう。

```
python setup.sh
```

最終的に The setup process completed successfully. と表示されたら完了です。ブラウザでアクセスしてみます。

# ログインとライセンス登録
セットアップ完了後、ブラウザでアクセスするとログイン画面が現れます。ログインユーザ名は admin、パスワードは上記 inventory で指定したものを使います。

![Screen Shot 2017-02-21 at 3.46.50 PM.png](https://qiita-image-store.s3.amazonaws.com/0/156216/34ec8286-ec5c-683b-1a9e-30387c2ed420.png "Screen Shot 2017-02-21 at 3.46.50 PM.png")



ログイン後、用意してあったライセンスを登録して完了です。


![Screen Shot 2017-02-21 at 4.10.58 PM.png](https://qiita-image-store.s3.amazonaws.com/0/156216/e111c437-aa70-fb64-db64-9ac5f3c1daea.png "Screen Shot 2017-02-21 at 4.10.58 PM.png")
iOS10でのNavigationControllerのカスタム遷移アニメーションの不具合と解決法

割とマイナーな気がしますが、少しハマったのでメモです。

# 条件と再現方法
* navigationTranslationAnimatorをセットしてNavigationControllerの遷移アニメーションをカスタムしており、遷移アニメーションとして `UIView.animate` のアニメーションブロック内で `frame` を操作している。（例えば一覧画面から選択されたセルにセットされている画像が、そのまま次の画面に移動するような遷移アニメーションなど）
* `UIViewControllerInteractiveTransitioning` のサブクラスを使ってインタラクティブジェスチャを実装している。

上記の条件のときに、ジェスチャで途中までアニメーションを進めて途中で指を離してキャンセルすると、元の状態に戻るアニメーションがiOS10の場合でのみおかしくなります。（サイズが縮んでいくようなアニメーションになる）

# 解決法
iOS10の場合だけ `UIViewPropertyAnimator` を使うことで解決しました。
iOS10未満は対応していないため、バージョンで分岐させる必要があります。

```swift
let animation: () -> Void = {
    // 一例です
    fromView.alpha      = 0
    toView.alpha        = 1.0
}
let completion: () -> Void = {
    // 一例です
    let isCancelled = transitionContext.transitionWasCancelled
    transitionContext.completeTransition(!isCancelled)
}

if UIDevice.current.systemVersion.compare("11", options: .numeric) == .orderedAscending
    && UIDevice.current.systemVersion.compare("10", options: .numeric) != .orderedAscending {
    // Only for iOS10 animation bug fix.
    let animator = UIViewPropertyAnimator(duration: duration, curve: .easeIn, animations: {
        animation()
    })
    animator.addCompletion({ (position) in
        completion()
    })
    animator.startAnimation()
} else {
    UIView.animate(withDuration: duration, delay: 0, options: [.beginFromCurrentState, .curveEaseIn], animations: {
        animation()
    }) { (finished) in
        completion()
    }
}
```

別の方法として、 `frame` を使う代わりに `center` と `transform.scale` を組み合わせるという方法もありますが、 `UIImageView` の場合だと `contentMode` に関係なく引き伸ばされて画質が粗くなったり、比率が崩れたりといった問題があります。

## 10/30/2017 追記
iOS11ではPropertyAnimatorを使うとInteractiveTransitionがうまく実行されず、UIView.animateであればiOS10のときのような不具合が発生することなく動きました。
このことから、iOS10のときにのみPropertyAnimatorを使う方法に変えないといけないようです。
[obsolete] FreeBSD 4.1-RELEASE にて、CFを使ったsendmailの設定メモ

* この参考例でのリレーポリシーは 
無条件転送
外側 ⇒ 内側
内側 ⇒ 内側
内側 ⇒ 外側
localhost ⇒ 内側
localhost ⇒ 外側
特定の IP アドレス ⇒ 外側

* 条件付きで
外側 ⇒ 外側

* その条件は
From 行のドメイン名
⇒ この場合は接続元が不特定多数

* その他は全て弾く

ftp://sh.wide.ad.jp/WIDE/free-ware/CF/ から次のファイルを get

```text
CF-3.7Wpl2.tar.gz
CF-3.7Wpl2-smtpcheck.patch1
CF-3.7Wpl2-smtpcheck.patch2
```
* 展開とパッチあて

```console
% tar zxf CF-3.7Wpl2.tar.gz
% cd CF-3.7Wpl2/Master
% patch < ../../CF-3.7Wpl2-smtpcheck.patch1
% patch < ../../CF-3.7Wpl2-smtpcheck.patch2
```
* def ファイルの編集

```console
% cp ../Standards/sendmail-v8.def ../hoge.def
% ee ../hoge.def
```
* hoge.def の書き換え個所

```text
VERSION=3.7Wpl2
VERSION_SEPARATOR=/
LOCAL_VERSION=`date +%Y.%m.%d.%H`
OS_TYPE=bsd4.4
MX_SENDMAIL=yes
###MY_DOMAIN=example.jp			#必要であればドメイン名を記述
###MY_NAME=hoge-sv				#必要であればホスト名を記述
COPY_ERRORS_TO='postmaster'
PRIVACY_FLAGS='goaway'
MAIL_RELAY_RESTRICTION=yes
LOCAL_HOST_IPADDR=192.168.1		#local ip address
LOCAL_HOST_DOMAIN=example.jp	#リレー制限用で、制限を受けずにリレーさせるドメイン名を記述
CLIENT_HOST_DOMAIN=example.jp
ALLOW_RECIPIENT_DOMAIN=example.jp
ALLOW_RELAY_FROM=example.jp
ALLOW_RELAY_TO=example.jp
```
* 編集した def ファイルから cf ファイルの作成

```console
% cd ..
% make hoge.cf
```
* cf ファイルのインストール

```console
% su
# cp hoge.cf /etc/mail/sendmail.cf
```
* sendmailに新しいcfファイルを認識させる

sendmailの再起動

```console
# kill -HUP `cat /var/run/sendmail.pid`
```
Charlesで本番のAPIレスポンスを書き換える（SSL,CORS対応版）

## 1. Charlesをインストール

https://www.charlesproxy.com/download/

## 2. Charlesを起動

試用版は起動30分後に落ちるので注意。
もし煩わしい場合はライセンス買う。

## 3. macOS Proxyを有効にする

`Proxy > macOS Proxy` をクリック（チェックが入る）

## 4. Charles用SSL証明書をインストール

1. `Help > SSL Proxying > Install Charles Root Certificate` をクリック
1. Keychain Accessが起動する
1. `Name` が `Charles Proxy` から始まる行をダブルクリック
1. `Trust` をクリックして開く
1. `When using this certificate:` プルダウンで `Always Trust` を選択
1. Keychain Accessを閉じる

## 5. https通信に対応する

1. `Proxy > SSL Proxying Settings...` をクリック
1. `SSL Proxying` タブを開く
1. `Enable SSL Proxying` にチェックを入れる
1. `Add` ボタンをクリック
1. `Host` 欄にドメインを入力

## 6. 書き換えるAPIパスとモックJSONファイルパスを指定する

1. `Tools > Map Local...` をクリック
1. `Enable Map Local` にチェックを入れる
1. `Add` ボタンをクリック
1. `Map From` 内の `Host` 欄に書き換えたいAPIパス（https://~~~~~）を入力
1. `OK` ボタンをクリック
1. `Map To` 内の `Choose` ボタンをクリック
1. 書き換え後のJSONファイルを選択して `Select` ボタンをクリック
1. `OK` ボタンをクリック
1. `OK` ボタンをクリック

## 7. レスポンスヘッダを書き換える

1. `Tools > Rewrite...` をクリック
1. `Enable Rewrite` にチェックを入れる
1. 左側の `Add` ボタンをクリック
1. 右上の `Add` ボタンをクリック
1. `Host` 欄にAPIパス（https://~~~~~）を入力
1. `OK` ボタンをクリック
1. 右下の `Add` ボタンをクリック
1. `Type` プルダウンに `Add Header` を指定
1. `Where` 内の `Request` のチェックを外す
1. `Where` 内の `Response` にチェックを入れる
1. `Replace` 内の `Name` に `Access-Control-Allow-Origin` を入力
1. `Replace` 内の `Value` に `*` を入力
1. `OK` ボタンをクリック
1. `OK` ボタンをクリック

## 8. アプリケーションにアクセスする

Macのブラウザから対象のアプリケーションにアクセスすれば、指定したAPIのレスポンスが指定したJSONファイルに書き換わっている。
Laravel5.2でON DUPLICATE KEY UPDATEを実行する

個人のメモも兼ねて投稿します。

LaravelでSQLの｢ON DUPLICATE KEY UPDATE(InsertOrUpdate)｣を実施しようとした際、Laravelに搭載されているクエリービルダーには無かったので以下に記載します。(実はあるかもしれませんが)

｢ON DUPLICATE KEY UPDATE｣を使用する方法

```php
$columns = "`column1`, `column2`";
$values = "'column1', 'column2'";
$updates = "`column1` = 'column3'";

// SQL文生成
$sql = "INSERT INTO `table` ({$columns}) VALUES ({$values}) ON DUPLICATE KEY UPDATE {$updates}";

// SQL実行
DB::statement($sql);
```

検証はしておりませんが、恐らく他のLaravelのバージョンでも使用可能だと思います。
もっと良いやり方があるなら知りたいです・・・・。
word 途中から段落番号を追加する手順

# 途中から段落追加する手順
## ホーム→段落（真ん中あたり）→リストライブラリから選択→再度段落からリストレベルの変更選択→「1 1.1」を選択→作成した番号を選択して右クリック→番号の設定→前のリストから継続するを選択→値の繰り上げにもチェック→開始番号の左側に途中から入れたい番号を入れる。(8.1なら8のほうを指す)→隣にも入れたい番号入れる（8.1なら1のほうを指す）
※一度入れたら次からは「前のリストから継続する」を入れなくても8.2と表示してくれる。
　上記の設定でやると目次との紐づけができなくなり、目次からそのページに飛べない。
sbtでプライベートリポジトリをライブラリとして扱う

別リポジトリに存在するそれぞれのプロジェクトから自作のライブラリを読み込んだのでめも

以下2つ試して後者を採用した
- sbtでgithubリポジトリを指定する
- s3にprivate mavenを作ってそこから引く

## githubリポジトリを直接projectへ追加する手法

以下のようにしてできた。
プロジェクトとしても扱えるし、public repositoryを扱うには凄くシンプルで良いと思った。

```
RootProject( uri("git://github.com/foo/bar.git#commit-id") )
```

private repositoryを扱う際はsshプロトコルを利用せねばならず、
sshプロトコルではバージョンを指定することができなかった

```
RootProject( uri("ssh://git@github.com/foo/bar.git") )
```

## s3にprivate mavenを作ってそこから引く

fm-sbt-s3-resolverで簡単にできた。
s3へのアクセスには環境変数のaws_access_key_id,aws_secret_access_keyを利用している

- plugin.sbt

```
addSbtPlugin("com.frugalmechanic" % "fm-sbt-s3-resolver" % "0.9.0")
```

- build.sbt

```
name := """test-app"""
organization := "jp.hoge" // これがgroupIDになる
scalaVersion := "2.11.7
version in ThisBuild := git.gitHeadCommit.value.map(_.take(8)).getOrElse("0.1-SNAPSHOT") // sbt-gitを利用してcommit idをversionとして利用
resolvers += "hoge Snapshots" at "s3://${bucket_name}.s3-ap-northeast-1.amazonaws.com/${keyName}",
publishTo := Some("hoge Snapshots" at "s3://${bucketName}.s3-ap-northeast-1.amazonaws.com/${keyName}"),
```

### publish

```
$ sbt publish
```

以下にpublishされる。

```
s3://${bucketName}/${keyName}/${groupID}/${name}_${scalaVersion}/${version}
```


### resolve

```
libraryDependencies += "jp.hoge" %% "${name}" % "${version}"
```

シンプルっ
WEBサーバ調査方法

##<i class="fa fa-desktop" style="color: red;"></i>どこのサーバを使用しているか
まずは、http://hoge.comの場合

```
# nslookup hoge.co.jp

Non-authoritative answer:
Name:   hoge.com
Address: 54.192.233.1
Name:   hoge.com
Address: 54.192.233.12
Name:   hoge.com
Address: 54.192.233.122
Name:   hoge.com
Address: 54.192.233.143
Name:   hoge.com
Address: 54.192.233.214
Name:   hoge.com
Address: 54.192.233.42
Name:   hoge.com
Address: 54.192.233.35
Name:   hoge.com
Address: 54.192.233.32
```
この中からランダムに一つのIPと選ぶ
例えば最後の「54.192.233.32」を選んでIPでnslookupするとamazonaws.orgとかになっているのでAWSを選んでいることがわかる。

```
# nslookup 54.192.233.32
Server:         160.28.10.8
Address:        160.28.10.8#53

Non-authoritative answer:
32.233.192.54.in-addr.arpa      name = server-54-192-233-32.nrt12.r.cloudfront.net.

Authoritative answers can be found from:
192.54.in-addr.arpa     nameserver = x4.amazonaws.org.
192.54.in-addr.arpa     nameserver = pdns1.ultradns.net.
192.54.in-addr.arpa     nameserver = x2.amazonaws.com.
192.54.in-addr.arpa     nameserver = x1.amazonaws.com.
192.54.in-addr.arpa     nameserver = x3.amazonaws.org.
pdns1.ultradns.net      internet address = 204.74.108.1
pdns1.ultradns.net      has AAAA address 2001:502:f3ff::1
x2.amazonaws.com        internet address = 156.154.65.10
x3.amazonaws.org        internet address = 208.78.71.31
x1.amazonaws.com        internet address = 156.154.64.10
x4.amazonaws.org        internet address = 204.13.251.31
```

##<i class="fa fa-desktop" style="color: red;"></i>WEBサーバのバージョン等の調査

下記で、「Server: nginx/1.6.2」のとこからnginxを使っていることがわかる。
「Server: Apache」だとApacheを使っている

```
# curl -I http://hoge.com/
HTTP/1.1 200 OK
Server: nginx/1.6.2
Date: Tue, 21 Feb 2017 06:24:58 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
Vary: Accept-Encoding
X-Cached: Tue, 21 Feb 2017 06:20:37 GMT
Link: <https://hoge.com/>
````
github

```php:
C:\Users\takahashi\helloHeroku>git clone git://github.com/nonograce/nonograce.gi
t
Cloning into 'nonograce'...
remote: Counting objects: 9, done.
remote: Compressing objects: 100% (7/7), done.
remote: Total 9 (delta 1), reused 0 (delta 0), pack-reused 0
Receiving objects: 100% (9/9), done.
Resolving deltas: 100% (1/1), done.
Checking connectivity... done.
```


##**ssh 鍵を作りなおして heroku に登録**

```
C:\Users\takahashi>heroku keys:add .ssh/id_rsa.pub
Uploading .ssh/id_rsa.pub SSH key... done
```

[参考サイト](http://easyramble.com/heroku-permission-error.html)

##**herokuでアプリ一覧表示**

```
heroku apps
```

|　|鍵|
|:--|:--|
|id_rsaファイル|秘密鍵ファイル|
|id_rsa.pubファイル|公開鍵ファイル|
Windows > 割り当てられたIPv4アドレスを確認する手順

該当のPCで設定されているIPアドレスを手早く確認するにはどうするか。

### スタートメニューから

```txt:対象環境
Windows 7 Pro (32bit)
```

1. スタートメニューを押す
2. 「プログラムとファイルの検索」欄にcmdを入力してEnter
3. `ipconfig | find "IPv4"`を入力してEnter

以下のようになる。

```
Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation.  All rights reserved.

C:\Users\user>ipconfig | find "IPv4"
   IPv4 アドレス . . . . . . . . . . : 192.168.10.31
   IPv4 アドレス . . . . . . . . . . : 192.168.0.27

C:\Users\user>
```

複数のネットワークアダプタ使用時に、「どのネットワークアダプタがどちらのIPに対応するか」は分からないでもいいという場合。

Windows 8.1とWindows 10においては「プログラムとファイルの検索」の見つけ方が異なるため、下記の方がいいかもしれない。
(または「ファイル名を指定して実行」の方を使う）

### ショートカットから

```txt:対象環境
Windows 7 Pro
Windows 8.1 Pro
Windows 10 Pro
```

1. <kbd>Win</kbd> + `R`
   - 「ファイル名を指定して実行」が開きます
2. `cmd`を入力してEnter
3. `ipconfig | find "IPv4"`を入力してEnter