OmniAICreator/Qiita-1.07M huggingface dataset:
覚えやすい位置表現（what3words）による行動支援の可能性 / Possibilities of the what3words for disaster response

## what3words x GSI Tiles
what3words と地理院タイルを組み合わせて利用するサイトを作ってみている。

I've developed an web site that combines what3words and GSI Tiles.

<img width="764" alt="スクリーンショット 2016-04-26 5.33.35.png" src="https://qiita-image-store.s3.amazonaws.com/0/102082/8d7d54ce-9f47-3b96-60ff-3878187ec1da.png">

デモサイト demo site：http://hfu.github.io/w3w-gsi-tiles/
レポジトリ repository：https://github.com/hfu/w3w-gsi-tiles

what3words も地理院タイルも誰でも利用可能だ。

Both what3words and GSI Tiles are available to everyone.

## 行動支援の可能性 Possibilities for field support
この組み合わせは例えば熊本地震対応での行動支援に役立つか。熊本地震対応で撮影したタイル形式のオルソ画像をこのサイトに加えてみた。

For example, is this combination useful for field support for the disaster response to the Kumamoto Earthquake? I have added one of the tile-based orthophotos produced for the response for the Kumamoto Earthquake.

日本では屋根に被害を受けた時にカバーするシートは青色であることが多く、オルソ画像ではそのようなシートを見ることができる。ここにカーソルを乗せることで、what3words の id を表示することができる。

In Japan the damaged roofs tend to be covered by blue sheets. We are able to see such kinds of sheets from the orthophotos. If you put the cursor onto the roof, you can see the ID from the what3words.

![スクリーンショット 2016-04-26 5.44.44.png](https://qiita-image-store.s3.amazonaws.com/0/102082/dbdaf9aa-cf40-8156-a209-a9fa6002cc00.png)

行動する際に、位置を書き留めやすく表示するほか、建物の id に近いものとして運用することも可能かもしれない。

This may be useful at the field because this ID is easy to write down. In addition, we may be able to operate this as a kind of the ID for the damaged building.

I am not affiliated with what3words, but I have got friendly contact with Mr. Steven Ramage.
ElasticBeanstalk Multicontainer Docker上でMySQLが起動しない問題の解決法

`eb local run` で起動した場合は正常に起動するが、EB上に配置するとログに `MySQL init process in progress...` が複数回出力されてコンテナが落ちている。これはmysql:5.6, mysql5.7などバージョンを変更しても同様だった。

```
~
Database initialized
MySQL init process in progress...
/usr/local/bin/docker-entrypoint.sh: line 43:    64 Killed                  "$@" --skip-networking
MySQL init process in progress...
MySQL init process in progress...
MySQL init process in progress...
MySQL init process in progress...
MySQL init process in progress...
MySQL init process in progress...
MySQL init process in progress...
MySQL init process in progress...
```

原因は不明だが、コンテナのメモリを256MBから1GBにあげたら解決した。
SQL | AS は実はなくても動く

以下はどちらも同じだ。

## ASのある世界

```sql
SELECT
  'Alice' AS alice,
  'Bob' AS bob
;
```

## ASのない世界

```sql
SELECT
  'Alice' alice,
  'Bob' bob
;
```

## 結果


```sql
+-------+-----+
| alice | bob |
+-------+-----+
| Alice | Bob |
+-------+-----+
```


# 環境

- mysql  Ver 14.14 Distrib 5.7.12, for osx10.11 (x86_64) using  EditLine wrapper



<!-- Update From Qiita API -->

# チャットメンバー募集


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

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


# メンター受付


https://menta.work/user/5694

<!-- Update From Qiita API -->
CentOS7にErlangをインストールする

既存のWebアプリケーションにおいて、一機能がボトルネックとなっており、解決策としてRubyで構築していた処理をErlangで書き直せないか検討しています。まずErlangを試すためにインストールから。

以下記事を参考にさせていただきました。
[CentOS7にElixir+Phoenixを入れてみる](http://qiita.com/Nappa723/items/1e5b5f961754dc79dbe6)


#目的と環境
**目的**
CentOS7にErlangの環境を構築して動かす。

**環境**

```bash:env
[Aldebaran@erlang ~]$ cat /etc/redhat-release 
CentOS Linux release 7.2.1511 (Core) 
```

#インストールする
[Erlang公式](http://www.erlang.org/downloads)を見ると、最新バージョンは18.3らしい（2016/04/26）

**ソースコード取得**

```bash:install
$ cd /usr/local/src
$ wget http://www.erlang.org/download/otp_src_18.3.tar.gz
$ ls -lh
-rw-r--r-- 1 erlang erlang 66M Mar 15 20:58 otp_src_18.3.tar.gz
```

**構築に必要な環境整備**
[インストール手順](https://github.com/erlang/otp/blob/maint/HOWTO/INSTALL.md)によると、ビルドには以下が必要とのことです。
・Compiler -- GNU C Compiler, gcc
・Perl5
・ncurses
・sed
・OpenSSL
・Oracle Java SE JDK
※そのほか、GUIで動かすために必要なSWがありましたが、コマンドラインで動かすので省略します。

各SWがすでにインストールされているか現状を確認する
未インストールの場合はyumでインストールする。

```bash:install
$ gcc -v
gcc version 4.8.5 20150623 (Red Hat 4.8.5-4) (GCC) 
$ perl -v
This is perl 5, version 16
$ yum install ncurses ncurses-devel
$ sed --version
sed (GNU sed) 4.2.2
$ yum install openssl openssl-devel
$ curl -OL --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u73-b02/jdk-8u73-linux-x64.rpm
$ rpm -ivh jdk-8u73-linux-x64.rpm
$ java -version
java version "1.8.0_73"
```

**wgetで取得したソースコードを展開して、ビルドする**

```bash:build
$ tar -zxvf otp_src_18.3.tar.gz 
$ cd otp_src_18.3
$ ./configure
```

Makefileの結果、警告が出てる？

```bash:failed
**  APPLICATIONS DISABLED **
odbc : ODBC library - link check failed

**  APPLICATIONS INFORMATION  **
wx : wxWidgets not found, wx will NOT be usable

**  DOCUMENTATION INFORMATION **
documentation  : 
                 xsltproc is missing.
                 fop is missing.
                 The documentation can not be built.
```

特にインストール資料には明記されていないものもあるが、ビルド時に必要なSWがあるらしい。必要と思えるものを検索して、導入する。wxWidgetsはインストール資料によるとGUIアプリ用らしいので無視する。

```bash:install
$ yum install unixODBC  unixODBC-devel fop
```

再度、Makefileを作成してmakeする

```bash:build
$ ./configure
$ make
$ make install
```

**動作確認する**

```bash
$ which erl
/usr/local/bin/erl

$ erl
Erlang/OTP 18 [erts-7.3] [source] [64-bit] [async-threads:10] [hipe] [kernel-poll:false]
Eshell V7.3  (abort with ^G)
1> 
```

Erlangで1+1=2を経由して、ThisisAnfield.する

```erlang
1> X = 1.
1
2> Y = 1.
1
3> X + Y.
2
4> io:fwrite("ThisisAnfield!").
ThisisAnfield!ok
```

Erlangのインストールと、対話シェルから算術演算子と、文字列出力を試しました。長年色々な並行処理基盤を支えてきた言語であり、非常に関心があります。今後はElixirなどにも手を広げたい。
google map api でのセキュリティについてのベストプラクティス

google map APIキーを発行しようと思って公式サイト読んでいたら、日本語訳がないけど大切そうな内容であるセキュリティについての情報があったので、[Best practices for securely using API keys](https://support.google.com/cloud/answer/6310037?hl=ja&ref_topic=6262490)を意訳して、メモメモ。

# Best practices for securely using API keys

API keyを使う時には注意しないと、思わぬ支払いが発生しますよと。次の６点を要チェック。

## 1. API key はコードに直接埋め込まない
環境変数とかで管理して読み込むようにしましょう。

## 2. API key をGithubなどで管理しない
API keyをファイルで管理する場合`gitignore`させる。

## 3. API key は指定したIPアドレス、ドメイン、利用環境のみで使用できるよう制限させる
各 API key それぞれで設定できるので、設定する。

## 4. 不必要な API key は削除しておく
攻撃される要因は減らしましょう。

## 5. 定期的に API key を再発行する
API key は再発行してから24時間、古い key も利用できます。

## 6. コードを公開する前に見直す。
API key はもちろん、その他プライベートな情報を含んでいないか確かめましょう。

# 以上
当たり前のことばかりですが、大切なことなので、チェックしておきました。
MySQL — サブクエリに AS を付けないとエラーを起こす | Every derived table must have its own alias

# 問題

たとえば、こんな風にサブクエリを書いたら怒られる。

```mysql
SELECT *
  FROM (
    SELECT User from user
  );
```

```
=> ERROR 1248 (42000): Every derived table must have its own alias
```

# 解決

AS で何かテーブル名(エイリアス名)をつけてあげること。

```mysql
SELECT *
  FROM (
    SELECT User from user
  ) AS account;
```

```sql
+-----------+
| User      |
+-----------+
| mysql.sys |
| root      |
+-----------+
```

# 理由

AS を書かないと、SQLの構文的に「FROM (テーブル名なし)」みたいに解釈される。

# 環境

- mysql  Ver 14.14 Distrib 5.7.12, for osx10.11 (x86_64) using  EditLine wrapper



<!-- Update From Qiita API -->

# チャットメンバー募集


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

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


# メンター受付


https://menta.work/user/5694

<!-- Update From Qiita API -->
objc_class referenced from エラー

解決策は以下のサイトに掲載されていたんですが、Pods 配下のtarget 全てに設定していなくてずっとエラーに。。
これだけのことにやたら時間を費やしてしまった。。orz

>[Xcode6]2015版 pod install してビルドエラーになったら確認すること
>http://blog.o24.me/?p=691

`build active architecture only` を全てNo にすることで通りました。
考えてみれば全部揃えないとですよね。。
自戒の念を込めつつメモ
PHPの$_SERVER変数のパスに関する値

PHPの$_SERVER変数のパスに関する値について、どの値を参照すれば良いか参考にするためのメモ

http://localhost/test/ でアクセスした場合
----------

    [HOME] => /home/vagrant
    [DOCUMENT_ROOT] => /vagrant/public
    [CONTEXT_DOCUMENT_ROOT] => /vagrant/public
    [SCRIPT_FILENAME] => /vagrant/public/test/index.php
    [QUERY_STRING] => 
    [REQUEST_URI] => /test/
    [SCRIPT_NAME] => /test/index.php
    [PHP_SELF] => /test/index.php

http://localhost/test/index.php でアクセスした場合
----------

    [HOME] => /home/vagrant
    [DOCUMENT_ROOT] => /vagrant/public
    [CONTEXT_DOCUMENT_ROOT] => /vagrant/public
    [SCRIPT_FILENAME] => /vagrant/public/test/index.php
    [QUERY_STRING] => 
    [REQUEST_URI] => /test/index.php
    [SCRIPT_NAME] => /test/index.php
    [PHP_SELF] => /test/index.php

http://localhost/test/?q=keyword でアクセスした場合
------------

    [HOME] => /home/vagrant
    [DOCUMENT_ROOT] => /vagrant/public
    [CONTEXT_DOCUMENT_ROOT] => /vagrant/public
    [SCRIPT_FILENAME] => /vagrant/public/test/index.php
    [QUERY_STRING] => q=keyword
    [REQUEST_URI] => /test/?q=keyword
    [SCRIPT_NAME] => /test/index.php
    [PHP_SELF] => /test/index.php
Macbook | CPU使用率が低いのに排気が止まらない

#問題

再起動しても止まらない。
3時間ぐらい排気しっぱなし。
冷房の効いた部屋。

USB類も外したりして試したけどダメ。

# 解決

**蓋を閉じてから開けたら収まりました。**

他に何をしてもダメだったら是非お試しを。

# 環境

- MacBook Air (13-inch, Early 2015)
- OSX El Capitan 10.11.14



<!-- Update From Qiita API -->

# チャットメンバー募集


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

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


# メンター受付


https://menta.work/user/5694

<!-- Update From Qiita API -->
.tmux.confをtmux 2.2に対応させる

現行で使っているのはtmux 1.8。これを2.2にあげてtmuxが動くように`.tmux.conf`を修正する。

## .tmux.conf
修正前
https://github.com/msmsny/dotfiles/blob/bcde707fe5e4269baebffce97c8e1989e9bcee97/.tmux.conf

## 2.2にあげてtmuxを起動
問題が出てくるので解決していく

### 問題点1
エラーメッセージが出る

```sh
/home/msmsny/.tmux.conf:3: unknown option: utf8
```
[changelog](https://raw.githubusercontent.com/tmux/tmux/master/CHANGES)には

```text
* UTF8 detection how happens automatically if the client supports it, hence
  the:

  mouse-utf8
  utf8

  options has been removed.
```

とあるのでutf8の設定は削除する。

```sh:.tmux.conf
# 削除
setw -g utf8 on
```

### 問題点2
new-windowで起動するシェルが設定を何も読んでいないデフォルトのシェルになってしまう

自分の場合は`~/.bash_profile`を読み込めばzshの起動＋諸々設定ロード済みの状態になるので、default-commandで設定を追加した。

```sh:.tmux.conf
set -g default-command "source ~/.bash_profile"
```

### 問題点3
プロンプトのスタイル設定が効いていない

これは1.8から1.9への変更で

```text
* The various foo-{fg,bg,attr} commands have been deprecated and replaced
  with equivalent foo-style option instead.  Currently this is still
  backwards-compatible, but will be removed over time.
```

とあるので置き換える。

```sh:.tmux.conf
# 旧
set -g status-bg black
set -g status-fg ${GREEN}
setw -g window-status-bg black
setw -g window-status-fg ${GREEN}
setw -g window-status-attr bold
setw -g window-status-current-bg black
setw -g window-status-current-fg ${GREEN}
setw -g window-status-current-attr underscore
set -g pane-active-border-fg ${GREEN}

# 新
set -g status-style "bg=black,fg=${GREEN}"
setw -g window-status-style "bg=black,fg=${GREEN},bold"
setw -g window-status-current-style "bg=black,fg=${GREEN},underscore"
set -g pane-active-border-style "fg=${GREEN}"
```

### 問題点4
ssh先のhostnameが取得できない

「sshしているpaneを選択した状態でnew-windowすると自動的にsshした状態にする」というバインドの設定をしていて

```sh:.tmux.conf
bind C-t new-window "~/git/scripts/tmux/postWindow.sh new 2> /dev/null || exec $SHELL"
```

new-windowの前のhostnameをスクリプトで取得し、sshしている。
（`postWindow.sh`が呼ぶ`getLastPaneHostname.sh`で取得）

```sh:getLastPaneHostname.sh
SIP=$(tmux display -p "#S:#I:#P")
PTY=$(tmux info |
  egrep flags=\|bytes |
  awk '/windows/ { s = $2 }
       /references/ { i = $1 }
       /bytes/ { print s i $1 $2 } ' |
  grep "$SIP" |
  cut -d: -f4)
PTS=${PTY#/dev/}
echo -n `ps -U $USER -o pid,tty,command -ww | awk '$2 == "'$PTS'" && match($0, /ssh\ .+$/) {print substr($0, RSTART + 4, RLENGTH)}'`
```

しかし`tmux info`で取得できる情報が変わってしまったようで`tty`の値を特定できなくなってしまった。（＝hostnameが取得できない）
そこで取得の方法を変えて

* `#{pane_pid}`で選択していたPIDを取得
* `pgrep`でhostnameを取り出す

としてひとまず取得できるようにした。

```sh:getLastPaneHostname.sh
PANE_PID="`tmux display -p '#{pane_pid}'`"
echo -n "`pgrep -flP $PANE_PID | awk '{print $3}' `"
```
ShoeBox：ビットマップFONTを書き出してみる (#1紹介編)

ゲームやUIのために特化したツールの詰め合わせであるShoeboxというプロダクトがあります。
![spr_shoeboxLogo.png](https://qiita-image-store.s3.amazonaws.com/0/8302/0d53ac51-84bc-3265-e926-ddf80ad8de46.png)
http://renderhjs.net/shoebox/

レトロ風2Dゲーム作成に非常に強そうな感じです。MacでもWindowsでも動作し、書き出しはUnityや Cocos2Dにも対応しています。無料で機能が豊富なのですが、イマイチ知名度がないのは、英語サイトしかないことと、**ツールとしての操作が特殊**なせいでしょうか。。数年前から見かけていましたが、無料のビットマップフォント書き出しツールを探していて、再度検索でたどり着き、まだ使ったことがなかったので（AIR製ということもあり)使い方をレポートしてみようと思います。

#利用したバージョン
ShoeBox 3.5.4。 2014年5月頃作成されたようです。これを Mac（Yosemite）上で使ってみました。なお、このツールはAIR製なのでインストール時にAIRランタイムのインストールが必要になる場合があります。

#ShoeBoxのBitmapフォントジェネレータの特徴
![fig](http://farm8.staticflickr.com/7268/7093512575_dd3c739633_o.jpg)

* 先にも述べてますが、無料ツールで、win/macで動作します。:+1:
* 文字の装飾を(PhotoShopなど)画像ソフトで作成します。既存のツールより凝ったデザインにできます。 :+1:
* テキスト画像は賢くパッキングされます。基本的なパッキングオプションは細かく指定できます。 :+1: 
* 自動カーニング設定ができます。手付けのデータにはかないませんが、そこそこ美しく仕上がるようです。 :+1:
* ２バイト文字にも対応しています。(日本語対応してないという情報もあったのですが、大丈夫のようです) :+1:
* 書き出しXML(TXT)形式は細かくカスタマイズできますが、カスタマイズしづらそうです。。 :-1:
* 操作が独特で戸惑います。 :-1::-1: _B*e*derの悪夢が脳裏に浮かぶ。_

#基本的な操作(変です)
ShoeBoxでは、ファイルの読み込み時に、ダイアログが開いて選択するのではなく、 **ファイルをツールにDrag&Drop** するか、**イメージやテキストのコピー後にツールをクリックする** という操作を行います。ビットマップFONTの書き出しツールに限らず、内包されているツール全てで共通の操作のようです。（なんでこんな事になっているか考えると、単に実装が面倒だったのではないかと。。）
また、設定ダイアログを開くにはツール上で右クリックを行います。コンテキストメニューなどは表示されずに、いきなりダイアログが開きます。（なんでこんな事になっているか考えると単に実装が面..） 設定ダイアログはリサイズできず、使い辛いです。。当時はモニタが小さかったんだろうか。

#実際の書き出し(続く！）
ここまで書いて、すでに記事としてお腹いっぱいな感じなので、次回に続けます。レトロゲームぽい固定幅ビットマップフォントの書き出しをStaring向けで行います。UnityのUiToolkit向け書き出しは公式サイトの説明をどうぞ。。

#おまけ情報

内包している他のツールも使う事があれば、記事にまとめようと思います。とりあえず下記のUnityForum上の内容をチラ見すると画像が多いのでなんとなくすごい部分が分かるかと思います。 http://forum.unity3d.com/threads/shoebox-2d-gamedev-tools.113518/

さて、ShoeBoxの作者だと思われるドイツの方の肩書きが**visual and interactive media designer**なんてずいぶん派手な感じなんですが、サイトがものすごいです。（２０１０年頃作成のようですが。) なんでもできちゃう人っているんですね。
http://www.renderhjs.net/ (なつかしflashサイト)
http://www.renderhjs.net/index_html.htm （おちついて見られるhtml版）
PHPで外部ファイルを読み込む

##はじめに
外部ファイルを読み込み方も、色々あるようなのでまとめていこうと思います。

##実装方法

外部ファイルを読み込むには以下の方法があります。

* require
* require_once
* include
* include_once
* autoload

##require

```index.php
<?php
require('test.php');
//require 'test.php';でもいいみたい

echo $name;//佐藤
?>
```

```php
<?php
$name = '佐藤';
?>
```

##include

```index.php
<?php
include('test.php');
//include 'test.php';でもいいみたい

echo $name;//佐藤
?>
```

```php
<?php
$name = '佐藤';
?>
```

##requireとincludeの違い

requireとincludeの違いは、外部ファイル読み込み時のエラーの振る舞いです。

####require
エラー時は、Fatal Errorとなり、処理が止まります。

####include
エラー時は、Warningを出力し処理は実行されます。

##requireとrequire_onceの違い

``require``と、``require_once``は同じように機能します。
違う点は、``require_once``は、指定したファイルが読み込まれている場合、同じ処理を実行しても再度読み込まれることはありません。

##autoload
私はPHPを業務で書いたことがないので、わからないのですが、
外部クラスを読みこんで使う場合に、読み込むファイルが多くなってくると、読み込む処理を書くだけでも大変になる場合があるみたいです。

そこで、クラスのオートインクルードを使います。
（JSでもライブラリの読み込みは、面倒なのでgulpで自動化したりするイメージでしょうか。）


##__autoload

``__autoload``メソッドは、インスタンス生成時に対象となるクラスが、読み込めない場合に呼び出されます。
引数には、 **読み込めなかったクラス名** が渡ります。


```index.php
<?php

$user = new User();
echo $user -> name;//佐藤

function __autoload($className){
  //$className（インスタンス生成時に読み込まれていないクラス名）
  $file = './' . $className . '.php';
  require $file;
}
?>
```

```User.php
<?php
class User {
  public $name = '佐藤';
}
?>
```
``__autoload``は、１つしか定義できない為、ファイル名とクラス名が一定のルールをもっていないと成立しません。

* １つのクラスにつき、1つのクラスファイルを作成する
* クラス名とファイル名は同じにする、など・・・

##spl_autoload_register

インスタンス生成時に対象となるクラスが読み込めない場合、指定した関数を``__autoload``の実装として登録できます。

``__autoload``の実装部分を関数として登録できるってことだと思います。

``spl_autoload_register``は、複数定義できるので``__autoload``より柔軟です。
``__autoload``よりも``spl_autoload_register``を使うことを推奨されているようです。


```php
<?php

function autoload($className){
  require './'.$className.'.php';
}

spl_autoload_register('autoload');

$user = new User();
echo $user -> name;//佐藤

?>
```

```User.php
<?php
class User {
  public $name = '佐藤';
}
?>
```

##終わり
spl_autoload_registerの理解が、まだちゃんとできていないので、
実際に使った時に、加筆修正していきたいと思います。
サーバレスアーキテクチャとイベントドリブンについてまとめ

AWS,Azure,GCPにイベントドリブンのサービスが揃ったのでこれらについてまとめてみました

# クラウドサービスのおさらい
* とりあえずAWSとAzureとGCPを比較

## AWS - Amazon Web Services
* Amazon社が運用しているクラウドサービス
* 2006年にローンチされ、業界シェアNo1
* ユーザが多いため、日本語のドキュメントやコミュニティが豊富
* 基本USドル支払いのため、為替レートに影響される
    * 支払いを円払いにするとAWSレートで計算されるので、クレジットカードのレートより安いかも

## Azure - Microsoft Azure
* Microsoft社が運用しているクラウドサービス
* 2010年にローンチされた
* リージョンが東日本と西日本にあるため、関西圏での速度が出やすい
* 円払い可能
* 日本語のドキュメントが少ない・・・

## GCP - Google Cloud Platform
* Google社が運用しているサービス
* 2008年にローンチされた
* ロードバランサがリージョンを跨いで使える
* ライブマイグレーション機能あり
* 現状、日本にリージョンがない
    * 2016年度内に日本リージョンが来るらしい
    * [日本リージョンが来る前にGoogleCloudPlatformを使える状態にしてみた](http://qiita.com/kazu23pole/items/057c8495c22f20e25000)
* 日本語の情報がまだまだ少ない

## 比較

||AWS|Azure|GCP|
|:--|:--:|:--:|:--:|
|サーバ|EC2|Virtual Machine|Compute Engine|
|ストレージ|S3|Storage BLOB|Cloud Storage|
|RDBMS|RDS|SQL Database|Cloud SQL|
|Hadoop|EMR|HDInsignt|Cloud Dataflow|
|データウェアハウス|Redshift|SQL Data Warehouse|BigQuery|
|イベント駆動|Lambda|Azure Functions|Cloud Functions|


# サーバレスアーキテクチャとは
* 言葉の通り
    * サーバをなくした構成
* マネージドサービスを利用することでサーバを利用せずに構成する
    * サーバは極力最小限に利用する
    * そして、本当に必要なとき、必要なだけマネージドサービスを利用する
* 管理・運用するサーバ/インフラがなければ、その分他のタスクに集中できる
    * 管理・運用するサーバ/インフラがない
        * インフラ構築
            * 管理・運用するサーバがなければ構築する必要もない
        * インフラ運用
            * 必要に応じてマネージドサービスを利用
                * 自分で構築不要
            * スケール
                * オートスケールの設定が不要
                * 事前にサーバを準備する必要もない
            * モニタリング
                * CPU, メモリなどの監視をする必要がない
            * セキュリティパッチの適用
                * yum updateとかしなくていい
    * バックエンド側のコード記述が不要に
        * 
* 2015年後半に登場
    * 特にイベントドリブン型サービスLambdaが登場した2015年11月頃から言われ始めた

# イベントドリブンとは
* 起こったイベントにしたがって、処理を実行する
* 例
    * スケジュールに従って動作
        * cronとか
        * 時間というイベントに従って、処理を実行
    * ユーザからの要求に従って動作
        * 要求というイベントに従って、処理を実行
* イベントドリブンを使うとコストが下げられる
    * イベントドリブンを使わないと
        * スケジュールに従って動作
            * 10分実行しても、1時間実行しても、1時間分の料金が必要
        * ユーザからの要求に従って動作
            * ユーザからの動作を受け付けるために常に稼働する必要がある
    * イベントドリブンを使うと
        * イベントが発火したときのみ課金
        * イベントが発火したときのみ稼働

# イベントドリブン型のサービス
* AWS, Azure, GCPにおけるイベントドリブンのサービスについて

## Lambda
* インフラを一切気にせず、アプリケーションコードを実行できる
    * OS, ミドルウェアなどはAWSが管理
    * 実行するアプリケーションのみ集中
* 特徴
    * AWSサービスと連携させることが容易
    * オートスケール
        * イベントの状況に応じて自動的にスケール
    * 料金
        * イベントの実行回数、実行時間に応じて課金
* 実行基盤
    * Lambda Function
        * Node.js、Java、Python2.7をサポート
        * タイムアウト時間は5分
        * 最小1分インターバルでcron処理も可能

## Azure Functions
あとでかく

## Cloud Functions
あとでかく

# イベントドリブン型サービスの使いドコロ
* サーバレスにするために、すべてをイベントドリブンにする必要はない
    * 動き方が異なるので、必ずしも代替にはならない
    * 使いドコロを考えることが重要
* AWSで比較
    * EC2
        * スケールの単位はインスタンス
        * OSやネットワークなどインフラ系の制御がしたい
    * Lambda
        * スケールの単位はFunction
        * 必要なときのみ実行したい
        * インフラ触りたくない
Xamarin StudioでiOSの無料実機テストするまでのメモ書き

Xamarin StudioのiOSプロジェクトでApple Developer Programへの登録なしでの実機確認をしようと思って
http://qiita.com/natsumo/items/3f1dd0e7f5471bd4b7d9#_reference-d883f01ec03026dd73f4
http://ytabuchi.hatenablog.com/entry/2015/09/18/191258
ここに載っている方法を試してみて大体はできたんですが、一部躓いたところがあったのでそのメモを残します。

手順

1. AppStoreでXcodeをインストール
2. XcodeにAppleIDを追加
3. Bundle Identifier取得のためにXcodeで捨てプロジェクト作成してビルド
4. 3で作成したBundle Identifierと同じになるようにXamarin StudioのプロジェクトでBundle Identifierを設定する

ここまでするとXamarin Studioのプロジェクトのオプション→ビルド→iOS Bundle SigningのSigning IdentityとProvisioning Profileが選択できるようになる。
1と2は初回のみで以降はプロジェクトを作成するたびに3と4を行えば良い。

## 1.Xcodeインストール

AppStoreでインストールするだけ。4GB超なので時間がかかる。

## 2.Xcodeのアカウント設定

* Xcode起動→Preferences→Accounts
* +でAppleID追加
* サインイン完了するとアカウントが追加される
* Teamのところを選択してView Details
* iOS DevelopmentのCreateを押してDone

## 3.Xcodeでプロジェクト作成

Xamarin Studioの方で使うProvisioning Profileを作るためにダミーのXcodeプロジェクトを作成します。
http://qiita.com/natsumo/items/3f1dd0e7f5471bd4b7d9#_reference-d883f01ec03026dd73f4
ほぼここの通りですがXamarin Studioで利用する場合はプロジェクト作成した直後の画面でBundle Identifierを実際のXamarinでのプロジェクトで使いたい識別文字に変更します。~~Xamarinの方ではBundle Identifierは小文字しか使えないっぽいのでそれに合わせてここも小文字のみで設定した方が良いです。最初ここで普通に大文字まじりにしてハマりました。~~
→Info.plistで自由に設定できました。

## 4.Xamarinでプロジェクト作成

実際に使うXamarinのプロジェクトを作成します。
http://ytabuchi.hatenablog.com/entry/2015/09/18/191258
ほぼこちらの後半の通りですが一部現在と変わっている部分があって
プロジェクトの作成時のBundle Identifierを自由に設定できなくなっています。Bundle Identifierは必ずApp NameとOrganization Identifierの組み合わせとなるようです。その際は全て小文字化されAppNameのドットはハイフンに変換されるようです。
XcodeプロジェクトとXamarin StudioプロジェクトのBundle Identifierを同じにすることでXamarinでの実機確認を可能にする技なので、大文字小文字ドットの扱いには注意しましょう。

![7cdca0eeb837672c9d18d79dd1eee620.png](https://qiita-image-store.s3.amazonaws.com/0/99291/70af4b8e-3751-e767-405f-2dea21d54547.png)

プロジェクト作成後はInfo.plistでBundle Identifierを自由に設定できるので、ここで無理に設定しなくてもOKです。最終的にXcodeとXamarin StudioのBundle Identifierが一致すれば良いみたいです。

![75f75ab9b5dbf8bc44820eb6cbbb8f3f.png](https://qiita-image-store.s3.amazonaws.com/0/99291/3db89017-e8ec-d8fe-84ac-38db23f57d62.png)

## その他

Provisioningの有効期限が切れたり壊れたりした時はダミーのXcodeプロジェクトをビルド実行してからXamarin側のiOSプロジェクトのオプションのiOS Bundle Signingを設定しなおせば再度使えるようになります。
rails newで現在のディレクトリにプロジェクトを作る

あまりに当たり前すぎてあくびも出ないくらい初歩的なことですが、ここで詰んでたのでメモ。

[rails tutorial](http://railstutorial.jp/) なんかを読んでると、新規プロジェクトを作るときに

```
$ rails new project_name
```
といった感じでプロジェクト名を指定しますね。
しかしこれだと現在のディレクトリから更に掘り下げてプロジェクトが作られてしまいます。

```
$rails new project_name

now_directory
  └project_name
    ├app
    │ ├assets
    │ ├controllers
    │ ├helpers
    │ ├ ……
    ├bin
    ├config
    ├db
    ├ ……
```

そうではなく、現在のディレクトリにそのままrailsのファイルを作りたい場合は`project_name`のところを`.`（ドット）にするだけ。

```
$ rails new .

now_directory
  ├app
  │ ├assets
  │ ├controllers
  │ ├helpers
  │ ├ ……
  ├bin
  ├config
  ├db
  ├ ……

```

以上、超初歩的な`rails new`のメモでした。
MacのOctaveでグラフを描こうとするとフリーズする

CourseraのMachine Learningを履修するにあたり、Octaveをインストールした。
参考にしたのはこのページ↓
https://kiskeyix.org/articles/605

で、ターミナルから`$ octave`でoctaveを起動して

```matlab
w = 10 + sqrt(10)*(randn(1,10000));
hist(w)
```

とすると、フリーズしてしまう。
何度かやり直しても同じ状態で、グラフが出てこない。

結局、5分くらい放置していたらポンと出力された。
1度表示されるとその後は特に問題なく、すぐにグラフが出た。

この辺も参考にしてみたけど、自分の場合は特に関係ありませんでした。
なんだったんだ。。。
http://tech.mof-mof.co.jp/blog/machine-learning-octave.html
http://qiita.com/Hawk84/items/f48b66bd7a74d3464230
[エラー] Mysql2::Error: Cannot add or update a child row: a foreign key constraint fails

Railsでマイグレーション。
外部キーを設定しようとしてタイトルのエラー発生。

## 原因

参照元のデータが削除されているが、参照先には残っているなど、不整合な外部キーが存在

## 対処

不整合な外部キーをもつデータを削除すればいいみたい。
Trailerが起動しなくなった

macを強制終了したらTrailer.appが起動しなくなった

## ログ
Console.appで確認

```sh
fatal error: 'try!' expression unexpectedly raised an error: Error Domain=NSCocoaErrorDomain Code=256 "The file couldn't be opened." UserInfo=0x6000000786c0 {NSSQLiteErrorDomain=264, NSUnderlyingException=error during prepareSQL for SQL string 'SELECT Z_VERSION, Z_UUID, Z_PLIST FROM Z_METADATA' : attempt to write a readonly database}: file /Library/Caches/com.apple.xbs/Sources/swiftlang/swiftlang-703.0.18.1/src/swift/stdlib/public/core/ErrorType.swift, line 54
```

## 原因
以下ファイルが壊れたもよう

* ~/Library/Application\ Support/com.housetrip.Trailer/
 * Trailer.sqlite
 * Trailer.sqlite-wal
 * Trailer.sqlite-shm

## 復旧
ファイル単位で作り直してもうまくいかないのでディレクトリごと作り直す

```sh
$ cd ~/Library/Application\ Support
$ mv com.housetrip.Trailer com.housetrip.Trailer.org
```

これでTrailerを起動するとファイルが作り直されて初期設定画面になるので、そこから再度設定する。
Spring Boot解説第9回(開発環境編：ログの設定について～log4jdbc)

こんにちはこんばんは！
株式会社情創 技術開発局
暑くなっても食欲が減らず
焼肉が食べたくて仕方がない@YAKINIKUです！
今回はlog4jdbcについて解説していきます！

#log4jdbcとは
これを使用することでJDBCドライバが発行するクエリのログを簡単に出力することができます。
##設定
それではlog4jdbcに必要なものについて説明していきます。
###postgresのインストール設定
まずはじめにすることはpostgresのインストールですがそれはこちらのサイト等を参考にして設定してください。
http://winofsql.jp/VA003334/infoboard_page.php?mid=install&id=061202151924
(2016年5月段階ではVersion 9.5.3が最新です。)
###build.gradleに下記追加
次に第5回で触れたbuild.gradleに下記の記述を追加します。

```gradle:build.gradle
compile("org.bgee.log4jdbc-log4j2:log4jdbc-log4j2-jdbc4.1:1.16")
```
###application.propertiesの設定
   devの場合のみlog4jdbcを使用し、production時は使用しないのが一般的なようです。
(dev、productionについては 過去記事[appliction.propertiesについて](http://qiita.com/YAKINIKU/items/bba6d8f0cb2a418ea0ea)参照)
   
```properties:appliction.properties
   spring.datasource.url             = jdbc:log4jdbc:postgresql://{DBサーバー}:5432/{DBスキーマー}
   spring.datasource.driverClassName = net.sf.log4jdbc.sql.jdbcapi.DriverSpy
```
###/resources の下にファイル作成
/src/mainの下にあるresourcesファイル直下に
![aaaa.png](https://qiita-image-store.s3.amazonaws.com/0/116032/8b2d4dfa-430f-8c1b-0ae7-4bfe3a19d0c3.png)
log4jdbc.log4j2.propertiesと

```properties:log4jdbc.log4j2.properties
log4jdbc.spylogdelegator.name=net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator
```
logback-spring.xmlを作成します。

```xml:logback-spring.xml
 <?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <include resource="org/springframework/boot/logging/logback/base.xml"/>
    
    <!-- log4jdbc-log4j2 -->
    <logger name="jdbc.sqlonly"        level="DEBUG"/>
    <logger name="jdbc.sqltiming"      level="INFO"/>
    <logger name="jdbc.audit"          level="INFO"/>
    <logger name="jdbc.resultset"      level="ERROR"/>
    <logger name="jdbc.resultsettable" level="ERROR"/>
    <logger name="jdbc.connection"     level="DEBUG"/>
</configuration>
```

#logbackとは
SLF4J(Simple Logging Facade for Java)のAPIを経由して利用するjavaのロギングライブラリのことです。
実際の出力確認はデータベース接続の章で行うこととします。

##出力項目の説明
上記で記述したlogbackの出力項目についてそれぞれ解説します。
###jdbc.sqltiming
jdbc.sqltimingはバインド変数に値が設定された状態のSQL文と、SQLの実行時間を出力するためのロガーです。
値がバインドされた形式のSQLが出力されるので、DBアクセスツールに貼りつけて実行する事ができるようになっています。
###jdbc.sqlonly
jdbc.sqlonlyはバインド変数に値が設定された状態のSQL文を、出力するためのロガーです。
上記のjdbc.sqltimingとの違いは、実行時間が出力されないという点です。
###jdbc.audit
jdbc.auditはResultSetインタフェースを除く、JDBCインタフェースのメソッド呼び出し（引数と、返り値）を出力するためのロガーです。
JDBC関連で問題が発生した時の解析に有効なログですが、出力されるログの量が多いです。
###jdbc.connection
jdbc.connectionはConnectionの接続/切断イベントと使用中の接続数を出力するためのロガーです。
接続リークが発生時の解析に有効なログではあるのですが、接続リークの問題がなければ、出力する必要はありません。
###jdbc.resultset
jdbc.resultsetはResultSetインタフェースに対するメソッド呼び出し（引数と、返り値）を出力するためのロガーです。
取得結果が、想定と異なった時の解析に有効なログですが、出力されるログの量が多いです。
###jdbc.resultsettable
jdbc.resultsettableはResultSetの中身を確認しやすい形式にフォーマットして出力するためのロガーです。
取得結果が、想定と異なった時の解析に有効なログですが、出力されるログの量が多いです。

最後まで読んでいただきありがとうございました。
全ての項目を出力してしまうと、ログの量が途方もなくなってしまうので、それぞれの項目の内容を把握して何が必要か取り捨て選択していく必要がありますね・・・
それではみなさん、こんにちはこんばんはさようなら！
pom.xmlではpackagingはjar指定なのに、failOnMissingWebXmlのエラーが表示され続けるときの対処

# 問題内容
プロジェクトでのpom.xmlの指定は、\<packaging>jar\</packaging>のはずなのに、意図していない「web.xmlがない」、「failOnMissingWebXmlを設定してください」という警告がeclipse上で表示され続けて、精神衛生上良くない。しかもmavenによるbuildは通るため「性が悪い」

# 環境
## Eclipse／java
　Eclipse Version: Mars.2 Release (4.5.2)／1.8

# 対処方法
一旦、pom.xmlを以下の設定にします。

パッケージを、
\<packaging>war\</packaging>

プロパティの設定を、
\<properties>
\<failOnMissingWebXml>false\</failOnMissingWebXml>
\</properties>

ビルドすると、警告は消えます。
そのあと元の設定に戻してください。
AnsibleのRoleディレクトリレイアウトを一発で作る方法

Roleのディレクトリレイアウトとは、ドキュメントで説明されている[Directory Layout](http://docs.ansible.com/ansible/playbooks_best_practices.html#directory-layout)のことです。

`roles`の箇所を抜粋

```
roles/
    common/               # this hierarchy represents a "role"
        tasks/            #
            main.yml      #  <-- tasks file can include smaller files if warranted
        handlers/         #
            main.yml      #  <-- handlers file
        templates/        #  <-- files for use with the template resource
            ntp.conf.j2   #  <------- templates end in .j2
        files/            #
            bar.txt       #  <-- files for use with the copy resource
            foo.sh        #  <-- script files for use with the script resource
        vars/             #
            main.yml      #  <-- variables associated with this role
        defaults/         #
            main.yml      #  <-- default lower priority variables for this role
        meta/             #
            main.yml      #  <-- role dependencies

    webtier/              # same kind of structure as "common" was above, done for the webtier role
    monitoring/           # ""
    fooapp/  
```

tasks,handlers,templates... とフォルダ構成となっていて、一つのyamlファイルに書いていくよりも
このディレクトリ構成のほうが整理しやすくて良いです。

ただ、久しぶりにroleを作る時とか構成を忘れてしまいますよね。
毎回手打ちで作るのは面倒だし、typoしたらみっともないし、このディレクトリ作るためだけにshell作るのもなーと。

これ、実は`ansible-galaxy`コマンドの`init`サブコマンドを実行することで一通りつくってくれます。

`ansible-galaxy init (your_role_name)`


```bash
$ ansible-galaxy init myrole
$ tree myrole/
myrole/
├── README.md
├── defaults
│   └── main.yml
├── files
├── handlers
│   └── main.yml
├── meta
│   └── main.yml
├── tasks
│   └── main.yml
├── templates
├── tests
│   ├── inventory
│   └── test.yml
└── vars
    └── main.yml
```

`tests`や`meta`も作られますが、不要なら削除してしまえばいいです。

`ansible-galaxy`自体は[Ansible Galaxy](https://galaxy.ansible.com/)の操作を行うコマンドですが、
initが結構便利で、私は適当なroleを作る時でもこのコマンドで毎回作ってしまします。

良きAnsibleライフを！
Bash on Ubuntu on Windows からの Ansible

2016/5/15 現在

話題の「**Bash on Ubuntu on Windows**」を試してみて、自分のまずやってみたい、Ansibleの稼働を確認してみた。結果としては、**Build 14342 rs1 ではAnsible v2.0.2の稼働を確認**できた。（これよりも前のビルドバージョンでは対応できていないので、エラーがでます。）


# はじめに
一言で言えば、そのうちWindows10を入れるだけで、Linuxが普通に使える時がくるという話。

# Windows Subsystem for Linux
Windows 10 Insider Preview Build 14316 からWindow10上でUbuntuが動き、Bashがネイティブで利用できるようになった。これは**Windows Subsystem for Linux**という機能によるもの。

これにより、今までWindows上でLinux使いたいというときの以下の様な**ステップおよび、空き容量・コスト・ストレス・時間・オーバーヘッド**が要らなくなる。

* Windows上になんらか仮想化ホスト（VMware , VirtualBoxなど）入れ
* 必要に応じて、Vagrantなどのフロントエンドツール入れ
* ISOやイメージダウンロード
* Linux インストール

# 使い方
Insider Buildに上げた後に下記のようにコントローろパネルから有効化、その後再起動。

![panel.jpg](https://qiita-image-store.s3.amazonaws.com/0/75458/f2024581-5906-c831-e3a8-4cd550e53c1a.jpeg)

「Bash on Ubuntu on Windows」を起動

![2016-05-15 23-08-22.jpg](https://qiita-image-store.s3.amazonaws.com/0/75458/f6ff92de-85b5-72bd-bf6e-5dcb286ebfa8.jpeg)

以下は表現が正しいかはとりあえずおいといて・・・わかっていること。WSLが機能とみると「共有」というのはおかしいがなんとなく使いたくなるので。

* ホームディレクトリはWindows側と共有可
    * /mnt/cにC:\がマウントされている
* ネットワークはホストのWindows経由での接続
* DISK容量、RAMもホストのWindowsと共有

# Ansible v2.0.2 稼働

```shell-session
root@DESKTOP-FBSKDFF:~# ansible --version
ansible 2.0.2.0
  config file = /etc/ansible/ansible.cfg
  configured module search path = Default w/o overrides
```

具体的なデモを **[July Tech Fest 2016](http://2016.techfesta.jp/ )** で行う予定・・・

# 参考

* Insider Program https://blogs.windows.com/blog/tag/windows-insider-program/
* リリースノート https://msdn.microsoft.com/en-us/commandline/wsl/release_notes
* WSLについて https://msdn.microsoft.com/en-us/commandline/wsl/about
* Install ガイド https://msdn.microsoft.com/en-us/commandline/wsl/install_guide
Wordpressでよくみるパーツの実装



## WordPress投稿一覧にページビュー数を表示

1. Wordpress Popular Postsのプラグインをインストール
2. function.phpに下記ソースコード追加

```function.php
//管理画面での記事一覧カラムカスタマイズ
//WordpressPoplarPostのビューカウントを表示する
function admin_posts_columns($columns) {
    $columns['subtitle'] = "ビュー";
    return $columns;
}
function add_admincolumn($column_name, $post_id) {
    if( $column_name == 'subtitle' ) {
        echo wpp_get_views($post_id, 'monthly', true);//←ここの値で集計期間変更dailyとかweekly全部の場合はall
    }
}
if ( function_exists('wpp_get_views') ) {
    add_filter( 'manage_posts_columns', 'admin_posts_columns' );
    add_action( 'manage_posts_custom_column', 'add_admincolumn', 10, 2 );
}
```

参照：<a href="http://hatamoto.biz/wordpress-list-pageview/" target="_blank">WordPress投稿一覧にページビュー数を表示する方法。</a>
キーボードをMacBook ProからHHKBに変えると1年間で指だけでフルマラソンしてるようなもんになる件

HHKB Professional BTのキーストロークは4mmです。

> HHKB Professional BT キーストローク 4mm
https://www.pfu.fujitsu.com/hhkeyboard/spec.html

15インチMacBook Pro（Retina）のキーストロークは1.26mmだそうです。

> 15インチMacBook Pro（Retina）	1.26ミリ
> http://weekly.ascii.jp/elem/000/000/093/93653/

ストロークの差は2.74mmです。1日20000回打鍵すれば、1年間で指が移動する距離の差は40.004kmにも及びますよ！

（365 日 * 20000 回 * (4mm - 1.26mm) * 2 = 40004000 mm = 40.004km）

キーストロークが指に及ぼす影響ってどれくらいあるんでしょうかね。
オンライン機械学習 (機械学習プロフェッショナルシリーズ) 数学まとめ [単純パーセプトロン]

# 単純パーセプトロンを理解する上ので基本的な知識

[オンライン機械学習 (機械学習プロフェッショナルシリーズ)](http://www.amazon.co.jp/gp/product/406152903X/ref=as_li_ss_tl?ie=UTF8&camp=247&creative=7399&creativeASIN=406152903X&linkCode=as2&tag=juke-22)

!["オンライン機械学習 (機械学習プロフェッショナルシリーズ)"](http://ecx.images-amazon.com/images/I/51a9OcbueqL._AC_US160_.jpg)

## 前提

単純パーセプトロンは線形分類器(二値分類器)の一つで、関数は以下の通りとなります。

```math
f(x) = w^Tx + b \\
w \in R^{m-1} 重みベクトル \\
b \in R バイアス項 \\
f(x)は1または-1を返す関数
```

ただし、以下簡単の為に、wを1次元拡張しその中にbが定数1となるように入れ、下記のように変換します。

```math
f(x) = w^Tx \\
w \in R^m 重みベクトル
```

## 勾配降下法

```math
目的関数　L(w) = \sum_il(x^{(i)}, y^{(i)}, w^{(i)}) \\
l(x^{(i)}, y^{(i)}, w^{(i)})の部分はアルゴリズムによって変わってくる
```

```math
勾配降下法では重みを以下の式を用いて更新する \\
w^{(t+1)} = w^{(t)} - \eta^{(t)}\Delta L(w)
```

## 確率的勾配降下法

```math
確率的勾配降下法では重みを以下の式を用いて更新する \\
w^{(t+1)} = w^{(t)} - \eta^{(t)} \Delta l(x^{(i)}, y^{(i)}, w^{(i)})

```

# 単純パーセプトロンの目的関数

```math
l(x^{(i)}, y^{(i)}, w^{(i)}) = max(-y^{(i)}w^{(i)}x^{(i)}, 0)\\
maxは引数の内大きい方を返す関数\\
```
上記のyの前に`-`が付いているのですが、以下の表を見れば納得するのではないでしょうか？

| 正解かどうか | y  | wx     | −ywx     | 目的関数の値 |
|:----------:|:--:|:------:|:--------:|:----------:|
| 正解 　     |  1 | wx > 0 | −ywx < 0 | 0          |
| 正解　      |  1 | wx > 0 | −ywx < 0 | 0          |
| 不正解      | -1 | wx < 0 | −ywx > 0 | −ywx       |
| 不正解      | -1 | wx < 0 | −ywx > 0 | −ywx       |

# 重みの更新式

```math
\Delta l(x^{(i)}, y^{(i)}, w^{(i)}) = \Delta max(-y^{(i)}w^{(i)}x^{(i)}, 0) \\
重みwの更新は \\
w^{(t+1)} = w^{(t)} - \eta^{(t)} \Delta max(-y^{(i)}w^{(i)}x^{(i)}, 0) \\
\Delta max(-y^{(i)}w^{(i)}x^{(i)}, 0)は本書より以下の通りとなる\\
\\.
y^{(i)}w^{(i)}x^{(i)} > 0の時 \\
w^{(t+1)} = w^{(t)} + (y^{(t)}x^{(t)})\\
その他\\
w^{(t+1)} = w^{(t)}
```
Raspberry PiにVNCでリモートアクセスする


rasbperrypi.orgにドキュメントがある
https://www.raspberrypi.org/documentation/remote-access/vnc/

## RaspbianでVNCサーバを起動する

1. ``tightvncserver``をインストールする
 * ``sudo apt-get install tightvncserver``
2. TightVNCサーバーを起動し表示用のパスワードを入力する
 * ``tightvncserver``
 * パスワードを再設定する場合は ``vncpasswd`` を実行する
3. VNCサーバーを起動する
 * ``vncserver :1 -geometry 1920x1080 -depth 24``


``pi``ユーザ以外でVNCサーバを実行する場合 ``audio`` グループを追加しないとクライアントで表示した際にメニューバーが表示されない。``sudo usermod -a -G audio your_user``
参考: [New Raspbian Interface Taskbar issue when not "pi"](https://www.raspberrypi.org/forums/viewtopic.php?t=112680)

## MacでVNCクライアントを起動する

https://www.raspberrypi.org/documentation/remote-access/vnc/mac.md

MacにはデフォルトでVNCクライアントがインストールされている。

1. Finderのメニューで ``移動 > サーバーへ接続...`` を選択する (⌘ + K)
2. ``vnc://{PiのIPアドレス}:5901`` を入力する
 * ポートは5900 + ディスプレイ番号になる
Raspberry PiでCamera Moduleを使う


参考: [The MagPi #45](https://www.raspberrypi.org/magpi/issues/45/)

* Raspberry Pi 2 Model B (Raspbian Jessie)
* Raspberry Pi Camera Module V2.1

## Raspbery Piを更新する

上下左右の向きがおかしいバグがある([Camera v2 - Images horizontally flipped by default](https://www.raspberrypi.org/forums/viewtopic.php?f=43&t=145980&p=962446))ので``rpi-update``でカーネル、ファームウェアを更新する。

```
sudo rpi-update
```


## カメラをつなぐ

* Raspberry  PiをシャットダウンしてからCamera Moduleをつなぐ
* リボンケーブルの向きはコネクタがHDMIポートの方

## カメラソフトウェアを有効にする

デスクトップのProgram Menu > Preferences > Raspberry Pi Configuration > Interfaces タブ でCameraを有効にする (再起動が必要)

コマンドラインの場合 ``sudo raspi-config`` で ``6 Enable Camera`` を選択する。

## 静止画の撮影

``raspistill``コマンドで撮影できる。``gpicview``で表示を確認できる。

```
raspistill -o firstpic.jpg
gpicview firstpic.jpg
```

``raspistill``コマンドはリモートでも実行できたが、``gpicview``はリモートではoption parsing failed: Cannot open displayというエラーになった。

上下反転する場合は``-vf``オプションを使って ``raspistill -vf -o firstpic.jpg`` とする。

* 15秒後に撮影: ``raspistill -t 15000 -o newpic.jpg``

詳細: https://www.raspberrypi.org/wp-content/uploads/2013/07/RaspiCam-Documentation.pdf

## 動画の撮影

``raspivid``コマンドで撮影できる。

* 10秒間の動画を撮影: ``raspivid -t 10000 -o testvideo.h264``
* fpsや解像度を変更して撮影: ``raspivid -w 640 -h 480 -fps 90 -t 10000 -o test90fps.h264``
AtomでVimのタブを実現するatom-vim-like-tabを作った（2016/08/16追記あり）

タイトルの通りなのですが、Vimでのタブ機能をAtomで実現させるパッケージをGW中に作ってみました。
これでますますAtomのVim化が捗ります。

[atom-vim-like-tab](https://atom.io/packages/atom-vim-like-tab)

![atom-vim-like-tab.gif](https://raw.githubusercontent.com/Kesin11/atom-vim-like-tab/images/images/atom-vim-like-tab1_2.gif)


![atom-vim-like-tab.png](https://raw.githubusercontent.com/Kesin11/atom-vim-like-tab/images/images/tab_list_view.png)

### 8/16追記
future workとしていた以下の機能をそれぞれのバージョンで追加しました！
ver 1.0で リストビューでタブの選択
ver 1.2で Vimとそっくりの見た目なタブ状況

より使い勝手がよくなったと思うので、Vimのタブが恋しい人はぜひ試してみてください！


# 開発した理由
自分がコードを書くときには最低でも縦に2分割、場合によって縦横の4分割でコードを書くことが多いです。
例えば左側にサーバー側のコード(Ruby)、右側にクライアント側のコード(js)を開くようなことが多いのですが、ここでさらにHTMLも同時に編集したいというケースが結構あります。
Vimであれば新しいタブを作って左側にjs、右側にHTMLを開いてコードを書き始め、もしサーバー側の修正に戻りたければ最初のタブに戻るだけなのですが、Atomにはそのような機能が無いので大量に開かれたタブ（ここではAtomのタブ）を閉じてファイルを開き直すのが非常に面倒でした。

それっぽいワードでAtomパッケージを検索してみたのですが、Vimのタブを実現するようなものは見つからなかったので自分で開発することにしました。

# 何ができるのか
もしVimのタブ機能をご存知であれば、アレと同じことがAtomでも可能になります。

GIFアニメを見て頂ければ何となく分かるかと思いますが、Atomが標準で可能な画面分割に加えて新しいウィンドウ的なもの（Vimではタブと呼ばれています）を作ることができ、その中では最初のタブとは独立してファイルを開いたり分割することができます。

今のところサポートしているのはシンプルに以下の機能だけです

- `new`: 新しいタブを作る
- `close`: 今のタブで開いているファイルを全て閉じてタブを削除する
- `next`, `previous`: タブの切り替え


タブという概念が加わることで、例えばタブ1にJSとHTML、タブ2にサーバー側のモジュールとspec、と分けておくことができます。
こうしておくと別の部分の修正に作業を移す場合にタブを切り替えるだけで済むようになります。

# 今後
Vimのタブ機能を実現するのに最低限必要な機能は実装できたので、今後は以下の機能の追加を目指す予定です

## リストビューでタブの選択
他のパッケージでもよくあるように、リストビューを使ってタブの検索、切り替えをできるようにしたい。
参考にできそうなパッケージがたくさんあるので、これはやればできそうだと思ってます。

## Vimのようにタブの状況を表示したい
Vimでは現在いくつのタブが作られているか、現在のタブは何番目かという情報が表示されています。tmuxを起動すると下にウィンドウの情報が表示されるのと同じような見た目です。

できれば同じような見た目をAtomでも表示したいのですが、そのようなことが簡単に実装できるAPIがあるのかまだ調査もしていないので実現可能なのか分からない段階です。
AtomはJSとHTMLでできているので頑張れば不可能ではないでしょうが・・・


# 実装
せっかくなのでどんな感じに実装されているのかも書いておきます。興味がある人はどうぞ。

Atomでは画面分割をすることをペイン(Pane）分割と呼んでいます。分割していくと新しいPaneに対応したHTMLの要素が増えていき、HTMLとCSSでいい感じに分割されて表示されるようになっています。

これを利用して、atom-vim-like-tabは隠すべきPaneにdisplay=noneのCSSを当てて実はHTML的に見えなくしているだけです。

実際にはそれぞれのタブにどのPaneが紐付いているのかというのを管理するために、独自にTabControllerというクラスを実装してこいつにPaneの参照を持たせています。
`new`でタブを作る度にTabControllerも増やしていき、新しいタブの中でペイン分割するときに新しく生成されるPaneは新しいTabControllerが管理するようになっています。

`next`,`previous`でタブを切り替えたときにはアクティブになったタブだけを表示するようにdisplay属性を書き換え、
`close`されたときにはTabControllerを削除してタブを切り替えるようになっています。

一通り実装し終えたあとに`close`でTabControllerを削除したり、Pane関連のイベント管理を外したりするところのバグがぼろぼろ見つかって目標としていた3日間よりも開発に時間がかかってしまいました。
_ちゃんとテスト書いたしバグはもうないはず・・・_

Atomが発行しているPaneに関するイベントの扱い方については[atom-zentabs](https://github.com/ArnaudRinquin/atom-zentabs)などを参考にしました。
他のパッケージやAtom自体のソースコードもかなり参考になりました。JSやCoffeeなのでちゃんとコードを追っていけばどんな感じに実装されているのか分かるのはいいですね。
が、そもそもAtomのパッケージに関するドキュメントが乏しいため、公式パッケージのコードが一番参考になる、というかそれぐらいしか参考にできるものが無くてちょっと辛かった。

もしバグとか改善して欲しい機能があればGitHubの[Issue](https://github.com/Kesin11/atom-vim-like-tab/issues)にどんどんお願いします！
LPICに合格するためMacで勉強する環境を構築するためのメモ

LPICに合格するためには、机上の勉強も大切ですが、
実際にコマンドを入力できる環境があったほうが良いと思います。

Macユーザーでも、PC上に環境構築する方法をメモしておきます。

基本的に、以下の手順に従えばOK。
MacにLinuxの環境が構築でき、コマンドが実行できます。

>VirtualBoxではなくAWSを使っても良いのですが、AWSの操作感に慣れている人で、
無料期間が残っている人以外には、あまりオススメできません。
なぜなら、お金がかかったり、操作を覚えるのがVirtualBoxより手間だからです。


##VirtualBoxのダウンロード
https://www.virtualbox.org/wiki/Downloads
OSXのモジュールをダウンロードしましょう

##CentOSのISOダウンロード
https://www.centos.org/download/
MinimalISOの任意の箇所からダウンロードしましょう

##VirtualBoxへ仮想マシンの作成
http://www.kakiro-web.com/memo/virtualbox-create-virtual-machine.html
書いてある通りに進めばOKです。
「ファイルの場所とサイズ」の容量を少なくしすぎると、先のステップで容量不足の警告が出てしまいますので、デフォルトでOKだと思います。

##CentOSセットアップ
http://www.kakiro-web.com/memo/centos-install.html
書いてある通りでOKです。インストールを押下すると、1時間弱でセットアップが完了します。
そのあと再起動します。
rubyでeachをする際に、中身が空であれば別の処理をさせる


phpのテンプレートエンジンの `Smarty` で以下の繰り返しがある場合に `foreach` に対する `else` が出来た。
これをrubyでもやりたかったので、調べてみた


```php:Smarty
{foreach $items as $key => $value}
  key={$key}  value={$value}
{foreachelse}
  itemの中身はありませんでした。
{/foreach}
```

rubyでは以下のようにするとSmartyと同様の事が出来る。

```ruby:ruby
if items.each do |item|
  p item
end.empty?
  print "itemの中身はありませんでした。"
end
```

`end.empty?` は、なぜうまく動くのかわかっていない…
ImageMagick脆弱性の対応


#ImageMagickについて
画像を編集したり、加工をすることができ、
サムネイル作成などに重宝されるツールである。

# 脆弱性について
日本ではゴールデンウイークの真っ只中、
ImageMagickの脆弱性について報告された。
ImageTragickという名前で呼ばれている。
https://www.jpcert.or.jp/at/2016/at160021.html

#脆弱性対象か確認
脆弱性の対応が必要か否かは
以下のファイルをダウンロードして実行し確認する。
https://github.com/ImageTragick/PoCs

``` 試験ツール実施
unzip PoCs-master.zip
cd /PoCs-master
sh ./test.sh
```

脆弱性の対応が必要な場合、以下のように表示される

```
※参考情報　以下の様な状態になる
./test.sh
testing read
UNSAFE

testing delete
SAFE

testing http with local port: 42320
SAFE

testing http with nonce: 2OKEJlQW
SAFE

testing rce1
UNSAFE

testing rce2
UNSAFE

testing MSL
UNSAFE

```
※curlがインストールされていないとエラーが出るので、
　その場合はcurlをインストールする。
　対応手順：　　yum install curl



##policy.xml がある場合

``` policy.xml
   <policy domain="coder" rights="none" pattern="EPHEMERAL" />
   <policy domain="coder" rights="none" pattern="URL" />
   <policy domain="coder" rights="none" pattern="HTTPS" />
   <policy domain="coder" rights="none" pattern="MVG" />
   <policy domain="coder" rights="none" pattern="MSL" />
   <policy domain="coder" rights="none" pattern="TEXT" />
   <policy domain="coder" rights="none" pattern="SHOW" />
   <policy domain="coder" rights="none" pattern="WIN" />
   <policy domain="coder" rights="none" pattern="PLT" />
```

##policy.xml がない場合
.soファイル、移動する

```
# findはDISKを総ナメするので、ある程度あたりをつけて実施する。
find / -name mvg.so

ls -l mvg.so msl.so label.so

以下のファイルがあることを確認する。
-rwxr-xr-x 1 root root  31855  6月 17  2014 label.so*
-rwxr-xr-x 1 root root 204480  6月 17  2014 msl.so*
-rwxr-xr-x 1 root root  33972  6月 17  2014 mvg.so*


mv mvg.so mvg.so.bk
mv msl.so msl.so.bk
mv label.so label.so.bk


ls -l mvg.so msl.so label.so
ファイルがなくなっていることを確認する。

```


事後確認
すべてSAFEになれば脆弱性の対応は完了

```
# ./test.sh
testing read
SAFE

testing delete
SAFE

testing http with local port: 29518
SAFE

testing http with nonce: ECZ4p9Z6
SAFE

testing rce1
SAFE

testing rce2
SAFE

testing MSL
SAFE

```


#参考情報
http://d.hatena.ne.jp/Kango/20160504/1462352882
AWS の GPU インスタンスに CUDA と CuDNN をインストールする Itamae レシピ

今日、訳あってゼロから g2.2xlarge インスタンスを立ち上げて CUDA と CuDNN のセットアップをする必要があったので、そのための手順を Itamae レシピにしました。

https://github.com/mrkn/gpu-instance

nvidia のカーネルモジュールをインストールするために追加する apt リポジトリの名前が以前と変わっていてちょっと苦戦した。
Javaで日付から六曜(大安とか仏滅とか・・・)を求める

初投稿です。
六曜とは大安とか仏滅とかカレンダーに書いてるやつです。

# ライブラリについて

AJD4JP 日本専用カレンダー処理 Javaクラスライブラリというのを使います。
[こちら](java ajd4jp)からjarファイルをダウンロードしてインポートしてください。
ライセンスもApache License, Version 2.0とあるので普通に使う分には大丈夫でしょう。

# 処理の実装
六曜を求めるには現在の日付(グレゴリオ暦)を旧暦に変えてその上で計算する必要があるそうですが、そこらへんに疎い私はクラス名とかメソッド名見ても「なるほど、わからん。」状態でした。

サンプルソースもサイトにはありますが、とりあえずData型から六曜をStringで取得するメソッドだけ書いてみたので参考までに載せておきます。~~これでいつでもコピペすればOK~~

```java:Rokuyo.java
package hogehoge;

import java.text.SimpleDateFormat;
import java.util.Date;

import ajd4jp.AJD;
import ajd4jp.LSCD;
import ajd4jp.LunisolarYear;

public class Rokuyou {
	/**
	 * Dateから六曜を取得する
	 * @param date
	 * @return rokuyou
	 * @throws Exception
	 */
	public String getRokuyou(Date date) throws Exception {
		AJD ajd = new AJD(date);
		SimpleDateFormat year = new SimpleDateFormat("yyyy");
		LunisolarYear ly = LunisolarYear.getLunisolarYear(ajd);
		LSCD lscd = ly.getLSCD(ajd);
		String rokuyou = lscd.getRokuyo().getName();
		return rokuyou;
	};
}
```
FrameLayoutにOnTouchListenerを実装する

FrameLayoutにTouchEventを実装したいことってありますよね。

自分は`GestureDetector.OnGestureListener`を使いたい時にこんな感じで実装しました。

```TouchableFrameLayout.java
public class TouchableFrameLayout extends FrameLayout {
    private static final String TAG = TouchableFrameLayout.class.getSimpleName();
    private OnTouchListener onTouchListener;

    public TouchableFrameLayout(Context context) {
        super(context);
    }

    public TouchableFrameLayout(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public TouchableFrameLayout(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    @TargetApi(Build.VERSION_CODES.LOLLIPOP)
    public TouchableFrameLayout(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
        super(context, attrs, defStyleAttr, defStyleRes);
    }

    @Override
    public void setOnTouchListener(OnTouchListener l) {
        this.onTouchListener = l;
    }

    @Override
    public boolean onInterceptTouchEvent(MotionEvent ev) {
        // ここでtrueを返すとonTouchEventが呼ばれるようになる
        return onTouchListener != null;
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        return onTouchListener.onTouch(getRootView(), event);
    }
}
```

```MainActivity.java
//onCreateとかに
FrameLayout layout = (FrameLayout) findViewById(R.id.frame_layout);

layout.setOnTouchListener(new View.OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        // ここで処理。たとえばgesture関連とか。
        return gestureDetector.onTouchEvent(event);
    }
}
```

これでonTouchをとれました。
ちなみにOnGestureListenerは`onDown`でtrueを返さないと以降のEventを処理しなくなって`onDown, onShowPress, onLongPres`しか呼ばれなくなるので注意が必要です。

詳しくは参考のリンクから。

# 参考
[android - FrameLayout click event is not firing - Stack Overflow](http://stackoverflow.com/questions/16977873/framelayout-click-event-is-not-firing)
[Androidあれこれ: 子Viewのタッチイベントを取得する](http://noxi515.blogspot.jp/2011/10/viewgrouponintercepttouchevent.html)
[onScroll()というかonTouchEvent()が呼ばれない](http://workpiles.com/2014/04/android-touchevent-onscroll/)
TerraForm の AWS SecurityGroup ではまる

## TerraForm セキュリティグループの設定

TerraForm の、`aws_security_group`で作成した`SecurityGroup`は、デフォルトでoutbound設定が削除されます。

https://www.terraform.io/docs/providers/aws/r/security_group.html

> NOTE on Egress rules: By default, AWS creates an ALLOW ALL egress rule when creating a new Security Group inside of a VPC. When creating a new Security Group inside a VPC, Terraform will remove this default rule, and require you specifically re-create it if you desire that rule. We feel this leads to fewer surprises in terms of controlling your egress rules. If you desire this rule to be in place, you can use this egress block:

うう。ELBので、設定したセキュリティグループにOutbound設定がなく、EC2へのヘルスチェックが通らない現象に半日費やす。。。

```yaml:securitygroup.tf
egress {
  from_port = 0
  to_port = 0
  protocol = "-1"
  cidr_blocks = ["0.0.0.0/0"]
}
```

を追加すれば良い。
PowerShellで戻り値が配列かどうか不定なコマンドレットを必ず配列で処理する方法

# ■はじめに
PowerShellでは、戻り値が配列だったり配列でなかったりするコマンドレットがあります。

例えば Get-ChildItem というフォルダやファイルの一覧を取得するコマンドレットでは
結果が1つの場合はDirectoryInfoやFileInfoの1つのオブジェクトが返ってきますが、
結果が複数の場合は配列で返ってきます。

そのため、あとで ```.Length ```で配列の要素数を取得しようと思っても
想定と違った結果になってしまう、などの不都合が起こります。

# ■ 困る例
## 結果が1つの場合
```ps1
PS D:\> Get-ChildItem "out.csv"
    ディレクトリ: D:\
Mode                LastWriteTime     Length Name                              
----                -------------     ------ ----                              
-a---        2016/04/25     22:25     987728 out.csv    # 1ファイルのみ                

PS D:\> $item = Get-ChildItem "out.csv"
PS D:\> $item.length  
987728        # ●配列の要素数ではなくファイルサイズが返ってくる
PS D:\> $item.GetType() | Format-Table -AutoSize
IsPublic IsSerial Name     BaseType                
-------- -------- ----     --------                
True     True     FileInfo System.IO.FileSystemInfo   # 配列ではなくFileInfo
```

## 結果が複数の場合（配列で返ってくる）

```ps1
PS D:\> Get-ChildItem "*.csv"
    ディレクトリ: D:\
Mode                LastWriteTime     Length Name                              
----                -------------     ------ ----                              
-a---        2016/04/25     22:25     987728 out.csv   # 2つのファイル 
-a---        2016/05/15     17:39          0 xxx.csv
PS D:\> $item = Get-ChildItem "*.csv"
PS D:\> $item.Length
2            # ●配列の要素数が返ってくる
PS D:\> $item.GetType() | Format-Table -AutoSize
IsPublic IsSerial Name     BaseType    
-------- -------- ----     --------    
True     True     Object[] System.Array   # 配列で返ってきた
```

# ■ 対処方法

配列の書式である```@()```でコマンドレットを囲ってやります。

```ps1
PS D:\> $item = @(Get-ChildItem "out.csv")   # @()で囲う
PS D:\> $item.Length
1             # ●配列の要素数が返ってくる
PS D:\> $item.GetType() | Format-Table -AutoSize
IsPublic IsSerial Name     BaseType    
-------- -------- ----     --------    
True     True     Object[] System.Array    # 配列で返ってきた
```

これで、結果が1つでも2つでも配列で返ってくるようになりました。
完全カンペですが。。。

@zima__ さん
ありがとございます！
今回の記事に関しては資料とリポジトリを作っているので是非ご参照ください！
＜資料＞
http://www.slideshare.net/fumisatokawahara/20160120-gps
＜リポジトリ＞
https://github.com/hounenhounen/NCMB_GPSLocation
ぜひ機会があれば使ってみてください！
Kindleのハイライトを一括削除する、野暮な方法

###目的

紙の書籍に線を引く要領で、Kindleにもハイライトを付けて読む癖があります。


この習慣は、短期的な見直しや手を動かす事に因る意識の集中の効果（記憶の効率化）のメリットはあると感じているのですが、如何せん、ある程度時間が経ってしまうと、過去のハイライトが邪魔くさく感じるケースも多々生じます。


そこで、ハイライトを一括削除すべく、Kindleネイティブの機能を探しました。

しかしながら、どうやらそういった機能が無いようで（驚愕）以下のKindlrカスタマーフォーラムのスレッド投稿を参考に、Chromeのインスペクターのコンソールから実行する妥協スクリプトを用意しました。
　http://www.amazon.com/forum/kindle?_encoding=UTF8&cdForum=Fx1D7SY3BVSESG&cdThread=Tx1VOUZGDAC2U9M


###ハイライト一括削除の手順

1. ハイライトを消したい電子書籍で、ハイライトの追加（どこでもいい）

2. 以下のリンクへ飛び、ログインすると最終更新したKindle図書のハイライト一覧が表示される
　https://kindle.amazon.com/your_highlights

3. Chromeで、[右クリック]→[検証（I）]→[Consoleタブ]の順に遷移

4. 下記スクリプトをペースト実行し、すべて完了後に画面リロード


```js
(function () {
    var buttons = document.querySelectorAll(".highlightRow .deleteHighlightForm button[name='delete']");
    var n = Math.min(buttons.length, 1000);
    console.log(n);
    for (var i = 0; i < n; i++) {
        console.log("Deleting " + i + " of " + n);
        buttons[i].click();
    }
})();
```

突貫用途のため、私の遭遇していない例外などにぶつかる可能性もあるので、あくまでご参考までに。
一回の削除を1000件に絞っています。