OmniAICreator/Qiita-1.07M huggingface dataset:
【自分用】Centos6 VMをコピーした時にudev-rulesとホスト名を書換えるshell

#概要#
VMWare WorkstationとかPlayerを使っている時、
CentOS6のVMをコピーするとeth設定が面倒なことになる。
都度手動は面倒なので、コピー元のVMにshellを置いておくことにする。

#以下script#
```bash:udev_set.sh

#!/bin/sh -x
clear

# input user information
echo "input New Host Name"
read HostName
echo

# confirm input data
echo "HostName:  ${HostName}"
echo

echo "Are You OK?"
read RES
case ${RES} in
   Yes|yes|Y|y )
      break ;;
   No|no|N|n )
      exit ;;
   * )
      echo
      echo
      echo "input Yes or No"
      exit ;;
esac

# change hostname
NAMEDIR=/etc/sysconfig/network

sed -i /^HOSTNAME/d ${NAMEDIR}
sed -i /^$/d ${NAMEDIR}
echo "HOSTNAME=${HostName}" >> ${NAMEDIR}

# set udev-rules
CONF=/etc/udev/rules.d/70-persistent-net.rules

cat /dev/null > ${CONF}

# server reboot
echo
echo "Server Reboot after 5 seconds"
sleep 5
reboot
フォルダ分け管理しているコマンドに対してパスを一括で通す方法

# 背景
自分の環境では，$HOME/.opt下に以下のような感じでコマンドがインストールされている．
これには，見やすかったり削除が簡単だったり，また.opt直下をそのままコピペするだけで環境を移行できるっていった利点があります．
が，しかし，なにせ一個一個のコマンドにパスを通してやらないといけないのでめんどくさいやってられないので，一括でできるようにしてみました．

```zsh
├── libevent
│   ├── bin
│   ├── include
│   └── lib
├── ncurses
│   ├── bin
│   ├── include
│   ├── lib
│   ├── man
│   └── share
├── python3
│   ├── bin
│   ├── include
│   ├── lib
│   └── share
├── tree
│   └── bin
└── zsh
    ├── bin
    ├── lib
    └── share
```

# 結果
使ってるのはzshです．
以下のコマンドを実行，または.zshrcに記述すればよかです．
管理者権限ないとCPPFLAGSの設定やらをいちいちかかないといけないので結構楽になります

```zsh
cflags=(); cppflags=(); ldflags=();
files=($HOME/.opt/*)
for filepath in $files; do
  path=($filepath/bin(N-/) $path)
  [ -d $filepath/include ] && cflags=(-I$filepath/include/ $cflags) || :
  [ -d $filepath/include ] && cppflags=(-I$filepath/include/ $cppflags) || :
  [ -d $filepath/lib ] && ldflags=(-L$filepath/lib/ $ldflags) || :
done
export CFLAGS="$cflags"
export CPPFLAGS="$cppflags"
export LDFLAGS="$ldflags"


```

# 参考
* [zsh で path にディレクトリを追加するときは (N-/) を付けよう](http://qiita.com/mollifier/items/42ae46ff4140251290a7)
* [bashスクリプトでディレクトリ内のファイル一覧とディレクトリ一覧を出力](http://wordpress.honobono-life.info/code/bash%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88%E3%81%A7%E3%83%87%E3%82%A3%E3%83%AC%E3%82%AF%E3%83%88%E3%83%AA%E5%86%85%E3%81%AE%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E4%B8%80%E8%A6%A7%E3%81%A8/)
PHP7.0のDocker Imageを作る方法

https://github.com/php/php-src の`master`の最新版からDocker Imageを作りました。
CentOS7がベースです。

# Dockerfile

```Dockerfile
FROM centos:7

MAINTAINER DQNEO

RUN yum -y update; yum clean all;

RUN yum -y install epel-release; yum clean all

# install packages to build php-src
RUN yum -y install wget tar make gcc autoconf bison re2c; yum clean all

# install packages to build php extensions
RUN yum -y install libxml2-devel; yum clean all

WORKDIR /usr/local/src

RUN yum -y install git; yum clean all
RUN git clone --depth 1 https://github.com/php/php-src.git

WORKDIR /usr/local/src/php-src
RUN ./buildconf

RUN ./configure --prefix=/opt/php \
  --enable-mbstring

RUN make && make install && make clean

ENV PATH /opt/php/bin:${PATH}

CMD ["php", "-v"]
```


# 使い方

Dockerhubに上げておいたのでご自由にお使いください。

https://registry.hub.docker.com/u/dqneo/phpbuild/
https://github.com/DQNEO/docker-phpbuild

```
$ docker run  dqneo/phpbuild:7.0
PHP 7.0.0-dev (cli) (built: May 20 2015 09:25:14)
Copyright (c) 1997-2015 The PHP Group
Zend Engine v3.0.0-dev, Copyright (c) 1998-2015 Zend Technologies
```
geojson のスタイル指定

こんにちは。
geojson の仕様にはスタイル指定は存在しませんが、スタイル指定を拡張したものがあります。

* Leaflet 準拠のスタイル指定。
* [simplestyle](https://github.com/mapbox/simplestyle-spec) 拡張仕様。これは GitHub でも採用しています[^1]（下記のように```"properties": {}```の中に入れます）。

```json
"properties": {
    "title": "",
    "description": "",
    "marker-size": "medium",
    "marker-symbol": "",
    "marker-color": "#7e7e7e",
    "stroke": "#555555",
    "stroke-opacity": 1.0,
    "stroke-width": 2,
    "fill": "#555555",
    "fill-opacity": 0.6
}
```
![geojson.jpg](https://qiita-image-store.s3.amazonaws.com/0/54617/fdb06305-8420-ed49-a093-d40c8dd72105.jpeg)

[^1]: なお http://geojson.io/ でもこの simplestyle 仕様を採用しているようです。
同じサーバで、複数のGitHubリポジトリにDeploy keysを登録する


複数のリポジトリに、同じ公開鍵をDeploy keysに登録しようとすると"Key is already in use"って怒られます。というわけで、同じサーバであっても複数のリポジトリのデプロイが出来るように設定をする方法をメモっておきます。

# 複数の鍵を生成する

```
$ ssh-keygen -f ~/.ssh/repo_a
$ ssh-keygen -f ~/.ssh/repo_b
```

これで2つの公開鍵が生成されます。`repo_a.pub`と`repo_b.pub`ですね。これらをGitHubのリポジトリDeploy keysに登録します。

# SSH接続先の設定をする

生成した公開鍵をそれぞれ使い分けたいので、適当にホスト名を決めて設定をします。

```~/.ssh/config
Host github-repo-a
  User git
  Port 22
  HostName github.com
  IdentityFile ~/.ssh/repo_a
  TCPKeepAlive yes
  IdentitiesOnly yes
  
Host github-repo-b
  User git
  Port 22
  HostName github.com
  IdentityFile ~/.ssh/repo_b
  TCPKeepAlive yes
  IdentitiesOnly yes
```

cloneする場合は、こんな感じでホスト名を置き換えてあげればOKです。簡単ですね。

```
$ git clone git@github-repo-a:example/repo-a.git
$ git clone git@github-repo-b:example/repo-b.git
```
[Ruby] Here documentをちょっぴり綺麗にしてみる


長いこと以下のように書いていたのですが、

```
  text = <<-EOS
foo
bar
baz
  EOS

```

このインデントにモヤっとボール１個分ほどの嫌悪感を抱いていました。そこで最近のお気に入りは以下の記述です。

```
  text = <<-EOS.gsub(/^\s+\|/, '')
    |foo
    |bar
    |baz
  EOS
```

インデントが文字列に含まれるのか気にしないで済みますし、コードが読みやすいですね。ステキです。

参考：(https://github.com/vcr/vcr/blob/master/lib/vcr/library_hooks/webmock.rb#L69)
Go で thread-safe map を作れるかを考える

こんにちは。
Go で thread-safe map を作れるか気になりました。複数の goroutine から同一キーへ同時にアクセスがあった場合に正しく queing させる方法でなくてはなりません。lock を最小にしたい場合、工夫が必要です。sync.Mutex を使って考えてみました。

```go
package main

import (
	"sync"
	"fmt"
)

// map 構造（今回の例）
type Key int64
type Value struct {
	e0    []int64
	e1    []float64
	e2    []string
}

// thread-safe map を作れるか？
var cmap   =   map[Key]Value{}  // map 本体（今回は shard 分割していない）
var NUM_SHARD = 1024
var shards = []*sync.Mutex{}
var cmap_m   []map[Key]*sync.Mutex

// e0 の値を put する例
func put_thread_safe (k Key, e0 int64) {
	i := uint64(k)%uint64(NUM_SHARD) // shard id
    shards[i].Lock()  // shard へのアクセスをロック
	if cmap_m[i][k] == nil {
		cmap_m[i][k] = new(sync.Mutex)
	}
	cmap_m[i][k].Lock()  // 他からの cmap へのアクセスは待たせる
    shards[i].Unlock()  // shard へのアクセスのロック解除
	v := cmap[k]  // 値をコピー
	v.e0 = append(v.e0, e0)  // 値を操作する例
	cmap[k] = v  // 書き戻す
	cmap_m[i][k].Unlock()  // 他からのアクセスのロック解除
}

func init_shard() {
    for i := 0; i < NUM_SHARD; i++ {
		shards = append(shards, new(sync.Mutex))
		cmap_m = append(cmap_m, map[Key]*sync.Mutex{})
	}
}

func main () {
	init_shard()
	x := make(map[Key][]int64)
	x[37] = []int64{2, 4}
	x[89] = []int64{2, 3, 5, 7}
    for _, k := range []Key{37, 89} {
		for _, e0 := range x[k] {
			put_thread_safe(k, e0)
		}
    }
	fmt.Println(cmap)  // ==> map[37:{[2 4] [] []} 89:{[2 3 5 7] [] []}]
}
```
Mono Framework のせいで OBS MulitPlatform(obs-studio) がコンパイルできないのを何とかする。


Mac OS X Yosemite において、[Mono Framework](http://www.mono-project.com/) を入れていると、[OBS MulitPlatform(obs-studio)](https://github.com/jp9000/obs-studio) のコンパイルに失敗します。結局 Mono Framework を削除しておくしかなく、いつまでたっても .NET に触れないし、C# で遊べないのです。OBS MulitPlatform(obs-studio) にバイナリあるからコンパイルなんかしないよって人は関係ないですけど、プラグインとか作っているので、そんなことも言えないのです。

では、実際のエラー部分を見てみましょう。

```terminal
Linking C shared module rtmp-services.so
[ 94%] Built target rtmp-services
Scanning dependencies of target text-freetype2
[ 94%] Building C object plugins/text-freetype2/CMakeFiles/text-freetype2.dir/find-font.c.o
In file included from /Users/raccy/Projects/obs-studio/plugins/text-freetype2/find-font.c:3:
In file included from /Users/raccy/Projects/obs-studio/plugins/text-freetype2/find-font.h:3:
/Library/Frameworks/Mono.framework/Headers/ft2build.h:56:10: fatal error: 
      'freetype/config/ftheader.h' file not found
#include <freetype/config/ftheader.h>
         ^
1 error generated.
make[2]: *** [plugins/text-freetype2/CMakeFiles/text-freetype2.dir/find-font.c.o] Error 1
make[1]: *** [plugins/text-freetype2/CMakeFiles/text-freetype2.dir/all] Error 2
make: *** [all] Error 2
```

text-freetype2 のコンパイルで `ft2build.h` について Mono.framework のヘッダを見に行っちゃってます。どういうことかというと、Cmake は /Library/Frameworks/*.framework/ にあるファイルを優先的に見に行きます。本来は homebrew で入れた freetype2 (/usr/local/配下にある)を見に行って欲しいのですが、ヘッダファイル `ft2build.h`がMono.framework にもあるため、コンパイル時はそっちを優先して見に行ってしまいます。そして、こっちのヘッダファイルは案の定ダメダメっぽいのでコンパイルエラーになるということです。

Mono.framework を無視ってのを探したんですが、見つからなかったので、優先順位をさげる `-D CMAKE_FIND_FRAMEWORK=LAST` でごまかそうと思います。

```terminal
$ mkdir build
$ cd build
$ cmake -D CMAKE_PREFIX_PATH=/usr/local/Cellar/qt5/5.4.1/lib/cmake -D CMAKE_FIND_FRAMEWORK=LAST ..
$ make
[100%] Built target ほげほげ
```

なんつうか、.NET のフレームワークのくせに、ヘッダファイルなんて用意するなよと言いたい。Mono Framework が安定しない限り、C# はやっぱ Windows 専用言語で終わるんだろうなーと思います。Mac でも LINQ で遊びたいのにー＞＜
WP CLI を使ってWordpress環境の導入、引越し、複製を作る流れ

LAMP環境は揃っている前提でスタートします。

##Wordpres CLI のダウンロード

	curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
	
###wpコマンドで使えるようにする

	chmod +x wp-cli.phar
	sudo mv wp-cli.phar /usr/local/bin/wp

##wordpressのインポート、初期セッティング
###wordpressのダウンロード

	mkdir wp && cd wp
	wp core download --locale=ja
	
###wp-configの設定、データベースの構築
	
	wp core config --dbname=wordpress --dbuser=root --dbpass=root --dbhost=localhost --dbprefix=wp_
	
	wp core install --url=http://hostname.com --title=NewSite --admin_user=admin --admin_password=admin --admin_email=example@com

	
※事前処理　データベースに空のwordpressデータベースを作っておく

		CREATE DATABASE wordpress

#稼働中のWordpressの複製を作る
##データベースのインポート、ユーザID・パスワードの変更
###データベースのインポート
* sql形式の場合

	```
	mysql -u [username] -p [databasename] < [filename.sql]
	wp db reset
	wp db import dump.sql
	```
	
* xml(WordpressのWXR形式)の場合

	```
	wp import [filename.xml] --authors=create
	```
	
###ホスト名の検索・置換
	wp search-replace --recurse-objects [http://old-domain.com] [http://new-domain.com]
	
###新しく使用するユーザの作成、旧ユーザの削除
	wp user create [newuser] [example@com] --role=author --user_pass=[password]
	wp user delete [olduser] --reasign=[newuser] --yes
	
※ --reasign で投稿とリンクを新たに新ユーザーに再割当しています。

###データベースの最適化
	wp db optimize
	
今後はテーマ、プラグインもコマンドを使った移動を追記しようと思います。
iOS定番のバーコード読み取りライブラリZbarをSwiftで使う

#ネット上に載ってなかったので書いてみた
iOS定番のバーコード読み取りライブラリZbarをObjective-CからSwiftに書き換えてみた。

まずこんな感じでクラスにextensionさせる
と言うかほぼここがみそ！

```lang:ViewController
extension ZBarSymbolSet: SequenceType {
    public func generate() -> NSFastGenerator {
        return NSFastGenerator(self)
    }
}

class ViewController: UIViewController,ZBarReaderDelegate{
        //ViewControllerの処理
}

```



続いてバーコード読み込みのビューを作成。

```lang:ViewController
//ZBarReaderViewControllerクラスからインスタンス生成
var reader = ZBarReaderViewController()

//各種設定を盛り込む
//zbarのコントローラーを非表示
reader.showsZBarControls = false
reader.readerDelegate = self
        
//Flash自動点灯
reader.readerView.torchMode = 0
        
//オーバーレイの呼び出し
var scanner = ZBarImageScanner()
        
//カメラビューの上に載せたいもの　ボタン等　scanViewOverlay()はなにかViewを返す関数を作る
reader.cameraOverlayView = scanViewOverlay()
        
scanner = reader.scanner
scanner.setSymbology(ZBAR_I25, config: ZBAR_CFG_ENABLE, to: 0)

//カメラビューの呼び出し        
presentViewController(reader, animated: true, completion: nil)

```


ようやく重い腰を上げSwift化しました。
Ovjective-Cに比べコード量も減り使いやすくなったと思います。
smallbasicでsql

自前のエクステンション使います。
# サンプル

```
GraphicsWindow.BackgroundColor = "skyblue"
textbox = Controls.AddTextBox(10, 40)
Controls.SetSize(textbox, 400, 20)
Controls.SetTextBoxText(textbox, "select * from test")
button = Controls.AddButton("run", 420, 30)
mtextbox = Controls.AddMultiLineTextBox(10, 80)
Controls.SetSize(mtextbox, 400, 300)
Controls.ButtonClicked = onclick
Sub onclick
  WC = Text.GetCharacter(34)
  CRLF = Text.GetCharacter(13) + Text.GetCharacter(10)
  text = Controls.GetTextBoxText(textbox)
  code = ""
  code = code + "Function setup(a)" + CRLF 
  code = code + "Set con = CreateObject("+WC+"ADODB.Connection"+WC+")" + CRLF 
  code = code + "con.ConnectionString = "+WC+"Provider=Microsoft.Jet.OLEDB.4.0; Data Source=c:\a2000.mdb"+WC + CRLF 
  code = code + "con.Open" + CRLF 
  code = code + "Set rs = CreateObject("+WC+"ADODB.Recordset"+WC+")" + CRLF 
  code = code + "sql = "+WC+text+WC + CRLF 
  code = code + "rs.Open sql, con, 1" + CRLF 
  code = code + "Do While rs.EOF <> True" + CRLF 
  code = code + "setup = rs("+WC+"name"+WC+") & "+WC+": "+WC+" & rs("+WC+"des"+WC+") & "+WC+" ["+WC+" & rs("+WC+"txt"+WC+") & "+WC+"]"+WC+"" + CRLF 
  code = code + "rs.MoveNext" + CRLF 
  code = code + "Loop" + CRLF 
  code = code + "End Function" + CRLF
  a = Class1.VBSrun(code)
  Controls.SetTextBoxText(mtextbox, a)
EndSub
```
  
以上。
XCodeでvimキーバインドを使えるようになるまでの手順

XCodeでvimキーバインドを使えるようになるまでの手順


* XVimをインストール

```
cd ~/Library/Application\ Support/Xcode/
mkdir plugins
git clone https://github.com/XVimProject/XVim
cd XVim
make
```

* ~/.xvimrcの設定

```
cd ~
vim .xvimrc //.xvimrcに設定を書き込む
```

* Ctrl + P, Ctrl + N で上下移動に設定する

挿入モード時にxcodeのデフォルトではCtrl+P, Ctrl+Nでコード補完が現れてしまうので、これを変更。

1.　Karabinerをインストール

[https://pqrs.org/osx/karabiner/index.html.ja](https://pqrs.org/osx/karabiner/index.html.ja)

2.　Karabinerで設定変更

	Preference	
	->Change Key
	->EmacsMode
	->Control+PNBF to Up/Down/Left/Right
	->チェックをつける
	
	
* XCodeを再起動する


XCodeでvimキーバインドを使えるようになるまでの手順


* XVimをインストール

```
cd ~/Library/Application\ Support/Xcode/
mkdir plugins
git clone https://github.com/XVimProject/XVim
cd XVim
make
```

* ~/.xvimrcの設定

```
cd ~
vim .xvimrc //.xvimrcに設定を書き込む
```

* Ctrl + P, Ctrl + N で上下移動に設定する

挿入モード時にxcodeのデフォルトではCtrl+P, Ctrl+Nでコード補完が現れてしまうので、これを変更。

1.　Karabinerをインストール

[https://pqrs.org/osx/karabiner/index.html.ja](https://pqrs.org/osx/karabiner/index.html.ja)

2.　Karabinerで設定変更

	Preference	
	->Change Key
	->EmacsMode
	->Control+PNBF to Up/Down/Left/Right
	->チェックをつける
	
	
* XCodeを再起動する
外部のLDAPサーバを使ったsamba認証

よくLDAP + sambaで認証とかの記事はたくさんあるのですが、たいていは一台でLDAPサーバ + sambaサーバ構成と思います。
すでにLDAPサーバがあり、LDAPサーバローカルでsamba認証ができている環境で、sambaサーバを一台立ち上げて、既存のLDAPサーバに繋げてみます。

## sambaのインストール

```shell-session
root@raidtest:~# apt-get install samba
```

## libpam-ldapdのインストール

たとえsambaの認証が通ってもunix accountがなければ弾かれます。
なので、pam-ldap関連を入れます

```shell-session
apt-get install libpam-ldapd
```

インストールを行うとldapサーバを聞かれますので、現在動いてるldapサーバを指定
nsswitchでの参照を行うファイルは

- passwd
- group
- shadow

あたりでいいと思います。
（shadowはいらないかも）

## smb.confの設定

最小限でいいと思いますので、こんな感じで

```shell-session:/etc/samba/smb.conf
[global]
        unix charset =  UTF-8
        dos charset = CP932
        unix extensions = no
        netbios name = MYNAME
        workgroup = ouchi

        #LDAP Setting
        passdb backend = ldapsam:ldap://<LDAPサーバ>
        ldap suffix = dc=ouchi,dc=co,dc=jp (BaseDNを入れる)
        ldap user suffix = ou=People
        ldap group suffix = ou=Group
        ldap machine suffix = ou=Computers
        ldap admin dn = cn=admin,dc=ouchi,dc=co,dc=jp (adminDNを入れる)
        ldap passwd sync = yes
        ldap ssl = no
        admin users = Administrator
[homes]
        comment = Home Directories
        browseable = no
        writable = yes
```

※suffixは適宜環境に合わせてください。
設定後【testparm】を実行して問題ないかどうか確認します。

## 一度、いろんなものを再起動

nscdやnslcd等、変にキャッシュを持っててうまくいかない場合があるので（ついでにsmbdも）一度リスタートをかけます。

```shell-session
root@raidtest:/etc/samba# /etc/init.d/nslcd restart
 * Restarting LDAP connection daemon nslcd                  [ OK ]
root@raidtest:/etc/samba# /etc/init.d/nscd restart
 * Restarting Name Service Cache Daemon nscd                [ OK ]
root@raidtest:/etc/samba# initctl restart smbd
smbd start/running, process 20021
```

※sambaはinit.dを使えないので仕方がないのでinitctlで

## アカウントが見えるかどうかの確認

LDAP上に【smbtest】ってユーザを作りました

```shell-session
root@raidtest:/etc/samba# getent passwd | grep smbtest
smbtest:x:7077:513:System User:/home/smbtest:/bin/bash
root@raidtest:/etc/samba# id smbtest
uid=7077(smbtest) gid=513(Domain Users) groups=513(Domain Users)
```
getentは問題ないけど、idが出てこないとかは nscdあたりを再起動すると直ることが度々あります。
これで何時間も時間を無駄にしたことがあります。

## sambaにアクセスする前に、ホームディレクトリの作成
。。。そういうコンフィグを書いてしまったので。。。

```shell-session
root@raidtest:/etc/samba# cd /home/
root@raidtest:/home# mkdir smbtest
root@raidtest:/home# chown 7077:513 smbtest
```

これでwindowsからアクセスすると、ユーザ名、パスワードが聞かれて入れるとホームディレクトリが見れる予定です。

てっきりsambaSIDあたりで悩むかと思ったら、同じSIDが振られててました。
このあたりって誰が決めてるのでしょ？？　謎です。。。
Social.frameworkのSLComposeViewControllerがバグってる件

最新のFacebook iOS公式アプリ（v30, 2015/05/20時点）がインストールされている状態で、Social.frameworkのSLComposeViewControllerが正しく動作しないようです。不具合としては

 - 初期値の文字列をセットできない
 - 投稿をキャンセルしても、投稿完了扱いとしてコールバックが返ってくる

```swift
import UIKit
import Social

class ViewController: UIViewController {

    @IBAction func touchButton(sender: AnyObject) {
        if let con = SLComposeViewController(forServiceType: SLServiceTypeFacebook) {
            con.completionHandler = {(result:SLComposeViewControllerResult) -> Void in
                
                con.setInitialText("Hello") //無視される
                
                switch result {
                case SLComposeViewControllerResult.Done:
                    println("done") //キャンセルしてもDone扱いになる
                case SLComposeViewControllerResult.Cancelled:
                    println("cancel")
                }
            }
            presentViewController(con, animated: true, completion: nil)
        }
    }
}
```

回避方法はいまのところなさそう。
ご注意ください。

参考：https://developers.facebook.com/bugs/962985360399542/
JavaScript  大量の要素をDOMに追加する際の、createDocumentFragmentの使い方。

大量の要素を挿入するときに、
毎回DOMにアクセスするとパフォーマンス的によろしく無いので
createDocumentFragment を使おうという教えを頂いたのでまとめです。

聞いた事あるけどよくわからんという方も多いのではと思います。

```js:howToDocumentFragment.js
;(function(){

    var $ul = document.querySelector('#list'); // ul要素
    var songs = ['終わらない歌', 
                 'キスしてほしい', 
                 '僕の右手', 
                 '情熱の薔薇', 
                 '人にやさしく'];

    // もっと沢山要素がある想定でお願いします〜


    // 低速バージョン
    // 毎回DOMツリーへの更新が発生
    for(var cnt=0, len=songs.length; cnt<len; cnt++){
        var $li = document.createElement('li');
        var song = document.createTextNode(songs[cnt]);
        $li.appendChild(song);
        $ul.appendChild($li);  // 配列の要素数分、毎回追加
    }


/*
    高速化！
    fragment 訳:破片，断片，かけら
    DocumentFragment は、従来のDOMツリーとは分離された独立した小さなDOMツリー!

    DocumentFragment (木構造の頂点のノードになる)
    |
    |--- <li>
    |
    |--- <li>
    |
    |--- <li>

   こういう状態をつくってまとめて一回だけDOMにアクセスして追加すると良いみたいです。
*/

	// DocumentFragment
        var fragment = document.createDocumentFragment();

        for(var cnt=0, len=songs.length; cnt<len; cnt++ ){
            var $li = document.createElement('li');
            var song = document.createTextNode(songs[cnt]);
            $li.appendChild(song);
            fragment.appendChild($li); // fragmentの追加する
        }

        // 最後に追加！
        $ul.appendChild(fragment);

})();
```

こちらの説明わかりやすかったです。
http://uhyohyo.net/javascript/7_4.html

おわり
TreasureDataでHiveクエリを書くとき - timeで範囲を指定するべし

## はじめに
TreasureDataを利用するとお気軽にHadoopなどのBigdata環境を利用できるのですが、RDB感覚で利用できるのが良い点と言えばよい点なのですが、RDBでもいいならMySQLとかでいいよね。って話なのでやっぱり苦手なこともあります。
とりあえずRDBしか触ったことないけどTreasureDataでクエリ書こうと思っている方向けに書いてます。

注）私はTreasureDataの中の人じゃないです。あしからず。

## 悪い例
とりあえずRDB使っていると下のようなSQLを書きたくなりますね。でも、あなたのBigDataって、テーブルの中に何億件のデータがありますか？よく考えて！
また、TreasureDataの内部の仕組みはtime別にストレージを区切って、さらにカラムナー型（カラムごとに縦割り）で保存しています。（詳しくは[Plazma - Treasure Data’s distributed analytical database -](http://www.slideshare.net/treasure-data/td-techplazma)）
そんなわけでとりあえずのビールじゃなくて**とりあえずの「*(アスタリスク)」は絶対ダメ！**

```sql:sample_datasets
select * from www_access
```

![WS2556.JPG](https://qiita-image-store.s3.amazonaws.com/0/21492/b7cef0ee-a72a-e19c-d64b-a4b786fc2d9d.jpeg)

↑これがログですが、よく見ると下のようなエラーがでてます。

```logos:Output
 **
 ** WARNING: time index filtering is not set!
 ** This query could be very slow as a result.
 ** If you used 'unix_timestmap' please modify your query to use TD_SCHEDULED_TIME instead
 **   or rewrite the condition using TD_TIME_RANGE
 ** Please see http://docs.treasure-data.com/articles/performance-tuning#leveraging-time-based-partitioning
 **
```

翻訳します。

```html:Output
警告：timeの指定されてないぞ！
このクエリって超遅くなる可能性があるよ。
もしも、unix_timestampってのを利用してtimeの条件を指定している気になっているなら、TD_SCHEDULED_TIME ってのがあるから書き直して。timeの範囲を指定したい場合はTD_TIME_RANGEってのがあるから使って。
てか、ドキュメントをもっかい見てね。
```

このクエリって**超遅くなる**可能性あるぞ！！
[ドキュメント](http://docs.treasure-data.com/articles/performance-tuning#leveraging-time-based-partitioning)をもっかい見てね！

## いい例
そんなわけで今回は1回目なので2点だけ

* SELECTの後ろは必要なカラム名だけを書こう！
* timeの条件指定を独自関数を利用してする！

```sql:sample_datasets
select time,user,host from www_access
where TD_TIME_RANGE(time,"2014-10-01","2014-10-31","JST")
```

![WS2557.JPG](https://qiita-image-store.s3.amazonaws.com/0/21492/cb06b417-7ee8-3125-9db1-84d6dcfc0a11.jpeg)


あ、エラーが出なくなった。
IDEP(iOS Developper Enterprise program)について

#参照URL


#法人として iOS Developer Program に登録し、AdHoc用のプロビジョニングプロファイルを作成するまでの全スクリーンショット [2014]
http://mushikago.com/i/?p=4539#04

#登録時にエラーとなったときの対処法
http://www.lancork.net/2014/02/ios-developer-enterprise-program-register-error/

##チームの追加
http://bit.ly/1Bbik9U

##プロビジョニングプロファイル書き出し方法
http://blog.allianceport.jp/aptv/2014/03/ios-developer-enterprise-programaddhoc.html

※基本的な流れは、この説明が分かりやすい
http://publicroots.hateblo.jp/entry/2014/04/28/000542


##P12ファイルの書き出し方法
http://macdays.hatenablog.com/entry/2013/10/11/172532

補足
http://iritec.jp/iphone/3355/
http://d.hatena.ne.jp/mabots/touch/20130628/1372415750

※"In-House and Ad Hoc" の選択肢を Production Certificates を作ろうとした時に選択できない
※Production Certificates が 2つ以上あると Disabled表示になる

電話問合せ
https://developer.apple.com/jp/contact/phone.php
Androidのlayoutのxmlで@id と @+id の違い

#結論
android:id では、@+id/
RelativeLayoutのポジション(ex: layout_below)指定では、 @id/

#まえがき
基本id/で書いてるけど、レガシーコードで@+idで書かれてるのがあった。
android:id で@id/と書くとeclipseとかandroid stdioとかに怒られるけど
RelativeLayoutで@+id/で指定しても怒られない。
同じようなもんかと思って、ずっとスルーしていた・・・。
しかし、レイアウト変えてて@+idで指定してるxmlを編集してるときに思わぬエラーになって
困り果てて、ちゃんと調べようと思った。

## 「+」とはいったい何にプラスするのか
@+id/ と @id/ の違いは、+があるかないか。

本家参照じゃなくて、申し訳ないが。スタる（？）とあった
http://stackoverflow.com/questions/5025910/difference-between-id-and-id-in-android

+はR.javaにidを追加すると意味。
android:idは新しくidを作りたいわけだから、@+id/で指定する
たとえば、@+id/hoge : R.java にhogeというidを追加するという意味。

@id/はすでにR.javaにあるidを参照するという意味。
たとえば、@id/hoge : R.javaのhogeを参照。

RelativeLayoutにポジションを指定する際は、
すでに描写してあるviewに対して、上か下かなどを指定したいので、@id/で指定する。

##lintの段階でエラーにならないコード
以下の様なコードは、
実行時にエラーになるがeclipseでlintの段階でエラーならない。
@id/で書き直すと未定義idでlintのエラーで、間違ってることに気づく。

```xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <LinearLayout
        android:id="@+id/header"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_above="@+id/context"
        android:layout_alignParentTop="true"
        android:orientation="horizontal" >
    </LinearLayout>

    <LinearLayout
        android:id="@+id/context"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_above="@+id/footer"
        android:layout_below="@+id/header"
        android:orientation="horizontal" />

    <LinearLayout
        android:id="@+id/footer"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true" />

</RelativeLayout>
```
[Unity] iOSでネイティブコードと連携をする（DllImport）


Unityは様々なPlatformに向けてビルドすることができます。
が、やはり特定のPlatformでのみ動作する機能などを実装する必要がある場合があります。
そのときに使うのがネイティブとのブリッジの仕組みです。

基本的には`Asset/Plugins/iOS`ディレクトリにネイティブコード（サンプルでは`c`）を配置し、`Asset/Plugins`ディレクトリにブリッジとなるC#コードを配置しておく感じです。


## サンプルコード

```c:VersionNumber.c
float VersionNumber() {
    return 1.0f;
}
```

```cs:NativeTest.cs
using UnityEngine;
using UnityEngine.UI;
using System.Collections;
using System.Runtime.InteropServices;

public class NativeTest : MonoBehaviour { 

	[SerializeField]
	Text m_text;

	[DllImport("__Internal")]
	private static extern float VersionNumber();

	void Start () {
		float i = VersionNumber();
		m_text.text = "hogehoge" + i;
	}
}
```

`[DllImport("__Internal")]`属性を使ってそれが外部で定義されていることを宣言します。
*※ `__Internal`は静的にリンクしたライブラリの場合に利用するようです。*


## ディレクトリ構造

![ディレクトリ構造](https://qiita-image-store.s3.amazonaws.com/0/5616/479ef726-617a-a04e-4a73-da489eb31cc3.png)

配置したのはこんな感じです。
*（ただC#のほうは「Plugins」に入れなくても大丈夫です）*


実際にiPhone上で動かすとしっかりとネイティブ側のコードが実行できているのが分かります。
（ちょっと分かりづらいですが`Text`が **hogehoge1** となっているのがそうですｗ　Unityで普通に実行すると **hogehoge0** となります）

![cap.jpg](https://qiita-image-store.s3.amazonaws.com/0/5616/2c41ed87-c545-f1cf-1971-596e3ec1cdef.jpeg "cap.jpg")


## 参考記事

- [ネイテイブプラグイン | Unity Document](http://docs.unity3d.com/ja/current/Manual/NativePlugins.html)
- [UnityでiOSのネイティブコードを呼び出す最も簡単でシンプルな方法 C# → Objective-C](http://tech.basicinc.jp/Unity/2013/08/06/unity_ios_native/)
SourceTree で feature ブランチを作ろうとしたら Please run "git flow init" first.

日々 SoruceTree にある Git Flow 機能にお世話になっていて、コマンドから feature ブランチを作ったことがありません。
ところが突然、いつものように feature ブランチを作ろうとしたらエラーが出た。

>sh.exe C:\*********\Atlassian\SourceTree\gitflow_local\gitflow\git-flow feature start new_branch
fatal: Not a gitflow-enabled repo yet. Please run "git flow init" first.

>エラー終了しました。エラーの内容は上記をご覧ください。

今までは問題なく作れていたし、何も変えてないのに突然なぜ！？（←よくある、実は何かしてるやつ）と思いつつ、指示通りターミナルを開いて "git flow init" したみたけど git flow をインストールしてなくて（？）コマンドが認識されない。

いろいろ調べた結果、実は **master ブランチをローカルから削除していたことが原因**だと判明しました！！
稀なケースだろうけど、ぐぐってもそういうケースが見つからないので残しておきます。
master develop ブランチはちゃんとローカルにないとそりゃーダメですよね。。。
サービスの接続ノードを確認するSQL

```
SELECT 	
	a.INST_ID
	,a.SERVICE_ID
	,a.NAME
	,a.NETWORK_NAME
	,a.CREATION_DATE
FROM GV$SERVICES a
;

```

crsctl stat　を実行すれば、確認できるが簡単にSQLで確認できる方法。
当方のDBは検証環境はチーム別にサービスの向き先を別ノードに振り分けているので、
DB負荷が高いときに、どこのチームがどのノードにつながっているかすぐに確認したいことがよくある。
スプリントレビューのチェックポイント

スクラムイベントの中でも難しいのはスプリントレビューです（持論）
というわけで、スプリントレビューを進行する人が気にしたいことを挙げていきます。

# スプリントレビューの目的は理解されているか
* 質問やフィードバックの無いスプリントレビューは開催の意味がないことを全員が認識しているか
* 目的外のMTGになっていないか(進捗確認MTGみたいな)
* 参加者は積極的に質問やフィードバックをしようとしているか
* デモをする人は質問やフィードバックを得ようとしているか

# 参加者は適切か
* 協力的ではない参加者が紛れていないか
* 適切ではない人が適切ではないフィードバックをしていないか
* 適切なフィードバックをくれるスクラムチーム外の人物を巻き込めているか

# デモの方法は適切か
* デモの準備は万全か
* 実際にユーザが体験する形に近い方法でデモを行なおうとしているか
* プロジェクターで写す(見る)以外の適切な方法を模索しているか
* フィードバックのしようがないもの以外は適切にデモしているか

# 確認すべき内容は適切か
* 参加者は何を確認するためのデモなのかを理解できているか
* 理解するための情報は充分か
* (既にリリースされたものをレビューする場合)数値やユーザからの問い合わせなど、実際のユーザから得たフィードバックを確認できているか

# フィードバックを集める方法は適切か
* フィードバックが集まるしくみになっているか
* 声なき声に注意を払っているか

# 集めたフィードバックの取り扱い方は適切か
* プロダクトバックログに反映させる場合、根拠は適切かつ透明か
* プロダクトバックログに反映させない場合、根拠は適切かつ透明か
* 持ち越しにする場合、期限や取り扱い方が説明できているか

# 最後に
* 質問やフィードバックに対して、関係者全員が感謝しているか

# もっと詳しく知るためには？
<a href="http://www.amazon.co.jp/gp/product/4774172367/ref=as_li_qf_sp_asin_tl?ie=UTF8&camp=247&creative=1211&creativeASIN=4774172367&linkCode=as2&tag=harakachi-22">スクラム実践入門 ── 成果を生み出すアジャイルな開発プロセス (WEB+DB PRESS plus)</a><img src="http://ir-jp.amazon-adsystem.com/e/ir?t=harakachi-22&l=as2&o=9&a=4774172367" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />
systemdでtimerの作り方（最小限のサンプル）

## 実行するスクリプトを用意する

/usr/local/bin/myscript

```
#!/bin/sh

date >> /tmp/myscript.txt
```

実行権限を忘れずに

```
chmod 755 /usr/local/bin/myscript
```

## サービスファイルを作る

/etc/systemd/system/myscript.service

```
[Unit]
Description=MyScript

[Service]
Type=simple
ExecStart=/usr/local/bin/myscript

[Install]
WantedBy=multi-user.target
```

## サービスを有効にする

```
systemctl enable myscript
```

## タイマーファイルを作る

/etc/systemd/system/myscript.timer

```
[Unit]
Description=Runs myscript

[Timer]
# ブート後、この時間後にこのタイマーを開始する
OnBootSec=1min
# 実行する時間の間隔
OnUnitActiveSec=10s
Unit=myscript.service

[Install]
WantedBy=multi-user.target
```

## タイマーを有効にする

```
systemctl start myscript.timer
systemctl enable myscript.timer
```

## 動作確認

以上で10秒おきに`/tmp/myscript.txt`に時刻が書き込まれるはず。

```
tail -f /tmp/myscript.txt
```

## タイマーを停止する

```
systemctl stop myscript.timer
systemctl disable myscript.timer
```
OpsWorks で使うunicornのバージョンを変更する


Cookbookを見てみると、変数に設定してあり、customize.rbで上書きできそうです。

https://github.com/aws/opsworks-cookbooks/blob/v339/unicorn/attributes/default.rb

```ruby
default[:unicorn][:worker_processes] = node[:rails][:max_pool_size] ? node[:rails][:max_pool_size] : 4
default[:unicorn][:backlog] = 1024
default[:unicorn][:timeout] = 60
default[:unicorn][:preload_app] = true
default[:unicorn][:version] = '4.7.0'
default[:unicorn][:tcp_nodelay] = true
default[:unicorn][:tcp_nopush] = false
default[:unicorn][:tries] = 5
default[:unicorn][:delay] = 0.5
default[:unicorn][:accept_filter] = "httpready"
```

以前書いたのと同様にして変更してみます。

[OpsWorks customize.rbでbuilt-in cookbooksの設定値を変更する](http://qiita.com/takeyuweb/items/6f7186746c4448e3ca15)

## 手順

### 1. Custom Chef Cookbooksのリポジトリを作成

すでにプロジェクトのカスタムCookbooksがある場合はそちらに追加していくので個別に作成する必要はありません。

### 2. unicorn/attributes/customize.rb

こんな感じで作成します。

```ruby
###
# This is the place to override the unicorn cookbook's default attributes.
#
# Do not edit THIS file directly. Instead, create
# "unicorn/attributes/customize.rb" in your cookbook repository and
# put the overrides in YOUR customize.rb file.
###

# The following shows how to override the Unicorn timout:
#
#normal[:unicorn][:timeout] = 30
normal[:unicorn][:version] = '4.9.0' # Gemfile.lockと合わせる
```

versionの値は（通常Railsだと思いますが）Gemfile.lockのunicornバージョンとあわせます。

<b>バージョンが合わないとき</b> … Bundlerでエラーになります

<b>Gemfile側にunicornがないとき</b> … Rails Appのデプロイ時に起動やリロードができません


### 3. StackにCustom Chef Cookbooksのリポジトリ登録・更新

すでに（ｒｙ

### 4. Update Custom Cookbooks

スタックのRun CommandでカスタムCookbooksを更新します。AppのデプロイだけではカスタムCookbooksは更新されないので注意。

### 5. Setup

スタックのRun CommandでSetupします。これでシステムRubyのUnicornが再インストールされます。


以上、そんな感じです。
collection_selectヘルパーとundefined method `map' for nil:NilClass

セレクトボックスをrailsのviewで書くには`collection_select`ヘルパーメッソドを
利用すると思います。

そこで下記のような実装をしていました。

```ruby:controller#action
def new
    @staff_member = StaffMember.new
    @staff_roles = Role.select(:id, :role_name).order(id: :asc)
end
```

```ruby:view(一部抜粋)
<div class="form-group">
  <%= f.label :role_id, '権限', class: 'col-sm-3 control-label' %>
  <div class="col-sm-6 col-md-6 col-lg-6">
    <%= f.collection_select(
      :role_id, @staff_roles, :id, :role_name,
      {prompt: "選択してください"}, {class: 'form-control'}) %>
  </div>
</div>
```

この実装で問題なく動いていたのですが、modelに下記のvalidationを実装してから
挙動が変わりました。

```ruby:model(一部抜粋)
validates :family_name, :given_name, presence: true
```

このようにvalidatesを指定したカラムは、select対象のカラムであるrole_idとは
別のfamily_nameで、一見何の関連もないように見えます。

ところがこの実装後、ブラウザ上でfamily_nameにデータ入れてcreateすれば
問題なくデータベースにsaveされますが、family_nameをブランクしてvalidation errorを
起こそうとすると下記のエラーになってしまいます。

```
ActionView::Template::Error (undefined method `map' for nil:NilClass):
    28: <div class="form-group">
    29:   <%= f.label :role_id, '権限', class: 'col-sm-3 control-label' %>
    30:   <div class="col-sm-6 col-md-6 col-lg-6">
    31:     <%= f.collection_select(
    32:       :role_id, @staff_roles, :id, :role_name,
    33:       {prompt: "選択してください"}, {class: 'form-control'}) %>
    34:   </div>
```

family_nameとは無関係なcollection_selectについて何やら言っているようです。

理由は調べていませんが、collection_selectの引数である**@staff_roles**
モデルオブジェクトをアクションで受け取るのやめ、viewに直接書いたら改善されました。

```ruby:controller#action(修正後)
def new
    @staff_member = StaffMember.new
end
```


```ruby:view(修正後)
<div class="form-group">
  <%= f.label :role_id, '権限', class: 'col-sm-3 control-label' %>
  <div class="col-sm-6 col-md-6 col-lg-6">
    <%= f.collection_select(
      :role_id, Role.all, :id, :role_name,
      {prompt: "選択してください"}, {class: 'form-control'}) %>
  </div>
</div>
```
あるフォルダの中のxlsを開いて何かするマクロ

```vbnet

    Dim FilePath As String
    Dim TargetFile As String

    '開きたいファイルのパス
    FilePath = "c:\hogehoge"
    
    TargetFile = Dir(FilePath & "\*.xls", vbNormal)
    Do Until TargetFile = ""
        ' 拡張子が3桁だと、xlsxやxlsmも拾ってしまうのでフィルタリング
        If FilePath Like "*.xls" Then
            
            Workbooks.Open FilePath & "\" & TargetFile
            
            With Workbooks(TargetFile)

                .Activate
                
                ' ファイルを開いてなんかやる
                ' 例えば
                Dim i As Long
                For i = 1 To .Worksheets.Count
                    ' 全てのシートになんかやる
                    With .Worksheets(i)
                        .Select
                        ' ここにやりたいこと                        
                    End With
                Next
                .Close
            End With
        End If
        TargetFile = Dir()
        DoEvents
    Loop


```
PowerShellで作成したCSVがExcelで正常に開けない原因と対策

この記事の前提はPowerShell 4.0とExcel 2010です。
# PowerSehllで作成したCSVの問題
PowerShellで作成したCSVをExcelで開くと、なぜかカンマの位置でセルが区切られていない状態で開かれてしまいます。

例えばPowerShellで```"1,2,3,4,5,6,7,8,9,10" > test.csv```を実行して、
test.csvをExcelで開くとセルA1に```1,2,3,4,5,6,7,8,9,10```と表示されます。

# 原因はPowerShellの文字コード
PowerShellのデフォルト文字コードはUTF-16 Little Endianですが、どうやらこれが原因のようです。

文字コードを意識せずにPowerShellからテキストファイルを作成するとUTF-16 Little Endianで作成されますが、CSVがUTF-16になっているとExcelで開いた時にカンマで区切られないみたいです。

Excelの不具合ですね。
PowerShellのデフォルト文字コードがUTF-16ってのも問題があると思いますが。

# 対策
```"1,2,3,4,5,6,7,8,9,10" > test.csv```のようにリダイレクトした時は文字コードを指定できません。
なのでOut-Fileコマンドレットを使ってUTF-16以外の文字コードを指定します。
## UTF-8
```
PS> "1,2,3,4,5,6,7,8,9,10" | Out-File test_utf8.csv -Encoding utf8
```
## Shift-JIS
```
PS> "1,2,3,4,5,6,7,8,9,10" | Out-File test_default.csv -Encoding default
```
javascriptで@や#をつかったJSON要素を参照する

js2xmlparserというnode packageを使ってJSON->xmlへの変換が便利だが、xmlとの整合性のために独特の記法をつかう、

属性を表現するために、@を用い、要素は#で表現する

```
<fruit>
  <strawberry color="red">sweet</strawberry>
  <grape color="violet">sour</grape>
<fruit>
```

上記は

```
"fruit":{
  strawberry:{
    "@":{"color":"red"},
    "#":"sweet"
  },
  grape:{
    "@":{"color":"violet"},
    "#":"sour"
  }
}
```

jsonでこの様に表現できる記法。
ここで、@や#のような要素にどうやってアクセスするんだ？というところではまる

以下はエラーがでる
```
taste = fruit.strawberry.#
```

こうやるといける

```
taste = fruit.strawberry["#"]
```

ご参考まで
Drupal7でAmazonS3を利用する


AmazonS3 moudleは composer-manager を利用して必要ライブラリをインストールするが、
awsライブラリが自動で入らず、以下のエラーが出ていたのでそのときのメモ

	PHP Fatal error:  Class 'Aws\\Common\\Credentials\\Credentials' not found in /var/www/html/liveup/sites/all/modules/amazons3/amazons3.module on line 519
	

（[drush](https://www.drupal.org/project/drush) を利用した方が早いかもしないが、未調査）


## composerのインストール
	$ curl -sS https://getcomposer.org/installer | php


## globalコマンドとして登録

	sudo mv composer.phar /usr/local/bin/composer

## 以下管理画面ページで「rebuild composer.json file」を実行
	<drupal_url>/admin/config/system/composer-manager

## 手動でinstallを実行
	cd /var/www/html/liveup/sites/default/files/composer
	chmow a+w .
	composer install


## 以下管理画面ページでAWSアクセスキーなどを設定
	<drupal_url>/admin/config/media/amazons3


## 標準のダウンロード方法設定
	<drupal_url>/admin/config/media/file-system
Amazon Simple Storage Serviceを選択


## API rate limit and OAuth tokensなどのエラーが出る場合

### github access tokenを作成する

https://github.com/settings/tokens
Generate new tokenで作られた`<oauthtoken>`を設定

	composer config -g github-oauth.github.com <oauthtoken>

auth.jsonが作成されるので、以下に配置

	~/.composer/auth.json
Netbeansが使用するメモリ領域を広げる　～netbeansでPCが重くなる時の対処法~

Netbeansで開発していて、５個異常とかprojectがある時にすごくPCが重くなってしまう。

windowsのせいなのか、そもそもPCの容量や無駄なファイルが多いのか、

いろいろと探っていたが、見当たらない。


そういえば、、、、

Netbeansが使用しているメモリ領域のサイズを指定しているところがあるのでは・・・？！

ありました！！

netbeans.conf

ここですね。
C:\Program Files\NetBeans 8.0.2\etc\netbeans.conf


私のNetbeans(v.8.0.2)では、以下のように設定されていました。

netbeans_default_options="-J-client -J-Xss2m -J-Xms32m -J-XX:PermSize=32m -J-Dapple.laf.useScreenMenuBar=true -J-Dapple.awt.graphics.UseQuartz=true -J-Dsun.java2d.noddraw=true -J-Dsun.java2d.dpiaware=true -J-Dsun.zip.disableMemoryMapping=true"

これをこんな感じに変更します。

netbeans_default_options="-J-client -J-Xss12m -J-Xms256m -J-XX:PermSize=512m -J-Dapple.laf.useScreenMenuBar=true -J-Dapple.awt.graphics.UseQuartz=true -J-Dsun.java2d.noddraw=true -J-Dsun.java2d.dpiaware=true -J-Dsun.zip.disableMemoryMapping=true"

ヒープサイズを変更しました。

これで、少しは軽くなったと思います。

まだ変更したばかりなのですが、今後明らかな変化がでたときは、また続きを書きます！
Windows環境Gitクライアント導入（GitHub for Windows）

MacでGit使っていたが、新たに支給された端末がWindows7。
Win環境でGitを初めて使うので使用にあたっての事や注意事項をメモしておく。

#### WindowsのGitについて

 * いくつかの選択肢があるようだがGitHubが'GitHub for Windows'というパッケージを出しているようなのでそちらを利用することにした。
 * 
#### インストール
* https://windows.github.com/にアクセス
* 'Download GitHub for Windows'クリック。実行ファイル'GitHubSetup.exe'をダウンロード
* 'GitHubSetup.exe'をダブルクリック。ダウンロード/インストールが始まる。
* 'Welocome'画面が表示される。自分のGithubアカウントを入力、ログインする。
* 再びログイン情報を入力
* ローカルにリポジトリがあるか検索してる。結果を受け入れる場合は'Continue'を入力
* ローカルにリポジトリがない状態なので'+'マークが点滅している。'＋'をクリック
* git-hub上のリポジトリを利用したいので'clone'を選択
* git-hub上にある自分のリポジトリが表示されるので任意のリポジトリをクリック
* ローカルのどこにCloneするかディレクトリを指定する。私は"C:\WORK\repository"ところを指定した
* Cloneが始まる。画面左に対象のリポジトリが表示される

以上で導入完了

#### 設定変更

* デフォルトのClone場所を先程指定した"C:\WORK\repository"に変更。デフォルトだと'マイドキュメント'以下に作成されてしまう。
Codeigniter3.0の翻訳ファイルをComposerでお手軽に自動化

通常Composerで、Projectタイプをインストールする時には
`php composer.phar create-project "codeigniter/framework:3.0"`
以上のようにしますが、これはCodeigniter3.0がComposerに対応しているからこそ簡単にできるわけです。

そして、Codeigniter3.0の公式翻訳ファイルはcomposer.json作られてないので、インストールもちょっと面倒なんですよね。

そこで、半ば強引に対応させて、ダウンロードもファイルのインストールもComposerで、やってみました。

## 本体のインストール後、composer.json作成

以下のcomposer.jsonを作成して、`php composer.phar update`

```lang:composer.json
{
	"repositories": [
		{
			"type":"package",
			"package": {
				"name": "bcit-ci/codeigniter3-translations",
				"version": "3.0.0",
				"source": {
					"url": "https://github.com/bcit-ci/codeigniter3-translations",
					"type": "git",
					"reference": "3.0.0"
				}
			}
		}
	],
	"require": {
		"bcit-ci/codeigniter3-translations": "3.0.0"
	},
	"scripts": {
		"pre-autoload-dump": [
			"mkdir -p system/language/japanese",
			"rm -Rf system/language/japanese",
			"cp -Rf vendor/bcit-ci/codeigniter3-translations/language/japanese system/language/"
		]
	}
}
```

すると、翻訳ファイルがCloneされ、scriptのシェルコマンドにより`language/japanese`パッケージだけが、`system/language/`へcopyされます。
任意の桁数の整数を可逆スクランブルする

# やりたい事
任意の桁数の数値を可逆変換したいと思い、いろいろ検索すると以下の偉大な先人様方の記事を見つけた。
[整数を可逆スクランブルする - C Sharpens you up](http://qiita.com/cooldaemon/items/d168b452c976b9dedba6)
[Python で整数を可逆スクランブルする](http://qiita.com/cooldaemon/items/d168b452c976b9dedba6)

桁数部分を引数で受け取れるように変更した。
ビットリバース部分は2の乗数でないとうまく実現できなさそう。（調べが足りなかったかもしれない）
リバース部分はちょっと手を抜いた。

```py:scramble.py
# -*- coding: utf-8 -*-
"""
桁数フリーな可逆整数作成
"""

class Scramble:
    def __init__(self, bit_digit):
        self.__bit_digit = bit_digit
        self.__mask = (1 << bit_digit) - 1

    def scramble(self, number, salt, inverse_salt):
        return self.__trim(self.__reverse(self.__trim(number * salt)) * inverse_salt)

    def __reverse(self, number):
        bit = '0' * self.__bit_digit + bin(number)[2:]
        bit = bit[-self.__bit_digit:]
        bit = ''.join(reversed(list(bit)))
        return long(bit, 2)

    def __trim(self, number):
        return number & self.__mask

def scramble(number, bit_digit, salt, inverse_salt):
    return Scramble(bit_digit).scramble(number, salt, inverse_salt)
```

実際に使ってみると

```py
from scramble import scramble

print scramble(1, 48, 0x717b9f2dded3, 0xb784b8b6295b)
>> 186674888497786L

print scramble(186674888497786L, 48, 0x717b9f2dded3, 0xb784b8b6295b
>> 1
```
このようにちゃんと可逆変換された。

## 注意点
numberが48bitの場合、salt, inverse_saltも48bitを法とする事。
コマンドラインでWindowsファイアウォールに風穴を開ける

set fwrulename="PostgreSQL Server"
set pathtoapp="C:\Program Files (x86)\pgsql\bin\postgres.exe"

:delete firewall settings
netsh advfirewall firewall delete rule name=%fwrulename% program=%pathtoapp%

:create firewall settings
netsh advfirewall firewall add rule name=%fwrulename% dir=in action=allow program=%pathtoapp% enable=yes profile=domain,private
StateListDrawable の中に AnimationDrawable が入っていても自動再生して欲しい


独自のボタンを作るため、 `ImageButton` の `background` に `AnimationDrawable` を指定することはよくあると思います。

「簡単な繰り返しアニメーションだから、WebページのGIFアニメみたく自動的に再生開始してくれたらいいのに！」


しかも

*有効時と無効時では別のDrawableを表示する*
（ `StateListDrawable` の中に `AnimationDrawable` を入れる）

```button_background.xml
<selector xmlns:android="http://schemas.android.com/apk/res/android">

	<!--無効時 (pngファイル1枚)-->	
    <item android:state_enabled="false" android:drawable="@drawable/button_disable" />
    
    <!--有効時（AnimationDrawable）-->
    <item android:drawable="@drawable/button_enable_animating" />
</selector>
```

なんてなったときにはどうしたらいいのでしょう。


# 結論

結論を先に。

`ImageButton` を継承したクラスを作ってどうにかしました。
適当に `background` や `src` にリソースを突っ込むと再生してくれます。

```AnimationAutoStartImageButton.java
import android.content.Context;
import android.graphics.drawable.AnimationDrawable;
import android.graphics.drawable.Drawable;
import android.support.annotation.Nullable;
import android.util.AttributeSet;
import android.widget.ImageButton;


public class AnimationAutoStartImageButton extends ImageButton {
    public AnimationAutoStartImageButton(Context context) {
        super(context);
    }

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

    public AnimationAutoStartImageButton(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    @Override
    protected void drawableStateChanged() {
        super.drawableStateChanged();

        startAnimationOfDrawable(getDrawable());
        startAnimationOfDrawable(getBackground());
    }

    private void startAnimationOfDrawable(@Nullable Drawable drawable) {
        if (drawable == null) {
            return;
        }
        Drawable surface = drawable.getCurrent();
        if (!(surface instanceof AnimationDrawable)) {
            return;
        }
        AnimationDrawable animDraw = (AnimationDrawable)surface;
        if (!animDraw.isRunning()) {
            animDraw.start();
        }
    }
}
```

# 結局、何が問題だったのか

いくつかあります。

1. `background` に指定した `AnimationDrawable` は `AnimationDrawable#start()` を叩かないとアニメーションが再生されない
2. `AnimationDrawable` in `StateListDrawable` とかやると単純に `start()` 叩けない


## `background` に指定した `AnimationDrawable` は `AnimationDrawable#start()` を叩かないとアニメーションが再生されない

どうやら、 `src` に指定した AnimationDrawable は自動的に再生されるらしいのです。

参考：[Animation-list (animationDrawable) autostart](http://stackoverflow.com/questions/14220517/animation-list-animationdrawable-autostart)

が、srcに指定してしまうと、ボタンの柄を変更する事ができません。backgroundを使うしかない。

そうなると、コードからbackgroundのAnimationDrawableを取得して `start()` を叩くしかない…
なんて面倒なんだ！


## `AnimationDrawable` in `StateListDrawable` とかやると単純に `start()` 叩けない

`StateListDrawable#getCurrent()` で現在のDrawableを取得して、それに対して `start()` を叩く、という面倒なことをしないといけません。

しかも、 `getCurrent()` でとれるDrawableがAnimationDrawableである保証はどこにもない！
いちいちインスタンスの型の確認が必要！
つらい！


# まとめ

AnimationDrawableに自動再生のオプションとかがあれば、こんなややこしいことしなくて済んだのになぁ、という無い物ねだりでした。
druby: DRb::DRbConnError connection closed のエラーについて


## はじめに

　drubyとrailsを使用してCentOS内のファイル作成やディレクトリ作成などを行うプログラムを作成していた際に、表題のエラーがでてきて原因が全くつかめなかったためメモを残します。
　
## 現象

* rails app => druby 経由 => ファイル作成
* railsで作成したアプリのフォームから受け取ったパラメータに基づいてファイルの作成をした際にエラーが発生
* druby: DRb::DRbConnError connection closed
* FileUtilsやFileクラスのメソッドを使用した際に発生

## 原因

* drubyのstart_serviceメソッドに:safe_level => 1 を設定した際に発生
* railsからもらったパラメータを利用して、作成するディレクトリ等のパスを生成した際にもらったパラメータをいれた変数が汚染されていたため、Fileクラス系の操作を行うことができなかった。

> 参照:セキュリティモデル(ruby-lang.org)
> http://docs.ruby-lang.org/ja/2.1.0/doc/spec=2fsafelevel.html

まったく、こちらに思い当たらず見当違いのところを調べまくっていたためえらくハマってしまいました。一緒に調べてくださった先輩に感謝です。

## 対策

* :safe_level => 0 にする
    * こちらはとりあえず選択しませんでした
* エラーが出る元になった変数について、悪意ある内容に書き換えられないようにフィルターするなどして、対象の変数をObject.untaintし汚染を取り除く
    * まだ実装途中ですが、こちらを選択する予定です。

## さいごに

エラーの情報がコネクションが切れていることしか見つけられなかったため、エラーの出所をつきとめるのが難しく時間を取られました。
また、Object.taintについて意識をする機会がなかったため楽しいrubyの項目を読み返そうと思います。
Vue.js elで指定した要素にはv-directiveは効かない。メモ。

あまりこういう使い方はしないかもしれないけど、いちおメモ。

## v-directiveが効かなくなる条件

[デモ](https://jsfiddle.net/akiho/ezrv0gxa/)

```html:html
<div id="app">
	<div id="inner" v-if="active"></div>
</div>
```

```js:javascript
var AppInner = new Vue({
	el: '#inner',
});

var App = new Vue({
	el: '#app',

	data: {
		active: false,
	},
});

```

この場合、appのdataであるactiveがfalseなので、
inner部分は表示されて欲しくないんだけど、
表示されます。
ということ。

## まとめ。
このような使い方をしなければ良いだけですね。
compassで"Change block raise an execption: undefined method 'to_tree' "という謎のエラーを解決する

compass watch中に監視対象のscssファイルを編集すると謎のエラーが

```
Change block raise an execption: undefined method 'to_tree'
```

scssのシンタックスは何度見なおしても間違ってなかったのでググる

https://github.com/Compass/compass/issues/1851

Compass 1.1.0.alpha.3のバグがあるらしい
バージョンを調べる

```
compass -v
Compass 1.1.0.alpha.3 (Polaris)
```

ビンゴ！

```
sudo gem install compass
```

で安定版の1.0.3をインストールして解決！


そもそも、いつのまに安定版じゃないバージョンを入れていたんだろう・・Railsでbundle installしたときかな・・

やっぱりbundle installはプロジェクト内にディレクトリ指定するのが無難ですね

bundle installのディレクトリ指定についての記事はこちら
http://qiita.com/jshimazu0820/items/4de4a53e3c98f0495933
コレグラフボックスライブラリ一覧【LEDs】（ver. 2.3.0）


コレグラフボックスライブラリ一覧（ver. 2.3.0）

Creation Date : 2015/5/19
Last Modified Date : 2015/5/20
 [robot start inc.](http://robotstart.co.jp/ "robot start inc.")
-------------------------------------------------------------------------------

-------------------------------------------------------------------------------
###▼LEDs（LEDライト）
-------------------------------------------------------------------------------
###　▼Creation（クリエーション）
##　　　■Color Edit（色の編集）
　　　　　- 光の三原色（R、G、B）の値(0〜255)を出力します。

　　　　　入力：onStart（バン）

　　　　　出力：onStopped（数）

　　　　　ボックス設定：色（クリックするとカラー選択ウィンドウが開きます。）

　　　　　パラメータ：なし

##　　　■Ear LEDs（耳のLED）
　　　　　- 片方の耳または両耳のLEDの強さを設定します。

　　　　　　入力：onStart（バン）

　　　　　　出力：onDone（バン）

　　　　　　ボックス設定：なし

　　　　　　パラメータ：耳LED部位（両方、左、右）
　　　　　　　　　　　　LEDの強さ（%）
　　　　　　　　　　　　持続期間（秒）

##　　　■Eye LEDs（目のLED）
　　　　　- 目のLEDを設定します。
　　　　　　色を入力するボックスを開く必要があることに注意してください。

　　　　　　入力：onStart（バン）

　　　　　　出力：onDone（バン）

　　　　　　ボックス設定：なし

　　　　　　パラメータ：目LED部位（両方、左、右）
　　　　　　　　　　　　持続期間（秒）

##　　　■Set LEDs（LEDの設定）
　　　　　- 指定したグループのLEDの輝度を設定します。

　　　　　　入力：onSet（バン）

　　　　　　出力：onReady（バン）

　　　　　　ボックス設定：なし

　　　　　　パラメータ：LEDグループ（すべてのLED、右耳のLEDなど）
　　　　　　　　　　　　LEDの強さ（%）
　　　　　　　　　　　　持続期間（秒）

##　　　■Set Single LED（1つのLEDの設定）
　　　　　- 特定のLEDの輝度を設定します。

　　　　　　入力：onSet（バン）

　　　　　　出力：onReady（バン）

　　　　　　ボックス設定：なし

　　　　　　パラメータ：LED部位（Brain0、LeftEarLedなど）
　　　　　　　　　　　　LEDの強さ（%）
　　　　　　　　　　　　持続期間（秒）

##　　　■Single Ear LED（片耳のLED）
　　　　　- 片耳のLEDの強度を設定します。

　　　　　　入力：onStart（バン）

　　　　　　出力：onDone（バン）

　　　　　　ボックス設定：なし

　　　　　　パラメータ：耳LED部位（左、右）
　　　　　　　　　　　　角度（度）
　　　　　　　　　　　　LEDの強さ（%）
　　　　　　　　　　　　持続期間（秒）

##　　　■Single Eye LED（片目のLED）
　　　　　- 片目のLEDの色を設定します。色を入力するボックスを開く必要があります。

　　　　　　入力：onStart（バン）

　　　　　　出力：onDone（バン）

　　　　　　ボックス設定：なし

　　　　　　パラメータ：目LED部位（左、右）
　　　　　　　　　　　　角度（度）
　　　　　　　　　　　　持続期間（秒）
 
--------------------------
###　▼LEDs Library（LED制御）
##　　　■Blink（点滅）
　　　　　- ロボットの目が一回点滅します。

　　　　　　入力：onStart（バン）

　　　　　　出力：onDone（バン）

　　　　　　ボックス設定：なし

　　　　　　パラメータ：なし

##　　　■Random Eyes（目の色のランダム変化）
　　　　　- ロボットの目の色がランダムに変化します。
　　　　　　注意：このボックスは自動的には終了しませんので終えるにはonStop入力
　　　　　　　　　させる必要があります。

　　　　　　入力：onStart（バン）
　　　　　　　　　onStop（バン）

　　　　　　出力：onStopped（バン）

　　　　　　ボックス設定：なし

　　　　　　パラメータ：なし

##　　　■Twinkle（点滅）
　　　　　- 選択されたLEDがパラメーターで定義された時間の間、点滅します。

　　　　　　入力：onStart（バン）
　　　　　　　　　onStop（バン）

　　　　　　出力：onStopped（バン）

　　　　　　ボックス設定：なし

　　　　　　パラメータ：LEDグループ（すべてのLED、顔LED、右耳のLEDなど）
　　　　　　　　　　　　フラッシュオンの時間（秒）
　　　　　　　　　　　　フラッシュオフの時間（秒）
　　　　　　　　　　　　作動させる時間（秒）
 
-------------------------------------------------------------------------------