OmniAICreator/Qiita-1.07M huggingface dataset:
JSFのTemplateを整理

一読しても全く理解できなかっため整理してみる。


# Templateの概念

![スクリーンショット 2015-08-01 11.55.58.png](https://qiita-image-store.s3.amazonaws.com/0/35454/0e3c3117-c4f9-8191-50dc-86a615ef9e1a.png "スクリーンショット 2015-08-01 11.55.58.png")

## タグの整理

### パーツで使うタグ
| composition  |
|:-----------:|
|パーツデータの範囲指定(使わなくてもOK)|テンプレートに埋め込むデータをname属性で指定

### テンプレートで使うタグ

| insert |include | 
|:-----------:|:------------:|
| 表示データの読み込み場所に名前を付ける|表示データ取り込み元ファイルの指定|

### クライアント(テンプレートを利用する画面)で使うタグ

| composition | define | include | 
|:-----------:|:------------:|:------------:|
|template属性必須　使用するテンプレートを指定|表示データの場所を指定(insertと対応)|表示データ取り込み元ファイルの指定|

## コード例
### パーツ
```html:header.xhtml
<h1>書籍管理システム</h1>
```
```html:content.xhtml
<html>
<head><title>テストタイトル</title></head>
<body>
	<ui:composition>
		<h2>コンテンツ内容</h2>
		<p>〜〜〜〜〜〜〜〜〜</p>
	</ui:composition>
</body>
</html>
<h1></h1>
```
```html:footer.xhtml
<h1>hugahuga.com</h1>
```
### テンプレート
```html:template.xhtml
<ui:insert name ="top">
	<ui:include src ="/header.xhtml" />
</ui:insert>
<ui:insert name ="content" />
<ui:insert name ="bottom">
	<ui:include src ="/footer.xhtml" />
</ui:insert>
```
### クライアント(テンプレートを利用する画面)
```html:index.xhtml
<ui:composition template="/templates/template.xhtml">
	<ui:define name ="content">
		<ui:include src="content.xhtml" />
	</ui:define>
<ui:composition>
```
最尤推定であてはめて正規分布を描く

# Q.
正規分布に従っていると考えられるデータに対して正規分布をあてはめたいです。最尤推定で平均パラメータと標準偏差パラメータを求めて、求めた結果の正規分布を描きたいです。

# A.
「[正規分布など好きな関数の曲線を描きたい](http://qiita.com/berobero11/items/a6522a6e6561f8ca7b96)」を参考にします。以下、コード例です。

```OK_example.R
library(ggplot2)

set.seed(123)
X <- rnorm(20, mean=0.3, sd=1.2)

logLikelihood <- function(args, x){
  likelihood <- 1/sqrt(2*pi*args[2]^2)*exp(-0.5*((x-args[1])/args[2])^2)
  return(sum(log(likelihood)))
}

mle <- optim(par=c(0,1), fn=logLikelihood, x=X, control=list(fnscale=-1))$par
d <- data.frame(x=X, y=0, xend=X, yend=dnorm(X, mean=mle[1], sd=mle[2]))

p <- ggplot()
p <- p + geom_rug(data=data.frame(X=X), aes(x=X), sides="b")
p <- p + geom_segment(data=d, aes(x=x, y=y, xend=xend, yend=yend), linetype="dotted", size=0.25)
p <- p + stat_function(data=data.frame(X=c(-4,4)), aes(x=X), fun=dnorm, args=list(mean=mle[1], sd=mle[2]))
```

`logLikelihood`関数で対数尤度を定義しています。他の関数をあてはめるときはここを変えます。最尤推定は`optim`が便利だと思います。使い方の詳細は他のサイトを参照してください。

ラグを描きたい時はそのものである`geom_rug`がありますのでそれを使います。つながらない線分を描くときは`geom_segment`で描いていきます。これでラグから関数までの点線を描いています。そして、既存の関数を描くときは`stat_function`を使うのでした。

![OK.png](https://qiita-image-store.s3.amazonaws.com/0/12869/bf7f0479-7203-29f3-4d0c-ec35aa83ac50.png)


# 参考資料
http://stackoverflow.com/questions/17649759/fitting-gaussian-to-data-geom-point-in-ggplot2/17650549#17650549
http://nekopuni.holy.jp/2013/12/r%E6%9C%80%E9%81%A9%E5%8C%96%E3%80%80%E6%9C%80%E5%B0%A4%E6%8E%A8%E5%AE%9A%E3%81%AE%E7%B7%B4%E7%BF%92/
メソッド復習

tamy0612様、ご指導ありがとうございます。
```
def set_fuel(litre)
  @fuel = litre
end
```
@fuelをlitreで更新する操作をしています。(このメソッドはlitreを返します)

```
def set_fuel
  @fuel
end  

```
@fuelを返す(参照する)操作になる

***

umanoda様、ご指導ありがとうございます。

##インスタンス変数の値を変更する。

```
class Car
  def initialize
    @fuel = 100
  end
  
  def set_fuel
    @fuel
  end    
end

my_car = Car.new      #車を作成、ガソリンが100L入っている
my_car.set_fuel = 200 #my_car.set_fuelで@fuelを取得（重要）
　　　　　　　　　　　　  #@fuel = 200 でmy_carにガソリン200Lを入れられる？

```

##しかし、上記コードを実行すると、my_car.set_fuelは「100」という値を返す為、

```
100 = 200 #100に200を代入する意味合いになりエラーとなります。
```

##what should i do??

インスタンス変数の値を変更する

```
class Car
  def initialize
    @fuel = 100
  end
  
  # インスタンス変数に値を格納する、結果ガソリンの量が変更できる。
  def set_fuel(litre)
    @fuel = litre
  end
  
  # インスタンス変数の値を取得する
  def get_fuel
    @fuel
  end
end

one_car = Car.new
puts one_car.get_fuel  #=> 100

one_car.set_fuel(200)
puts one_car.get_fuel  #=> 200   
                     
```

 
# セッターメソッドでインスタンス変数の値を変更する

```
   class Car
  
  def initialize(name)
    @name = name
  end
  
  def name=(value) #セッターの定義
    @name = value
  end
end

my_car = Car.new("本田")

puts my_car.name = "siro"
 
   
```
iOSのTips


# iAd

* [初めての広告！実装が恐ろしく簡単なiAdを利用しよう](http://crunchtimer.jp/blog/technology/swift/3593/)

# TabBar

* [xcode tab bar controller タブの追加と名前、順番の変更](http://www.hideblog.net/nikkis/show/324/)

# 多言語化

* [Xcode6 Storyboardで多言語対応してみた](http://grandbig.github.io/blog/2014/12/07/multilanguage/)

# View

* [[Swift] TextField キーボードを閉じる](https://akira-watson.com/iphone/textfield.html)
* [[Swift]APIで取得したJSONをswiftyJSONでパースして、天気情報をUITableViewで表示。お天気アプリを作ってみる。](http://qiita.com/yonell/items/c5432207868fa2d5cfc9)
+ [UITableViewのセルをカスタマイズする](http://dev.classmethod.jp/smartphone/iphone/uitableview_custom_cell/)
+ [Custom UITableViewCell from nib in Swift](http://stackoverflow.com/questions/25541786/custom-uitableviewcell-from-nib-in-swift)
* [UIViewの一部だけ角丸にする](http://qiita.com/k-yamada@github/items/eb09485664d7207eb22e)

# デプロイ

* [iOS Certificate の作成 ~ iTunes Connect にアプリ情報を登録](https://akira-watson.com/iphone/apply-application.html)

* 「"システムルート" キーチェーンは変更できません。」の対応方法
 *  [古い証明書から新しい証明書に変えたときに出たエラー](http://obc-fight.blogspot.jp/2013/08/blog-post.html)

# その他

* [Swift での #ifdef DEBUG のやり方](http://qiita.com/qmihara/items/a6b88b74fe64e1e05ca4)
* [■[iPhoneプログラミング]xcconfigファイルでビルド設定を外部ファイル化](http://d.hatena.ne.jp/nakamura001/20101002/1286038020)
* [スプラッシュ画面を消すと、iPhone5s以下で起動した時に上下に黒い帯ができてしまう](http://qiita.com/manji602/items/b0b978324392dbc622ed#%E3%82%B9%E3%83%97%E3%83%A9%E3%83%83%E3%82%B7%E3%83%A5%E7%94%BB%E9%9D%A2%E3%82%92%E6%B6%88%E3%81%99%E3%81%A8iphone5s%E4%BB%A5%E4%B8%8B%E3%81%A7%E8%B5%B7%E5%8B%95%E3%81%97%E3%81%9F%E6%99%82%E3%81%AB%E4%B8%8A%E4%B8%8B%E3%81%AB%E9%BB%92%E3%81%84%E5%B8%AF%E3%81%8C%E3%81%A7%E3%81%8D%E3%81%A6%E3%81%97%E3%81%BE%E3%81%86)
LinuxMintインストール

## ダウンロード

* [Editions for Linux Mint 17.2 "Rafaela" - Linux Mint](http://www.linuxmint.com/release.php?id=25) Xfceを選択。
    * パネルが縦に置いても文字が読める
    * 端末の文字色が変更できる、ウィンドウ半透明の微調整ができる
    * Mateより軽かった
* [xubuntu15.10](http://cdimage.ubuntu.com/xubuntu/daily-live/current/)

## 日本語入力

* 言語＞Input method＞Fcitxを追加
* 一度ログアウトする

![fcitx.png](https://qiita-image-store.s3.amazonaws.com/0/25728/cffc0f5c-095d-8e11-cf3e-ffd3716a9421.png)

## 文字サイズの変更

外観の設定＞フォント＞DPI＞120に変更 (もしくは105)

![font.png](https://qiita-image-store.s3.amazonaws.com/0/25728/2d365226-70f5-761e-8702-5f4efe31c30e.png)

## フォルダを英語に

```bash:
LANG=C xdg-user-dirs-gtk-update
```

## Firefox

* [YouTubeのHTML5対応](https://www.youtube.com/html5?gl=JP)
* ブックマークツールバーの非表示
* [検索エンジンをGoogleに設定](http://www.linuxmint.com/searchengines.php)
* [snippets - firefox便利addons - Qiita](http://qiita.com/tukiyo3/items/60247f2cf784c4fb09b9)

## ミラーサイトの変更

![スクリーンショット_2015-08-03_08-38-49.png](https://qiita-image-store.s3.amazonaws.com/0/25728/d0eadf92-be75-c28d-7b8a-b0bbc816e7d9.png)


## パッケージ追加

```bash:
sudo apt-get install -y \
 rdesktop ssh vim vim-gtk autossh w3m xtightvncviewer \
 pinta
```

### teamviewer10

* [Free TeamViewer Download for Linux](https://www.teamviewer.com/hi/download/linux.aspx)

```bash:
sudo dpkg -i teamviewer_10.0.41499_i386.deb
sudo apt-get install -f -y
sudo dpkg -i teamviewer_10.0.41499_i386.deb
teamviewer
```

* wineで動いている

## SSH鍵エージェントの起動

```bash:
ssh-add
```

## VirtualBox

* [Linux_Downloads – Oracle VM VirtualBox](https://www.virtualbox.org/wiki/Linux_Downloads)
  * [拡張機能](https://www.virtualbox.org/wiki/Downloads)

### Vagrant

* [Download Vagrant - Vagrant](http://www.vagrantup.com/downloads.html)

## Raid 0

* [Raid 0 - Qiita](http://qiita.com/tukiyo3/items/a82df8d6f91fe4ab21f0)

## zfs

* [/homeをzfs利用(RAID1+SSDキャッシュ) - Qiita](http://qiita.com/tukiyo3/items/8b3eaf4fc0602742422a)

## docker

```bash:
sudo apt-get install curl
curl -sSL https://get.docker.com/ | sh
sudo usermod -aG docker `whoami`
```

docker-composeは[releases](https://github.com/docker/compose/releases)を見ながら入れる。

```bash:
curl -L https://github.com/docker/compose/releases/download/1.4.2/docker-compose-`uname -s`-`uname -m` > ~/bin/docker-compose
chmod +x ~/bin/docker-compose
```

## VMWare Tools

* CD-ROMからvmwaretoolsを入れるのはどうやら古いらしい。

```bash:
sudo apt-get install -y open-vm-tools open-vm-tools-desktop
```
GitHubでスターしたレポジトリ一覧からghq getする

## モチベーション
Githubでスターをつけたリポジトリをghqで管理したいけど、スターをつけたものすべてが欲しいわけじゃない。自分がスターをつけたもので時々気になったときにサクッと落として見たいんだ。

## 必要なもの
どれもHomebrewで手に入ります :sparkles: :beer: 

- peco
- ghq
- jq

## ghq-import-starred
### 使い方
```
ghq-import-starred ngtk
```

でIDを指定するか、gitconfigの`github.user`を指定しておけば毎回指定しなくてもOK。

```
git config --global github.user ngtk
ghq-import-starred
```

![ghq-import-starred.gif](https://qiita-image-store.s3.amazonaws.com/0/17373/8673e12b-9c3e-7067-5ef0-d544bd769b04.gif)


### コード

```zsh:ghq-import-starred
#! /bin/zsh


if [ -n "$1" ]; then
  user_id=$1
elif [ -n "$(git config --get github.user)" ]; then
  user_id=$(git config --get github.user)
else
  cat << EOS
usage: ghq-import-start [<user_id>]

Specify user_id or set github.user in gitconfig.
EOS
  exit 1
fi

urls=$(curl -s https://api.github.com/users/$user_id/starred\?per_page\=1000 | jq '.[] | .ssh_url' | awk '{gsub("\"", "");print $0;}')
echo $urls | peco | ghq import

```
メモ：Raspberry Piのウォッチドッグタイマと乱数生成器

# ウォッチドッグタイマ

ウォッチドッグタイマはbcm2708_wdog。

```
$ modinfo bcm2708_wdog
filename:       /lib/modules/4.0.7-v7-local+/kernel/drivers/watchdog/bcm2708_wdog.ko
license:        GPL
alias:          char-major-10-131
alias:          char-major-10-130
description:    Driver for BCM2708 watchdog
author:         Luke Diamand
srcversion:     5EECED7AD08838EF004B7E9
depends:
intree:         Y
vermagic:       4.0.7-v7-local+ SMP preempt mod_unload modversions ARMv7
parm:           heartbeat:Watchdog heartbeat in seconds. (0 < heartbeat < 65536, default=10) (int)
parm:           nowayout:Watchdog cannot be stopped once started (default=0) (int)

$ sudo modprobe bcm2708_wdog

$ cat /proc/misc
130 watchdog
    (略)

$ ls -la /dev/watchdog
crw------- 1 root root 10, 130  7月 27 22:20 /dev/watchdog

$ dmesg
    (略)
[294369.137112] bcm2708 watchdog, heartbeat=10 sec (nowayout=0)
    (略)
```

IOCTL、もしくは/dev/watchdogへの出力で制御する。
デフォルトの設定だと、10秒後にリセットが発生する。定期的に"V"以外の文字を/dev/watchdogに書き込めばリセットは発生しない。

```
$ sudo sh -c "echo > /dev/watchdog"
```

詳細は、Documentation/watchdog/watchdog-api.txtを参照する。

一般的なハードウェアウォッチドッグタイマ同様に、保存されていないファイルやファイルシステムの破損の可能性、リセットした要因がログに残らないこと、などに注意。

# 乱数生成器

乱数生成器はbcm2708_rng。

```
$ modinfo bcm2708_rng
filename:       /lib/modules/4.0.7-v7-local+/kernel/drivers/char/hw_random/bcm2708-rng.ko
license:        GPL and additional rights
description:    BCM2708 H/W Random Number Generator (RNG) driver
srcversion:     2BE4EC25E7ECCFF57DDA65E
depends:
intree:         Y
vermagic:       4.0.7-v7-local+ SMP preempt mod_unload modversions ARMv7

$ sudo modprobe bcm2708_rng

$ cat /proc/misc
    (略)
183 hw_random
    (略)

$ ls -la /dev/hwrng
crw------- 1 root root 10, 183  1月  1  1970 /dev/hwrng

$ dmesg
    (略)
[296373.816399] bcm2708_rng_init=bc3de000
    (略)
```

```
$ sudo sh -c "cat /dev/hwrng | base64 | fold -w 10 | head -n 1"
Bk0bsSQRnk
$ sudo sh -c "cat /dev/hwrng | base64 | fold -w 10 | head -n 1"
ibemhzeD/m
```

エントロピーが集まるまで時間がかかるのか、若干生成まで遅いっぽい。
jQueryがないサイトでChrome Developer ToolsからjQueryを使う方法

Chrome Developer ToolsのConsoleに以下のコードをコピペするだけ

```js
if (!window.jQuery) {
  document.body.appendChild((function(){
    var s = document.createElement("script");
    s.src = '//ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js';
    return s;
  })());
}
```

ブックマークレットにしておくと良いかも
cliからWebAPIでSQLを整形(jq, curl)

## 参考

* [SQL FaaS · sqlparser/sql-pretty-printer Wiki](https://github.com/sqlparser/sql-pretty-printer/wiki/SQL-FaaS#2-api)
* [コマンドラインからSQLを整形するツールを作った - Qiita](http://qiita.com/aosho235/items/54dafcd360e9ffd3443d)

## 準備

```bash:準備
sudo apt-get install -y jq
```

```bash:sqlformat.sh
#!/bin/sh
set -eu

# 以下のAPIをcurlで利用する。
# https://github.com/sqlparser/sql-pretty-printer/wiki/SQL-FaaS#2-api
TMP='sqlformat.tmp'
URL="http://www.gudusoft.com/format.php"

echo "rqst_input_sql=" > $TMP
cat >> $TMP

curl -s -X POST -d @${TMP} ${URL} --header "Content-Type:application/x-www-form-urlencoded" \
| jq -r ".rspn_formatted_sql"

rm -f $TMP
```

* `["rspn_formatted"]`という配列で結果が帰ってくる
* `jq -r`で改行コードなどをそのまま利用する。
* urlencodeのため [nkf -WwMQ | tr = %](http://blue-red.ddo.jp/~ao/wiki/wiki.cgi?page=%A5%B3%A5%DE%A5%F3%A5%C9%A5%E9%A5%A4%A5%F3%A4%C7URL%A5%A8%A5%F3%A5%B3%A1%BC%A5%C9%A1%A2%A5%C7%A5%B3%A1%BC%A5%C9)しないといけないかも

## 使い方

```bash:
$ echo "select a, b from t1 left join t2 on c = d where e < f and g > h" | ./sqlformat.sh 
SELECT a,
       b
FROM   T1
       LEFT JOIN T2
              ON c = d
WHERE  e < f AND
       g > h
```
Macでnodejsのバージョン管理をする

node公式サイトからのインストールは簡単で便利ですが、ちょっとバージョンを切り替えたいときに不便です。
nodeでもRubyのrbenvのようにnodebrewを使ってバージョン管理することができます。

Macであればhomebrewに入っているので簡単にインストールできます。

## nodebrewをインストール

```bash
$ brew install nodebrew
```

## インストールできるバージョンの確認
iojsもインストールできます

```bash
$ nodebrew ls-remote
・・・
v0.12.0   v0.12.1   v0.12.2   v0.12.3   v0.12.4   v0.12.5   v0.12.6   v0.12.7
io@v1.0.0 io@v1.0.1 io@v1.0.2 io@v1.0.3 io@v1.0.4
・・・
```

## 最新バージョンのnodeをインストール

```
$ nodebrew install stable
$ nodebrew list
v0.12.7
```

## .bash_profileにパスを追記
追記したら**source ~/.bash_profile**で読み込みなおしてください。

```bash:.bash_profile
# nodebrew
export PATH=$HOME/.nodebrew/current/bin:$PATH
```

## バージョン切り替え
```
$ nodebrew use v0.12.7
```

## バージョン確認
```
$ node -v
v0.12.7
```
技術英語 > When I was given a chance, ...

ふと思い出したもの。
Start trek voyagerでトム・パリスが言っていたような気がするが、エピソードがどれだったか思い出せない。
最高速ワープスピードのエピソードだったような。

> When I was given a chance, ...

<hr>
chanceで思い出したのは

> Once in a lifetime opportunity (一生に一回の機会)

多分、2000年ごろに読んでいたEnglish Journalで見た。

<hr>
opportunity関連で思い出したのは

> Opportunity seldom knocks twice. (意訳：二度目の機会はほとんどないよ）

<hr>
Dart での Chrome App の 開発環境 としての Eclipse

DartEditorの開発が止まったので、Eclipseに移行しました。選択肢として WebStormを使うことも検討したのですが、 WebStormでのDart製のChromeアプリの開発が面倒だったので、Eclipseを利用することにしました。

- 標準でChrome アプリ用のテンプレートが含まれていない
- 標準でmanifest.json を右クリックからの動作確認ができない

Eclipseならば、簡単につかえます。

　
## インストールが不便

しかし、素直にEclipseのインストールが上手できなくて、結構苦労しました。Dartiumを認識させ方が不明。Eclipseが起動しなくなるとか。

軽くEclipseでの環境の設定方法について解説したいと思います。
　

### EclipseをInstallしよう

eclipse を手に入れましょう。僕はJava Developers版を利用しました。を[http://www.eclipse.org/downloads/packages/eclipse-ide-java-developers/marsr](http://www.eclipse.org/downloads/packages/eclipse-ide-java-developers/marsr)

選んだ理由は、余計なものが入っていなさそうだから。
　

### Dart plugin をインストールしよう
1. Menu:Help --> Install New software..
2. addボタンを押す。Add Repositoryダイアログが表示される。
3. Nameをdartrepo. Locationを["http://www.dartlang.org/eclipse/update/channels/stable/"](http://www.dartlang.org/eclipse/update/channels/stable/)にして、OKボタンを押す。
4. Work with をdaerreoにする。自動でそうなるはず。
5, 表示されたものを選択して、Nextボタン等をおして、後は指示に従って進めてください。


### Dart SDK をインストール

Dart SDK はプラグインからダウンロードできます。
1. Menu:Windows --> Preferences 。Preferencesダイアログが表示される。
2. Dart-> SDK
3. Dart SDK のところの、Downloadボタンを押してください

※ Preference Dialogに、 "Install at C:.asfas/asdfas/asdf/dart-sdk"といった感じでパスが表示されています。ここにインストールされます。
　

### Dariumをインストールする
Dartiumをインストールします。[https://www.dartlang.org/tools/dartium/](https://www.dartlang.org/tools/dartium/) で手に入ります。zip圧縮されているので、解凍してください、
Preference Dialogに表示されている、"Install a c://aaa/aa/chromium"で指定されたフォルダーのの直下に、chrome.exeがある状態にしてください。



### PS

これで、完了です。今回試した環境は以下の通り
Microsoft windows surface pro2 (8G memory, windows8) 
　
DartEditorはインストールすれば直ぐに使えてお勧めだったんだけど、開発が停止してしまった。
Dart Teamが推しているWeb Stormは有料だし、デフォルトでChrome App開発機能がない。
僕は、Eclipseが良いと思っている。
　

-------
Kyorohiro work
[kyorohiro work](http://kyorohiro.strikingly.com)
CobblerのPowerアクションのコマンドで特定の標準入力を渡したいとき


cobbler2.4では、指定方法がわかりづらかったのでメモしておく。


Cobblerは、対象サーバ（Cobblerではsystemと呼ぶ）の電源操作もサポートしている。

また、どのコマンドを使用するかは、systemを登録するときに指定することができる。どのコマンドが使用可能なのかは、下記の２つのパスのfence_という接頭辞のものが使える。(システム登録時はfence_<type>のtypeの部分だけ指定する)

 - /sbin/fence_command_type
 - /usr/sbin/fence_command_type



で、今回の本題は、この先にあって、ここで指定したコマンド実行時に特定の標準入力を渡したいというパターンがある。

例えば、fence_ipmilanコマンドでipmi2.0を使用したいとき標準入力に、ipaddr情報など以外に、 *lanplus* 文字列を渡す必要がある

> 念のため書いておくと、cobblerではipアドレス情報やパスワード情報はコマンド引数として渡すのではなく、標準入力で渡している


んじゃ、もとの話題に戻ってその標準入力の値をカスタマイズしたいとき、cobblerではどうやって定義したらいいのか？を調べた。

どうやら、powerアクションのコマンドの引数は、templateで定義することができて、下記のパスのtemplateが参照される

- /etc/cobbler/power/fence_command_type

command_typeの部分は、指定したcommand_typeのものに置き換えて考えてください。なので、fence_ipmilanコマンド用の引数なら /etc/cobbler/power/fecne_ipmilan が参照される。

実際に例として、ipmi2.0に対応させたときのtemplateファイルを下記に示す。

```/etc/cobbler/power/fence_ipmilan
action=$power_mode
ipaddr=$power_address
login=$power_user
passwd=$power_pass
lanplus
```

cobbler2.4では、インストール後に、/etc/cobbler/power/power_command_typeというtemplateファイルが入っているが、実はそれは参照されないので注意。

また、標準入力をカスタマイズするtemplateファイルのサンプルがインストールされないので注意。<=なんでだろう
Sphinx ドキュメントをGulpでwatchして自動更新するよ〜

Sphinxいじり始めて、なんだか凄ーく面倒くさいことに遭遇・・・

Sphinxはドキュメント生成してくれて凄いんだけど、
修正＞Make＞ブラウザで確認 って面倒くさくね？？？

ってことで、修正中はGulpで監視して、変更掛かったらMakeさせるという、僕のMacには酷で可哀想な感じですが仕事して貰おうと思います。

## セットアップ
とりあえず、NodeJSとGulpJSは使えるようにしておいて下さい。※ ここでは割愛します。
その後、ドキュメントがあるカレントディレクトリに移動します。

```
$ npm init # いろいろ聞かれますが、全部enterでOKですよ。
$ npm install gulp gulp-util --save-dev 
$ npm install --save-dev gulp-shell
```

## Gulpタスク

gulpfile.jsは次の通り。

```js
var gulp  = require('gulp')
var shell = require('gulp-shell')

gulp.task('make', shell.task([
  'make html'
]))

gulp.task('default', function(){
    gulp.watch('./**/*.rst', ['make']);
});

```

## 実行
```
$ gulp
```

あとは、ひたすらドキュメントを書くべし・・・

以上、簡単ですが、ご参考まで。

此方も合わせてどうぞ。
[Mac OS X でShpinx（Python製ドキュメンテーションビルダー） - Qiita](http://qiita.com/madaran0805/items/ded80b3d6b4a3abb9b6d)
くだらないものまとめ

創造の枠を広げるような、素晴らしくくだらないwebの世界をまとめていこうと思います。

#javascript

##[adultcatfinder](http://adultcatfinder.com/)
猫がチャットしてくる

##[fartscroll.js](http://theonion.github.io/fartscroll.js/)
スクロールでおなら

##[Raptorize](http://zurb.com/playground/jquery-raptorize)
恐竜が鳴いて走る
(開いた画面の「Make a Raptor Pwn My Screen」を押すと動きがわかります。)

##[Snowstorm](http://www.schillmania.com/projects/snowstorm/#customizing)
雪を降らせる。
[このように](http://nendeb.com/89)書き換える事でなんでも降らせられる模様。

##[藤原竜也変換ツールJS版](http://jsdo.it/tonkotsuboy/2uNT)
ふ゛じ゛わ゛ら゛た゛つ゛や゛に゛な゛る゛や゛つ゛だ゛よ゛お゛お゛お゛

##[SIerQuest](http://sifue.github.io/SIerQuest/)
RPGツクールMV

#画像系
##[Placebeyonce](http://placebeyonce.com/)
**誰が子猫の画像なんて欲しがるんだ？ビヨンセがいるのに**
ってキャッチコピーに胸アツ

#サイト
##エイプリルフール
###2015
[gigazineまとめ](http://gigazine.net/news/20150401-aprilfool-matome/)

[google](http://googlesystem.blogspot.jp/2015/03/google-april-fools-day-2015.html)

[カヤックまとめ?](http://www.kayac.com/company/event/mission/2015/matome/)

[ガジェット通信](http://getnews.jp/archives/892498)

[エフトラUFO](https://f-tra.jp/aprilfool/)
完成してます


###2014
[naverまとめ](http://matome.naver.jp/odai/2139631370794839201)


#その他
##MTV jackass
このレベルまでWebの世界が行ければいいな。
大量のExcelやWordファイルを串刺し検索する世界最強の方法

# 世界最強の串刺し検索

種を明かせば何ということはない。ExcelファイルやWordファイルを一つづつメール添付してGmailに送信し、Gmailで検索する。それだけ。

ファイル送信を自動化する方法は各自考えてください。

- 検索が恐ろしく速い。ローカルでインデックスを作るような串刺し検索アプリケーションよりも速い。
- Excelで見るよりも表示がはるかに見やすい。
- 試してはいないけど、他のさまざまなファイルでも同じようにできるはず。HTMLやテキストファイルは当然できるだろうし、これでもしPDFもできてたら凄い。

# コツ

## 串刺し検索専用のGmailアカウントを作る。

普段使っているGmailでやると、関係ないものがいっぱい引っかかってやりにくいので、串刺し検索専用にGmailアカウントを作る。

## 1件のメールには1ファイルだけ添付すること

横着して1件のメールにたくさん貼り付けても、探しにくくなるだけ。1メール1ファイルにしておくこと。

メールのSubjectも自分にとってわかりやすいものを付けておく。ファイル名をそのまま使うというのが無難か。

## 1ファイル1シートにする

XLSファイルにシートを複数含めないこと。そういうファイルをそもそも作らないようにする。

実のところたまたまそういうファイルがないので試してはいないのだけど、XLSファイルにシートが複数含まれている場合にどれだけちゃんと検索できるかわからない。

そもそもXLSファイルにシートをいくつも作るとろくなことがないので、よい子の皆様はやらないように。


# あとがき

それにしてもGmailの検索機能のなんたる凄さ。OutlookやExcelには何年経ってもできそうにない。ましてや、Excelマクロなんぞでえっちらおっちら串刺し検索など、もうアホらしくてできない。
VCS+BTS+CIサービス

privateリポジトリを持ちつつ、Redmineによるチケット駆動開発とCI環境の整備にかかる費用などのまとめメモ

## GitHub

Personal plan のmicroで　7ドル/月　でリポジトリは5個まで。

https://github.com/pricing

![スクリーンショット 2015-07-31 22.58.01.png](https://qiita-image-store.s3.amazonaws.com/0/9880/1139fd60-d954-88cb-a78c-8b6528551ff4.png)

## BitBucket

ユーザ数に応じて課金される仕組み。フリーなら、コミッターは5人まで。そのかわり、privateリポジトリを無制限につくれる。フリーのCIとの組み合わせが少ないのが難か。

https://bitbucket.org/plans

![スクリーンショット 2015-07-31 23.14.19.png](https://qiita-image-store.s3.amazonaws.com/0/9880/97d14d8b-c592-c17a-2dff-a38c90ef972b.png)


### 比較まとめサイト

http://d.hatena.ne.jp/thinca/20150112/1421054945

http://www.find-job.net/startup/5-git-hosting

## Bitnami

https://bitnami.com/cloud-cost-calculator

下記くらいで、20ドル弱/月

* T2 small memory 2GB
* Storage 30GB 

![スクリーンショット 2015-07-31 23.27.35.png](https://qiita-image-store.s3.amazonaws.com/0/9880/05ce2bba-c46f-2961-c154-e91384b0ec17.png)


### Redmine

https://bitnami.com/stack/redmine

DIYをするには、インスタンスに入って色々いじれた方が便利

## JIRA

redmineからの移行ツールがある
http://japan.blogs.atlassian.com/2012/12/jira-redmine-importer/
http://www.slideshare.net/ricksoftKK/redminetracatlassian-jira

10ユーザまでなら10ドル/月　(JIRAのみ、アジャイル機能なし、clound)

GitHubとの連携あり
http://re-workstyle.com/articles/github-jira-integration/

サーバの管理したくなく、ひとつのプロジェクトからはじめるならこちら。

## CircleCI

最大ビルド同時ビルド数、同時ビルド数がともに1ならfree。リポジトリ、ビルド数、ユーザ数は無制限。
https://circleci.com/pricing

あとはコンテナをひとつ増やすごとに+50ドル/月

まずはじめるにはうってつけ。プロジェクトの数が少なく、ビルドする頻度がすくないならfreeのままでもしばらくやっていけそう。

drone.ioとは、有料になるとほぼ同条件
https://drone.io/pricing

shippableは有料の場合は、こちらの方が条件よさそう。
https://app.shippable.com/pricing.html
Ruby で Perl 的な何段にも深い Hash をクールに実現する

Ruby を使い始めてから、それまで使っていた Perl と比較して、この機能があったらとずっと思っていたのが、深い連想配列(Hash) が簡単につくれる機能でした。

Perl では次のような物が動作します。

```pl:recursive_hash.pl
my $h = {};
$h->{1}{2}{3}{4}{5} = 1;
```

これを Ruby でクールに実現するには、以下のように記述します。

```rb:recursive_hash.rb
rh_proc = lambda { Hash.new { |h, k| h[k] = rh_proc.call } }
h = rh_proc.call
h[1][2][3][4][5] = 1
```

上記は以下を参考にさせていただきました。
[Rubyで再帰可能なhash（recursive hash）を作る](http://yoku.or-hell.com/%E8%A6%9A%E6%9B%B8%E3%80%80ruby/ruby%E3%81%A7%E5%86%8D%E5%B8%B0%E5%8F%AF%E8%83%BD%E3%81%AAhash%EF%BC%88recursive%20h)

オリジナルはメソッドを別に定義して、名前空間を汚していたので、
lambda 式を使うようにしました。
js.orgの使い方

[Mithrilのウェブサイトの日本語訳](http://mithril-ja.js.org/)を公開しました。Mithrilおもしろいんでぜひ遊んでみてください。

![スクリーンショット 2015-07-31 22.40.36.png](https://qiita-image-store.s3.amazonaws.com/0/6105/ed6c98ad-560b-fcce-8f73-0a4f57eb4757.png)

今日は、Mithrilの日本語ドキュメントを置いている、js.orgドメインの登録の仕方のお話です。JavaScript関連のモジュールを公開している人は使ってみるとなんかカッコいいURLが取れます。

<a href="http://js.org" target="_blank" title="JS.ORG | JavaScript Community">
<img src="http://logo.js.org/dark_horz.png" width="102" alt="JS.ORG Logo"/></a>

ドキュメントの準備
=====================

まずはgithub pagesにウェブサイトを乗っけます。github pagesについてはもういろいろ紹介があるので特に説明はしません。今回のドキュメントは、以下のURLで翻訳をしています。

* https://github.com/shibukawa/mithril-ja

翻訳にあたっては、[http://www.transifex.com/](Transifex)とかを使っても良かったんですが、今回は一度じっくり使い込んでみようと思っていた[OmegaT](http://www.omegat.org/ja/omegat.html)を使ってみました。OmegaTをダウンロード後に、このリポジトリをcloneして、OmegaTでディレクトリを指定して開きます。

今回はHTMLファイルを直接ソース(``source``)に入れています。一度翻訳した文が似ている参考訳文として出てくるので、リファレンスとかを訳すのがとても簡単です。一通り翻訳したら、``ファイル`` - ``訳文ファイルを生成``を選択すると、訳語が置き換わったHTMLファイルが``target``ディレクトリに生成されます。

![スクリーンショット 2015-07-31 22.50.41.png](https://qiita-image-store.s3.amazonaws.com/0/6105/bca6356d-1291-c0e6-9d89-e7f0a39eeca7.png)

このプロジェクト全体をgitに入れて管理していますが、``gh-pages``ブランチに入れたいのはこの``target``ディレクトリだけです。``target/index.html``が``gh-pages``ブランチのルートの``index.html``になるようにします。以下の``subtree``コマンドを使うと、ディレクトリの一部を別のブランチとして切り出すことができます。

```bash
$ git subtree -P target -b gh-pages
```

あとはこのリポジトリをアクティブにして、githubにpushしておきます。

```bash
$ git checkout gh-pages
$ git push origin gh-pages
```

今回はOmegaTで翻訳したHTMLを投入しましたが、公式にも書いてあるJekyllを使った方法を使ってもいいですし、HTMLを自分で用意しても問題ありません。なおアンダースコアを含むファイルやディレクトリがあると、Jekyllが悪さするので、gh-pagesブランチのルートに ``.nojekyll``という名前のファイルを置いておきます。

js.orgへの登録
=================

![スクリーンショット 2015-07-31 23.02.36.png](https://qiita-image-store.s3.amazonaws.com/0/6105/a6640e9a-0c27-eea8-d52b-3a032e64e521.png)

これまでの説明で、github pagesができました。mithril-jaの実体は https://shibukawa.github.io/mithril-ja/ というところにあるドキュメントです。まずはここまで確実にやりきってください。

できたウェブサイトを*.js.orgというURLでアクセスできるようにします。[規約がここに](http://dns.js.org/terms.html)あるので、軽く流し読みしてみてください。まあよくある免責事項とかです。

まずはURLを決めます。 ``http://hyanore.github.io/fuegaso`` というURLだった場合、 ``http://hyanore.js.org`` というURLにすることもできますし、 ``http://fuegaso.js.org`` というURLにすることもできます。

URLが決まったら、 ``CNAME`` という名前のファイルをgh-pagesブランチのルートに追加します。ファイルには一行、登録したいURLを入れておきます。mithril-ja.js.orgの[``CNAME``](https://github.com/shibukawa/mithril-ja/blob/gh-pages/CNAME
)ファイルは以下のとおりです。

```text:CNAME
mithril-ja.js.org
```

忘れずにgithubにpushしておきます。

つぎに、[dns.js.org](https://github.com/js-org/dns.js.org/tree/master)のリポジトリにpull requestを送ります。

[cname-active.js](https://github.com/js-org/dns.js.org/blob/master/cnames_active.js)を開いて、登録したいページの情報をJSONに追加します。

mithril-ja.js.orgの登録時のpull requestは[こんな感じ](https://github.com/js-org/dns.js.org/pull/379/files)です。アルファベット順にならんでますので、登録したい名前をキーとして挿入して、値にリダイレクト先のURLを入れておきます。

```diff
     , "mithril": "lhorie.github.io/mithril"
+    , "mithril-ja": "shibukawa.github.io/mithril-ja"
     , "mmcq": "nikola.github.io/MMCQ"
```

わざわざcloneしなくても、ブラウザ上で鉛筆ボタンを押して、ブラウザ上で行を追加してそのままpull requestが出せます。あとは、indusさん(ドイツ在住)が確認してマージしてくれれば、晴れてサブドメインが開通します。

めでたしめでたし。
Amazon SQSを利用する前に押さえておくべき7つのポイント

AWS SQSはフルマネージドなジョブキューのサービスです。
利用する際にはいくつか注意点があるので要点をまとめてみました。

## 1. 順番は保証されない
* キューに送信した順番で受信されるとは限らない
* 順番を確保したい時はメッセージ内容にシーケンス番号やタイムスタンプを含めて、自前で実装する必要がある

## 2. 同じメッセージが複数回配信される場合がある
* 同じ処理を行いたくない場合は、メッセージを受信した時に、同じメッセージIDの場合は処理をスキップする等の処理が必要

## 3. メッセージの削除には`ReceiptHandle`を使う
* メッセージの受信時に取得できる
* メッセージの削除・`Visibility timeout`の変更に必要
* メッセージを受信したエビデンスにもなる
* ただし、同じメッセージでも複数回受信した場合は`ReceiptHandle`は別になるため注意

## 4. `Visibility timeout`について
* メッセージが1回受信された後、他のクライアントから同じメッセージを受信不可にするための時間(デフォルトは30秒)
* この設定した時間よりも、処理に時間がかかると同じメッセージが再度キューイングされ複数回受信されることになるので処理に時間がかかる場合は多めに設定する

## 5. メッセージの削除について
* SQSでは一度キューイングしたメッセージはユーザーが明示的に削除するか、`Message Retention Period`(デフォルト4日間)を経過しないと削除されない
* つまり、処理完了後に受信したメッセージを削除する必要がある
* 処理中にエラーが発生した場合は削除処理が行われず、同じメッセージが`Message Retention Period`を超えるまで何度もキューイングされてしまうため対策が必要

## 6. `Dead Letter Queues`について
* 処理が正常に行われずに、キューにメッセージがいつまでも残ってしまう問題を解決するための機能
* 設定した回数以上にメッセージが受信された場合、この`Dead Letter Queues`にメッセージが移動される
 
## 7. リクエスト数の節約のためのTips
* SQSはリクエスト数に対する課金なのでリクエスト数の削減対策は重要
* ロングポーリングを利用する(これは必須。劇的にリクエスト数が改善されます)
* ロングポーリングは管理画面から設定できるので簡単。
* 送信側はバッチリクエストを利用すると良い(`SendMessageBatch`)
* 受信側も複数メッセージを一度に受信すると良い(`MaxNumberOfMessages`)
* 1回10メッセージまで受信できる
* ただし10メッセージを指定しても受信数はそれ以下になることもある
unity > cube落ちゲー > LookAt() / RaycastHit / Gravity

LookAt(), RaycastHitを使って、ちょっとした落ち物ゲーを作ってみた。

```txt:動作確認
Unity 5.1.2 on MacOS X
```

## 準備
1. Planeを作る
  - Position Y: -0.75 にする
2. Cubeを作る
  - Position Y: 20 にする
  - Rigidbodyを追加する (Drag:2.77, Use Gravity:チェック)

## Main Cameraスクリプト
Main Cameraのスクリプトは以下 (Followと命名)。

```csharp
using UnityEngine;
using System.Collections;

public class Follow : MonoBehaviour {

	public Transform myTransform;

	void Start () {
	
	}
	
	void Update () {
		transform.LookAt (myTransform);
	}
}
```

Main Camera のインスペクタに出てくる My TransformにCubeを関連付ける。

## Cubeのスクリプト

Cubeのスクリプトは以下 (CubeHitと命名)。

```csharp
using UnityEngine;
using System.Collections;

public class CubeHit : MonoBehaviour {

	private int score = 0;
	private float init_y;
	private bool bfStop = false;

	void Start () {
		init_y = transform.position.y;
	}

	void OnGUI() {
		Rect rect1 = new Rect (10, 10, 100, 30);
		GUI.TextField (rect1, score.ToString ());
	}

	void OnCollisionEnter(Collision collision) {
		bfStop = true;
	}

	void Update () {
		if (bfStop) {
			return;
		}

		Ray ray = Camera.main.ScreenPointToRay (Input.mousePosition);
		RaycastHit hit;

		Physics.Raycast (ray, out hit);

		if (hit.collider.gameObject == gameObject) {
			Vector3 vec = transform.position;
			vec.y += 0.5f;
			transform.position = vec;

			score += (int)(init_y - vec.y);
		}
	}
}
```

## 遊び方

開始すると上部からCubeが落ちてくるので、適当なタイミングでマウスカーソルをCubeに当てる。そうすると、その地点のスコアが得られ、Cubeが上に押し上げられる。

PlaneすれすれにCubeがある時がスコアが高くなるので、ぎりぎりまで待ってからマウスカーソルをあわせる方が高得点が狙える。

CubeがPlaneに接触するとゲーム終了。

あとは、hitした時にdragを減らしてcubeの落下速度を速めるなり、制限時間を設けるなりするとゲーム性が高まるかもしれない。
Yahoo!リバースジオコーダAPI使ってみた



Yahoo!リバースジオコーダAPIは、緯度・経度で指定された場所の住所検索結果を返してくれるWebAPI

http://developer.yahoo.co.jp/webapi/map/openlocalplatform/v1/reversegeocoder.html
# APIを使うまで
Yahoo IDを持っているとする

次のURLからアプリーケーション登録をして,アプリーケーションIDを発行してもらう
https://e.developer.yahoo.co.jp/register
# 実際に使ってみる
### サンプルコード

アプリケーションIDを別ファイルでdefineして使いたいので,以下のようなアプリケーションID設定のためのphpファイルを作る

```
<?php
define("appid", "自分のアプリケーションID");
?>
```

実際に,リバースジオコーダを使って緯度経度から,住所に変換しているphpファイル

```
<?php

require_once("appid.php");

$lat = 35.68381981;//緯度
$lon = 139.77456498;//経度

$uri = "http://reverse.search.olp.yahooapis.jp/OpenLocalPlatform/V1/reverseGeoCoder"
    . "?lat=" . $lat . "&lon=" . $lon . "&appid=" . appid . "&output=json";

$curl = curl_init($uri);
curl_setopt($curl,CURLOPT_RETURNTRANSFER,true);
$response = curl_exec($curl);
curl_close($curl);

$res = json_decode($response,true);

$locationName = $res[Feature][0][Property][Address];

print $locationName."\n";
?>
```

### 実行結果

```
$php lonlatToStreetAdress.php
東京都中央区日本橋１丁目
```

# メモ
## curl
Httpで情報を取得する際に使用する
http://php.net/manual/ja/function.curl-init.php
上のサンプルコードでは

```
$uri = "http://reverse.search.olp.yahooapis.jp/OpenLocalPlatform/V1/reverseGeoCoder"
    . "?lat=" . $lat . "&lon=" . $lon . "&appid=" . appid . "&output=json";

$curl = curl_init($uri);
curl_setopt($curl,CURLOPT_RETURNTRANSFER,true);
$response = curl_exec($curl);
curl_close($curl);
```
で使っている

```
curl_setopt($curl,CURLOPT_RETURNTRANSFER,true);
```
は転送用のオプション
http://php.net/manual/ja/function.curl-setopt.php
'CURLOPT_RETURNTRANSFER'は返り値を文字列として返してくれる
第３引数は,第２引数のオプションをtureにするかfalseにするかを指定する

## json_decode
json文字列をデコードする
http://php.net/manual/ja/function.json-decode.php

```
$res = json_decode($response,true);
```
第２引数をTRUEにすると,返り値が連想配列となる
MongoDB - bashスクリプトから簡単にMongoシェルを操作する方法

bashスクリプトでmongoシェルを実行させたくていろいろ方法を模索。
javascriptファイルをリダイレクトで読み込ませるとかの方法もあるようだけど
「eval」オプションを使ってprintjson()関数の中に実行したいmongoシェルコマンドを書いてあげるのが個人的にはスマートっぽいのメモ

### コマンドサンプル
```
$ mongo --eval "printjson(db.servserStatus())"
```
AWS-VPC - EC2インスタンスをスケールアップするとsarファイルが破損してしまう件

EC2インスタンスをスケールアップするとなぜかsarファイルを読み込もうとすると
「ファイル形式が正しくありません」的なメッセージが出力されて
それ以降はスケールアップしたときに一旦sarファイルをリセットする運用に。
最近原因が判明したのでメモ。

### 原因
* コア数が変わるとsarファイルが壊れる
Unity5でローカル通知 (iOS)

Unity4では動いたのにUnity5になってからビルドでエラーをはいたので修正したメモ。

# plug-in

まず一番つまずいたのがplug-inの最初の一行目
Unity4までは　*#import "iPhone_target_Prefix.pch"*　
Unity5からは　*#import "Prefix.pch"*
に変更された.

```lang:LocalNotificationController.mm
#import "Prefix.pch"
#import "UnityAppController.h"

@interface LocalNotificationController : UnityAppController
+(void)load;
@end

@implementation LocalNotificationController
+(void)load
{
    extern const char* AppControllerClassName;
    AppControllerClassName = "LocalNotificationController";
}

// アプリが起動時実行
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions
{
    
    [super application:application didFinishLaunchingWithOptions:launchOptions];
    float version = [[[UIDevice currentDevice] systemVersion] floatValue];
    if (version >= 8.0)
    {
        if ([application respondsToSelector:@selector(registerUserNotificationSettings:)]) {
            UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert|UIUserNotificationTypeSound categories:nil];
            [application registerUserNotificationSettings:settings];
        }
    }
    return YES;
}

@end
```

# 実装
Unity5よりネームスペース"UnityEngine.iOS"を記述する必要がでてきた.

```lang:LocalNotifyScript.cs
using UnityEngine;
using System.Collections;

public class LocalNotifyScript : MonoBehaviour {


   void Start ()
    {
        addLocalPush ();
    }

    void addLocalPush ()
    {

        Debug.Log ("ローカル通知が走ります");
        #if UNITY_EDITOR
        #elif UNITY_ANDROID
        #else
        addLocalPushiOS();
        #endif
    }

    void addLocalPushiOS()
    {
        UnityEngine.iOS.LocalNotification l = new UnityEngine.iOS.LocalNotification();
        l.applicationIconBadgeNumber = 1;
        l.fireDate = System.DateTime.Now.AddSeconds(10);
        l.alertBody = "通知テストだよ！";
        UnityEngine.iOS.NotificationServices.ScheduleLocalNotification(l);
    }

}
@end
```

以上修正でビルド出来るようになった.


# 参考サイト

[Unity ローカルプッシュ通知処理を書いてみた iOS編](http://raharu0425.hatenablog.com/entry/2015/02/18/165412)
MongoDB - Mongoシェルで使うことのできるdbコマンド一覧を簡単に習得する方法

Mongoシェルでできる操作を調べるたびにいろいろ検索していたのでメモ

### dbコマンド一覧取得方法
```
$ mongo
> db.help()
```

### dbコマンド一覧取得結果
※mongodb3.0.5の実行結果

```
DB methods:
	db.adminCommand(nameOrDocument) - switches to 'admin' db, and runs command [ just calls db.runCommand(...) ]
	db.auth(username, password)
	db.cloneDatabase(fromhost)
	db.commandHelp(name) returns the help for the command
	db.copyDatabase(fromdb, todb, fromhost)
	db.createCollection(name, { size : ..., capped : ..., max : ... } )
	db.createUser(userDocument)
	db.currentOp() displays currently executing operations in the db
	db.dropDatabase()
	db.eval() - deprecated
	db.fsyncLock() flush data to disk and lock server for backups
	db.fsyncUnlock() unlocks server following a db.fsyncLock()
	db.getCollection(cname) same as db['cname'] or db.cname
	db.getCollectionInfos()
	db.getCollectionNames()
	db.getLastError() - just returns the err msg string
	db.getLastErrorObj() - return full status object
	db.getLogComponents()
	db.getMongo() get the server connection object
	db.getMongo().setSlaveOk() allow queries on a replication slave server
	db.getName()
	db.getPrevError()
	db.getProfilingLevel() - deprecated
	db.getProfilingStatus() - returns if profiling is on and slow threshold
	db.getReplicationInfo()
	db.getSiblingDB(name) get the db at the same server as this one
	db.getWriteConcern() - returns the write concern used for any operations on this db, inherited from server object if set
	db.hostInfo() get details about the server's host
	db.isMaster() check replica primary status
	db.killOp(opid) kills the current operation in the db
	db.listCommands() lists all the db commands
	db.loadServerScripts() loads all the scripts in db.system.js
	db.logout()
	db.printCollectionStats()
	db.printReplicationInfo()
	db.printShardingStatus()
	db.printSlaveReplicationInfo()
	db.dropUser(username)
	db.repairDatabase()
	db.resetError()
	db.runCommand(cmdObj) run a database command.  if cmdObj is a string, turns it into { cmdObj : 1 }
	db.serverStatus()
	db.setLogLevel(level,<component>)
	db.setProfilingLevel(level,<slowms>) 0=off 1=slow 2=all
	db.setWriteConcern( <write concern doc> ) - sets the write concern for writes to the db
	db.unsetWriteConcern( <write concern doc> ) - unsets the write concern for writes to the db
	db.setVerboseShell(flag) display extra information in shell output
	db.shutdownServer()
	db.stats()
```
react-railsでhello world!!


公式[A JavaScript library for building user interfaces | React](https://facebook.github.io/react/)にある最初のhello world サンプルをrails上で動かすまでの手順。


まずはプロジェクトを作成。

```bash
rails new helloworld
```

gemにreact-railsを入れます。rails上でreactが使えるようになったり便利なヘルパーがあったりします。
```ruby
$ vi Gemfile
```

```ruby
# ...省略
gem 'react-rails', '~> 1.0' # 追加する
```

bundle install.

```bash
bundle install --path vendor/bundle/
```

reactを使うためのセットアップコマンド。必要なディレクトリなどが生成されます。

```bash
rails g react:install
```

つぎはcomponentを追加。このコマンドでなくても追加できます。

```bash
rails g react:component HelloWorld
```

中身を開いて、renderメソッドに描画する内容を書きます。今回はhello worldのみ。

```
$ vi app/assets/javascripts/components/HelloWorld.js.jsx
```

```jsx
var HelloWorld = React.createClass({
  render: function() {
    return (
      <div>Hello World!!</div>
    )
  }
});
```

viewを呼ぶだけのcontrollerも作りましょう。

```bash
rails g controller home index
```

routes.rbにも追加。
```ruby
$ vi config/routes.rb
```

```ruby
root 'home#index'
```

最後に、`react_component`を読んで、viewからreactのコンポーネントを呼びます。

```ruby
$ vi app/views/home/index.html.erb
```
```ruby
<%= react_component('HelloWorld') %>
```

これで完成。
あとはbrowserから確認するだけです。
```bash
rails s
```

```bash
open http://localhost:3000
```

done.


続編もあるので興味あればご覧ください。
[JavaScript - react-railsでhello world!!をES6化 - Qiita](http://qiita.com/takayukishmz@github/items/a223e8accc78c388cbc2)
unity > LookAt() > カメラが物体を追っかける

youtubeのチュートリアルで見た。

Main Cameraのスクリプトに以下のUpdate()を実装するだけ。

```csharp
public Transform myTransform;

void Update(){
    transform.LookAt(myTransform);
}
```

myTransformはインスペクタ上で追っかけたい物体を関連づける。
rails_adminで1分でデータベースの中身を閲覧、編集するGUIをつくる

rails_adminを導入するとrailsで生成したデータベースの内容の閲覧、編集が可能になります。
rails上で動作するのでデータベースの種類に関係なく使うことができるので利用範囲は大きいと思います。

# 導入方法

すでに作成済みのrailsApplicationであることが前提です。

今回試したバージョン

rails_admin v0.6.8 
rails 4.2系

## Gemfileの追加

productionではつかなわいのでdevelopment,testを対象に
gemを追加

```
group :development, :test do  
  gem 'rails_admin'
```

## bundle installを実行

```
bundle install
```

## 管理ツールを生成

```
$rails g rails_admin:install
```

実行するとadminのrouteを何にするかを聞いてくるので、
特に指定がなければエンターを押します。

## 起動して確認

rails s

でrailsの起動ができたら、

http://locahost:3000/admin

で確認できます。

こんな感じです。

![スクリーンショット 2015-07-31 21.42.00.png](https://qiita-image-store.s3.amazonaws.com/0/5565/ca8e57ed-ec02-5b10-4b35-c836371c583a.png)

編集、追加もできます。

1分もあればできるので是非お試しください。
コマンドラインからSQLを整形するツールを作った

* 要はhttp://www.dpriver.com/pp/sqlformat.htm のコマンドライン版
* オプションはXMLの中を変更することでウェブ版とほぼ同じものが指定できるはず

## 使い方

```
$ echo "select a, b from t1 left join t2 on c = d where e < f and g > h" | sqlformat 
SELECT a
       ,b
FROM   t1
       LEFT JOIN t2
              ON c = d
WHERE  e < f
   AND g > h 

```

## ソース
sqlformat

```
#!/bin/sh

# SQLをフォーマットするスクリプト
# curlで
# http://www.dpriver.com/pp/sqlformat.htm
# にアクセスしている

TMP='sqlformat.tmp'

cat > $TMP

SQL=`cat $TMP | sed -e 's@<@\&lt;@g; s@>@\&gt;@g;'`

curl -s 'http://www.dpriver.com/cgi-bin/ppserver' -H 'Origin: http://www.dpriver.com' -H 'Accept-Encoding: gzip, deflate' -H 'Accept-Language: ja,en-US;q=0.8,en;q=0.6' -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.125 Safari/537.36' -H 'Content-Type: application/xml;charset=UTF-8' -H 'Accept: */*' -H 'Referer: http://www.dpriver.com/pp/sqlformat.htm' -H 'Cookie: __utmt=1; __utma=143873120.851493198.1438315047.1438315047.1438325854.2; __utmb=143873120.3.10.1438325854; __utmc=143873120; __utmz=143873120.1438315047.1.1.utmcsr=google|utmccn=(organic)|utmcmd=organic|utmctr=(not%20provided); __atuvc=4%7C30; __atuvs=55bb1c5df35ca429002' -H 'Proxy-Connection: keep-alive' --data-binary '
<sqlpp_request>
   <clientid>dpriver-9094-8133-2031</clientid>
   <dbvendor>generic</dbvendor>
   <outputfmt>SQL</outputfmt>
   <inputsql>'"$SQL"'</inputsql>
   <formatoptions>
      <keywordcs>Uppercase</keywordcs>
      <tablenamecs>Lowercase</tablenamecs>
      <columnnamecs>Lowercase</columnnamecs>
      <functioncs>InitCap</functioncs>
      <datatypecs>Uppercase</datatypecs>
      <variablecs>Unchanged</variablecs>
      <aliascs>Unchanged</aliascs>
      <quotedidentifiercs>Unchanged</quotedidentifiercs>
      <identifiercs>Lowercase</identifiercs>
      <lnbrwithcomma>before</lnbrwithcomma>
      <liststyle>stack</liststyle>
      <salign>sleft</salign>
      <andorunderwhere>yes</andorunderwhere>
      <removelnbr>yes</removelnbr>
      <quotechar>"</quotechar>
      <maxlenincm>80</maxlenincm>
   </formatoptions>
</sqlpp_request>
' --compressed \
	|  sed -e 's@.*<formattedsql>@@; s@</formattedsql>.*@@; s@&lt;@<@g; s@&gt;@>@g'

rm -f $TMP
```

## 追記
SQL整形のAPIをもう1個発見
http://sqlformat.org/api/
多数のSQLフォーマッタの比較表
http://architectshack.com/PoorMansTSqlFormatter.ashx
赤外線カメラを使用した壁タッチセンサー

始めまして、アクアリング鶴舞ラボでアルバイトをしている市橋と申します。

#この記事について
この記事では赤外線を撮影できるカメラを用いた、三角測量によるタッチ位置検出法の説明をします。
場所としては壁面を想定しています。

#使用器具
使用したものは以下の通りです。
・Raspberry Pi 2 Model B 2個
・Raspberry Pi NoIR Camera 2個(赤外線カメラ)
・赤外線ライト 2個
・赤外線透過フィルタ
設置すると次のようになります。
![img_q.jpg](https://qiita-image-store.s3.amazonaws.com/0/84809/7f230687-25a4-db57-ba36-a3bee8e02ede.jpeg)

右上と左上にRaspberryPiとカメラが、左右から4分の1ほどの位置に下向きの赤外線ライトが設置されています。二つのカメラに同時に映る場所に手をかざすと、その場所がタッチされたことを検出できるようになっています。

#方式の説明
##赤外線カメラの用意
一般的に売られているカメラは赤外線カットフィルタが入っていて、赤外線を撮影できません。webカメラは、物によっては赤外線カットフィルタを取り外し、赤外線を通すフィルタに張り替えることで赤外線カメラに改造できるようですが、ものによってはできなかったり、できるとされていたものでもモデルチェンジによりできなくなったりします。そこで、今回は初めからフィルタが入っていないことが確定している物を使用しました。ただ、本格的な赤外線カメラとなると価格が数万円となるので、今回はRasberry Piのカメラモジュールの赤外線カットフィルタが入っていないタイプのものを使用しました。

##赤外線カメラによる物体検出
赤外線カメラは赤外線しかとることができません。そのため、赤外線を発する光源や、赤外線を反射する物があると、その部分が白く映ります。このことを利用して物体検出をしていきます。今回は次のようなアルゴリズムで検出を行いました。
1. 赤外線画像を取得
2. 赤外線画像を二値化。閾値は適宜設定する
3. 画像の上下を切り捨てて、高さの45%~55%の範囲を切り出す
4. 3で切り出した画像を一次元配列に圧縮する。とあるx座標について、一定数以上の白のピクセルがあれば白、そうでなければ黒とした一次元配列を作成する。そのため、一次元配列の次数は画像の横解像度と同じとなる
5. 4で作成した1次元配列にて、白が一定数以上連続した時、その連続区間の中心に物体があるとする
6. 物体を検出した位置がカメラの中心を0[rad]としたとき、何ラジアンに相当するのかを計算する。物体を検出した横座標がx、画像の横解像度がXmax、カメラの水平画角がhfov[deg]のとき、その角度はarcsin((x / Xmax - 0.5) * sin(hfov / 2))より求められる
RaspberryPiでの画像処理にはOpenCVを、カメラモジュールからの画像取得には[RaspiCamCV](https://robidouille.wordpress.com/2013/10/19/raspberry-pi-camera-with-opencv/)を用いました。

##三角測量
[三角測量 - Wikipedia](https://ja.wikipedia.org/wiki/三角測量)にある原理を応用しました。今回の場合、基準点は2台のカメラ、調べたい点はタッチされた場所となります。カメラの設置位置はタッチ検出したい範囲の左上と右上の隅となるので、wikipediaの図とは上下が逆になります。つまり、角度はは検出範囲の上辺を基準としたものとなります。

角度情報の取り扱いについて注意点が3つあります
1. カメラの姿勢によって、角度の符号を反転させる必要がある
2. カメラの中心を0[rad]とした角度が送られてくるので、検出範囲の上辺を0[rad]、左右の辺をπ/2[rad]とした角度に変更する必要がある
3. 今回使用したカメラは水平画角が54°なので、上辺から36°の範囲は検出できないため、その分の補正が必要

##通信方法
スイッチングハブでLANを構成し、oscにて通信を行いました。
PCではopenframeworksのofxOscを、RaspberryPiではoscPack(http://www.rossbencina.com/code/oscpack)を用いました。

#動画
実際に動かしてみるとこのようになります。
[Vimeoに投稿しました](https://vimeo.com/135039074)
[css]marginについて

cssのmarginは余白についてプロパティです。

例えば

```
margin: 10px
```

であれば、「上下左右の余白は10px」という意味です。

```
margin-top: 10px
margin-bottom: 10px
margin-left: 10px
margin-right: 10px
```

というふうにも書けます。

最近html、cssについて勉強し始めたのでメモ
間違えてgit reset --hardしてしまった場合の対処法

`git reflog`で操作ログ的なのを参照できるので、それに対して`git reset --hard`で戻す

```bash
# reflog確認
% git reflog                                                                                                                                          e597fa9 HEAD@{0}: reset: moving to e597fa9
6af4454 HEAD@{1}: commit: 戻したいコミット

# 戻したいコミットに戻す
% git reset --hard 6af4454
```
WindowsでもCythonを使えるようにする。

後述のURLを参照しつつ、WindowsでもCythonを使えるようにしたのでメモを残す。

###Cythonのインストール

windows用にコンパイル済みのwhlファイルを使ってpipコマンドで
インストールする。

http://www.lfd.uci.edu/~gohlke/pythonlibs/#cython
から、自分のPython(=CPython)のバージョンと32bit版か64bit版かにあわせた
対応したwhlファイルをダウンロードする。

>pip install Cython-0.22.1-cp27-none-win32.whl

###コンパイラにMinGWのgcc,g++を使うため、MinGWのインストール
次にgcc,g++を使えるようにするためにMinGWを[2]を参照しつつインストールした。
c:\mingw\binを環境変数Pathに追加。
MinGWをインストール 最低gccとg++にチェック。

###Cythonでのコンパイラの指定を簡略化するための設定ファイルの記述
distutilsがMinGWを使うように設定するため
[build]
compiler = mingw32
という内容でC:\Python27\Lib\distutilにdistutils.cfgという名前で保存。

###参照したURL
[1]:Unofficial Windows Binaries for Python Extension Packages
http://www.lfd.uci.edu/~gohlke/pythonlibs/


\[2]:MinGWのインストールと使い方(2014年版)
http://web.plus-idea.net/2014/06/mingw-install-2014/


\[3]:意外に簡単。Cythonのインストール・使い方覚書
http://hennohito.cocolog-nifty.com/blog/2011/07/cython-c1cb.html

# 2024年の追記
Windows Subsystem for LinuxやWindows 上でDocker環境が動作する時代なので、
それらの環境の中でCythonを使うほうがよさそうに思います。
それらの環境の中だったら、対象のライブラリがpip でインストールできるかもしれません。
一定時間がたったらメソッド実行。SetTimer/KillTimer内包のDelayFunkJr

# Code
```cpp

#include <functional>
typedef std::function<void()> Func;
class DelayFunkJr
{
public:
	static void spinning_toe_hold(UINT Elapse, Func func)
	{
		Funk_ = func;
		timer_id_= ::SetTimer( NULL, NULL, Elapse, DelayFunkJr::hey_Terry );
	}
private:
	static void CALLBACK hey_Terry(HWND hwnd,UINT uMsg, UINT_PTR idEvent, DWORD dwTime )
	{
		::KillTimer( NULL, timer_id_ );
		if ( Funk_ ){
			Funk_();
		}
		reset();
	}
	static void reset()
	{
		Funk_ = nullptr;
		timer_id_ = 0;
	}
	static Func Funk_;
	static UINT_PTR timer_id_;
};
Func DelayFunkJr::Funk_ = nullptr;
UINT_PTR DelayFunkJr::timer_id_ = 0;
```

# Usage

```cpp:1秒後にドリー兄さんの深いお言葉
DelayFunkJr::spinning_toe_hold(1000, [](){
	::MessageBox( 0, _T("いきてるってなーんだろ"), MB_OK);
});
```

# 参考
[ドリー・ファンク・ジュニア](https://ja.wikipedia.org/wiki/%E3%83%89%E3%83%AA%E3%83%BC%E3%83%BB%E3%83%95%E3%82%A1%E3%83%B3%E3%82%AF%E3%83%BB%E3%82%B8%E3%83%A5%E3%83%8B%E3%82%A2)
EDIFを書いてみる

# まずは，

Lチカ...と言いたいところですが，もっとシンプルな「ボタンを押したらLEDを光らせる」から．二つのLEDに対して，一方はボタンを押したら光らせる，もう一方はボタンを押したら消す，というサンプルです．

# コード

早速コードです．

```lisp:myedif_test.edif
(edif myedif_test2
  (edifversion 2 0 0)
  (edifLevel 0)
  (keywordmap (keywordlevel 0))

  (library hdi_primitives
   (edifLevel 0)
   (technology (numberDefinition ))
   (cell GND (celltype GENERIC)
     (view netlist (viewtype NETLIST)
       (interface 
        (port G (direction OUTPUT)))))
   (cell OBUF (celltype GENERIC)
     (view netlist (viewtype NETLIST)
       (interface 
        (port O (direction OUTPUT))
        (port I (direction INPUT)))))
   (cell IBUF (celltype GENERIC)
     (view netlist (viewtype NETLIST)
       (interface 
        (port O (direction OUTPUT))
        (port I (direction INPUT)))))
   (cell VCC (celltype GENERIC)
     (view netlist (viewtype NETLIST)
       (interface 
        (port P (direction OUTPUT)))))
   (cell INV (celltype GENERIC)
     (view netlist (viewtype NETLIST)
       (interface
         (port I (direction INPUT))
         (port O (direction OUTPUT))))))

  (library work
    (edifLevel 0)
    (technology (numberDefinition ))
   (cell myedif_test2 (celltype GENERIC)
     (view myedif_test2 (viewtype NETLIST)
       (interface 
        (port Q0 (direction OUTPUT))
        (port Q1 (direction OUTPUT))
        (port SW (direction INPUT)))
       (contents
         (instance GND (viewref netlist (cellref GND (libraryref hdi_primitives))))
         (instance Q0_OBUF (viewref netlist (cellref OBUF (libraryref hdi_primitives))))
         (instance Q1_OBUF (viewref netlist (cellref OBUF (libraryref hdi_primitives))))
         (instance U_INV_0 (viewref netlist (cellref INV (libraryref hdi_primitives))))
         (instance SW_IBUF (viewref netlist (cellref IBUF (libraryref hdi_primitives))))
         (instance VCC (viewref netlist (cellref VCC (libraryref hdi_primitives))))
         (net Q0 (joined
          (portref O (instanceref Q0_OBUF))
          (portref Q0)))
         (net N0 (joined
          (portref I (instanceref Q0_OBUF))
          (portref O (instanceref SW_IBUF))))
         (net Q1 (joined
          (portref O (instanceref Q1_OBUF))
          (portref Q1)))
         (net N1 (joined
          (portref I (instanceref Q1_OBUF))
          (portref O (instanceref U_INV_0))))
         (net N2 (joined
          (portref I (instanceref U_INV_0))
          (portref O (instanceref SW_IBUF))))
         (net SW (joined
          (portref I (instanceref SW_IBUF))
          (portref SW)))
       ))))
  
  (design myedif_test2 (cellref myedif_test2 (libraryref work)))

)
```
なんとなく読めますね．

# 注意点
基本的には(1)ポートとかインスタンスを定義して，(2)それらの間をつないでいく，でよい．ネットの名前は，名前は好きにつけてよいのだけど，ポートに出力するネットはポート名と同じにしておかないとucfでおこられてしまうので注意．

# 次
次はLチカやります．CARRYとかFDREとかLUTとか必要なので，一気に複雑になる，はず．
rbenvで複数のバージョンのrubyをまとめてインストールする

# まとめてインストールしよう

半分ネタ。
複数バージョンのrubyで開発している人は便利かもしれない。

## 各種コマンド

### 全部インストール

```bash
rbenv install --list | xargs -n1 rbenv install
```

### 通常のrubyだけをインストール

```bash
rbenv install --list | grep '^ *[1-2]' | xargs -n1 rbenv install
```

#### 通常のrubyで2.0.0 以上のものをインストール

```bash
rbenv install --list | grep '^ *2' | xargs -n1 rbenv install
```

### JRubyだけをインストール

```bash
rbenv install --list | grep 'jruby' | xargs -n1 rbenv install
```

## 補足

やってることは、バージョン一覧を出してgrepでインストールしたいものを抽出して
それを1つずつ取り出して`rbenv install`で実行しているだけ。

```bash
# インストールしたいバージョンだけが出るまでgrepで試す
rbenv install --list | grep '^ *2.1' | less
# 目的のバージョンのみ表示されたら、実際にインストールコマンドを走らせてみる
rbenv install --list | grep '^ *2.1' | xargs -n1 rbenv install
```