OmniAICreator/Qiita-1.07M huggingface dataset:
In句の並び順で結果をソートしたいとき

mysqlのIn句を使うときに指定した順番に結果を表示したい時に「Order By Field」を使う。
```
ORDER BY FIELE(カラム名, INのリスト...)
```


こんな感じで。

```
SELECT id FROM Member WHERE id IN ('b', 'a', 'c') ORDER BY FIELD(id, 'b', 'a', 'c')
```

結果はこのようにORDER BY FIELDに指定された並び順で出力される。

```
+----+
| id |
+----+
|  b |
+----+
|  a |
+----+
|  c |
+----+
```


検証はしてませんがパフォーマンスはどうなのでしょうか?
ある程度は悪くなりそうですが。
Elixirの"var!"マクロによるnilコンテキスト引数の考察

Elixirには**Macro hygiene**という仕組みがあり、マクロが展開された箇所に同名の変数があってもその変数を「汚さない」ようにコンパイルしてくれます。

[Macros hygiene](http://elixir-lang.org/getting-started/meta/macros.html#macros-hygiene)

そのままのコピペですが、要するに下記のような動作になるということです。

```
defmodule Hygiene do
  defmacro no_interference do
    quote do: a = 1
  end
end

defmodule HygieneTest do
  def go do
    require Hygiene
    a = 13
    Hygiene.no_interference
    a
  end
end

HygieneTest.go
# => 13
```

上記ページの説明、および[こちら](https://groups.google.com/forum/?hl=en#!topic/elixir-lang-talk/kHPUuN3P-NE)のスレッドのJose Valimさんの解説を読む限り、上記コードのHygieneTestモジュール内で定義された変数と、Hygieneモジュール内で定義された変数は別々のコンテキストになるため、これによって別々の変数として扱えるという仕組みになっているようです。

ですが、`var!`というnil contextマクロを使用すると、quote内の変数のコンテキストをnilに設定することが可能です。この場合下記のような動作になります。

```
defmodule Hygiene do
  defmacro interference do
    quote do: var!(a) = 1
  end
end

defmodule HygieneTest do
  def go do
    require Hygiene
    a = 13
    Hygiene.interference
    a
  end
end

HygieneTest.go
# => 1
```

quote内の変数のコンテキストがnilに設定されると、その変数には「展開されたモジュールのコンテキスト」が割り当てられるようです。この場合、同じ変数名の変数は「同一の変数である」と解釈され、上記のような結果になるようです。

この後ちょっとややこしいサンプルが出てきますが、原則はとにかく

**quote内でvar!を使用すると、その変数のコンテキストはnilになる**
**nilコンテキストの変数には、展開された側のモジュールのコンテキストが割り当てられる**

です。

# nilコンテキスト引数の例1

Elixirのドキュメントでは説明されていませんが、var!はquote内で定義される関数の引数に指定することが可能です。つまり関数の引数として「nilコンテキストの引数」を指定することが出来ます。

```ex
defmodule Mod1 do
  defmacro macro1 do
    quote location: :keep do
      def func1(var!(p)) do # <= nilコンテキストの引数を宣言
        Mod1.macro2
      end
    end
  end
  defmacro macro2 do
    quote location: :keep do
      IO.inspect var!(p)
    end
  end
end

defmodule Mod1test do
  require Mod1
  Mod1.macro1
  def test do
    func1("a")
  end
end

Mod1test.test
# => "a"
```

上記は[ex_admin](https://github.com/smpallen99/ex_admin)で多用されている方法ですが、これが何を意図した処理かというと、

**macro1内のfunc1関数呼び出し時に宣言＆束縛されたnilコンテキスト変数pを、macro1から展開される他のマクロでも使用できるようにしている**

ということのようです。(おそらくDSLを作成する際にこの手法が必要だったのだと思われます)

`def func1(var!(p)) do`の箇所がかなり分かりにくいと思いますが、要するに`def func1(p) do`の引数pにnilコンテキストを指定しているということです。

`var!`が指定されない場合、引数pのコンテキストはMod1になりますが、`def func1(var!(p)) do`だと、引数pのコンテキストはマクロが展開される側のモジュール、つまりMod1testになるわけです。

`IO.inspect var!(p)`も同様です。var!によってnilコンテキストが指定されているので展開されるとMod1testのコンテキストで動作し、またpを定義しているfunc1から展開されていますのでpにアクセスすることが出来る、というわけです。

# nilコンテキスト引数の例2

```
defmodule Mod2 do
  defmacro macro3(do: block) do
    quote location: :keep do
      def func3(var!(p)) do
        unquote(block)
      end
    end
  end
end

defmodule Mod2test do
  import Mod2
  macro3 do
    IO.inspect p
  end
end

Mytest.func3("a")
# => "a"
```

上記も一見ややこしいですが、
**quote内でvar!を使用すると、その変数のコンテキストはnilになる**
**nilコンテキストの変数には、展開された側のモジュールのコンテキストが割り当てられる**
という原則に従って読めば理解出来ると思います。

`IO.inspect p`の箇所では、この時点ではまだ存在していない変数pを参照していますが、`macro3 do`の部分は、展開されると

```
defmodule Mod2test do
  def func3(var!(p)) do
    IO.inspect p
  end
end
```

上記のようになる(あくまでもイメージですが)ので、func3の引数pが参照出来るようになり、コンパイルが通るということになります。

# 最後に

Elixirの色々なパッケージのコードを解読するにはマクロの知識が必須ですが、その中でも`var!`はかなりの関門になると思いますので、こちらの情報が何かの一助になれば幸いです。

ちなみに上記はあくまで「考察」に過ぎませんのでその点ご了承頂けますと幸いです。誤り等ありましたらご指摘頂けますと大変有り難いですm(__)m
Javaのテンプレート（作業用）

Javaコーディング中に、一部だけ抜き出して動作を確認したいことがあります。その時に、一時的にクラスファイルを作成→mainメソッド作成→実行という手順をとってるのですが、毎回mainメソッドの書き方を検索していました。そのため、以下に作業用テンプレートを記録しておきます。

```java
class Test{
  public static void main(String args[]){
    System.out.println("");
  }
}
```
NAO（Pepper）に天気を教えてもらう

ChoregrapheでPythonボックスの練習がてらに、Livedoorの[お天気Webサービス](http://weather.livedoor.com/weather_hacks/webservice)から
現在/明日/明後日の予報をNAO（Pepper）にしゃべらせたいと思います。

##Pythonボックスの考え方
先人の知恵をお借りしました！詳しくはこちらを見てください。
[Pythonボックスの考え方 (Pepper TechFes技術セッション)](http://qiita.com/Atelier-Akihabara/items/f6a05ca14be786f9a94c)

##ビヘイビア
![スクリーンショット 2016-03-26 22.25.29.png](https://qiita-image-store.s3.amazonaws.com/0/92359/55822c62-3670-db7c-6b66-41fa31eeb33b.png "スクリーンショット 2016-03-26 22.25.29.png")
ボックスの関係はこんな感じです。

|ボックス名　   |設定          |
|:------------|:------------|
|Set Language |Language: Japanese|
|Speech Reco. |Word list: いまのてんき;あしたのてんき;あさってのてんき;おしまい|
|Switch Case |Speech Reco.のWord listに指定した文字列を、""（ダブルクォーテーション）で囲んで各行にセット|
|Say |ボックスをダブルクリックして、Language（Japanese）と、任意のテキストをセット|
|Python Script |お天気Webサービスから天気の取得をここに書きます|
|Say Text |取得した天気予報用と、終了用のボックス２つ|

###Python Script
####準備
***
デフォルトのPython Scriptでは、すべての入力、出力が `バン` になっているため、
ボックスを右クリック > ボックスを編集 を選択し、入力のonStartと出力のonStoppedのTypeを `文字列` にします。
####スクリプト
***
もっと簡単に書けそうな気もしますが、とりあえず動いたコードを。。。



```python
class MyClass(GeneratedClass):
    def __init__(self):
        GeneratedClass.__init__(self)

    def onLoad(self):
        pass

    def onUnload(self):
        pass

    def onInput_onStart(self, question):
        import urllib2, json
        url = "http://weather.livedoor.com/forecast/webservice/json/v1?city=030010"
        r = urllib2.urlopen(url)
        root = json.loads(r.read())

        if question == "いまのてんき":
            result = "いまのてんきは、" + root['forecasts'][0]['telop'].encode('utf8') + "です。"
            self.onStopped(result)

        elif question == "あしたのてんき":
            result = "あしたのてんきは、" + root['forecasts'][1]['telop'].encode('utf8') + "です。"
            self.onStopped(result)

        elif question == "あさってのてんき":
            result = "あさってのてんきは、" + root['forecasts'][2]['telop'].encode('utf8') + "です。"
            self.onStopped(result)

        else:
            self.onStopped(question)

    def onInput_onStop(self):
        self.onUnload()
```
`city=`のコードは盛岡を設定しています。※他の地域コードについては[こちら](http://weather.livedoor.com/forecast/rss/primary_area.xml)から。
##まとめ
スマートじゃない感がすごい。
aviファイルとかを連番の画像に書き出す

ググると色々と情報が錯綜していて辛かったのでまとめます。

# OSXユーザー
ググるとQuicktime Playerでイメージシーケンスに書き出せるとか出てきますが、今は（少なくとEl Capitanで）はもう無理です。Windows（仮想）マシンを用意してください。

# Windowsユーザー
Aviutilで書き出せます。ただコーデック周りで色々とハマるので色々ぶっこむ必要があります。

## 必要なソフトウェア
- AviUtl
    - http://spring-fragrance.mints.ne.jp/aviutl/aviutl100.zip
- bmp_outputプラグイン（連番出力用）
    - http://spring-fragrance.mints.ne.jp/aviutl/bmp_output.zip
- L-SMASH_Works (コーデックプラグイン)
    - http://pop.4-bit.jp/bin/l-smash/L-SMASH_Works_r877_plugins.zip
- ds_input (DirectShow入力プラグイン、次のCCCPを使うために必要)
    - http://videoinfo.tenchi.ne.jp/?DirectShow%20File%20Reader%20%A5%D7%A5%E9%A5%B0%A5%A4%A5%F3%20for%20AviUtl
- CCCP (色々なコーデックの詰め合わせ)
    - http://www.cccp-project.net/

これらを展開して下のようなディレクトリ構成にする（CCCPはDirectShow用のプラグインなので、インストールさえしておけば良い、らしい）

```
.
├── aviutl.exe
├── aviutl.ini
├── aviutl.sav
├── aviutl.txt
├── aviutl.vfp
├── batch0.aup
├── bmp_output.auo
├── ds_input.ini
└── plugins
    ├── ds_input.aui
    ├── lwcolor.auc
    ├── lwdumper.auf
    ├── lwinput.aui
    └── lwmuxer.auf
```

多分これでだいたいの動画が開けて連番の画像に書き出せるようになる、と思う（aviutilのれん版書き出しのやり方は http://www40.atwiki.jp/tegakimad/pages/23.html が詳しい。
chinachu+kodiでTV視聴

KodiでTVを見ることができる。

http://webnetforce.net/ubuntu-14-04-chinachu-kodixbmc%E3%81%A7%E3%83%AA%E3%82%A2%E3%83%AB%E3%82%BF%E3%82%A4%E3%83%A0%E8%A6%96%E8%81%B4%EF%BC%88%E3%83%A9%E3%82%A4%E3%83%96tv%EF%BC%89/
の内容そのままだが、備忘録として記載。

PVR clientとしてIPTV Simple Clientを使う。
chinachuは　192.168.1.50:10772
ユーザー＆パスワードで認証している。ここでは仮にhoge:hogehogeとしておく。

IPTV Simple Client addonをインストールして有効化する。
設定で
M3U Playlist URLを
http://hoge:hogehoge@192.168.1.50:10772/api/iptv/channel.m3u8
XMLTV URLを
http://hoge:hogehoge@192.168.1.50:10772/api/iptv/epg.xml
としてKodiを再起動。

channelが表示される。
[普及版]ジェネラティブ・アートの図2.8をネタにSverchokする

　ジェネラティブ・アートに興味があって勉強したいなと思っていたところ、お求めやすい価格で[[普及版]ジェネラティブ・アート―Processingによる実践ガイド](http://www.amazon.co.jp/%E6%99%AE%E5%8F%8A%E7%89%88-%E3%82%B8%E3%82%A7%E3%83%8D%E3%83%A9%E3%83%86%E3%82%A3%E3%83%96%E3%83%BB%E3%82%A2%E3%83%BC%E3%83%88%E2%80%95Processing%E3%81%AB%E3%82%88%E3%82%8B%E5%AE%9F%E8%B7%B5%E3%82%AC%E3%82%A4%E3%83%89-%E3%83%9E%E3%83%83%E3%83%88%E3%83%BB%E3%83%94%E3%82%A2%E3%82%BD%E3%83%B3/dp/4861009634)があったので買ってみました。
　この本はタイトル通り、Processing を使った例が紹介されている(ただし、内容は実現手段を限定していません)のですが、[Sverchok](https://github.com/nortikin/sverchok)(ノードベースでモデリングが出来る Blender のアドオン) を勉強するネタとしてちょうど良いなと思い、やってみました。

　図2.8は同心円なのですが、それをネタに次のようなメッシュデータを生成するノードを組んでみました。
<img width="282" alt="結果" src="https://qiita-image-store.s3.amazonaws.com/0/13938/32640e83-a5d6-92a6-bb3e-c16711cba42f.png">

　最終的なノードは次のようになりました。円の頂点と辺のデータは Circle ノードを使って生成し、拡大率を変えた複数の行列データを生成して組み合わせるところがポイントです。
<img width="565" alt="ノード" src="https://qiita-image-store.s3.amazonaws.com/0/13938/23daf3ee-6acb-0197-1f59-fcae51f7784f.png">
VALUE-DOMAIN で取得したドメインをConohaで使ってみる

昔この手の事を何度かやったことあったので、すんなり行く
と思ったのですが、結構(２、３日)はまりました (⌒_⌒;

###１・ドメインを取得してネームサーバをConohaのネームサーバ(無料)に設定します。

![画像１.png](https://qiita-image-store.s3.amazonaws.com/0/117164/e0068c90-7ab9-a8a1-9cb0-8b2c90538bec.png)


###２・Conohaで普通にVPSをつくります。
今回はArchLinuxを選択しました。

![画像２.png](https://qiita-image-store.s3.amazonaws.com/0/117164/a3863794-84f7-1bfc-d5df-5560c391d4ad.png)


###３・作成したVPSの設定から「逆引きホスト」に取得したドメインを入力します。

![画像３.png](https://qiita-image-store.s3.amazonaws.com/0/117164/12379cee-a7e7-2d44-583d-c6db4d8ddfeb.png)


###４・メニューの「DNS」で取得したドメインを登録します。
Aレコードを追加します。必要ならMXレコードも追加します。

![画像４.png](https://qiita-image-store.s3.amazonaws.com/0/117164/f2a14120-1e79-1514-d850-a9bc0b77a261.png)



###５・VPSにSSHで接続しテスト用のnginxを入れテストします。
Nginxをインストールして起動
[root@archlinux ~]# pacman -S nginx
[root@archlinux ~]# systemctl start nginx


![画像５.png](https://qiita-image-store.s3.amazonaws.com/0/117164/a0ca391a-5fee-d5bc-8ed4-ee786578c47b.png)


無理だった場合　→　Whois情報を更新してみる
結局これが原因だったのかハッキリわかりませんが、whois情報を訂正したら見れるようになりました・・・ﾅｾﾞ?

入力バリデーションがバグってるぽく意味わからないです。
とりあえず「番地」と「郵便」に-(ハイフン)を必ず入れる。それ以外の箇所では絶対入力しない事
電話番号の+81.は入力しなくてもいい(更新が成功すると自動的に付与される)

![画像６.png](https://qiita-image-store.s3.amazonaws.com/0/117164/20043fcd-2392-ba52-c6dd-d397848dd76f.png)


nslookupやらdigやらひたすら打ちまくってたのなんだったんだろw


#参考１・VALUE-DOMAINのネームサーバを使ってDDNS設定する場合

###１・ドメインロックの設定ページからドメインパスワードを設定
ドメインロックは外します。

![画像７.png](https://qiita-image-store.s3.amazonaws.com/0/117164/5cea1bc4-4ce5-3f76-5160-efdbbf7add5e.png)


###２・DDNSの設定ページで機能を「有効」に設定します。

![画像８.png](https://qiita-image-store.s3.amazonaws.com/0/117164/dba34983-3fdf-ec0d-eb31-4949236444cd.png)


###３・ネームサーバの設定ページでVALUE-DOMAIN のネームサーバ(無料)に設定します。

![画像９.png](https://qiita-image-store.s3.amazonaws.com/0/117164/6b163754-bea9-c37d-c216-66f6ee9f40d5.png)


###４・VPSにSSHで接続し更新用のShellを作成し実行します。

[root@archlinux ~]# vi test.sh 

```
#!/bin/sh

SCRIPT_URL=http://dyn.value-domain.com/cgi-bin/dyn.fcg
DOMAIN=<あなたのドメイン>
PASSWD=<あなたのドメインパスワード>
HOST=*
IP=`curl $SCRIPT_URL?ip`

URL="$SCRIPT_URL?d=$DOMAIN&p=$PASSWD&h=$HOST&i=$IP"
curl -s $URL
```
実行してみます。
[root@archlinux ~]# ./test.sh 
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100    14    0    14    0     0    719      0 --:--:-- --:--:-- --:--:--   736
status=0
OK

status=0が帰れば成功です。
後はcronにでも設定しとけばいいでしょう。

##最後にVALUE-DOMAINにもレンタルサーバがありWEBやDB、メールのホスティングがあります
が、使わないのだったらややこしくなるため転送設定は何もしないほうがいいかもしれません。
今回は何も設定しませんでした。

![画像１０.png](https://qiita-image-store.s3.amazonaws.com/0/117164/b2976363-c0db-ab16-ad56-51562952c797.png)
zshを使ってみる

## ゴール
こうなる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110859/3ea499c8-37de-278e-548a-598418fb428d.png)

## zsh？
そもそもシェルとは
>シェル (shell) はオペレーティングシステム (OS) のユーザーのためにインタフェースを提供するソフトウェアであり、カーネルのサービスへのアクセスを提供する。

>「シェル」フリー百科事典　ウィキペディア日本語版

zshはbashより優秀と聞いた

- コマンドオプションの補完
- 端末間の履歴共有

## 導入

### 環境
macOS Catalina

**※macOS Catalinaからデフォルトシェルがzshに変更された**

### 1. zshのインストール
```sh
$ /bin/zsh --version # デフォルトで入っているzshのバージョン
$ brew info zsh # Homebrewでインストールできるzshのバージョン

# Homebrewで入れる
$ brew install zsh

# 補完を強力にしてくれてるプラグインも
$ brew install zsh-completions zsh-autosuggestions zsh-syntax-highlighting
```

### 2. ログインシェルをzshにする
```sh
# 現在のログインシェルを確認
$ echo $SHELL
```

Homebrewでインストールしたzshをシェル一覧に登録する
`sudo vi /etc/shells`で以下を追記

```sh
/usr/local/bin/zsh # which zsh で場所を確認しておく
```

```sh
# ログインシェル変更
$ chsh -s /usr/local/bin/zsh
```

### 3. 設定ファイルの作成
`vi ~/.zshrc`で設定ファイルを作成して以下を記述
※設定ファイルは他にも.zprofileなどもあるが、.zshrcへの記述がいいという記事が多いので

```sh
# 環境変数
export LANG=ja_JP.UTF-8
export LSCOLORS=gxfxcxdxbxegedabagacad

# ヒストリの設定
HISTFILE=~/.zsh_history
HISTSIZE=30000
SAVEHIST=30000
# 直前のコマンドの重複を削除
setopt hist_ignore_dups
# 同じコマンドをヒストリに残さない
setopt hist_ignore_all_dups
# 同時に起動したzshの間でヒストリを共有
setopt share_history

# 補完機能を有効にする
autoload -Uz compinit
compinit -u
if [ -e /usr/local/share/zsh-completions ]; then
  fpath=(/usr/local/share/zsh-completions $fpath)
fi
# 補完で小文字でも大文字にマッチさせる
zstyle ':completion:*' matcher-list 'm:{a-z}={A-Z}'
# 補完候補を詰めて表示
setopt list_packed
# 補完候補一覧をカラー表示
zstyle ':completion:*' list-colors ''

# プラグインを有効化
source $(brew --prefix)/share/zsh-autosuggestions/zsh-autosuggestions.zsh
source $(brew --prefix)/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh

# コマンドのスペルを訂正
setopt correct
# ビープ音を鳴らさない
setopt no_beep

# prompt
autoload -Uz vcs_info
setopt prompt_subst
zstyle ':vcs_info:git:*' check-for-changes true
zstyle ':vcs_info:git:*' stagedstr "%F{magenta}!"
zstyle ':vcs_info:git:*' unstagedstr "%F{yellow}+"
zstyle ':vcs_info:*' formats "%F{cyan}%c%u[%b]%f"
zstyle ':vcs_info:*' actionformats '[%b|%a]'
precmd() { vcs_info }
PROMPT='%T %~ %F{magenta}$%f '
RPROMPT='${vcs_info_msg_0_}'

# alias
alias ls='ls -aF'
alias ll='ls -l'
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
alias vi='vim'
alias cat='cat -n'
alias less='less -NM'
export CLICOLOR=1
export LSCOLORS=DxGxcxdxCxegedabagacad
```

### 4. 設定反映
`source ~/.zshrc`で設定を反映させて
完成！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110859/3ea499c8-37de-278e-548a-598418fb428d.png)

## 使ってみて良かったこと
コマンドオプションの補完がいい
あれ、あのオプションなんだったっけって時にすぐ確認できる

導入の過程で設定ファイルに関しても色々と勉強になった

## 参考
たいへん参考になりました
ありがとうございます

* [漢のzsh](http://news.mynavi.jp/column/zsh/001/)
* [Homebrewでzsh導入＆oh-my-zsh初期設定まとめ](http://vdeep.net/zsh-oh-my-zsh)
* [とりあえずZshを使えば良いんだろう？](http://qiita.com/ktr_type23/items/3eb782f98c7a5f4c60b0)

## 補足
* [pecoを使って端末操作を爆速にする](https://qiita.com/reireias/items/fd96d67ccf1fdffb24ed)をやると生産性爆上がりします
* [oh-my-zsh](https://ohmyz.sh/)などのフレームワークを使って設定するのもいいと思う
* [fish](https://fishshell.com/)もよさそう
H26年秋期 基本情報技術者 午後問12 解説 設問3

```
MAIN   START
       LD       GR2,=0        ; 多数字列のカウンタを初期化
LOOP3  IN       BUF,ILEN
       LD       GR0,ILEN
       JMI      EOF
       LD       GR3,=0        ; 配列に格納する内容を初期化
       LAD      GR4,BUF
LOOP4  LD       GR5,0,GR4     ; GR5←数字
       AND      GR5,=#000F    ; 数字の数値化
       SLL      GR3,4         ; 処理済の内容を桁上げ
       OR       GR3,GR5       ; 空いた右端４ビットに数値を格納
       ADDA     GR4,=1
       SUBA     GR0,=1
       JNZ      LOOP4
       ST       GR3,ARRAY,GR2 ; 2 進化 10 進数にした数字列を格納
       ADDA     GR2,=1
       JUMP     LOOP3
EOF    LAD      GR1,ARRAY
       CALL     SORT
       LD       GR4,=' '      ; 空白文字を設定
LOOP5  LD       GR0,0,GR1
       LD       GR5,=3        ; ループカウンタを設定
LOOP6  LD       GR3,GR0
       AND      GR3,=#000F
       OR       GR3,=#0030    ; 数値の数字化
       ST       GR3,BUF,GR5   ; バッファに数字を設定
       SUBA     GR5,=1
       JMI      WRITE
       SRL      GR0,4
       JNZ      LOOP6
LOOP7  ST       GR4,BUF,GR5   ; バッファに空白を設定
       SUBA     GR5,=1
       JMI      WRITE
       JUMP     LOOP7
WRITE  OUT      BUF,OLEN
       LAD      GR1,1,GR1
       SUBA     GR2,=1
       JNZ      LOOP5
       RET
BUF    DS       256
ILEN   DS       1
OLEN   DC       4
ARRAY  DS       100
       END

SORT    START
        RPUSH
        SUBA   GR2,=1         ; ループのカウンタ 1 を設定
LOOP1   LD     GR3,GR2        ; ループのカウンタ 2 を設定
        LD     GR4,GR1        ; GR4←比較する要素のアドレス
LOOP2   LD     GR5,0,GR4
        CPL    GR5,1,GR4      ; 二つの要素を比較
        JMI    CONT
        LD     GR6,1,GR4      ; 二つの要素を入れ替え
        ST     GR5,1,GR4
        ST     GR6,0,GR4
CONT    ADDA   GR4,=1
        SUBA   GR3,=1
        JPL    LOOP2
        SUBA   GR2,=1
        JPL    LOOP1
        RPOP
        RET
        END
```
H26年秋期 基本情報技術者 午後問12 解説 設問2

```
MAIN    START
        LAD    GR1,A          ; ソート対象
        LD     GR2,n          ; 要素数
        CALL   SORT
        RET
A       DC     2              ; #2
        DC     4              ; #4
        DC     1              ; #1
        DC     3              ; #3
N       DC     4

SORT    START
        RPUSH
        SUBA   GR2,=1         ; ループのカウンタ 1 を設定
LOOP1   LD     GR3,GR2        ; ループのカウンタ 2 を設定
        LD     GR4,GR1        ; GR4←比較する要素のアドレス
LOOP2   LD     GR5,0,GR4
        CPL    GR5,1,GR4      ; 二つの要素を比較
        JMI    CONT
        LD     GR6,1,GR4      ; 二つの要素を入れ替え
        ST     GR5,1,GR4
        ST     GR6,0,GR4
CONT    ADDA   GR4,=1
        SUBA   GR3,=1
        JPL    LOOP2
        SUBA   GR2,=1
        JPL    LOOP1
        RPOP
        RET
        END
```
解説

```
2 - 4 - 1 - 3
2 - 4
    1 - 4
        3 - 4
1 - 2
    2 - 3
1 - 2
```
H26年秋期 基本情報技術者 午後問12 設問1 解説

```
MAIN    START
        LAD    GR1,A          ; ソート対象
        LD     GR2,n          ; 要素数
        CALL   SORT
        RET
A       DC     103            ; #67
        DC     5067           ; #13CB
        DC     68             ; #44
        DC     79             ; #4F
        DC     7              ; #7
N       DC     5

SORT    START
        RPUSH
        SUBA   GR2,=1         ; ループのカウンタ 1 を設定
LOOP1   LD     GR3,GR2        ; ループのカウンタ 2 を設定
        LD     GR4,GR1        ; GR4←比較する要素のアドレス
LOOP2   LD     GR5,0,GR4
        CPL    GR5,1,GR4      ; 二つの要素を比較
        JMI    CONT
        LD     GR6,1,GR4      ; 二つの要素を入れ替え
        ST     GR5,1,GR4
        ST     GR6,0,GR4
CONT    ADDA   GR4,=1
        SUBA   GR3,=1
        JPL    LOOP2
        SUBA   GR2,=1
        JPL    LOOP1
        RPOP
        RET
        END
```
解説

```
103 - 5067 - 68 - 79 - 7
103 - 5067
       68 - 5067
             79 - 5067
                   7 - 5067
68  - 103
       79 - 103
             7 - 103
68  -  79 
       7 -  79
7   -  68
```
CentOSにGo言語をインストール

> [目的]
Go言語をCentOS上で使えるようにする。

CentOSに [Go言語](https://golang.org/) をインストールし、使えるようにする環境構築する。

# インストール
[ダウンロード先](https://golang.org/dl/) から、最新のバージョンのファイルのURLを確認し、ダウンロードする。

## ディレクトリ移動
```bash:ディレクトリ移動
cd /usr/local/src
```

## ファイルダウンロード
```bash:wgetでダウンロード
sudo wget https://storage.googleapis.com/golang/go1.6.linux-amd64.tar.gz
```
```shell-session
[sudo] password for user1: 
--2016-03-26 22:42:11--  https://storage.googleapis.com/golang/go1.6.linux-amd64.tar.gz
storage.googleapis.com (storage.googleapis.com) をDNSに問いあわせています... 216.58.220.208, 2404:6800:4004:800::2010
storage.googleapis.com (storage.googleapis.com)|216.58.220.208|:443 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 84799480 (81M) [application/octet-stream]
`go1.6.linux-amd64.tar.gz' に保存中

100%[========================================================================================>] 84,799,480  34.1MB/s 時間 2.4s   

2016-03-26 22:42:15 (34.1 MB/s) - `go1.6.linux-amd64.tar.gz' へ保存完了 [84799480/84799480]
```

## ファイル解凍

```bash:解凍
sudo tar -C /usr/local -xzf go1.6.linux-amd64.tar.gz
```

## PATHの設定

```bash:PATHを追加
vim ~/.bash_profile 
```
```shell-session:追記
export PATH=$PATH:/usr/local/go/bin
```
```bash:反映
source ~/.bash_profile 
```

# 動作確認

チュートリアルにある、HelloWorldを動かしてみる。

```go:hello.go
package main

import "fmt"

func main() {
    fmt.Printf("hello, world\n")
}
```

```bash:実行
go run hello.go
```
```shell-session
hello, world
```

go runでは実行形式ファイルは残らないが、go buildを実行すると実行形式のファイルが生成される。

```bash:実行形式ファイル生成
go build hello.go 
```
```bash:実行
./hello
```
```shell-session
hello, world
```
gradle.propertiesに定義した値をAndroidManifest.xmlから参照する

`gradle.properties`に参照する値を定義します。

```gradle.properties
fabricApiKey=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
```

`app.gradle`の`manifestPlaceholders`を使って変数を登録します。

```app.gradle
android {
  defaultConfig {
      manifestPlaceholders = [fabricApiKey: project.property("fabricApiKey")];
  }
}
```

AndroidManifest.xmlから`${fabricApiKey}`を参照します。

```AndroidManifest.xml
        <meta-data
            android:name="io.fabric.ApiKey"
            android:value="${fabricApiKey}" />

```
Bakcbone.jsとBrowserifyを一緒に使う


Backbone.jsはBrowserifyと一緒に使うことができます。

[Backbone & jQuery meet Browserify: easy. | makerlog](http://makerlog.org/posts/backbone-jquery-browserify)の手順からbeefyを抜いて試してみます。

# 作業ディレクトリ作成

```
mkdir browserify_test
cd browserify_test
```

# package.json作成
```
npm init -y
npm install --save-dev jquery backbone　browserify
```

browserify実行用のnpm scriptを追加します。

```
  "scripts": {
    "start": "browserify index.js -o bundle.js"
  }
```

# ソースコード作成
main処理をindex.jsに書きます。

```js:index.js
const AppView = require('./app-view')
new AppView
```

index.jsで使うAppViewをapp-view.jsに書きます。

```js:app-view.js
const Backbone = require('backbone'),
  $ = require('jquery')
Backbone.$ = $

module.exports = Backbone.View.extend({
  el: '.container',
  events: {
    'click button': () => alert('hello')
  }
})
```

`Backbone.$ = $`がコツです。

AppViewの動作は[Backbone.js で Hello World （Backbone.Viewのサンプル）](http://qiita.com/ledsun/items/dde4f415205c888f54b4)と同じです。

# browserifyを実行

```
npm start
```

browserifyで作成したbundle.jsを読み込むindex.htmlを書きます。

```html:index.html
<body>
  <div class="container">
    <button>say hello</button>
    <span class="message"></span>
  </div>
  <script src="bundle.js">
  </script>
</body>
```

# 関連記事

- [Backbone.js で Hello World （Backbone.Viewのサンプル）](http://qiita.com/ledsun/items/dde4f415205c888f54b4)
- [Backbone.js の Model.fetch で RESTful API から情報取得](http://qiita.com/ledsun/items/d1146682e409c0687a1a)
- [Backbone.jsでModelに対応するViewをつくる](http://qiita.com/ledsun/items/dac6e7595ea9f28d30d2)
第二回築地ッカソンを終えて得られたもの

こんにちは皆さん

本日弊社ニジボックスでハッカソンイベント「第二回築地ッカソン」を実施しました
多くの方にご参加いただき、とても有意義な時間を過ごせたように思います
http://peatix.com/event/153432

そんなハッカソンで自分なりに得たものについてこの場を借りて書いてみようかなと思います

# イベントの概要

## 内容
馬鹿なアプリを作ろうという趣旨の非常にカジュアルなハッカソンです。
アイデアしか出ていなくて、完成品ができていなくても問題なし！
技術力に自身がなくても気軽に参加できるイベントとなっています
一応、テーマを決めたほうが作りやすいと考えて、「さくら」をテーマにしました

## スケジュール
11:00 ~ monacaハンズオン(どうやって作ったらいいかわからない方、monacaさわってみたい方向け)
12:00 ~ 昼食
13:00 ~ 製作開始
18:00 ~ 成果発表

# 成果

## 多種多様な成果物

本会は概要にもある通り非常にカジュアルなイベントであり、しかも5時間という短い時間内で完成を目指すということや、各個人個人が制作するということからも、成果物自体は規模の小さいものとなります。
しかし、成果の中身は本当に千差万別と言ってよく、桜の花を愛でるもの、SNS、VRを含むアニメーション、アクションゲームにパズルゲーム、UIを変更するアドオンなど、こんなにもネタやアイデアがあるのかと驚くものばかりです。
まあ、私のように「さくら」と聞いて偽客を真っ先に思い浮かべたひねくれ者や、CCさくらへの熱い思いをダダ漏れさせた豪の者もおりましたが。。。

SNSのようなものについては、特にアイデアが素晴らしかったのもあり、もう少し作りこみが進めば、それだけでちょっとしたジョークアプリとしてサービスイン出来ちゃうんじゃないかってくらいレベルでした。
また、カメラ共有を使って花見を遠隔で見ようというアプリも有りましたが、なにげに複数PC間での画面共有や中継なども実装され、普通にアプリケーションとして出しても遜色のないものも有りました。

何がスゴイって、このようなアプリが5時間で形としてできてしまうことです。

## 題材の傾向
さくらをテーマにしましたが、そこからどのような題材を連想したのかをまとめてみましょう

* 桜の木、花びら
* 花見
* 桜の花の色
* ワシントンと桜の木
* サクラ(おとり、偽客)
* CCさくら

花びらを題材に、ひらひら落ちるアニメーションやゲームなどが割と多めだったように思います
ついで花見も題材としては多かった印象です。花見の場所取りを題材にしたものは、なかなかとんがってるなぁと思いました
花の色を題材に既存UIに手を加えたり、特定文字色を変えたり、絵の色調を変えたりとバリエーションに富んだアプリケーションが出てきました。
さくらを題材にしてワシントンの逸話が出てきたのにはびっくりしました(成果はかなり難しいスロットゲームでした)
CCさくらに関しては。。。技術力の ~~無駄遣い~~ 素晴らしい使いみちを示したのだと確信しています！

# 感想

## 高品質多アプリ時代の予感

再度述べますが、今回のハッカソンはカジュアルなものでしたし、時間も短いので大きな成果を期待しにくいものでした。
にも関わらず、VRやSNSやゲームなど、様々なアプリが高いレベルで出てきました。
これは、参加したエンジニアのレベルの高さも有りましたが、その成果を短時間で実現するだけの環境が整っていることを示唆しているように思います。

エンジニアとしてこのような環境の充実は歓迎すべきものでは有りますが、同時にその流れについていかなければならないとも思います。
本日のイベントで改めてそのことを思い知らされたと思います。
精密な設計の元、品質の高いアプリをじっくり作るのも大事ですが、今回のようにカジュアルなアプリを短時間で沢山作ることも、技術を追いかける上では必要なことかなと思いました。

## エンジニアにもアイデアはある

また、これも当然といえば当然ですが、アイデアを持つのは何もプランナーやディレクターだけではないのだなと思いました。
むしろ、エンジニアの場合、アイデアをその場で形にできるというアドバンテージを持っているように見えます。
また、アイデアを形にするという練習をする意味でも、今回のようなカジュアルなハッカソンイベントは一定の意味を持っていると考えています。

# まとめ

今回のハッカソンで得られた知見や感想を徒然に書いてみました
全部まとめると

* たくさんの成果が出たよ！
* 高レベルの成果が多数出てきたよ！
* たくさんアプリを作るといいね！

参加した皆様、お疲れ様でした。
運営スタッフの方々、ありがとうございます

# 関連

[aviファイルとかを連番の画像に書き出す](http://qiita.com/mk2/items/595e211b947f63f6eafd) - CCさくらネタ関連
基本情報技術者試験の勉強


#意外と勉強になりますよ
まずはこちらをごらんください。
IPAのサイト
https://www.jitec.ipa.go.jp/index.html

##基礎的な考えを身に付けるにはもってこいの学習だと思います。
・専門用語の理解
・データベースの理解(SQLの組み立てとか)
・プログラミングの理解(言語は限定されますが・・・)
・数学的な計算問題

#午前問題
・午前問題は主に
 1.基礎理論
 2.CPUやOSなど、ハードに関する知識
 3.ネットワークに関する知識
 4.技術要素に関する知識
 5.開発技術に関する知識(テストとか、プロジェクトマネジメントとか)
 6.システム戦略に関する用語知識
など、他にも色々な知識が問われる問題が出ます。

#午後問題
・午後問題は大きな設問があり、その内容を読み各詳細な問いを答えていく形です。
 1.ハードウェア
 2.データベース
 3.ネットワーク
 4.セキュリティ
 5.ソフトウェア設計
 6.プロジェクトマネジメント
 7.システム戦略
 8.アルゴリズム
 9.C言語のプログラム
 10.COBOLのプログラム（！）
 11.Javaのプログラム
 12.アセンブラのプログラム
 13.表計算のプログラム
に関する問題などが出題されます。

この辺の知識を独学でせっせと学習するのは、なかなか大変ですよね。
どこから手をつけていいのやら。となりませんか？
そこで！
基本情報技術者試験向けの教科書を中古で一冊購入し
(年度が古いと安い。けどやっている内容は大きくはブレない）、
その内容を通勤途中などで読んだりすると、いい学習になると思います。

また、スマートフォンアプリなどで、午前問題が解けるアプリなども
あります。そういうアプリを活用し、素敵な基礎スキルアップを
目指してみてはいかがでしょうか。

勿論、最終ゴールは「受験して合格し、基本情報技術者の称号を得る」のが
理想ですが、別に資格にこだわらなくてもいいと思います。
（けど、やっているうちに取りたくなるのが資格）

特に新人プログラマの皆様で、未経験などで入社する方などは
まずはこういう学習を始めてみるのはいかがでしょうか。

学習できるサイト：
http://www.fe-siken.com/
ここさえあれば大丈夫。というくらい充実したサイトです。
解答の解説もしっかりついているので安心。

上記IPAのサイトでは、過去問題と解答は全てpdf形式にてダウンロード可能です。
但し、解答の解説がないのでご注意を。
安全にArraySliceするサブスクリプトを定義する


Arrayを範囲で抜き出す時に、endIndexが範囲外だったりするとそのままアプリは落ちていきます。
いちいち範囲内に丸めるのも大変なのでサブスクリプトを定義するといい感じです。

```swift
extension Array {
  subscript (safe range: Range<Int>) -> ArraySlice<Element> {
    let sliced = self[min(range.startIndex, self.count)..<min(range.endIndex, self.count)]
    return sliced
  }
}
```

<img width="533" alt="スクリーンショット 2016-03-26 21.53.52.png" src="https://qiita-image-store.s3.amazonaws.com/0/24979/f7b8bc28-537e-a536-97ac-136c4f08eaef.png">

結果はこんな感じ。
範囲外に出た場合は範囲におさめて、そもそも開始が範囲外の時は空の配列が返ってきます。
bower経由でインストールしたbootstrap-sassをgulpでコンパイルする

※ 今回の私の記事はMacのローカルへのインストール作業に基づいて書かれています。
また、node と npmはすでにインストールされている状態とします。

# Bower のインストール
念のため、Bowerを入れるところから。
補足：package.jsがある階層と同じ階層がよいでしょう。

``` sh
$ npm install bower -g
$ bower init
```


$ bower init ですがいくつかの質問を聞かれます。
他人様の記事ですが、こちらの記事を参考にされるとわかりやすいかと思います。
http://qiita.com/oreo3@github/items/eb790fc091aa28af8d33#%E5%88%9D%E6%9C%9F%E5%8C%96%E6%99%82%E3%81%AE%E8%B3%AA%E5%95%8F

# bootstrap-sassの用意
現行のbootstrap-sassのソースを用意します。

``` sh
$ bower install bootstrap-sass-official --save
```
--save オプションでbower.jsonに追記も行います。

# sassファイルのコンパイル準備
bootstrap 系のsassファイルは以下のディレクトリにあります。
bower_components/bootstrap-sass/assets/stylesheets

これから変換用のbootstrapファイルの用意します。

``` sh
$ mkdir sass
$ mkdir sass/bootstrap
$ cp bower_components/bootstrap-sass/assets/stylesheets/_bootstrap.scss sass/bootstrap/_bootstrap-custom.scss
```
_bootstrap.scssはbootstrapのコンポーネントをすべて読み込む記述が書いてあり、
ここでコピーした_bootstrap-custom.scssの中身をいくつかコメントアウトして、
必要なコンポーネントを選別すると良いと思います。
補足：sassは『 _ 』から始まるファイルはscssの@importでの読み込み用のファイルになります。

私、最初はbower_components/bootstrap-sass/assets/stylesheetsにファイルをコピーしたりしてたのですが、bower_components配下はgitとかでコミットするようなモノじゃないと後から気付いたので、sassディレクトリなどを作って逃がしておいた方がいいです。

次にコンパイル対象にするscssファイルである、bootstrap.scssを追加します。

``` sh
$ cd sass/bootstrap/
$ vim bootstrap.scss
```

``` scss:bootstrap.scss
@import "bootstrap-custom";
```

先ほどの補足で述べたようにファイル名の『 _ 』は@importでの読み込み用のプリフィックスなので、ここでは@importのファイル名に_をつけなくても補完して読み込んでくれます。

# Gulpのインストール
次にGulpのセットアップをしていきます。
ついでにminifyとvender prefixも自動でやってくれるようにしてみます。

``` sh
$ npm install gulp -g
$ npm install gulp --save-dev
$ npm install gulp-sass --save-dev
$ npm install gulp-clean-css --save-dev
$ npm install gulp-autoprefixer --save-dev
```
Gulpはグローバルインストールのほかにもlocalのインストールも必要らしいです。
※ もしかしたら**$ npm install gulp --save-dev**の代わりに、こちらの方法でも良かったかもしれません（未検証）
http://qiita.com/ritukiii/items/921521f634e339550861


# gulpfile.js作成
bower.jsonと同じ階層でgulpfile.jsを作成します。

``` sh
$ vim gulpfile.js
```
``` js:gulpfile.js
var gulp = require("gulp");

// sass compiler
var sass = require("gulp-sass");

// add vender prifix
var autoprefixer = require("gulp-autoprefixer");

// css minify
var cleanCSS = require('gulp-clean-css');

gulp.task("bootstrap", function() {
    gulp.src("sass/bootstrap/bootstrap.scss")
        .pipe(sass({
                includePaths: ["bower_components/bootstrap-sass/assets/stylesheets"]
        }).on('error', sass.logError))
        .pipe(autoprefixer())
        .pipe(cleanCSS())
        .pipe(gulp.dest("./css"));
});
```

ちなみに、gulp.srcで指定するファイルは、scssの場合『 _ 』から始まるファイルはscssの@import記述用のファイルと見なされ、Gulpのコンパイル対象からも外れます。

早速gulpを実行してみましょう。

``` sh
$ gulp bootstrap
```
これでcss/ディレクトリにbootstrap.cssファイルが生成されたはずです。

補足：gulp.task("hogehoge", function() {...});のhogehogeがタスク名になります。

``` sh
$ gulp hogehoge
```
と実行する事で指定したタスクが実行されます。

# 終わりに
以上で、『bower経由でインストールしたbootstrap-sassをgulpでコンパイルする』環境が整いました。

引き続き、scssのファイルをwatchするように設定するなどして環境を整えるとさらに良いと思います。
Minecraftのニュースを知ることが出来るアプリを作ってみた。

id:hhiiuです。
====
今回、mine.htaというwindowsのアプリを作りました。ダウンロードしたら.zipなので、展開してから開いて下さい。

>>
<b>どんなアプリ</b>
Minecraftのニュースを表示するアプリです。
実は中身は[http://recommend.shinobi.jp/?_ga=1.195200933.86412106.1456544731:title]で日本語サイトで人気なもののRSSを表示しただけなので、手抜きです。ちなみに、このアプリに適用している.htaは、自分がiMacやwindowsで一番開発が出来るものなので、これを使いました。なぜならHTMLが出来るのを聞いたので、使ってみました。
<<
作成はウェブページ作りでおなじみのweb4(Microsoft)です。ウェブページだったら、見たまま編集やSEOチェックが出来るので、いいですよ。しかし、僕のホームページではそんなにSEOは使いませんね。
この記事はあとでBLOGに載せます。それと、今後どんどんアップグレードしていきます。Dropboxで新バージョンが出たら、リンクは多分消えるでしょう。リンクはhttps://www.dropbox.com/s/h7zz4i2xkhv06k0/mine.zip?dl=0 て。す。
LeapMotion環境設定(Unity)

LeapMotionを使う

福岡の勉強会でLeapMotionなる物にであった。
折角なので、Unity上で使えるようになるまでの情報をまとめる。

尚、Orion Betaは2016.03.26現在でWindowsのみの提供。

# Environment
Windows 7 Home Edition
Unity 5.2.1
  
# Installation
[LeapMotionのサイト](https://developer.leapmotion.com)からSDKをダウンロードする。
デスクトップのバージョンがOrion BetaとV2 DESKTOPと二つあるが、
Orion Betaを選択する。
V2 DESKTOPを選択すると、後述するUnity Pluginの実行時にエラーが出る。
![leapmotion01.png](https://qiita-image-store.s3.amazonaws.com/0/42445/34c9c92d-3116-8d58-ba27-5d49b7fb66ec.png)

解凍してexeを叩くだけ。この簡単さが大好きだ。
インストール時にグラフィックスドライバが古いといわれる事もあるが、
素直にグラフィックスドライバを更新すればいい。

インストールがすんだら、Visualizerで動作確認する。
![leapmotion03.png](https://qiita-image-store.s3.amazonaws.com/0/42445/daf14961-ebf8-ea9d-c085-76c348dc2092.png)
おっさんは気にしないでください。

ではUnityで使う準備。
[ココ](https://developer.leapmotion.com/unity)からUnity用のCoreAssetをダウンロードする。
後はダウンロードしたunitypackageをダブルクリックで起動して実行するだけ。

![leapmotion02.png](https://qiita-image-store.s3.amazonaws.com/0/42445/deb8a577-d9f0-12f5-5b8b-994f5c48c435.png)

おうふ。

では、よきエンジニアライフを！！
↑これ一回書いてみたかった。
vimのinsert modeの全てのキーマップ一覧

## tips
* insert modeを抜けるときは```CTRL-C```が一番押しやすい。ただし矩形選択後に```I```や```A```で複数行に渡って文字を入力した時は```CTRL-[```で抜けないと1行しか反映されない。またInsertLeaveのイベントは発火しない。
* BackSpace, Enterは代替できるので押さない習慣を付けたほうが入力スピードが上がる。
* vimとは直接関係ないがtmuxのprefixキーはCTRL-Sに割り当てるのがベスト。

## insert modeのキーマップ一覧

|キー|動作|
|:--|:--|
|CTRL-@|前回のinsert modeで入力した内容を再度入力し、insert modeを抜ける|
|CTRL-A|前回のinsert modeで入力した内容を再度入力|
|CTRL-B|割り当てなし|
|CTRL-C|insert modeを抜ける|
|CTRL-D|インデントを1段階下げる(normal modeの<)|
|CTRL-E|カーソルの下の文字を入力|
|CTRL-F|割り当てなし|
|CTRL-G CTRL-J|insert modeに入った時のカーソル位置の下に移動|
|CTRL-G j|insert modeに入った時のカーソル位置の下に移動|
|CTRL-G \<Down>|insert modeに入った時のカーソル位置の下に移動(未確認)|
|CTRL-G CTRL-K|insert modeに入った時のカーソル位置の上に移動|
|CTRL-G k|insert modeに入った時のカーソル位置の上に移動|
|CTRL-G \<Up>|insert modeに入った時のカーソル位置の上に移動(未確認)|
|CTRL-G u|undoできない編集を開始(未確認)|
|CTRL-H|back space|
|CTRL-I|tab|
|CTRL-J|改行|
|CTRL-K {char} {char}|マルチバイト文字を入力(例:CTRL-K ab =「ば」)|
|CTRL-L|insert modeを抜ける(未確認)|
|CTRL-M|改行|
|CTRL-N|カーソル位置の単語でコードヒンティングを出す|
|CTRL-O|一度だけノーマルモードのコマンドを入力できる|
|CTRL-P|カーソル位置の単語でコードヒンティングを出す|
|CTRL-Q|ターミナルに登録されていなければCTRL-Vと同じ|
|CTRL-R {0-9a-z"%#*:=}|レジスタに登録されている文字を貼り付け|
|CTRL-R CTRL-R {0-9a-z"%#*:=}|レジスタに登録されている文字を貼り付け|
|CTRL-R CTRL-O {0-9a-z"%#*:=}|レジスタに登録されている文字を貼り付けてインデントを直さない(未確認)|
|CTRL-R CTRL-P {0-9a-z"%#*:=}|レジスタに登録されている文字を貼り付けてインデントを直す(未確認)|
|CTRL-S|割り当てなし|
|CTRL-T|インデントを1段階下げる(normal modeの>)|
|CTRL-U|行頭からカーソルの前までを削除|
|CTRL-V {a-z}|特殊文字を入力(例:CTRL-V a =「^A(アスキーコードが1の文字)」)|
|CTRL-V {0-9} {0-9} {0-9}|3バイト文字を入力(例:CTRL-V 0 0 1 =「^A(アスキーコードが1の文字)」)|
|CTRL-W|カーソルの単語の先頭からカーソルの前までを削除|
|CTRL-X CTRL-D|定義した識別子を補完|
|CTRL-X CTRL-E|1行下にスクロール|
|CTRL-X CTRL-F|ファイル名を補完|
|CTRL-X CTRL-I|単語を補完|
|CTRL-X CTRL-K|辞書から単語を補完|
|CTRL-X CTRL-L|行全体を補完|
|CTRL-X CTRL-N|次の補完候補を選択|
|CTRL-X CTRL-O|omni補完|
|CTRL-X CTRL-P|前の補完候補を選択|
|CTRL-X CTRL-S|スペルチェック|
|CTRL-X CTRL-T|シソーラスから補完|
|CTRL-X CTRL-Y|1行上にスクロール|
|CTRL-X CTRL-U|completefuncから補完|
|CTRL-X CTRL-V|コマンドラインモードのように補完|
|CTRL-X CTRL-]|タグを補完|
|CTRL-X s|スペルチェック|
|CTRL-Y|カーソルの上の単語を入力|
|CTRL-Z|vimを停止|
|CTRL-[|\<Esc>と同じ|
|CTRL-\ CTRL-N|ノーマルモードに移動|
|CTRL-\ CTRL-G|明示的にinsert modeに移動|
|CTRL-]|短縮入力(Abbreviations)を展開|
|CTRL-^|lmapを有効化・無効化|
|CTRL-_|allowrevinsが設定されている時に言語を切り替える|
|0 CTRL-D|カーソルの行の全てのインデントを削除|
|^ CTRL-D|カーソルの行の全てのインデントを削除|

[normal modeでctrlキーを使うキーマップ一覧](http://qiita.com/34ro/items/e20fa0831d78566981d3)もまとめています
体育会系 IDCF Cloud の仮想マシンを Vagrant 経由で起動する手順


## 参考

- http://qiita.com/atsaki/items/631b3d78a3949fe37b0f
- https://github.com/schubergphilis/vagrant-cloudstack

有難うございます。

## 事前の準備

- 東日本又は西日本リージョンの API エンドポイントを確認しておく
- API キーを確認しておく
- Secret キーを確認しておく
- SSH key にて鍵を発行しておく
- IP アドレスの ID を確認しておく
- Vagrant の導入、[vagrant-cloudstack](https://github.com/schubergphilis/vagrant-cloudstack) の導入

## 本記事の環境について

### vagrant を実行する環境

~~~sh:vagrantを実行する環境
ProductName:    Mac OS X
ProductVersion: 10.11.4
BuildVersion:   15E49a
~~~

### vagrant のバージョン

~~~sh:vagrantのバージョン
Installed Version: 1.8.1
Latest Version: 1.8.1
~~~

## vagrant-cloudstack の導入

~~~sh:command
vagrant plugin install vagrant-cloudstack
~~~

## Vagrantfile の作成

### 作業ディレクトリの作成

~~~sh:command
mkdir ~/path/to/vagrant_idcf
~~~

### vagrant init

~~~sh:command
cd ~/path/to/vagrant_idcf
vagrant init
~~~

`vagrant init` を実行すると Vagrantfile が生成される。

### Vagrantfile

~~~ruby:Vagrantfile
#
# 西日本リージョンにて仮想マシンを起動する例
#
Vagrant.configure(2) do |config|
  config.vm.box = "ubuntu/trusty64"

  config.vm.provider :cloudstack do |cloudstack, override|
    override.vm.box = "dummy"
    override.vm.box_url = "https://github.com/klarna/vagrant-cloudstack/raw/master/dummy.box"

    cloudstack.host                  = "compute.jp-west.idcfcloud.com"
    cloudstack.path                  = "/client/api"
    cloudstack.port                  = "443"
    cloudstack.scheme                = "https"
    cloudstack.api_key               = "API キー"
    cloudstack.secret_key            = "Secret キー"

    cloudstack.display_name          = "ubuntu"
    cloudstack.template_name         = "Ubuntu Server 14.04 LTS 64-bit"
    cloudstack.zone_name             = "augusta"
    cloudstack.service_offering_name = "light.S1"

    cloudstack.pf_ip_address_id      = "IP アドレスの ID"
    cloudstack.pf_public_port        = "22"
    cloudstack.pf_private_port       = "22"
    cloudstack.keypair               = "SSH 鍵名"
    override.ssh.private_key_path    = "SSH 秘密鍵ファイルへのパス"
    override.ssh.username            = "root"
  end
end
~~~

## 仮想マシンの起動、ログイン、停止、破棄

### 仮想マシンの起動

~~~sh:command
vagrant up --provider cloudstack 
~~~

### 仮想マシンへのログイン

~~~sh:command
vagrant ssh
~~~

### 仮想マシンの停止

~~~sh:command
vagrant halt
~~~

### 仮想マシンの破棄

~~~sh:command
vagrant destroy
~~~

## 以上

IDCF Cloud を Vagrant 経由で起動する手順でした。
MonacaでOnsenUI 2 Betaを使う

# 記事の対象者
- Monacaを使っている人
- 最新のOnsenUIを試してみたい人

# 問題
新しいものが好きだ。
AngularJS 1.4.x + OnsenUIの構成を、
↓
AngularJS 1.5.3 + OnsenUI 2 Beta.8
に変えたい。

だが、Monacaが用意するものはバージョンが少し古い。
かといって自分でbower installしてアップするのも面倒くさい。

# 解決策
MonacaのJS/CSSコンポーネント設定から手動でインストールする。

# 方法
1. とりあえず新規プロジェクトを作成
   例として「Onsen UI最小限のテンプレート」を選択する。
<img src="https://qiita-image-store.s3.amazonaws.com/0/106886/7cef378a-467a-f6b1-41a5-a33dedc6bf86.png" width="640px">

2. コンポーネントの設定を開く。
<img src="https://qiita-image-store.s3.amazonaws.com/0/106886/9c5373b5-9333-306c-eefd-3de54f6d6b67.png" width="320px">

3. Onsen UI (Monaca Version)を削除する。
<img src="https://qiita-image-store.s3.amazonaws.com/0/106886/1a689731-adb4-4d2b-b150-ed0020d33a4e.png" width="640px">

4. 検索キーワードに「onsenui」と入力し、Monaca版じゃない方のOnsenUIを追加する。
最新の2.0.0-beta.8が使える！
<img src="https://qiita-image-store.s3.amazonaws.com/0/106886/f610be82-c035-381d-5f71-b33079498eba.png" width="640px">

5. ローダの設定では
・ onsenui.js
・ onset-css-components.css
・ onsenui.css
にチェックを入れる。

6. OnsenUI同様、AngularJSを検索して追加する
<img src="https://qiita-image-store.s3.amazonaws.com/0/106886/8058b6d7-9d8b-5dd8-6fad-3fc2e74c4201.png" width="640px">
ローダの設定では
・ angular.js
・ angular-csp.css
にチェックを入れる。
7. index.htmlを修正
**重要！：angular-onsenui.js を loader.jsの後に読み込む**
<img src="https://qiita-image-store.s3.amazonaws.com/0/106886/285e0032-bd76-7cc3-859f-734f5ef3349d.png" width="640px">

基本的なコンポーネントはだいたい動くが、非Monaca版をインストールしたためかons-lazy-repeatなど一部のコンポーネントではエラーが出る。
※ 非Monaca版Beta.7では動いたのでOnsenUI自体の問題の模様。ons-lasy-repeatはBeta.8から仕様変更された可能性あり。ドキュメントはよ！

# 結論
OnsenUI 2 Beta.8、AngularJS 1.5.3 共にMonacaのコンポーネント設定から手動でインストールすることは可能。

しかしながら、アプリの動作が不安定になるため「どうしても最新版のOnsenUIを試したい」という場合を除いてお勧めできない。

ちなみに筆者はMonaca版OnsenUIの最新版（執筆時点では 2 Beta.7）とAngularJS 1.5.3を個別にインストールしている。
Defoldを試す２ 基本の型

とりあえず、[Defold](http://www.defold.com)のチュートリアル通りに登場するファイルの拡張子をざっくり説明して行く。

# atlas
png等の画像リソースをまとめたもの。アニメーションもここで指定する。複数リソースがまとまっているので、Project Viewでダブルクリックすると、Outlineにどのリソースが含まれているかが見れる。
![Defold2_01.png](https://qiita-image-store.s3.amazonaws.com/0/42445/b4b52392-fcec-4c08-1fc3-e62ef9049c6c.png)

# collection
Game Objectやcollectionをまとめたもの。ゲーム中のシーンを表現しているものと思えばよいハズ。
![Defold2_02.png](https://qiita-image-store.s3.amazonaws.com/0/42445/a94f7b47-1fb0-75da-6768-e651f14dd883.png)

# go
Game Object。ゲーム中のキャラクタなどまんまオブジェクトを表現する。
後述するscriptやsprite等のcomponentを内包する。
![Defold2_03.png](https://qiita-image-store.s3.amazonaws.com/0/42445/149c69e9-d04a-d3ea-ac38-fb1ad8c63b4a.png)

# script
Game ObjectやSpriteを操作するコード。luaで記述する。

# sprite
atlasのリソースをシーンで利用する為の物。実際のシーンでの位置やアニメーションの種類を保持する。

# collisionobject
衝突判定用のコンポーネント。Sphere,Box,Capsuleなどがある。
![Defold2_04.png](https://qiita-image-store.s3.amazonaws.com/0/42445/556f663f-4a90-99ad-33d5-5e399b12d52d.png)


後になるほど、Unityっぽさが出てきた気がする。

ModelやParticleなど、他にも色々あるので、
情報はちょくちょく追記します。
Javascript, Typescript のインストール

# Javascript, Typescript のインストール
(2016.03.26 OS X El Capitan‎)

Javascript は、クラスベースのオブジェクト指向言語ではないため理解が難しく
敬遠していたのですが、ES6 からクラスベースで書けるようになったそうで、
インストールをしてみることにしました。

Typescript という Javascript に静的型付け機能などを追加した
プログラム言語も導入しました。

## Home brew で　node.js と npm をインストール

node.js を導入すると、ブラウザでなくても javascript を実行できるようになるそうです。
また、npm は javascript のパッケージを管理するために使用するそうです。

[Homebrew](http://brew.sh/index_ja.html) が導入済みなら、以下のコマンドで node.js と npm がインストールできました。

```
brew install node
```

## Javascript で Hello World!

`hello.js` というファイルを以下のように作成しました。

```
console.log("Hello World!")
```

ターミナルで `node hello.js` と入力すると `Hello World!` と出力されました。

## npm で typescript の導入

以下のコマンドで、typescript がインストールできました
（npm は `brew install node` とした時に既にインストールされています）。

```
npm install typescript -g
```

g オプションは、グルーバル環境にパッケージをインストールする際に指定するそうです。
[npmコマンド覚え書き
](http://qiita.com/_daisuke/items/d7c8f0aec9730be36267) などを参考にさせていただきました。

## Typescript で Hello World!

以下のコマンドで、[Atom](https://atom.io/) に atom-typescript というパッケージを導入しました。
[AtomでTypeScriptの環境を構築する](http://qiita.com/Sugima/items/113eb16f14ca1e9a6d0f) などを参考にさせていただきました。

```
apm install atom-typescript
``` 

Atom を起動すると、atom-typescript が依存するプログラムが自動でインストールされました。
Atom エディタで `hello2.ts` というファイルを以下のように作成しました。

```
var greet: string = "Hello World!";
console.log(greet);
```

次に、[atom-typescript/docs/tsconfig.md](https://github.com/TypeStrong/atom-typescript/blob/master/docs/tsconfig.md) などを参考にして、
同じフォルダに `tsconfig.json` というファイルを以下のような感じに作成しました。

```
{
   "compilerOptions": {
      "target": "es6",
      "module": "commonjs",
      "declaration": false
   },
   "compileOnSave": false,
   "filesGlob": [
      "./*.ts"
   ],
   "files": [
      "./hello2.ts"
   ],
   "atom": {
      "rewriteTsconfig": true
   }
}
```

atom-typescript には、エラーなどを自動検出してくれる機能が付いており、
もしミスがあると Atom エディタの下の方にあるウィンドウ等で警告をしてくれました。
バグの発生しやすいプログラムを作成する時には便利かもしれません。

[Typescript tutorial](http://www.typescriptlang.org/docs/tutorial.html) などを参考にして、
ターミナルにて、以下のコマンドで .ts ファイルをコンパイルしました。

```
tsc -t es6 -m commonjs hello2.ts
```

こうすると、同じフォルダに `hello2.js` というファイルが作成されました。
あとは、同様に `node hello2.js` と入力すると `Hello World!` と出力されました。

Atom でコンパイルするには、`Package -> TypeScript -> Build` とするか、
`tsconfig.json` で、`"compileOnSave": true` とすればファイルを保存した際に hello2.js が作成されました。
teratail のタグ情報集計値を取得する

https://teratail.com/ でのタグ毎の回答数, 解決数, 解決率の集計を得るためのスクリプトを作成した。

https://github.com/katoy/teratails においてある。

- teratail の RestAPI (https://teratail.com/api) をつかって、質問の一覧を json 形式ですべて取得する。　
- それを sqlite3 に保存する。
- DB アクセスして値を集計して、csv で書き出す。

その他：
 rails-erd は rails 環境下で ER 図を生成するツールである。
しかし、本ツール(rails ではない)においても rails-erd をつかって ER 図を作ることも試みている。

![openoffice.png](https://qiita-image-store.s3.amazonaws.com/0/14958/f2d517e8-d5f2-f8ee-88d7-30e45c1a40c2.png)

![1.png](https://qiita-image-store.s3.amazonaws.com/0/14958/180c1441-074f-ae3d-a180-90904c8cf905.png)
New Relic で Apache プロセス数を監視し、アラートを飛ばす方法

弊社の一部のサービスでは、[New Relic](http://newrelic.com/) を使って、主にサーバのパフォーマンスモニタリングに利用しています。Apacheのプロセス数を監視する方法です。

# Alert Conditionの設定
1. Categorize の選択
今回はサーバのモニタリングなので、「Servers」を選択します。　Conditionタイプも「Metric」を選択します。

2. Select entities
Alertの送付先を選ぶ設定なので、監視設計に合わせてサーバを選択

3. Define thresholds
「Custom」→「Enter Metric name」を選択しMetric Nameを入力すればOkayです。 
 Metic nameが分からないと監視する事ができません。その調査方法は下記の通りです。
![2016-03-28_09h09_15.png](https://qiita-image-store.s3.amazonaws.com/0/45733/8d160558-efb0-9289-7558-2c185febef8e.png)


# Custom のMetric Nameの調査方法
New Relicのドキュメントを確認した所、ダッシュボードを新規に作成する際にMetic Nameを取得できます。と記載があったのでやってみた。（なんだこの面倒くさい手順はｗ）

「Tools」→ 「Create custom dashboard」と進み、適当にダッシュボードの名前などを入力すると、「New widget」を作成する画面にて、Metricsが表示されています。
![NewRelic-metrics.png](https://qiita-image-store.s3.amazonaws.com/0/45733/902831eb-6c09-42cb-f61e-8fec874957e8.png)

今回はプロセス数を取得したいので、「ProcessSamples」を選択し取得したいプロセス名を選択すれば完成です。
![2016-03-26_18h37_25.png](https://qiita-image-store.s3.amazonaws.com/0/45733/6bf3a2bd-0e33-8287-d4a5-de7bd074e058.png)

先ほどの「Alert」設定画面にて、このMetricsを埋めれば設定完了です。

今回はApacheのプロセス数を監視する要件でしたが、New Relicでグラフ化できるものは全てこの手順で監視することができます。

以上です。
コマンドの実行結果をPHPで出力する。


```php:exec.php
<?php
$command='ls -ltr';
  $output=array();
  $ret=null;
  exec ( $command, $output, $ret );
  //各行を<br>付きで出力する。
  foreach ($output as $line){
    print $line."<br>\n";
  }
?>
高DPIディスプレイ環境下でRPGツクールMVのUIサイズが小さすぎる問題を解決する

**(2016-04-24)公式の1.20アップデートで改善します。以下の手順は不要です。**

初投稿です。見習いプログラマとしてのんびりJavascriptをRPGツクールMVで勉強しています。

憧れのマカーに転身し、Retinaディスプレイに頬ずりしたり家族相手にドヤリングを欠かさない（スタバに行く自信は無い）昨今です。

セットアップを終え、BootCampしたWindows下にRPGツクールMVをインストールし、胸を躍らせながらツクールを起動させたところ、ちょっとした問題にぶつかったので、解決手順をメモすることにしました。

# RPGツクールMVのUIサイズが小さすぎる
![2016-03-26_2.jpg](https://qiita-image-store.s3.amazonaws.com/0/117533/a7abad74-a6d2-4801-fa28-2f8a5c95e0f5.jpeg)

使っているのがRetinaディスプレイなので、フルサイズの３分の２くらいが実際の大きさです。
俺の目を潰さんばかりの豆粒加減です。これはダメだ。

なんとかならんかと海外のフォーラムを適当に漁ってみました。
どうやら本体側で今後対応する予定らしいのですが、日本版がいつそのアップデートを拾ってくれるのかまったくわかりません。

ですが、同じところに一時的な打開策が書いてあり、それを実行したところ
![2016-03-26.jpg](https://qiita-image-store.s3.amazonaws.com/0/117533/fb91218a-25da-f6c7-0914-d5834c1acbe5.jpeg)

こんな感じで、ひとまず改善しました。

解決に至るまでの手順を備忘録として書き残しておきます。


# 筆者の開発環境
使用しているPC：MacBook Pro 13インチ Retinaディスプレイモデル
OS：Windows10(BootCamp環境)
解像度：2560x1600
拡大率：200％

# 解決手順
Windows10でのみ解決を確認しています。
手順の中でレジストリをいじったりするので、当たり前ですが**自己責任**でお願いします。

・簡易手順
①manifestファイルを読み込むためにレジストリをいじる
②有志の作ったmanifestファイルをダウンロードし、リネームしてRPGMV.exeがあるフォルダに置く
③通常どおり起動して動作を確認する。

## ①レジストリをいじる
**レジストリ編集前に必ずバックアップを取ってください。**
（編集するキーを開いた状態で、変更を加える前にツールバーから「編集」→「エクスポート」）

### ・レジストリエディタの起動
「ファイル名を指定して実行（Win+R）」ウィンドウから regedit と入力し OK

### ・値を追加する
以下のキーに移動
`HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\SideBySide`

ウィンドウ右の適当な空欄を右クリックし「新規」→「DWORD（32ビット）値」で値を作成

値の内容を以下のように設定
名前：PreferExternalManifest
値のデータ：1
（表記はどちらでも変わりません）

これでアプリ起動前に、存在すれば外部マニフェストを読み込むようになります。

## ②外部マニフェストのダウンロード
どうやら古いPhotoshopでも似たような問題が発生しているらしく、有志がmanifestファイルを配布しています。
これをそのままRPGツクールMVに流用します。

以下のサイトを開き、記事の下部にある「Photoshop.exe.manifest」をダウンロードします。
http://www.danantonielli.com/adobe-app-scaling-on-high-dpi-displays-fix/

ダウンロードしたmanifestファイルを「RPGMV.exe.manifest」に改名し、RPGMV.exeがあるフォルダと同じ場所に設置します。
（通常は`C:\Program Files (x86)\KADOKAWA\RPGMV`）


あとはいつもどおり起動し、各種UIが拡大されていることを確認してください。
（無理矢理Vista時代のスケーリングを適用しているので非常にジャギジャギしますが、それはしょうがないです）


# あとがき
はしがきに書くべきかもしれませんが、僕はmanifestとかなにそれこわいレベルの人間ですので、この手順で解決する技術的な根拠が良くわかっていません。
なんか管理者権限の要求とか他アプリとの関係性とかを書く場所って程度しかわかりません。
もろもろ含めて目下勉強中です。
口を挟んでくれるやさしいおにいさんがいたら嬉しいです。

この記事が同じ症状で悩んでいる人達にとって少しでも助けになれば幸いです。
参考メモ/オープンソースのライセンス解説サイト

オープンソースのライセンスについて解説してくれてるサイトの参考URLのメモです。

まとめてくれてるサイト：

- OSSライセンス関連情報：IPA 独立行政法人 情報処理推進機構
  - http://www.ipa.go.jp/osc/osslegal.html
- Licenses & Standards | Open Source Initiative
  - https://opensource.org/licenses
- 知る、読む、使う！ オープンソースライセンス - 達人出版会
  - http://tatsu-zine.com/books/osslicense
- オープンソースライセンスの選択に役立つ情報 - OSDN ヘルプ - OSDNドキュメント管理 - OSDN
  - https://osdn.jp/docs/Selection_of_OpenSourceLicense
- ライセンスの選択を恐れる必要はありません - Qiita
  - http://qiita.com/tadsan/items/99d816e78ca429093b75


パブリック・ドメインについて：

- Unlicense.org » Unlicense Yourself: Set Your Code Free
  - http://unlicense.org/
- 「パブリック・ドメイン」とは何か | OSDN Magazine
  - https://osdn.jp/magazine/03/06/15/1044258
H27年春期 基本情報技術者 午後問12 解説 掛け算のみ

```
MAIN    START
        LD     GR0,X          ; GR0 ← X（被乗数）
        LD     GR2,Y          ; GR2 ← Y（乗数）
        CALL   MULT
        RET
X       DC     3
Y       DC     5
        RET

MULT    START            ; シフトによる乗算
        RPUSH
        LD     GR1,GR0   ; 被乗数を GR1 に保持
        LD     GR0,=0    ; 乗算結果の初期化

        LD     GR3,=15
        LD     GR2,GR2
LP2     JZE    FIN2
        JPL    CONT
        LD     GR4,GR1
        SLL    GR4,0,GR3
        ADDL   GR0,GR4
CONT    LAD    GR3,-1,GR3
        SLL    GR2,1
        JUMP   LP2
FIN2    RPOP
        RET
        END
```
11x101=11x100+11x1
PostGISのST_Bufferで円を描画する

#PostGISで円を描画する

[ST_Buffer関数](http://www.finds.jp/docs/pgisman/1.5.1/ST_Buffer.html)を用いると、点、線、面の形状を指定した長さの面を取得する事が出来ます。点オブジェクトを入力すると、円形のポリゴンを得ることが出来ます。

##GEOMETRY型の世界測地系（WGS８４:SRID4326）で円を作成

```sql:大体100mの円形状
SELECT 
 ST_Buffer( 
  --第１引数： 点オブジェクト （ 東経139.76719度 北緯 35.6811 の世界測地系の点　）
  ST_SetSRID( ST_POINT( 139.76719 , 35.6811 ) , 4326 )
  --第２引数： 半径 
  , 0.00001 --度単位
 )
```

大体100mの円描画
![step1.png](https://qiita-image-store.s3.amazonaws.com/0/53918/c76a6f75-8a3a-c5a7-a55f-633efb4b4b97.png)
© OpenStreetMap contributors

ちょっと縦長の楕円のように見えます。
ST_Buffer処理で半径を度単位で処理をした為に歪んでいると思われます。

##GEOGRAPHY型で円を作成
球座標系であるGEOGRAPHY型ではメートル単位で空間情報処理が可能です。
平面座標系のGEOMETRY型の世界測地系から球座標系のGEOGRAPHY型は直接キャストが可能です。(`::geography`)

```sql:100mの円形状
SELECT 
 ST_Buffer( 
  --第１引数： 点オブジェクト （ 東経139.76719度 北緯 35.6811 の世界測地系の点　）
  ST_SetSRID( ST_POINT( 139.76719 , 35.6811 ) , 4326 )::geography
  --第２引数： 半径 
  , 100 --メートル単位
 )
```
GEOGRAPHY型（球座標）による円描画（水色）
![step2.png](https://qiita-image-store.s3.amazonaws.com/0/53918/ee281161-5800-0748-2802-df4b05cb10e8.png)
© OpenStreetMap contributors
水色の線は、かなり真円に近い形に見えます。

#おまけ：ST_Bufferの円は３２角形？

半径を段階的に大きくし、ST_Bufferのポイント数の変化を観察してみました。

```sql:半径別円ポリゴンのポイント数カウント
--5段階の半径を予め準備
with t_level(id, label, r )as (
    values (1, '1m', 1),
           (2, '10m', 10),
           (3, '100m', 100),
           (4, '1km', 1000),
           (5, '10km', 10000)
)
--各半径毎にポイント数をカウント
SELECT 
 id , label  , r , MAX(path) AS point_num
FROM
(
SELECT
id, label, r  ,
 ((ST_dumppoints( ST_ExteriorRing( ST_Buffer( ST_POINT(139.76719 , 35.6811 )::geography , r )::geometry  ) ) ).path)[1]
FROM t_level
) AS t1
GROUP BY 1,2,3
ORDER BY 1
```

結果

| id | 半径 | 半径（ｍ） | ポイント数 |
|:-----------:|------------:|------------:|:------------:|
|1|1m|1|33|
|2|10m|10|33|
|3|100m|100|33|
|4|1km|1000|33|
|5|10km|10000|33|

どの半径でもポイント数は３３個であるという結果が得られました。
円形状のポリゴンデータから点を抽出したので、実は始点と終点が同じ座標です。
よって、点の数は３３個であり、角の数は３２個であるという事になります。
optics > 案 > 隙間からのぞいて視力を上げる

## 視力を一時的に上げる

サウナに入る時、眼鏡をはずす。そうするとサウナルーム内のテレビはぼんやりとしか見えない。
そういう時に以下のようにして視力を上げている。

1. 両手の指の間を少しずつ空ける
2. その状態で手のひらを交差し、小さな穴を作る
3. その小さな穴から除くことにより視力を0.1か0.2程度あげることができる。

なんという効果か忘れた~~（後で調べる）~~が、眼鏡がない時でもこれで大きな文字は読めるようになる。

別の方法として、グーを作り、中心を少し空ける。その穴から覗く。


## 電子工作

上記のような状況を電子工作できないだろうか、と思った。レンズが入手できない状況（ほとんどないと思うが）に多少遠方を撮影できるようにする。

問題は映像を撮る時のフォーカスだろう。遮蔽物の方のフォーカスでなく、遮蔽物の空きの部分にフォーカスを合わせないといけない。自動フォーカスではなくプログラム制御フォーカスになるだろう。(しかしフォーカスを変更している時点で、視力を上げているのと同等か？）

こういう仕組みのものを近いうちに作れそうにないので、案だけここに記す。

## リンク

https://www.reddit.com/r/askscience/comments/1n1yk4/why_does_my_sight_get_better_when_looking_through/

> A tiny hole is essentially a narrow aperture, which increases the depth of field of your vision by the way in which light has to travel through it, thus making more stuff appear to be in focus to your eyes.
参考メモ/VirtualBox5.0.16でホストOS(Win10)とゲストOS(CentOS7.2)のファイル共有

VirtualBox 5.0.16 でホストOS (Win10) とゲストOS (CentOS 7.2) とでファイル共有するやり方の参考程度のメモです。

三行でまとめ：

* Webでググッて出てくるのは微妙にバージョンが違うために、今のバージョンだとしなくて良い作業が混ざってたりするので、参考程度に留める。
* 英語だけどVirtualBoxのヘルプの「Shared folders」を一読のこと。とにかくそれが最優先で確認を推奨する一次資料。
* 自動マウント有効にすれば、`/media/sf_(共有名)` が自動で作成されてそこにマウントされた（繰り返すが VirtualBox 5.0.16 + CentOS 7.2 ゲストOSでの話）

例：
![20160326_vbox_shared_folder_config.png](https://qiita-image-store.s3.amazonaws.com/0/18618/f4a472a0-f1ae-6b73-0d6b-84c24a6e1d77.png)

→ 「自動マウント」を「はい」にしたので、 `/media/sf_hostfs` でアクセスできた。

※Guest Addition 導入を前提。

また、これはヘルプには見当たらなかったが、やってみて特に悪影響は無いようだ。

```
$ sudo gpasswd --add {ユーザ名} vboxsf
```

参考：

* VirtualBoxにおいて、ホストOSとゲストOS (CentOS) 間の共有フォルダを作成する方法 - Qiita
    * http://qiita.com/SUZUKI_Masaya/items/fb2d3c8141ba82d16801