OmniAICreator/Qiita-1.07M huggingface dataset:
Jython入門


Jythonプログラミング, 西尾 泰和, 毎日コミュニケーションズ, 2008

# 導入 
##Macintosh

```shell-session
$ brew install jython
```

## Debian/Ubuntu/Raspbian

```shell-session
$ apt-get install jython
```

## 確認

```shell-session
$ jython --version
Jython 2.7.1
```

```shell-session
java --version
java 9
Java(TM) SE Runtime Environment (build 9+181)
Java HotSpot(TM) 64-Bit Server VM (build 9+181, mixed mode)
```

## Eclipse

Macintosh OS Xにbrew caskでEclipseを導入する(５つの壁+1)
https://qiita.com/kaizen_nagoya/items/b17f03db00aceee41a80

```shell-session
 brew cask install eclipse-java
```

install anyway

Restart Now
Module 'xxx' has no default export.といわれるとき

node_modulesにもxxxは追加されているのに、なんで…。となった。
以下のように書いた時にエラーが出てきたのだが

```javascript
import Xxx from 'react';
```
`* as`をつけてあげて読み込めばちゃんとモジュールは使えるようになる。

```javascript
import * as Xxx from 'react';
```
【Ruby】期間内で一定間隔ごとの時間を生成

`now` 以降の `begin_time` から `end_time` まで、 `interval` 分間隔の時間を生成するメソッド

```ruby

require 'Time'

def time_box(begin_time, end_time, interval, now)
	# インターバルを分に直す
	interval_time = interval * 60
	# 入力を時間にキャスト
	begin_datetime = Time.parse(begin_time)
	end_datetime   = Time.parse(end_time)
	now_datetime   = Time.parse(now)

	# いくつ生成するのか
	times_count = (begin_datetime - end_datetime).to_i.abs/interval_time if  begin_datetime < end_datetime
	times_count = ((begin_datetime - Time.parse('24:00')) + (Time.parse('0:00') - end_datetime) ).to_i.abs/interval_time if  begin_datetime > end_datetime
	times_count+= 1

	# begin_datetimeから interval_time分間隔で、time_count個時間を生成
	times =  times_count.times.map.each_with_index {|i| Time.parse((begin_datetime + interval_time*i).to_s)}

	# 現在時刻以降の値のみ抽出
	times = times.select{|t| t > now_datetime }

	# 時刻の表示を整形
	times.each_with_index do |val|
		if val.hour >= 7
			val.strftime("%H:%M")
		else
			"#{val.hour+24}:#{val.strftime("%M")} (翌日 #{val.strftime("%H:%M")})"
		end
	end
end



# 現在時刻
now = '23:40'

# 実行
p time_box('11:00', '12:00', 15, now)
p time_box('1:00', '2:00', 15, now)
p time_box('23:30', '0:30', 15, now)

```
FusionPCBでarduinoのシールドを発注する。

#はじめに
ArduinoのシールををFusionPCBで発注した備忘録です。
1Wireの温度計測の回路です。
Seeedで送料込み＄7.9の基板作成セールをしていたので注文
https://www.fusionpcb.jp/
#Arduinoの回路（UNO)
##気を付けておくPin
| Pin名 | 備  考 |
|:-----|:---:|
|D0,D1|シリアル通信に使われるので使用しない|
|D2,3|割り込みに使える。SWを配置するのが吉|
|D3,5,6,9,10,11|PWMが使える。LED等を配置するのが吉|
|D13|抵抗が直列に入っている|

#Eagle
##Libraryのダウンロード
https://github.com/adafruit/Adafruit-Eagle-Library
からダウンロード。
##回路図の作製
Arduinoの回路部品は
adafruit-->ARDUINOR3-->ARDUINOR3-DIMENSION
を使用した。
ERCでVINとV3のエラーが出るが繋がっていないのでクリア
![IM1.png](https://qiita-image-store.s3.amazonaws.com/0/97061/a40f0c68-be79-5a2b-eaef-3f331f6364fe.png)

##ボード図の作成
Arduinoの原点を合わせる。
元々の枠を削除する。(4辺をひとつずつ削除)
回路を作成する。
文字は21tplaceに書く
DRCはスイッチサイエンスのを利用した。
https://www.switch-science.com/pcborder/techguide/#design_rule
(今回は裏面すべてベタなので）配線をGNDにしてPolygonでGNDを描いて、Ratsnest
![IM2.png](https://qiita-image-store.s3.amazonaws.com/0/97061/db6618bd-2460-6715-c1fe-3024048f4590.png)

##Gaberデータの出力
スイッチサイエンスのサイトを参考に
http://trac.switch-science.com/wiki/ssciPCB-gerber
ガーバーデータのファイルはFusionPCBからダウンロード
http://support.seeedstudio.com/knowledgebase/articles/1187746-eagle%E3%81%8B%E3%82%89%E3%82%AC%E3%83%BC%E3%83%90%E3%83%BC%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E5%87%BA%E5%8A%9B%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95
http://www.seeedstudio.com/document/rar/Seeed_Gerber_Generater_2-layer.zip

上記サイトを参考にファイルを集めて圧縮する。

##Seeedに発注
白色で発注してみた。
最後メッセージが出なかった(輪が回って待ちの状態）だけど、他のブラウザで見たら発注完了になっていたので、そーーと閉じた。（IEは使わない方が良いの?)
￥８７８円でした。

##到着
届きました。
![IMG_4512.jpg](https://qiita-image-store.s3.amazonaws.com/0/97061/7f42b409-c41a-6dfa-68d1-349e5d031ed4.jpeg)
途中のステータスは、以下のようになっていました。注文から約２０日かかりました。(うち製造完了までが8日)
<img width="466" alt="スクリーンショット 2018-05-06 13.25.47.png" src="https://qiita-image-store.s3.amazonaws.com/0/97061/a707d698-4120-4d31-ac89-e07c6c28861d.png">

##追記
~~このセールは終了したみたいです。~~
~~今後の注文は、直接注文しても送料が結構するので、10cmx10cm 10枚ならスイッチサイエンス経由かなあ。~~
日本のサイトから、注文できるようです。https://fusionpcb.jp/
Androidで画像にリップル表現を実装する

#やりたいこと
Androidで画像にリップル表現を実装する

#考え方
リップル表現を適用したいImageViewをFragmentLayoutで囲む
FragmentLayoutにforeground属性を指定し、タップしたときにFragmentLayoutをタップできるようにする
foreground属性でリップル表現を適用する範囲と色を指定する
foreground属性は別途作成したxmlを参照させる
foreground属性を指定することによって、FrameLayoutが一番上のLayerになるので、タップイベントはFragmentLayoutが拾うことになる

#実装
アプリのメインとなる画面のXML

```xml:activity_main.xml
    <FrameLayout
        android:id="@+id/image_view"
        android:layout_width="150dp" // ポイント１：FragmentLayoutとImageViewのサイズは同じにする
        android:layout_height="50dp"
        android:padding="0dp" // ポイント２：リップル領域とImageViewがぴったり重なるようにpaddingは0dpとする
        android:foreground="@drawable/btn_ripple"> // ポイント５：foregroundは「リップル領域」と「リップル時の色」を定義している別のxmlファイルのファイル名を参照させる

        <ImageView
            android:id="@+id/image_view2"
            android:scaleType="fitXY" // ポイント３：FragmentLayoutとImageViewのサイズが同じになるように縦横比は可変とする
            android:layout_width="150dp"
            android:layout_height="50dp"
            android:layout_margin="0dp" // ポイント４：リップル領域とImageViewがぴったり重なるようにmarginは0dpとする
            android:src="@drawable/long_circle" />
    </FrameLayout>

```

```xml:btn_ripple.xml
// ポイント１：ファイル名は上記foreground属性で指定したものにする
<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
    android:color="@color/colorRipple2"> // ポイント２：リップル時の色を指定する
    <item
        android:id="@android:id/mask" // ポイント３：ここは常に「mask」とする。たとえ他に「id/mask」を指定している箇所があったとしても。
        android:drawable="@drawable/long_circle" /> // ポイント４：リップル領域を指定する。（リップルさせたいImageView自体を参照するだけでOK
</ripple>
```
riot.js frame template

## 1. 右サイドバー。上下左右可変
https://codepen.io/gnjo/pen/qozYNo

```html
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/normalize/3.0.3/normalize.css">
<link rel="stylesheet" href="//gnjo.github.io/use.css">
<link rel="stylesheet" href="//gnjo.github.io/split2.css">
<script src="//gnjo.github.io/split.min.js"></script>
<script src="//gnjo.github.io/riot.js"></script>
<system>
 <wallpaper></wallpaper>
 <div class="rtb split parent">
  <div class="l split split-horizontal">
   <div class="t"><top></top></div>
   <div class="b"><bottom></bottom></div>          
  </div>
  <div class="r split split-horizontal"><side></side></div>
 </div>
 <script>
  Split(['.rtb .l', '.rtb .r'], {minSize:0,sizes: [75, 25],gutterSize: 8,cursor: 'col-resize'});
  Split(['.rtb .t', '.rtb .b'], {minSize:0,sizes: [15, 85],direction: 'vertical',gutterSize: 8,cursor: 'row-resize'})
 </script>
</system>
```

## 2. riot.tagでそれぞれweb component的に入れる。
```
system,wallpaper,top,bottom,side
```
##
N4606 Working Draft 2016, ISO/IEC 14882, C++ standard(36)5.1.4 Names [expr.prim.id] p95

# はじめに
N4606 Working Draft, Standard for Programming Language C++
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/#mailing2016-11
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/n4606.pdf

n4606は、ISO/IEC JTC1 SC22 WG21の作業原案(Working Draft)です。
公式のISO/IEC 14882原本ではありません。
ISO/IEC JTC1 SC22 WG21では、可能な限り作業文書を公開し、幅広い意見を求めています。
一連の記事はコード断片をコンパイルできる形にする方法を検討してコンパイル、リンク、実行して、規格案の原文と処理系(g++, Clang++)との違いを確認し、技術内容を検討し、ISO/IEC JTC1 SC22 WG21にフィードバックするために用います。
また、CERT C++, MISRA C++等のコーディング標準のコード断片をコンパイルする際の参考にさせていただこうと考えています。CERT C++, MISRA C++が標準化の動きとの時間的な擦れの確認が結果としてできれば幸いです。

## list
N4606 Working Draft 2016, ISO/IEC 14882, C++ standard(1) coding list
https://qiita.com/kaizen_nagoya/items/df5d62c35bd6ed1c3d43/

## Compiler
###clang++ --version
clang version 6.0.0 (tags/RELEASE_600/final)

###g++-7 --version
g++-7 (Homebrew GCC 7.3.0_1) 7.3.0
Copyright (C) 2017 Free Software Foundation, Inc.

#(36)5.1.4 Names [expr.prim.id]
p95

```c++:p95.cpp
// N4606 Committee Draft, Standard for Programming Language C++
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/n4606.pdf 
#define msg "p95.cpp (36)5.1.4 Names [expr.prim.id]"

#include <iostream>

struct S {
int m;
};
int i = sizeof(S::m); // OK
int j = sizeof(S::m + 42); // OK


int main(int argc, char *argv[], char *envp[]){
  std::cout<< " i="<<i<<" j="<<j<<std::endl;
  std::cout << msg << std::endl;
  return EXIT_SUCCESS;
}
```

```shell_session
$ ./cppgl17.sh p95
$ clang++ p95.cpp
 i=4 j=4
p95.cpp (36)5.1.4 Names [expr.prim.id]

$ g++-7 p95.cpp
 i=4 j=4
p95.cpp (36)5.1.4 Names [expr.prim.id]
```

#検討事項
未定

# 参考資料
コンパイル用shell script C版(clangとgcc)とC++版(clang++とg++)
https://qiita.com/kaizen_nagoya/items/74220c0577a512c2d7da
Qiitaに投稿するCのStyle例(暫定)
https://qiita.com/kaizen_nagoya/items/946df1528a6a1ef2bc0d
プログラマが知っていると良い「公序良俗」
https://qiita.com/kaizen_nagoya/items/9fe7c0dfac2fbd77a945
# 文書履歴
0.10 初稿 2080415
### 最後までおよみいただきありがとうございました。
いいね　💚、フォローをお願いします。
####  Thank you very much for reading to the last sentence.
Please press the like icon 💚　and follow me for your happy life.
font-sizeに応じて大きさの変わるコンポーネントを作る話

# 概要

昨今のフロントエンド開発では、コンポーネントを作成し組み立てていくことが多い。
その中で、汎用コンポーネントの内部の位置調整を `px` で指定してしまうと、別の場所で別のフォントサイズで使いたくなったときに見た目にずれが生じてしまう。
その対策方法。

# 方針

ただ `em` を使う。

# 解説

```html:SampleComponent.html
<div class="sample">
    <p class="sample__text">猫</p>
    <svg
        xmlns="http://www.w3.org/2000/svg"
        class="sample__icon"
        viewBox="0 0 15 15"
    >
        <!-- 略 -->
    </svg>
</div>
```

```scss:SampleComponent.scss
@function toEm($value) {
    // font-size: 14px; を基準に px を em に変換する
    @return $value / 14 * 1em;
}

.sample {
    display: inline-flex;
    align-items: center;
    padding: toEm(8);

    &__text {
        margin-right: toEm(4);
        font-weight: bold;
    }

    &__icon {
        width: toEm(15);
        height: toEm(15);
    }
}
</style>
```

こんな感じ。

これでこのコンポーネントのフォントサイズが変わると、コンポーネント内部の文字列だけでなく、アイコンサイズ、 `padding` や `margin` も同じ比率で増減する。
WSLを利用してWindowsでC＋＋のJupyterカーネル(xeus-cling)を動かす

WSL(Windows System for Linux)を利用してC++用Jupyterカーネルであるxeus-clingをWindows10搭載マシンで動かしてみた際のメモです。(2018/4/15実行)

OSはWindows10 Pro バージョン 1709
WSLのディストリビューションはDebianを採用しました。

#WSLのインストール
まずはWSLをインストールします。
WSLのインストール手順については以下などを参照してください。
https://qiita.com/Brutus/items/f26af71d3cc6f50d1640
(2018/1/25 更新)
http://qiita.com/Aruneko/items/c79810b0b015bebf30bb　
(2017/11/2 更新)


#Jupyterの準備
Jupyterを使うために、WSL上にpyenvとAnacondaをインストールします。
以下はhttps://qiita.com/yaju/items/1130c56abe64ec9d9827　　　
(2018/1/13 更新)
及び、https://qiita.com/dd511805/items/23891da61559405fd5f6　
(2017/1/27 更新)
より抜粋しました。

###pyenvのインストール
```
$ sudo apt-get install aptitude
$ sudo aptitude install git
$ git clone https://github.com/yyuu/pyenv ~/.pyenv
$ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
$ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
$ echo 'eval "$(pyenv init -)"' >> ~/.bashrc
$ source ~/.bashrc
```

###Anacondaのバージョン確認
```
$ pyenv install --list
```
して、表示される中からAnaconda3の最新バージョンを確認してください。
(本記事作成時点ではAnaconda3-5.1.0が最新でした)

###Anacondaのインストール
バージョンは適宜変更してください

```
$ pyenv install anaconda3-5.1.0
$ pyenv global anaconda3-5.1.0
$ pyenv rehash
```
(筆者の環境では、ここで30分以上かかりました)

###Jupyterの実行
Anacondaが正常にインストールされていればJupyter notebookが実行できるはずなので、
ここで一度試してみましょう。

```
$ jupyter notebook
```
を実行すると以下が表示されます。

```
Copy/paste this URL into your browser when you connect for the first time,
    to login with a token:
        http://localhost:8888/?token=8ff994a9c058ccd4509216f1f37ed3760a0f9d1a49bc9de7
```
表示されている長いクエリ付きURLをお使いのブラウザに入力してください。

#xeus-clingのインストール
Jupyterが無事実行できれば、次にxeus-clingをインストールします。
QuantStack/xeus-cling: https://github.com/QuantStack/xeus-cling

上記のページのInstallationと同様の手順でインストールすることができます。
WSLを起動して

```
$ conda create -n cling
$ source activate cling
$ conda install xeus-cling notebook -c QuantStack -c conda-forge
```
を実行すればOKです。
(筆者はここでも30分以上かかりました)

#Hello World
最後に実際にテストプログラムを動かしてみます。
まずJupyterを起動します。
すると、以下のようにC++11、C++14、C++17のオプションが増えているはずです。
とりあえずここではC++17で新しいNotebookを作成します。

<img width="878" alt="じゅｐｙ.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/250486/84304ae2-1dcc-ff21-f4fd-0951b267d775.jpeg">

テストとして、以下のプログラムをセルに入力します。

```
#include <iostream>

std::cout << "Hello World" << std::endl;
```
実行結果が以下のようになっていれば無事導入できているはずです。

<img width="870" alt="hello world.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/250486/bceed02e-f2c7-0ec0-9427-3c5f59cef13f.jpeg">

以上です。
問題、修正すべき点があればお知らせください。
C++ の小さな技術を紹介するシリーズ【小技C++ 全９回】＃１＜インデックスループ＞

#インデックスループ
##テーマ

ここに０から３までの数字を振った４つの箱と、箱を指定するためのカーソルが１つある。
カーソルは値を持ち、その値と同じ番号の箱を指定する。

```
[0]  [1]  [2]  [3]
 ^
 |
 0
```

カーソルが右へ移動するとき、０から３までの箱を順番に指定したのち、再び０へ戻りループするためには、カーソルの値をどのように計算すればよいだろうか。また、カーソルが左へ移動するときはどのように計算すればよいだろうか。

##メソッド

（このシリーズで記述するコードは、あくまで筆者のオススメする案です。よりよい方法や、場面にあった手法を見つけるヒントとして使ってください。そして、楽しんでください！）

```cpp
// 移動方向の定義

enum class OPERATION
{
    LEFT,
    RIGHT,
};
```

```cpp
// op            : 移動方向
// index         : カーソルの値
// LOOP_WIDTH    : ループ幅

void UpdateIndex( const OPERATION op, size_t& index, const size_t LOOP_WIDTH );
```
### **if 文で境界をチェックする**

```cpp

void UpdateIndex( const OPERATION op, size_t& index, const size_t LOOP_WIDTH )
{
    if( op == OPERATION::LEFT ) {
    
        if( index > 0 ) {
        
            index--;            
        }
        else {
        
            index = LOOP_WIDTH - 1;
        }
    }
    else if ( op == OPERATION::RIGHT ) {
    
        if( index < LOOP_WIDTH - 1 ) {
        
            index++;
        }
        else {
        
            index = 0;
        }
    }
    else {
    }
}
```

C++ 初経験者が最初に思いつきやすい（プロの書くコードでもたまに見かける）コードだろう。条件式が多用され、自然言語をそのまま書き起こしたような構造になっているため、説明しやすい。しかし、実現したい計算のわりに、そのコード長が無視できないほどの長さであることは、無駄な保守コストやバグの原因となりやすい傾向にある。

### **剰余を使って計算する**

```cpp

void UpdateIndex( const OPERATION op, size_t& index, const size_t LOOP_WIDTH )
{
    switch( op )
    {
    case OPERATION::LEFT:
        index = ( index + LOOP_WIDTH - 1 ) % LOOP_WIDTH;
        break;
    case OPERATION::RIGHT:
        index = ( index + LOOP_WIDTH + 1 ) % LOOP_WIDTH;
        break;
    default:
        break;
    }
}
```

こちらのコードは、条件式による境界チェックを一切行わない。インクリメントされる値の剰余を求めることで、ループする数列を表現する。注意したいのは、剰余を求める前にループ幅と同じだけの「ゲタ」を履かせるところだ。左へ移動する場合に index が０のとき、１減算しても問題のないようにしてくれている。右へ移動する場合に 「ゲタ」は本来必要ないのだが、字面を近くすることで、２つの計算式が同じ性質であることを強調している。ただし、一見何をやっているのか理解されない可能性もあるため、慣れない相手にはフォローが必要になるかもしれない。
時系列データセットの話

##前書き
ひょんなことで、昨年度より機械学習の勉強を行っております。
題材としては機械学習を使って時系列解析を行なっていました。
”俺が考えた最強のネットワーク”を作ったりするのですが、如何せんデータもろくにない中で何かしら上手くいってます感を出すために色々四苦八苦しました。
仕方ないのでネットでオープンデータを探しておりますと、非常にまとまったサイトがありましたので紹介したく。

##データセット
時系列解析で非常に著名な方が作成しているサイトのようです。
（すみません、私はこう言った情報に疎く存じ上げませんでした汗）

[UEA & UCR Time Series Classification Repository](http://timeseriesclassification.com/index.php)

リンク先のDatasetsタブより各データセットの詳細を見ることができます。
クラス毎の傾向を図示してくれているので、ぼんやりと似ているデータを集めやすかったりしました。

##使った所感
* 1系列のデータである
    * センサ1,2,3,・・・のデータをまとめて入力するような状況では工夫が必要
        * 温度と湿度の推移から明日の天気を予測するんだ！っというような状況では注意が必要です
* ベストアルゴリズムを示してくれている
    * 各データセットの下の方に良い精度を出力しているアルゴリズムを書いてくれている
    * アルゴリズム開発のヒントになったり何かと嬉しいです
* 取捨選択は必要
    * データが多種多様なので、本来の問題に見合ったデータを探す必要があります
        * 例えば機械振動のようなデータはなかったと思います（見逃していたらすみません汗）
        * 実データばかりではありません
    * 学習データが少ない場合あり
    * 総じてデータ特性・素性などの分析は必要（当たり前の話なのでしょうけども汗）

##おわりに
評価データがなく困っている方などの助けになれば幸いです。
本データセットを使った機械学習の論文等もあり個人的には非常にためになりました。

お目汚し失礼いたしました。
【windows】AVX2を有効にしてTensorflowをビルドする(GPUなし)

# 概要
タイトルの通りです。

widnows環境でcmakeの方でtensorflowをビルドします。
その時にいろいろと小技が必要だったので、その内容を備忘録的に書いておきます。

# 注意点
- 公式バイナリでもSSEやAVXが有効になっているはずなので、自分でビルドする必要はないと思います。(どのレベルが有効になっているかは確認できていません。)
- ビルドにとても時間がかかります。
  - i5(4 core)のCPUで24時間以上かかります。
  - ビルドに失敗するとほとんどのビルドがやり直しになるので、とても時間がかかります。

# 方法
1. cmakeでVisual Studioのプロジェクトを生成します。　
  - CMAKE_CXX_FLAGSに/arch:AVX2を追加しください。
  - あとは通常通りです。
2. Visual Studioを使って、リンクするライブラリのパス修正します。
  - tensorflow.slnを開きます。
  - 名前が_から始まるプロジェクトのリンクするライブラリのパスが間違っているので修正します。
  - \pywrap_tensorflow_internal.libをRelease\pywrap_tensorflow_internal.libに修正
  - Visual Studioはメモリ節約のために終了します。
3. スタートメニューからx64 Native Tools Command Promptを開きます。
4. 生成したプロジェクトがあるディレクトリに移動し、以下のコマンドを実行します。
  - msbuild tf_python_build_pip_package.vcxproj /p:PreferredToolArchitecture=x64   /p:configuration=release /p:platform=x64
  - Visual Studioの方でビルドするとピープ不足で失敗します。
  - 32bitコンパイラが使われるせいだそうです。
  - このコマンドでは64bitコンパイラが使われるようにします。
5. あとはひたすら待ちます。
6. distというディレクトリにwhlが生成されるはずなので、インストールします。
  - 私の環境では、最後のwhlを作る工程でエラーになりました。
    - ファイルのコピーができなかったみたいですが、良く分かりません。
    - やり直すのは大変なので、コマンドプロンプトに表示されている内容を手動で実行しました。
    - それでも生成されたwhlが変なようで、インストールしてもファイルが不足しているので、tf_python内にあるそれらしいファイルを手動でインストール先にコピーしました。

# メモ
方法6.で、インストール先に手動でファイルをコピーしていますが、予めpipで公式バイナリをインストールしてから_pywrap_tensorflow_internal.pydを自分でビルドしたものに変更すればいいと思います。

## 参考
[VC 2017のIDE上から64bitのcl.exeを使う](https://ameblo.jp/michirushiina/entry-12277257163.html)
[チュートリアル: MSBuild を使用した Visual C++ プロジェクトの作成](https://msdn.microsoft.com/ja-jp/library/dd293607.aspx)
WordpressのDBについて

#はじめに
Wordpressにユーザが入力したデータを
別システムで呼んできて表示する時用の共有です

#Wordpressのテーブルって11個しかないから驚かないでね

###wp_commentmeta	
各コメントにはメタデータと呼ばれる情報があり、wp_commentmetaに格納されている。	
###wp_comments
WordPress へのコメント・トラックバック・ピンバックデータを格納	
###wp_links
リンク作成で入力されたリンク情報を格納。(この機能は非推奨になりましたが、Links Maager プラグインで有効化できます)	
###wp_options
管理 > 設定で設定されたオプション設定情報を格納（オプション設定リファレンス参照）。プラグインの設定情報が格納されることも多い。
###wp_postmeta
メタデータという各投稿記事特有の情報を格納。カスタムフィールドとして使用するほか、各投稿に情報や設定を付加するようなプラグインが、その情報を当テーブルに追加することがある。	
###wp_posts
WordPress データの核である投稿記事のほか、ページ、ナビゲーションメニューのデータを格納	
###wp_terms
投稿およびリンクの分類（カテゴリ・タグ）に使われる語句の基本情報を格納	
###wp_term_relationships
オブジェクト（wp_posts テーブルの各投稿記事、wp_links テーブル内の各リンク）と wp_term_taxonomy の（少なくとも 1）カテゴリ・タグとの関連付け情報を格納
###wp_term_taxonomy
投稿およびリンクの分類上の語句（カテゴリ・タグ）データを格納
###wp_usermeta
各ユーザ特有のユーザ・メタデータを格納	
###wp_users
登録ユーザ情報を格納	

#引用先はこちら
データベース構造
https://wpdocs.osdn.jp/%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9%E6%A7%8B%E9%80%A0
KUSANAGI on ConoHaにPython3を入れる！

以前、以下のようなエントリーを書きつつ、ConoHaにKUSANAGIを利用して、WordPressのサイトを構築

 - [数年ぶり(多分、6, 7年くらいぶり)にブログサイトを構築しようと思い、KUSANAGI on ConoHa にチャレンジしているところのリンク集と考慮点のまとめ - Qiita](https://qiita.com/yamazaki/items/d40774529b206075fab9)
 - [KUSANAGI on ConoHa セットアップ #1 サーバー設定編 - Qiita](https://qiita.com/yamazaki/items/190f4bac2d4c5e504d10)
 - [KUSANAGI on ConoHa セットアップ #2 KUSANAGI&WordPress設定編 - Qiita](https://qiita.com/yamazaki/items/5483ec464ab726bc7ab1)

特に、KUSANAGIと連動しているとか、そういう内容ではないので悪しからず。
とりあえず、Python3を入れるというだけの内容。

# 参考サイト／ページ

仮想通貨売買のボットを設置したくて、参考にしているソースがPython3なので、このサーバーにPython3をインストールしたく、以下のあたりで軽く情報収集して、これから作業

 - [ConoHaのVPSにPython3環境を作る | Hornet](https://hombre-nuevo.com/vps/vps0015/)
 - [conohaVPSでDjango開発環境を構築する - KATOエンジニヤリング開発日誌](http://www.kato-eng.info/entry/vibakari1)
 - [CentOS7 に最新パッケージを導入出来るよう、IUS リポジトリを追加する - らくがきちょう](http://sig9.hatenablog.com/entry/2017/12/03/000000)

# Pytnon3のインストール

## yumのIUSレポジトリの追加

IUSってなんだ？って感じですが、公式サイトには、以下のように書かれていて、要は、エンタープライズ向けに最新のrpmパッケージを配布しているリポジトリということらしい。

> [IUS](https://ius.io/)
> IUS is a community project that provides RPM packages for newer versions of select software for Enterprise Linux distributions.

IUSのインストールはyumコマンドで楽々。

```bash
yum -y install https://centos7.iuscommunity.org/ius-release.rpm
```

常に、IUSを有効にしていると、何でもかんでも最新になってしまって不具合が起きる可能性があるので、通常な使わないようにするため、設定を以下のようにしておく。

```/etc/yum.repos.d/ius.repo
[ius]
name=IUS Community Packages for Enterprise Linux 7 - $basearch
#baseurl=https://dl.iuscommunity.org/pub/ius/stable/CentOS/7/$basearch
mirrorlist=https://mirrors.iuscommunity.org/mirrorlist?repo=ius-centos7&arch=$basearch&protocol=http
failovermethod=priority
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/IUS-COMMUNITY-GPG-KEY
```

iusのブロックの`enabled`が`enabled=1`になっているので`enabled=0`に変更しておく。

python3でもマイナーバージョンがいくつかあるようなので最新が何かを確認。

```bash
yum --enablerepo=ius search python3
```

34-36まであったので、36で良さそうだけど`python36.x86_64`と`python36u.x86_64`で、`u`が付いている36とそうでないのがある... この違いは？

う...ん... 軽く調べたけれど、`u`のあるなしがよくわからない...

 - [さくらVPS(CentOS7)　yumでPythonをインストール - naritoブログ](https://torina.top/detail/359/)
  - Pythonは標準で、仮想環境が作れるの？今度詳しく調べよっ
 - [【Python】【CentOS7】Python 3.6.2 を「yum からインストールする手順」と「ソースからインストールする手順」 | 100%レンタルサーバーを使いこなすサイト](https://go-journey.club/archives/4426#yum_Python-2)
 - [CentOS6.7 に Python3系, pip3, virtualenv, Flask をインストールする - まえちゃんろぐ](https://blog.seiyamaeda.com/11501)

検索すると、どこも全て`36u`でインストールしているので、そちらが正しいのでしょう。理由はわからないけれど、とりあえず、それでインストール。

```bash
yum --enablerepo=ius install -y python36u python36u-libs python36u-devel python36u-pip python36u-setuptools python36u-tools
```

コマンドを叩きやすいようにシンボリックリンクを設定しておく。

```
ln -s /bin/python3.6 python3
ln -s /bin/pyvenv-3.6 pyvenv
```
N4606 Working Draft 2016, ISO/IEC 14882, C++ standard(34)5 Expressions [expr] p92

# はじめに
N4606 Working Draft, Standard for Programming Language C++
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/#mailing2016-11
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/n4606.pdf

n4606は、ISO/IEC JTC1 SC22 WG21の作業原案(Working Draft)です。
公式のISO/IEC 14882原本ではありません。
ISO/IEC JTC1 SC22 WG21では、可能な限り作業文書を公開し、幅広い意見を求めています。
一連の記事はコード断片をコンパイルできる形にする方法を検討してコンパイル、リンク、実行して、規格案の原文と処理系(g++, Clang++)との違いを確認し、技術内容を検討し、ISO/IEC JTC1 SC22 WG21にフィードバックするために用います。
また、CERT C++, MISRA C++等のコーディング標準のコード断片をコンパイルする際の参考にさせていただこうと考えています。CERT C++, MISRA C++が標準化の動きとの時間的な擦れの確認が結果としてできれば幸いです。

## list
N4606 Working Draft 2016, ISO/IEC 14882, C++ standard(1) coding list
https://qiita.com/kaizen_nagoya/items/df5d62c35bd6ed1c3d43/


## Compiler
###clang++ --version
clang version 6.0.0 (tags/RELEASE_600/final)

###g++-7 --version
g++-7 (Homebrew GCC 7.3.0_1) 7.3.0
Copyright (C) 2017 Free Software Foundation, Inc.

# (34)5 Expressions [expr]
p92

```c++:p92.cpp
// N4606 Committee Draft, Standard for Programming Language C++
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/n4606.pdf 
#define msg "p92.cpp (34)5 Expressions [expr]"

#include <iostream>

struct A {
  int m;
};
A&& operator+(A, A);
A&& f();
A a;
A&& ar = static_cast<A&&>(a);

typedef void *p;
typedef const int *q;
typedef int **pi;
typedef const int **pci;

int main(int argc, char *argv[], char *envp[]){
　p p1=argv;
  int i=3;
  q q1 = &i;
↓↓↓↓↓↓↓ あなたの記事の内容
  pi pi1 = const_cast<int **>(&q1);
  pci pci1 = &pi1;
───────
  pi pi1 = &q1;
  pci pci1 = &q1;
↑↑↑↑↑↑↑ 編集リクエストの内容
  std::cout << "p1="<<p1 <<" q1=" << q1 << " pi1="<<pi1<<" pci1="<<pci1<<std::endl;
  std::cout << msg << std::endl;
  return EXIT_SUCCESS;
}
```

```shell_session
$ ./cppgl17.sh p92
$ clang++ p92.cpp
p92.cpp:24:6: error: cannot initialize a variable of type 'pi' (aka 'int **') with an rvalue of type 'q *' (aka 'const int **')
  pi pi1 = &q1;
     ^     ~~~
1 error generated.

$ g++-7 p92.cpp
p92.cpp: In function 'int main(int, char**, char**)':
p92.cpp:24:12: error: invalid conversion from 'const int**' to 'pi {aka int**}' [-fpermissive]
   pi pi1 = &q1;
            ^~~
p92.cpp:25:15: error: cannot convert 'int***' to 'pci {aka const int**}' in initialization
   pci pci1 = &pi1;
               ^~~
```

# 検討事項
　コンパイルエラーにならない修正。
　内容の出力。
　g++とclang++のエラーの違いの説明。

# 参考資料
コンパイル用shell script C版(clangとgcc)とC++版(clang++とg++)
https://qiita.com/kaizen_nagoya/items/74220c0577a512c2d7da
Qiitaに投稿するCのStyle例(暫定)
https://qiita.com/kaizen_nagoya/items/946df1528a6a1ef2bc0d
# 文書履歴

0.10 初稿 2080415
0.11 編集リクエスト from @nishiyama_d 
　
```
- pi pi1 = &q1;
+ pi pi1 = const_cast<int **>(&q1);
```
3枚の画像を独立させてドラッグする

3枚の画像をそれぞれ独立させてドラッグできるアプリを作りたいのですがうまく行きません。
色々試しているのですが、image3の画像しか表示されずその原因がわからないです。
swiftもまだ始めたばかりでトンチンカンなところも多く見えるでしょうが何かヒントになることを教えてもらえたら幸いです。


import UIKit

class ViewController: UIViewController {
    
    @IBOutlet weak var image1: UIImageView!
    @IBOutlet weak var image2: UIImageView!
    @IBOutlet weak var image3: UIImageView!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        image1.image = UIImage(named:"aaa.JPG");
        image2.image = UIImage(named:"eee.JPG");
        image3.image = UIImage(named:"ooo.JPG");
       
        // Do any additional setup after loadfing the view, typically from a nib.
        let screenWidth:CGFloat = view.frame.size.width
        let screenHeight:CGFloat = view.frame.size.height
        // 画像のフレームを設定
        image1.frame = CGRect(x:0, y:0, width:214, height:128)
        image2.frame = CGRect(x:0, y:0, width:214, height:128)
        image3.frame = CGRect(x:0, y:0, width:214, height:128)
        image1.isUserInteractionEnabled = true
        
        self.view.addSubview(image1)
        image2.isUserInteractionEnabled = true
        
        self.view.addSubview(image2)
        image3.isUserInteractionEnabled = true
        
        self.view.addSubview(image3)
        image1.center = CGPoint(x:screenWidth/80, y:screenHeight/41)
        image2.center = CGPoint(x:screenWidth/80, y:screenHeight/193)
        image3.center = CGPoint(x:screenWidth/80, y:screenHeight/338)
    }
        
    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        print("touchesBegan")
        
    }
    
    //　ドラッグ時に呼ばれる
    override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
        // タッチイベントを取得
        let touchEvent = touches.first!
        
        // ドラッグ前の座標, Swift 1.2 から
        let preDx = touchEvent.previousLocation(in: self.view).x
        let preDy = touchEvent.previousLocation(in: self.view).y
        
        // ドラッグ後の座標
        let newDx = touchEvent.location(in: self.view).x
        let newDy = touchEvent.location(in: self.view).y
        
        // ドラッグしたx座標の移動距離
        let dx = newDx - preDx
        print("x:\(dx)")
        
        // ドラッグしたy座標の移動距離
        let dy = newDy - preDy
        print("y:\(dy)")
        
        // 画像のフレーム
        var viewFrame: CGRect = image1.frame
        var _: CGRect = image2.frame
        var _: CGRect = image3.frame
        
        viewFrame.origin.x += dx
        viewFrame.origin.y += dy
        
        image1.frame = viewFrame
        
        self.view.addSubview(image1)
        
        image2.frame = viewFrame
        
        self.view.addSubview(image2)
        
        image3.frame = viewFrame
        
        self.view.addSubview(image3)
        
    }
        
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
}
自動生成のエラー？

ロブさんのエンドレスランナーのチュートリアルやってた道中
UnrealEngine4(以下、UE4)で遭遇したエラー
エラーというより、何かのミスだと思うけど

![スクリーンショット_2018-04-15_13-46-21.png](https://qiita-image-store.s3.amazonaws.com/0/244620/a0d161ab-af57-0502-0309-154fb6340fdb.png)
![スクリーンショット_2018-04-15_15-55-48.png](https://qiita-image-store.s3.amazonaws.com/0/244620/68b08e94-17ae-6143-6b37-a6fe8181c5d3.png)

自分は2枚目のように板を繋げて広げたいのに、1枚目では次の板が大きくなってる。
原因はBluePrint(以下、BP)で自動生成する部分じゃなくて、パネルそのものが置いてあるBPにあった。
![スクリーンショット_2018-04-15_16-04-47.png](https://qiita-image-store.s3.amazonaws.com/0/244620/a6d81a6d-2abc-7bbd-478b-9b6d8daa1f46.png)
原因はこいつ、アローが10倍のサイズになってたせいで『次の設置は10倍ね』みたな感じになってたらしい



と、ここまでがよくわかる間違い
問題は原因を解決したと思って、シミュレーションを動かすんだけどサイズが変わらない。
そのせいでアローのサイズを変えてもおっかしいな〜
と思いながら設定弄ったりしてた。
間違えて、UE4を落として、再起動したら戻ってる。
ん？と思って、アローのサイズを10倍にしてシミュレーションすると、同じ現象を確認した後にサイズを戻してみる。
戻っとらんやんけ！！
![スクリーンショット_2018-04-15_13-46-21.png](https://qiita-image-store.s3.amazonaws.com/0/244620/a0d161ab-af57-0502-0309-154fb6340fdb.png)

というオチでした。
原因を解決した、と思っても変化なかったら再起動という手もアリ、かもしれないです。
予想としてはキャッシュか何かが残ってて、それも表示されてるんじゃないかな、と思ってたりする。
Haskellのassertで条件式をエラーメッセージに含める

## モチベーション

`Control.Exception.assert`で、以下のように実行すると、ちゃんと失敗します。

```hs
let a = "hello"
assert (length a == 999) 123
*** Exception: <interactive>:9:1-6: Assertion failed
```

Haskell以外の言語の中には、条件式`length a == 999`をランタイムエラーのメッセージに含めてくれるで、Haskellにそれ相当のものを探してみました、見当たりませんでした。

他の方も同じことを考えて、探されたようですが、見つからなかったということです。

> プログラミング言語によっては、 assert 対象の式を文字列化してエラーメッセージに加えてくれるものがありますが、 Haskell の assert 関数は、関数である以上、そういう特殊なことはできません。（Template Haskell を使えば可能かもしれませんが、そういうライブラリーは軽くググった感じでは見当たりませんでした）

(引用：　[Haskell でのデバッグ手法あれこれ | 雑記帳](https://blog.miz-ar.info/2018/01/debugging-haskell-program/))

なので、見つかるまでの間に使うために、TemplateHaskellを使って**条件式をエラーメッセージに出力するassertを作ります**。

## 見た目

以下がユーザーからの見た目です。

```hs
  let a = "hello"
  let b = 10
  let !x = [assert|a == "hello" && b > 9999999|]
```

言語拡張`QuasiQuotes`を有効にして使うようにしました。

エラーは、以下のようになり、条件式がちゃんと表示されるようになってます。

```
ExampleMain.hs: Assertion failed: 'a == "hello" && b > 9999999'
CallStack (from HasCallStack):
  error, called at examples/ExampleMain.hs:9:20 in main:Main
```

## コード

```hs
{-# LANGUAGE TemplateHaskell #-}

module Assertion where

import qualified Language.Haskell.TH as TH
import qualified Language.Haskell.TH.Quote as TH.Quote
import qualified Language.Haskell.Meta as Haskell.Meta

-- | Assert
assert :: TH.Quote.QuasiQuoter
assert = TH.Quote.QuasiQuoter
         { TH.Quote.quoteExp = \condStr -> do
             let Right condExp = Haskell.Meta.parseExp condStr
             [|if $(return condExp)
                then ()
                else error ("Assertion failed: '" ++ condStr ++ "'")|]
         , TH.Quote.quotePat  = undefined
         , TH.Quote.quoteType = undefined
         , TH.Quote.quoteDec  = undefined
         }
```

`a == "hello" && b > 9999999`のような条件式は、文字列`condStr`として、渡ってくるので、それをエラーメッセージそのまま埋め込むように`ExpQ`を構築しています。


`Haskell.Meta.parseExp`では文字列をパースして`Exp`を取得しています。

## リポジトリ

今回のコードは、以下のリポジトリにおいてあります。

[nwtgck/assertion-haskell](https://github.com/nwtgck/assertion-haskell)

 [Stack](https://docs.haskellstack.org/en/stable/README/)を使っている場合は、以下の`extra-deps`を`stack.yaml`に加えて、

```yaml
...
extra-deps:
- git: https://github.com/nwtgck/assertion-haskell.git
  commit: 4340a96555606d590d54669b9ae992a5b8c9a10d
...
```

`package.yaml`に以下ように`assertion`を適切な`dependencies`に加えれば、今回の`[assert|...|]`が使えるようになります。

```yaml
...
library:
 dependencies:
 - assertion
...
```

### おまけ:  static assert

以下のリポジトリには、コンパイル時にassertする`staticAssert`もおまけで、入れてあります。コンパイル時に判断できるassertは実行時まで引き伸ばしたくありませんよね。

```hs
-- ちゃんとコンパイルエラーになる！
let _ = $(staticAssert (length "hello" == 99999))  
```
git stash で message を強制する方法

自分で必要な機能だったので，メモ書き程度にまとめておきます．
（`zsh`では試しているんですが，`bash`では試してません．悪しからず）

# `git stash` とは
複数branchにまたがって作業していると，branchAで作業途中だけどbranchBにちょっと切り替えたい時があります．そんなとき，現在の変更を一時的に退避させることのできるGitの機能です．

以下を参考にどうぞ: 
[変更を一時的に退避! キメろgit stash](https://qiita.com/fukajun/items/41288806e4733cb9c342)
[色々なgit stash](https://qiita.com/akasakas/items/768c0b563b96f8a9be9d)

# `git stash save "message"`
実は`git stash`では， `git stash save "message"` とすることでmessageつきのstashを作成できます． 
とってもわかりやすい！

（こんな感じにsaveされる）
<img width="" alt="Screen Shot 2018-04-15 at 16.02.35.png" src="https://qiita-image-store.s3.amazonaws.com/0/144707/b36ce00c-ee7e-32e4-dd93-baf3055e95d5.png">

# messageを強制する

以下を自分の`.zshrc` （`.bashrc`）に記述する

```shell
# aliasの登録（お好みで）
alias -g gsh='my_git_stash_save'

# git stash で messageを強制する関数
function my_git_stash_save() {
  if [ "$1" = "" ]; then
    echo "You must set the message!";
    echo "gsh [Your_Message]";
  else
    git stash save ${@:1}; 
    # 1つ目の引数以降をすべてmessageとする
    # ex. `gsh str1 str2 str3` の場合， messageは"str1 str2 str3"となる
  fi
}
```

実行すると...

**messageなしの場合（怒られる）**
<img width="" alt="Screen Shot 2018-04-15 at 15.57.41.png" src="https://qiita-image-store.s3.amazonaws.com/0/144707/ef4de129-a363-1972-659a-f150b98d9ed0.png">

**messageありの場合**
<img width="" alt="Screen Shot 2018-04-15 at 15.57.58.png" src="https://qiita-image-store.s3.amazonaws.com/0/144707/a270bb9f-5b90-cc40-98a2-cd60a00c0035.png">

messageなしの場合，git stashは行われませんが，messageをつけることで，`git stash`は成功します
bash基本操作（Linuc1/101試験）

##bashの基本操作##
<br>

| 操作 | 説明 |
|:-:|:---|
| Tab  | 補完  |
| Ctrl + A |  行の先頭へカーソル移動 |
| Ctrl + E  | 行の最後へカーソル移動  |
| Ctrl + D | カーソル部分を１文字削除、ログアウトする  |
| Ctrl + H | カーソルの左を１文字削除  |
| Ctrl + L|  画面をクリアしてカレント行を再表示する |
| Ctrl + C | 処理を中断する  |
| Ctrl + S | 画面への出力を停止する  |
| Ctrl + Q | 画面への出力を再開する  |
| Ctrl + Z | 処理を一時停止する  |

　

##ディレクトリの指定##
<br>

| 操作 | 説明 |
|:-:|:--|
|  ~ | ホームディレクトリ  |
|  . |  カレントディレクトリ |
|  .. | １つ上のディレクトリ  |  

　


##複数のコマンドの実行制御##
<br>

| コマンド | 説明 |
|:-:|:--|
|  1 ; 2 | 1に続いて2を実行  |
|  1 && 2 | 1が正常終了した場合のみ2を実行  |
| 1 &#124;&#124; 2 | 1が正常に終了しなかった場合のみ2を実行｜
| (1 ; 2) |1と2をひとまとまりのコマンドグループとして実行|
| {1;2;}| 現在のシェル内でコマンド1と2を実行する|


　

##引用符##
<br>

| 引用符 | 説明 |
|:-:|:--|
|  ' | 文字列  |
|  " |  文字列、変数があればその内容が展開される |
|`|バッククォーテーション内のコマンドの実行結果を表示|


　

##履歴機能##
<br>

| コマンド | 説明 |
|:-:|:--|
|  ↑(Ctrl+P) | 1つ前のコマンドを表示  |
| ↓(Ctrl+N)  | 1つ次のコマンドを表示  |
| !文字列|実行したコマンドの中で指定した文字列から始まるコマンドを実行|
|!!|直前に実行したコマンドを再実行する|
|!履歴番号|履歴番号のコマンドを実行する|
Korora (Fedora) でタッチパッドを無効にする

# 前置き
1ヶ月ほど前から、 [HP x2 210 G2](http://jp.ext.hp.com/notebooks/business/hp_x2_210_g2_camera/) という2 in 1タブレットにKororaを入れて使っています。
Windows 10より軽快で良いのですけれど、
キーボード入力をしていると、意図しない右クリックが発生してテキスト入力にストレスが……
どうもタッチパッドの感度が良すぎるために発生しているみたいです。
マウスがあるのでタッチパッドは要らない。
タッチパッドを無効にすることで、キーボード入力が快適になりました。

# タッチパッドを無効にする方法詳細
次のコマンドを実行して、タッチパッドのevent番号を調べる。

```
$ sudo libinput-debug-events
(省略)
 event4   POINTER_MOTION    +2.50s	 -2.00/  0.00
 event4   POINTER_MOTION    +2.51s	 -1.00/  1.00
 event4   POINTER_MOTION    +2.54s	 -1.00/  0.00
(Ctrl-Cで終了) 
```

タッチパッドを操作するとずらずらと上記のように表示される。この場合、タッチパッドはevent4だと分かる。

次を入力して先程のevent番号に一致するデバイスを見つける。

```
$ sudo libinput list-devices
(略)
Device:           HID 04f3:0755
Kernel:           /dev/input/event3
Group:            7
Seat:             seat0, default
Capabilities:     keyboard 
Tap-to-click:     n/a
Tap-and-drag:     n/a
Tap drag lock:    n/a
Left-handed:      n/a
Nat.scrolling:    n/a
Middle emulation: n/a
Calibration:      n/a
Scroll methods:   none
Click methods:    none
Disable-w-typing: n/a
Accel profiles:   n/a
Rotation:         n/a

Device:           HID 04f3:0755
Kernel:           /dev/input/event4
Group:            7
Seat:             seat0, default
Capabilities:     keyboard pointer 
Tap-to-click:     n/a
Tap-and-drag:     n/a
Tap drag lock:    n/a
Left-handed:      disabled
Nat.scrolling:    disabled
Middle emulation: disabled
Calibration:      n/a
Scroll methods:   button
Click methods:    none
Disable-w-typing: n/a
Accel profiles:   flat *adaptive
Rotation:         n/a
(略)
```

私のPCでは、同じデバイス名「HID 04f3:0755」で2つのデバイスがあります。
上のevent3は、キーボードです。
下のevent4のタッチパッドだけを無効にしないといけません。


無効にする設定は次のとおり。当該ファイルは存在しないと無いと思いますので新規作成して下さい。

```/etc/X11/xorg.conf.d/30-touchpad.conf
Section "InputClass"
    Identifier "no need for accelerometers in X"
    MatchProduct "HID 04f3:0755"
    MatchIsPointer  "on"
    Option "Ignore" "on"
EndSection
```

MatchProduct とか MatchIsPointer は設定対象のデバイスを特定するフィルターです。
MatchProduct の所は先程調べたデバイス名を入れて下さい。
MatchIsPointerでなく MatchIsTouchpad というフィルターもありますが、
それだとダメでキーボードまで一緒くたに使えなくなりました。
ログイン画面でパスワードを入れられなくなってしまい、Live USBから起動して 30-touchpad.conf を書き換えて再起動しました。

設定をファイルに保存しましたら、ログアウトして再びログインで設定が反映されます。

##参考
- [タッチパッドの無効化と無線ID追加 | 見よう見まねのブログ](https://ameblo.jp/miyou55mane/entry-12137928497.html)
chrome.storageの実体の場所

たまに自作のChrome拡張が勝手に吹っ飛んだりして困るので覚書。
多分ほとんどの人には役に立たない知識。

# 場所

## chrome.storage.local

Windowsは以下。Macは知らない
`C:\Users\{ユーザー名}\AppData\Local\Google\Chrome\User Data\Default\Local Extension Settings\{拡張のID}`

※ IDは拡張機能一覧 `chrome://extensions/` からデベロッパーモードをONにすることで確認できる

## chrome.storage.sync

`C:\Users\{ユーザー名}\AppData\Local\Google\Chrome\User Data\Default\Sync Extension Settings\{拡張のID}`

syncについてはGoogleアカウントで同期されるので、下手に弄らないほうが良さそう。

# フォーマット

[LevelDB](https://github.com/google/leveldb)っぽい。
知っていると何かに使えるかもしれない。

参考：[LevelDBの設計ドキュメント和訳 \- Qiita](https://qiita.com/ono_matope/items/f4c248d926f854f9034d)

# 拡張機能が吹っ飛んだ時の復旧方法

## 1. データを救出する

拡張機能が吹っ飛んでもstorageの実体は残っている可能性があるので、上記の場所から頑張って探す。
各フォルダにある `000003.log` というファイルをテキストエディタで開くとなんとなく入っているデータがわかる。
見つけたらフォルダの中身をまるごと退避する。

## 2. 拡張機能を再度インストールする

吹っ飛んだ拡張機能を再度インストールする。

## 3. 再度インストールした拡張のstorageの実体を差し替え

**Chromeのプロセスをすべて落とした状態で**、2でインストールし直した拡張に対応するchrome.storageの実体を、1で救出したデータに入れ替える。
rails 4 → 5.1.5 変更点、追加点　ざっくりまとめ

# Rakeコマンドをrailsコマンドに統一

```ruby:terminal
 $ rails routes
 $ rails db:migrate
```

# クエリ関連のメソッドの追加

`or, left_outer_joins, (left_joins)`が使えるようになりました。

詳細はGithubのrails [Added #or to ActiveRecord::Relation](https://github.com/rails/rails/pull/16052) より

# Action Cable の導入

 WebSocketとRailsのその他の部分をシームレスに統合し、Rails アプリケーションの効率の良さとスケーラビリティを損なわずに、通常のRailsアプリケーションと同じようにリアルタイム機能をRubyで記述できるようになりました。

参考サイト　[GO RAILS](https://gorails.com/episodes/rails-5-actioncable-websockets)
# 控えめな「JavaScript」から純粋な「JavaScript」へ　（フロント周りの変更点）

デフォルトでのJQuery依存が廃止されます。
[Ruby on Rails 5.1リリースノート]()  
>従来のRailsでは、data-remoteやdata-confirmについてはjQueryに依存し、その他の機能をUnobtrusive JavaScript（UJS: 控えめなJavaScript）に依存する形で機能を提供していました。Rails 5.1からはこれらの依存が解消され、UJSはvanilla JavaScript（=純粋なJavaScript）で書き直されました。このコードはAction View内部でrails-ujsとしてリリースされています。
デフォルトではjQueryに依存しなくなりましたが、必要に応じて従来どおりjQueryに依存することもできます。

Yarnのサポート
>Rails 5.1より、JavaScriptの依存管理をnpmからYarnに変更できるようになりました。

Web packのサポート
>新しいWebpacker gemの導入によって、JavaScriptのアセット用bundlerとも言うべきWebpackを簡単にRailsアプリに統合できるようになりました。Railsアプリを新規に生成するときに--webpackフラグを付けることで、Webpack統合が有効になります。
統合されたWebpackはアセットパイプラインとの完全互換が保たれます。画像・フォント・音声などのアセットも従来どおりアセットパイプラインで利用できます。また、一部のJavaScriptコードをアセットパイプラインで管理し、その他のJavaScriptコードをWebpack経由で処理する、といったこともできます。これらはすべて、デフォルトで有効なYarnで管理されます。

# Turbolinks 5

Turobolinksはページ間の遷移をXHR化しbodyの書き換えのみにすることで高速化を図る機能ですが、Turbolinks 5で大きく実装が書き換えられました。APIの変更には注意する必要があります。

```ruby:head内の記述
 $ ~   => true

 $ ~   : 'reload'
```
参考ページ　[Turbolinks 5とTurbolinks Classic（2.x）の比較](https://qiita.com/jkr_2255/items/fe1e69e043c94a5c0a79)


# API

APIのみのアプリケーションを簡単に作成できるようになりました。

```ruby:ターミナル
 $ rails new app --api
```

# その他気になった点

belongs_to の参照先がnilの場合、バリデーションエラーになります。
form_tag, form_for が form_with に統合されます。
`<%= form_with scope: :post, url: post-path do |form| %>`
`<% end %>`
参考サイト　[TechRacho](https://techracho.bpsinc.jp/hachi8833/2017_05_01/39502)
Action Cable の導入に伴い、開発環境のサーバがWEBrickからPumaに変更

詳しい変更についてはGithubのrailsリポジトリにある[Comparing changes](https://github.com/rails/rails/compare/4-2-stable...v5.1.5)を参照してください。
N4606 Working Draft 2016, ISO/IEC 14882, C++ standard(32)4.5 Qualification conversions [conv.qual] p86-2

# はじめに
N4606 Working Draft, Standard for Programming Language C++
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/#mailing2016-11
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/n4606.pdf

n4606は、ISO/IEC JTC1 SC22 WG21の作業原案(Working Draft)です。
公式のISO/IEC 14882原本ではありません。
ISO/IEC JTC1 SC22 WG21では、可能な限り作業文書を公開し、幅広い意見を求めています。
一連の記事はコード断片をコンパイルできる形にする方法を検討してコンパイル、リンク、実行して、規格案の原文と処理系(g++, Clang++)との違いを確認し、技術内容を検討し、ISO/IEC JTC1 SC22 WG21にフィードバックするために用います。
また、CERT C++, MISRA C++等のコーディング標準のコード断片をコンパイルする際の参考にさせていただこうと考えています。CERT C++, MISRA C++が標準化の動きとの時間的な擦れの確認が結果としてできれば幸いです。

## list
N4606 Working Draft 2016, ISO/IEC 14882, C++ standard(1) coding list
https://qiita.com/kaizen_nagoya/items/df5d62c35bd6ed1c3d43/

## Compiler
###clang++ --version
clang version 6.0.0 (tags/RELEASE_600/final)

###g++-7 --version
g++-7 (Homebrew GCC 7.3.0_1) 7.3.0
Copyright (C) 2017 Free Software Foundation, Inc.

#(32)4.5 Qualification conversions [conv.qual]
p86-2

```c++:p86-2.cpp
// N4606 Committee Draft, Standard for Programming Language C++
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/n4606.pdf 
#define msg "p86-2.cpp (32)4.5 Qualification conversions [conv.qual]"

#include <iostream>


int main() {
  const char c = ’c’;
  char* pc;
//  const char** pcc = &pc; // #1: not allowed
//$ clang++ p86-2.cpp
//p86-2.cpp:10:16: error: cannot initialize a variable of type 'const char **' with an rvalue of type 'char **'
//  const char** pcc = &pc; // #1: not allowed
//               ^     ~~~
//$ g++-7 p86-2.cpp
//p86-2.cpp: In function 'int main()':
//p86-2.cpp:10:22: error: invalid conversion from 'char**' to 'const char**' [-fpermissive]
//   const char** pcc = &pc; // #1: not allowed
//                      ^~~
  char **pcc;
  *pcc = &c;
  *pc = ’C’; // #2: modifies a const object
  std::cout << "c="<<c <<" pc=" << pc << std::endl;
  std::cout << msg << std::endl;
  return EXIT_SUCCESS;
}
```

```shell_session
$ ./cppgl17.sh p86-2 
$ clang++ p86-2.cpp
p86-2.cpp:12:10: error: assigning to 'char *' from incompatible type 'const char *'
  *pcc = &c;
         ^~
1 error generated.

$ g++-7 p86-2.cpp
p86-2.cpp: In function 'int main()':
p86-2.cpp:12:10: error: invalid conversion from 'const char*' to 'char*' [-fpermissive]
   *pcc = &c;
          ^~
```

#検討事項
  コンパイルエラーにならない修正。
　内容の出力。

#参考資料

コンパイル用shell script C版(clangとgcc)とC++版(clang++とg++)
https://qiita.com/kaizen_nagoya/items/74220c0577a512c2d7da
Qiitaに投稿するCのStyle例(暫定)
https://qiita.com/kaizen_nagoya/items/946df1528a6a1ef2bc0d
# 文書履歴
0.10 初稿 2080415
### 最後までおよみいただきありがとうございました。
いいね　💚、フォローをお願いします。
####  Thank you very much for reading to the last sentence.
Please press the like icon 💚　and follow me for your happy life.
MySQL+GeoalchemyでGeometry型を使うまで

MysqlをPythonでいじりたくて調べたけど動かなかったのでとりあえずの打開策。
詳細コードや設定は需要あれば追記したいと思う。

##動作環境

* Python : 3.6.4

* Mysql : Ver 14.14 Distrib 5.7.21, for Linux (x86\_64)

##使用ライブラリ
* Geoalchemy2

###インストール

```python
pip install geoalchemy2
```

##エラー

```c
sqlalchemy.exc.InternalError: (pymysql.err.InternalError) (1305, 'FUNCTION ***.ST_GeomFromEWKT does not exist')
```

##打開策
geoalchemy2をインストールしたフォルダのtypes.pyの184行目を以下のように変更する

```c
// from_text = 'ST_GeomFromText'
from_text = 'ST_GeomFromText'
```
Julia+IJuliaでJupyter Notebookを使うための環境構築 (macOS)

Juliaの環境構築でわりと苦労したのでメモしておきます。

- macOS 10.13.4 (HighSierra)
- 構築は2018/04/14時点

## 前提となる環境
- Homebrewのインストール
  - まだの方は「[MacにHomebrewを導入する方法](https://qiita.com/balius_1064/items/ac7dff5ef10eaf69996f)」などを参考に導入してください。
- pyenvを用いたPython + Anaconda環境の構築
  
### Pythonの環境構築

Julia にどう響くかは未検証なのですが、参考までに筆者の環境では以下の手順でPython環境を構築しています。

```
$ curl -L https://raw.githubusercontent.com/pyenv/pyenv-installer/master/bin/pyenv-installer | bash
$ echo 'export PATH="$HOME/.pyenv/bin:$PATH"' >> ~/.bashrc
$ echo 'eval "$(pyenv init -)"' >> ~/.bashrc
$ echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.bashrc
$ source ~/.bashrc
$ pyenv install 3.6.5
$ pyenv install anaconda3-5.1.0
```


## 最新版 Julia のインストール
https://julialang.org/downloads/ からdmgを引っ張ってきて、最新版のJuliaをインストールしてください。

## PATHを通す
`Julia-0.6.app` の部分はバージョンによるので、お手元の環境に即して変更してください。

```
$ echo 'export PATH=$PATH:/Applications/Julia-0.6.app/Contents/Resources/julia/bin' >> ~/.bashrc
$ source ~/.bashrc
```

## Julia 起動確認
`exit()`で終了できます。

```
$ julia
               _
   _       _ _(_)_     |  A fresh approach to technical computing
  (_)     | (_) (_)    |  Documentation: https://docs.julialang.org
   _ _   _| |_  __ _   |  Type "?help" for help.
  | | | | | | |/ _` |  |
  | | |_| | | | (_| |  |  Version 0.6.2 (2017-12-13 18:08 UTC)
 _/ |\__'_|_|_|\__'_|  |  Official http://julialang.org/ release
|__/                   |  x86_64-apple-darwin14.5.0

julia> exit()
```

## zeromq のインストール

~~IJuliaのインストールに必要です。brewから忘れずに入れておきましょう~~

```
$ brew install zmq
```

追記:**この作業は不要になりました**  
最新版の`ZMQ.jl`では、ビルド済みのバイナリからインストールするようになったため、この作業が不要になったとの情報を[bicycle1885さんからコメントにていただきました](https://qiita.com/ryo-a/items/2f54b960cbcd9f9cd237#comment-bac55e19337339c5e12e)。ありがとうございます。


## IJulia のインストール

`julia` でJuliaを立ち上げ、`Pkg.add` します。

```
$ julia
               _
   _       _ _(_)_     |  A fresh approach to technical computing
  (_)     | (_) (_)    |  Documentation: https://docs.julialang.org
   _ _   _| |_  __ _   |  Type "?help" for help.
  | | | | | | |/ _` |  |
  | | |_| | | | (_| |  |  Version 0.6.2 (2017-12-13 18:08 UTC)
 _/ |\__'_|_|_|\__'_|  |  Official http://julialang.org/ release
|__/                   |  x86_64-apple-darwin14.5.0

julia> Pkg.add("IJulia")
```

そこそこ時間がかかります。

## Notebookを立ち上げる

```
julia> using IJulia
julia> notebook()
```

Jupyter Notebookが起動したでしょうか。

なお、一度この手順で構築を行うと、Anaconda等からJupyter Notebookを立ち上げてもJuliaが利用できるようになっているはずです。

## 参考にした記事
- [macOS Sierra に Julia をインストールする](http://t44or2.hatenablog.com/entry/2018/01/10/macOS_Sierra_%E3%81%AB_Julia_%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8B)
- [JuliaをJupyterで使えるようになるまで（Ubuntu）](https://qiita.com/hashimock/items/49701ff357db84808ff2)
深セン視察備忘録その5(深セン->成田移動編)


[深セン視察備忘録その1(事前準備編)](https://qiita.com/snumano/items/7dc3b7d8c0258f2805cb)
[深セン視察備忘録その2(成田->深セン移動編)](https://qiita.com/snumano/items/57a870b4365fff0055bd#_reference-a057a321fab85259f867)
[深セン視察備忘録その3(現地でのイベント参加編)](https://qiita.com/snumano/items/295939eb94e7fa7b8b9e)
[深セン視察備忘録その4(深セン見どころ編)](https://qiita.com/snumano/items/9b2b25c1aecadeaeb82a)
深セン視察備忘録その5(深セン->成田移動編)

---
深センから、香港国際空港を経由して成田空港に戻ります。
参考情報として、時間も記載します。

# 参考情報

* [深セン旅行・移動TipsまとめWiki](http://wikiwiki.jp/shenzhen/)
	* ここをみれば深センの情報は一通り把握できる。
* [キレイ好きは福田口岸へ](https://ameblo.jp/howdynookery/entry-11536259966.html)
	* 来る時とは別のルートで帰る事にしました。
* [上水駅(MTR東鉄線)からA43バスで香港国際空港まで行く方法](https://c-study.net/mtr-sheungshui-to-hkia/)


# ホテル(华强路)から福田口岸へ移動

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4779/95c05963-cecf-ca76-bf2b-29e4b0c7b47d.jpeg">

9:50	ホテル発
10:00	华强北駅発
10:25	福田口岸駅着。福田口岸駅で[オクトパスカード3香港ドル割引の機械](http://hongkongshenzhen.seesaa.net/article/octopus-3doru.html)を探すも、見つからず。

# 徒歩でイミグレーションを通過

10:33	イミグレ通過。出国審査5分待ち
10:37	徒歩で国境の橋を通過。いつのまにか、iPhoneのローミング接続先が変わってた。
10:42	香港入国。落馬州。1人待ち。入国後、人民元を香港ドルに両替。
10:45	オクトパスカードリロード(チャージ)。機械で50香港ドルをリロード。リロード方法は[こちらを参照](http://www.hongkongnavi.com/special/5004633)

# 落馬洲(Lok Ma Chau)駅から上水駅(Sheung Shui)まで電車で移動

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4779/5becab72-2fbd-bd61-8a59-f222c69e1333.jpeg">

10:55	落馬州駅発
11:03	上水駅着

# 上水駅から香港国際空港までバスで移動

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4779/8c99fddb-5f79-9413-525c-ae5162c53035.jpeg">


11:17	A43バスが来たので乗車。二階窓側。満席。[バスはA43,A43PどちらでもでもOK](http://blog.livedoor.jp/shucchosan/archives/47131953.html)
11:22	バス発車
12:12	香港国際空港第1ターミナルで下車

# 香港国際空港から成田空港へ移動


12:30	セルフチェックイン完了。出国ロビーの土産物店で、[香港バス看板キーホルダー](http://www.hongkongnavi.com/shop/380/)を購入
12:51	出国辛酸完了。10分程
13:00	ランチ。残金あるのでオクトパスカードで支払う
13:30	搭乗口まで移動。途中でお土産買う
14:10	搭乗口到着。香港空港広い。かなり歩いた
15:10	飛行機搭乗
<以降、日本時間。+1時間>
20:55	成田空港着。(香港時間19:55)
21:07	入国審査完了。数人待ち。
21:20	両替完了。5分でできた。人民元、香港ドルを両替できた。紙幣のみ。

以上
xubuntuインストール直後にWiFiが認識されない場合の対処

#サマリ
xubuntu 16.04 LTSをクリーンインストールした直後に、WiFiを認識しない場合の対処法です。

※自分の場合は以下で治りましたが、必ず治るとは限りませんのでご了承ください。

#対応
1.無線のネットワークアダプターを認識しているか確認
　（これすらできていない時は、以下の手順は役に立たないと思われます）

```console
$ lspci -nn -d 14e4:
```

今回は以下のように表示されたので認識はしている模様。

```console
02:00.0 Network controller [0280]: Broadcom Corporation BCM4311 802.11b/g WLAN [14e4:4311] (rev 01)
```

2.アップデート実施

```console
$ sudo apt update; sudo apt upgrade;
```

3.対応するドライバを入れる
　1.の結果にチップ名が BCM4311 と表示されているので、それに対応したドライバを入れる。
　その際、先に入っているドライバが邪魔をするようなので、削除しておく。

```console
$ sudo apt purge bcmwl-kernel-source
$ sudo apt install firmware-b43-installer
```

4.再起動

```console
$ shutdown -r now
```

#参考サイト
- http://blog-sk.com/ubuntu/ubuntu-16-04-wi-fi/
- https://qiita.com/Accent/items/8c5c6f3cfd46307b1437
- https://ubuntuforums.org/showthread.php?t=2340963


#余談
インストール先は、HP B1900という2006年頃購入した古いパソコン。
Core 2 Duo T5500 1.66GHz、メモリ1GB、HDD100GB というスペックです。
元々WindowsXP機、もう5年以上使わずに置いてあったものを復活させました。
思いの外、快適に動作しています。
fabric-samples/balance-transfer 実行時の "Sent message larger than max" エラー回避策メモ 

## 発生している事象 
（2018/4/15）
Hyperledger Fabric v1.1 にて、fabric-samples/balance-transfer 実行時、以下のようにエラーが発生してAPIの実行ができなかったので、その回避策をメモ

```
cd fabric-samples/balance-transfer
./runApp.sh
./testAPI.sh -l golang
```

発生したエラーメッセージはこちら

```
[2018-04-15 05:23:17.671] [DEBUG] Helper - [crypto_ecdsa_aes]: ecdsa signature:  Signature {
  r: <BN: 1fa0d0a2977f6f3205f8db855a4ac382fa1caf2d6ec162662b086d6902ef5f05>,
  s: <BN: 6232ab2aa62cddd99da3f5526befcc7bd147e234935f67394e6b5ee7a33eabf5>,
  recoveryParam: 1 }
[2018-04-15 05:23:17.682] [ERROR] Create-Channel - Error: Sent message larger than max (2219 vs. 15)
    at ClientDuplexStream._emitStatusIfDone (/home/ubuntu/dev/fabric-samples/balance-transfer/node_modules/grpc/src/node/src/client.js:255:19)
    at ClientDuplexStream._receiveStatus (/home/ubuntu/dev/fabric-samples/balance-transfer/node_modules/grpc/src/node/src/client.js:233:8)
    at /home/ubuntu/dev/fabric-samples/balance-transfer/node_modules/grpc/src/node/src/client.js:757:12
(node:15115) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 2): Error: Failed to initialize the channel: Error: Sent message larger than max (2219 vs. 15)
(node:15115) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.

```

## 原因と回避策
grpcのリクエストに乗せようとしているデータ量のサイズが、制限値よりもオーバーしているとのこと
（この場合は artifacts/channel/mychannel.tx を送信しようとしてエラーになっている）
network-config.yamlでgrpcOptionが変えられるため、無制限の-1を指定して再起動しましょう

vi balance-transfer/artifacts/network-config.yaml
    ~~grpc-max-send-message-length: 15~~
    grpc-max-send-message-length: -1


以上
バルスを唱えた友人のために「rm -rf」とは

#`rm -rf`はバルス
【問題】友人Aさんがサーバー関係でLinuxコマンドをあまり理解せずにググって出てくるコマンドを打ち続けていると突如としてカレントディレクトリ以下が全て消し飛んでしまったそうです。

```
rm -rf
```

さて、このコマンドの意味について初学者向けに...いえ、私自身初学者なので自分へ向けたメモをここに記します。

##Linuxコマンド`rm`とは
`rm`とはリムーブのことで削除を表します。

##オプション`-rf`とは
`-rf`はオプション`r`と`f`を指定しています。

- オプション`r`：ディレクトリ内を再帰的に選択する
- オプション`f`：警告メッセージを表示しない

#まとめ
**「このディレクトリ以下を全部消すけど警告メッセージ出さないでね!」**と言う指示を出すことになります。
つまり友人はどのディレクトリにいるか確認をせず且つコマンド意味を知らず崩壊現象を起こしてしまったと言うわけです。