OmniAICreator/Qiita-1.07M huggingface dataset:
[checkio] The hamming distance

どうしても解けない問題があってなかなか更新できずついに先へ進むことを決めたワイ将。悲しい

今回の問題は引数として与えられた２つの10進数の数値のハミング距離を求める。そもそもハミング距離とはなんぞや。
wiki先生によると
>情報理論において、ハミング距離（ハミングきょり）とは、等しい文字数を持つ二つの文字列の中で、対応する位置にある異なった文字の個数である。別の言い方をすれば、ハミング距離は、ある文字列を別の文字列に変形する際に必要な置換回数を計測したものである。この用語は、リチャード・ハミング(Richard Wesley Hamming)にちなんで命名されたもので、鼻歌（humming）ではない。 https://ja.wikipedia.org/wiki/%E3%83%8F%E3%83%9F%E3%83%B3%E3%82%B0%E8%B7%9D%E9%9B%A2

とのこと。うむわからん。エラーの概算を数えたりするのにこの考え方が必要らしい。ひとまず内容としては同じ長さの文字列または数列を比べて、相対位置の違う箇所を数える。今回の問題では１０進数を２進数に直した上で差分を数える。

###自分の回答
```js
function hammingDistance(n, m){
    let na = dmake(n);
    let ma = dmake(m); 
    let distance = 0;
    alignLength(na,ma);
    
    
    for (let i=0; i<na.length; i++) {
        if (na[i] != ma[i]) {
            distance += 1;
        }
    }
    
    
    
    //make it decimal 
    function dmake(num) {
        let array = [];
        let tarnum = 1;
        while ((num/2)>=tarnum && num!=1) {
            tarnum *= 2;
        }
        console.log("num is "+num);
        console.log("tarnum is "+tarnum);
        while(num!=0) {
            if(num >= tarnum) {
                num -= tarnum;
                array.push(1);
                if (num==0&&tarnum!=1) {
                    while (tarnum!=1) {
                        array.push(0);
                        tarnum /= 2;
                    }
                }
            } else {
                array.push(0);
            }
            tarnum/=2;
        }
        return array
    }
    
    //aling the array length
    function alignLength(a, b) {
        if (a.length != b.length) {
            let lengDiff = Math.abs(a.length-b.length);
            if (a.length > b.length) {
                for (let i = 0; i<lengDiff; i ++) {
                    b.unshift(0);
                }
            }
            else if (b.length > a.length) {
                for (let i = 0; i<lengDiff; i ++) {
                    a.unshift(0);
                }
            }
        }
    }
    
    console.log(na);
    console.log(ma);
    
    return distance
}
```
だいぶ長くなってしまった。探せば２進数に直すメソッドとかあるんだろうけど自分で書いてみた。意外と考えなければいけないパターンは隠れている。

###すごいとおもったかいとう
```js
function hammingDistance(n, m){
    var h = n ^ m;
    var count=0;
        while (h) {
            h = h&(h-1);
            count++;
}
return count;
}
```
うむ、全くわからん。
2行目では排他的論理和をhに格納。
3行目ではcount upするための変数を定義。
4-6のwhileブロックでは、
hとh-1のビットごとの論理積を出して、最終的にhが１になり、論理積の値が0になってwhileが止まるまで続ける。
この式を繰り返すことがなぜ２進数でのhの1を数えるのと同じになるのかはわからん。時間のある時にブール関数を勉強してみよう。


###学び
number.toString()

- 引数として受け取った数値を基準とし、numberを表す文字列を返す。引数を指定しなければ文字列オブジェクトに変換するだけ。

^ (排他的論理和)

- ビット演算子の一つ。10進数の数値に使うと、右辺左辺それぞれを2進数に直した上で、差分の数値を10進数として返してくれる。

& (論理積)

- ビット演算子の一つ。２つのオペランドの論理積を返す。


###反省
ブール関数を勉強してみる。
全くわからん。
モデルが空のServiceを作成する Liferay 7.0 / DXP

##空のサービスが必要なケース
LiferayにはService Builderという仕組みがあり、データベースアクセスをモデルへのアクセスとして隠蔽してくれる仕組みがあるが、データベースへのレコードの作成は必要ないが、以下の理由で空のサービスが必要になるケースがある。

1. Web APIが必要
2. 複数の他のサービスを組み合わせて、１つのトランザクションとして扱いたい（ユーザーが登録されたら、同時にサイトも作成する、のような場合、ユーザー管理のサービスと、サイト管理のサービスを１つのトランザクションで扱う必要がある、など）
3. データベースアクセスのない、カスタムのサービスを作成したい。（計算処理を行う、文字列処理を行う、など）

その際に以下の方法でデータベースにレコードを作成しないサービスを作成できる。ただし、データベースにテーブルは生成されてしまう。

##生成手順
- 通常通り、Liferay IDE / Liferay Developer Studio / Bladeツールなどで、Liferay Workspaceを作成する。詳細に関しては[ユーザーガイド](https://dev.liferay.com/develop/tutorials/-/knowledge_base/7-0/creating-a-liferay-workspace-with-liferay-ide)を参照してください。 
- ${liferay_workspace_root}/modulesに移動、サービスビルダーでサービスを作成する。ここでは例として、```blade create -t service-builder -p com.liferay.test tasks```とコマンドを打って、サービスを生成する。
- tasksフォルダが生成されるので、```tasks/tasks-service/service.xml```を開く
- ```<entity local-service="true" name="Foo" remote-service="true" uuid="true">```の行の```uuid="true"```を```uuid="false"```に変更、フィールド定義を全て削除する。コードは以下のようになる

```xml:service.xml
<?xml version="1.0"?>
<!DOCTYPE service-builder PUBLIC "-//Liferay//DTD Service Builder 7.0.0//EN" "http://www.liferay.com/dtd/liferay-service-builder_7_0_0.dtd">

<service-builder package-path="com.liferay.test">
	<namespace>FOO</namespace>
	<!--<entity data-source="sampleDataSource" local-service="true" name="Foo" remote-service="false" session-factory="sampleSessionFactory" table="foo" tx-manager="sampleTransactionManager uuid="true"">-->
	<entity local-service="true" name="Foo" remote-service="true" uuid="false">
	</entity>
</service-builder>
```

- ```gradle buildService```を実行すると、空のモデルでサービスが生成される。
- あとは普通のService Builderで生成されたサービスと同じく、*LocalServiceImpl.java, *ServiceImpl.javaにメソッドを書いて、再度```gradle buildService```を走らせることで、対応するインターフェースが自動生成される。
量子コンピュータで１＋１を計算する

#はじめに
IBM Q の公開で無料で量子コンピュータをいじって遊べる素敵な時代がやってきました。私は 1+1 の計算をやってみたのですが、なかなか面白かったので投稿してみることにしました。実用性はありませんが、量子コンピュータの学習には適当かと思います。

#ログイン
[IBM Q](https://quantumexperience.ng.bluemix.net/) を開き、ユーザ登録をします。
ログインしたら Composer をクリック、Custom Topology を選択します。

![New1.png](https://qiita-image-store.s3.amazonaws.com/0/123482/721deb04-b682-4925-2a97-d528a5e2742f.png)

Topology は Quantum 及び Classical の Registers を 4 に減らし、Set Topology を押して次に進みます。

![New2.png](https://qiita-image-store.s3.amazonaws.com/0/123482/caf809e7-634a-b28d-a395-ad8147fa28eb.png)


#0+0=0 の回路の作成
下図の回路をマウスで作成します。Gates からゲートを選択し、線の上でクリックすると置けます。
Gates の Advanced チェックボックスをチェックしてください。ccXが使えるようになります。

![00.png](https://qiita-image-store.s3.amazonaws.com/0/123482/95730fdf-5adc-530f-da7b-e3a2cecc88ed.png)


それぞれの意味は以下の通りです。
・一番左の |0> は、量子ビットが 0 で初期化されることを意味しています。
・q[0], q[1] は入力です。今は何もしていないので、0+0 を計算することになります。
・q[2]は計算結果の２桁め、繰り上がりです。ccX でつなぎます。これは AND にあたります。
・q[3]は計算結果の一桁めです。q[0],q[1]とつないでいますが、この部分は XOR になります。
・計算回路は古典回路の Half Adder と同じです。
・右のピンクの部分が結果を観測します。見やすさのために順番を逆にしていることに注意してください。q[0]->c[3], ... , q[3]->c[0] にマッピングします。

ここまでできたら Simulate をクリック！結果が表示されます。

![00_result.png](https://qiita-image-store.s3.amazonaws.com/0/123482/cffeacf6-791a-a5cd-2fa1-e1abebd8525b.png)


0000 は 0+0=00 と読んでください。
0+0=0 (100%) という結果を得ました。

#1+0,0+1,1+1 の計算
まずは 1+0 の計算をするために、q[0] に X を追加します。

![10.png](https://qiita-image-store.s3.amazonaws.com/0/123482/9278068e-2003-e228-5a9a-c10b64aaf8bf.png)

Simulate を押すと、
1001、1+0=1 (100%) という結果を得ました。

![10_result.png](https://qiita-image-store.s3.amazonaws.com/0/123482/ff2a633a-7139-40f9-161b-b0f5d3f461d1.png)

続いて、0+1 を計算します。

![01.png](https://qiita-image-store.s3.amazonaws.com/0/123482/6ffcf7c6-36bf-df37-6269-da66e74d1686.png)


![01_result.png](https://qiita-image-store.s3.amazonaws.com/0/123482/300b06b1-3a29-d2f0-e650-e85321d78300.png)


0101、0+1=1 (100%)
を得ました。


さらに 1+1

![11.png](https://qiita-image-store.s3.amazonaws.com/0/123482/8929b786-3217-11de-da34-5aa25067337d.png)

![11_result.png](https://qiita-image-store.s3.amazonaws.com/0/123482/50de8b43-3dc9-89bf-75ae-30928b52251b.png)


1110、1+1=2 (100%)　　（二進数なので 10->2）
を得ました。


#0+0,1+0,0+1,1+1 をいっぺんに計算する
さて、やっと量子コンピュータらしい面白い計算に到達しました。
入力を H にします。0と1の重ね合せ状態になります。

![HH.png](https://qiita-image-store.s3.amazonaws.com/0/123482/74a8ec1a-f645-fade-2462-6e98b120649b.png)

ここで Simulate を押すと、
0+0=0 (25%), 0+1=1 (25%), 1+0=1 (25%), 1+1=2 (25%)
という結果を得ます！

![HH_result.png](https://qiita-image-store.s3.amazonaws.com/0/123482/b8fee310-8080-4870-7f0a-3d5d72f3c5b8.png)

25% にならない場合は実行回数を増やしてください。Simulate のオプションで 8000 回くらいまで増やせば、25% に近づきます。




#結果
習うより慣れよで量子コンピュータに触りました。
で、何がすごいの？
と思った方は量子の深遠なりきにお進みください。
なお、ここで計算したのは理想状態のシミュレーションです。実機で試す場合には回路の物理的な制約のため、もうちょっと込み入った配置が必要になります。


#参考文献
[BLUE BACKS 量子コンピュータ](https://www.amazon.co.jp/gp/product/4062574691)
[マイニング]Ubuntu + 複数GPU環境でOSが起動しない時のTips

以前 Ubuntu16.04Server でのマイニングマシンセットアップについては [UbuntuでEthereumマイニング](http://qiita.com/KumanoT/items/ebdff3d0017a234f06f4) にてまとめましたが、
その時は 3枚以上のGPUではマイニングができていませんでした。
ライザーケーブルなどを使い、3枚以上のGPUを接続すると OS が起動しない現象に悩まされていました。

少し時間がとれたので、原因を調査し、解決したので対処法をまとめたいと思います。

## 実現できたこと

Ubuntu にて GPU を 5枚挿した状態で起動 & Claymoreの実行に成功

（電源の関係上 6枚はためせていませんが、おそらくいけるのではないかと思ってます。）


## やったこと

Ubuntu OSの起動オプションを変更しました。

1. `grub`を編集して、`GRUB_CMDLINE_LINUX`に`pci=noaer`を設定
1. 起動オプションの反映（`update-grub`）
1. 再起動

```
$ sudo vim /etc/default/grub
#GRUB_CMDLINE_LINUX_DEFAULT=""
GRUB_CMDLINE_LINUX="text pci=noaer"

$ sudo update-grub

$ sudo shutdown -r now #restart
```

## 原因

- [ここ](https://askubuntu.com/questions/771899/pcie-bus-error-severity-corrected)にちらっと書いてありますが

> *Reason for appearance is related to the recent Intel Skylake architecture CPUs and Realtek rtl8723be wireless adaptor.

よくわからないですが、Skylake世代のCPUとワイアレスアダプターと関係がありそうとのこと・・  
正直よくわかりませんが・・起動できてマイニングできれば御の字なので深く追求しませんでした。
Crashlytics (fabric) に dSYMをfastlane でアップロードする

fabric の Crashlytics に dsym の情報をアップロードしていない状態でクラッシュが発生させると `ほんやらかんにゃら Missing dSYMs ほんやらかんにゃら` という警告が表示されます。

この状態だとクラッシュの詳細が見れないのでちゃんと dsym をアップロードすべきです。

> https://docs.fabric.io/apple/crashlytics/missing-dsyms.html

しかしながら手動でアップロードするのは非常に面倒な作業です。

なので、 fastlane を使ってアップロードするようにしましょう。 具体的な方法はリンク先にあります。

> https://krausefx.com/blog/download-dsym-symbolication-files-from-itunes-connect-for-bitcode-ios-apps

## もうちょっと説明

これだけだと URL を貼り付けただけの記事になってしまうので、自分の作っているアプリの lane のコードと fastlane の中身に関する説明を少し書きます。

アプリの概要としては1つのプロジェクトに有料版と無料版の複数のターゲットがあります。

それら２つのアプリに対して dsym を iTunesConnect からダウンロードして crashlytics にアップロード、後片付けを行う lane のコードが以下になります。 コードの説明はその下に書きます。

```rb
  lane :refresh_dsym do |options|

    version = options[:version] || get_info_plist_value(path: "path/to/Info.plist", key: "CFBundleShortVersionString")

  
    # 有料版
    download_dsyms(
      version: version,
      app_identifier: "hoge.huga.app"
    )
    # 無料版
    download_dsyms(
      version: version,
      app_identifier: "hoge.huga.app-free"
    )

    upload_symbols_to_crashlytics(
      api_token: '<crashlytics token>'
    )

    clean_build_artifacts
  end
```

### download_dsyms

この action で dsym をダウンロードしています。 

`version` でアプリのバージョンを指定しています。 指定しないと全部ダウンロードするのかどうかはちょっとわからないですが凄く時間かかると思います。 ちなみに `build_number` を指定することもできます。

`app_identifier` は他の action と同様なので説明不要だと思います。

ダウンロードした結果ってどうなってるの？？？ と思いませんか？

ダウンロードした dsym ファイルのパスは `Actions.lane_context[SharedValues::DSYM_PATHS]` に保存して他のアクションから参照できるようになっています。

> https://github.com/fastlane/fastlane/blob/master/fastlane/lib/fastlane/actions/download_dsyms.rb#L58

### upload_symbols_to_crashlytics

この action で dsym を crashlytics にアップロードしています。

`api_token` は"Info.plist" という名前でアプリの "Info.plist" があるなら勝手に探してくれるが別の名前 (ex: hoge-Info.plsit)にしている場合は明示的に指定する必要があります。

dsym の path は 先程述べた `SharedValues::DSYM_PATHS`に格納されているのでどれをアップロードするかは特に指定する必要がありません。 この辺が fastlane 最高です。

ちなみに自前で path を指定したり追加したりすることもできます。

> https://github.com/fastlane/fastlane/blob/master/fastlane/lib/fastlane/actions/upload_symbols_to_crashlytics.rb#L12

### clean_build_artifacts

ダウンロードした dsym のファイルを削除しています。

この action は汎用的で他にも色々削除する機能があるのですが、全て状況に合わせていい感じに削除してくれるので非常に賢いです。

> https://github.com/fastlane/fastlane/blob/master/fastlane/lib/fastlane/actions/clean_build_artifacts.rb#L12


## 実際の運用

このアクションを CI で定期的に稼働させれば問題ないと思います。

ただし現状、そんなに高頻度でやる必要性を感じていないので手動でこのアクションを実行させています。 

TestFlight で配布するときや新しいバージョンを AppStore で配布したときなどです。

ただし、割と時間がかかるのでお昼に外出する前に動かしてたりします。
Emacs 知りうる限りもっとも優れた魔法の杖

ファイルを編集するためには探さないといけない。
探すコマンドは結構あってコマンドFとかgrepとかいろいろあるんだけどそれをちょこっとご紹介。
想定読者
だいたいEmacs入門したあたりの人
つまり自分

## helm-git-grep
`git grep`は何かを探すならこの上なく優秀なコマンドだと思う。
Gitレポジトリ内しか探せないけど十分すぎるほど素晴らしいと思う。そもそもGitがすばらしい。
でEmacsは`git grep`をEmacsの中から使うことができるというさすがなんでもありだ。
この機能はEmacsでもっとも有名と言っても過言ではないhelmという機能を利用したものだ。
なのでhelmを先に使える状態にしておく必要があるんだけどhelmの情報はすぐに見つかるからここでは割愛！
名前の通りこのパッケージはGitレポジトリ内のファイルなら中身を含めてなんでも探してくれる。今まで目視確認してファイルから不要な情報を探していたイージーモードから卒業することができる！検索して、エンターキーで開いて編集して、他のファイルを探す。
普通のことをかんたんにこなすことができることがこんなにも素晴らしいことなんてなぁ。

## expand-region
個人的にはvimの`cit`とかのコマンドはとても便利だと思っていてEmacsで使い方がわからなかったので結構困っていた。（Vimmerじゃない人に解説するとcitというのは
```
<span>コマンドを押したらこの部分が削除されて瞬時に編集可能になる</span>
他にも"この間を編集するコマンドとかある"
```
で、Emacsではメタキーあるからいらんかなぁとか考えてたら見つけた。
これは設定したキーを押すと賢く範囲を選択してすぐに編集に移ることができるパッケージ
`Here's to the crazy ones`という単語があってカーソルがcrazyの上にある場合、コマンド一発でCrazyを編集して書き換えることができるようになる。同じコマンドを続けてなどカオスと範囲が広がって１行、関数全体、ファイル全体と広がる。便利！
この前書いたGoogle翻訳と併せて使うと文章を日本語訳することもできるので尚良！
人工知能OSS tensorflowをつかったFXのバックテストをしてみた

http://qiita.com/jiji_platform/items/268377c542706e6f44b1 の記事を参考にして、人工知能OSS tensorflowをつかったFXのバックテストをさくっとしてみた。
バックテストの基盤はjijiを利用した。

- tensorflowを使わないバックテスト結果（ドル円、期間：2007年から2017年）

![image.png](https://qiita-image-store.s3.amazonaws.com/0/189952/70a61bf7-59c8-c55d-25e0-67b69fec2b7b.png)

- tensorflowを使ったバックテスト結果（ドル円、期間：2007年から2017年）

![image.png](https://qiita-image-store.s3.amazonaws.com/0/189952/9037d103-a577-1afb-dc04-e9eec402d848.png)

取引回数が激減して、PFが2倍になっている。むむむ。。。
トレードエントリが厳選させて勝率が高くなったということか。
今後は、いろいろな特徴量をためしてみよう。
[Laravel] ログイン時のエラーメッセージを変更する

emailをログインIDとかメールアドレスとか画面によって言い方を変えたい場合、ログイン画面の場合つまづいたのでメモ。

postLoginメソッドをオーバーライドして$this->validateの第３引数にmessagesを追加

```php:AuthController.php

    /**
     * Handle a login request to the application.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function postLogin(Request $request)
    {

        $messages = [
            'email.required' => 'ログインIDは必須です。'
        ];

        $this->validate(
            $request,
            [$this->loginUsername() => 'required', 'password' => 'required'],
            $messages
        );

        // If the class is using the ThrottlesLogins trait, we can automatically throttle
        // the login attempts for this application. We'll key this by the username and
        // the IP address of the client making these requests into this application.
        $throttles = $this->isUsingThrottlesLoginsTrait();

        if ($throttles && $this->hasTooManyLoginAttempts($request)) {
            return $this->sendLockoutResponse($request);
        }

        $credentials = $this->getCredentials($request);

        if (Auth::attempt($credentials, $request->has('remember'))) {
            return $this->handleUserWasAuthenticated($request, $throttles);
        }

        // If the login attempt was unsuccessful we will increment the number of attempts
        // to login and redirect the user back to the login form. Of course, when this
        // user surpasses their maximum number of attempts they will get locked out.
        if ($throttles) {
            $this->incrementLoginAttempts($request);
        }

        return redirect($this->loginPath())
            ->withInput($request->only($this->loginUsername(), 'remember'))
            ->withErrors([
                $this->loginUsername() => $this->getFailedLoginMessage(),
            ]);
    }

```
SQL棋譜並べ


私の趣味の話になりますが、囲碁の練習方法のひとつに**棋譜並べ**というものがあります。
棋譜並べとは先人が残してくれた名局を、目の前の碁盤に並べていくというだけなのですが、効果の高い勉強法とされています。
碁を打った人の意図を完全に理解する必要はなく、<u>並べるだけで感覚やカンの部分が養われる</u>と言われています。

プログラミングでも、この練習方法は応用出来そうです。
SQL棋譜並べと題して、SQLパズルという書籍に載っている難しめのSQLを実際に手を動かして実行してみます。（プログラミングの世界では一般的に写経と言いますね。。)

# paiza.IO
[ブラウザでプログラミング・実行ができる「オンライン実行環境」| paiza.IO](https://paiza.io/)
ITエンジニア向けの無料オンラインプログラミング実行環境サービスです。
ブラウザ上でMySQLのSQLを実行することが出来ます。
今回はこちらのサービスを使わせてもらいました。

# SQLパズル 問題 No.14 電話とFAX
社員テーブル(Personnel)と電話テーブル(Phones)があって、各社員の姓名と電話番号、FAX番号を1行にまとめて全員分出力するという問題。

## 答え その1
![paizaio_sql1.PNG](https://qiita-image-store.s3.amazonaws.com/0/172671/6598f169-e659-a478-f668-815773926a23.png)

## 答え その2
![paizaio_sql2.PNG](https://qiita-image-store.s3.amazonaws.com/0/172671/51bd1dfc-e68f-87fe-6a66-10c23ddd9d3a.png)

## 答え その3
![paizaio_sql3.PNG](https://qiita-image-store.s3.amazonaws.com/0/172671/4fba6eca-ae1c-6f00-c780-68a12581b068.png)

## 答え その4
![paizaio_sql4.PNG](https://qiita-image-store.s3.amazonaws.com/0/172671/d524fdb6-ca56-1d61-d090-bc324a0168aa.png)

# 参考元
[SQLパズル 第2版~プログラミングが変わる書き方/考え方 | ジョー・セルコ, Joe Celko, ミック |本 | 通販 | Amazon](https://www.amazon.co.jp/SQL%E3%83%91%E3%82%BA%E3%83%AB-%E7%AC%AC2%E7%89%88-%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E3%81%8C%E5%A4%89%E3%82%8F%E3%82%8B%E6%9B%B8%E3%81%8D%E6%96%B9-%E8%80%83%E3%81%88%E6%96%B9-%E3%82%B8%E3%83%A7%E3%83%BC-%E3%82%BB%E3%83%AB%E3%82%B3/dp/4798114138/ref=sr_1_1)
[ブラウザでプログラミング・実行ができる「オンライン実行環境」| paiza.IO](https://paiza.io/)
[写経でプログラミングが上達するか - Qiita](http://qiita.com/yuya_takeyama/items/b8a8c548a4a1c6a05531)
[誰もが知ってるけど敢えて言わない確実に身につくプログラミング学習法](https://wirelesswire.jp/2016/04/52633/)
月に何日あるか計算する方法

![日付計算.png](https://qiita-image-store.s3.amazonaws.com/0/160563/eab44e39-1761-e930-2150-0c0428065e6e.png)


#利用シチュエーション

* 1ヶ月の平均数値を算出するときに分母を自動で算出したいとき


#記述方法
```html:qiita.rb
=DAY(EOMONTH(参照,))

<!-- 記述例 -->
=DAY(EOMONTH(A2,))
```

#記述方法

> **前提条件**
> A列に月日を記載
> ![month.png](https://qiita-image-store.s3.amazonaws.com/0/160563/7c3b2eae-10a7-cfff-0398-69073fddf96f.png)

---

> **抽出結果**
> ![result.png](https://qiita-image-store.s3.amazonaws.com/0/160563/07749282-891b-c504-0844-c1fc576ffb33.png)

---

**解説**

* EOMONTH関数で月の最終日のシリアル値を取得
* シリアル値をDAY関数で日付に変更

####個々の関数の説明####
EOMONTH関数は指定された月の最終日に対応するシリアル値を返す

||書き方|利用例|
|:---|:---|:---|
|書式|EOMONTH(開始日,月)|EOMONTH(A2,0)|
|引数1|開始日の日にちを指定(参照可)|A2|
|引数2|該当の月を指定(0は当日、-1は前月)|0|

DAY関数はシリアル値を日にちに返還する

||書き方|利用例|
|:---|:---|:---|
|書式|DAY(シリアル値)|DAY(A2)|
|引数1|日を求めたい日付を指定(シリアル値 or シリアル値を表す関数)|A2|

#サンプル
[Google スプレッドシート](https://goo.gl/Uvt6SS)
個人メモ：Linux コマンド

ときどき使用するものを中心に、スペルとかコマンド順序とかあやふやで忘れがちなコマンド。検索すると辞書みたいのが多くて時間かかるので。(CentOS 6,CentOS 7 での確認）
\#がついているものは、rootログインか　sudoで実施。
※随時追加予定
  
#ユーザー管理

###### **ユーザーパスワード変更**
**# passwd [username]**
ユーザーのパスワードを変更する。ユーザー名は思い出せるがパスワードを忘れてしまったときとか。root権限あるのでログインする必要あり。その後求められるパスワード入力で、短かったりすると文句言われるが無視してもう一度入力すれば承認される。

###### **ユーザー追加**
**# useradd [username]**
サーバー構築したあとでユーザーを追加するときとか。追加した後、上記のpasswd コマンドでパスワード設定する。

###### **パスワードユーザーの確認**
**# cat /etc/passwd**
登録されているユーザーの一覧を表示する

###### **sudoユーザーに追加する**
**# usermod -G wheel [username]**
指定したユーザーで　sudoコマンドが使えるようにする。コマンド自体は、wheelグループに追加するコマンドで、wheelがsudoユーザーのグループ名。
Riseze And Strip V.1.00が動かなくなった件と多分対処法

# Riseze And Strip V.1.00が動かなくなった件と多分対処法？
## 原因不明
npmのアップデートをしたり、環境の共有を自宅ネットワーク内でやったりして居るので、どっちが原因かわからないのですが多分npmのアップグレードかなあ？

出てきたエラーメッセージはこちら
Error: Cannot find module 'imagemagick'

## これで動いた

npm install -g npm でアップデートしたら5.0.4になりました。
なのでイメージマジックもアップしてみた次第です。
自分が使ってるのは
require('imagemagick')
なのでノードのイメージマジックの筈です。
なので、そっちをアップデートしてみました。

npm update imagemagick -g

あとついでに下記もやっちゃいました

brew update imagemagick

なのでどっちが効いてるのか断言できないのが知識の甘さで申し訳ないのですが、多分前者じゃないかなあ？と思いますです。

これで再実行したらリサイズが正常稼動しました。
Falseの証明


Coqで，次の2つの定理の証明を考えてみます．

- `True = False -> False`
- `1 = 0 -> False`

どちらも正しくない等式から`False`を証明するものです．

## 各種定義

`eq`，`False`，`True`の定義を以下に示します．

```
Inductive eq (A : Type) (x : A) : A -> Prop :=  eq_refl : x = x
Inductive False : Prop :=  
Inductive True : Prop :=  I : True
```

## True = False -> Falseの証明

通常の方法で証明すると次のようになります．

```
Theorem tff : True = False -> False.
Proof.
  intros. rewrite <- H. apply I.
Qed.
```

`match`を使って証明すると次のようになります．

```
fun H : True = False => match H in (_ = y0) return y0 with
                        | eq_refl => I
                        end
     : True = False -> False
```

`eq_ind`を使って証明すると次のようになります．

```
fun H : True = False => eq_ind True (fun P : Prop => P) I False H
     : True = False -> False
```

なお，`eq_ind`の主張は以下の通りで，[ここ](http://qiita.com/lion/items/44b41c5e7a9c41887fe4)で少し説明しています．

```
eq_ind : forall (A : Type) (x : A) (P : A -> Prop),
    P x -> forall y : A, x = y -> P y
```

## 1 = 0 -> Falseの証明

ちょっとした道具を用意しておきます．

```
Definition disc n := match n with O => False | S n' => True end.

Theorem pqr P Q R : (P -> Q) -> (Q -> R) -> P -> R.
Proof.
  intros. apply X0. apply X. apply X1.
Qed.
```

`1 = 0 -> False`を証明するためには`1 = 0 -> True = False`を証明して，今まで証明した`tff`と`pqr`を使います．

`1 = 0 -> True = False`の証明は以下の通りです．

```
Definition tf10 := fun H : 1 = 0 =>
eq_ind 1 (fun n : nat => disc 1 = disc n) (eq_refl (disc 1)) 0 H.
     : 1 = 0 -> disc 1 = disc 0
```

これで`1=0 -> False`の証明ができます．

```
pqr (1 = 0) (True = False) False tf10 tff
     : 1 = 0 -> False
```
ADDA > tool > read_ADDA_log_170701.py > read Re{m} and Im{m} from log file

```txt:Environment
GeForce GTX 1070 (8GB)
ASRock Z170M Pro4S [Intel Z170chipset]
Ubuntu 16.04 LTS desktop amd64
TensorFlow v1.1.0
cuDNN v5.1 for Linux
CUDA v8.0
Python 3.5.2
IPython 6.0.0 -- An enhanced Interactive Python.
gcc (Ubuntu 5.4.0-6ubuntu1~16.04.4) 5.4.0 20160609
GNU bash, version 4.3.48(1)-release (x86_64-pc-linux-gnu)
```

Read Re{m} and Im{m} from log file of the ADDA.

```
$ grep refractive run346_sphere_g16_m1.45/log 
refractive index: 1.45+0.1i
```

```read_ADDA_log_170701.py
import subprocess as sb

# on Python 3.5.2

# codingrule: PEP8

INP_FILE = 'run346_sphere_g16_m1.45/log'


def read_mr_mi(logfile):
    cmd = 'grep refractive ' + logfile
    # print(cmd)
    res = sb.getoutput(cmd).split(' ')[-1]
    # 1.45+0.1i

    mr = res.split("+")[0]
    mi = res.split("+")[1].replace('i', '')
    return (mr, mi)

mr, mi = read_mr_mi(INP_FILE)
print(mr, mi)

```

```
$ python3 CODE_170405/read_ADDA_log_170701.py 
1.45 0.1
```
React Nativeで改行したい！やり方3選

# やり方3種類
1. テンプレートリテラルを用いる
2. \nを{}で囲って用いる
3. <Text>コンポーネントを分ける

---
### 1. テンプレートリテラルを用いる
```
<Text>
{`
  1行目
  2行目
`}
</Text>
```

### 2. \nを{}で囲って用いる
```
<Text>1行目{"\n"}２行目</Text>
```


### 3. <Text>コンポーネントを分ける

```
<Text>1行目</Text>
<Text>2行目</Text>
```



### 実践編
```
import Text from 'react-native'; 

class Aiueo extends Component {

  render() {
    text = "あい  うえ  お"

    return(
      <Text>
        { text.replace(/\s\s/g, '\n') }
      </Text>
    )
  }
}
```
```
あい
うえ
お
```


---
他のやり方をご存知の方、コメントお待ちしております〜！
scotch-box にeccube2.13.5系

個人の備忘録として記載
前提
virtualbox,vagrantのインストール

git clone https://github.com/scotch-io/scotch-box hogehoge

でboxを取得
cd hogehoge

virtualとローカルのディレクトリマッピングの変更。
デフォルトだとboxの中が/var/www としてリンクされるので、実際のeccubeを解凍したディレクトリを設定

vi Vagrantfile

```
    #config.vm.synced_folder ".", "/var/www", :mount_options => ["dmode=777", "fmode=666"]
    config.vm.synced_folder "ここが実際eccubeがあるパス", "/var/www", :mount_options => ["dmode=777", "fmode=666"]
```
vagrant up
vagrant ssh

ここからvirtualの中
sudo vi /etc/apache2/sites-available/000-default.conf
sudo vi /etc/apache2/sites-available/scotchbox.local.conf
（どっちかだけで良さげですが、apache起動時に警告がでるので両方修正）

```
        #DocumentRoot /var/www/public
        DocumentRoot /var/www/eccube-2.13.5/html
```
sudo service apache2 restart
eccubeはパスワードなしでDB設定ができないようなので適当に設定
mysqladmin -u root password 'password'

ローカルのブラウザから以下でインストール画面がでるはず。
http://192.168.33.10
DB名はsctochbox
ユーザroot
パスワードは上記で設定　ここではpassword
linux > less -SX [ファイル名] > wrappingをしない表示 | q押下時に画面をクリアしない

```txt:動作環境
GeForce GTX 1070 (8GB)
ASRock Z170M Pro4S [Intel Z170chipset]
Ubuntu 16.04 LTS desktop amd64
TensorFlow v1.1.0
cuDNN v5.1 for Linux
CUDA v8.0
Python 3.5.2
IPython 6.0.0 -- An enhanced Interactive Python.
gcc (Ubuntu 5.4.0-6ubuntu1~16.04.4) 5.4.0 20160609
GNU bash, version 4.3.48(1)-release (x86_64-pc-linux-gnu)
```

```
$ less -SX run257_sphere_g26_m1.5/IntField-Y 
```

### Sオプション

>        -S or --chop-long-lines
              Causes lines longer than the screen width to be chopped (truncated) rather than wrapped.  That is, the portion
              of a long line that does not fit in the screen width is not shown.  The default is to wrap  long  lines;  that
              is, display the remainder on the next line.

### Xオプション

>      -X or --no-init
              Disables  sending  the termcap initialization and deinitialization strings to the terminal.  This is sometimes
              desirable if the deinitialization string does something unnecessary, like clearing the screen.

### 結果

![Screenshot from 2017-07-01 07-47-40.png](https://qiita-image-store.s3.amazonaws.com/0/32870/82fe176b-842b-e6d1-5eed-632d5f0f6f55.png)
Apple Mach-O Linker Error が出てきた場合

忘れがちなのでメモ

```
Directory not found for option '...GoogleToolboxForMac'
Apple Mach-O Linker Error
```

などなど出て, **Podsをインストールした後**に出てきた場合は、作業するファイルを変更しないといけない。*.xcworkspace と名のついたファイルが作成されているので、
それを直に開いて作業する。

![Screen Shot 2017-06-30 at 11.59.08 AM.png](https://qiita-image-store.s3.amazonaws.com/0/158705/d5ef132a-30da-0dc9-0d4f-d7d667c22a88.png)
[JavaScript] 脱C言語風 配列操作コーディング

JavaScript学習の一助になればと思い3秒で作成しました．

`let` は大体 `var` みたいなもんです．
`v => ...` は大体 `function(v) { return ...; }` みたいなもんです．

各メソッドの詳細については[Mozilla神の神ドキュメント](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array)を見ると良いと思います．

## 配列を調べる/配列を加工するケース

Arrayのプロトタイプメソッドはチェインして使うと面白いです．

```js:例
arr.filter(v => v > 100).map(v => v + 5).reduce((sum, v)=> sum + v);
```


### 配列の要素に含むか？ includes

```js:for
let result = false;

for (let i = 0; i < arr.length; i++) {
  if (arr[i] == target) {
    result = true;
    break;
  }
}
```

```js:includes
let result = arr.includes(target);
```

### 配列の要素に条件を満たすものがあるか？ some

```js:for
let result = false;

for (let i = 0; i < arr.length; i++) {
  if (arr[i] > target) {
    result = true;
    break;
  }
}
```

```js:some
let result = arr.some(v => v > target);
```

### 配列の要素すべてが条件を満たすか？ every

```js:for
let result = true;

for (let i = 0; i < arr.length; i++) {
  if (!(arr[i] > target)) {
    result = false;
    break;
  }
}
```

```js:every
let result = arr.every(v => v > target);
```

### 配列の要素から条件を満たすものだけを残す filter

```js:for
let result = [];
let resultCount = 0;

for (let i = 0; i < arr.length; i++) {
  if (arr[i] > target) {
    result[resultCount++] = arr[i];
  }
}
```

```js:filter
let result = arr.filter(v => v > target);
```

### 配列の要素から条件を満たすもの1つを取り出す find

```js:for
let result = null;

for (let i = 0; i < arr.length; i++) {
  if (arr[i] > target) {
    result = arr[i];
    break;
  }
}
```

```js:find
let result = arr.find(v => v > target);
```

### 配列の要素をすべて繋げて文字列にする join

```js:for
let result = "";

for (let i = 0; i < arr.length; i++) {
  result += arr[i];
  if (i != arr.length - 1) { 
    result += ",";
  }
}
```

```js:join
let result = arr.join(",");
```

### 配列の要素それぞれを変換する map

```js:for
for (let i = 0; i < arr.length; i++) {
  arr[i] = convert(arr[i]);
}
```

```js:map
let result = arr.map(v => convert(v));
```

### 畳み込み reduce reduceRight

```js:for
let result = 0;

for (let i = 0; i < arr.length; i++) {
  result += arr[i];
}
```

```js:reduce
let result = arr.reduce((sum, v)=> sum + v, 0);
```

### 配列の部分配列をつくる slice

```js:for
let result = [];
let resultLength = 0;

for (let i = 2; i < 5; i++) {
  result[resultLength++] = arr[i];
}
```

```js:slice
let result = arr.slice(2, 5);
```

### 配列の要素を並び替える sort

```js:for
割愛
```

```js:sort
let result = arr.sort((a, b)=> a < b);
```

### 配列をスタック構造として使う pop push shift unshift

べんりです


## forの方がよいかもしれないケース

### 配列の要素1つ1つについて何かする

```js:for...of
for (let v of arr) {
  doSomething(v);
}
```

```js:forEach
arr.forEach(v => doSomething(v));
```

### ただ単に何かを複数回実行したいだけ

```js:for
for (let i = 0; i < count; i++) {
  doSomething();
}
```

```js:forEach
new Array(count).fill(0).forEach(()=> doSomething());
```

## 微妙な感じのケース

### 動的に長さを決定する配列を生成して，各要素には関数の戻り値を設定する．

```js:for
let arr = [];
for (var i = 0; i < len; i++) {
  arr[i] = generateValue(i);
}
```

```js:map
let arr = new Array(len).fill(0).map((zero, i)=> generateValue(i));
```
VR空間移動用いす型デバイスを作成する①（序文のようなもの）

#はじめに
VR空間での移動用デバイスがつくれないかと試作中。
体重計の重量センサを流用、いすに座った状態で体を前や左右に傾けると重心の偏りを検知する。VR空間内でも傾いた方向に移動する。
これまでに何回か展示会等に出展し、動画もアップしてみた。
ある程度出来てきたので、得られた知見（ほどでもないか･･･。）や技術をまとめたい。
【出展経験】
・UNITY VR EXPO AKIBA
・JapanVR FEST 2017冬
・NT名古屋＆NT京都
・VR Tech Tokyo #7
【投稿動画（ニコニコ動画）】
[【VR】椅子をコントローラーに改造してみた【電子工作】](http://www.nicovideo.jp/watch/sm31346344)

<img width=40% src="https://qiita-image-store.s3.amazonaws.com/0/184089/86534124-3b7e-6ee3-8dcf-6c5602898529.jpeg">



#デバイス制作の目的
近年VR用ヘッドマウントディスプレイが多数発売され一般家庭においてもバーチャルリアリティ体験が可能となった。今後価格の低下とともに普及台数が大幅に増加していくものと予測されている。

現在、VR用に様々なコンテンツが発売されているが、コンテンツ作成の際の大きな課題が「VR酔い」の問題である。VR空間内での移動の際に、画像から視覚に入ってくる情報は変化いるものの、触覚や平衡感覚等の身体には移動している感覚が入ってこないため認識のずれにより酔いが発生してしまう。
現在この対策として、様々な移動方法が検討されているが、問題点もある。代表的な例を以下に3つ示す。
【VR空間内での移動方法】
１．ゲーム内の移動方法を工夫する。
等速運動のみをさせ、加速運動をさせない。加速時に視界を狭める。瞬間移動させる等の移動方法の工夫により、酔いを軽減させる。ただし、移動方向が制限されたり、少し手間がかかるため、移動の自由度が下がってしまう問題がある。

２．ルームスケール
一辺2～4mの長方形の範囲内でHMDの頭部の位置を検出することにより、その範囲内で自由に動くことができる。ただし、その範囲外での動きは認識できない。

３．専用の歩行デバイス
「Virtuix Omni」のように腰を固定した状態で、歩いたり走ったりし移動する専用のコントローラー。実際に動くため酔わないものの、やや筐体が大きく重量もある。

これらの点を改善する方法の一つとして、体重計に使用されている重量センサを使用したいす型コントローラーを試作を行う。（さらに酔い対策や自由度の向上のために振動モーターや光センサも使用している。）
このようなデバイスを使用することの利点は以下の通り。
【デバイスの利点】
１．椅子に座ったまま自由に移動できる、かつ動作が楽。
２．必要になるスペースはルームスケールや歩行型デバイスに比べ小さい。
３．移動時に加速・減速方向と体の傾き方向が一致するため、酔いが軽減される。
４．枯れた技術である重量センサを使用しているため、センサが入手しやすく、安価な割に精度が高い。
５．身近な体重計を応用しているため、未知のデバイスに比べ、一般の人が理解しやすい。
６．体の傾きに応じ、速度を変化させることで、入力のステップを分けられる（試作機は一方向につき5段階入力）。

今後のVRの普及に伴い、自由度が高く、入力の調整が可能かつコンパクトな入力手段が求められる。この要望に応えるため、いす自体を入力デバイスとすることは有用な手段の一つと考える。

#今後の投稿予定や補足資料
【今後の投稿予定】
①序文のようなもの（今回の投稿）
②展示会等で気づいたこと、注意点等
③体重計の出力をArduinoで読み取ってみる
④いすの回転を光センサで読み取ってみる
⑤体の傾き（重心の偏り）をVRに入力する際のポイント（要望あれば･･･）
（③~⑤は技術の解説）

展示会等で使った資料の一部
【補足資料】
<img width=75% src=https://qiita-image-store.s3.amazonaws.com/0/184089/73535b8b-0532-76e4-3ea4-1740de984bcd.jpeg>

<img width=75% src=https://qiita-image-store.s3.amazonaws.com/0/184089/f151b775-9b7d-e3d6-c2ce-c9611d93e261.jpeg>

<img width=75% src=https://qiita-image-store.s3.amazonaws.com/0/184089/e6cad755-45da-5e57-3ad6-006094c0d994.jpeg>

<img width=75% src=https://qiita-image-store.s3.amazonaws.com/0/184089/dc125214-91c8-4e4c-0340-4c5f7e8369b8.jpeg>

<img width=75% src=https://qiita-image-store.s3.amazonaws.com/0/184089/180cf7b5-4bc5-9621-5a80-e85eb17b5c0a.jpeg>

<img width=75% src=https://qiita-image-store.s3.amazonaws.com/0/184089/a33da437-81ec-0563-006d-ec29a0d74ec6.jpeg>
Moodle Trackerでパッチを投稿するときのメモ

# Moodle Tracker？
Moodle用の不具合報告等に利用されるプロジェクト管理システム。JIRA。

# メモ
不具合報告でパッチを投稿する際にお作法を忘れてしまうことがよくあるので個人用忘備録。
https://docs.moodle.org/dev/Git_for_developers

## Moodle Trackerで不具合を報告
まずMoodle Trackerでissueを作成。表示されるissue key (MDL-XXXXX)をメモしておく

## gitでブランチを作成してコミット
githubでmoodle/moodleを**forkしてから**cloneする。

```
$ git clone https://github.com/<yourname>/moodle.git moodle
$ cd moodle
```

将来的にパッチを投稿する際にmoodle公式リポジトリに同期させられるようにupstreamとして追加。

```
$ git remote add upstream git://git.moodle.org/moodle.git
```

以下のようにパッチを作成。コミットメッセージはMoodle Trackerのissue key+半角スペースから始まるものにする。

```
$ git checkout -b MDL-XXXXX
$ git branch
* MDL-XXXXX
  master
$ vi hogefile.ext
$ git add hogefile.ext
$ git commit -m 'MDL-XXXXX hogehoge'
$ git push origin MDL-XXXXX
```

## IssueのDetailsを更新
  - Pull from Repository
   - https://github.com/&lt;yourname&gt;/moodle

  - Pull Master Diff Branch
    - MDL-XXXXX

  - Pull Master Diff URL
    - https://github.com/moodle/moodle/compare/master...&lt;yourname&gt;:MDL-XXXXX

## 次にパッチを投稿する際
修正用ブランチを作成する前にmasterブランチをmoodle公式リポジトリと同期させる

```
$ git checkout master
$ git fetch upstream
$ git merge upstream/master
```

masterではなく特定のバージョンのブランチから修正用ブランチを作成したい場合は追加で以下のようにする。

```
$ git checkout -b MDL-XXXXXX upstream/MOODLE_34_STABLE
```
pythonからbitcoindにアクセスする

この記事では、Mac OS Sierra 10.12.4を使っています。
bitcoindにpythonからアクセスする環境を構築した時の情報をまとめました。

bitcoindをインストールしていることを前提とします。
[参考：bitcoindをdockerで環境構築する](http://qiita.com/Naomasa/items/5053a5d9c33ae040bed2)

#python-rpcのインストール

[python-bitcoinrpc](https://github.com/jgarzik/python-bitcoinrpc)を利用します。

```py
pip install python-bitcoinrpc
```

#rpc接続の確立

bitcoinで利用されるrpc(リモートプロシージャコール)の接続を確立します。
quick_startに従って始めます。

```py
from bitcoinrpc.authproxy import AuthServiceProxy, JSONRPCException
rpc_user="bitcoinrpc"
rpc_password='passwordxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
rpc_connection = AuthServiceProxy("http://%s:%s@127.0.0.1:8332"%(rpc_user, rpc_password))
```

rpc_user,rpc_passwordはbitcoindの環境構築時に設定したものを使います。
わからなければ、bitcoin.confを確認すれば書かれているはずです。
なお、2017/6/24時点、AuthServiceProxyにおいて、パスワードに「/」が入っているとエラーになります。
(urllibでrpc_user,rpc_passwordを分解する際の区切りがうまく識別できないため）
/が混じらないpasswordにするなど工夫が必要です。

#rpc接続の確認
rpc_connectionを定義したら、ブロックをとってみましょう

```py
blhash = rpc_connection.getblockhash(0) #blhashはブロックのhash文字列
bl = rpc_connection.getblock(blhash) #blはブロック情報
```
結果確認

```py
bl
{'bits': '1d00ffff',
 'chainwork': '0000000000000000000000000000000000000000000000000000000100010001',
 'confirmations': 1,
 'difficulty': 1,
 'hash': '000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f',
 'height': 0,
 'mediantime': 1231006505,
 'merkleroot': '4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b',
 'nonce': 2083236893,
 'size': 285,
 'strippedsize': 285,
 'time': 1231006505,
 'tx': ['4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b'],
 'version': 1,
 'versionHex': '00000001',
 'weight': 1140}
```

genesisブロック情報が取れています。

次回はブロック内のトランザクション情報を取得するコードを作成します。
xfce4-terminalのカーソルの形を変更

Qiitaに似たような記事が無かったのでメモ。
Xfce4のターミナルである`xfce4-terminal`を使ってみたら、初期状態でカーソルの形が点滅せず、形も縦線ではなく矩形になっている。

![before.png](https://qiita-image-store.s3.amazonaws.com/0/153431/463d1469-8447-25ff-25cf-45bdd205c376.png)

右クリックから設定を開いてみても、どこにもカーソルの形を変更する設定が見当たらない。参った。
ググったら、どうやら`xfce4-terminal`の設定ファイルを直接編集する必要があるとのこと。まずは、設定ファイルを任意のエディタで開く。

```
$ vim ~/.config/xfce4/terminal/terminalrc
```

そのファイルにある`MiscCursorShape`と`MiscCursorBlinks`の行を探す。

```
MiscCursorBlinks=FALSE
MiscCursorShape=TERMINAL_CURSOR_SHAPE_BLOCK
```

この2行を、以下に変更する。

```
MiscCursorBlinks=TRUE
MiscCursorShape=TERMINAL_CURSOR_SHAPE_IBEAM
```

`MiscCursorBlinks`はカーソルを点滅させる場合は`TRUE`、させない場合は`FALSE`を指定。`MiscCursorShape`はカーソルの形を表す設定で、`TERMINAL_CURSOR_SHAPE_BLOCK`は矩形、`TERMINAL_CURSOR_SHAPE_IBEAM`は縦棒を意味している。
編集して保存した瞬間、カーソルの形が矩形から縦線に代わり、点滅するようになった。

![after.png](https://qiita-image-store.s3.amazonaws.com/0/153431/d2c1f3b9-19cf-134a-d97d-e6210a6e1230.png)

OK!
Stream.distinctをフィールド・プロパティなどで行うには

##Stream.distinctをフィールド・プロパティ・計算結果などで行うには

java Stream APIのStream.distinctは引数にラムダ式をとれません。

	class Item{
		String name,shop;
		int price;
		Item(String n,int p,String s){ name=n; price=p; shop=s; }
		public String toString(){ return name+", "+price+", "+shop; }
	}
	Item[] items = {
		new Item("item-1",1000,"shop-A"),
		new Item("item-2",1100,"shop-B"),
		new Item("item-3",1200,"shop-C"),
		new Item("item-4",2000,"shop-A"),
		new Item("item-5",2100,"shop-B"),
		new Item("item-6",2200,"shop-C"),
		new Item("item-7",3000,"shop-A"),
		new Item("item-8",3100,"shop-B"),
		new Item("item-9",3200,"shop-C"),
	};

上の配列からshopごとに1つ商品を取り出すには、distinctが引数にラムダ式をとれるなら、次のようになるでしょう。

	Stream.of(items)
		.distinct(item->item.shop)
		...

でもこんな書き方はできないので、filterとSetを組み合わせて代用します。

	Set<String> unique = new HashSet<>();
	Stream.of(items)
		.filter(item->unique.add(item.shop))
		.forEach(System.out::println);
		
	> item-1, 1000, shop-A
	> item-2, 1100, shop-B
	> item-3, 1200, shop-C

なぜこれでdistinctと同等なのかというと、Set.addは次のような動作をするからです。

	指定された要素が集合に含まれない場合、集合に追加し、trueを返す。
	指定された要素が集合にすでに含まれる場合、集合を変更せずにfalseを返す。

つまり、重複する要素の最初の1つ対してtrueを返す条件式として使えるということです。

##並列ストリームでは

しかし、HashSetはスレッドセーフではないので並列ストリームでは危険です。

	Set<String> unique = new HashSet<>(); //スレッドセーフではない！
	Stream.of(items)
		.parallel() //マルチスレッドで処理される！
		.filter(item->unique.add(item.shop))
		.forEach(System.out::println);

	> item-7,3000,shop-A //重複！
	> item-5,2100,shop-B
	> item-1,1000,shop-A //重複！
	> item-6,2200,shop-C

1/100くらいの割合で、上のような結果になりました。
代わりに並行性をサポートするConcurrentHashMapを、Collections.newSetFromMapでSetに変換して使います。

	Set<String> unique = Collections.newSetFromMap(new ConcurrentHashMap<>());
	Stream.of(items)
		.parallel()
		.filter(item->unique.add(item.shop))
		.forEach(System.out::println);

	> item-6, 2200, shop-C
	> item-5, 2100, shop-B
	> item-7, 3000, shop-A

Ok
Db2 Developer Community Editionを "数クリック" で 導入してみた (2)

導入の準備は、[Db2 Developer Community Editionを "数クリック" で 導入してみた (1)] 
(http://qiita.com/kirinchan/items/0ecd2ebf8f82c938e4b3) を参照ください。 ここからはその続きです。

# 導入をはじめる
アプリケーション･フォルダーの Db2 Developer Community Editionをダブルクリックすると導入が始まります。
![スクリーンショット 2017-06-30 17.13.01.png](https://qiita-image-store.s3.amazonaws.com/0/131443/e0107171-29b0-ba3d-ff9f-79fd75186cfd.png) いよいよ導入のステップへ。
# Click1: ライセンス条件に同意してクリック
![スクリーンショット 2017-07-01 0.23.38.png](https://qiita-image-store.s3.amazonaws.com/0/131443/7d5481df-15d8-2e6d-0878-c1ec8419be3c.png)


# Click2: 導入内容を選択してクリック
Db2 Developer Community Editionは Dockerイメージで提供されています。
筆者のMacBookにはDockerが未導入でしたが大丈夫。Docker未導入だと、｢Download Docker｣ というチェックボックスが現れます。チェックして自動的に導入&起動してもらいましょう。 
なお、Data Server Manager というデータベース管理ツールもDb2と一緒に入ります。 後から別導入する必要がないので便利です。
![スクリーンショット 2017-06-30 11.24.58.png](https://qiita-image-store.s3.amazonaws.com/0/131443/f6f89e87-6ea0-57b4-b115-ad10a61b041b.png)

# Click3: ユーザー名、パスワード等を入力してクリック
以下を入力するだけです。
･ Data Server Manager 利用時の ｢ユーザー名｣ ｢パスワード｣
･ Db2利用時の ｢パスワード｣
･ サンプルデータベースの作成 : サンプルデータベースを "transactional" か "analytical" のどちらのワークロードに最適化するか選択

![スクリーン Userid入力画面.png](https://qiita-image-store.s3.amazonaws.com/0/131443/cacbbec2-ea8c-9f55-ce9e-4fdaf4eed2ba.png)

# ･･･ あとはインストールがひたすら動く
この後、インストールが始まりました。 筆者の場合はDockerのダウンロードから動き始めました。
![スクリーンショット 2017-06-30 11.40.51.png](https://qiita-image-store.s3.amazonaws.com/0/131443/1835476a-1de3-4b07-8299-f7dc79a37613.png)
Dockerはダウンロード後にDocker導入完了のためにパスワード入力を求められます。画面の指示通り進めればOKで、その後続けてすぐにDb2のインストールが自動的に開始します。
![スクリーンショット 2017-06-30 12.53.13.png](https://qiita-image-store.s3.amazonaws.com/0/131443/f8a337b6-db1f-8b4c-9fb1-91c7ff07bd71.png)

ネットワーク環境によって所要時間は異なるでしょうが、放っておいても自動的にどんどん進んでいます。

![スクリーンショット 2017-06-30 13.26.36.png](https://qiita-image-store.s3.amazonaws.com/0/131443/361c3f9f-620d-ff40-ca01-97b3fed828d6.png)


# Click4: このクリックで使用開始画面へ
いつのまにか終わっていて installation completeの画面がでていました。 
Launch Db2 Developer-C をクリックしたら、もう使えます。 導入完了です。
![スクリーンショット 2017-06-30 13.43.15.png](https://qiita-image-store.s3.amazonaws.com/0/131443/b25afec7-b982-0756-6a98-9cfb26160b1b.png)

# Launch してみると
Db2のWelcome画面が表示されます。
![スクリーンショット 2017-06-30 17.54.37.png](https://qiita-image-store.s3.amazonaws.com/0/131443/48ea36d0-ab22-4fa7-d882-12990ea38131.png)

Data Server Managerの画面もすぐでます。 
![スクリーンショット 2017-06-30 16.37.01.png](https://qiita-image-store.s3.amazonaws.com/0/131443/a8499954-af7e-035e-454a-05102473c349.png)

Data Server Manager にログインして(導入時に設定したユーザー名とパスワードを使います)、作成したサンプルデータベースをのぞいてみました。
![スクリーンショット 2017-06-30 22.01.56.png](https://qiita-image-store.s3.amazonaws.com/0/131443/736a4315-bb96-7a3d-4b11-ccef77a71415.png)


# おわりに
数クリック で導入できる、というのは本当でした。 4 Click です。 これは簡単です。
Db2 だけでなく、管理ツール(Data Server Manager)も一 緒に導入できてすぐ使えるのが個人的にはさらに嬉しいです。
golangのtimeパッケージで「〜以前」「〜以降」

はじめに
--------------------

まず、 `time` パッケージの `Time.Before(Time)` および `Time.After(Time)` メソッドを見てみると、`Less Than` および `More Than` になっています。

```go
// After reports whether the time instant t is after u.
func (t Time) After(u Time) bool {
	return t.sec > u.sec || t.sec == u.sec && t.nsec > u.nsec
}

// Before reports whether the time instant t is before u.
func (t Time) Before(u Time) bool {
	return t.sec < u.sec || t.sec == u.sec && t.nsec < u.nsec
}
```

つまり、 `Time.Before(Time)` および `Time.After(Time)` は「〜より前」「〜より後」であり、入力引数の時刻は含まれません。

対して、`Less Than or Equal` または `More Than or Equal` 、すなわち「〜以降」「〜以前」を表現したい場合にはどうすればよいでしょうか。

方法
--------------------

答えは簡単。 `NOT` をとるだけ。

```go
if t1.Before(t2) {
    // t2.After(t1) でも同じ
    fmt.Println("t1 < t2")
}

if !t1.After(t2) {
    // !t2.Before(t1) でも同じ
    fmt.Println("t1 <= t2")
}

```
Mini-Algorithm:Longest Consecutive Characters

```js
(function longest(seq){
  var split = seq.split('');
  var max_count = 0;
  var max_char = null;
  var prev_char = null;
  for (var i=0; i < split.length; i++) {
    if(prev_char == split[i]) {
      count += 1;
    }else{
      count =1;
    }
    if(count > max_count) {
      max_count = count;
      max_char = split[i];
    }
    prev_char = split[i];      
  }
  return {max_char : max_count};
})('ABEBEBBBEB');
```

```
>{max_char: 3}
```
s3 sync がとても便利

#### この記事を読んでわかること
- ローカルのあるディレクトリ内のデータをごっそりS3の指定した場所にアップロードする方法

#### 環境
- Windows

#### 前準備
- ローカルにAWS Cliをインストールしておく
- https://aws.amazon.com/jp/cli/

### IAM USERを作成する
- S3へのアクセスを許可するIAMユーザーを作成
- シークレットアクセスキーをきちんと書き留めておく

```ruby:Policy
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Stmt1446117060000",
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:ListAllMyBuckets",
                "s3:ListBucket",
                "s3:PutObject"
            ],
            "Resource": [
                "arn:aws:s3:::*"
            ]
        }
    ]
}
```


### ローカルからAWSのS3にアクセスする設定を行う

```ruby:cli
$ aws configure
```

- 上記のコマンドをたたくと、アクセスキー、シークレットアクセスキー、リージョン、出力形式の順番で聞かれるので、入力とEnterを繰り返して設定を進める

### cliでローカルファイルをS3にアップロードする

```ruby:cli
$ aws s3 sync [ローカルファイルのディレクトリ] s3://[バケット名]
```

- 上記コマンドをたたくたびに同期が実行される
- 2回目以降は差分のみ取り込まれる

- バケット内のディレクトリを指定する場合↓

```ruby:cli
$ aws s3 sync [ローカルファイルのディレクトリ] s3://[バケット名]/[ディレクトリ名]
```
java.time.Clockで現在時刻を扱うUT

現在時刻を扱うUT辛くないですか？
Date and Time API([JSR-310](https://jcp.org/en/jsr/detail?id=310))のJavadoc見ていたら使えそうなクラスを見つけました！
その名も[`java.time.Clock`](https://docs.oracle.com/javase/jp/8/docs/api/java/time/Clock.html)。

ちょっとJavadoc引用。

> タイムゾーンを使用して現在の時点、日付および時間へのアクセスを提供するクロックです。
このクラスのインスタンスは、現在の時点を検索するために使用されます。現在の時点は、保存済みタイムゾーンを使用して現在の日時を検索することで解釈できます。そのためクロックは、System.currentTimeMillis()およびTimeZone.getDefault()のかわりに使用できます。
> 
> Clockの使用は任意です。すべての主要な日付/時間クラスには、デフォルト・タイムゾーンのシステム・クロックを使用するnow()ファクトリ・メソッドも用意されています。この抽象の主要目的は、代替クロックを必要なときにプラグインできるようにすることです。アプリケーションはstaticメソッドではなくオブジェクトを使用して現在時間を取得します。これによりテストを単純化できます。
> 
> アプリケーションにとってのベスト・プラクティスは、Clockを現在の時点を必要とするメソッドに渡すことです。これを実現するための1つの方法が、Dependency Injectionフレームワークです。
> 
>   public class MyBean {
>     private Clock clock;  // dependency inject
>     ...
>     public void process(LocalDate eventDate) {
>       if (eventDate.isBefore(LocalDate.now(clock)) {
>         ...
>       }
>     }
>   }
>  
> このアプローチにより、代替クロック(fixedやoffsetなど)をテストで使用できます。
> systemファクトリ・メソッドは、最良の利用可能なシステム・クロックに基づくクロックを提供します。これは、System.currentTimeMillis()またはより分解能の高いクロック(利用できる場合)を使用します。

これってようは`Clock`インスタンスをDIすることでテストを単純化できるって言っていますよね？？

ということは`Clock`インスタンスを生成さえできればどうとでもなるということで、`Clock`インスタンスの生成を試してみましょう！

Scalaで書きますよ！
Javaは`1.8.0_131`
Scalaは`2.12.2`
を使っています。

以降は`import java.time._`している前提で。

# `Clock`インスタンスの生成
一番シンプルな使い方はこの辺かな。

```scala
scala> Clock.systemDefaultZone
res0: java.time.Clock = SystemClock[Asia/Tokyo]

scala> res0.instant
res1: java.time.Instant = 2017-06-29T16:26:19.189Z

scala> Clock.systemUTC
res2: java.time.Clock = SystemClock[Z]

scala> res2.instant
res3: java.time.Instant = 2017-06-29T16:27:40.517Z
```

まぁこの辺は完全に現在時刻取得です。

次に固定化した`Clock`生成。

```scala
scala> val zoneId = ZoneId.systemDefault
zoneId: java.time.ZoneId = Asia/Tokyo

scala> val datetime = ZonedDateTime.of(2017, 6, 27, 22, 0, 0, 0, zoneId).toInstant
datetime: java.time.Instant = 2017-06-27T13:00:00Z

scala> val clock = Clock.fixed(datetime, zoneId)
clock: java.time.Clock = FixedClock[2017-06-27T13:00:00Z,Asia/Tokyo]
```

こんな感じで固定化した`Clock`が使えますね。

# 固定化した`Clock`インスタンスを使う

これは簡単。ぱっと見た感じ日付、時間、Instant系は`now(Clock clock)`メソッドを持っているので、例えばこんな感じ。

```scala
scala> val now = ZonedDateTime.now(clock)
now: java.time.ZonedDateTime = 2017-06-27T22:00+09:00[Asia/Tokyo]
```

`java.util.Date` を使っているって場合は変換すれば良い。

```scala
scala> val date = java.util.Date.from(Instant.now(clock))
date: java.util.Date = Tue Jun 27 22:00:00 JST 2017
```

これを差し込めばUTも楽勝っすね！
あ、でもMinimal Cake Patternを使えば`Clock`は一切使わずにしかもかなり簡単にいけることに書いて気づいたぞ。。。

既存のアプリケーションにいれようとするとお膳立てしないといけないから、それはそれで大変そう。それならMinimal Cake Pattern化するよね。

Minimal Cake Patternすげーって結論になってしまった。。。
面白いAPIだと思ったのに。
JAVA学習履歴　インタフェースの継承

#インタフェースの継承
インタフェースも機能をどんどん重ねて追加してくことが出来る。
それがインタフェースの継承

複数個の継承も可能で
```interface A extends B, C {```
こうしちゃえばBとCの機能を継承した新しいインタフェースも作成可能。

実地の中でexendsやらimplementsやらをしているので
インタフェースに関しては今一度おさらいを。
自宅PCでandroid sutdioが立ち上がらないのをどうにかしないとな。
GAEからCloud SQLへつなぐ方法

#目的
自分用のメモ

## STEP1
SQLでインスタンス作成

## STEP2
Database作成

## STEP3
Cloud SQL Proxyの認証、設定(超必須　これで躓いてました。
https://console.cloud.google.com/flows/enableapi?apiid=sqladmin&hl=ja

## なぜこれで繋げられるか
Cloud SQL Proxyの仕組み
https://cloud.google.com/sql/docs/sql-proxy?hl=ja
javascript　自作関数1

久しぶりの投稿

最近何故かJavascript使ってる。



Javascriptを色々いじっていて、分からなかったところや、後々使えると思ったことを記録として、たまに投稿しようと思う。

今回は、ローカルデータの読み込みについて。

まぁほとんどネットで検索して作っただけだが、、、


```html:ローカルフォルダにあるCSVデータを読み込む方法(IEのみ対応)

<script src = "https://code.jquery.com/jquery-1.9.1.js"></script>
<script>
function __init(){
	$.ajaxSetup({
		xhr: function(){
			try{
				return new ActiveXObject("Microsoft.XMLHTTP");
			}
			catch(e){
				return new XMLHttpRequest();
			}
		}
	});
}


function __object_init(csvName){
	var obj = { };
	var arr = csvName;
	for( var i = 0; i < arr.length; i++ ){
		obj[ arr[ i ] ] = 0;
	}
	return arr;
}

function __csv2arr( arr, obj ){
	var csv = arr;
	var csv_obj = obj;
	for( var k = 0; k < csv.length; k++ ){
		var arr  =[ ];
		var path = csv[k];
		$.ajax(path, {
			async: false;
			complete: function(e){
				var data = e.responseText; 
				var data_split = data.split(/\r\n |\r |\n/);//分割
				for(var i = 0; i < data_split.length; i++){
					arr[i] = data_split[i].split(",");//分割
					N_obj[csv[k]] = arr;//配列に各ファイルの内容をいれる
				}
			}
		});
	}
	return csv_obj;
}

</script>
```

使い方は、

```js:ローカルフォルダにあるCSVデータを読み込む方法(IEのみ対応)
__init();
let name = ["file1.csv","file2.csv",・・・];
let __obj_init = object_init(name);
let OBJ = __CSVtoArr(name)
```


これで配列ができる

値を取り出す操作は、

```js:ローカルフォルダにあるCSVデータを読み込む方法(IEのみ対応)
OBJ["file1"][行][列]
```

多分これで動くはず、、、かなりぐちゃぐちゃなコードになってしまった。

そもそも、サーバーを作れば解決できるような気がする。

動かない場合は、ご連絡を、、、
Unity5のPostProcessBuildでXcode Capabilityの設定する方法


XcodeのCapabilityの各種設定を`PostProcessBuild`で行う方法です。
Pushの設定などを有効にするアレです。


# ざっくり流れ

### In-App Purchaseなどentitlementsファイルが不要なcapabilityの場合

1. Unityのリポジトリから, 最新のXcode Manipulation API(以下Xcode API)を持ってくる
2. 既存のプロジェクトにインポートできるように修正する
3. 最新のAPIで`PostProcessBuild`のScriptを書く

### iCloudなどentitlementsファイルが必要なcapabilityの場合

1. 一旦先にビルドしてXcodeProjectを作成する
2. capabilityを設定し, entitlementsファイルを作成する
3. `PostProcessBuild`でentitlementsファイルとビルドプロパティを追加する
4. 以後entitlements file不要な場合に合流する

# 詳細な流れ

# entitlementsファイルのいらないcapabilityの場合

## Unityのリポジトリから, 最新のXcode APIを持ってくる

- https://bitbucket.org/Unity-Technologies/xcodeapi のリポジトリに行きます。
- ライセンスファイルを読みライセンスを理解します
- ブランチ`stable`を取得します `Revision 102` 

![Kobito.EshUcI.png](https://qiita-image-store.s3.amazonaws.com/0/45974/398ad5d6-4ee1-b98f-9d8c-43e5494797fd.png "Kobito.EshUcI.png")

- リポジトリ内のXcodeフォルダをデスクトップなど作業環境にコピーします
- ターミナルでXcodeディレクトリに移動し, 下記のコマンドでC#のソースコードのnamespaceを変更します.仮に変更後のnamespaceを`Unity2017.iOS.Xcode`とします


```Bash
$ pwd
Users/fullcorder/Desktop/Xcode
$ find . -name '*.cs' | xargs sed -i "" 's/UnityEditor.iOS.Xcode/Unity2017.iOS.Xcode/g'
```


- Xcode/Propertiesディレクトリをは不要なので削除します
- UnityプロジェクトのEditorディレクトリにXcodeフォルダごとインポートします

`PostProcessBuild`スクリプトを作成し下記のように`PBXProject#AddCapability`を使って追加します

*Unity2017.1のリファレンス*
https://docs.unity3d.com/2017.1/Documentation/ScriptReference/iOS.Xcode.PBXProject.AddCapability.html



```C#
[PostProcessBuild]
public static void AddCapability(BuildTarget buildTarget, string path)
{
    if(EditorUserBuildSettings.activeBuildTarget != BuildTarget.iOS)
    {
        return;
    }

    string projPath = path + "/Unity-iPhone.xcodeproj/project.pbxproj";

    var proj = new PBXProject();
    proj.ReadFromString(File.ReadAllText(projPath));

    string target = proj.TargetGuidByName(TargetGroup);

    proj.AddCapability(target, PBXCapabilityType.PushNotifications);
    proj.AddCapability(target, PBXCapabilityType.InAppPurchase);

    File.WriteAllText(projPath, proj.WriteToString());
}
```

- 以上ですあとはビルドすればOKです

## entitlementsファイルが必要なcapabilityの場合

entitlementsファイルが必要な場合は, entitlementsファイルを作成したものを`PostProcessBuild`で追加し、あとはentitlementsファイルが不要な場合に合流します

### entitlementsファイルを作成

- UnityでiOSビルドしてXcodeProjectを吐き出します
- Capabilityタブに行き, Pushなどをこうなりたい状態, `PostProcessBuild`後で設定後の形にします
- entitlementsファイルがXcodeプロジェクト内に作成されるので取り出してUnityProjectにインポートします
- Unityフォーラムの下記ポストから`EntitlementsPostProcess.cs`をDLしてUnityにインポートします

https://forum.unity3d.com/threads/how-to-put-ios-entitlements-file-in-a-unity-project.442277/

- `EntitlementsPostProcess.cs`の`SerializeField`であるEntitlements Fileにentitlementsファイルを設定します
- 以上でentitlementsファイル追加が完了します

以後、前述の手順と合わせてビルドすると無事, 設定反映したになっていると思います
(Plist編集は別途スクリプト書いてください)

![Kobito.fD9scK.png](https://qiita-image-store.s3.amazonaws.com/0/45974/a852fd1c-92e6-d4d3-8757-490e69acd155.png "Kobito.fD9scK.png")


# その他

Unity2017からは多分使えるAPIなので、長いプロジェクトの場合, プラットフォーム依存コンパイルでUnity5のみ限定して今回変更したnamespaceを使うようにすると良いと思います。



# 環境 
macOS Sierra
Unity 5.5.3f1
Xcode 8.3.2

参考 
https://bitbucket.org/Unity-Technologies/xcodeapi
https://forum.unity3d.com/threads/how-to-put-ios-entitlements-file-in-a-unity-project.442277/
Curl HTTP request

#curl HTTP GET with Request header

```
curl https://apivq.example.com -H 'Authorization: Bearer ACCESS_TOKEN' 
```

#curl HTTP POST

```
curl https://apivq.example.com -X POST 
```

#curl HTTP POST with JSON 

```
curl https://apivq.example.com -X POST -H 'Content-Type: application/json' -d '{"key":"value"}'
```
JAVA学習履歴　インタフェース

最近サボっていたJAVA学習を再開
やらなきゃいけないことをやっていないとそれがストレスになるみたい。
じゃあ集中しろよって話…

#インタフェース
直訳すれば境界面、接点だとからしい。
物事と物事の境界にあって、それをつないでくれるものというイメージなのかな。

プログラム的にいえば
継承関係のないクラスに機能を提供する仕組みであって、
クラスとの違いは定数と抽象メソッドしかメンバになれない事が異なる点だそう。

インタフェースもそのままじゃ使えなくて
クラス生成時に
```implements```
で機能を実装させてあげなくちゃいけない。

##定義
```interface インタフェース名 {
　　　処理の中身~~~~~
　　　※定数、メソッドしかメンバになれない
}```


##実装
```class A implements インタフェース名 {
　　　public(これつけてオーバーライド) ~~ () {
　　　}
}```

ちなみにimplementsはいくつでも実装可能。
続けて書くときは「,」をつけるのを忘れずに。