OmniAICreator/Qiita-1.07M huggingface dataset:
Pythonで数学の勉強：代数基礎(浮動小数の誤差と数の扱い方)

# はじめに

数学のプロなら[SageMath](http://www.sagemath.org/)なんだろうが、
工学者は他と連携しやすい素のPythonの方が使いやすいだろうということで
sympyでやってみる。
場合によりscipy, numpyも使う。
といってもまずはPython上で数がどのように表されるのかを知らないといけない。

```py3
import sympy as sym
sym.init_printing() # Jupyter上でリッチな数式の表示をするためのメソッド
```

# 数論
## Pythonでの数値演算と数学における実数との差

C言語における__int64やdoubleは64bitである。
すなわち高々$2^{64}$通りの数しか表せない。
(実際もこのオーダーのはずで$2^{63}$程度というビットの無駄遣いの実装はないだろう)
__int64は**実数**に均等に分布し、範囲内では**整数環**である。
Pythonの整数は最初から多倍長整数なのでメモリが許す限り数学的な整数と遜色ない。
一方のdouble含め、並の言語における浮動小数は
1の付近では密度が濃いが$2^{64}$の付近ではスカスカになる。(相対的には同じ密度)

```py3
x = 1234567890
print(x * x * x * x * x) # 整数はオーバーフローせずに自動拡張される
```
```text
2867971860299718107233761438093672048294900000
```
```py3
f = 0
for i in range(9):
    f += 0.1
print(f)
```
```text
0.8999999999999999 # 典型的な浮動小数による丸め誤差
```
実数である0.1を浮動小数に変換するときに最も近い浮動小数に丸められるが、
それは実数の0.1よりわずかに小さい。
それが9回足すという操作によって顕在化した。
この種の誤差を回避するには符号、整数部、仮数部を持ち、
整数部と仮数部を多倍長整数にした浮動小数クラスを実装し、
手計算するように仮数部を桁合わせしてから整数による演算を行えばよい。
Pythonにはその手のクラスとして**decimal**型があるがsympyを使うので**Float**型を使う。

```py3
s = sym.Float(0)
for i in range(9):
    s += sym.Float(0.1)
print(s)
```
```text
0.900000000000000
```
```py3
s = sym.Float(1.0, 32) # 精度の指定
t = sym.Float(0.1)
s *= 10 ** 30
s += t
print(s)
```
```text
1000000000000000000000000000000.1 # 桁落ちはギリギリ起こらない
```
```py3
print(sym.Float(0.3, 30))
print(sym.Float("0.300000000000000000000000000000", 30))
```
```text
0.299999999999999988897769753748　# そもそもPythonの浮動小数を引数で渡すと精度が足りない
0.300000000000000000000000000000 # stringで渡す
```

## 有理数

とはいえ浮動小数の思想では精度以上での桁落ちは避けられず、
分配法則も成り立たないので厳密性に欠ける。
そこで**Rational**型を使う。

```py3
a = sym.Rational(1,3)
b = sym.Rational(2,5)
c = sym.Rational(4,15)
print(a + b)
print(a + b + c)
```
```text
11/15
1
```
**Rational**型は整数/整数でPythonの整数型は無限精度なので
これは数学的な有理数と同じように扱える。
つまり加減乗除や逆元などが想像通りの**体**として考えてよいということだ。
ただし大規模な演算をやろうとするとすぐに分母、分子が数万桁になって苦しくなる。

## 代数的数と特殊な数
### 冪根
```py3
a = 3 ** sym.Rational(1,4)
b = 6 ** sym.Rational(1,4)
a * b
```
$$\sqrt[4]{2}\sqrt{3}$$

べき乗はPowも使えるが\*\*のオーバーロードが楽。
浮動小数ではなく有理数を渡せば
$x^{\frac{a}{b}}=(\sqrt[b]{x})^a$に従ってある程度根号のまま計算してくれる。

### 円周率

```py3
harf_pi = sym.S.Pi / 2
harf_pi * harf_pi * sym.Rational(3, 4) + harf_pi
```
$$\frac{\pi}{2}+\frac{3\pi^2}{16}$$

```py3
sym.sin(sym.S.Pi * 2 / 3)
```
$$\frac{\sqrt{3}}{2}$$

$\pi$も有理数係数ならば**拡大体**のように扱える。
三角関数に入れれば根号で返ってくる。

### 自然対数の底

```py3
e = sym.S.Exp1
e ** 4 + 1
```
$$1+e^4$$

```py3
sym.log(sym.S.Exp1 ** sym.Rational(10, 7))
```
$$\frac{10}{7}$$

$e$は$\log$に入れると有理数の世界に戻ってくる。
近似じゃなくて厳密なのがよい。

### 虚数単位i

```py3
i = sym.S.ImaginaryUnit
j = sym.sqrt(-1) # こう書いても同じ
print(i*j)
print(sym.S.Exp1 ** (sym.S.ImaginaryUnit * sym.S.Pi)) # オイラーの等式
```
```text
-1
-1
```
$e^{i\pi}=-1$を検算。四則演算は略。

### 実数の壁

どこまでいっても所詮は有理数係数の拡大体で可算無限個の数しか表現できないので、
数学的な**実数**との間には越えられない壁があることは留意しよう。
さくらVPSサーバー上でのPython環境構築

# 環境
CentOS release 6.8

# インストールするもの
 * pyenv
 * pip

# 注意
CentOSのyumはプレインストールされているヴァージョンのPythonでしか動かないみたいです。なので、最新版のPythonをインストールしたらシステムがbreakしちゃうかもしれないのでしない方がいいとのことです。そこで、/usr/local 下にPythonをインストールするという裏技を使うそうです。イカの手順は[How to install the latest version of Python on CentOS](https://danieleriksson.net/2017/02/08/how-to-install-latest-python-on-centos/)に書いてある手順そのままです。

# 手順
development toolsをダウンロードしなきゃいけないそうです

```
# Compilers and related tools:
yum groupinstall -y "development tools"
# Libraries needed during compilation to enable all features of Python:
yum install -y zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel expat-devel
# If you are on a clean "minimal" install of CentOS you also need the wget tool:
yum install -y wget
```

次にPython2と3のソースコードをwgetしてきてそれをコンパイルします

```
# Python 2.7.13:
wget http://python.org/ftp/python/2.7.13/Python-2.7.13.tar.xz
tar xf Python-2.7.13.tar.xz
cd Python-2.7.13
./configure --prefix=/usr/local --enable-unicode=ucs4 --enable-shared LDFLAGS="-Wl,-rpath /usr/local/lib"
make && make altinstall

# Python 3.6.0:
wget http://python.org/ftp/python/3.6.0/Python-3.6.0.tar.xz
tar xf Python-3.6.0.tar.xz
cd Python-3.6.0
./configure --prefix=/usr/local --enable-shared LDFLAGS="-Wl,-rpath /usr/local/lib"
make && make altinstall
```

何をしてるのかは分かりませんがこれも一応やっておきました

```
strip /usr/local/lib/libpython2.7.so.1.0
strip /usr/local/lib/libpython3.6m.so.1.0
```

続いてpipのインストールですが、そのためのPythonスクリプトがあるようでwgetしてきてそれを実行します。

```
# First get the script:
wget https://bootstrap.pypa.io/get-pip.py

# Then execute it using Python 2.7 and/or Python 3.6:
python2.7 get-pip.py
python3.6 get-pip.py
```

これで``pip install``が使えますね！やったー！
MySQL な JIRA で絵文字などの 4byte UTF-8 文字を表示させる方法

# 概要

データベースに MySQL を使って JIRA を動かしている場合、コメント欄などに絵文字を入力して保存しようとするとエラーになってしまい保存することができません。絵文字にかかわらず、4byte UTF-8 文字は保存ができないのです。

Atlassian の公式の見解でも DB に MySQL を使用している場合は 4byte 文字はサポートしないと言っています。（JIRA 6系でも同じです）
https://confluence.atlassian.com/adminjiraserver073/supported-platforms-861253018.html

PostgreSQL を推奨していますね。（ポスグレあまり詳しくない・・・）

# 絵文字を表示させる方法

そうです。グレている場合じゃありません！
もう MySQL で JIRA たてちゃったんです！
でも、絵文字も入力したい！（表示させたい！）

そんな要望は以前からありました。そして偶然、方法を見つけました。それがこちらです。↓↓↓

🍺 を表示させたければ

```
&#x1F37A;
```

このように入力してプレビューでも保存でもしてみてください。あら不思議！？キチンと絵文字として表示されています。（されていなかったらゴメンナサイ）

実際には絵文字を入力したわけではないので、データベースに絵文字が保存できたわけではありませんが、表示させることには成功しました。

# ナンデ？

何をしたのかといいますと、絵文字を16進数による [数値文字参照](https://ja.wikipedia.org/wiki/%E6%96%87%E5%AD%97%E5%8F%82%E7%85%A7) で表示させたわけです。絵文字の16進数による文字コードは下記サイトで調べることができます。
http://www.asahi-net.or.jp/~ax2s-kmtn/ref/unicode/emoji.html

表示させたい絵文字の16進数コードを `&#x` と `;` で挟んであげれば任意の絵文字（文字）を表示させることができます。（10進数コード数値文字参照の場合は `x` は入らないので注意です）

# おわりに

これで、「🍣🍺問題」や「ハハパパ問題」の本質が解決できたわけではありませんが、絵文字などの 4byte UTF-8 をどうしても表示させたいときは有効な手段かもしれません。
Docker の mongo に mongorestore

開発環境とかでよくつかうのでメモ

- たとえば mongodump したやつとかを 開発環境で mongorestore したいんだけど、手元には mongo client 入ってないし。
- 開発環境は、例えば `mongo-dev-server` とかいう名前で mongo が立ち上がってるとして
- 手元の `dumpdata/` 以下に dump したデータがあったとして、

```
docker run --rm --link mongo-dev-server:mm \
  -v "$(pwd)"/dumpdata/:/backup \
  mongo bash -c 'mongorestore --db crowi_dev --host mm /backup'
```

db名はまあ適当です。
まあこんなかんじ。
MYDNS.JP IPアドレスの通知

#MYDNS.JP IPアドレスの通知

DNSでMYDNS.JPを使用する場合、定期的にIPアドレス通知が必要となります。

通知が無い場合は下記対応となります。
・一週間以上IPアドレスの通知がないと、エラーサイトに誘導します。
・一ヶ月以上ご利用がないと、全てのデータを削除しますのでご注意ください。

手動で実施する場合は、下記URLにアクセスしてID/PASSを入力することによって通知となります。
http://www.mydns.jp/login.html

上記では毎週アクセスする必要がある為、
定期的に通知するcronを設定します。
以下スクリプトのID,PWD部分を変更してcron.hourly配下に保存し、実行権限を付与します。
/etc/cron.hourly/mydns


```bash:mydns
#!/bin/sh

wget -O - 'http://ID:PASS@www.mydns.jp/login.html' > /dev/null
```

以上。
LambdaでEC2の指定時間停止＋起動(python)

##停止用　Lambda　設定

###Lambdaを選択
設計図の選択でブランク関数を選択

![Lambda1.png](https://qiita-image-store.s3.amazonaws.com/0/15564/9c4f4167-aba9-042b-2391-95107d7d08ca.png)



トリガーの設定は何もせず次へ

![Lambda2.png](https://qiita-image-store.s3.amazonaws.com/0/15564/1055ef80-c4c8-041e-0924-03f463eff5c9.png)

###関数の設定を行う


![Lambda3.png](https://qiita-image-store.s3.amazonaws.com/0/15564/7c79a3a0-d789-c594-b7db-a76a99dfc06f.png)

Name：StopEC2
Description：stop EC2
ランタイム：Python2.7

Lambda 関数のコードに
インスタンス停止のコードを記載。


```python:
import boto3

region = 'ap-northeast-1'
instances = ['X-XXXXXXXX']
def lambda_handler(event, context):
    ec2 = boto3.client('ec2', region_name=region)
    ec2.stop_instances(InstanceIds=instances)
    print 'stopped instances: ' + str(instances)
```

region,instancesを設定する。
上記は東京リージョン（ap-northeast-1）を指定。

Boto3の説明は以下
AWS SDK For Python (Boto3)
https://aws.amazon.com/jp/sdk-for-python/

###Lambda 関数ハンドラおよびロールを設定

ロールの新規作成を選んで、
ロール名とポリシーを設定します。

![Lambda4.png](https://qiita-image-store.s3.amazonaws.com/0/15564/24df8165-2cd2-cfba-60e7-d046228951f1.png)

![IAM_Management1.png](https://qiita-image-store.s3.amazonaws.com/0/15564/fe5eb9a3-6593-27a8-3bc7-997dd220c286.png)


ロール名はlambda_start_stop_ec2。
ポリシーにはEC2の起動・停止をを許可します。
※下記で追加したのは下半分

```json:ポリシードキュメント
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "logs:CreateLogGroup",
        "logs:CreateLogStream",
        "logs:PutLogEvents"
      ],
      "Resource": "arn:aws:logs:*:*:*"
    },
    {
        "Effect": "Allow",
        "Action": [
            "ec2:StartInstances",
            "ec2:StopInstances"
        ],
        "Resource": "*"
    }
  ]
}
```

次へを押します。

確認後で関数の作成を押します。

![Lambda5.png](https://qiita-image-store.s3.amazonaws.com/0/15564/d7e5d484-b5ed-ed8f-c1dd-2e55565858b3.png)

これで、停止用は完成です。


##起動用　Lambda　設定

起動用ですが、基本的には停止用と同じで、
関数内の「ec2.stop_instances」を「ec2.start_instances」に変更するぐらいで後は一緒です。
ロールは先ほど作成したものを選択。

![Lambda6.png](https://qiita-image-store.s3.amazonaws.com/0/15564/647e0e56-711e-f0e9-7364-772b2c1facc6.png)



##停止用CloudWatch Events　設定
###CloudWatchを選択
イベント　→　ルールの作成を選択します。

![CloudWatch1.png](https://qiita-image-store.s3.amazonaws.com/0/15564/d14d37fe-cf18-8ae8-95ad-a70c80b3833e.png)

###ルールの作成
スケジュール、cron式を選択して、実行時間を設定します。
タイムゾーンはUTCでcronの記載方法は下記参照
https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/tutorial-scheduled-events-schedule-expressions.html

ターゲットには先ほど作成してLambda関数のStopEC2を選択して「設定の詳細」をします。

![CloudWatch2.png](https://qiita-image-store.s3.amazonaws.com/0/15564/d95007ed-ba43-6b76-0b77-39c241779abc.png)

名前と説明を記載して完了です。

![CloudWatch3.png](https://qiita-image-store.s3.amazonaws.com/0/15564/46f5b400-f591-120e-7241-e88486e0cbd1.png)

##起動用CloudWatch Events　設定

設定時間、Lambda関数をStartEC2に変更する以外は停止と同じ記載でいけます。

###CloudWatch Events ログ
以下CloudWatchメニューのログにて、確認できます。

![CloudWatch4.png](https://qiita-image-store.s3.amazonaws.com/0/15564/d78b12f4-af12-efa6-f180-860eb7d3a57e.png)

以上。
max-plus代数のメモ

# 概要

maxと+の演算はmax-plus代数で記述すると結合法則とか単位元とか直感的(?)になって便利。

# 基本

$\mathbb{R}^{\rm max}=\mathbb{R}\cup\\{-\infty\\},\ \ a,b\in \mathbb{R}^{\rm max}$ に対して

- $a\oplus b=\max(a,b)$
- $a\otimes b=a+b$

# 例

${\rm f}(x)=\max(x+a,b)$, ${\rm g}(x)=\max(x+c,d)$ はmax-plus代数では
${\rm f}(x)=a\otimes x\oplus b$, ${\rm g}(x)=c\otimes x\oplus d$ となる。

${\rm f}({\rm g}(x))$を考えると $a\otimes c\otimes x\oplus a\otimes d\oplus b$ が得られるが、元の演算に戻すと
$\max(a+c+x, \max(a+d, b))$ となって一致する。

# 参考

- [Max-plus algebra](https://en.wikipedia.org/wiki/Max-plus_algebra)
jwilder/nginx-proxyがError running notify command: nginx -s reload, exit status 1とエラーを吐く

# 環境
- マシン: さくらVPS
- OS: CentOS 7
- Docker version 1.12.3
- docker-compose version 1.9.0

# 症状
[jwilder/nginx-proxy](https://github.com/jwilder/nginx-proxy) を `clone` して `docker-compose up` したところ次のようなエラーが出る

```bash
nginx-proxy          | dockergen.1 | 2017/03/07 14:38:48 Running 'nginx -s reload'
nginx-proxy          | dockergen.1 | 2017/03/07 14:38:48 Error running notify command: nginx -s reload, exit status 1
```

もちろん `curl -H "Host: whoami.local" localhost` も成功しない．

ただし次のようなdockerコマンドを直接叩くとエラーも出ず `curl` も成功する．

```bash
$ docker run --rm -e VIRTUAL_HOST=whoami.local jwilder/whoami
```

# 解決策
issueを見ると解決策があった．
https://github.com/jwilder/nginx-proxy/issues/502#issuecomment-240469453
`network_mode: bridge` を `jwilder/nginx-proxy` の設定に加えてやると確かに動作した．

# 感想
Dockerわからん
UIImageのリサイズ方法と注意点

# はじめに
UIImageをリサイズしたいと思い、とりあえず「UIImage resize」とググってみたのですが、サンプルコードを動作させると思わぬ落とし穴にハマったので、備忘録として書き残しておきます。

# 画像が粗くなる（画像が劣化する）！？
だいたい検索すると出てくるサンプルコードはこんな感じです。（Swift3.0に書き直してます）

```swift
extension UIImage {
    func resize(size _size: CGSize) -> UIImage? {
        let widthRatio = _size.width / size.width
        let heightRatio = _size.height / size.height
        let ratio = widthRatio < heightRatio ? widthRatio : heightRatio
        
        let resizedSize = CGSize(width: size.width * ratio, height: size.height * ratio)
        
        UIGraphicsBeginImageContext(resizedSize)
        draw(in: CGRect(origin: .zero, size: resizedSize))
        let resizedImage = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()
        
        return resizedImage
    }
}
```

これを実行すると、画像自体は希望のサイズにリサイズされたように見えますが、実際表示してみるとなんだか画像が粗い！？

# 原因はUIGraphicsBeginImageContext()
原因は`UIGraphicsBeginImageContext(resizedSize)`でした。
これを用いて実行すると、Retinaディスプレイのscaleの設定が無視され、事実上のpixelサイズで扱われてリサイズ処理がされてしまいます。
つまり1xの画像として書き出されてしまうということでした。

# これで解決
ということで`UIGraphicsBeginImageContext(_ size: CGSize)`のかわりに、
`UIGraphicsBeginImageContextWithOptions(_ size: CGSize, _ opaque: Bool, _ scale: CGFloat)`を使いましょう。

こちらを用いるとscaleが引数として設定されているので、Retinaディスプレイの場合も対象となるscaleを設定することで2x, 3xのような画像に対応することができます。
先ほどのコードを書き直してみます。

```swift
extension UIImage {
    func resize(size _size: CGSize) -> UIImage? {
        let widthRatio = _size.width / size.width
        let heightRatio = _size.height / size.height
        let ratio = widthRatio < heightRatio ? widthRatio : heightRatio
        
        let resizedSize = CGSize(width: size.width * ratio, height: size.height * ratio)
        
        UIGraphicsBeginImageContextWithOptions(resizedSize, false, 0.0) // 変更
        draw(in: CGRect(origin: .zero, size: resizedSize))
        let resizedImage = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()
        
        return resizedImage
    }
}
```

UIGraphicsBeginImageContextWithOptions()の第二引数のopaqueは不透明かどうかなので、画像の不透明が保証されてる場合はtrueに指定した方がパフォーマンスがよくなるようです。
第三引数のscaleには0.0を入れておりますが、0.0を指定するとmainScreenのscaleを動的に設定してくれるので、4.7inchや5.5inchにて`UIScreen.main.scale`をみて出し分ける必要はありません！

# まとめ
UIImageのリサイズ処理を検索すると結構古い記事がヒットしてしまい、`UIGraphicsBeginImageContext()`を使っている記事を参照しやすいので、現在の環境では`UIGraphicsBeginImageContextWithOptions()`を使っていきましょう。

# 参考
* https://developer.apple.com/reference/uikit/1623912-uigraphicsbeginimagecontextwitho
windowsでneovim

ようやく動きはじめました。
0.2.0ではtermコマンドがダメダメだったんだけど、0.2.2(2018/1/14現在)では快調！
でもまだ、[netrwで終了するのに時間がかかる](https://github.com/neovim/neovim/issues/6695)
とかがあるんで、これは0.3かららしいので、まだですかねえ・・windowsだと

# 動作環境
os: win7
pc:dell note 64bit

# neovimのインストール
これはhttps://github.com/neovim/neovim/wiki/Installing-Neovim
の最後のwindowsにかいてあるとおりで問題なくnvim-qtが動きました。
楽勝です。

# deinインストール
これが、install.shとなっているので困りました。
[https://github.com/Shougo/dein.vim 'dein.vim']

そこで [c:/users/me]/.vim/deinで
git clone https://github.com/Shougo/dein.vim
としたあと、次のinit.vimを[c:/users/me]/AppData/Local/nvim
に設定します。

```:bat
set nocompatible
set runtimepath+=C:/Users/me/.vim/dein/repos/github.com/Shougo/dein.vim

if dein#load_state('C:/Users/me/.vim/dein/bundle')
  call dein#begin('C:/Users/me/.vim/dein/bundle')

  call dein#add('C:/Users/me/.vim/dein/repos/github.com/Shougo/dein.vim')
  call dein#add('Shougo/neocomplete.vim')
  call dein#add('Shougo/denite.nvim')
  call dein#end()
  call dein#save_state()
endif

filetype plugin indent on
syntax enable
```

そして、nvim-qtとして、:call dein#install()
とすれば、動きました。

## python3
そうそう、deinをインストールするにはpython3もインストールしないといかんのですよね。私の場合はまだ、python2だったので、anacondaというかcondaで次のようにしています。

conda create -n py3 python=3.5
上のコマンドでpython3の環境を作って
activate py3
でpython3の環境にして
conda install neovim

nvim-qtを動かしました。

# 感触
まだ、vimrcを移行するまではいっていないのだが、どうも、windowsだと、deniteも本領を発揮できないようです。

nvimの特徴である:termコマンドが無事0.2.2になって動作しますが、!dirとすると、日本語のファイル名がばけばけです。さらに、nvim-qtとすると、小さいwindowsサイズで起動されて、いちいち大きくしてましたが、0.2.2はそんなことにならずに、きちんと動作します。

そんなわけで、そろそろ本格使用に以降しようと思います。
・・と思っていたら、なんだかnetrwがうまく動かない。これは？？？？
ググってもわかんないので、nerdtreeをインストールして代替してます。

まあ、Shougoさんがもう、nvimに移行してしまっているようなので、neobundleもあぶなくなってきたので、まあ感触をみようというとこすか。やっぱり、windowsはもう、あかんのかなあ？次はmacかあ？

#追記
未だに、いいねがついて、googleも先頭にきてたりするんで、ちょっとメンテしないといかんなあという感じですかね。
[news](https://neovim.io/news/)も見ておかないとね。
DNSキャッシュ、したくない？

# tl;dr
ラズパイでdnsキャッシュ鯖立てました。ソフトはunbound使いました。別にラズパイじゃなくてもPOSIX系マシン(LinuxとかUnixとかOSXとか)ならできそうだけどたまたま足元にラズパイが落ちてたので。

# インストール

```
sudo apt install unbound
```

以上。自前ビルドしなくていいご時世はいいね。

# 設定
ぼくの場合```/etc/unbound/unbound.conf```が設定ファイルだった。
中を見たら、どうやら```/usr/share/doc/unbound/example/unbound.conf```がexampleらしい。

ということなので

```
sudo cp /usr/share/doc/unbound/example/unbound.conf /etc/unbound/unbound.conf
```
した。
ところどころに説明があるので適度に編集。最終的にコメント行を除いたらぼくはこんな感じになった

```:unbound.conf
server:
        verbosity: 1 #冗長化の設定
        num-threads: 4 #スレッド数
        interface: 0.0.0.0 #受け入れる宛先インターフェース
        msg-cache-size: 128m #キャッシュ
        msg-cache-slabs: 4 #スレッド数を同じ数を書いとけって言われた
        rrset-cache-size: 128m #キャッシュ
        rrset-cache-slabs: 4 #スレッド数を同じ数を書いとけって言われた
        infra-cache-slabs: 4 #スレッド数を同じ数を書いとけって言われた
        access-control: 192.168.0.0/16 allow #キャッシュを教えてあげるマシン
        key-cache-size: 128m #キャッシュ
        key-cache-slabs: 4 #スレッド数を同じ数を書いとけって言われた
        neg-cache-size: 128m #キャッシュ
forward-zone:
    name: "."
    forward-addr: 8.8.8.8 #キャッシュなかったらgoogleのdnsに聞きに行く
```

# 起動
```
sudo systemctl start unbound
```

あとサービスの自動起動もさせとく

```
sudo systemctl enable unbound
```
# 使ってみる
自分のパソコンの/etc/resolve.confの先頭に```nameserver 192.168.1.1```を追記しとく（ipアドレスはラズパイの奴）

# テスト

```
$ nslookup qiita.com
Server:         192.168.1.1
Address:        192.168.1.1#53

Non-authoritative answer:
Name:   qiita.com
Address: 54.248.122.184
```

うん、とりあえずうまくいってそう。心なしか早くなった気もする。
# 参考
http://unbound.jp/
textarea内でTabキーでインデントできるようにするjs（複数行対応）

textareaでタブキーを押したときにインデントが挿入されて欲しい。
テキストエディタみたいに複数行選択してタブ押すと一括インデント、Shift+タブでインデント削除したい。

単にカーソル位置にタブを挿入するコードは出てくるものの、複数行に対応しているものがなかなか見つからなかったので作ってみました。

DEMO→ http://demo.laineus.com/textareaindent/

```js
const TAB_STR = '  '
document.addEventListener('keydown', e => {
  if (e.target.tagName !== 'TEXTAREA' || e.keyCode !== 9) return false
  e.preventDefault()
  const slct = { left: e.target.selectionStart, right: e.target.selectionEnd }
  const lineStart = e.target.value.substr(0, slct.left).split('\n').length - 1
  const lineEnd = e.target.value.substr(0, slct.right).split('\n').length - 1
  const lines = e.target.value.split('\n')
  for (const i in lines) {
    if (i < lineStart || i > lineEnd || lines[i] === '') continue
    if (!e.shiftKey) {
      // 行頭にタブ挿入
      lines[i] = TAB_STR + lines[i]
      slct.left += i == lineStart ? TAB_STR.length : 0
      slct.right += TAB_STR.length
    } else if (lines[i].substr(0, TAB_STR.length) === TAB_STR) {
      // 行頭のタブ削除
      lines[i] = lines[i].substr(TAB_STR.length)
      slct.left -= i == lineStart ? TAB_STR.length : 0
      slct.right -= TAB_STR.length
    }
  }
  e.target.value = lines.join('\n')
  e.target.setSelectionRange(slct.left, slct.right)
  return false
})
```

そして書いてて気づきましたが、Qiitaの執筆画面でもタブインデント効かないんですね。。
Railsで特定の条件下で走るバリデーションを作りたい

## ifを使用した条件分岐
例えば、bという項目がtrueの場合のみaの値は必須にしたい、とかあると思う。
if: オプションを使えばいいのだけれど、複数バリデーションまとめて判定させたい場合は、
with_optionsメソッドを使用して以下のように実装することができる。

```ruby:post.rb
class Post < ActiveRecord::Base
  # ifオプションで条件に合致する場合のみvalidatesを実行（published?はメソッド名またはmodelのboolean項目)
  validates :name, presence: true if: published?

  # 複数valitatesをまとめたい場合はwith_optionsを使用
  with_options if: :published? do
    validates :name,  presence: true
    validates :category,  presence: true
  end

  # unlessで条件に合致しない場合のみvalidatesを実行
  # lambdaを使うことで複数条件を指定できる
  with_options unless: -> { :hoge? || :foo? } do
    validates :name,  presence: true
  end
end
```
ただし、この場合、**with_optionsブロック内部で更にif: を使用してしまうと、
内部のif条件の場合にしかvalidatesが実行されなくなる。**

```ruby
  # hogeの時しかwith_options内部が実行されない
  with_options if: :published? do
    validates :name,  presence: true
    validates :category,  presence: true, if: hoge
  end

  # with_optionsで定義したものと逆のもの(この場合はunless)を使用すれば問題ない
  with_options if: :published? do
    validates :name,  presence: true
    validates :category,  presence: true, unless: 'hoge.blank?'
  end
```

ネストしたvalidationを記載するなら、メソッドを一つ作って判定させた方が良さそう。

```ruby
validates :name,  presence: true, if: :require_validation?

def require_validation?
  return true if aaa? && bbb?
  false
end
```

## onを使用した条件分岐
例えば新規登録(create)の場合のみバリデーションをかけたい時は、onオプションを使用する。

```ruby:post.rb
class Post < ActiveRecord::Base
  # createの時のみ実行
  validates :name, presence: true on: :create

  # if同様with_optionsでも指定できる
  with_options on: :create? do
    validates :name,  presence: true
    validates :category,  presence: true
  end

  # こうすることで、pattern_hogeコンテキストが渡された時のみvalidatesが実行される
  validates :hoge, presence: true, length: { maximum: 3000 }, on: :pattern_hoge
end
```

```ruby:posts_controller.rb
class PostsController < ApplicationController
  def hoge
    # pattern_hogeコンテキストを指定
    post.save(context: :hoge.save(context: :pattern_validation))
  end
end
```
KiCadでユニバーサル領域および領域上のGND/VDDを作る

前記事，[KiCadで初めて基板をおこしてみた](http://qiita.com/nobu_e753/items/47ace2bcbd985b12e1c4)の補足です．

# やりたいこと

![1.jpg](https://qiita-image-store.s3.amazonaws.com/0/156705/90b69bc8-8d82-747a-06ce-825370c42402.jpeg)

- KiCadでユニバーサル領域を作る
- ユニバーサル領域上にGND/VDDの線を這わせる

なおKiCadのバージョンは4.0.5を使いました．

# ユニバーサル領域をつくる

当たり前すぎてどこにも書いていませんが，以下の方法でやりました．

1. ユニバーサル領域とする部分は気にせずほかの部分を設計，基板レイアウトまで工程を進める
2. 部品の配置が終わったら，スルーホールをひとつ配置（既存/自作のフットプリントでもどちらでもよいです）
3. 対象を選択し「フットプリント配列を作成」

![2.jpg](https://qiita-image-store.s3.amazonaws.com/0/156705/81ebd410-6412-a944-6e4c-719b17986106.jpeg)

こんな感じでずらりと並びます．領域が複雑な形状をしている場合はひとつづず配置します．

![3.jpg](https://qiita-image-store.s3.amazonaws.com/0/156705/122ebefe-4705-1a36-b1c4-3892ae3991e6.jpeg)

# 領域上にGND/VDDをつくる

悩んだのはこちらです．やはり当たり前すぎるのかどこにも書いていません．ですが未経験者だと経験者には思いもしないところで悩むものです．GND/VDDに接続するためのフットプリントを作成してもよいのですが，個数を変えたい場合に面倒です．いろいろ試したのち，以下の手順が簡単だと思いました．

1.（同上）
2.（同上）
3. 対象のパッドを選択し「パッドを編集」
4. "パッドプロパティ"の"ネット名"に接続したいネット名を入力（回路図設計で設定した既存のネット名と合わせます）
5. 確定して元の画面に戻ると新たな未接続ネットができているので，配線する

![4.jpg](https://qiita-image-store.s3.amazonaws.com/0/156705/3a0488c2-8c7c-ec6b-d279-0572b176aa1c.jpeg)

![5.jpg](https://qiita-image-store.s3.amazonaws.com/0/156705/9a842ca5-7540-66b0-cce2-b966a571fac7.jpeg)

![6.jpg](https://qiita-image-store.s3.amazonaws.com/0/156705/e20c7b76-2611-049d-19da-d72b6569c210.jpeg)

接続するネットはGNDに限らず，名前を合わせこめばどのネットでもできます（GND/VDD以外にも特定のステータス信号を観測するテストポイントを設ける場合など）．ネット名を入力したパッドを複製すれば，目標としていたGND/VDDのラインが這わせられます．

![7.jpg](https://qiita-image-store.s3.amazonaws.com/0/156705/e0b8752b-4372-ecc4-f7b8-dc0077e0f210.jpeg)

# まとめ

KiCadでユニバーサル領域，および領域上のGND/VDDを作る手順を整理してまとめました．
direnvを使ってディレクトリごとの環境変数設定を行う

direnvを使って、そのディレクトリ下でのみ有効な環境変数を設定する。

## 1.インストール
```
$ brew install direnv
```

## 2.設定
インストール後、.bashrcまたは.bash_profileに以下の１行を追加

```
# bashの場合
eval "$(direnv hook bash)"
```

あとは環境変数を設定したいディレクトリに以下のコマンドで設定ファイルを作成する。

```
$ direnv edit .
```

そうすると、.envrcファイルが出来上がるので、中身を編集する。

```
# 一例
export HOST_URL='http://localhost:3000'
```
エラーが発生する場合はdirenv allowコマンドを実行する。

注意点として.envrc内にgit管理されるとまずい情報が載っている場合は.gitignoreに忘れずに含めること。
【手順】AWSでWindows Server 2012 R2をEC2で作成し、RDP接続するまで

# はじめに
これまで、AWSではCentOSでしか構築したことがなかったので、好奇心でWindows Server構築してみました。簡単ですが、一応まとめてみます。

# 手順
1.AWSにログイン

2.インスタンス作成
> [サービス]→[インスタンス]→[インスタンスの作成]

3.ステップ 1: Amazon マシンイメージ（AMI）
> [AWS Marketplace]→「Windows Server」と[検索]し、任意のバージョンを[選択]する。
![WS000002.JPG](https://qiita-image-store.s3.amazonaws.com/0/168635/6eb081a1-e67b-c18e-675b-fa3ca386302c.jpeg)


4.ステップ 2: インスタンスタイプの選択
> 任意のインスタンスタイプにチェックを入れ、[次の手順：インスタンスの詳細の設定]を押下し、次へ。
![WS000003.JPG](https://qiita-image-store.s3.amazonaws.com/0/168635/ec5e2c6d-7eef-d919-5189-e533d20efba1.jpeg)


5.ステップ 3: インスタンスの詳細の設定
> デフォルトで問題ないです。[次の手順：ストレージの追加]を押下し、次へ。

6.ステップ 4: ストレージの追加
> デフォルトで問題ないです。[次の手順：Add Tags]を押下し、次へ。
> 容量足りない場合は、適宜追加なりしてください。

7.ステップ 5: Add Tags
> インスタンスの名前を[値]の欄に記入し、[次の手順：セキュリティグループの設定]を押下し、次へ。
> AWSでは、インスタンスにタグをつけて管理ができます。

8.ステップ 6: セキュリティグループの設定
> RDP（ポート：3389）が空いていることを確認し、[確認と作成]を押下し、次へ。
> ここがLinuxOSと違いますね。
> セキュリティを高めたい場合は、[送信元]のIPアドレスを接続するIPアドレスに変更してください。

9.ステップ 7: インスタンス作成の確認
> これまでの設定を一通り確認して、問題なければ[作成]を押下し、次へ。

10.キーペアの作成
> [新しいキーペアの作成]or[既存のキーペアの選択]→[任意の名前]or[既存のキーペア名]→チェックボックスにチェック→[インスタンスの作成]
> これまでに、AWSの同一アカウントでキーペアを作成したことがなければ、[新しいキーペアの作成]をします。[キーペア名]は任意のものでOKです。

11.ログイン用パスワードの作成
> [サービス]→[インスタンス]→作成したインスタンスにチェック→[アクション]→[Windowsパスワードの取得]

12.デフォルトのWindows管理者パスワードの取得
> 手順10.で作成したキーの中身を貼り付けて、[パスワードの復号]を押下。
> ※インスタンス作成直後は、エラーになります。5分後くらいに行ってください。
![WS000004.JPG](https://qiita-image-store.s3.amazonaws.com/0/168635/4bf58ff2-768f-7676-5a58-7b86ce4c9454.jpeg)

13.ログイン用パスワードをメモする
> 忘れないようにメモし、[閉じる]を押下。
> 黒枠で囲まれたところに、ログイン時に必要な情報が記載されます。
> →パブリックDNS、ユーザー名、パスワード
![WS000005.JPG](https://qiita-image-store.s3.amazonaws.com/0/168635/839dc4da-6150-1ed1-0a25-3e7999e4a52e.jpeg)



14.インスタンスへの接続
>  ```Windowsキー``` + ```Rキー```→mstscを入力し、リモートデスクトップを立ち上げ、[接続]する。
> コンピュータ名：作成したインスタンスのパブリックDNS
> ユーザ名： Administrator
![WS000006.JPG](https://qiita-image-store.s3.amazonaws.com/0/168635/3f29d233-e946-dea8-3fec-1dcbe10ee4bf.jpeg)



15.接続完了！！
> 途中でセキュリティ警告が出ますが、[はい]で問題ないです。
![WS000007.JPG](https://qiita-image-store.s3.amazonaws.com/0/168635/37ba457c-e66a-ce5e-ff11-6c8b6f6f7c0d.jpeg)



# 注意点
- セキュリティグループでRDPが許可されていること（送信元も確認）
- 接続するクライアントのファイアウォールで、アウトバウンドが禁止していないこと  
→僕はここの設定（ウイルスバスター）で接続できませんでした。。。。

基本的に、作成直後はRDP接続できるはずなので、
接続できない場合は、自分のPC（クライアント）の設定を疑いましょう。
GitHubのUserPagesをカスタムドメインで運用する

# TL;DR

* GitHubユーザーに割り当てられるUserPagesを、カスタムドメイン[(s4kr4.com)](http://s4kr4.com/)からアクセス可能にした
* GitHub Pages便利！


## 準備物

* 独自ドメイン
* `(username).github.io`と名付けられたGitHubリポジトリ


## 手順

1． `(username).github.io`リポジトリを作成する

僕のGitHubユーザー名は`s4kr4`なので、リポジトリ名は`s4kr4.github.io`となる。
<img width="1021" alt="スクリーンショット 2017-03-07 20.53.29.png" src="https://qiita-image-store.s3.amazonaws.com/0/29000/455a0dd5-e0b2-e003-a216-1e70a9e36e97.png">

作成したリポジトリ：
[s4kr4/s4kr4.github.io](https://github.com/s4kr4/s4kr4.github.io)

---

2． リポジトリ直下に適当な`index.html`を放り込む

<img width="1006" alt="スクリーンショット 2017-03-07 21.28.57.png" src="https://qiita-image-store.s3.amazonaws.com/0/29000/bafeb1c2-434e-6a51-ecd3-5465ca9d421c.png">

……HTMLファイルですらないただのテキストファイルだが、この時点で[http://s4kr4.github.io/](http://s4kr4.github.io/)にアクセスしてページを見ることができるようになっている。

---

3． リポジトリの [Settings] > [GitHub Pages] > [Custom domain] にカスタムドメイン名を入力
![screencapture-github-s4kr4-s4kr4-github-io-settings-1488887788477.png](https://qiita-image-store.s3.amazonaws.com/0/29000/402bd7fb-6caf-f684-b266-5ee8e04b1cb0.png)

---

4． ドメインを取得したサービスでDNS設定

DNS設定で以下2つのIPアドレスを指すAレコードを作成する。

* 192.30.252.153
* 192.30.252.154

`s4kr4.com`を取得した[ムームードメイン](https://muumuu-domain.com/)での設定例

<img width="463" alt="スクリーンショット 2017-03-07 21.21.59.png" src="https://qiita-image-store.s3.amazonaws.com/0/29000/53e8b11f-7c78-745a-0c72-9bf24bbaf0e8.png">

DNSが反映されるのを待ち、[http://s4kr4.com/](http://s4kr4.com/)にアクセスすると、先程と同じページを見ることができる。
また、元々のURLである[http://s4kr4.github.io/](http://s4kr4.github.io/)にアクセスしても、[http://s4kr4.com/](http://s4kr4.com/)にリダイレクトされるようになっている。
![スクリーンショット 2017-03-07 21.34.31.png](https://qiita-image-store.s3.amazonaws.com/0/29000/918274f0-96da-9069-b431-b75a30ee73bf.png)


# まとめ
* お手軽に独自ドメインのWebサイトを公開し、Gitでバージョン管理もできるので、GitHub Pagesはとても便利。


# 参考

* [GitHub Pages](https://pages.github.com/)
* [Setting up an apex domain - GitHub Help](https://help.github.com/articles/setting-up-an-apex-domain/)
excel アドイン向けマクロ(3)コンマ付きで小数点を追加するマクロ EXCEL VBA for Addin "Add Floating Point With Comma""

##まずマクロ用アドインを作ります
作り方はこちらを参照
http://hamachan.info/win8/excel/addin.html
クイックアクセスツールバーに追加することでアドインのマクロが使えるようになります。
普通小数点以下のけたを追加するのはアイコンでできます。
しかし、この標準の機能はコンマが消えてしまうのです。
次にコンマのボタンをクリックすると小数点が消えてしまいます。
ということで、コンマを保ったまま小数点を追加できるマクロを作ります。

##ソース

```FomatLocalAddFloatingWithComma.BAS
Private Sub FomatLocalAddFloatingWithComma()
Dim rng As Range
Dim buf As String
Dim i As Long, i1 As Long, flag As Long, isemi, idecp As Long, strzero
Set rng = ActiveSheet.Range(ActiveCell.Address)
buf = rng.NumberFormatLocal
If buf = "G/標準" Then rng.NumberFormatLocal = "#,##0.0;[赤]-#,##0.0": Exit Sub
flag = InStr(1, buf, "##0", vbTextCompare)
If flag <> 0 Then
i = InStr(1, buf, ".", vbTextCompare)
isemi = InStr(1, buf, ";", vbTextCompare)
i1 = Len(buf)
idecp = (isemi - i - 1) + 1
strzero = CStr(String(idecp, "0"))
rng.NumberFormatLocal = "#,##0." & strzero & ";" & "[赤]-#,##0." & strzero
End If
End Sub
```
TensorFlowで絵を描いてみた（機械学習名古屋第９回勉強会）

# 目次

* 経緯
* 画風を変えるアルゴリズム
* はまりどころ

（TensorFlow成分はほとんど無し）

---
# 自己紹介・近況
* 名前: 中西克典
* 所属: 有限会社 来栖川電算（バイト）
* twitter: @n_kats_
* 発表は今回で2回目。（前回はfastTextの話）
* 昔は数学をしていた

---
# 経緯・目的

* AIっぽいことをしたい
* 何ができるとAIっぽいか。創造的なことができるとそれっぽい
* 絵を描かせてみよう

---
# 技術
関連する技術が活発に研究されている。
有名なもので、

* DCGAN
* pix2pix

など（ただし、細かい工夫があって難しそう）

---
# したこと
画風を変換するアルゴリズムをTensorFlowで書いた。

日本だと、mattyaさんのchainer-goghが有名だと思う。
これを参考にTensorFlowで書いてみた。[https://github.com/n-kats/tf-gogh](https://github.com/n-kats/tf-gogh)

## 参考リンク
* [https://research.preferred.jp/2015/09/chainer-gogh/](https://research.preferred.jp/2015/09/chainer-gogh/)
* [https://github.com/mattya/chainer-gogh](https://github.com/mattya/chainer-gogh)

---
# 画風を変換するとは
元画像と画風画像を用意し、元画像の色合いなどを画風画像の色合いにする。

---
![out_720x480.png](https://qiita-image-store.s3.amazonaws.com/0/51820/bcfe4e33-82b6-601d-0ad0-1b0f65aed188.png)

---
# 使い方

```
git clone https://github.com/n-kats/tf-gogh.git
cd tf-gogh
pyenv install 3.6.0
pyenv virtualenv 3.6.0 benkyoukai
pyenv local benkyoukai
pip install -U -r requirements.txt
wget https://www.dropbox.com/s/0cidxafrb2wuwxw/nin_imagenet.caffemodel
python main.py \
  -m nin \
  -i 元画像パス \
  -s 画風画像パス
```

---
# 仕組み（一部単純化しています）

CNNを用いた、画像のある特徴量$F(X)$を用意する。（$X$は画像）

画像$X$が元画像$X_\text{orig}$からどれだけ異なるかを特徴量の差のユークリッド距離で表す。（【追記】コンテンツ誤差）

```math

L_\text{orig}(X)  = \left|\left| F(X) - F(X_\text{orig})\right|\right| ^2.

```

画風の方は・・・

---

# そもそも画風って何よ？

---
# 画風をどう扱うか
CNNの特徴量は、TensorFlowの言葉で大雑把に言えば、shapeが[高さ, 横幅, チャンネル数]のテンソルで表される値。
これを次元がチャンネル数と等しいベクトルが高さ×横幅だけあると考える。
これらのベクトルの分布を画風だと考える。

実際には、平均や共分散行列のようなもので数値化し、画風がどれだけ画風画像から異なるかを表す関数$L_\text{style}(X)$を作る。

---
# 学習
## 何を学習するのか
機械学習がすることは、アルゴリズムで良いパラメータを見つけること。
絵を描くということは、各ピクセルの色の値を決めること。

絵を表すshapeが[高さ, 横幅, 3]の変数を学習で良いものにしていく。
（特徴量などは学習しない）

---
## 損失関数
作成する画像が元画像に似ていながら、画風画像と近い画風であってほしい。

```math

L(X) = \alpha L_\text{orig}(X) + \beta L_\text{style}(X).

```
というように単純に係数をつけて足す。

## 学習法
tf.train.AdamOptimizerというものを使う。

---
# その他
## 画像の特徴量
特徴量は画像識別のCNNで現れる途中の層を使う。
有名なモデルは学習済みのパラメータが公開されているので、それを使う。

* NIN
* VGG
（CNNならどうにかなるはず）

NINを用いると速いが、出来上がる画像は微妙。
VGGを用いると遅いが、繊細な画像ができる。
（実は、パラメータの読み込みにchainerを使った）

---
# はまりどころ

* 学習レートなどのパラメータを自分で適当につけても簡単には行かない。（先人のパラメータをそのまま使いましょう）
* 学習済みモデルを正しく使えていなかった。（opencvはBGR、pillowはRGB。魔法の数値を引く）
* VGGで動作確認すると時間を取られる。（速いNINからすべきだった）

---
# 覚えて帰ってほしいアイデア
* 画像の各ピクセルの値を学習する
* 学習済みモデル（特徴量）から新しい損失関数を作る
* 画風を特徴量の分布で解釈する
ACCESSはマイクロソフトから冷遇されているのか？

[FieldAttributeEnum](https://msdn.microsoft.com/ja-jp/library/office/ff192118.aspx)
魚拓[http://megalodon.jp/2017-0307-2058-57/https://msdn.microsoft.com:443/ja-jp/library/office/ff192118.aspx]
インデックスキーを決めるためにはAttributeを決める必要があるのですが、
このときのオートナンバー型の定数は
DAO Enum FieldAttributeEnum
のメンバーです。
しかたがないのでF2でオブジェクトブラウザーで見てみます。
**Const dbAutoIncrField = 16 (&H10)**　
***Const dbDescending = 1***
***Const dbFixedField = 1***
**Const dbHyperlinkField = 32768 (&H8000)**
Const dbSystemField = 8192 (&H2000)
Const dbUpdatableField = 32 (&H20)
Const dbVariableField = 2
dbAutoIncrField がオートナンバー型です。またハイパーリンクのフィールドを作るには
dbHyperlinkField
を使います。
With Tbl
Set fld = .CreateField("ID", dbLong)
fld.Attributes = dbAutoIncrField
.Fields.Append Object:=fld
End With
こんな感じです。

　しかし、このメンバー、なんと定数では同じなものがあるわけです
　しかも解説がないのです。
　この解説を出すには定数で検索するとよいようです。
[Field.Attributes プロパティ (DAO)](https://msdn.microsoft.com/ja-jp/library/office/ff197380.aspx)

定数
dbAutoIncrField
新しいレコードのフィールド値は、一意の長整数型の値に自動的に増分され、変更はできません (Microsoft Access ワークスペースでは、Microsoft Office Access データベース エンジン データベース テーブルでのみサポート)。＜オートナンバー型の記述なし・・・これでは検索できない

dbDescending
フィールドを降順 (Z ～ A、100 ～ 0、ん～あ) で並べ替えるオプションで、これは、Index オブジェクトの Fields コレクションの Field オブジェクトのみに適用されます。この定数を省略すると、フィールドは昇順 (A ～ Z、0 ～ 100、あ～ん) で並べ替えられます。これは、Index フィールドおよび TableDef フィールドの既定値です (Microsoft Access ワークスペースのみ)。 

dbFixedField
フィールド サイズは固定です (数値フィールドの既定)。
dbHyperlinkField
フィールドにはハイパーリンク情報が含まれます (メモ型フィールドのみ)。

dbSystemField
レプリカのレプリケーション情報が保存される、削除できないタイプのフィールドです (Microsoft Access ワークスペースのみ)。

dbUpdatableField
フィールド値を変更できます。

dbVariableField
フィールド サイズは可変です (テキスト フィールドのみ)。

でもこちらには値はない。

###こんな重要な変数で不完全な記述しかない。
Linux　リモートユーザー追加の手順メモ

**Amazon Linux にユーザーを追加したときのメモ**

# サーバー側作業
## rootユーザーでユーザー追加
```
# useradd hogeuser
```

## 新規追加したユーザになり設定
```
# su - hogeuser
$ mkdir ~/.ssh
$ chmod 700 ~/.ssh

# 鍵の作成
$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/hogeuser/.ssh/id_rsa): (Enterで次へ)
Enter passphrase (empty for no passphrase): (パスフレーズ入力)
Enter same passphrase again: (パスフレーズ再入力)
Your identification has been saved in /home/hogeuser/.ssh/id_rsa.
Your public key has been saved in /home/hogeuser/.ssh/id_rsa.pub.

$ cd ~/.ssh
$ chmod 600 id_rsa.pub
$ mv id_rsa.pub authorized_keys
```
- パスフレーズ無しでログインしたい場合はパスフレーズ入力は Enter のみ

# クライアント作業
## 接続元のクライアントPCに秘密鍵をもっていってログインする準備
- サーバーで作った秘密鍵(/home/hogeuser/.ssh/id_rsa)を接続元のクライアントPCに持って行く( 例：himitsu-hogeuser.pemとして保存する)
- 保存した秘密鍵のパーミッションを変更する。

```
chmod 600 himitsu-hogeuser.pem
```
## ログインしてみる
```
ssh -l hogeuser -i himitsu-hogeuser.pem （ログインしたいサーバーホスト or IPアドレス）
```
- パスフレーズを入力した場合は、パスワードプロンプトが表示されるので鍵を作成する時に登録した
パスフレーズを入力すればログインできる。
# 作成したユーザーがsudoユーザーとする
- サーバー側にてrootユーザで作業
- (例)以下の様な /etc/sudoers.d/hogeuserファイルをつくる

```
hogeuser ALL = NOPASSWD: ALL
```
- ユーザー名を間違わないように注意！
- /etc/sudoers.d/hogeuser のパーミッション/オーナー設定

```
chmod 440 /etc/sudoers.d/hogeuser
chown root:root /etc/sudoers.d/hogeuser
```


- 以上です。
gulp-imagemin で pngquant ENOENT というエラーの対処法

# gulp-imagemin と imagemin-pngquant を入れても動かない

gulp環境を作り直したら画像軽量化のタスクでエラーが出てしまいました。

```
events.js:160
      throw er; // Unhandled 'error' event
      ^
Error: spawn /Users/dada/.nodebrew/node/v6.10.0/lib/node_modules/imagemin-pngquant/node_modules/pngquant-bin/vendor/pngquant ENOENT
    at exports._errnoException (util.js:1022:11)
    at Process.ChildProcess._handle.onexit (internal/child_process.js:193:32)
    at onErrorNT (internal/child_process.js:359:16)
    at _combinedTickCallback (internal/process/next_tick.js:74:11)
    at process._tickCallback (internal/process/next_tick.js:98:9)
```

情報を漁ったらstackoverflowでこんな情報がありました。

>「pngquant ENOENT はそのディレクトリにpngquantが無いって意味だよHAHAHA」（意訳）

## pngquant のバイナリを探す

node_modules/ の中を探してみると pngquant は存在していて、バイナリファイルもちゃんと入っていました。僕の場合は下記のディレクトリです。

`/Users/dada/.nodebrew/node/v6.10.0/lib/node_modules/pngquant/node_modules/pngquant-bin/vendor/pngquant`

## シンボリックリンクを作って対処

それなら imagemin-pngquant が探そうとしている場所にシンボリック作ってやればいいじゃないかと試してみたら上手くいきました。
ディレクトリ名は各々の環境にあわせて書き換えてください。

```bash
$ cd /Users/dada/.nodebrew/node/v6.10.0/lib/node_modules/imagemin-pngquant/node_modules/pngquant-bin/vendor
$ ln -s /Users/dada/.nodebrew/node/v6.10.0/lib/node_modules/pngquant/node_modules/pngquant-bin/vendor/pngquant ./pngquant
```

これで問題無くコマンドが通るようになりました。

## gulp-imagemin の使い方

gulp-imagemin の設定については過去にまとめました。
[≫Gulpでpngquantを使ってPNGの減色＆軽量化](http://qiita.com/sygnas/items/f6700c75df71b8888d80)
LINE Botで家計簿Botを作りました

![a0002_011007.jpg](https://qiita-image-store.s3.amazonaws.com/0/76673/92905055-28f2-5739-440f-7f84d6158978.jpeg)

# 特徴

チャットで気軽に家計簿をつけることができるBotのカケーボ君です。

家計簿をつける上で特に面倒に感じるところは、頻繁に発生する支払い情報の記入だと思いますが、LINE Botのカケーボ君であればいつでもどこでもメモする感覚で簡単に記入できます。

自然言語処理を使っており、一度のメッセージで日付・収入／支出・金額・内容を自動的に判別するようにしています。それによって入力の煩わしさが幾分軽減されているかと思います。

さらにＬINEのボイスメッセージからでも記入できるようにしていますので、キー入力すら行わずに利用することが可能です。

# できること

・テキストメッセージを送ることで収支情報を登録します。
・ボイスメッセージを送ることで収支情報を登録します。
・登録した内容をもとに指定期間の集計結果を返します。

# 使い方

## テキストメッセージから記入する

日付、収入／支出、金額、内容を入力して送ります。

例：昨日1500円の本を買った
例：2/3 800円 昼食
例：今日 +30万円 給与

※収入の場合は「+」や「収入」などを含めます。
通常は支出と判断されます。

![manual01.png](https://qiita-image-store.s3.amazonaws.com/0/76673/a97559c9-fde6-351b-0674-5503bda27302.png)

「はい」をタップすると登録できます。

変更したい項目がある場合は「変更する」をタップすることで個別に変更ができます。
![manual02.png](https://qiita-image-store.s3.amazonaws.com/0/76673/e996f831-7236-974b-aa7f-6fbe3203e548.png)

## ボイスメッセージから記入する

LINEのボイスメッセージ機能を使います。
![manual03.png](https://qiita-image-store.s3.amazonaws.com/0/76673/185a4dbb-0cd5-573e-93af-c0b8bf438aba.png)

ボイスメッセージをタップ
![manual04.png](https://qiita-image-store.s3.amazonaws.com/0/76673/ce6cd17f-b1d6-9464-f92e-7c1663b0d957.png)

マイクアイコンをタップしながら話しかけることでボイスメッセージを送ることができます。
![manual05.png](https://qiita-image-store.s3.amazonaws.com/0/76673/2274a473-bda0-d9c9-b001-14c51e106367.png)

下記は「昨日、300円のお菓子を買った」と話しかけました。
![manual06.png](https://qiita-image-store.s3.amazonaws.com/0/76673/851cec1b-841c-2dbe-e15d-5e76a0865c72.png)

あとはテキストメッセージと同じです。

## 集計機能を使う

下のメニューから「今月の集計」をタップすると集計結果を返します。
![manual07.png](https://qiita-image-store.s3.amazonaws.com/0/76673/54e79c3c-6414-2c26-2e6d-fab20fae27ec.png)

※「その他の集計」で他の集計も返すことができます。

# 家計簿Botと友達になるには

下のQRコードを読み取って友だち追加をお願いします。
![kakeibot.png](https://qiita-image-store.s3.amazonaws.com/0/76673/c39376e6-0270-391b-49aa-29b5a844437f.png)

スマートフォンの方は、下のボタンをタップしてください。
<a href="https://line.me/R/ti/p/%40rpb6042d"><img height="60" border="0" alt="友だち追加" src="https://scdn.line-apps.com/n/line_add_friends/btn/ja.png"></a>

# 利用したサービス・技術

- LINE Messaging API
- Apache
- Python2.7
- Django
- MySQL
- goo API
- Microsoft Cognitive Service(Bing Speech API)
CentOS 7.2にNode.jsをインストールする


[Ember.js](http://emberjs.com/)を試してみようと思い、Node.jsをインストールした。
OSはCentOS 7.2。sudoでインストールする。

```bash
$ cat /etc/redhat-release
CentOS Linux release 7.2.1511 (Core)
```

# パッケージのインストール

Node.jsをインストールするのに必要なパッケージをインストールする。

```bash
sudo yum install -y gcc-c++ make
```

# yumリポジトリの追加

NodeJS 6.xのYum Repositoryを追加する。

```bash
curl -sL https://rpm.nodesource.com/setup_6.x | sudo bash -
```

# Node.jsのインストール

Node.jsをインストールする。

```bash
sudo yum install -y nodejs
```

インストールしたことを確認するために、バージョンを表示する。

```bash
$ node -v
v6.10.0
$ npm -v
3.10.10
```

## 参考
- [How To Install Latest Nodejs and NPM on CentOS/RHEL 7/6/5](https://tecadmin.net/install-latest-nodejs-and-npm-on-centos/)
- [nodesource/distributions: NodeSource Node.js Binary Distributions](https://github.com/nodesource/distributions)
openCV with face recognization via video camera

最近サーボモータを購入して、
下記の通りの配線にて、動かすところまでは出来た。
http://qiita.com/RyosukeKamei/items/9b15007bf1b77d33764f

そのため、
ひとまずopencvの顔認識に合わせてモータを動かせる所までを目標に、
下準備としてpython+openCVでのcamera動画時の顔認識まで進めておく。
※下記URLの通りに行えば問題なし。
http://qiita.com/suppy193/items/91609e75789e9f458c39

次回の投稿時には、
顔移動に併せてサーボモータを動かす仕組み?
頑張れたら画像認証に併せて、動かせる仕組みまでやる？

既に著書なども出ているので
それを引用しつつ色々と視野を広げていきたいです。
Create.jsでタッチイベント実装したらオブジェクトが消える

# サンプルコードてきな

```js

obj.on("pressmove", function(e) {
  e.currentTarget.x = e.stageX;
  e.currentTarget.y = e.stageY;
  stage.update();
});
```

こうゆうこと書いて、実機でやるとtouchMoveのとたんに消える。


# 消えてるんじゃない

実際は描画領域外にブットンでってるだけ。

# 原因

イベントの戻り値はdevicePixelRatioをムシった、マジモンの座標を返すから。

# 対処

なんか弊害ありそうなきもするけど、devicePixelRatioで割ってやったらうまく動いてる。DPR=2.0のiPhone6sでしか試してないけど。

```js

obj.on("pressmove", function(e) {
  e.currentTarget.x = e.stageX / window.devicePixelRatio;
  e.currentTarget.y = e.stageY / window.devicePixelRatio;
  stage.update();
});
```

# 結論

console.logさいきょう。
WindowsでGitBucketとJenkinsを連携させるときの注意点メモ

# 連携方法

GitHub Organization Folderで作るのが楽。
一度設定してしまえばグループのリポジトリが増えてもJenkinsfileを書いてWebhookを設定してやれば、
Jenkins側の設定変更なしでOKというお手軽さが便利。

# 注意点

* Jenkins側のプラグインのバージョンによっては動かないことがある→私が気づいたときにGitBucketにPR出して頑張ってる [#1478](https://github.com/gitbucket/gitbucket/pull/1478) とか
* GitBucket（の.git）へのアクセスが80 or 443ポートで出来ないとダメ（今のところハードコーディングされているので・・・）
* git.exeのcredential.helperに注意

## git credential.helper

普通にインストールしたGit for Windowsだとパスワード入力を促すGUIダイアログが出て便利なようになっている。
しかし、これはJenkinsから実行されたときには余計なお世話で、サービスで動いているのにGUIの処理待ちをしてしまい、git fetchが終わらないという現象に悩まされることになる。解決するには、以下のコマンドを管理者権限のコマンドプロンプトで実行してcredential.helperを未設定にしてやると良い。（普通にログインして使うユーザは`git config --global credential.helper manager` しておかないとGUIのパスワードダイアログが出なくて不便になる）

```
> git config --system --unset credential.helper
```
MovableType インストール

最近、ずっと WordPressばっかりさわっていたので、久々にMovableTypeをインストールしようとしたら、ちょっと戸惑ったので、メモ的に手順まとめます。

## 1. CGIが動くように Apacheの設定

MTを動かすApacheのconfファイルに以下を追加します。

```
ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"

<Directory "/var/www/cgi-bin">
    AllowOverride None
    Options ExecCGI
    Order allow,deny
    Allow from all
</Directory>

AddHandler cgi-script .cgi
```

## 2. ダウンロードしたMovableTypeを設置

Apacheのconfファイルに書いた /var/www/cgi-bin の下にダウンロードしたディレクトリを置きます。
わかりやすいように /var/www/cgi-bin/mt とか名前を変えたほうがいいですね。

## 3. check.cgi を動かす。

http://◯◯◯/cgi-bin/mt/check.cgi をブラウザからアクセス。
するとインストールしないといけないモジュールを教えてくれます。

MySQLをPerlからアクセスするモジュールをインストールしてなかったので、インストールします。

```bash
yum -y install perl-DBI perl-DBD-MySQL
```

## 4. staticディレクトリなどを DocumentRoot配下に置く。

ダウンロードしたディレクトリの中に mt-static というのがあるので、DocumentRootの下に移動させます。
あと、再構築したhtmlファイルなどを置くディレクトリも準備しましょう。
サポートディレクトリと呼ばれてます。
DocumentRoot直下であればとくに作成することはないのですが、ウェブサーバから書き込みができるようにパーミッションに注意します。

## 5. mt-config.cgi を編集する

MySQLの設定やディレクトリの場所などを設定します。

```
CGIPath    http://◯◯◯/cgi-bin/mt/

StaticWebPath    http://◯◯◯/mt-static

##### MYSQL #####
ObjectDriver DBI::mysql
Database dabasename
DBUser databaseuser
DBPassword password
DBHost localhost

DefaultLanguage ja
```

てことで、準備はこのぐらいでしょうか。
実際、管理画面に入ります。

http://◯◯◯/cgi-bin/mt/mt.cgi

あとは、対話的に管理者ユーザの登録などをしていくだけです。

久しぶりに、MovableTypeを触りましたが、再構築するというシステムはどうなんでしょうか。
昔、データをSQLiteで扱ってたころは恐ろしく再構築に時間がかかった上に、ゴミファイルがいっぱいできるイメージでした。。。
久しぶりにやってみたら、よくなっているのでしょうか。。。

まだそこまでは、調査できておりません。
excel アドイン向けマクロ(2)移動方向を切り替えるマクロ EXCEL VBA for Addin "Change　Cursor Direction"

##まずマクロ用アドインを作ります
下記サイトがわかりやすいと思います
[マクロをアドインにして他のブックで使用する](http://hamachan.info/win8/excel/addin.html)
 [魚拓](http://megalodon.jp/2017-0307-2000-14/hamachan.info/win8/excel/addin.html)

##今回も操作系
今回はアドイン用マクロとして「エンターを押した後移動する方向を右なら下に、下なら右に切り替えるマクロ」
を作りました。

```ChangeMoveDirection.BAS
Sub ChangeMoveDirection()
''QIIQ from Qita
''This is for Excel Macro Addin
''1. Make Macro Addin
''2. Take on This Procedure
''3. Take on Quick Access Toolbar
''4. If Moveafter right then change Down
''5. If move after Down then Change Right
''6. Other Direction change Down
Dim wb As Workbook: Set wb = ThisWorkbook
Dim ws As Worksheet: Set ws = ActiveSheet
Dim blMove As Boolean, i As Long
Dim arDirectionEnum
arDirectionEnum = Split("-4121,-4159,-4161,-4162", ",")
If Application.MoveAfterReturn = False Then Application.MoveAfterReturn = True
For i = LBound(arDirectionEnum) To UBound(arDirectionEnum)
  If arDirectionEnum(i) = Application.MoveAfterReturnDirection Then
    Select Case arDirectionEnum(i)
    Case Is = xlDown
      Application.MoveAfterReturnDirection = xlToRight
    Case Is = xlToRight
      Application.MoveAfterReturnDirection = xlDown
    Case Else
      Application.MoveAfterReturnDirection = xlDown
    End Select
  Exit For
  End If
Next i
End Sub
```
##機能の説明
arDirectionEnum = Split("-4121,-4159,-4161,-4162", ",")
というのが方向を決める定数です。
このマクロは
１．移動方向がなしになっていたらありに
２．移動方向が右なら下、下なら右、それ以外は下
に切り替えます。

##長所
カーソルの移動方向を変えるためにファイルから設定を開くという手間がなくなります。エクセルは右、下だけでなく、上、左、移動なしにもできますが、
戻すのが大変です。これはツールバーに登録しておくと、一瞬で切り替えられ大変便利です。
excel アドイン向けマクロ(1)入力した文字列を式にする EXCEL VBA for Addin "Make Strings Formula"

##まずアドインの作り方はこちら
[マクロをアドインにして他のブックで使用する](http://hamachan.info/win8/excel/addin.html)
さすがはまちゃんですね。マクロ用アドインは簡単に呼び出せないので、
**クイックアクセスツールバーに、アドインを表示します**
これがポイント

##どういうのを登録する？
正直あまり細かい作業は向かないと思います。
また数式をアドインに登録すると、アドインがないとエラーになってしまいます。
このため、アドインに登録するマクロは
1.操作系
2.計算が完結する
このようなものに絞られてくると思います。今日は長年苦しんできた
文字列を数式化するマクロを載せておきます。
EXCELで数式を入力するとき、ついうっかりイコールを忘れて
4.5*3
などと入力し、F2を押してイコールを入れなおしたことはありませんか？
今回はこんな風に入力してしまったセルの文字列を自動的に数式に変えて
=4.5*3
として13.5が表示されるというマクロです。
もちろんこのマクロは
A1*B1
といった入力でも式に変換します。


```ChangeStringToFormula.bas
Sub ChangeStringToFormula()
''QIIQ from Qiita ver2.0(Update 3/8/2017)
''This is for Excel Macro Addin
''1. Make Macro Addin
''2. Take on This Procedure
''3. Take on Quick Access Toolbar
''4.Select strings Like formula ex "A1*B1"
''5.Run This Macro become "=A1*B1"
Dim wb As Workbook: Set wb = ThisWorkbook
Dim ws As Worksheet: Set ws = ActiveSheet
Dim bl As Boolean, i As Long
Dim Rng As Range
Dim str As String
Dim re: Set re = CreateObject("VBScript.RegExp")
For Each Rng In Selection
 If Rng.Value = CStr(Rng.Cells.Formula) Then bl = False Else bl = True
  With re
    .Global = True
    .Pattern = "\d"
    If .test(rng.Value) = False Then bl = True
  End With
 If bl = False Then
 str = Rng.Value
 'Error Character Delete
 str = Replace(Replace(Replace(str, "..", ".", 1, -1, vbTextCompare), ",", "", 1, -1, vbTextCompare), "//", "", 1, -1, vbTextCompare)
Rng.ClearContents
Rng.NumberFormatLocal = "G/標準" 'Change Country Setting
On Error Resume Next
Rng.Formula = "=" & str
If Err.Number <> 0 Then
Rng.Value = str
End If
End If
Next
Set Re = Nothing
End Sub
```

たとえば小数点を2度打ったようなときそのままだとエラーになりますが、
これは小数点を1つに置換して式に変えます。
また複数のセルを選択して、一気に変換できます。

##長所
これはミスのリカバーだけでなく、数式が正しいか確認してから数式に変換できるので、数式自体のミスを防ぐことができます。

##短所
関数（Round）とかは無理です。しかし関数は@ を入力すると自動的に入力支援され、TABで入力が確定するので、これはあまり問題がないと思います。
また表示形式は標準のままなので、コンマなどは自分で追加するか、マクロをいじってください。
　ただクィックアクセスツールバー用なので、あまり凝った設定にすると一般的に使えなくなってしまいます。

##操作イメージ
Imageは普通のマクロに登録しています
数式が文字として入力されました
![2017-03-07 (1).png](https://qiita-image-store.s3.amazonaws.com/0/126919/da5921e7-00d1-55fc-5383-87f1911f6d25.png)
マウスで反転させて選択し
![2017-03-07 (2).png](https://qiita-image-store.s3.amazonaws.com/0/126919/0a39aab9-3a9c-0403-4bf5-6fc1d51eac8e.png)
マクロを起動します。クィックアクセスツールバーに登録していたらボタンを押すだけですね。
![2017-03-07 (3).png](https://qiita-image-store.s3.amazonaws.com/0/126919/e6210d64-fa65-f36a-e091-ff54d30743ca.png)
とりあえず実行させると数式になりました。
![2017-03-07 (4).png](https://qiita-image-store.s3.amazonaws.com/0/126919/996d5445-3db8-5519-71a3-c5222b88ac5e.png)
Whalebrew でコマンドパッケージを作ろう (GNU date を作ってみた)

# Whalebrew で date コマンドを実行/作成する

Mac ユーザのために作った GNU date コマンドを実行できる環境を紹介します。


## Mac と Linux での date の挙動の違い

(デフォルトでの) Linux と Mac の `date` コマンドはオプションやフォーマットが違っています。
例えば下記のコマンドは多くの Linux では実行できますが、 Mac ではエラーになります。

```
date -d tomorrow "+%Y-%m-%d %H:%M:%S"
```

でもただの `date` コマンドのために特殊なパッケージをインストールしたくないですよね？
この要求を満たすために独自の `date` コマンドパッケージを作りました。
https://github.com/algas/whalebrew-packages

## Whalebrew とは？

Whalebrew は Docker 経由で実行できるコマンドのパッケージ管理ツールです。
https://github.com/bfirsh/whalebrew
Docker コンテナを使うのでローカルの環境を汚染することはありません。
Docker に詳しくなくても whalebrew を使うだけなら困りません。

公式で用意しているコマンドの一覧は以下にあります。
https://github.com/whalebrew/whalebrew-packages

## セットアップ

1. Docker のインストール  
https://www.docker.com/docker-mac
2. whalebrew のインストール  
https://github.com/bfirsh/whalebrew  
3. 環境設定  
`mkdir -p ~/.whalebrew/bin`  
`echo "export WHALEBREW_INSTALL_PATH=$PATH:$HOME/.whalebrew/bin" >> ~/.bashrc`  
`source ~/.bashrc`
4. date のインストール  
`whalebrew install algas/gnudate`

## 使い方

下記のような感じで使えます。

```bash
gnudate --help
gnudate -d tomorrow "+%Y-%m-%d %H:%M:%S"
TZ=JST-9 gnudate
```

## 作り方

whalebrew 用に作った docker container を配布するだけです。
下記をご参照ください。
1. github にリポジトリを作る
https://github.com/algas/whalebrew-packages/tree/my-packages/date
2. Dockerfile を書く
3. docker hub に automated build を設定する
https://hub.docker.com/r/algas/gnudate/

社内のみで使う場合でしたら、ローカルの git repository + docker registry でも運用可能です。

## Dockerfile

軽量化のために alpine linux を使っています。
coreutils パッケージの date コマンドを実行します。

```dockerfile
FROM alpine
LABEL io.whalebrew.config.environment '["TZ"]'
RUN apk add --update coreutils && rm -rf /var/cache/apk/*
ENTRYPOINT ["date"]
```

## まとめ

- whalebrew で OS ごとのコマンドのオプションや実行結果の違いを吸収できる。
- whalebrew のコマンドパッケージはローカル環境を汚染しない。
- whalebrew コマンドは簡単に作れるので自作するの楽しい！
ある列の値だけを変えてレコードをコピーしたい

PostgreSQL です。
次のような ``item`` テーブル

|品名|価格|所有者|
|:--|--:|:--|
|りんご|¥150|田島|
|みかん|¥89|田島|
|すいか|¥780|田島|

を、

|品名|価格|所有者|
|:--|--:|:--|
|りんご|¥150|田島|
|みかん|¥89|田島|
|すいか|¥780|田島|
|りんご|¥150|鈴木|
|みかん|¥89|鈴木|
|すいか|¥780|鈴木|

のように「所有者」列だけ変えて複製（コピー）したいです。

普通の 

```sql 
INSERT INTO item
SELECT '鈴木' as 所有者, * 
FROM   item
WHERE  所有者 = '田島'
```

では、列数が合わないのでエラーになっていまいます。
INSERT または SELECT に列を列挙すればできるけど、こういうことをしたいテーブルが100くらいあるので、とてもやってられません。

そんなときは、

```sql
CREATE TEMPORARY TABLE tmp_item FROM item WHERE 所有者='田島';
UPDATE tmp_item set id = '鈴木';
INSERT INTO item SELECT * FROM tmp_item;
```

というように、別のテーブルを経由するとよいです。 ``CREATE TEMPORARY TABLE tmp_item tmp_item`` としているので、このテーブルはDBから切断すると消えます。


SQL Server の場合こんな感じになります(@tonkun_no さんありがとうございました。)

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr"><a href="https://twitter.com/amay077">@amay077</a> SQLServer<br>select * into <a href="https://twitter.com/hashtag/wktbl?src=hash">#wktbl</a> from tbl1<br>alter table <a href="https://twitter.com/hashtag/wktbl?src=hash">#wktbl</a> drop column id<br>insert into tbl2 select 1 as id ,* from <a href="https://twitter.com/hashtag/wktbl?src=hash">#wktbl</a><br>ダサいですね・・・</p>&mdash; tonkun (@tonkun_no) <a href="https://twitter.com/tonkun_no/status/839049547452076032">2017年3月7日</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

## 参考

* [テーブルの複製 - Qiita](http://qiita.com/nao_ipub/items/1151304ea8396770324a)
* [PostgreSQL TEMPORARY TABLEの実用例 (Glue SQL) - Qiita](http://qiita.com/denroku/items/5cba547ab44ae89f70da)