OmniAICreator/Qiita-1.07M huggingface dataset:
Chocolateyを使ってコマンドのみでEclipse + ERMasterをインストール

## 背景

プロジェクトのER図作成ツールとして **ERMaster** を利用するケースが多いが、
メンバのためにセットアップ手順をまとめるのが面倒です。
なるべくコマンドラインで完結できるような仕組みにすれば、
テキストベースのドキュメントにできます。

[Chocolatey](https://chocolatey.org/) を使って試してみました。

## 手順

### 1.Chocolateyのインストール

https://chocolatey.org/ にアクセスします。

ページ中央辺りに、 Windowsのコマンドプロンプトからのインストール方法が記載されています。
実行してみます。( 2016-01-07 現在 )
**※注意：コマンドプロンプト実行の際には「管理者として実行」を選択してください！**

```dosbatch
C: \> @powershell -NoProfile -ExecutionPolicy Bypass -Command "iex ((new-object net.webclient).DownloadString('https://chocolatey.org/install.ps1'))" && SET PATH=%PATH%;%ALLUSERSPROFILE%\chocolatey\bin
```


### 2.パッケージを探す

https://chocolatey.org/ のページ **右上** には、Chocolateyでインストール可能なアプリを検索するための検索エリアがあります。

**"eclipse"** と入力し検索してみましょう。



### 3.Eclipseのインストール


表示されたページには、パッケージのインストールを行うためのコマンドが表示されています。
これを Windowsのコマンドプロンプトに貼り付けます。

**ありがたいことに jdk まで勝手にインストールしてくれます。**
**※注意：コマンドプロンプト実行の際には「管理者として実行」を選択してください！**

```dosbatch
C: \> choco install eclipse
```


### 4.ERMasterのインストール

Eclipseに対して、 [ERMaster](http://ermaster.sourceforge.net/)プラグインをインストールします。

まずは以下のコマンドを実行し、feature名というものを確認します。

```dosbatch
C: \> "C:\Program Files\Eclipse Foundation\4.5.1\eclipse\eclipsec.exe"
 -clean -purgeHistory
 -application org.eclipse.equinox.p2.director
 -noSplash
 -repository http://ermaster.sourceforge.net/update-site/
 -list
org.insightech.er=1.0.0.v20150619-0219
org.insightech.er.feature.feature.group=1.0.0.v20150619-0219
org.insightech.er.feature.feature.jar=1.0.0.v20150619-0219
```


表示されたものから **=以降を削除し、,で連結** します。

以下のコマンドを実行します。

```dosbatch
"C:\Program Files\Eclipse Foundation\4.5.1\eclipse\eclipsec.exe"
 -clean -purgeHistory
 -application org.eclipse.equinox.p2.director
 -noSplash
 -repository http://ermaster.sourceforge.net/update-site/
 -installIUs
 org.insightech.er,org.insightech.er.feature.feature.group,org.insightech.er.feature.feature.jar
```


## 結果

これでeclipseを起動すれば、ERMasterが利用可能となっているはずです。


## ひとこと

バッチファイルを作ってあげれば、「このファイルクリックしといてね！」でERMasterのインストール指示が終わります。
便利！
underscoreコードリーディング（zip）



underscoreに詳しくないので、勉強半分でソースコードを読む。



##利用するバージョン
[underscore.js(v1.8.3)](https://github.com/jashkenas/underscore/tree/1.8.3)


##withoutとは


###[underscorejs.orgのzip](http://underscorejs.org/#zip)

こんな説明。
>####_.zip(*arrays) 
>Merges together the values of each of the arrays with the values at the corresponding position. 
>Useful when you have separate data sources that are coordinated through matching array indexes.
>If you're working with a matrix of nested arrays, _.zip.apply can transpose the matrix in a similar fashion.


```javascript

_.zip(['moe', 'larry', 'curly'], [30, 40, 50], [true, false, false]);
=> [["moe", 30, true], ["larry", 40, false], ["curly", 50, false]]

```
------------- 
それぞれのarrayの同じ位置にあるvalueをひとまとめにします。
データソースがそれぞれ分かれていて、インデックスが一致しているデータをひとまとめにしたいという時に役に立ちます。
もし、ネスト化された配列のマトリックス（行列？）での作業をしている場合には、_.zip.applyを用いることによって、同じようにマトリックスを置き換えることができます。

###[underscore.zip](https://github.com/jashkenas/underscore/blob/1.8.3/underscore.js#L580)
コード的にはこのあたり。

```javascript
  // Zip together multiple lists into a single array -- elements that share
  // an index go together.
  _.zip = function() {
    return _.unzip(arguments);
  };

```

引数を_.unzipに受渡しているのみ。

unzipはarrayを引数に、arrayの中にネスト化されている配列を_.pluckを用いて同じindexのもの同士で分解する。（コードは以下）
_.zipの場合は引数がないので、argumentsに[array1,array2...]という形で入っているため、このままunzipに受け渡すことによって分解されたresultが返ってくる。


```javascript
  // Complement of _.zip. Unzip accepts an array of arrays and groups
  // each array's elements on shared indices
  _.unzip = function(array) {
    var length = array && _.max(array, getLength).length || 0;
    var result = Array(length);

    for (var index = 0; index < length; index++) {
      result[index] = _.pluck(array, index);
    }
    return result;
  };
```
Ruby | 定数を参照する

## 定義

World クラスに JAPAN という定数を書いた場合。

```rb
class World
  JAPAN = '日本'
end
```

## 参照

**クラス名::定数名**  で参照できる。

```rb
World::JAPAN

# => "日本"
```

## クラス内での参照

同じクラス内であれば、クラス名は省略できる。

```rb
class World
  JAPAN = '日本'

  p JAPAN
end

# => "日本"
```


# 補足

- 「Ruby 定数 参照」でググっても それだけを解説したページがヒットしなかったので書いた。

# 環境

- Ruby 2.0.0



<!-- Update From Qiita API -->

# チャットメンバー募集


何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ


# メンター受付


https://menta.work/user/5694

<!-- Update From Qiita API -->
centos6.xでnodejs5.xを利用する

[node.js]:https://nodejs.org/en/
[nodebrew]:https://github.com/hokaccha/nodebrew
[centos6.xでnodejs4.xを利用する]:http://qiita.com/you21979@github/items/163c5c8a009b00d85ebb

タイトルもリスペクト

ヾ(・ω<)ﾉ"　三三三●　ⅱⅲ コロコロ♪

------------------- ↓ 余談はここから ↓-------------------

こんなエラーが出た

```
[xxx@dozo ~]$ npm install socket.io -g

> bufferutil@1.2.1 install /home/xxx/.nodebrew/node/v5.3.0/lib/node_modules/socket.io/node_modules/bufferutil
> node-gyp rebuild

make: ディレクトリ `/home/xxx/.nodebrew/node/v5.3.0/lib/node_modules/socket.io/node_modules/bufferutil/build' に入ります
  CXX(target) Release/obj.target/bufferutil/src/bufferutil.o
../src/bufferutil.cc:16 から include されたファイル中:
../../nan/nan.h:41:3: error: #error This version of node/NAN/v8 requires a C++11 compiler
In file included from ../src/bufferutil.cc:7:
```

`requires a C++11 compiler`からわかるように、
どうもコンパイラが古いらしい。
はてどうしようか。

調べてみると[centos6.xでnodejs4.xを利用する]という記事を見つけたのだが。
ちょっと難しくやり過ぎな感じだったので整理してみよう。

nodeのインストールは、ソースからやるとコンパイルが長いし基本バイナリでいいかな。
あとバージョン管理やら多人数使用もしたいから[nodebrew]使おうかねぇ。

例によって１からインストールするので適当にすっ飛ばして読んで。

------------------- ↑ 余談はここまで ↑ -------------------

ヾ(・ω<)ﾉ"　三三三●　ⅱⅲ コロコロ♪

------------------- ↓ 本題はここから ↓-------------------

# [node.js]
[nodebrew]を使って[node.js]のインストール
## 準備

まずは必要なパッケージを組み込む。
gcc4.8以上のパッケージを入れるのでdevtools-2を使用

```shell-session
$ sudo wget http://people.centos.org/tru/devtools-2/devtools-2.repo -O /etc/yum.repos.d/devtools-2.repo
$ sudo yum install devtoolset-2-gcc devtoolset-2-binutils devtoolset-2-gcc-c++ centos-release-SCL
```

## [nodebrew]のインストール

```shell-session
$ curl -L git.io/nodebrew | perl - setup
$ cat >> .bashrc
export PATH=$HOME/.nodebrew/current/bin:$PATH
^C
$ source .bashrc
```

### 確認

```shell-session
$ nodebrew --version
nodebrew 0.9.3
～～～
```

## [node.js]とnpmのインストール

```shell-session
$ nodebrew install-binary stable
$ nodebrew use stable
```

### 確認

```shell-session
$ node --version
v5.4.0
$ npm --version
3.3.12
```

## devtoolset-2を使ってnpmインストール

```shell-session
$ scl enable devtoolset-2 "npm install -g bufferutil"
```
------------------- ↑ 本題はここまで ↑ -------------------

ヾ(・ω<)ﾉ"　三三三●　ⅱⅲ コロコロ♪

------------------- ↓ 後書はここから ↓-------------------

### [nodebrew]のインストール先

`/home/xxx/.nodebrew/current/bin`

### devtoolset-2のインストール先

`/opt/rh/devtoolset-2/`

なんでまたこんなところにインストールされるんや

------------------- ↑ 後書はここまで ↑ -------------------
ＲＥＭ（注釈）を／；で完全体にする

  C:\DamashiGami>rem 安心して下さい、注釈です。

は、大丈夫ですが

  C:\DamashiGami>rem 安心して下さい、注釈です。/?でヘルプ表示
  バッチ ファイルまたは CONFIG.SYS にコメント (注釈) を記録します。
  
  REM [コメント]

のように「/?」を入れるとヘルプを受け付けてしまいます。

remと同じ内部コマンドであるechoは

  C:\DamashiGami>echo
  ECHO は ＜ON＞ です。

  C:\DamashiGami>echo:

でコマンドの後ろに区切り文字を入れる事で回避出来るので

remでもやってみると

  C:\DamashiGami>rem:安心して下さい、注釈です。/?でヘルプ表示

で取り敢えず回避出来ました。が・・・

  C:\DamashiGami>rem:安心して下さい、注釈です。/?でヘルプ表示 > test.txt

標準出力の「>」を受け付けて、０バイトのtest.txtが作成されます。

そこで

  C:\DamashiGami>rem /;安心して下さい、注釈です。/?でヘルプ表示 > test.txt

とやると、ヘルプも標準出力も文字列扱いになりました。

/の後ろは、空白または空白扱いされる文字なら大丈夫そうなので

  C:\DamashiGami>rem / 安心して下さい、注釈です。/?でヘルプ表示 > test.txt
  C:\DamashiGami>rem /=安心して下さい、注釈です。/?でヘルプ表示 > test.txt
  C:\DamashiGami>rem /,安心して下さい、注釈です。/?でヘルプ表示 > test.txt

もＯＫです。

  C:\DamashiGami>rem /安心して下さい、注釈です。/?でヘルプ表示 > test.txt
  C:\DamashiGami>rem /:安心して下さい、注釈です。/?でヘルプ表示 > test.txt

だとヘルプの内容が入ったtest.txtが作成されます。

何かご指摘・ご意見などございましたら、コメントでお願いいたします。
DataGrip 1.0.1 でMySQL5.7 に接続できない場合の対処 >> JDBCドライバー更新すべき


https://www.jetbrains.com/datagrip/features/
（DataGripのバージョンアップで対応するとは思いますが…）

mysql-connector-java-5.1.35-bin.jar
が入っていたが、2015年初頭で MySQL5.7対応前と思われる。

http://dev.mysql.com/downloads/connector/j/

こちらで 5.1.38 をダウンロードし、

Data Sources and Drivers - MySQL - Settings - Driver files
で
mysql-connector-java-5.1.38-bin.jar
を追加し、 5.1.35 は除いておく。
アプリ再起動後、5.1.38を使用するようになり接続できた。
bash と zshの変数展開の違い


## bash
[word splitting](https://www.gnu.org/software/bash/manual/bashref.html#Word-Splitting) に書いてあるとおり、double quotedされてない限り展開された後、tokenに分解されます:

```shell-session
bash-3.2$ abc='abc def ghi'
bash-3.2$ printf '%s\n' $abc
abc
def
ghi
bash-3.2$ printf '%s\n' "$abc"
abc def ghi
```

## zsh
word splittingしてくれない。`=` をつける必要あり。

```shell-session
zsh$ abc='abc def ghi'
zsh$ printf '%s\n' $abc
abc def ghi
zsh$ printf '%s\n' "$abc"
abc def ghi
zsh$ printf '%s\n' $=abc 
abc
def
ghi
zsh$ printf '%s\n' "$=abc"
abc
def
ghi
```

### おまけ
こういう、展開後の tokenの操作を展開される個々の要素でやるのって汚いよなあ、と思いつつ意地悪な実験:

```shell-session
zsh$ printf '%s\n' "${=abc}d"
abc
def
ghid
zsh$ printf '%s\n' "${=abc}d${abc}"
abc
def
ghidabc def ghi
```
文字列の該当する部分が `=`から展開されたかどうかで結果が変わってくるんだな。面倒臭そげ。S式に逃げたい。
Raspberry PiのGPIOを試してみた（LEDピカ版）

# Goal

* 初心者であり、ハードを触り始め、色々知らないので、調べてまとめてみたい！
* Raspberry Pi 2 からGPIO信号を操作できるようになるといいです！
* できれば、NodeJSでやりたい。

# まずは、GPIOとは？

* [Wikipedia](https://ja.wikipedia.org/wiki/GPIO) により、GPIOはGeneral Purpose Input/Output（汎用入出力）の略語である。入力として動作した場合は電気回路のほかの部分からのデジタル信号を読み取り、出力として動作した場合は他デバイスの制御や信号の通知を行う。
* できること
  * GPIO pins can be configured to be input or output
  * GPIO pins can be enabled/disabled
  * Input values are readable (typically high=1, low=0)
  * Output values are writable/readable
  * Input values can often be used as IRQs (typically for wakeup events)
* デジタル出力のセンサの値やスイッチのON/OFFをマイコンに伝える入力や、マイコンの演算結果をLEDで表示したり、モータを動かす信号を出力したりする時などに利用します。
* GPIOの内部では、CPUと外部装置でデータの受け渡しをするために、プログラムで扱う*デジタル値（0または1）と信号（電圧のLOWレベルまたはHIGHレベル）の変換*を相互に行います。
![GPIO](http://japan.renesas.com/media/edge_ol/engineer/16/img_02.jpg "gpio1")

(src: http://japan.renesas.com/edge_ol/engineer/16/index.jsp )

# Raspberry Pi 2のGPIOは？

* 正式[サイト](https://www.raspberrypi.org/documentation/usage/gpio-plus-and-raspi2/)
からのドキュメントにより、以下となります。

![GPIO](https://www.raspberrypi.org/documentation/usage/gpio-plus-and-raspi2/images/gpio-pins-pi2.jpg "gpio2")

分かりやすい図：

![GPIO](https://www.raspberrypi.org/documentation/usage/gpio-plus-and-raspi2/images/gpio-numbers-pi2.png "gpio2")

もっと見やすい図：

![GPIO](http://www.element14.com/community/servlet/JiveServlet/previewBody/73950-102-4-309126/GPIO_Pi2.png "gpio2")

# out機能を試す

簡単なLEDをON OFFやってみる

* 回路を準備

![LED](http://deviceplus.jp/wp-content/uploads/2014/12/rasp09_09.png)

POINT: 
 - 抵抗を利用し、信号と電流を調整する
 - LEDは(+)は3.3V側

* 回路をテスト
電源を付けて、LEDが光ることを確認
* GPIO回路を準備
ブレッドボードの配線はそのままで、Raspberry PiのGPIOポートのプラス側を、
1番の3.3V電源からとなりの3番「GPIO2」に差し替えます。
* ON OFF コマンドからやってみる

```bash
// GPIO24 を使うためのコマンド 
$ echo 2 > /sys/class/gpio/export 

// IN/OUTの設定 出力する場合はout 
$ echo out > /sys/class/gpio/gpio2/direction 

//　信号のON/OFFの切り替え ONは1 OFFは0 
$ echo 1 > /sys/class/gpio/gpio2/value 

// OFFにする 

$ echo 0 > /sys/class/gpio/gpio2/value 
// unexport 

$ echo 2 > /sys/class/gpio/unexport
```

# NodeJSでやる場合

こちらの[nodeモジュール](https://www.npmjs.com/package/rpi-gpio)を利用します

```js

var gpio = require('rpi-gpio');
gpio.setup(2, gpio.DIR_OUT, write);
 
function write() {
    gpio.write(2, true, function(err) {
        if (err) throw err;
        console.log('Written to pin');
    });
}

```
NODE-REDだと持って楽です、次はこちらで試したことを書く予定！

# 参考

* http://japan.renesas.com/edge_ol/engineer/16/index.jsp
* https://en.wikipedia.org/wiki/General-purpose_input/output
* https://www.raspberrypi.org/documentation/usage/gpio-plus-and-raspi2/
* http://deviceplus.jp/hobby/raspberrypi_entry_009/
nodeのテストの前後で名前空間が拡張されてないか確認する


`_.difference` でテスト実行前後のキーの比較をする

```js
const {deepEqual} = require("assert");
const _ = require("lodash");
function checkNamespaceInjection(namespace, fn, toBe = []) {
  const prevKeys = Object.keys(namespace);
  fn();
  const nextKeys = Object.keys(namespace);
  deepEqual(_.difference(prevKeys, nextKeys), toBe)
}

describe("application", () => {
  beforeEach(() => {
    let jsdom = require('jsdom').jsdom;
    global.document = jsdom('<html><body></body></html>')
    global.window = document.defaultView;
    global.navigator = window.navigator;
    global.location = window.location;
  });
  it("detect namespace injection", () => {
    checkNamespaceInjection(global, () => {
      require("../../src/application");
    });
  });
});
```

参照まで同一かはチェックしてない
対象ブラウザをIE9以上にすると使えるようになるもの（Vistaを無視する場合も補足）

個人用のメモです。

そもそも以下を見れば一目瞭然ですが、
http://caniuse.com/#compare=ie+8,ie+9
ウェブ制作の現場ですぐにでも利用できそうなものをリストアップする目的です。

**個別の動作確認はしていません。
あくまでCan I Useからリストアップしたまでです。**

- [SVG (basic support)](http://caniuse.com/#feat=svg)
- [Canvas (basic support)](http://caniuse.com/#feat=canvas)
- [Audio element](http://caniuse.com/#feat=audio)
- [Video element](http://caniuse.com/#feat=video)
- [CSS background-position edge offsets](http://caniuse.com/#feat=css-background-offsets)
- [CSS3 Background-image options](http://caniuse.com/#feat=background-img-opts)
    - background-clip
    - background-origin
    - background-size
- [CSS3 Multiple backgrounds](http://caniuse.com/#feat=multibackgrounds)
- [CSS3 Colors](http://caniuse.com/#feat=css3-colors)
    - rgba()
    - hsl()
    - hsla()
- [CSS3 Media Queries](http://caniuse.com/#feat=css-mediaqueries)
- [CSS3 2D Transforms](http://caniuse.com/#feat=transforms2d)
- [EventTarget.addEventListener()](http://caniuse.com/#feat=addeventlistener)
- [getElementsByClassName](http://caniuse.com/#feat=getelementsbyclassname)

## Windows Vistaを無視する場合

OSのシェアにもよりますが、Windows Vistaを無視してWindows7以上を動作保証範囲とする場合、Windows7のサポートブラウザがIE11以上になりますので、より多くの機能を使用することができそうです。
http://caniuse.com/#compare=ie+9,ie+10,ie+11

- [calc() as CSS unit value](http://caniuse.com/#feat=calc)
- [Viewport units **(Partial)**](http://caniuse.com/#feat=viewport-units)
    - vw
    - vh
    - vmin
- [rem (root em) units](http://caniuse.com/#feat=rem)
- [CSS3 3D Transforms **(Partial)**](http://caniuse.com/#feat=transforms3d)
- [CSS3 Text-shadow](http://caniuse.com/#feat=css-textshadow)
- [CSS3 Multiple column layout](http://caniuse.com/#feat=multicolumn)
- [CSS Gradients](http://caniuse.com/#feat=css-gradients)
- [CSS Repeating Gradients](http://caniuse.com/#feat=css-repeating-gradients)
- [CSS3 Transitions](http://caniuse.com/#feat=css-transitions)
- [CSS Animation](http://caniuse.com/#feat=css-animation)
- [CSS pointer-events](http://caniuse.com/#feat=pointer-events)
- [CSS3 Border images](http://caniuse.com/#feat=border-image)
- [File API **(Partial)**](http://caniuse.com/#feat=fileapi)
- [SVG filters](http://caniuse.com/#feat=svg-filters)
- [WebGL - 3D Canvas graphics](http://caniuse.com/#feat=webgl)
- [let](http://caniuse.com/#feat=let)
- [const](http://caniuse.com/#feat=const)
- [Element.insertAdjacentHTML()](http://caniuse.com/#feat=insertadjacenthtml)
- [Mutation Observer](http://caniuse.com/#feat=mutationobserver)

ほかにもあれば随時追加していきます。
phpMyAdmin note


# Via Docker
https://github.com/phpmyadmin/docker

Cool! No problem under ELB SSL-Terminate.
## run (& pull)
```bash:
docker run --name myadmin -it -d -e PMA_HOSTS=172.31.x.y,rdsxxx.amazonaws.com -p 8080:80 phpmyadmin/phpmyadmin
```
Container host listen 8080 for `myadmin` container.
## Daemonize
### With `upstart` (CentOS6, AmazonLinux, ubuntu14)

```ini:/etc/init/phpmyadmin.conf
description "phpmyadmin"
author "Me"
# start on started docker <- wanto use it, But this is wortless. upstart can not cautch SysV service.
start on stopped rc RUNLEVEL=[345]
stop on runlevel [!2345]
respawn
script
  /usr/bin/docker start -a myadmin
end script
```
Ops

```bash:
initctl --reload-configuration
initctl start

# of course
chkconfig docker on
```

### With `systemd`

```ini:/etc/systemd/system/phpmyadmin-service
[Unit]
Description=phpmyadmin
Requires=docker.service
After=docker.service

[Service]
Restart=always
ExecStart=/usr/bin/docker start -a myadmin
ExecStop=/usr/bin/docker stop -t 2 myadmin

[Install]
WantedBy=default.target
```
___Remenber___ `systemctl daemon-reload`

## Tips (via docker)
- Use ENV_VARS. https://github.com/phpmyadmin/docker#environment-variables-summary
- phpmyadmin's conf file eval ENV_VARS and apply it to PHP-code.
- If you need more messy configuration, mount container hosts's file. 
- I confirmed ELB + SSL Terminated in no `ForceSSL` setting.

# Why SSL fail (https://url:80/index.php....)?

```php:config.inc.php
$cfg['ForceSSL'] = true;
```

# config.inc.php directive

http://docs.phpmyadmin.net/en/latest/config.html
401HW > 充電完了 > 緑LEDが点灯

ワイモバイルの401HW

- 充電完了時 : 緑LED点灯

http://cdn.ymobile.jp/lineup/401hw/data/401HW_manual_V1_00.pdf

いつも使う機能なので、ケースに記載しておいてくれてもいいのにデザイン優先でそういうことをしない。

単三の充電器、モバイルルータの充電器などいくつかの充電のLEDを統一的にしてくれればユーザにとってはわかりやすいが、統一性は今のところない。

同じ会社の異なる単三充電器製品が異なるLED表示というのもあり、こういうのは悪いUIの例だと思う。
さらにそういう製品の中で、コンセントをさしたときに見れなくなる面に充電完了状態のLEDの説明が書かれているのもあり、「作った人はこれ使ったことないだろう」と思うような製品だったりする。

<hr>
こういうことを書きながら、自分が作るソフトウェアのUIがユーザにとって必要なものが必要な場所にきちんと表示されているかは適宜考えないといけないと思う。
RStudioで地味に便利な小技

RStudioというか、RStudioのエディタの機能だと思うけど、あまりまとめられているのを見たことがなかったので、地味なものばかりを、勝手にまとめてみた。

# 括弧の前後でのダブルクリック
`func(dat[val.1 > 0])`みたいなコマンドがあったとき、
`(`や`[`の前、または`)`や`]`の後ろでダブルクリックすると、
`()`や`[]`を含めた引数全体が選択され、
`(`や`[`の後ろ、または`)`や`]`の前でダブルクリックすると、
`()`や`[]`を含まない引数全体が選択される。
ただし、`)`や`]`の前であっても、直前の`)`や`]`の後ろであれば、そちらの判定が優先される。

上の例で言うと、
`[`の前をダブルクリックした場合、`[val.1 > 0]`が選択され、
`[`の後ろをダブルクリックした場合、`val.1 > 0`が選択される。

また、`]`の後ろ（つまり`)`の前）をダブルクリックした場合は、
`dat[val.1 > 0]`ではなく、`[val.1 > 0]`が選択される。

# オブジェクト上でのダブルクリック
`val.1`のように間にピリオドが入ったようなオブジェクトであっても、オブジェクトの上でダブルクリックすると、オブジェクト名だけが選択される。

## トリプルクリック以上
ちなみにトリプルクリックは行全体の選択となり、クリック×4はファイル全体の選択となる。

# 括弧で囲む
オブジェクトを選択した状態で、
`(`や`[`を入力すると、選択範囲を`()`や`[]`で囲ってくれる。
pre_get_posts


クエリーをカスタマイズするときの「pre_get_posts」の書き方

```php:functions.php
function pre_get_posts_func($query)
{
    if ($query->is_post_type_archive && $query->query_vars['post_type'] == 'xxx') {
        $query->set('meta_query', array(
            //...
        ));
    }
}
add_action('pre_get_posts', 'pre_get_posts_func');
```
備忘録プチコン3号

# 後で試す

* [漫才プレイヤー](http://wiki.hosiken.jp/petc3gou/?Toukou%2F%CC%A1%BA%CD%A5%D7%A5%EC%A5%A4%A5%E4%A1%BC)

# etc
* [命令表](http://smileboom.com/special/ptcm3/reference/#string)
* [文字コード表](http://smileboom.com/special/ptcm3/download/unicode/)

# 音声でコードをやりとり
* [PetitModem](http://rei.to/petitmodem.html)
    * 送受信はこれが良さそう(未使用)
* [QPSK Modulator](http://www.geocities.jp/obono_kun/storage/petitcom_util/ptcm3_qpsk.html)

# かるたリーダー
## かるた資料
* [かるた - Wikipedia](https://ja.wikipedia.org/wiki/%E3%81%8B%E3%82%8B%E3%81%9F)
    * かるたの全体像
    * いろはかるた3種は、こちらを参考にした
* いろはかるた
    * [変遷の理由など](http://iso-labo.com/labo/iroha.html)
    * [札の音読み例](http://study.matrix.jp/kotowaza/karuta.shtml)
* 上毛かるた
    * [上毛かるた - Wikipedia](https://ja.wikipedia.org/wiki/%E4%B8%8A%E6%AF%9B%E3%81%8B%E3%82%8B%E3%81%9F)
* 百人一首
    * [百人一首 - Wikipedia](https://ja.wikipedia.org/wiki/%E7%99%BE%E4%BA%BA%E4%B8%80%E9%A6%96)
    * [競技かるた - Wikipedia](https://ja.wikipedia.org/wiki/%E7%AB%B6%E6%8A%80%E3%81%8B%E3%82%8B%E3%81%9F)
        * ルールはこちらを参照
    * [小倉百人一首の読み方](http://www5a.biglobe.ne.jp/accent/kana/ogura2.htm)

## ランダムシャッフル
[アルゴリズムとデータ構造編【その他】　第２章　ランダムシャッフル](http://ppp-lab.sakura.ne.jp/ProgrammingPlacePlus/algorithm/other/002.html)
このページにある Fisher-Yates shuffle を用いた。

# 対局時計
* [対局時計](https://ja.wikipedia.org/wiki/%E5%AF%BE%E5%B1%80%E6%99%82%E8%A8%88)
* [持ち時間](https://ja.wikipedia.org/wiki/%E6%8C%81%E3%81%A1%E6%99%82%E9%96%93)
【C++】Eigen関数一覧

Eigenの関数を機能単位で整理（随時更新）

Eigen::MatrixXd mat;

| function                           | 概要                    |
|:-----------------------------------|:------------------------|
| Eigen::MatrixXd::Random(r, c)      | 初期化：r×c行列、値が乱数 |
| Eigen::MatrixXd::Constant(r, c, v) | 初期化：r×c行列、値がv |
| Eigen::MatrixXd::Zero(r, c)        | 初期化：r×c行列、値が0 |
| Eigen::MatrixXd::Ones(r, c)        | 初期化：r×c行列、値が1 |
| mat.resize(r, c)                   | 自己変換：r×c行列にリサイズ※値は0クリア |
| mat.conservativeResize(r, c)       | 自己変換：r×c行列にリサイズ※値は保持<br>変更しない行/列はEigen::NoChange |
| mat.transposeInPlace()        | 自己変換：転置行列 |
| mat.adjointInPlace()          | 自己変換：随伴行列 |
| mat.rows()                    | 確認：行数 |
| mat.cols()                    | 確認：列数 |
| mat(ii, jj)                   | 参照：ii行, jj列 |
| mat.row(ii)                   | 参照：ii行       |
| mat.col(jj)                   | 参照：jj列       |
| mat.block(ii, jj, r, c)       | 参照：ii行, jj列からrxc行列 |
| mat.topLeftCorner(r, c)       | 参照：左上r×c行列 |
| mat.topRightCorner(r, c)      | 参照：右上r×c行列 |
| mat.bottomLeftCorner(r, c)    | 参照：左下r×c行列 |
| mat.bottomRightCorner(r, c)   | 参照：右下r×c行列 |
| mat.topRows(r)                | 参照：上からr行 |
| mat.bottomRows(r)             | 参照：下からr行 |
| mat.middleRows(ii, n)         | 参照：ii行目からn行 |
| mat.leftCols(c)               | 参照：左からc列 |
| mat.rightCols(c)              | 参照：右からc列 |
| mat.middleCols(jj, n)         | 参照：jj列目からn列 |
| mat.transpose()               | 転置行列 |
| mat.conjugate()               | 複素共役行列 |
| mat.adjoint()                 | 随伴行列 |
| mat.cwiseAbs()                | 係数毎の計算：絶対値 |
| mat.cwiseAbs2()               | 係数毎の計算：絶対値の二乗 |
| mat.cwizeInverse()            | 係数毎の計算：逆数 |
| mat.cwizeSqrt()               | 係数毎の計算：平方根 |
| mat.cwizeEqual(mat2)          | 係数毎の計算：== |
| mat.cwizeNotEqual(mat2)       | 係数毎の計算：!= |
| mat.cwizeMin(mat2)            | 係数毎の計算：小さな値 |
| mat.cwizeMax(mat2)            | 係数毎の計算：大きな値 |
| mat.cwizeProduct(mat2)        | 係数毎の計算：掛け算, (mat1.array() * mat2.array()).matrix()と等価 |
| mat.cwizeQuotient(mat2)       | 係数毎の計算：割り算 |
| mat.array()                   | Eigen::ArrayXd型 |

Eigen::VectorXd vec;

| function            | 概要                  |
|:--------------------|:----------------------|
| Eigen::VectorXd::LinSpaced(size, low, high) | 初期化 low～highをsizeで分割した連続値|
| vec.head(num)       | |
| vec.tail(num)       | |
| vec.segment(i, num) | |
| vec.tail(num)       | |

Eigen::ArrayXd arr;

| function            | 概要                  |
|:--------------------|:----------------------|
| arr.sin()                     | 三角関数：sine(要素が90の時1) |
| arr.cos()                     | 三角関数：cosine(要素が90の時0) |
トランザクション中1回だけ重たい処理を実行したい

# 前提

環境は`PostgreSQL 9.4`で、`autocommit=off`にしている

# やりたいこと

```sql
CREATE TABLE hoge (id INTEGER, head TEXT);
CREATE TABLE fuga (id INTEGER, hoge_id INTEGER, body TEXT);
CREATE MATERIALIZED VIEW piyo AS (
  SELECT h.head, f.body FROM hoge h LEFT JOIN fuga f ON h.id = f.hoge_id
);
```

のようなテーブルとマテリアライズドビューがあったとき、`hoge`や`fuga`の更新時には自動的に`piyo`も更新したいと思うのが人情だと思う

そのとき、単純に

```sql
CREATE FUNCTION refresh_piyo() RETURNS TRIGGER AS $$
  REFRESH MATERIALIZED VIEW CONCURRENTLY piyo;
  RETURN NULL;
$$ LANGUAGE plpgsql;

CREATE TRIGGER hoge_modify_trigger AFTER INSERT OR UPDATE OR DELETE ON hoge FOR EACH SATEMENT EXECUTE PROCEDURE refresh_piyo();
CREATE TRIGGER fuga_modify_trigger AFTER INSERT OR UPDATE OR DELETE ON fuga FOR EACH SATEMENT EXECUTE PROCEDURE refresh_piyo();
```

などとやってしまうと、`hoge`や`fuga`を大量に更新する際に凄まじく遅くなってしまう
トランザクションの最後に1回だけリフレッシュするようにしたい


# やったこと

一時テーブルと遅延制約トリガーを使い、処理を間引いた

```sql
CREATE FUNCTION refresh_piyo() RETURNS TRIGGER AS $$
  CREATE TEMP TABLE IF NOT EXISTS debouncer (called BOOLEAN) ON COMMIT DROP;
  IF (SELECT COUNT(*) > 0 FROM debouncer) THEN
    RETURN NULL;
  END IF;
  INSERT INTO debouncer VALUES (TRUE);
  REFRESH MATERIALIZED VIEW CONCURRENTLY piyo;
  RETURN NULL;
$$ LANGUAGE plpgsql;

CREATE CONSTRAINT TRIGGER hoge_modify_trigger AFTER INSERT OR UPDATE OR DELETE ON hoge
  DEFERRABLE INITIALLY DEFERRED FOR EACH ROW EXECUTE PROCEDURE refresh_piyo();
CREATE CONSTRAINT TRIGGER fuga_modify_trigger AFTER INSERT OR UPDATE OR DELETE ON fuga
  DEFERRABLE INITIALLY DEFERRED FOR EACH ROW EXECUTE PROCEDURE refresh_piyo();
```

トリガー内でコミット時にドロップされる一時テーブルを作ることで、重たい処理が実行済みかどうかのフラグとし、一番最初の実行時にのみ処理を走らせる
複数件更新時で最初のものを更新した後だけリフレッシュが走ると困るので、リフレッシュ処理をすべての処理が終わった後まで遅延するよう、遅延制約トリガーとした

制約トリガーで更新処理を行うなど気持ち悪いことはしているが、パフォーマンス上問題になることは無くなったと思う
もうちょっと素直に実現できる方法はないだろうか・・・
GCPの他のプロジェクトからイメージを使う方法

### GCPの他のプロジェクトからイメージを使う方法

* プロジェクト１でスナップショットからイメージを作成。
* 作成したイメージからインスタンスをプロジェクト２で作成。

### 仕方
#### プロジェクト１でスナップショットからイメージを作成。
* ブート可能なディスクを準備

「delete boot disk when deleting instance」をuncheckにして、インスタンスを削除してください。
![qiita-1.png](https://qiita-image-store.s3.amazonaws.com/0/103998/fb40d010-1fc9-9caf-7c2a-a161edbc13c5.png)

* 準備したディスクからイメージ作成

Source diskのところにさっき準備したディスクを選択し、Createボタンをクリックしてください。
![qiita-2.png](https://qiita-image-store.s3.amazonaws.com/0/103998/9c4b022e-f87c-f8ca-a492-bbba377706df.png)

* 作成したイメージをプロジェクト２にインストールする

```
gcloud config set project <project-id-of-project-2>
gcloud config list
```

```
gcloud compute instances create <name-of-new-instance> \
 --image <name-of-your-image-from-project-1> \
 --image-project "<project-id-of-project-1"
```
よく設定されているalias

GitHubでコードを検索し、aliasでよく設定されていたものを共有します。

検索条件としては今回
「filename:bashrc alias」
としています。
※ 検索結果が多く、ページングのmaxが100だったのですべてのデータを見きれていません。次に調べる時は結果が変わっている可能性があります。

# ランキング
aliasの設定で多かった順です。
## 1位 alias ls='ls --color=auto'

```

alias ls='ls --color=auto'

```

lsの結果をカラーで表示してくれるオプションです。
[こちら](http://qiita.com/s-age/items/2046185547c73a86f09f)ですでに記事がありますので参照ください。

## 2位 alias rm='rm -i'
```

alias rm='rm -i'

```
コマンドからファイル削除する際に

```

remove ファイル名?

```
と聞いてくれるオプションです。

## 3位 alias ..='cd ..'
```

alias ..='cd ..'

```
親のディレクトリに移動する際に「cd 」とタイプする手間が省けます。地味に便利！

## 4位 alias mv='mv -i'
```

alias mv='mv -i'

```
mvする際に対象がすでに存在していたら、

```

overwrite ファイル名? (y/n [n])

```
ときいてくれるオプションです。

## 5位 alias cp='cp -i'
```

alias cp='cp -i'

```
上書きするファイルがすでにある場合、聞いてくれるオプションです。


## 6位 alias la='ls -a'
```
alias la='ls -a'
```
「.」で始まるファイルを含んだすべてのファイルを表示するオプションです。

## 7位 alias ls='ls -G'
```
alias ls='ls -G'
```
-lオプションでグループを抜いた形で表示する。Macではディレクトリとシンボリックリンクを色分けして表示もしてくれます。

## 8位 alias vi='vim'

```

alias vi='vim'

```
そのままですが、viをvimに変更する設定です。

## 9位 alias gs='git status'

```

alias gs='git status'

```
git statusを打つことは多いですからね。これを設定しておくと幸せになれます。

## 10位 alias c='clear'

```

alias c='clear'

```
画面上のいちばん上にプロンプトが移動し、文字列がクリアされるclearを1文字で実行できるようにしています。

# まとめ
今回は設定されているaliasで数が多いものを見てきました。iオプションが多いですねw
次は変り種を含めてもう少し意外性のあるものを含めて取り上げていきたいと思います。

今日出てきたものをまとめますと下記のようになりますので、よかったら.bashrcなどで
ご利用ください

```shell-session:まとめ
 unamestr=$(uname)
 if [[ "$unamestr" == "Linux" ]]; then platform="linux"; fi
 if [[ "$unamestr" == "Darwin" ]]; then platform="mac"; fi

 if [[ $platform == "linux" ]]; then
   alias ls='ls --color=auto'
 elif [[ $platform == "mac" ]]; then
   alias ls='ls -G'
 fi
 alias rm='rm -i'
 alias ..='cd ..'
 alias mv='mv -i'
 alias cp='cp -i'
 alias la='ls -a'
 alias vi='vim'
 alias gs='git status'
 alias c='clear'
```
`ls --color=auto`は自分のMacのマシンで`ls: illegal option -- -`となったのでとりあえずLinuxに限定しています。
rsyslogでLogをremoteに転送するdisk queueが溜まってしまって吐き出されない時の対処法


はじめに
========

rsyslog でログをRemoteのログサーバに転送したいときに、RemoteのログサーバがDownしていた時に備えて、Local DISK上のQueueを利用する設定をしておくことはよく行うと思います。
ただ、その際にDISK上にQueueされたログデータが復帰時に転送されないことがあり、その際の対処法のメモです。



環境・Version
--------

* OS: Amazon Linux 2013.03 に色々updateをしたVersion
* rsyslogd: 5.8.10

### 転送の設定(参考)
`/var/lib/rsyslog` がQueueに使うDir, QueueName は `local1` になります。

```/etc/rsyslog.d/00-local1.conf
# ### begin forwarding rule ###
# The statement between the begin ... end define a SINGLE forwarding
# rule. They belong together, do NOT split them. If you create multiple
# forwarding rules, duplicate the whole block!
# Remote Logging (we use TCP for reliable delivery)
#
# An on-disk queue is created for this action. If the remote host is
# down, messages are spooled to disk and sent when it is up again.
$WorkDirectory /var/lib/rsyslog # where to place spool files
$ActionQueueFileName local1 # unique name prefix for spool files
$ActionQueueMaxDiskSpace 10g   # 1gb space limit (use as much as possible)
$ActionQueueSaveOnShutdown on # save messages to disk on shutdown
$ActionQueueType LinkedList   # run asynchronously
$ActionResumeRetryCount -1    # infinite retries if host is down
local1.*        @@any-remote-server:514
# ### end of the forwarding rule ###
```

症状
==========

* `/var/lib/rsyslog/local1.nnnnnnnn`(nは数字) というファイルが大量にある。 
* remote サーバは復帰しているが、localのrsyslogが転送している様子はない
* rsyslogを何度再起動しても再送してくれない

主な原因
--------

rsyslogはremoteにログを転送する際に QueueIndex ファイルを作るようです。
`/var/lib/rsyslog/local1.qi` というファイル名になりますが、
これが存在しないか内容がおかしいと再送しないようです。


対処
======
主な対処
--------
QueueIndexファイルを作成する perl scriptがあるので、それを使うと上手くいきました。
こんな感じになります。

```
sudo su -   
curl -O https://gist.githubusercontent.com/wilrnh/9373137/raw/dfa4ddb5bca5f5114ca0367055aa0521e318c7e1/recover_qi.pl
perl recover_qi.pl -w /var/lib/rsyslog/ -f local1 -d 8 > local1.qi
cp local1.qi /var/lib/rsyslog
service rsyslog restart  # もしくは /etc/init.d/rsyslog restart
```

このように queue index ファイルをQueueDirに置いてから、rsyslog を restartさせると再送してくれます。

例外1: 謎の空のqueueファイルができてしまう
-------
この時は厄介なのですが、

1. `/etc/rsyslog.d/00-local1.conf` で LogDir を別の存在するDIRに変更してrsyslog再起動
2. もう一度DIRを元に戻してrsyslog再起動
3. 空のQueueファイルを削除して、もう一度 Queue indexファイルを作成して rsyslog再起動
4. なんかもう一回rsyslog再起動

などでなおりました（謎）。

サーバの再起動ができるなら、それでも治るかもしれません。


例外2: Queueファイルが１つだけ残ってしまった
-------

もう一度、QueueIndexファイルを作って rsyslog restart すると消えました。

さいごに
=======

bug reportっぽいものもあがっており、古いrsyslogだからかもしれませんが、厄介な問題です。。
【祝Seoulリージョンオープン】AWSが提供しているリージョンをCLIで確認する方法


## Seoulリージョン
Tokyoリージョンは、ap-northeast-1ですが
Seoulリージョンは、ap-northeast-2だそうです。

## cliでの確認は __ec2 describe-regions__ を使う
```
$ aws describe-regions
{
    "Regions": [
        {
            "RegionName": "eu-west-1",
            "Endpoint": "ec2.eu-west-1.amazonaws.com"
        },
        {
            "RegionName": "ap-southeast-1",
            "Endpoint": "ec2.ap-southeast-1.amazonaws.com"
        },
        {
            "RegionName": "ap-southeast-2",
            "Endpoint": "ec2.ap-southeast-2.amazonaws.com"
        },
        {
            "RegionName": "eu-central-1",
            "Endpoint": "ec2.eu-central-1.amazonaws.com"
        },
        {
            "RegionName": "ap-northeast-2",
            "Endpoint": "ec2.ap-northeast-2.amazonaws.com"
        },
        {
            "RegionName": "ap-northeast-1",
            "Endpoint": "ec2.ap-northeast-1.amazonaws.com"
        },
        {
            "RegionName": "us-east-1",
            "Endpoint": "ec2.us-east-1.amazonaws.com"
        },
        {
            "RegionName": "sa-east-1",
            "Endpoint": "ec2.sa-east-1.amazonaws.com"
        },
        {
            "RegionName": "us-west-1",
            "Endpoint": "ec2.us-west-1.amazonaws.com"
        },
        {
            "RegionName": "us-west-2",
            "Endpoint": "ec2.us-west-2.amazonaws.com"
        }
    ]
}
```

### jqでリージョンだけを取得する
```
$ aws ec2 describe-regions | jq '.Regions[].RegionName'

"eu-west-1"
"ap-southeast-1"
"ap-southeast-2"
"eu-central-1"
"ap-northeast-2"
"ap-northeast-1"
"us-east-1"
"sa-east-1"
"us-west-1"
"us-west-2"
```

### URL直接入力で確認できましたヽ(=´▽`=)ﾉ
https://ap-northeast-2.console.aws.amazon.com/console/home?region=ap-northeast-2#
![AWS_Management_Console.jpg](https://qiita-image-store.s3.amazonaws.com/0/24337/0360f51b-16d9-581c-35f4-ae2027782ed3.jpeg "AWS_Management_Console.jpg")
Project Eulerをシェル芸で解いてみる(Problem 7)

# 概要
Project Euler[^pe]は、数学的な問題解決能力を要求する、プログラミング問題集である。
一般的なオンラインプログラミングジャッジとは異なり、解答するプログラミング言語は、特に限定されていない。
フォームに入力した値だけで正誤を判別するため、適切なアルゴリズムさえ考案できれば、あらゆるプログラミング言語で解答することが可能である。
そのため、Web上では様々な手法による解答が公開されている。

しかし、シェル芸[^def]による解答は、私が探した限りでは、殆ど見つからなかった。
そこで、私自身の勉強も兼ねて、Project Eulerをシェル芸で解いてみることにした。
<br>

本記事では、Project EulerのProblem 7を、シェル芸で解いた際の過程を述べる。

# 実行環境
* Arch Linux (x86\_64, 4.3.3-2-ARCH)
* bash (4.3.42, POSIX互換モード)
* GNU coreutils (8.24)
* gawk (4.1.3)

# 問題文
[原文 ([https://projecteuler.net/problem=7](https://projecteuler.net/problem=7))]

> By listing the first six prime numbers: 2, 3, 5, 7, 11, and 13, we can see that the 6th prime is 13.
> What is the 10 001st prime number?

[日本語訳 ([http://odz.sakura.ne.jp/projecteuler/index.php?cmd=read&page=Problem%207](http://odz.sakura.ne.jp/projecteuler/index.php?cmd=read&page=Problem%207))]

> 素数を小さい方から6つ並べると 2, 3, 5, 7, 11, 13 であり, 6番目の素数は 13 である.
> 10 001 番目の素数を求めよ.


正答は、注釈[^ans]に記載する。

# 解法

```sh:prob_007.sh
1	#!/bin/sh
2	
3	yes 高須クリニック \
4	| # 入力行を無限に出力
5	awk '$0=NR' \
6	| # 入力行を行番号に対応した自然数へ変換
7	factor \
8	| # 自然数を素因数分解
9	awk 'NF == 2 {print $2}' \
10	| # 素数の抽出
11	awk 'NR == 10001 {print; exit}'
12	  # 10001番目の素数の出力
```

## 解法の解説
素数を小さい方から順に列挙し、10001番目になるものを抽出すれば良い。

この解法による処理の詳細は、概ねコードに記載してあるコメントの通りである。
以下、概略のみを述べる。

まず、3~9行目のコマンドによって、素数を列挙する。
そして、11行目のawkによって、10001番目の素数を抽出している。

以上が、10001番目の素数を求める方法である。

# 参考にしたもの

<blockquote class="twitter-tweet" lang="ja"><p lang="ja" dir="ltr"># yes &#39;高須クリニック&#39; <a href="https://twitter.com/hashtag/%E5%8D%B1%E9%99%BA%E3%82%B7%E3%82%A7%E3%83%AB%E8%8A%B8?src=hash">#危険シェル芸</a></p>&mdash; ぐれさん (@grethlen) <a href="https://twitter.com/grethlen/status/502086348988096512">2014, 8月 20</a></blockquote>

~~シェル芸界に危険人物が多いと言われるのは、だいたいこの人のせい。~~

# 雑記
* 「こんな別解があるよ」や、「こうすればもっと効率化できるぜ」、「こう書けばエレガントですわよ」等の意見がありましたら、気軽に教えていただけますと幸いです🐺
* 現在の進捗状況 -> [https://github.com/gin135/Project_Euler/tree/master/sh](https://github.com/gin135/Project_Euler/tree/master/sh)
<br>

* AWKは至高のスクリプト言語(当社比)。
* しばらくは(シェル芸的に)簡単な問題が連続しているので、当面は手抜き解説が続くかもしれません。

- - -

[^pe]: About - Project Euler ([https://projecteuler.net](https://projecteuler.net))
[^def]: シェル芸の定義 >> シェル芸 - 上田ブログ ([https://blog.ueda.asia/?page_id=1434](https://blog.ueda.asia/?page_id=1434))
[^ans]: 104743
Sublime Text 3のEmmetでPyV8エラー（osx）※2016.05.11更新


※2016.05.11更新

当方の環境、sublime text3 build 3112でPyV8エラーが再発しましたが、
下記の、公式の指定通りの配置に修正すると不具合治りました。


```command:sublime_text_3_build_3112
/Users/（ユーザー名）/Library/Application Support/Sublime Text 3/Packages/PyV8/pyv8-osx-p3
```

https://github.com/emmetio/pyv8-binaries
よりダウンロード解凍した、
pyv8-osx-p3フォルダを~~下記の場所~~👆上記の場所へ格納する。

```command:以前の格納場所
/Users/（ユーザー名）/Library/Application Support/Sublime Text 3/Installed Packages/PyV8/pyv8-osx-p3
```

※公式では下記の場所に格納とあるが、これだと（今までは）動かなかった。**動くようになりました**

```command:公式の指定
/Users/（ユーザー名）/Library/Application Support/Sublime Text 3/Packages/PyV8/pyv8-osx-p3
```
ChromeでTODO管理ができる拡張機能「Prioritab」を入れてみた

GoogleChromeで新規タブを開くとTODO管理機能になる拡張機能「Prioritab」というのが出たとのことで、使ってみました。

## Prioritab
https://chrome.google.com/webstore/detail/prioritab/napbejkndjhcciibiglkimmgdlfjcbnp?hl=ja


使い勝手的にはTrelloをかなりシンプルにしたような感じですかね。（共有できないけど）
進捗管理とかはできないっぽいですが、タスクを箇条書きにして、終わった終わらないみたいなレベルの管理はできそうです。

あと右上の方に、今日の時間は何％経過したとか、今月は何％経過したとか出てるのが緊迫感あります。

ちょっとしたTODO管理したいな〜というのには便利かも！
GitPythonで特定のブランチ/タグを指定してcloneする

# 目的
表題の通り。
pythonで以下のコマンドと等価な操作を実行したい。

    git clone <git_repo> -b <branch>

# 解決策

GitPythonを利用して実現する場合以下の通り実行する。

    git.Repo.clone_from(<git_repo>, <dest>, branch=<branch>)


# 例
## ブランチの指定
GitPythonの’gh-pages'ブランチを'/home/ser/GitPython'にクローンする：

```lang:python
#!/usr/bin/env python

import git

git.Repo.clone_from('https://github.com/gitpython-developers/GitPython',
                    '/home/user/GitPython',
                    branch='gh-pages')
```


## タグの指定
GitPythonの’1.0.1'タグを'/home/user/GitPython'にクローンする：

```lang:python
#!/usr/bin/env python

import git

git.Repo.clone_from('https://github.com/gitpython-developers/GitPython',
                    '/home/user/GitPython',
                    branch='1.0.1')
```
sangoからmythingsを発火させる。

#概要
mqttブローカーのsangoから、mythingsにトリガーを送る。
node-redが中継する。
#写真
![sango.JPG](https://qiita-image-store.s3.amazonaws.com/0/18104/48d44dad-78d5-4479-fa63-23b087a45e83.jpeg)

#sango設定
```
url: lite.mqtt.shiguredo.jp
port: 1883
user: you @github
pass: you pass
topic: you @github/test0
```
#meshblu設定
```
method: post
url: http:// you /data/ triggger-1 uuid
payload: {"text1": "5.5"}
headers: {"meshblu_auth_uuid": "trigger-1 uuid", "meshblu_auth_token": "trigger-1 token"}
```
MySQL WorkbenchからArcfourを無効化したSSHサーバ経由でデータベースに接続する

# はじめに
CentOSの標準設定など、多くのSSHサーバではArcfour暗号化やMD5ダイジェストが利用されています。

Arcfourは商標権の関係から[RC4](https://ja.wikipedia.org/wiki/RC4)を改名したものです。近年解読可能との指摘があり、TLSの分野では[RFC 7465](https://tools.ietf.org/html/rfc7465)により使用が禁止されました。そのためSSHにおいてもセキュリティポリシーにより使用禁止とするところが出てきています。
MD5ダイジェストについても脆弱性が指摘されて久しいです。

しかし、MySQL Workbenchをはじめとするデータベース管理ソフトのSSHトンネル経由の利用では依然としてArcfourやMD5に依存しているものがあります。
MySQL Workbenchの2016年1月現在の最新版において、[RC4とMD5を無効化する対策を講じた](http://qiita.com/emittam/items/cff927f232c958c2dccf)サーバ経由でデータベースに接続することはできません。

![workbench_error.png](https://qiita-image-store.s3.amazonaws.com/0/41007/21badb05-2fcd-b521-3e1e-277050889264.png)

# 対応策

MySQL Workbenchは[Paramiko](http://www.paramiko.org/)というPythonのSSHライブラリを利用しており、インストール先フォルダにあるこれを入れ換えることによりそのようなサーバにも接続できるようです。

## Paramikoをダウンロードする

[GitHubのリポジトリ](https://github.com/paramiko/paramiko/releases)よりParamikoをダウンロードします。最新版[^1]でかまいません。

[^1]: 本稿執筆時点でバージョン1.16.0

ダウンロードしたら展開します。

## Paramikoライブラリをコピーする
ライブラリは下記の場所にあります。

|OS     |所在フォルダ                                                           |
|-------|----------------------------------------------------------------------|
|Windows|(インストール先[^2])\python\site-packages\paramiko                     |
|OS X   |/Applications/MySQLWorkbench.app/Contents/Resources/Libraries/paramiko|

[^2]: 初期設定では C:\Program Files\MySQL\MySQL Workbench 6.3 CE

このフォルダをリネーム等により退避させた上で、Paramikoのアーカイブにある「paramiko」フォルダをそのままコピーします。

![workbench_dir.png](https://qiita-image-store.s3.amazonaws.com/0/41007/5cfba4ec-0384-2137-16dc-40884cc4e036.png)
![paramiko.png](https://qiita-image-store.s3.amazonaws.com/0/41007/b8ad9ff6-01c1-cd10-68ea-71035ab552ec.png)

## Linuxの場合
MySQL Workbenchを実行しているマシンがLinuxである場合、システムにインストールされたParamikoライブラリを使用します。したがって、システムに最新版のParamikoをインストールします。

# 参考文献
[Paramiko Update Tutorial - MySQL Workbench Team Blog](http://mysqlworkbench.org/2015/03/paramiko-update-tutorial/)
raspberry piにwebsocketを有効にしたmosquittoをインストールする

2016/1/10追記

これだけではmosquitto.confでwebsocketsを使用する際にエラーが出ます。調査中。

[こちらと](http://qiita.com/voluntas/items/0cb4b1e7b75b3a00cede),[こちらの](http://tomowatanabe.hatenablog.com/entry/2014/04/21/095650)記事を参照しました。

#mosquittoの構築

##ソースコードの入手
2015/1/6時点では1.4.7がありました。

```
$ wget http://mosquitto.org/files/source/mosquitto-1.4.7.tar.gz 
$ tar -xvzf mosquitto-1.4.7.tar.gz 
```

##websocketsを有効にする
websocketsを有効にしたかったのでconfig.mkの以下の行を変更

```
# Build with websockets support on the broker.
#WITH_WEBSOCKETS:=no
WITH_WEBSOCKETS:=yes
```

# make
make時にcmakeが必要になるのでapt-getしておきます。準備できたらおもむろにmakeします。

```
$ cmake .
$ make all
$ sudo make install

```

##不足しているライブラリ
足りないライブラリが出てくるので地道にインストール。
例えばコンパイル時に以下のエラーが出てきたら

```
mosquitto.c:46:29: fatal error: libwebsockets.h: そのようなファイルやディレクトリはありません
 #  include <libwebsockets.h>
                             ^
```

apt-cacheコマンドで地道に探す。

```
$ apt-cache search websockets
（略）
libqt5websockets5 - Qt 5 Web Sockets module
libqt5websockets5-dev - Qt 5 Web Sockets module - development files
libwebsocketpp-dev - C++/Boost Asio based websocket client/server library. Dev package
（略）
```

あたりをつけて

```
$ sudo apt-get install libwebsockets-dev 
```

結局apt-get installしたのは以下のとおり。

- libwebsockets-dev 
- uuid-dev

#動作確認

まずブローカを動かします。

```
$ mosquitto -v
1452117847: mosquitto version 1.4.7 (build date 2016-01-07 06:57:15+0900) starting
1452117847: Using default config.
1452117847: Opening ipv4 listen socket on port 1883.
1452117847: Opening ipv6 listen socket on port 1883.
```


別のターミナルからメッセージをpubします。

```
$ mosquitto_pub -h localhost -p 1883 -t hello -m world
```

そうするとブローカーが動作しているターミナルに出てきます。

```
1452118052: New connection from ::1 on port 1883.
1452118052: New client connected from ::1 as mosqpub/2577-raspberryp (c1, k60).
1452118052: Sending CONNACK to mosqpub/2577-raspberryp (0, 0)
1452118052: Received PUBLISH from mosqpub/2577-raspberryp (d0, q0, r0, m0, 'hello', ... (5 bytes))
1452118052: Received DISCONNECT from mosqpub/2577-raspberryp
1452118052: Client mosqpub/2577-raspberryp disconnected.
```

ローカル環境下ですがちゃんと動いています。
Grenning > コンセプトを試してみる前に、ツールの使い方を学ぼうとしてはいけない

@ テスト駆動開発による組み込みプログラミング by James Grenning

> コンセプトを試してみる前に、ツールの使い方を学ぼうとしてはいけない

よくやる失敗で、ツールの使い方に時間をかけてしまい、実際のやりたいことまでたどり着かないこと。

先にやりたいことを定義しておいて、それに合わせて必要なツールの使い方を学ぶのを最近はずっとしているが、まあまあうまくできていると思う。

一方で、時間がない開発になるとそれまで蓄積してきた情報が時間短縮に役に立つ。その蓄積は日々少しずつやっておく方がじっくり深く学ぶことができる。
Grenning > たとえクロックが[ロールオーバー]しても(この場合、136年ごと)...

@ テスト駆動開発による組み込みプログラミング by James Grenning

> たとえクロックが<font color=red>ロールオーバー</font>しても(この場合、136年ごと)...

この本では「ロールオーバー」という言葉になっている。

16bitの場合は18時間。

### 関連しそうな用語

- [ラップアラウンド](http://www.sophia-it.com/content/%E3%83%A9%E3%83%83%E3%83%97%E3%82%A2%E3%83%A9%E3%82%A6%E3%83%B3%E3%83%89)
- warp around
技術英語 > While it may be subjective and [dependent on personal preference],

http://www.ask.com/government-politics/examples-inferior-technology-3c3594b010d29122

> While it may be subjective and <font color=red>dependent on personal preference</font>, 

主観的で個人の好みによる

google検索した時に、以下の両者ともだいたい同じくらいの数（３０，０００）が出てきた。

- dependent on personal preference
- dependent on personal preferences

http://eow.alc.co.jp/search?q=preference&ref=sa

単数形と複数形どちらを使うかについて[Stack exchange](http://english.stackexchange.com/questions/298159/dependent-on-personal-preference-dependent-on-personal-preferences)にて質問しておいた。
npm googleapisのインストールに失敗する場合

失敗箇所を見つけるために、-loglevel verboseオプションをつける
必要なパッケージを見つけ、個別にインストールする
###手順1
`npm i --save googleapis -loglevel verbose`

###エラー箇所の目星
>npm info postinstall request@2.65.0
npm verb unlock done using /...
/

この辺りで止まれば、request@2.65.0をインストールする
`
###手順2
 `npm i --save パッケージ名 -loglevel verbose`

###手順3
再度、googleapisをインストールする
問題があれば手順2を繰り返す

うちの環境では10個をくらい個別でインストールした
原因は不明
今年の抱負は、Lazarus の記事を投稿したいのです

## 新年、あけましておめでとうございます。
せっかく年も明けたので、何か新しい事もしなくてはと思い Qiita を利用してみようと考えました。
Qiita って、開発者が多い情報共有サイトと伺ったのですが、最近 FPC（Free Pascal Compiler & LCL）ばかりを使用していて、かなりマイナー路線を歩んでいます。
情報配信して見ようと思っても、既にダメダメになりそうな予感です。
タグで「FPC」を検索してもヒットせず、「Lazarus」を検索してもヒットせず、
「Pascal」で検索して、やっといくつかの記事がみつかった程度なのでマイナー感を改めて味わえましたw
流石に「Delphi」だとかなりヒットするのですけど。。ww

でも、Lazarus がお気に入りなりつつあるので、
今年は Lazarus の記事を投稿するぞ♪　と思っていますので、
タグも 「Lazarus」 にしたいと思います！　( ･ิω･ิ)
python interactive mode、docstringを使ってみる

#目次
- python interactive mode
- python docstring

##Interactivemode
`python3 -i [file名]`で呼び出せる。これを使えばファイルの中身を引き継いだ状態でシェルを動かせる。

例えば

```lang:test.py
from operator import floordiv, mod

def divide_exact(n, d):
    return floordiv(n, d), mod(n, d) 
    #floordiv(n, d) = n // d, mod(n, d) = n % d
	
q, r = divide_exact(2013, 10)
	
print('Quotient:', q)
print('Remainder:', r)
```

というやり方もあるがinteractive modeを使えば

```lang:test2.py
from operator import floordiv, mod

def divide_exact(n, d):
    return floordiv(n, d), mod(n, d) 
    #floordiv(n, d) = n // d, mod(n, d) = n % d

q, r = divide_exact(2013, 10)
```

をやってからターミナルに戻って`python3 -i test2.py`

```
>>> q
201
>>> r
3
```
##Docstring
簡単にいえばそれぞれの関数が何をするのかをコメントで書くことを指す。基本的に`def`の真下に書くのが基本。

```lang:test2.py
from operator import floordiv, mod

def divide_exact(n, d):
    """return the quotient and remainder of dividing N by D"""
    #コメント内ではなぜか引数を大文字にするという習慣があるらしい
    
    return floordiv(n, d), mod(n, d) 

q, r = divide_exact(2013, 10)
```

実際にどんなことが起きるのかを付け足しても構わない。

```lang:test2.py
from operator import floordiv, mod

def divide_exact(n, d):
    """return the quotient and remainder of dividing N by D

    >>> q, r = divide_exact(2013, 10)
    >>> q
    201
    >>> r
    3
    """
    return floordiv(n, d), mod(n, d) 

```

また`python3 -m doctest test2.py`でコメントアウトで書いた内容をそのまま動かすことも出来る。`python3 -m doctest -v test2.py`で詳細を追うことも可能。

```
Trying:
    q, r = divide_exact(2013, 10)
Expecting nothing
ok
Trying:
    q
Expecting:
    201
ok
Trying:
    r
Expecting:
    3
ok
1 items had no tests:
    test402
1 items passed all tests:
   3 tests in test402.divide_exact
3 tests in 2 items.
3 passed and 0 failed.
Test passed.

```

エラーの場合はこんな感じ

```
Trying:
    q, r = divide_exact(2013, 10)
Expecting nothing
ok
Trying:
    q
Expecting:
    201
ok
Trying:
    r
Expecting:
    2
**********************************************************************
File "test402.py", line 9, in test402.divide_exact
Failed example:
    r
Expected:
    2
Got:
    3
1 items had no tests:
    test402
**********************************************************************
1 items had failures:
   1 of   3 in test402.divide_exact
3 tests in 2 items.
2 passed and 1 failed.
***Test Failed*** 1 failures.
```
C言語を頑張る！　04

あけましておめでとうございます！
えりにゃんです。

新年早々、課題が解けずにめちゃくちゃ困っています。。。
通信だからリアルタイムに先生に聞けなくてモヤモヤが続いている。。。。

#構造体変数について
出力がうまくなされていないので、未完成です。

##もんだい
title(文字列:タイトル)、value(整数:価格)、pages(整数:ページ数) をメンバーとして持つBook構造体を宣言し、実行例と同じ出力となるよう初期化して表示しなさい。

>▼実行例
>{title=Bible,value=1365,pages=687}

##作ってみた...けど。。。
```lang:Book構造体
#include<stdio.h>

typedef struct Book {
    char title[100];
    int value;
    int pages;
} Book;

int main(void)
{
Book = {"Bible",1365,687};
printf("{title=%s,value=%d,pages=%d}",Book.title,Book.value,Book.pages);

    return 0;
}
```

##ひとこと
コンパイルエラーはしていないのですが、何も出力されない状態です。
すごく単純な見落としをしている、、、きがするのですが。。。
いったん冷静になって明日見直します、、しくしく。
アルゴリズム1000本ノック #8. Add 2 numbers

#### Problem
問題は [LeetCode](https://leetcode.com/problems/add-two-numbers/) より拝借しています.

```
正の整数を保持する２つの単方向リストが与えられた時, 各要素を１つの桁のように考えて
２つのリストの合計値を保持するリストを返却せよ. 次の要素への桁上りも考慮すること.

Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
Output: 7 -> 0 -> 8
```

#### Solution
整数同士の足し算の筆算を行うようなイメージです. （見た目的には低い位と高い位の順番が逆ですが）
２つのリストの先頭から開始して, 合計値を求め, 10以上の場合は次の要素の計算に1を持ち越していく繰り返しです. 先に片方のリストが空になった場合は一方の値だけを合計値として扱います. 両方のリストが空になった時点で計算は終了です.

最後の計算結果が10以上であった場合には, 最後に1を持ち越しておくことをお忘れなく.

```py
# Definition for singly-linked list.
# class ListNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution(object):
    def addTwoNumbers(self, l1, l2):
        """
        :type l1: ListNode
        :type l2: ListNode
        :rtype: ListNode
        """
        dummyHead = ListNode(0);
        curNode = dummyHead
        
        if not l1 and not l2: return None
        elif not l1:          return l2
        elif not l2:          return l1
        
        co = 0 # carry over from the previous node
        while l1 or l2:
            sum = 0
            if l1:
                sum += l1.val
                l1 = l1.next
            if l2:
                sum += l2.val
                l2 = l2.next
                
            sum += co
            co  = sum / 10
            sum = sum % 10
            
            curNode.next = ListNode(sum)
            curNode = curNode.next
        
        if co == 1:
            curNode.next = ListNode(1)
        
        return dummyHead.next
```

Java code:

```java
/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
public class Solution {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        if (l1 == null && l2 == null) return null;
        else if (l1 == null) return l2;
        else if (l2 == null) return l1;
        
        ListNode dummyHead = new ListNode(0);
        ListNode curNode   = dummyHead;
        int co  = 0; // carry-over from previous nodes
        while (l1 != null || l2 != null) {
            int sum = 0;
            
            if (l1 != null) {
                sum += l1.val;
                l1 = l1.next;
            }
            if (l2 != null) {
                sum += l2.val;
                l2 = l2.next;
            }
            sum += co;
            
            co   = sum / 10;
            sum %= 10;
            
            curNode.next = new ListNode(sum);
            curNode = curNode.next;
        }
        
        if (co == 1) curNode.next = new ListNode(1);
        return dummyHead.next;
    }
}
```

`N`を２つのリストの内長い方の長さだとして, 計算量・空間量ともに`O(N)`となります.
ただし空間量に関しては, 今回のプログラムでは結果の格納に新しい単方向リストを用意していますが, 実際には片方のリストを上書きしていく形でも実行結果に影響は及ぼしません. この場合は余分な空間量は消費しないことになります.
Springで複数のsubmitボタン対応

画面実装をしていると、1つのformの中に複数のsubmitボタンを配置する、なんてケースがあると思います。自分は昔Struts1系でこのようなケースに出会いかなりめんどい、かつ複雑な実装で制御していましたorz
Spring MVCでは、このようなケースも@RequestMappingアノテーションのparams属性で簡単に制御できます。params属性とは、マッピング対象にするリクエストパラメータを指定する属性です。



例えば(若干強引ですが)以下のように1つのformの中に2つのsubmitボタンがあるとします。

```
<form action="/customers/edit" method="post" >
	<input type="text" id="firstName" name="firstName" /> 
	<input type="text" id="lastName" name="lastName" /> 

	<input type="submit" name="goToTop" value="戻る" />
	<input type="submit" name="update" value="更新" />
</form>
```

「戻る」ボタン、「更新」ボタンを押下した場合、それぞれリクエストボディは以下のようになります。

```「戻る」ボタンを押下した場合.
firstName:入力値
lastName:入力値
goToTop:戻る
```
```「更新」ボタンを押下した場合.
firstName:入力値
lastName:入力値
update:更新
```

この時実行されるメソッドはparams属性とリクエストパラメータ(リクエストボディ)のname属性が一致したものになります。

```CustomerController.java
@Controller
@RequestMapping("customers")
public class CustomerController {

	～色々略～

	@RequestMapping(value = "edit", params = "goToTop", method = RequestMethod.POST)
	String goToTop(/* 任意 */) {
		～略～
	}

	@RequestMapping(value = "edit", params = "update", method = RequestMethod.POST)
	String update(/* 任意 */) {
		～略～
	}
}
```

なので、「戻る」ボタンが押下された場合はgoToTopメソッドが、「更新」ボタンが押下された場合はupdateメソッドがマッピングされ実行されます。

また、上記はPOSTメソッドですがGETメソッドでも考え方は同じです。ただ、GETメソッドの場合はURLパラメータで判断されます。上記をGETメソッドに変えた場合、

```
localhost:8080/customers/edit?lastName=入力値&firstName=入力値&goToTop=戻る
localhost:8080/customers/edit?lastName=入力値&firstName=入力値&update=更新
```

となり、それぞれURLパラメータにgoToTop、updateがあるのでPOSTの時と同じようにマッピングされます。

以上です。