OmniAICreator/Qiita-1.07M huggingface dataset:
複数の検索結果を統合する（和集合）


## はじめに
テーブルに対し縦方向（行）に作用する集合演算子と、横方向（列）に作用する結合を覚えることで、複数のテーブルに分散しているデータを組み合わせて望む結果を選択することが出来るようになります。

### 集合演算とは
片方のテーブルだけにあるレコードを集めた結果などを得ることが出来ます。そして、このような集合演算を行なうための演算子を「集合演算子」

### テーブルの足し算 UNION

最初に紹介する集合演算子は、レコードの足し算を行なう UNION（和）です。以下に構文を示します。

UNION に限らず集合演算子は、通常は重複行が排除されます。
縦に結合されます。以下は例です。

従業員

|従業員コード|従業員名|
|:-----:|:-----:|
|A0001|チャーリー|
|A0002|ペパーミント|

受給者

|受給者コード|受給者名|
|:-----:|:-----:|
|A0001|チャーリー|
|B0001|スヌーピー|
|B0002|ウッドストック|

SQL

```SQL
SELECT * FROM 従業員
UNION
SELECT * FROM 受給者
```

結果

|従業員コード|従業員名|
|:-----:|:-----:|
|A0001|チャーリー|
|A0002|ペパーミント|
|B0001|スヌーピー|
|B0002|ウッドストック|


### 集合演算の注意事項

- 演算対象となるレコードの列数は同じであること
例えば、片方の列数が 2 列なのに、片方が 3 列という足し算を行なうことは出来ません。
- 足し算の対象となるレコードの列のデータ型が一致していること。左から数えて同じ位置にある列は、同じデータ型である必要があります。また、どうしても
違うデータ型の列を使いたい場合は、型変換の関数 CAST を使うことで集合演算子を使用が可能になります。
- ORDER BY 句は 1 つだけUNION で足せる SELECT 文は、どんなものでもかまいません。これまでに学んだ WHERE、GROUP BY、HAVING といった句を使うことも出来ます。ただし、ORDER BY 句だけは、全体として 1 つを最後につけられるだけです。

### 重複行を残す集合演算  ALL オプション
ALL オプションは UNION の後ろに「ALL」というキーワードを追加

```sql
SELECT * FROM 従業員
UNION ALL
SELECT * FROM 受給者
```
pythonでVRアプリ開発ができるVizardの紹介と導入

##Vizardとは？
WorldViz社が販売するVRアプリ開発用のソフトウェアになります。
VRゲームやvideoというよりかはシミュレーション系で使われる、本格的な業務用アプリ開発に使われてるようです。
イメージは以下の動画をご覧ください
https://www.youtube.com/watch?v=r01Fnz-qxTc

##実行条件
windows
python2.7

##特徴
・windowsアプリしか開発できないせいか、とてもシンプルな作りになっています。
・pyファイルと呼び出すための3DCGファイルや音声、動画、画像ファイルなどを置いておくだけです。
・VisualStudioに近いIDEのため、環境構築で苦労することはないと思います。
・無償版はexeの発行ができない、ロゴがずっと画面に出続ける、5分間しか動かせないなど制限が盛りだくさん


##導入方法
worldviz社のHPに行きそこからexeのダウンロードとインストールをするだけです。

http://www.worldviz.com/

ここにVizard5へのリンクがあります
http://www.worldviz.com/virtual-reality-software-downloads/

ここを押してもダウンロードが始まらず、情報入力を求められます。
<img src="https://qiita-image-store.s3.amazonaws.com/0/110257/165fb3a4-572d-b5b0-a105-a8006377cdbb.jpeg" alt="download" title="download" width=300pt>

送信するとダウンロードリンクが貼られたメールが届きます
<img src="https://qiita-image-store.s3.amazonaws.com/0/110257/aee56964-43cf-dbb0-08da-a484149d230e.jpeg" alt="download" title="download" width=300pt>

リンクを踏むとvizard_5.6_X64.exeというファイルが落ちてくるのでインストールします。

インストールしてVizard.exeをたたくとIDEが起動します

<img src="https://qiita-image-store.s3.amazonaws.com/0/110257/3261adac-8854-6efa-7ff5-34376c8ba324.jpeg" alt="download" title="download" width=400pt>

まずはなにをしたらいいかわからないと思うのでチュートリアルを始めてみましょう？

http://docs.worldviz.com/vizard/index.htm#Old_Book/Building_a_Small_World.htm


個人使用で使うには向いてるとは思えませんが、pythonでさくっとVRアプリを作ってみたい方は一度試してみてもよいのではないでしょうか！
PHP リクエストメソッドの取得

###PHPでのリクエストメソッドの取得

```php
$_SERVER["REQUEST_METHOD"]
```

###使用例

```php
if ($_SERVER["REQUEST_METHOD"] == "GET") {
    ...
} elseif ($_SERVER["REQUEST_METHOD"] == "POST") {
    ....
} else {
    ....
}
```
レコードを並び替える


###  ORDER BY

SELECT 文の結果を並び替える場合は、ORDER BY 句を使用します。構文は以下の通りです。

ORDER BY  列名  順序（昇順または降順）
ORDER  BY 句は必ず SELECT 文の最後尾に書く必要があります。

```sql
SELECT * FROM tableA ORDER BY age
```

ORACLEは、順番を保障しない。だから、絶対にORDER BYをつけます。

### 複数のソートキーを指定する

「同順位」の行について更に細かく並び順を指定したい場合は、もう 1 つソートキーを追加する必要があります。ソートキーはカンマ区切りで複数指定することが出来ます。
販売単価の降順、商品 ID の昇順で並び替えを行う例を以下に示します。

```sql
SELECT * FROM tableProduct ORDER BY price,id
```


### NULL の順番

NULL を含む列をソートキーにした場合、NULL は先頭または末尾にまとめて表示されます。先頭に来るか末尾に来るかは、特に決まっていません。中には、先頭か末尾かを指定することの出来る DBMS もあります。
Oracle の場合、NULL  はデフォルトの昇順ソートでは最後、降順ソートでは最初に並び替えられます。

### ソートキーに表示用の別名を使う

GROUP BY 句には、SELECT 句でつけた列の別名は使うことが許されていませんが、ORDERBY 句ではそれが許されています。したがって、以下のような SELECT 文は、エラーにはならず、正しく実行出来ます。
ADDA > iterative.c > functions

```txt:My_Environment
Ubuntu 14.04 LTS Japanese Remix
on VMWare Fusion v8.5.2 (4635224)
on OS X El Captian v10.11.4

GNU bash, version 4.3.11(1)-release

gcc (Ubuntu 4.8.4-2ubuntu1~14.04.3) 4.8.4 
(also for g++)
ADDA v.1.3b6
```

This article is related to [ADDA (light scattering simulator based on the discrete dipole approximation)](https://github.com/adda-team/adda/).

In order to use the coefficients learned using TensorFlow, we need to understand the `iterative.c`.

Here is the mindmup of `iterative.c` functions.
https://atlas.mindmup.com/yasokada/adda_iterative_c_161123/index.html
スマホで閲覧時のみ、電話番号にtel:リンクを追加する

# やりたいこと
- スマホで見たときに、タップするだけで電話がかけられるように電話番号にリンクをはりたい。
- でもPCで見たときはリンクさせたくない。
- それを同じHTMLで済ませたい。
- テキストだけでなく、画像でも同様にしたい。

ということで、JavaScript(jQuery)を使います。
→[デモ](http://codepen.io/bass-inu/pen/GNpLmo)

#jQueryで電話番号リンクを追加する

```html:HTML
<!-- テキストの場合 -->
<p class="tel">00-1234-5678</p>

<!-- 画像の場合は、alt属性に電話番号を入れておきます。 -->
<p class="tel">
<img src="https://placehold.jp/150x150.png" alt="01-1234-5678">
</p>
```

```js:JS
$(function() {
  $('.tel').each(function() {
//.tel内のHTMLを取得
    var str = $(this).html();
//子要素がimgだった場合、alt属性を取得して電話番号リンクを追加
    if ($(this).children().is('img')) {
      $(this).html($('<a>').attr('href', 'tel:' + $(this).children().attr('alt').replace(/-/g, '')).append(str + '</a>'));
    } else {
//それ以外はテキストを取得して電話番号リンクを追加
      $(this).html($('<a>').attr('href', 'tel:' + $(this).text().replace(/-/g, '')).append(str + '</a>'));
    }
  });
});
```

そうすると、動的にtelリンクが追加され、HTMLは以下のようになります。

```html:HTML
<!-- テキストの場合 -->
<p class="tel">
<a href="tel:0012345678">00-1234-5678</a>
</p>

<!-- 画像の場合 -->
<p class="tel">
<a href="tel:0112345678">
<img src="https://placehold.jp/150x150.png" alt="01-1234-5678">
</a>
</p>
```

# スマホのみ適用させる
上記コードをスマホ閲覧時のみ適用させるようにします。
以前書いた記事をそのまま使用。
[スマホで閲覧した時だけJavaScriptを一部無効化したり有効化したりする](http://qiita.com/bass-inu/items/8b0f9bde42642f330cb2)

```js:JS
if(navigator.userAgent.match(/(iPhone|iPad|iPod|Android)/)){

}
```

#まとめ

```html:HTML
<p class="tel">00-1234-5678</p>

<p class="tel">
<img src="https://placehold.jp/150x150.png" alt="01-1234-5678">
</p>
```

```js:JS
if (navigator.userAgent.match(/(iPhone|iPad|iPod|Android)/)) {
  $(function() {
    $('.tel').each(function() {
      var str = $(this).html();
      if ($(this).children().is('img')) {
        $(this).html($('<a>').attr('href', 'tel:' + $(this).children().attr('alt').replace(/-/g, '')).append(str + '</a>'));
      } else {
        $(this).html($('<a>').attr('href', 'tel:' + $(this).text().replace(/-/g, '')).append(str + '</a>'));
      }
    });
  });
}
```
ZBrushネタ投稿 テクスチャの開きアニメ

最近ZBrushのモデリングを始めました。まだ作品をソレ系のコミュニテイに投稿するほど上手くないので、Qiitaに面白い機能があったらメモ投稿してみます。

##  通常のモデルから、UVマップ展開図へのアニメーション

モデル表示から展開図表示までスムーズに切り替えてくれる機能があります。閲覧若干注意。

・用意するもの
UV情報を持ってテクスチャ設定がしてあるモデル。ミニラさんをコネコネして作りました。

<img width="810" alt="cap.png" src="https://qiita-image-store.s3.amazonaws.com/0/8302/4b484898-683d-38c5-5459-a22bd54a7389.png">

・やり方
Toolメニュー -> UV MAP -> Morph UV を実行するだけ

![1.png](https://qiita-image-store.s3.amazonaws.com/0/8302/ca3adb30-0239-aae4-b342-9888843d53ff.png)
おや、、ミニラの様子が。。

![2.png](https://qiita-image-store.s3.amazonaws.com/0/8302/d1cbc60c-8a53-60fa-0412-40c41c9f09e7.png)
！

![3.png](https://qiita-image-store.s3.amazonaws.com/0/8302/f2316c6f-c29b-ebbd-b4c6-85f851c4449c.png)
！！

![4.png](https://qiita-image-store.s3.amazonaws.com/0/8302/80d9baca-71d5-34f7-4c8f-49a26104e5f2.png)
展開図に進化した！

動画になったものがこちらにあります。わかりやすさのための機能だと思うんですが、どうにもキモいですね（笑)。
https://youtu.be/KwpuBgIcj-s
ADDA > iterative.c > ITER_FUNC(BCGS2) / function call

```txt:My_Environment
Ubuntu 14.04 LTS Japanese Remix
on VMWare Fusion v8.5.2 (4635224)
on OS X El Captian v10.11.4

GNU bash, version 4.3.11(1)-release

gcc (Ubuntu 4.8.4-2ubuntu1~14.04.3) 4.8.4 
(also for g++)
ADDA v.1.3b6
```

This article is related to [ADDA (light scattering simulator based on the discrete dipole approximation)](https://github.com/adda-team/adda/).

In the source files, I found `itertive.c`.
https://github.com/adda-team/adda/blob/master/src/iterative.c

### ITER_FUNC(BCGS2)

In the `iterative.c`, I found the followings:

```c
ITER_FUNC(BCGS2);
ITER_FUNC(BiCG_CS);
ITER_FUNC(BiCGStab);
ITER_FUNC(CGNR);
ITER_FUNC(CSYM);
ITER_FUNC(QMR_CS);
ITER_FUNC(QMR_CS_2);
```

The ITER_FUNC is a macro defined as followings

```c
#define ITER_FUNC(name) static void name(const enum phase ph)
```

I am not sure, but this seems a means to show explicitly the groups of iterative solvers, rather than to name using prefix (e.g. ITER_BCGS2(), ITER_BiGC_CS() etc).

This also enforces to use enum elements (e.g. BCGS2, BiGC_CS), which are used in other parts of the code.
 
### function call

It seems that functions defined using ITER_FUNC() are called through:

```iterative.c
static const struct iter_params_struct params[]={
	{IT_BCGS2,15000,2,1,BCGS2},
	{IT_BICG_CS,50000,1,0,BiCG_CS},
	{IT_BICGSTAB,30000,3,3,BiCGStab},
	{IT_CGNR,10,1,0,CGNR},
	{IT_CSYM,10,6,2,CSYM},
	{IT_QMR_CS,50000,8,3,QMR_CS},
	{IT_QMR_CS_2,50000,5,2,QMR_CS_2}
...
};
```

where struct iter_params_struct are defined as 

```iterative.c
struct iter_params_struct {
	enum iter meth;   // identifier
	int mc;           // maximum allowed number of iterations without residual decrease
	int sc_N;         // number of additional scalars to describe the state
	int vec_N;        // number of additional vectors to describe the state
	void (*func)(const enum phase); // pointer to implementation of the iterative solver
};
```
Objective-cでアサート(assert)したい


デフォルトでメッセージ付きのアサートなので注意、条件式のみの普通のアサートはなさそう。

[NSAssertの使いどころ - Over&Out その後](http://d.hatena.ne.jp/shu223/20110308/1300397404)


こうして

```objc
- (id)initWithFileDirectory:(NSString*)directory title:(NSString*)title edit:(BOOL)editable directRun:(BOOL)isDirecRun runDir:(NSString*)runDir {
    self = [super init];
 	.
    .
     _isDirectRun = isDirecRun;
    _runDir = runDir;
    // 第1引数が条件、第2引数にメッセージを指定
    NSAssert(_runDir == nil || _isDirectRun, @"Support runDir with only isDirecRun");
    .
    .
    return self;
}

```

こう呼ぶと

```objc
// directRunがNOなのにrunDirにパラメータを設定している
    self = [super initWithFileDirectory:_appDir
                                  title:@"App"
                                   edit:NO
                              directRun:NO
                                 runDir:[FCFileManager pathForDocumentsDirectory]];
    return self;

```

実行時にエラーを吐いて止まってくれる。

```
2016-11-23 13:30:25.017 RubyPico[18632:26713716] *** Assertion failure in -[AppViewController initWithFileDirectory:title:edit:directRun:runDir:], /Users/ongaeshi/Documents/RubyPico/App/SelectViewController.m:58
2016-11-23 13:30:25.056 RubyPico[18632:26713716] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Support runDir with only isDirecRun'
```

アサートは当面実装する予定のないパラメータ設定などを間違えて使われないようにしたい(でもちゃんとエラー処理を実装するほどでもない)ときに便利。
Google Apps Scriptで メソッド「getItemResponses」を呼び出せません。 が出る時

非常にハマった。

# TL;DR

- フォーム送信時に関数を実行するというトリガーを設定しなおすと治る

# 原因

メール送信やリクエストの送信など新たなパーミッションを要求するスクリプトを書いた場合はパーミッションの追加が行われるが、その際に既存の権限が可笑しくなるのか、表題のエラーが発生し始める。

トリガーを作り直すと権限は正しい状態になる。

下記のようなスクリプトを実行しようとすると追加の権限設定が発生する。

```
function onFormSubmit(event) {
 event.response.getItemResponses(); 
}
function mail() {
  MailApp.sendEmail("hogehoge@example.com", "report", "Test");
}

```

<img width="271" alt="Request_for_Permission.png" src="https://qiita-image-store.s3.amazonaws.com/0/10032/3300128c-47c8-2a06-6819-10ca6eca7a75.png">

この権限を承認すると表題のエラーが発生し始める。

おちついてトリガーを削除して再設定しよう。
承認したはずの権限の追加が発生する。

<img width="433" alt="test.png" src="https://qiita-image-store.s3.amazonaws.com/0/10032/eb4c6475-f48d-b975-7e98-3d1065d23c4d.png">

これを承認すれば治る。

<img width="279" alt="Request_for_Permission.png" src="https://qiita-image-store.s3.amazonaws.com/0/10032/851cd381-cefa-b522-5b7d-c3b804d47485.png">
golangでgRPCを使う

gRPCはGoogleが作ったRPCのフレームワークで、Protocol bufferというシリアライズとプロトタイプをベースにしています。
http://www.grpc.io/

## サンプル実装

クライアントがpingと書いたら、pongと返すだけのサーバです。
https://github.com/juntaki/grpc-sample

## プロトタイプ

proto3というSyntaxでプロトタイプを作成する。プロトタイプにはざっくりと次のようなことを書きます。

書式|意味
----|---
message|構造体の形式
service|関数宣言
package|パッケージ名

詳細は：https://developers.google.com/protocol-buffers/docs/proto3

protoファイルからのコード生成はこのREADMEのprotocコマンドに、`--go_out=plugins=grpc:.`をつけないとserviceが定義されません。
https://github.com/golang/protobuf

~~~sh
protoc --go_out=plugins=grpc:. *.proto
~~~

## サーバ側の実装

streamingはmessageで定義した構造の配列を送れるイメージです。
双方向はClient側にもRecvで待っておいてもらえる実装というだけで送れる情報は普通のstreamingと変わりません。

* SimpleRPC
* Server-side streaming RPC
* Client-side streaming RPC
* Bidirectional streaming RPC

## クライアント側の実装

サーバ側のRPCの種類に合わせて実装方法はいろいろですが、基本的にはgrpc.Dialで接続したあと、
NewXXXClientの戻り値の構造体からプロトタイプで実装したインタフェースを利用するだけです。

### エラーの対処

~~~
undefined: grpc.SupportPackageIsVersion3
~~~

FAQにある通り、パッケージをバージョンアップすればなおります。
https://github.com/grpc/grpc-go#faq


~~~
# command-line-arguments
server/server.go:34: cannot use pingpongServer literal (type *pingpongServer) as type pingpong.PingpongServer in argument to pingpong.RegisterPingpongServer:
        *pingpongServer does not implement pingpong.PingpongServer (wrong type for Ping method)
                have Ping("context".Context, *pingpong.PingRequest) (*pingpong.PingResponse, error)
                want Ping("golang.org/x/net/context".Context, *pingpong.PingRequest) (*pingpong.PingResponse, error)
~~~

`import "golang.org/x/net/context"`とすればOKです。
クラウド9でコマンドラインを一気に綺麗にする。

様々なプログラムを書いた後、こんがらがって全て一気に消し去りたいことがある。
新たに開き直すかファイルを作っても良いがそれはめんどくさい。

そんな時はcrear。
データベース弄ってたりしたら一回そこから抜けて、

自分のID:~/workspace $ ()

上の()の部分に()無しで直接crearと打ってエンター。
これで綺麗さっぱり消えてくれる。

必要なのもまっさらになるからどの場面でもって訳にもいかんだろうけど、練習とかの途中でエラーメッセージがやたら溜まってしまった場合とかのために覚えておくと良いかも知れない。
ADDA > first calculation

```txt:My_Environment
Ubuntu 14.04 LTS Japanese Remix
on VMWare Fusion v8.5.2 (4635224)
on OS X El Captian v10.11.4

GNU bash, version 4.3.11(1)-release

gcc (Ubuntu 4.8.4-2ubuntu1~14.04.3) 4.8.4 
(also for g++)
ADDA v.1.3b6
```

This article is related to [ADDA (light scattering simulator based on the discrete dipole approximation)](https://github.com/adda-team/adda/).

I tried the first calculation using ADDA.

https://github.com/adda-team/adda/blob/wiki/Tutorial.md

```
$ pwd
/home/yasokada/ADDA/WORK_161123/adda/src/seq
```

```
$ ./adda
all data is saved in 'run000_sphere_g16_m1.5'
box dimensions: 16x16x16
lambda: 6.283185307   Dipoles/lambda: 15
Required relative residual norm: 1e-05
Total number of occupied dipoles: 2176
Memory usage for MatVec matrices: 1.3 MB
Calculating Green's function (Dmatrix)
Fourier transform of Dmatrix......
Initializing FFTW3
Total memory usage: 2.2 MB

here we go, calc Y

CoupleConstant:0.005259037197+1.843854148e-05i
x_0 = 0
RE_000 = 1.0000000000E+00
RE_001 = 8.4752662637E-01  + 
RE_002 = 8.2113292044E-01  + 
RE_003 = 4.2639057157E-01  + 
RE_004 = 3.0639031825E-01  + 
RE_005 = 2.2448283848E-01  + 
RE_006 = 2.2740255145E-01  - 
RE_007 = 1.5952149116E-01  + 
RE_008 = 6.1602401377E-02  + 
RE_009 = 3.5443250606E-02  + 
RE_010 = 2.9898244021E-02  + 
RE_011 = 2.4111231314E-02  + 
RE_012 = 3.8307716448E-03  + 
RE_013 = 3.0434605435E-03  + 
RE_014 = 1.3101400496E-03  + 
RE_015 = 8.2588870145E-04  + 
RE_016 = 5.0452779525E-04  + 
RE_017 = 1.1339752034E-04  + 
RE_018 = 9.3640511756E-05  + 
RE_019 = 6.8748762964E-05  + 
RE_020 = 2.2385460753E-05  + 
RE_021 = 1.5168238488E-05  + 
RE_022 = 3.1668363235E-06  + 
Cext	= 135.0449052
Qext	= 3.791149625
Cabs	= -2.047466084e-16
Qabs	= -5.74790309e-18
```

Then I found the folder named `run000_sphere_g16_m1.5`, which includes followings

- CrossSec-Y  
- log  
- mueller

In the execution log, we can find `RE_XX` as shown above.
This is the relative residual norm for each iteration as written in [Tutorial](https://github.com/adda-team/adda/blob/wiki/Tutorial.md):
>  It is followed by the progress report of the iterative solver, which shows the relative residual norm for each iteration.
バックスラッシュ「\」の打ち方

macを使用していて、バックスラッシュ、つまり「\」の打ち方がわからなくなることがある。

実の所は簡単で、optionキー+キーボード右上の「¥」でOK。

これは結構多用するので、覚えておくか、忘れたらこれを見るようにしよう。
スペルミスと「;」打ち忘れの怖さ

どのプログラミング言語でもだが、スペルミスと「;」に限らず「.」などの小さい物の打ち忘れは要注意。

後は実際やって見て引っかかったが、mysqlの学習中、データベースの作成とそれを見る工程で、作成時に以下のようにした。

mysql> create detabase myapp;

はい。スペルミス。
databaseが正しいので、これを直して、

mysql> create database myapp;

これでOK。
だけどこの後でそれを見ようとした時。

mysql> show database;

エラー。
何故？ と思ったら、見る時はdatabbasesになっていた。
複数形にするのな。
従って正しくは、

mysql> show databases;

これで、データベースを見ることができる。

なんと言うか、mysqlもsqliteもこの先学ぶが、クラウド9の使用法学習中にこう言うのがあるって知れて良かったよ。
ADDA > make seq > Error > ../memory.c:30:101: fatal error: fftw3.h: No such file or directory

```txt:My_Environment
Ubuntu 14.04 LTS Japanese Remix
on VMWare Fusion v8.5.2 (4635224)
on OS X El Captian v10.11.4

GNU bash, version 4.3.11(1)-release

gcc (Ubuntu 4.8.4-2ubuntu1~14.04.3) 4.8.4 
(also for g++)
```

This article is related to ADDA (light scattering simulator based on the discrete dipole approximation).

### make seq at src/

https://github.com/adda-team/adda/blob/wiki/CompilingADDA.md

According to the above page, I tried to `make seq`. Then, I received the following error.

```bash
$ make seq
--- Compilation options: ---
Release mode
FFTW3
Compiler set 'gnu'
----------------------------
Compiling sequential version of ADDA
make -C seq
make[1]: Entering directory `/home/yasokada/ADDA/WORK_161123/adda/src/seq'
gcc -c -O3 -ffast-math -funroll-loops -w  -std=c99  -MD ../memory.c
../memory.c:30:101: fatal error: fftw3.h: No such file or directory
 # include <fftw3.h> // for fftw_malloc; types.h should be defined before (to match C99 complex type)
                                                                                                     ^
compilation terminated.
make[1]: *** [memory.o] Error 1
make[1]: Leaving directory `/home/yasokada/ADDA/WORK_161123/adda/src/seq'
make: *** [seq] Error 2

```

This is because the FFTW3 package is not installed.

## Installation of FFTW3

see http://qiita.com/7of9/items/0123202cec8b9a903910

After the installation, as shown in https://github.com/adda-team/adda/blob/wiki/InstallingFFTW3.md ,
we need to set following variables:

|  |  |
|:-:|:-:|
| FFTW3_INC_PATH | `~/include`  |
| FFTW3_LIB_PATH | `~/lib` |

I added followings to `~/.bashrc`

```.bashrc
### FFTW3 for ADDA (Nov. 23, 2016)
export FFTW3_INC_PATH=~/include
export FFTW3_LIB_PATH=~/lib
```

## make seq at src/

I tried `make seq` at `src/` again.

```
...
gfortran -c -O3 -ffast-math -funroll-loops -w  ../fort/propaesplibreintadda.f
Linking needs to be redone
echo -n "gcc -L/home/yasokada/lib -w -lm -lfftw3  -lgfortran" > .ldopts
Building adda
gcc -o adda ADDAmain.o CalculateE.o calculator.o chebyshev.o comm.o crosssec.o GenerateB.o interaction.o io.o iterative.o linalg.o make_particle.o memory.o mt19937ar.o param.o Romberg.o sinint.o somnec.o timing.o vars.o fft.o matvec.o d07hre.o d09hre.o d113re.o d132re.o dadhre.o dchhre.o dcuhre.o dfshre.o dinhre.o drlhre.o dtrhre.o propaesplibreintadda.o   -L/home/yasokada/lib -w -lm -lfftw3  -lgfortran
make[1]: Leaving directory `/home/yasokada/ADDA/WORK_161123/adda/src/seq'
```

`make seq` finished without error.

Now, we can find the execution file named `adda` under `src/seq/`.
Ubuntu 14.04 > Installation of FFTW3

```txt:My_Environment
Ubuntu 14.04 LTS Japanese Remix
on VMWare Fusion v8.5.2 (4635224)
on OS X El Captian v10.11.4

GNU bash, version 4.3.11(1)-release
```

## Installation of FFTW3

https://github.com/adda-team/adda/blob/wiki/InstallingFFTW3.md

I tried:

```
$ cd
$ mkdir INSTALL_FFTW3
$ cd INSTALL_FFTW3
$ wget http://www.fftw.org/fftw-3.3.5.tar.gz
```

```
$ tar xvzf fftw-3.3.5.tar.gz
$ cd fftw-3.3.5/
$ ./configure --prefix=$HOME --enable-sse2
$ make
$ make install
```

Then, include files and library files are located:

- include files: ~/include/
- library files: ~/lib/
Time#getlocal と Time#localtime の違い

# 結論
- **`Time#getlocal`** は、Time オブジェクトを新しく生成して返す、**非破壊的**メソッド。
- **`Time#localtime`** は、元の Time オブジェクトを変更する、**破壊的**メソッド。

# 検証
- Ruby 2.3.1

```rb
[1] pry(main)> require 'time'
=> true
[2] pry(main)> Time.now.zone
=> "JST"
[3] pry(main)> t = Time.parse("Wed Aug 27 13:08:45 +0000 2008")
=> 2008-08-27 13:08:45 +0000
[4] pry(main)> t.getlocal
=> 2008-08-27 22:08:45 +0900  # Time#getlocal
[5] pry(main)> t.zone
=> nil                        # tはUTCのまま
[6] pry(main)> t.localtime
=> 2008-08-27 22:08:45 +0900  # Time#localtime
[7] pry(main)> t.zone
=> "JST"                      # tはJSTに変わっている
```

# 参考
- https://docs.ruby-lang.org/ja/latest/method/Time/i/getlocal.html
- https://docs.ruby-lang.org/ja/latest/method/Time/i/localtime.html
SQLAlchemyのback_populatesとbackrefの違いとどちらも使わない場合

SQLAlchemyのback_populatesとbackrefって何がどう違うの？っていうかどっちも書かないとどうなるの？という話。

結論から書くと、

(1)backrefを使用した場合
双方向のリレーションを自動的に組んでくれる。  
 
(2)back_populatesを使用した場合
双方向のリレーションを自分で組む必要がある。  
 
(3)back_populatesもbackrefも使用しない場合
トランザクション中、逆方向のフィールドが自動更新されない。

ということになる。

では、具体例を見ていく。
例としてEventモデルとTicketモデルを考える。
1つのEventは複数のTicketをもっている、One to Manyの関係。

#### backrefを使用した場合
```python
class Event(Base):
	__tablename__ = 'event'
	id = Column(Integer, primary_key=True)
	title = Column(String(255))
	tickets = relationship("Ticket",backref="event")

class Ticket(Base):
	__tablename__ = 'ticket'
	id = Column(Integer,primary_key=True)
	title = Column(String(255))
	value = Column(Integer)
	event_id = Column(Integer,ForeignKey('event.id'))
``` 
```python
event = Event(title="test")
ticket = Ticket(title="test_ticket",value=5000)
event.tickets = [ticket]

event.tickets #Ticket Objects
ticket.event #Event Object
```

#### back_populatesを使用した場合
back_populatesを使用する場合は、双方向のリレーションを組まないと動作しない。

```python
class Event(Base):
	__tablename__ = 'event'
	id = Column(Integer, primary_key=True)
	title = Column(String(255))
	tickets = relationship("Ticket",back_populates="event")

class Ticket(Base):
	__tablename__ = 'ticket'
	id = Column(Integer,primary_key=True)
	title = Column(String(255))
	value = Column(Integer)
	event_id = Column(Integer,ForeignKey('event.id'))
	event = relationship("Event",back_populates="tickets")
```

```python
event = Event(title="test")
ticket = Ticket(title="test_ticket",value=5000)
event.tickets = [ticket]

event.tickets #Ticket Objects
ticket.event #Event Object
```

#### どちらも使用しない場合
```python
class Event(Base):
	__tablename__ = 'event'
	id = Column(Integer, primary_key=True)
	title = Column(String(255))
	tickets = relationship("Ticket")

class Ticket(Base):
	__tablename__ = 'ticket'
	id = Column(Integer,primary_key=True)
	title = Column(String(255))
	value = Column(Integer)
	event_id = Column(Integer,ForeignKey('event.id'))
	event = relationship("Event")
```

```python
event = Event(title="test")
ticket = Ticket(title="test_ticket",value=5000)
event.tickets = [ticket]

event.tickets #Ticket Objects
ticket.event #None
```
この場合、ticket→eventがNoneになっている。
つまり、トランザクション内ではticketにeventが紐付いていない事がわかる。
勿論、トランザクション終了後（eventオブジェクトをインサートした後）なら双方向で紐付いている。

```python
event = self.session.query(Event).filter(Event.id==1).one()
ticket = self.session.query(Ticket).filter(Ticket.id==1).one()

event.tickets #Ticket Objects
ticket.event #Event Object
```
インフラを支える道具の用語メモ

# 前提
フロントエンジニア(いろんなことやりすぎてフロントエンジニアかどうかも怪しいがｗ)の自分が最近インフラを触る機会があったので、そのときに出てきたワードに関する超初心者キーワードメモ
間違い等あると思いますので、ご指摘いただけるとありがたいです。

# Terraform
https://www.terraform.io/
HashiCorp社のオープンソースのプロダクト

> Terraform is a tool for building, changing, and versioning infrastructure safely and efficiently. Terraform can manage existing and popular service providers as well as custom in-house solutions.

インフラ環境の構築、設定などをコードを使って自動化するためのツールで、複数のサービス・プロバイダが提供しているサービスの管理が可能(AWSとかGCPとか)

# Packer
https://www.packer.io/
これもHashiCorp社オープンソースのプロダクト

> Packer is a tool for creating machine and container images for multiple platforms from a single source configuration.

一つの設定ファイルで複数の環境に同時にマシンイメージを作成することができるツール

クラウドやローカルの開発環境などに同じ設定のイメージを作成できる

イメージを手で作ると後から何が入っているものなのかわかりにくくなるから、それを設定ファイルで定義していてそれからイメージが作れるって感じらしい。

# ansible
https://www.ansible.com/
> Deploy apps. Manage systems. Crush complexity.
Ansible helps you build a strong foundation for DevOps.

構成管理ツール

Packerとの違いは？
参考: http://dev.classmethod.jp/server-side/ansible/build_ami_with_packer_using_ansible/

Packerはマシンイメージを作成することに重きをおいているツールで複雑な構成管理をしようとするとシェルスクリプト地獄になってしまうらしい。
そこでその複雑な構成はAnsibleとかが得意とするところらしい。

設定の仕方とかはまた今度

# Docker
https://www.docker.com/
> Docker is the world’s leading software containerization platform

ソフトウェアコンテナ内のアプリケーションのデプロイメントを自動化するオープンソース・ソフトウェア

↑うーんとどういうこと？ｗ

仮想化にはコンテナ型仮想化とハイパーバイザー型仮想化などがあるらしい。

ハイパーバイザー型は複数のOS(ユーザー)が一台のハードウェアに乗せることが可能。ホストOSとゲストOS(仮想化されたコンピュータのこと)が別々に存在、ハイパーバイザーというそのためプロセッサーやメモリ使用時間、ストレージの容量などは分割される

一方Dockerはコンテナ型仮想化
---
Xcode8でFirebaseのCrashReportingが動かなかった時の解決法

Xcode8でFirebaseのCrash Reportingを使おうとしたらハマったのでその時の話をメモっときます。 

##環境
Xcode 8.1
CocoaPods 1.1.0
Firebase 3.9.0
FirebaseAnalytics 3.5.1
FirebaseCore 3.4.4
FirebaseCrash 1.1.3
## (1) Firebaseの導入  

まずは、https://firebase.google.com/docs/ios/setup に書いてある通りにFirebaseを導入していきます。  

その後、iOSシミュレータ上で動かしてみると、以下のようなエラーが出ました。

```
<FIRInstanceID/WARNING> STOP!! Will reset deviceID from memory.
<FIRInstanceID/WARNING> Failed to fetch default token Error Domain=com.firebase.iid Code=6 “(null)”

```  
<img width="423" alt="20161121133109.png" src="https://qiita-image-store.s3.amazonaws.com/0/44218/39bce724-74b4-d7b8-13bc-0b216f570f4d.png">

明らかにうまくいってないです＞＜＞＜どうやらこれKeyChain周りのせいで発生するっぽい？ 
というのも、Xcode8のシミュレータからはKeyChainにアクセスできないというバグがあるらしいのです。。＞＜

これに対処するために、  CaoabukutuesのKeychain sharingをONにします。  
<img width="512" alt="20161121133942.png" src="https://qiita-image-store.s3.amazonaws.com/0/44218/3f0b0b96-0217-3959-9ddb-78611ff415be.png">

これで自分は入りました。    
## (2) Crash Repotingの導入  

次に、Crash Reportingを導入します。
これも、先と同様に [https://firebase.google.com/docs/crash/ios] を眺めながら勧めていきます。  

そして、最後のスクリプトの追加をする部分、ドキュメントには以下のように書いています。

```sh
# Replace this path with the path to the key you just downloaded
JSON_FILE=Path/To/ServiceAccount.json

# Replace this with the GOOGLE_APP_ID from your GoogleService-Info.plist file
GOOGLE_APP_ID=1:my:app:id

defaults write com.google.SymbolUpload version -integer 1   # creates file if it does not exist
JSON=$(cat "${JSON_FILE}")
/usr/bin/plutil -replace "app_${GOOGLE_APP_ID//:/_}" -json "${JSON}" "$HOME/Library/Preferences/com.google.SymbolUpload.plist"
"${PODS_ROOT}"/FirebaseCrash/upload-sym

```

・・・しかし、これで実行すると下記のようなエラーが発生し、クラッシュ情報を送信することができません＞＜

<img width="512" alt="20161121144200.png" src="https://qiita-image-store.s3.amazonaws.com/0/44218/1091b098-f1ab-28e4-c504-3ce8434291e3.png">

そこで、スクリプトを以下のように書き換えます。

```sh
# Replace this path with the path to the key you just downloaded
JSON_FILE=Path/To/ServiceAccount.json

# Replace this with the GOOGLE_APP_ID from your GoogleService-Info.plist file
GOOGLE_APP_ID=1:my:app:id

defaults write com.google.SymbolUpload version -integer 1

JSON=$(cat "${JSON_FILE}")
/usr/bin/plutil -replace "app_${GOOGLE_APP_ID//:/_}" -json "${JSON}" "$HOME/Library/Preferences/com.google.SymbolUpload.plist"
"${PODS_ROOT}"/FirebaseCrash/upload-sym "${JSON_FILE}"

```

これで自分は動きました。  

実際にassert(false)を実行しクラッシュさせた後、この行を消して再起動すると・・
<img width="422" alt="20161121144703.png" src="https://qiita-image-store.s3.amazonaws.com/0/44218/515f6d39-d42d-e1e7-3701-6041e6b92363.png">
クラッシュ情報が送信できました！
20分程度経つと、無事ダッシュボードにも反映されました。よかった。
### 参考  
http://stackoverflow.com/questions/39210860/firebase-upload-symbol-files-build-error-unexpected-argument-serviceaccount-js
https://googledevjp.blogspot.jp/2016/09/ios-10-xcode-8-and-swift-3.html
http://dev.classmethod.jp/smartphone/ios-10-keychain-problem/
カメラロールから複数画像取得してPDFに変換して開くまでのライブラリ作った

#注意事項


ベースとしているオリジナルライブラリの導入が必須です。
それも配布しますが、UIKitを多分に変更するので気をつけてください。

#動き
![alt](http://yukibochi.boo.jp/Qiita/img/gif/pdf1.gif)

#実装コード

ただし見てわかるように非常に独自仕様

```swift

class ImagePickViewController: ADNavigationController {
    
    //今回のキモ、カメラロールから複数選択を行う
    let imagePicker = RMImagePicker()
    //Androidっぽいボタン
    let okButton = ADMainButton(icon: "done")
    
    //画面の設定を行う
    override func setSetting() {
        //ナビゲーションバーに表示されるタイトル
        title = "カメラロール"
    }
    
    //UIの設定を行う
    override func setUISetting() {
        //ボタンのアクションを設定 ここではimagePicker.endPickingImage()
        okButton.addAction(imagePicker.endPickingImage)
        
        //endPickingImage()を呼ぶと画像の配列で呼ばれる images:[UIImage]
        imagePicker.completion = {images in
            
            //[UIImage] の extension,PDF に変換 data:NSData
            images.createPDF {data in
                
                //NSData の extension,name で保存 url：NSURL
                data.save("tmp.pdf") {url in
                    //UIDocumentInteractionController を表示する　show(from:RMViewController,_ url:NSURL)
                    RMDocumentController.show(self,url)
                }
            }
        }
    }
    
    //UIの追加を行う
    override func addUIs() {
        addSubview(imagePicker.view)
        //メインボタンをokButtonに設定
        mainButton = okButton
    }
    
    override func setLoadControl() {
        //imagePickerのサイズをfullContentsFrameに
        imagePicker.frame = fullContentsFrame
    }
}


```

#ダウンロード

ちょっと待って


#RM

そのうちライブラリの方の解説も作る
でもまだ仕様が安定しないから、もうちょっと経ってからで
ボックス内の縦横中央に程よく文字を配置する

小ネタです。

![スクリーンショット 2016-11-23 11.53.44.png](https://qiita-image-store.s3.amazonaws.com/0/21634/16c9cb5f-0017-172c-75d4-763663a23e0b.png)

こんなの作ってくれ、て言われたとき。いきなり回答ですが。

```jade:sample.jade
.centered そんなに
```

```stylus:style.styl
.centered
  border 1px solid  #333
  width 100px
  height 100px
  display table-cell
  vertical-align middle
  text-align center
  box-sizing border-box
  line-height 2
  font-size 14px
  // 中央にずらす
  letter-spacing s = 1.5em
  padding-left s　// letter-spacing = padding-left
```

letter-spacingとpadding-leftを同じ数値にするといい感じになります。

http://codepen.io/kobaatsu/pen/RoVZVG
WPFの画像相互コンバーター。BitmapImageからBitmapSourceへの変換。

![matrix.jpg](https://qiita-image-store.s3.amazonaws.com/0/147863/33b70897-349f-53c6-e1de-c002712bef04.jpeg)


###簡単にCastできることもある。
	public BitmapSource BitmapImage2BitmapSource(BitmapImage original) {
			return (BitmapSource)original;
		}
Windows > link > System Power States

http://qiita.com/7of9/items/e96ab21d332499700dbf
の記事を作成中に気になった状態の英語表記。

”OSが終了処理を完了しているが、「電源OFFできます」のような表示状態になっていて、電源はまだ供給されている”という状態をどういう用語とするか。

検索していて、以下を見つけた。

https://msdn.microsoft.com/ja-jp/library/windows/desktop/aa373229(v=vs.85).aspx

Soft Offが該当の用語だろうか。
Circle CI でgh-pages自動ビルドして自動デプロイ



## 事前準備

- Githubのリポジトリ作る
- Circle CIに登録
- Circle CIのプロジェクト設定から「Checkout SSH Keys」で「UserKey」を追加

## Circle.yml 

こんなん

````
machine:
  node:
    version: 6.1.0
  timezone: Asia/Tokyo

deployment:
  publish:
    branch: master
    commands:
      - npm run build
      - git config --global user.name "circleci"
      - git config --global user.email "circleci@chatbox-inc.com"
      - git rm .gitignore
      - git add public
      - git commit -m "[ci skip] build on circle ci"
      - git subtree split --branch gh-pages --prefix public
      - git push origin gh-pages:gh-pages -f
````
github > link > Closing issues via commit messages

https://help.github.com/articles/closing-issues-via-commit-messages/

> You can include keywords in your commit messages to automatically close issues in GitHub.

> Keywords for closing issues
> 
close
closes
closed
fix
fixes
fixed
resolve
resolves
resolved
Closing an issue in a different repository

...

こういう自動クローズ機能があることは知らなかった。　

問題解決の英語でresolvedは正しいのか気になって調べた時に見つけた。
UnlimitedHandをC#プロジェクトで使う

# Goal
一般的なC#プロジェクトでUnlimitedHandを制御する。
以下ではWPFプロジェクトで書いていますが、WindowsFormでもコンソールでも同じです。

# Reference

いつものリファレンス
http://reference.unlimitedhand.com/ja/unity/

# Shrinkwrap

今回も2016.11.20のバージョンです。
Unity用プラグインver.0041b、Arduino用プラグインver.0043αを使用しました。
初期設定などは[UnlimitedHandをUnityで使う]ページを参照してください

# Procedure

WPFプロジェクトを作成、UH.csを追加し、以下の修正を行う

- using UnityEngineを削除
- MonoBehaviourの継承を削除
- Debug.LogをDebug.WriteLineとかに置換する
- guessPortName関数はWindowsでいいと思う。特殊なこと(Xamarinとか？)するならよしなに
- DontDestroyOnLoadはコメントアウトでよい
- Awakeをpublicに

あとは以下のように。

```xml:MainWindow.xaml
<Window x:Class="uh_wpf.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:uh_wpf"
        Title="MainWindow" Height="350" Width="525" Closing="WindowClosing">
    <Grid>
        <Button Content="Stimulate0" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top" Click="Stimulate1Click"/>
    </Grid>
</Window>
```

Closingイベントとボタンを追加しただけ。

```cs:MainWindow.xaml.cs
using System.Windows;

namespace uh_wpf
{
    public partial class MainWindow : Window
    {
        UH uhand;
        public MainWindow()
        {
            InitializeComponent();
            uhand = new UH();
            uhand.Awake();
        }

        private void WindowClosing(object sender, System.ComponentModel.CancelEventArgs e)
        {
            uhand.Disconnect();
        }

        private void Stimulate1Click(object sender, RoutedEventArgs e)
        {
            uhand.stimulate(0);
        }
    }
}
```

UHオブジェクトの制御とボタンクリック時に刺激を流すだけ。
MonoBehaviour使わない分、初期化･開放処理を自分でやらなきゃですが、それ以外はUnityで使うのと変わらないです。
まぁUH.csでやっていることも、ただシリアル通信やっているだけですから。
UnlimitedHandをUnityで使う

# Goal
UnlimitedHandを初めて購入してから、Unityとつなぐまでを解説します。

# Reference
とりあえず公式は見ておこう。
http://dev.unlimitedhand.com/ja/

# Shrinkwrap
ハッカソン期間中、いろいろ無茶な要望をかなえていただきました、
2016.11.20のバージョンでこの記事を書いています。
Unity用プラグインver.0041b、Arduino用プラグインver.0043αです。
それ以外のバージョンでは内容が異なる場合があるかもしれませんが
たぶん最新をあてるほうがいいと思いますよ。

# 開封の儀

取りあえず箱を開けます。ビリビリ。
開封してから腕に取り付けるまでは一苦労ですが、必ず[公式の説明ページ](http://dev.unlimitedhand.com/ja/introduction/index_intro.html)を読みましょう。
説明を読みながら進めても、いろいろトラブルが起こります。況や読まずに進めてそれなりな金額を溝に捨てることもなし。
とりあえずいくつか注意すべきこととか

- 裏側についてる白いシートは必ずはがすこと
- ゲルパッドは両面のフィルム（青と透明の）ともにはがすこと
- 腕に巻いた後、剥がすときにゲルパッドが腕に残りやすいです。注意しよう
- 使い終わったら付属の台紙に乗せて保管しましょう

別に箱を開けてすぐUSB刺して電源入れても、以降の作業は問題なくできますけどね

# デバイスの初期設定
これも[公式の説明ページ](http://dev.unlimitedhand.com/ja/introduction/instLib4Arduino.html)を見ましょう。
将来的に手順が変わるかもしれないですし（ぶっちゃけもう少し簡単にしてほしい）
これまたいくつか注意点

- ライブラリのZipファイルはMacで圧縮したもののようで、Windowsで開くと文字化けするのかも？たまにミスることがありました
- ライブラリは（現時点で）それなりの頻度で更新されています
 - ぶっちゃけ現時点では、必要に応じて自分で編集したほうがいい場合もあります
- シリアル通信ウィンドウは、使い終わったら閉じましょう。
 - これが開いている間は通信を占有されます。Unityで動かないよーな時はまず確認
 - 使用するUnityプラグインと対応するバージョンのものを使いましょう

解説ページではサンプルを適当に書き込めるよとか書いてありますが、とりあえず**Serial_Unity_Quaternion**だけ書き込んでください。
以降はその前提で記事を進めます。

# Unityでつなぐ
これまた公式の。。。と書こうと思ったけど、[Unityを使う前の注意点](http://dev.unlimitedhand.com/ja/unity/update.html)くらいしか解説なかった。
というわけで少し詳細に説明をば

1. Unityでプロジェクトを新規作成
2. Edit > Project Setting > Playerを選択し、Api Compatiblity Levelを.NET 2.0に変更
2. UH.csをAssetsの好きなところにおく
2. Emptyオブジェクトを作成し、Add ComponentからUH.csを設定する
3. とりあえず実行

Inspectorビューに現在のUnlimitedHandからのセンサ値が表示されれば成功です。
が、たぶん取れないと思います。
というのも、UH.csにて値を取得するかのフラグを初期化時にすべてfalseにするという謎実装があるので
起動後にInspectorビューからUpdate Xxxx Flgみたいなチェックを入れるととれるようになると思います。
（上の仕様は現在のバージョンでの話で、ひとつ前のバージョンではデフォルトで取れていたんだけどなぁ）

ちなみにUHを設定するオブジェクトは1つだけにしてください。
UH.csにてDontDestroyOnLoad設定されているので、明示的に破棄されないと設定したオブジェクトでUnlimitedHandとの通信を占有されます。
シーンをまたぐ場合は遷移先のシーンでFindObjectOfTypeとかを使ってオブジェクトを取得します。
SQLインジェクション対策(PHP)

#■PHP（PDO）

##基本的なルールは以下参照
[PHPでのSQLインジェクション対策はどのように行いますか？](http://ja.stackoverflow.com/questions/5053/php-%E3%81%A7%E3%81%AE-sql-%E3%82%A4%E3%83%B3%E3%82%B8%E3%82%A7%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3%E5%AF%BE%E7%AD%96%E3%81%AF%E3%81%A9%E3%81%AE%E3%82%88%E3%81%86%E3%81%AB%E8%A1%8C%E3%81%84%E3%81%BE%E3%81%99%E3%81%8B)

##bindParamで入力値をエスケープする際に使う定義済み定数
![スクリーンショット 2016-11-22 20.25.50.png](https://qiita-image-store.s3.amazonaws.com/0/131286/95ee6e72-1e4c-ff7a-e1ce-f24e338ad6ae.png)

(出典)　http://php.net/manual/ja/pdo.constants.php


##bindParamする型がfloatの場合

###(問題)　PDO::PARAM_FLOATがない
上述のが画像を見ると見事に「PDO::PARAM_FLOAT」が存在しない。
例えば、 UPDATE tableName SET kawase = $usdjpy に 
$usdjpy = 101.10 をあてはめたい場合はどうすればいいか？

###(対策）PDO::PARAM_STR を利用すればOK。

PDO::PARAM_STRでbindすれば問題ない。
MySQLの動作しか確かめていないが、
例えば、 UPDATE tableName SET kawase = '101.10'となっても、
MySQL側でFLOAT型と判断して、計算してくれる。

同様に、「UPDATE tableName SET usdPrice = 10000/$usdjpy 」
のような場合でも、PDO：：PARAM_STRでbindしても、
「UPDATE tableName SET usdPrice = 10000/'101.10' 」
を
「UPDATE tableName SET usdPrice = 10000/101.10 」
と読み替えてくれる。

##実際に作成した関数

```php
$params = array(
array($name, PDO::PARAM_STR),
array($email, PDO::PARAM_STR),
);

function select_InjectionSafe($sql,$params = array() ){

  $stmt = $this->pdo->prepare($sql);

  if(count($params) > 0){
    for($i=0;$i < count($params);$i++){
      $stmt -> bindParam($i+1,$params[$i][0],$params[$i][1]);
    }
  }
  $stmt->execute();
  return ...
}
```
Node.jsにおけるuse strictの挙動

# Node.jsにおけるuse strictの挙動

## はじめに

+ http://qiita.com/knknkn1162/items/0fa7dcb6a735125d21db の続きです。メモがてら残しておきます。

+ Node.js v7.1.0で検証しました。

## use strictの振る舞いかた

+ プリミティブ型やundefinedは、use strictを用いると、ボックス化(Objectオブジェクトに変換されること)されません。そのまま、型を返すことによって速度向上につながるようです。

```js

function foo() {
    console.log(typeof this);
}
 
function bar() {
    "use strict";
    console.log(typeof this);
}

 //要素ごとに型を確かめる
//this として関数に渡されたプリミティブ型はObjectとして取り扱われる
//object object object object object function object object
[123, "str", true, Symbol('abc'), [], ()=>{}, undefined, null].map(value => {return foo.call(value);} );

//use strictをthisとして関数に渡された値は、
//オブジェクトに閉じ込められることなく、そのまま関数に渡される
//number string boolean symbol object function undefined object
[123, "str", true, Symbol('abc'), [], ()=>{}, undefined, null].map(value => {return bar.call(value);} );
```

Note) nullの型をtypeof演算子はobjectと報告しているが、紛らわしいことに、ECMAScript標準規格によれば、これも独自の型(グローバルオブジェクトのプロパティ)である[^undefined]。

[^undefined]: 一応、[Effective JavaScript](https://www.amazon.co.jp/Effective-JavaScript-David-Herman/dp/4798131113) 項目4にも同じようなことが書いてあります。


+ 即時関数の4種類の呼び出しの比較。

```js
(function () {
  console.log(this); //thisはグローバルオブジェクト
})();


(function () {
  "use strict";
  console.log(this); // undefined
})();

//ここのthisは{}:module.exportsオブジェクトなので、
//console.logの引数のthisはレシーバーのオブジェクト自体,つまりmodule.exportsオブジェクトとなる。
(function () {
  console.log(this); 
}).call(this);

//上記と同じ。
(function () {
  "use strict"
  console.log(this); // this {}:module.exportsオブジェクト
}).call(this);
```

## 参考URL
+ http://analogic.jp/use-strict/
+ https://developer.mozilla.org/ja/docs/Web/JavaScript/Strict_mode
環境変数のPATHを使い、「ファイル名を指定して実行」で簡単にソフトを起動する

※いちいちスタート画面で探して起動するのが面倒なのでメモ兼tips投稿。
## 動作環境
- Windows 7 Home Premium 64bit SP1(Build 7601)

※Windowsであれば基本的に使えるはずです。

## 設定
### PATH用のフォルダを作成
PATH用にフォルダを作成。場所は問いませんが、日本語の使用はあまり推奨しません(空白も望ましくないかもしれません。)。
※新規フォルダ、空のフォルダにしてください。何か入ってると反応してしまうことがあります。

今回は``` C:\PATHDIR\SysCyberMan ```に指定します。(```SysCyberMan```は自分のユーザー名です。場所は任意でOKです)

### コントロールパネルから環境変数を変更
※Windowsのバージョンによって操作が異なる可能性がありますので各自で確認してください。
1. ユーザーアカウントを開き、「環境変数の変更」をクリック
2. 「[ユーザー名] のユーザー環境変数(U)」のPATHを選択し、「編集(E)...」をクリック※PATHの環境変数がない場合は、「新規(N)...」をクリックし、「変数名(N):」の部分に```PATH```を入力
3. 変数値に先程作成したフォルダを追加。もし、変数値に何か入ってる場合は、```;```を追加してフォルダまでのディレクトリを挿入。(例: ```C:\Program Files\Java\jdk1.8.0_101\bin; C:\PATHDIR\SysCyberMan```)
4. 「OK」を押して適用。環境変数のウィンドウも同様に。

### フォルダにショートカットもしくはソフト本体を追加
1. PATHに適用したフォルダにショートカット、もしくはソフト本体をフォルダに作成。ショートカットを推奨します。
2. ショートカット等の名前をお好みの名前に変更してください。その名前が実行コマンドになりますので起動しやすいものに変更してください。

## 動作確認
※基本的に再起動無しで使えますが、反応しない場合は設定を間違えている可能性があります。
「ファイル名を指定して実行...」を開きます。ショートカットキー(```Win + R```)でもOKです。
1. 先程指定したショートカットの名前を打ち込みます。
2. ソフトが開けば成功です。

## おまけ
先程と同じような方法でユーザー単位でなく、システム全体にも設定できます。
その場合は、コントロールパネルからシステムとセキュリティから、システムの詳細設定をクリックし、環境変数をクリックするとシステム環境変数が編集できるようになります。あとは基本的に操作は一緒です。
コントロールの高さや幅にWindowの高さや幅をバインドする方法

Frameなんかを使っていてそのFrameのサイズが動的に変わる場合、
Frameをはめ込んでいる親ItemのサイズもFrameにつられて変わってしまう。

そんな時とりあえず親ItemのサイズはWindowのサイズに合わせたいってことがあると思いますが
こんな感じでWindowのサイズをバインドできます。

コードは幅をバインドさせてるけどHeightに変えれば高さをバインドできます。
また、AncestorTypeのx:TypeにGridを指定すればWindowじゃなくGridをバインドさせることができます。

```xml
<StackPanel Width="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}, Path=Width}">
    <Frame NavigationUIVisibility="Hidden" Name="XXXX" Content="{Binding XXXXPage}" />
</StackPanel>
```
C#で数学パズル - 二乗して回文となる非回文数を求める



二乗すると回文数となる数で、二乗する前の数が回文でない正の整数を求めるプログラムを書いてみました。

回文数とは、21512 のように、逆から読んでも同じ数になる数字のことです。

## C#のコード

```csharp:PalindromicSquare.cs
    class Program {
        static void Main(string[] args) {
            using(new Timewatch()) { 
                var solver = new PalindromicSquare();
                foreach (var n in solver.Solve(100000000)) {
                    Console.WriteLine($"{n} * {n} = {(long)n * n}");
                }
            }

        }
    }

    public class PalindromicSquare {
        private bool IsPalindrome(long num) {
            string s = num.ToString();
            int len = s.Length;
            int rx = len - 1;
            int lx = 0;
            while (lx < len / 2)
                if (s[lx++] != s[rx--])
                    return false;
            return true;
        }

        public IEnumerable<int> Solve(int maxnum) {
            for (var i = 1; i <= maxnum; i++) {
                if (IsPalindrome((long)i * i) && !IsPalindrome(i))
                    yield return i;
            }
        }
    }
    
    public class Timewatch : IDisposable {
		private Stopwatch sw = new Stopwatch();

		public Timewatch() {
			sw.Start();
		}
		public void Dispose() {
			sw.Stop();
			Console.WriteLine($"{sw.ElapsedMilliseconds}ミリ秒 (約{sw.Elapsed.TotalSeconds:#.0}秒)");
		}
	}
```

PalindromicSquareクラスがその解を求めるクラスで、Solveメソッドは、`IEnumerabl<int>`を返すメソッドとしています。

少しでも速くなるように、回文かどうかを判定する`IsPalindrome`では、文字列を反転させ比較するのではなく、文字列の両端から内側に向かって比較するようにしています。

また、Solveメソッドの中では、`IsPalindrome((long)i * i)`を`IsPalindrome(i)`よりも先に呼び出すようにしています。

iが非回文である確率よりも`i * i`が回文となる確率の方が低いはずですから、以下のコードよりもメソッドの呼び出し回数が減り多少速くなります。

```csharp
      if (!IsPalindrome(i) && IsPalindrome((long)i * i))
          yield return i;
```

このプログラムでは、100000000以下の値を対象にしました。
手元のPCだと、30秒弱で答えが求まりました。

これよりも大きな値を対象にすると、もっと速度を上げる必要がありますが、処理速度を上げるには根本的にアルゴリズムを考え直す必要がありそうです。
残念ながら、その答えを持ち合わせていません。

Solveメソッドは(IsPalindromeも含めて)、LINQ使えば、もっと簡潔に書けると思います。

なお、このプログラムでは、Timewatchというクラスを定義し、簡単に時間計測ができるようにしています。


## 結果

<pre>
26 * 26 = 676
264 * 264 = 69696
307 * 307 = 94249
836 * 836 = 698896
2285 * 2285 = 5221225
2636 * 2636 = 6948496
22865 * 22865 = 522808225
24846 * 24846 = 617323716
30693 * 30693 = 942060249
798644 * 798644 = 637832238736
1042151 * 1042151 = 1086078706801
1109111 * 1109111 = 1230127210321
1270869 * 1270869 = 1615108015161
2012748 * 2012748 = 4051154511504
2294675 * 2294675 = 5265533355625
3069307 * 3069307 = 9420645460249
11129361 * 11129361 = 123862676268321
12028229 * 12028229 = 144678292876441
12866669 * 12866669 = 165551171155561
30001253 * 30001253 = 900075181570009
64030648 * 64030648 = 4099923883299904
11764ミリ秒 (約11.8秒)
</pre>

-------------------------
この記事は、Gushwell's C# Programming Pageで公開したものを加筆・修正したものです。
Go事始めとGOPATHについて[macで]

##0. install

備忘のために。

```bash
brew install go
go version 
# => go version go1.7.3
```

##1. GOPATH

https://github.com/astaxie/build-web-application-with-golang/blob/master/ja/01.2.md

とりあえずこれを読む。
`GOPATH`はgoで開発をする際に使われる環境変数

```bash
mkdir /User/yourname/mygo
echo "export GOPATH=/User/yourname/mygo" >> ~/.zshrc
echo 'export PATH="$GOPATH/bin:$PATH"' >> ~/.zshrc
source ~/.zshrc
```

- goの開発をおこなうディレクトリを決める(e.g.> /User/yourname/mygo)。
- bashrcやzshrcにGOPATHを設定する
- 作成した/取得してきたGoアプリが動作するために、${GOPATH}/binにPATHを通しておく。
- あとはいろいろなチュートリアルを読めばなんとなくわかる。`go install`,`go build`とか`go get`とか、、、
Serverless Frameworkを使ってみた

# Serverless Framework
HTTPSでデータを受けるWebAPIを作成する必要がありAPI Gatewayを使うと安く簡単にできそうな気がした。
せっかくなので最近噂のServerless Frameworkを使ってみた。
自分用に手順をまとめておく。
Qiitaデビュー(^_^;)

##serverless frameworkのインストール
インストールにはnpmやnode.jsが必要らしい。
yumで入れると古いらしいので、↓こちらを参考にインストール。
http://qiita.com/nki2/items/9a15eb151a9e389af318

nvmのインストールはこっちを参考に
http://arfyasu.hatenablog.com/entry/2016/01/26/212543

```
 # yum install git
 % git clone https://github.com/creationix/nvm.git ~/.nvm && cd ~/.nvm && git checkout `git describe --abbrev=0 --tags`
```

どうもnvmがbashスクリプトなので、bash前提らしい。
tcsh使いのヲレにどーしろと orz

しかたないので、bash立ち上げて作業。

```
 % bash
 $ . .nvm/nvm.sh
 $ nvm --version
 0.32.1
```

入れられるバージョン確認

```
$ nvm ls-remote
```

いっぱいあってどのバージョン入れていいのかわかんない…
↓ここ見たらv6.9.1 LTS が推奨って書いてあった。
https://nodejs.org/ja/

```
$ nvm install v6.9.1
```

**なんか自分のホームディレクトリの下にがんがんプログラムが入って気持ち悪い(/_;)**
結局nodeとかnpmは以下のフォルダに入るのでPATH通しとく。
`/home/ikeda/.nvm/versions/node/v6.9.1/bin/`

ようやくserverless frameworkをインストール。

```
% npm install -g serverless
```

AWS CLIも準備
pipアップグレード

```
# pip install --upgrade pip
# pip install awscli
```

AWS CLI設定

```
% aws configure
AWS Access Key ID [None]: xxxxxxxxxxxxxxxxx
AWS Secret Access Key [None]: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Default region name [None]: ap-northeast-1
Default output format [None]: json
```

##serverless frameworkを使ってみる
bashを起動。
```
% bash
```

使い方の詳細はドキュメント
https://serverless.com/framework/docs/

###プロジェクト作成

```
$ mkdir work
$ cd work
$ sls create --template aws-python --name Serverless-test 
Serverless: Generating boilerplate…
 _______                             __
|   _   .-----.----.--.--.-----.----|  .-----.-----.-----.
|   |___|  -__|   _|  |  |  -__|   _|  |  -__|__ --|__ --|
|____   |_____|__|  \___/|_____|__| |__|_____|_____|_____|
|   |   |             The Serverless Application Framework
|       |                           serverless.com, v1.1.0
 -------'

Serverless: Successfully generated boilerplate for template: "aws-python"
```

雛形のままデプロイしてみる。

```
$ sls deploy
```

普通にデプロイしたらヴァージニアリージョンに作られたので、消す。

```
$ sls remove
```

改めて東京リージョンに作成する。

```
$ sls deploy --region ap-northeast-1
```

###API Gatewayも使う
雛形だとLambdaだけなので、serverless.ymlを編集してAPI Gatewayも作成してもらう。ついでにデフォルトのリージョンも設定しとく。

```serverless.yml
   region: ap-northeast-1

 events:
       - http:
           path: test
           method: get
```

で、再度デプロイ。

```
$ sls deploy
```

状態確認

```
$ sls info
Service Information
service: Serverless-test
stage: dev
region: ap-northeast-1
api keys:
  None
endpoints:
  GET - https://8bnjsplqna.execute-api.ap-northeast-1.amazonaws.com/dev/test
functions:
  Serverless-test-dev-hello: arn:aws:lambda:ap-northeast-1:954323098815:function:Serverless-test-dev-hello
```

ちゃんとendpointにアクセスすると実行結果が表示される。
【Rails】bootboxのcomfirmにおいて、改行する方法

## 概要
bootboxを使って、comfirmを表示させようとした時に内容を改行したかったのですが、わからずに少しハマってしまったので、共有します。

## 例：画面

![スクリーンショット 2016-11-23 8.13.34.png](https://qiita-image-store.s3.amazonaws.com/0/142810/e94fea3a-9553-ca74-41dc-146f2a3f61d3.png "スクリーンショット 2016-11-23 8.13.34.png")

このように「ユーザー名」と「メールアドレス」を表示する際に改行して表示するにはどうしたら良いのでしょうか？

## 結論

```CoffeeScript
# confirmを表示
bootbox.confirm
title: "以下の内容で登録しますか？"
message:
	"ユーザー名：user-1<br>
	 メールアドレス：test@com"
buttons:
	cancel: label: 'キャンセル'
	confirm: label: '登録'
callback: (result) ->
	return
		
```

#### message:の部分で、`<br>`と記述してください。
#### すなわち、HTML形式で記述することができるということです。

<br>
なぜ、ハマってしまったかというと、google chromeで表示するconfirmと記述する方法が違うからです。

以下のような通常のconfirmの場合、

![スクリーンショット 2016-11-23 8.35.38.png](https://qiita-image-store.s3.amazonaws.com/0/142810/1fa7bae5-4af8-2966-45b3-f592b3f5bd5b.png "スクリーンショット 2016-11-23 8.35.38.png")



改行する時には、`\n`と記述します。

bootboxでは **HTML形式** で記述するということを覚えておけば、色々と応用が出来ると思います。
Willcom版201HW 各種考察

# CWM導入
使用するCWMはDevRenax氏作成のHW-01E用CWMを使います。

```bash
adb reboot bootloader
fastboot oem unlock
fastboot flash recovery hogehoge.img
# fastboot boot hogehoge.imgを叩いてStock Recoveryのバックアップ作ってから書き込んだ方がいいかも
```

#root取得
一時rootを取得して`system`に`su`バイナリを書き込む形。こちらもHW-01E向けを転用して行います。

```bash
# 一時root取得用ファイルを端末に送る
adb push break_setresuid /data/local/tmp/break_setresuid
adb push unlock_security_module /data/local/tmp/unlock_security_module
adb push su /data/local/tmp/su

# 各ファイルを実行して一時rootを取得する 
adb shell
chmod 755 /data/local/tmp/break_setresuid
chmod 755 /data/local/tmp/unlock_security_module
/data/local/tmp/break_setresuid
/data/local/tmp/unlock_security_module

# systemにsuバイナリを書き込む
mount -o rw,remount /system /system
dd if=/data/local/tmp/su of=/system/xbin/su
chown root.root /system/xbin/su
chmod 6755 /system/xbin/su
exit
adb reboot
```

# SIMロック解除
SIMロック解除済のSB版201HWから抜き出した`oem info`領域を書き込むことでSIMロック解除が可能です。
__書き込み後にCWMからfactory resetを実行するので、必要なデータはあらかじめバックアップを取ってください。__

```bash
# oem info領域がどこに格納されているかを確認する
adb shell
su
cd /dev/block/platform/msm_sdcc.1/by-name
ls -l

# SDカードへ特定したoem info領域のバックアップを作成する
mount -o rw,remount / /
dd if=/dev/block/mmcblk0p1 of=/sdcard/oeminfo_backup.img

# ロック解除済のSB版201HWから抜き出したファイルを書き込んでいく
dd if=/sdcard/hogehoge.img of=/dev/block/mmcblk0p1

# バックアップしたoem info領域をPCに送り、CWMへ再起動してfactory resetを実行。これ忘れると最悪文鎮化します...
adb pull /sdcard/oeminfo_backup.img
reboot recovery
```

# Ascend P1 LTE化
Ascend P1のStock ROMを前述した`oem info`焼きと同じ要領で書き込むことで、なんちゃって海外版化することも可能。
WiFiやBluetoothが動作しないなどの各種不具合を確認しているので、あまりメリットはないと思いますが。

# まとめ
`oem unlock`走るじゃんワロタから始まった別段需要のない作業の供養ができてニッコリ。