OmniAICreator/Qiita-1.07M huggingface dataset:
pythonでコマンドラインの引数から文字列を取得する方法

pythonでコマンドラインの引数から文字列を取得する方法です。  
今回、sysモジュールをインポートする方法を記載します。  

sys.argvで標準入力を読み込むことができます。一応、エラー処理もつけておきましたので参考にしてみてください。この場合、params[0]は実行コマンド(pyファイル)です。

 
```
import sys

## get form params ##

params = sys.argv
length = len(params)

if (length != 2):
    print 'Usage: python %s parameter' % params[0]
    quit()
```
  
lengthやquit()は適宜変更してください。
あとは標準入力から読み込んだ値を以下のように格納するなりして使用してください。  
  
```
value = params[1]
```
Ruby | 10進数 ( decimal ) から20進数 ( vigesimal ) を取得する

# Ruby | 10進数 ( decimal ) から20進数 ( vigesimal ) を取得する

## 概要
10進数から20進数を取得します。
20進数を取得するには、 Integer#to_sメソッドの引数に基数20を渡します。

~~~ruby
19.to_s(20) # => j
20.to_s(20) # => 10
~~~

## サンプルコード

1から40までの数値配列について、
2/8/10/16/20 進数の表を作成します。

~~~ruby
require 'tbpgr_utils'

results = [['decimal', 'binary', 'oct', 'hex', 'vigesimal']]
[*1..40].each do |decimal|
  memo = [decimal]
  [2, 8, 16, 20].each do |cardinal_number|
    memo << decimal.to_s(cardinal_number)
  end
  results << memo
end

print results.to_table

__END__
Array#to_tableは 自作gem tbpgr_utils のメソッドです。
Array[Array, Array, Array...] をパイプ区切りのテーブルフォーマットにして出力します。
~~~

## 出力

~~~
|decimal|binary|oct|hex|vigesimal|
|      1|     1|  1|  1|        1|
|      2|    10|  2|  2|        2|
|      3|    11|  3|  3|        3|
|      4|   100|  4|  4|        4|
|      5|   101|  5|  5|        5|
|      6|   110|  6|  6|        6|
|      7|   111|  7|  7|        7|
|      8|  1000| 10|  8|        8|
|      9|  1001| 11|  9|        9|
|     10|  1010| 12|  a|        a|
|     11|  1011| 13|  b|        b|
|     12|  1100| 14|  c|        c|
|     13|  1101| 15|  d|        d|
|     14|  1110| 16|  e|        e|
|     15|  1111| 17|  f|        f|
|     16| 10000| 20| 10|        g|
|     17| 10001| 21| 11|        h|
|     18| 10010| 22| 12|        i|
|     19| 10011| 23| 13|        j|
|     20| 10100| 24| 14|       10|
|     21| 10101| 25| 15|       11|
|     22| 10110| 26| 16|       12|
|     23| 10111| 27| 17|       13|
|     24| 11000| 30| 18|       14|
|     25| 11001| 31| 19|       15|
|     26| 11010| 32| 1a|       16|
|     27| 11011| 33| 1b|       17|
|     28| 11100| 34| 1c|       18|
|     29| 11101| 35| 1d|       19|
|     30| 11110| 36| 1e|       1a|
|     31| 11111| 37| 1f|       1b|
|     32|100000| 40| 20|       1c|
|     33|100001| 41| 21|       1d|
|     34|100010| 42| 22|       1e|
|     35|100011| 43| 23|       1f|
|     36|100100| 44| 24|       1g|
|     37|100101| 45| 25|       1h|
|     38|100110| 46| 26|       1i|
|     39|100111| 47| 27|       1j|
|     40|101000| 50| 28|       20|
~~~
Java入門 オーバーロード

Java入門
オーバーロード

プログラミングしていくうちに、同じような処理を行うメソッドを複数作る必要が出てくることがあります。しかし、メソッドは同じ名前をつける事ができません。
しかし、例外的に同じ名前を複数定義する方法があり、それをオーバーロード（多重定義）といいます。


```java:sample.java
public class Sample {
	// int型のaddメソッド
	public static int add(int x, int y) {
		return x + y;
	}
	// double型のaddメソッド
	public static double add(double x, double y) {
		return x + y;
	}
	// String型のaddメソッド
	public static String add(String x, String y) {
		return x + y;
	}
	public static void main(String[] args) {
		// int型のメソッドの呼び出し
		System.out.println(add(10, 20));
		// double型のメソッドの呼び出し
		System.out.println(add(5.5, 2.2));
		// String型のメソッドの呼び出し
		System.out.println(add("世界一", "かわいいよ！"));
	}
}
```

実行結果

```lang:sample
30
7.7
世界一かわいいよ！
```

オーバーロードは仮引数の型や個数が異なれば、同じ名前のメソッドを複数定義する事が可能です。
Android 2.3に対応した、css onlyなdelay付きanimation-fill-modeのpolyfillの作り方

いい感じでCSSでフェードインするアニメ作りたいとするやろ？

```css
// vender prefixは省略
.hoge {
    animation: fadein 1s;
    animation-fill-mode: forwards;
}

@keyframes fadein {
    from { opacity: 0; }
    to { opacity: 1; }
}
```

transitionでやらない、jsを使わないという条件の元だと、たぶんこう書く。でもこれだとAndroid 2.3で上手く動作しない。なぜかと言うと、animation-fill-modeをサポートしていないから（アニメーション終了直後にopacity: 0の状態に戻ってしまう）。

そこで最初から```.hoge { opacity: 1; }```と記述しておくというハックがある。しかし、これはanimation-delayがなければ上手くいくが、animation-delayを設けると開始からdelayの間だけ```opacity: 1```の状態が持続してしまい、フェードインではなくなってしまう。

そこで、animation-delayと同じ効果の「opacity: 0の状態で何も行わないアニメーション」を定義して、本命のアニメーションとチェインさせると上手くいく。

```css
.hoge {
    opacity: 1;
    animation: wait 0.5s, fadein 1s 0.5s;
}

@keyframes fadein {
    from { opacity: 0; }
    to { opacity: 1; }
}

@keyframes wait {
    from { opacity: 0; }
    to { opacity: 0; }
}
```

まあこんなことをやる前に、プロダクトオーナーにAndroid 2.xのシェアを見せて、「これらを獲得するためには、我々の労力が確実に1.1倍必要になりますが、大丈夫ですか？人件費1.1倍ですよ、いいんですか？？？」という確認、というかサポートを諦めさせる方向での交渉をする必要がある。
海外VPSのVULTRでCoreOSを動かしてみた

#前提条件
* VULTRのアカウントを所持していること
* テキストファイルをhttpで配信できること http://◯◯◯/script.txt 
* unix系の黒い画面(コンソール)が触れること
* SSH接続用の秘密鍵を発行していること


以下からの説明は、MacOS10.9で作業した内容を記述しているが、
unix系であれば特に変わりなく作業できる筈。
変な記述がありましたら、コメントにて連絡頂ければ幸いです。

##※未承諾広告※
VULTRは東京リージョンも利用できる格安VPSだ。
Web管理画面は英語のみだが、クレカかPaypalさえあれば公称通り5分以内でデプロイ可能。
最小プラン(1CPU MEM768MB SSD15GB)なら月額$5。
更に2014/08現在、一度に$100以内の支払でクレジットが2倍に増えるキャンペーン中！
そしてお友達を紹介するだけでクレジットが$10増える例のアレも完備！

[VULTR(例のアレ)](http://www.vultr.com/?ref=6806696)

#大まかな流れ
##参考にしたページ
CoreOS公式で、VULTRへの導入手順が紹介されている。
この流れ通りにやっていけば問題はないが、色々注意点などがあったり。
https://coreos.com/docs/running-coreos/cloud-providers/vultr/

## iPXE script (script.txt)の作成
下記はCoreOS stableをインストールする場合。betaやalphaは上記URLを参考のこと。

``` lang:script.txt
#!ipxe

set base-url http://stable.release.core-os.net/amd64-usr/current
kernel ${base-url}/coreos_production_pxe.vmlinuz sshkey="公開鍵の内容"
initrd ${base-url}/coreos_production_pxe_image.cpio.gz
boot
```

公開鍵の内容 の部分を、公開鍵(ssh-rsaから始まる文字列)に差し替える。
script.txt(もちろんUTF-8)を作成したら、どこかにアップロードすること。

##VULTRでDeploy
deployする時に、適切なリージョンを選択し、OSはcustom、Virtual ISOはiPXE、
テキストボックスに先ほどscript.txtをアップロードしたURLを入れてデプロイ開始。


数分たったら、CoreOSが立ち上がる。
ただしISOイメージブートでな！(ディスクブートではないことに注意)

##SSHでISOブートのCoreOSに接続
できたてのVPSに接続しよう。
`ssh core@VPSのIP`
「これ未知のホストッスよね、どうシャス」とSSHクライアントに言われるんでyesと回答。
クライアント側の~/.ssh/known_hosts にホストが追記されるが、その行は後に削除する。

##cloud-config.yaml の作成
CoreOSをSSDにインストールする前に設定ファイルを書かないと、ログインできないCoreOSが立ち上がる。
僕はここで数回積んだ。
`vi cloud-config.yaml`

``` lang:cloud-config.yaml
#cloud-config

ssh_authorized_keys:
  - 公開鍵の内容
```
公開鍵の内容 の部分を、公開鍵(ssh-rsaから始まる文字列)に差し替えること。

ちなみにCoreOSはエディタがvimしか入ってないので、emacs派とnano派は涙を拭こう。

##SSDにインストール
`sudo coreos-install -d /dev/vda -C stable -c ~/cloud-config.yaml -o ""`
「おわったよー」と言ってきたら、再起動しよう。
`sudo reboot`
ここでssh接続は一旦解除される。

2014/09/29追記:-oオプション(OEM)が必要になった模様です。上記は適用済み。
[github: Vultr image does not existing #331](https://github.com/coreos/docs/issues/331)

##SSHでISOブートのCoreOSに接続
再起動中に、先ほどSSHクライアントで登録したホストの記述を消そう。
テキストエディタで、VPSのIPの行を消せばいい。
`nano ~/.ssh/known_hosts`

あとは下記のコマンドで接続できる。
`ssh core@VPSのIP`
「これ未知のホスト(略」にはyesと回答。
接続できたら、後は色んなdockerコンテナを入れてみよう。

##2014-11-28気づいたこと
デフォルトで選択できるOSにCoreOS Stableが追加されたよ！やったねたえちゃん！
SSHもいつの間にか管理画面から追加できるようになっているので(AWSよりも簡単そう)、
上記の手順は割と楽できそうですよ？(つまり未検証)
Ruby的FizzBuzz

[最終鬼畜FizzBuzz大全 - Qiita](http://qiita.com/tadsan/items/51d39ec7b49a8e8ee7fd "最終鬼畜FizzBuzz大全 - Qiita")に刺激を受けまして。

メソッド名を返り値にしてみる試み。メソッド定義順依存。

```rb
class FB
  def FizzBuzz(n)
    (n%15)==0
  end

  def Fizz(n)
    (n%3)==0
  end

  def Buzz(n)
    (n%5)==0
  end

  def self.call(n)
    instance_methods(false).detect { |m| new.send(m, n) } || n
  end
end

(1..100).each { |i| printf "%s ", FB.call(i) }

# >> 1 2 Fizz 4 Buzz Fizz 7 8 Fizz Buzz 11 Fizz 13 14 FizzBuzz 16 17 Fizz 19 Buzz Fizz 22 23 Fizz Buzz 26 Fizz 28 29 FizzBuzz 31 32 Fizz 34 Buzz Fizz 37 38 Fizz Buzz 41 Fizz 43 44 FizzBuzz 46 47 Fizz 49 Buzz Fizz 52 53 Fizz Buzz 56 Fizz 58 59 FizzBuzz 61 62 Fizz 64 Buzz Fizz 67 68 Fizz Buzz 71 Fizz 73 74 FizzBuzz 76 77 Fizz 79 Buzz Fizz 82 83 Fizz Buzz 86 Fizz 88 89 FizzBuzz 91 92 Fizz 94 Buzz Fizz 97 98 Fizz Buzz 

```

もうちょっと工夫して、FizzBuzzメソッド無くした。

```rb
class FB
  def Fizz(n)
    (n%3)==0
  end

  def Buzz(n)
    (n%5)==0
  end

  def self.call(n)
    instance_methods(false).select { |m| new.send(m, n) }
                           .map(&:to_s).inject(:+) || n
  end
end

(1..100).each { |i| printf "%s ", FB.call(i) }

# >> 1 2 Fizz 4 Buzz Fizz 7 8 Fizz Buzz 11 Fizz 13 14 FizzBuzz 16 17 Fizz 19 Buzz Fizz 22 23 Fizz Buzz 26 Fizz 28 29 FizzBuzz 31 32 Fizz 34 Buzz Fizz 37 38 Fizz Buzz 41 Fizz 43 44 FizzBuzz 46 47 Fizz 49 Buzz Fizz 52 53 Fizz Buzz 56 Fizz 58 59 FizzBuzz 61 62 Fizz 64 Buzz Fizz 67 68 Fizz Buzz 71 Fizz 73 74 FizzBuzz 76 77 Fizz 79 Buzz Fizz 82 83 Fizz Buzz 86 Fizz 88 89 FizzBuzz 91 92 Fizz 94 Buzz Fizz 97 98 Fizz Buzz 
```

`Array#join`だとから配列は空文字になってしまうので、`to_s` + `inject(:+)`を採用。
UbuntuにRaspberry Pi向けのC++クロスビルド環境をつくる

#環境
・Ubuntu14.04 x86（ホスト）

#手順
##クロスコンパイルツールのダウンロード
Raspberry Piのリポジトリからからクロスコンパイルツールをダウンロードする。

    $ cd ~/raspi-dev/opt
    $ git clone https://github.com/raspberrypi/tools.git

特にビルドなどはせずに使える。
 
    $ ./tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin/arm-linux-gnueabihf-g++ --version
    arm-linux-gnueabihf-g++ (crosstool-NG linaro-1.13.1-4.8-2014.01 - Linaro GCC 2013.11) 4.8.3 20140106 (prerelease)
    Copyright (C) 2013 Free Software Foundation, Inc.
    This is free software; see the source for copying conditions.  There is NO
    warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

##Raspberry Piへのg++4.8のインストール
ダウンロードしたツールでコンパイルしたバイナリをRaspberry Piで実行すると次のようなエラーが出た。

    /usr/lib/arm-linux-gnueabihf/libstdc++.so.6: version `GLIBCXX_3.4.18' not found (required by ./hello)

[11.04 - GLIBCXX_3.4.15 not found - Ask Ubuntu](http://askubuntu.com/questions/164296/glibcxx-3-4-15-not-found)に書いてあるやり方で調べたら確かにない。

    # Raspberry Pi
    $ sudo find / -name libstdc++.so
    /usr/lib/gcc/arm-linux-gnueabihf/4.6/libstdc++.so
    /usr/lib/arm-linux-gnueabihf/libstdc++.so.6.0.17
    /usr/lib/arm-linux-gnueabihf/libstdc++.so.6

    $ strings /usr/lib/gcc/arm-linux-gnueabihf/4.6/libstdc++.so | grep GLIBC
    GLIBCXX_3.4
    GLIBCXX_3.4.1
    GLIBCXX_3.4.2
    GLIBCXX_3.4.3
    GLIBCXX_3.4.4
    GLIBCXX_3.4.5
    GLIBCXX_3.4.6
    GLIBCXX_3.4.7
    GLIBCXX_3.4.8
    GLIBCXX_3.4.9
    GLIBCXX_3.4.10
    GLIBCXX_3.4.11
    GLIBCXX_3.4.12
    GLIBCXX_3.4.13
    GLIBCXX_3.4.14
    GLIBCXX_3.4.15
    GLIBCXX_3.4.16
    GLIBCXX_3.4.17
    GLIBC_2.4
    GLIBCXX_DEBUG_MESSAGE_LENGTH

クロスコンパイラのg++のバージョンが4.8でRaspberry Piにインストールされているg++のバージョンが4.6だから起きるようなので、Raspberry Piにg++4.8を入れることにした。

インストールはこのページを参考にした。
ただし今回は新しいlibstdc++が入れば良いので、g++インストール後のupdate-alternativesは行っていない。

[gcc 4.8 on Raspberry Pi Wheezy | some wide open space](http://somewideopenspace.wordpress.com/2014/02/28/gcc-4-8-on-raspberry-pi-wheezy/)
    
#まとめ
これで実行できるようになった。

    # [Ubuntu]
    $ cat hello.cpp 
    #include <iostream>
    
    int main(int argc, char* argv[])
    {
    	std::cout << "hello world" << std::endl;
    	return 0;
    }
    
    $ export PATH=$PATH:~/raspi-dev/opt/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin/
    $ arm-linux-gnueabihf-g++ hello.cpp -o hello
    $ rsync ./hello pi@xxx.xxx.xxx.xxx:~/

    # [Raspberry Pi]
    $ cd ~
    $ ./hello 
    hello world
GitHubでのSSH公開鍵登録の仕方


Githubで新しいレポジトリーを作成した際に、SSH Keyを求められたので、SSH Keyの確認の仕方とその登録方法をまとめました。

その手順に入る前にそもそもSSHってなんぞや？ということで調べました。

SSHとは、Secure Shellの略称で、暗号や認証技術を利用して、安全にリモートコンピューターと通信する為のプロトコルだそうです。

つまりざっくりしまえば、安全な通信手順です。
さらに実際に通信で送られる情報の暗号化する方法はまた別にあります。
以下の2種類です。

1.公開鍵暗号方法
公開鍵と秘密鍵を生成。公開鍵は暗号文を作成するのに使い、秘密鍵はその暗号文からメッセージを復元するのに使う。
2.共通鍵暗号方法
暗号化に用いる鍵と同一、または、暗号化鍵から容易に導出可能な値を復号鍵として用いる。

SSHはこの２種類を巧みに2つの方式を合わせて暗号化通信をしているそうです。

GitHubを利用する際は、まずSSHで使用される公開鍵と秘密鍵のペアを生成します。公開鍵をGitHubのサーバーに送り、秘密鍵は自身のローカルに保存します。

まずは、
`ssh-keygen`を叩きkeyを生成します。
生成したら、` cat ~/.ssh/id_rsa.pub` を叩き、表示される公開鍵をコピーします。

あとは、ブラウザでGitHubにアクセスし、Account Setting->SSH Keys->Add SSH KeyのKeyのとこにコピーして完了です。
Puppet

#テスト環境

| 役割 | ホスト名                  | IP           | OS        |
|:--   |:--                       |:--           |:--:       |
| server | puppet-master.localhost  | 172.16.0.200 | CentOS6.5 |
| client | puppet-client.localhost  | 172.16.0.201 | CentOS6.5 |

#puppet-server
##【puppet-master.localhost】puppet-serverのインストール
1.puppetリポジトリの追加
2.puppet-serverのインストール

```shell-session:shell
rpm -ivh http://yum.puppetlabs.com/puppetlabs-release-el-6.noarch.rpm
yum install -y puppet-server
```

##【puppet-master.localhost】 site.pp編集

```shell-session:shell
vi /etc/puppet/manifests/site.pp
```
>
```text:site.pp
#----------------------------------------------------------
# ALLOW_VIRTUAL
#----------------------------------------------------------
Package {
    allow_virtual => true,
}
>
#----------------------------------------------------------
# PACKAGES　(yum install するもの)
#----------------------------------------------------------
class packages {
    package { "vim":
        ensure => installed,
    }
    package { "screen":
        ensure => installed,
    }
}
>
#----------------------------------------------------------
#  FILES (ファイルを配布するもの)
#----------------------------------------------------------
class files {
    file { '/etc/vimrc':
            owner  => 'root',
            group  => 'root',
            mode   => '644',
            source => "puppet:///files/vimrc",
    }
    file { '/etc/screenrc':
            owner  => 'root',
            group  => 'root',
            mode   => '644',
            source => "puppet:///files/screenrc",
    }
}
>
#----------------------------------------------------------
# localhost は packages filesを行う
#----------------------------------------------------------
node /.*\.localhost$/ {
    include packages
    include files
}
```

##【puppet-master.localhost】 ファイルサーバーの設定

```shell-session:shell
vi /etc/puppet/fileserver.conf
```
>
```text:fileserver.conf
[files]
    path /etc/puppet/files
        allow *
```

##【puppet-master.localhost】 配布ファイルの設置

```shell-session:shell
cp -av /etc/vimrc /etc/puppet/files
cp -av /etc/screenrc /etc/puppet/files
```

##【puppet-master.localhost】puppet-server の起動

```shell-session:shell
service puppetmaster start
```

#puppet-client
##【puppet-client.localhost】puppetのインストール

```shell-session:shell
rpm -ivh http://yum.puppetlabs.com/puppetlabs-release-el-6.noarch.rpm
yum install -y puppet
```

##【puppet-client.localhost】署名リクエスト
puppet-serverに対して署名するようリクエスト

```shell-session:shell
puppet agent --test --server puppet-master.localhost --noop
```

##【puppet-master.localhost】署名リクエストの署名
署名リクエストの確認
署名リクエストの署名
署名リクエスト一覧確認

```shell-session:shell
puppet cert --list
puppet cert sign puppet-client.localhost
puppet cert --list --all
```

##【puppet-client.localhost】同期処理
同期テスト
同期実行

```shell-session:shell
puppet agent --test --verbose --server=puppet-master.localhost --noop
puppet agent --test --verbose --server=puppet-master.localhost
```
gemでインストールしたパッケージの在処

```
gem environment

RubyGems Environment:
  - RUBYGEMS VERSION: 2.2.2
  - RUBY VERSION: 2.1.2 (2014-05-08 patchlevel 95) [x86_64-linux]
  - INSTALLATION DIRECTORY: /usr/local/rbenv/versions/2.1.2/lib/ruby/gems/2.1.0
  - RUBY EXECUTABLE: /usr/local/rbenv/versions/2.1.2/bin/ruby
  - EXECUTABLE DIRECTORY: /usr/local/rbenv/versions/2.1.2/bin
  - SPEC CACHE DIRECTORY: /root/.gem/specs
  - RUBYGEMS PLATFORMS:
    - ruby
    - x86_64-linux
  - GEM PATHS:
     - /usr/local/rbenv/versions/2.1.2/lib/ruby/gems/2.1.0
     - /root/.gem/ruby/2.1.0
  - GEM CONFIGURATION:
     - :update_sources => true
     - :verbose => true
     - :backtrace => false
     - :bulk_threshold => 1000
  - REMOTE SOURCES:
     - https://rubygems.org/
  - SHELL PATH:
     - /usr/local/rbenv/versions/2.1.2/bin
     - /usr/local/rbenv/libexec
     - /usr/local/rbenv/plugins/ruby-build/bin
     - /usr/local/rbenv/bin
     - /usr/local/rbenv/shims
     - /usr/local/rbenv/bin
     - /usr/local/sbin
     - /usr/local/bin
     - /sbin
     - /bin
     - /usr/sbin
     - /usr/bin
     - /root/bin

```

インストールしたパッケージファイルの環境を確認

```
- GEM PATHS:
     - /usr/local/rbenv/versions/2.1.2/lib/ruby/gems/2.1.0
     - /root/.gem/ruby/2.1.0
```

インストールした直後はgemでインストールしたパッケージのコマンドが使用できなかったが、exitして、もう一度サーバーに入ったら使用できるようになっていました。
環境変数pathが自動的に通ったのかな？
続・PowerShellでwebスクレイピング

#[前回](http://qiita.com/ctrl_alt_george/items/8cfdd6161c0dcbd9dd50)との違い
[前回](http://qiita.com/ctrl_alt_george/items/8cfdd6161c0dcbd9dd50)はSystem.Net.HttpとSGMLReaderを用いてC#的にスクレイピングした。
今回はPowerShellらしくInvoke-WebRequestを利用する。

#コード

```ps1

$data = Invoke-WebRequest -Uri "https://www.google.co.jp/trends/"
$data.get_AllElements() | ?{
	$_.class -eq "hottrends-single-trend-title"
} | %{
	Write-Host $_.InnerText
}

```

#考察
便利すぎて鼻血出るかと思った。
cocos2d-xの通信で転送量を取得出来るように(お手軽に)

cocos2d-xにあるHttpRequestとHttpClientを使ったダウンロード通信をした際に、
通信中の転送量の状態が取得出来ない為、HttpClientに少し追加をして
取得できるようにしちゃいます。
※libcurlで0から作るのが面倒くさい人向け
※cocos2dのHttpClient自体を編集することになるので自己責任で

あと、転送量を知りたいのは大体GET通信だけだと思うので、
HttpClientのGETにだけ追加したいと思います。

#使用バージョン
cocos2d-x 3.2

#追加方法

##network/HttpClient.cppのprocessGetTaskに処理の追加
network/HttpClient.cppのprocessGetTaskに処理の追加をします。
CURLOPT_NOPROGRESSをfalseにすることで、CURLOPT_PROGRESSFUNCTIONのコールバックを有効にすることが出来ます。
CURLOPT_PROGRESSFUNCTIONのコールバックに、現在の転送しているサイズ等が引数として入ります。
CURLOPT_PROGRESSDATAは、CURLOPT_PROGRESSFUNCTIONのコールバックの第1引数に入るポインタの設定が出来ます。
今回は使わないのでnullptrを設定しています。

```cpp:network/HttpClient.cpp
bool ok = curl.init(request, callback, stream, headerCallback, headerStream, errorBuffer)
            && curl.setOption(CURLOPT_FOLLOWLOCATION, true)
+           && curl.setOption(CURLOPT_NOPROGRESS, false)
+           && curl.setOption(CURLOPT_PROGRESSFUNCTION, getProgressValueCallBack)
+           && curl.setOption(CURLOPT_PROGRESSDATA, nullptr)
            && curl.perform(responseCode);
```

##追加した処理に対応した、コールバック関数と、転送量の状態を保存しておく変数とget/setを追加
追加した処理に対応した、コールバック関数と、転送量の状態を保存しておく変数とget/setを追加します。

###転送量状態を保存しておく変数とget/setの追加

```cpp:network/HttpClient.h
	inline int getTimeoutForRead() {return _timeoutForRead;};
+	// 転送量%を取得
+	inline int getProgressValue() {return _progressValue;};
+	// 転送量%を設定
+	inline void setProgressValue(int value) {_progressValue = value;};

private:
    int _timeoutForConnect;
    int _timeoutForRead;
+   int _progressValue;	// 転送量状態.
```

###コールバック関数の追加

コールバックの引数には、CURLOPT_PROGRESSDATAで指定したポインタ、受信総量、現在の受信量、送信総量、現在の送信料が返って来ます。
これでは、dlnowとdltotalから、0〜100%の整数値で算出しています。
変数の型を変えて少数点まで出したり、変数を増やして、個別に値を取るといった実装も可能です。

```cpp:network/HttpClient.cpp
+static int getProgressValueCallBack(void *clientp, double dltotal, double dlnow, double ultotal, double ulnow)
+{
+	// 算出計算後、setで値を設定
+	HttpClient::getInstance()->setProgressValue((dlnow/dltotal)*100);
+	
+	return 0;
+}
```

これで、実装自体は完了です。

#使用方法

通信開始後、
HttpClient::getInstance()->getProgressValue()
を使用することで値が取得出来ます。
Yokohama.rb Monthly Meetup #47 memo


# 難しい検索をするソリューション

* Elasticsearch.org ( 新しい。おすすめらしい )
* Apache Solr ( Elasticsearch がなかった時は これが主流だった )

# File

## size?

```ruby
File.size?("no such file") #=> nil
File.size?("zero_size_file") #=> nil
File.size?("one_byte_file") #=> 1
```

size? は、サイズがゼロだと `0` ではなく `nil` を返す。
意外。

## size? と zero? と exist?

| |size?|zero?|exist?|
|--:|--:|--:|--:|
|サイズ1のファイル|1|false|true|
|サイズ0のファイル|nil|true|true|
|リンク切れのsymlink|nil|false|false|
|存在しないファイル|nil|false|false|
|アクセス権のないファイル|nil|false|false|

存在しても、アクセス権がないと `exist?` は `false` になる。
実装する人の気持ちになればあたりまえだけど、意外かもしれない。

あと、リンク切れのシンボリックリンクの `exist?` が `false` になるので、 `Dir.glob` で得られたファイル名だからといって、 `exist?` が `true` とは限らない。要注意かも。

TODO ( あるいは、緩募 ): Windows で、実在しないドライブとか、実在するけどメディアがささっていないドライブでの動作

## cmp

```ruby
File.cmp( "some_file", "another_file" ) #=> true / false
```

私としては、true/false を返すなら、 cmp ではなくで same? のような名前がいいなぁ。

cmp は `<=>` のような動作をする気がしてしまう。

## link

Mac でも、普通のSDカード上とかでやると、ハードリンクは作れない。エラーになる。

```ruby
File.link( "hoge", "fuga" ) #=> Errno::ENOTSUP: Operation not supported @ sys_fail2 - (hoge, fuga)
```

あと。
http://www.atmarkit.co.jp/ait/articles/1306/07/news111.html
によると、Vista 以降にはシンボリックリンクがあるらしい。

まだ試していない。

※ SDカードのファイルシステムは、"exFAT"( http://ja.wikipedia.org/wiki/ExFAT ) らしい。

## stat と inspect

pry 上で

```ruby
File.stat( "/" )
```

すると、 `mode` 、 `uid` や `gid` の辺りに

```
mode=040755 (directory rwxr-xr-x),
nlink=34,
uid=0 (root),
gid=0 (wheel),
```

という具合に便利な情報が出る。
これは `pp` の機能。競合の `ap` (awesome_print) にはこの機能はない。

# FileUtils

## mkdir_p

mkdir_p の p ってなんだ、という話になって。
調べてないけど Parent の p かなぁということで落ち着いた。

`mkdir_p` と `mkpath` は同じメソッドの別名なんだけど、
pry で `$ FileUtils#mkpath` すると、 `mkdir_p` が出るので、真の名は mkdir_p らしい。

# いろいろなデバイス

キャラクタデバイスの例としては、 `/dev/urandom` を挙げた。
ブロックデバイスの例としては `/dev/disk0` を挙げた。
`File.pip?( path )` と `File.socket?( path )` が true になるような例は挙げられなかった。


# ファイルの同一性

Windows には SUBST と JOIN ( http://en.wikipedia.org/wiki/SUBST )があり、その上 short file name ( 「PROGRA~1」のたぐい)もあるので、パスの比較でファイルの同一性を判断するのは得策じゃないと思う。

じゃあどうするかというとやっぱり `GetFileInformationByHandle` にいくしかないんじゃないかなぁ。

とはいえ、試してない。
要素内の変更をフックしたい

JS、[MutationObserver](https://developer.mozilla.org/ja/docs/Web/API/MutationObserver)で、要素内の変更をフック出来て便利。

AngularJS、要素の大きさとか中身の変更を $watch できないと思うけど、これ使えば何とかなる。
試しにディレクティブ書いてみた。
http://jsfiddle.net/962e7dpv/

![hook.gif](https://qiita-image-store.s3.amazonaws.com/0/29342/b239a812-278b-a9d1-9d29-924f739109f5.gif)

&lt;hr&gt;の下のdivを監視していて、変更があるとbodyの色がランダムに変わる。
フォームいじると監視してるdivに変更を加えられる。

ディレクティブの部分はこんな感じ。

```js
angular.module('mgApp', [])
  .directive('mgHook', function () {
    return {
      link: function ($scope, $element, $attrs) {
        new MutationObserver(function () {
          $scope.$eval($attrs['mgHook']);
        }).observe($element[0], {
          attributes: true,
          characterData: true,
          childList: true,
          subtree: true
        });
      }
    };
  });
```

↑は他のdirectiveと併用する時独立したscope使うと怒られるから$evalとかやってる  
別に併用しないなら↓でも良さそう

```js
angular.module('mgApp', [])
  .directive('mgHook', function () {
    return {
      scope: {
        hook: '&mgHook'
      },
      link: function ($scope, $element, $attrs) {
        new MutationObserver(function () {
          $scope.hook();
        }).observe($element[0], {
          attributes: true,
          characterData: true,
          childList: true,
          subtree: true
        });
      }
    };
  });
```

## 注意
フックして呼ぶ関数内で監視してる要素を変更すると無限ループになる
observe()のパラメータ変更するなりして対処すると良さそう
ubuntu 14.04 64-bit で Wine

64ビット版の Ubuntu でソフトウェアセンターから wine をインストールすると、
それはデフォルトで 64ビットWindowsエミュレータになる。
正直それでは動かないソフトが多いので wine は32ビットとして使いたい。
その場合は環境変数 WINEARCH=win32 を定義するとそのように動く。

```
$ export WINEARCH=win32 winecfg
```

64ビットwineとして作った .wine は WINEARCG=win32 とすると使えなくなるので rm なり mv なりする。

.profileなどに追記しておくとよさそう。
[2014年] memcached-toolを使ってmemcachedのデータをエクスポートする

サーバのセッション管理にmemcachedを使ってたのですが
サーバが落ちたらセッション全部消えてしまうことから
repcachedを使ってレプリケーションをすることにしました。

そうするとmemcachedに乗ってるデータをrepcachedに移し変えなければならないため、
memcached-toolを使ってDUMPし、データをインポートしました。
その際、有効期限が無期限のデータが消えるという事象に遭遇したため、そのメモです。
* * *
Dumpにはこのツールを利用させてもらうことにしました。

> ### memcached-tool
> https://github.com/memcached/memcached/blob/master/scripts/memcached-tool

使い方は以下のような形です。

```bash
# memcachedのデータをダンプ
memcached-tool localhost:11211 dump > 11211.dump

# インポートする時
cat 11211.dump | nc localhost 11211
```
しかし前述したように使ってみるとちょっとした問題が発生しました。
memcachedの中に有効期限が無期限で設定されていたデータがあったのですが、
それらがインポートしたときにすべて消えていました。

よくよく調べてみると、memcachedは有効期限を0に設定したデータを入れたとき、
内部的にはmemcached起動時のタイムスタンプで設定されているようです。

それがそのままmemcached-toolで出力されたため、
有効期限が過去の値で設定されてしまい、
入れるそばから消されるというなんとも残念な挙動をしていました。
(memcachedはgetしたときに有効期限が切れていると削除するため正確な表現ではないですが)

そこでこのmemcached-toolを少し修正して無期限のデータに対応しました。
83行目あたりでstats itemsを投げていますが、 
その前にmemcachedの起動してからの時間と
statsコマンドを投げた瞬間のタイムスタンプを取得しておきます。
(これらを使って運用中のmemcachedがいつ起動されたのかを判定します)

```pl
# get uptime
print $sock "stats\r\n";
my $uptime;
my $time;
while (<$sock>) {
    last if /^END/;
    if (/^STAT uptime (\d*)/) {
        $uptime = $1;
    }
    if (/^STAT time (\d*)/) {
        $time = $1;
    }
}
my $started_at = ($time - $uptime);
```
そして117行目あたりで作っているaddコマンドを変更します。

```pl
my $exptime = $keyexp{$k} != $started_at ? $keyexp{$k} : 0;
#print "add $k $flags $keyexp{$k} $len\r\n$val\r\n";
print "add $k $flags $exptime $len\r\n$val\r\n";
```

こんな感じで有効期限が0でsetされているデータを拾い上げました。
Mac へ MySQL を Homebrew でインストールする手順


Railsのアプリケーションで MySQL を利用しよう(実稼働環境では AWS の RDS を使いたいので)と思い、まずは MacBook Pro に MySQL をインストールしてみたので手順をメモ。

# 前提

- ローカルの環境(Mac)に MySQL をインストールします。
	- 今回の OS X のバージョンは `OS X 10.9.4 (Mavericks)` です。
- Homebrew でインストールします。
	- Homebrew自体が入ってなければ、Homebrewの[公式ページ](http://brew.sh/index_ja.html)どおり、次のようにインストール

		```shell
		$ ruby -e "$(curl -fsSL https://raw.github.com/Homebrew/homebrew/go/install)"
		```

		※ 執筆時とコマンド内容が変わってるかもしれないので、公式ページを確認ください。
		※ 事前に [Xcode](https://developer.apple.com/xcode/downloads/) のインストール(および起動して許諾への同意)が必要

# 手順

## MySQL のインストール

- 下記コマンドを実行します。

	```shell
	$ brew update
	$ brew install mysql
	```

	するとインストールが始まります。

	![スクリーンショット 2014-08-09 17.57.12.png](https://qiita-image-store.s3.amazonaws.com/0/35733/eb33a71c-7175-32b0-9595-c22ffb6c9413.png "スクリーンショット 2014-08-09 17.57.12.png")

- インストールが終わったら、内容を見てみます。

	```shell
	$ brew info mysql
	```

	私の場合は、次のように表示されました。バージョン `5.6.20` がインストールされたようです。

	![スクリーンショット 2014-08-09 18.15.56.png](https://qiita-image-store.s3.amazonaws.com/0/35733/bb4998cf-4c86-5b0a-f51d-299059388f1b.png "スクリーンショット 2014-08-09 18.15.56.png")

- この画面の内容をみると、どうやら `$ mysql.server start` で MySQL の起動、`$ mysql -uroot` で接続できそうなので、動作確認してみます。

	```shell
	$ mysql.server start

	Starting MySQL
	. SUCCESS! 
	```
	

	```shell
	$ mysql -uroot

	Welcome to the MySQL monitor.  Commands end with ; or \g.
	Your MySQL connection id is 1
	Server version: 5.6.20 Homebrew
	
	Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.
	
	Oracle is a registered trademark of Oracle Corporation and/or its
	affiliates. Other names may be trademarks of their respective
	owners.
	
	Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
	
	mysql> 
	```

	接続できたようです。いったん、`mysql>` プロンプトで `exit` を入力し接続を切ります。

- また、上の画面で、ログイン時に MySQL を起動する方法が書いてありますが、停止できなかったり色々あるらしいので、今回は MySQL を使いたいときに `$ mysql.server start(停止は stop)` でいいことにします。

## MySQL のセキュリティ設定

このままでも使えるのですが、一応、root のパスワードを変更したりします。コマンドラインで、

```shell
$ mysql_secure_installation
```

- 基本的に全て Yes で大丈夫だと思います。次の項目が実施されます。
	- root ユーザのパスワード設定
	- anonymous ユーザの削除
	- root ユーザがリモートサーバからログインできないようにする
	- テスト用のデータベースと接続？を削除
- 設定が終わったら、今後は次のように MySQL へ接続します。

	```shell
$ mysql -uroot -p
Enter password:[設定したパスワード]
	```

# ほか

いろいろ調べるためにググったら、他の人の書いてる手順ではコマンドラインでデータベースの作成が必要だったりしたのですが、今回は `$ brew info mysql` でその旨が表示されませんでしたし、実際にちゃんと使えてるので、MySQL のバージョンによるのかな？

## 追記(2016.08.05)

MySQL のクライアントだけインストールしたい場合は次のようにします。Docker 等で MySQL のサーバが提供されている場合など。

```
$ brew install mysql --client-only
```
chefのssl verify warning


man in the middle atack対策として、chef 11.12系からssl verifyが出来るようになった様です。

> SSL validation of HTTPS requests is disabled. HTTPS connections are still
> encrypted, but chef is not able to detect forged replies or man in the middle
attacks.
> 
> To fix this issue add an entry like this to your configuration file:
> 
> ```
>   # Verify all HTTPS connections (recommended)
>   ssl_verify_mode :verify_peer
> 
>   # OR, Verify only connections to chef-server
>   verify_api_cert true
> ```
> 
> To check your SSL configuration, or troubleshoot errors, you can use the
> `knife ssl check` command like so:
> 
> ```
>   knife ssl check -c /home/webadmin/chef-solo/solo.rb
> ```

ワーニングを放置するのもうざいので、言われた通り設定します。

## 対応

	$ vim .chef/knife.rb
	
	ssl_verify_mode :verify_peer

これでok
App ExtensionでCocoaPods管理しているライブラリを使用する2つの方法

# 修正
[potatotips (iOS/Android開発Tips共有会) 第9回](https://github.com/potatotips/potatotips/wiki/potatotips-9)での発表資料が新しい情報になります。

App ExtensionでCocoaPods管理しているライブラリを使用する方
https://speakerdeck.com/tmnb/app-extensiondecocoapodsguan-li-siteiruraiburariwoshi-yong-surufang

--

iOS8の新機能App Extensionを開発する中で、CocoaPodsで管理しているライブラリを使用したくなるケースが必ずでてくると思います。そこで2つの方法を紹介したいと思います。

※ https://www.facebook.com/groups/ios.dev.jp/permalink/768435093177874/ で質問してフィードバック頂いた内容の詳しいやり方です

# 方法1 : PodsのtargetにExtensionを指定する

おそらく1番お手軽な方法です。
例えばExtentionの名前がWeatherExtentionだった場合、Podfileに

```Podfile
target :WeatherExtention, :exclusive => true do
    pod 'AFNetworking'
end
```
として、pod installします。これだけで使用できるようになります。

※本体側で同じライブラリを使用している場合は、重複して導入されるのでアプリの容量が増える？

# 方法2 : Cocoa Touch Frameworkを作成する

XCode6からCocoa Touch Frameworkを作成できるようになりました。Cocoa Touch Frameworkを作成すると、本体側、Extension側で共通のコードをFramework化する事ができます。このFrameworkにPodsのライブラリを含める方法です。Podsライブラリは作成したFrameworkを通して使用するようになります。

### 1. CoCoa Touch Frameworkを作成する
File > New > Target > Framework & Library > Cocoa Touch FrameworkからFramework targetを作成します。

### 2. Podfileの設定
例えばの1で作成したFramework名がWeatherKitだった場合、Podfileに

```Podfile
link_with 'WeatherKit'
pod 'AFNetworking'
```

として、pod installします。

### 3. FrameworkのヘッダーファイルにPodファイルのヘッダーをimportする
```WeatherKit.h
#import <AFNetworking/AFNetworking.h>
```

### 4. Build Settingsの変更
このままコンパイルすると、エラーになるので本体側、Extention側のBuild Settings > Allow Non-Modular Includes In Framework Modulesの設定をYESにします。

本体側
![a.png](https://qiita-image-store.s3.amazonaws.com/0/30441/76bb0e2d-2bd5-c239-61d0-f240813251be.png "a.png")

Extention側
![b.png](https://qiita-image-store.s3.amazonaws.com/0/30441/ba557eea-c32a-9dfb-12a0-7b0cd02a2812.png "b.png")


### 5. 本体側、Extension側でFrameworkを使用する
あとは、使用したいファイルで

```
@import WeatherKit;
```

とすることで、Podsのライブラリが使用できるようになります。

方法2で動くプロジェクトのサンプルを作ったので、https://github.com/tmnb/WeatherForecast から試せます。
IOS8 beta5のSwift変更点について

## メンバー変数にpublic修飾子が使えなくなった

次の書き方では「internal class canont have a public var」とエラーが出ます。

```swift
public var list:NSMutableArray!
```

修飾子をpublicからinternalに変更したら直りました。

```swift
internal var list:NSMutableArray!
```

**※swiftの修飾子**

+ public : どこからでもアクセス可能
+ internal : 同じターゲットからアクセス可能
+ private : 同じファイル内のみアクセス可能

## 条件分でnil判定は明示的に記述する必要がある

beta4までは以下の条件分でもビルドができた。

```swift
var item:NSMutableDictionary!
if item? {
    item.setObject(contents, forKey: elementName)
}
```

beta5では明示的にnilを明記しないとエラーになる。

```swift
var item:NSMutableDictionary!
if item != nil {
    item.setObject(contents, forKey: elementName)
}
```

## iconが変わった

swiftの仕様とは関係ないけど、、swiftファイルのiconが文字「S」から鳥？に変わった。

![ViewController_swift.png](https://qiita-image-store.s3.amazonaws.com/0/46268/01cb360d-27a3-73b5-0b06-f4efba74845c.png)

## その他

以下の内容を参考
http://qiita.com/susieyy/items/d3013fd04bcb21cd5227
private repository

private なリポジトリの作り方をちょこちょこまとめていこう

docker-registry
=================

mac 上で、boot2docker を利用してprivate なregistryを作ってみた

* 前準備として、これからつくるregistryをinsecure-registryに登録しておく

```
$ boot2docker up
$ boot2docker ssh
$ echo 'EXTRA_ARGS="--insecure-registry 192.168.59.103:5000"' | sudo tee -a /var/lib/boot2docker/profile
$ sudo /etc/init.d/docker restart
```


* docker-registry をインストール・起動
(/var/lib/boot2docker にしとかないと、boot2docker の再起動で消えます)

```
$ docker pull registry
$ docker run -d -p 5000:5000 -v /var/lib/boot2docker/registry:/tmp/registry registry
```


ブラウザで、http://192.168.59.103:5000 にアクセスして、"\"docker-registry server\""が表示されることを確認
(なんかしてたら、一回目起動に失敗するようになった。これっぽい https://github.com/docker/docker-registry/issues/892 )

* golang のimage があったので、試しに登録してみた

```
$ docker tag golang:1.3 192.168.59.103:5000/golang:1.3
$ docker push  192.168.59.103:5000/golang:1.3
```

ブラウザで、http://192.168.59.103:5000/v1/search にアクセスして、golang があることを確認


RPM リポジトリの作成
=================

* /var/www/rpmrepo にrpmを配備しとく

``` 
# yum install createrepo
# createrepo /var/www/rpmrepo
```

* http の公開

```
# cat << EOT > /etc/httpd/conf.d/rpmrepo.conf
Alias /rpmrepo/ "/var/www/rpmrepo/"
EOT
# service httpd restart 
```

* リポジトリの登録

```
# cat << EOT > /etc/yum.repo.d/myreop.repo
[myrepo]
name=My private repo
baseurl=http://xx.xx.xx.xx/rpmrepo/
#baseurl=file:///var/www/rpmrepo
EOT
```

/var/www/rpmrepo にrpm を追加したとき
-------

```
# createrepo --update /var/www/rpmrepo
```


gem リポジトリの作成
======================

* geminabox のインストール

```
# gem install geminabox
# cat << EOT > config.ru
require "rubygems"
require "geminabox"

Geminabox.data = "/var/geminabox-data"
run Geminabox
EOT
# rackup  <= 起動することを確認
```

* サーバ起動

```
# gem install unicorn 
# cat << EOT > unicorn.conf
worker_processes 2
listen '/tmp/unicorn.sock'
pid    '/tmp/unicorn.pid'

stderr_path File.expand_path('unicorn.log', File.dirname(__FILE__))
stdout_path File.expand_path('unicorn.log', File.dirname(__FILE__))
preload_app true
EOT
# unicorn -c unicorn.conf -l 3000  -D <= port 3000 でデーモン起動
```

* gem の登録
    * Web ページからupload か
    * gem inabox xxxx.gem か
    * gem push xxx.gem --host HOST






github 系
==================

使ったことあるやつだけ

gitbucket
-----------------

* インストールがすごい簡単
* 最近 plugin 機能が実装された
* レビュー機能が充実してくれるとうれしい

https://github.com/takezoe/gitbucket


gitlab
-----------------

* 機能十分
* 以前はインストール大変だったけど、chef のレシピが公開されて大分楽になった

https://gitlab.com/gitlab-org/cookbook-gitlab/blob/master/README.md



オンラインストレージ
===================

ownCloud
-----------

* PHP系のオンラインストレージ
* 以前一回インストールしてみただけで、あんま使ってない

https://owncloud.org
【MySQL】エラー対応時のメモ集 -v0.1

前回、[MongoDBのエラー対応時のメモ集 -v0.1](http://qiita.com/pollseed/items/c901322ae1c8a7b18f3e)を作成しましたので、今回はそれのMySQL版を作りました。

こちらもエラーが出たら、追記していくつもりです。エラー集のようなものを完成形としています。

実際はこちらを見て解決している→[公式リファレンス](http://dev.mysql.com/doc/refman/5.1-olh/ja/functions.html)

#0.更新履歴
|日付|該当箇所|内容|
|:--:|:--:|:--:|
|2014.08.10|エラーログ|検索で引っかかるように全部のせてましたが、非常に見難いため、無駄なログを削除


#1. railsにgem mysql2を入れ {$ rails s} or {$ rake db:migrate}時のエラー
##エラーログ

```
/usr/local/Cellar/ruby/2.1.1/lib/ruby/gems/2.1.0/gems/bundler-1.6.3/lib/bundler/runtime.rb:222: warning: Insecure world writable dir /usr//local/lib in PATH, mode 040757
/usr/local/Cellar/ruby/2.1.1/lib/ruby/gems/2.1.0/gems/mysql2-0.3.16/lib/mysql2.rb:8:in `require': dlopen(/usr/local/Cellar/ruby/2.1.1/lib/ruby/gems/2.1.0/extensions/x86_64-darwin-13/2.1.0/mysql2-0.3.16/mysql2/mysql2.bundle, 9): Library not loaded: libmysqlclient.18.dylib (LoadError)
  Referenced from: /usr/local/Cellar/ruby/2.1.1/lib/ruby/gems/2.1.0/extensions/x86_64-darwin-13/2.1.0/mysql2-0.3.16/mysql2/mysql2.bundle
  Reason: image not found - /usr/local/Cellar/ruby/2.1.1/lib/ruby/gems/2.1.0/extensions/x86_64-darwin-13/2.1.0/mysql2-0.3.16/mysql2/mysql2.bundle
        from /usr/local/Cellar/ruby/2.1.1/lib/ruby/gems/2.1.0/gems/mysql2-0.3.16/lib/mysql2.rb:8:in `<top (required)>'
```

##原因
・ Library not loaded: libmysqlclient.18.dylib (LoadError)

・ Reason: image not found - /usr/local/Cellar/ruby/2.1.1/lib/ruby/gems/2.1.0/extensions/x86_64-darwin-13/2.1.0/mysql2-0.3.16/mysql2/mysql2.bundle

##解決策
単純に、Loadできないライブラリにシンボリックリンクをはればおｋです。

```
$ sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib
```

#2. bin/rake db:migrate RAILS_ENV=development

##エラーログ

```
undefined method `double' for #<ActiveRecord::ConnectionAdapters::TableDefinition:0x007fb336642cd8>マイグレーションファイル.rb:6:in `block in change'

undefined method `int' for #<ActiveRecord::ConnectionAdapters::TableDefinition:0x007fb336642cd8>マイグレーションファイル.rb:7:in `block in change'

```

##解決策
該当マイグレーションファイル
・double型をfloatにする
・int型をintegerにする

#3. テーブルがないdoesn't exist

##エラーログ

```
Mysql2::Error - Table 'スキーム名.テーブル名' doesn't exist:
```

##解決策
・該当スキームに該当テーブルを作成する
・既にあるテーブル名に対して入れたい場合はモデル部分を編集

```models/sample.rb
class Sample < ActiveRecord::Base
  self.table_name = "sample_test"
end
```

#4. 範囲を超えた値を挿入した

##エラーログ

```
Mysql2::Error - Out of range value for column 'sample_value' at row 1:
```

##原因
・sample_valueの値に範囲を超えたものがinsertされたこと

##解決策
・sample_valueの型を見なおして修正する
→私の場合はDecimal(8, 2)という型に123456.789という値をinsertしようとしていたのでDecimal(9, 3)にして無事解決です

#5. 日付
##昨日の日付に一致するレコードを取得する

```
select * from sample_table where sample_column = curdate() - 1;
```

#6. insert時のエラー

```
c.j.b.ConnectionHandle - Database access problem. Killing off this connection and all remaining connections in the connection pool. SQL State = HY000
```

##解決策
・AIがPKについていなくて落ちていたようだ。

```sql
ALTER TABLE `information_schema`.`INNODB_BUFFER_PAGE` 
CHANGE COLUMN `POOL_ID` `POOL_ID` BIGINT(21) UNSIGNED NOT NULL AUTO_INCREMENT ;

```
docpad runできないとき

## 解決方法
`$  docpad run --offline`

## どうなってた？

`$ docpad run`　とターミナルで入力したら

```
$ docpad run
info: Welcome to DocPad v6.69.0 (global installation: /Users/***/.nvm/v0.10.29/lib/node_modules/docpad)
notice: If everyone who saw this message donated $1/week, maintaining DocPad would become sustainable: http://docpad.org/donate
info: Contribute: http://docpad.org/docs/contribute
info: Plugins: 
info: Environment: development
Before we continue, have you read and agree to DocPad's Terms of Service (http://bevry.me/tos) and Privacy Policy (http://bevry.me/privacy)? [Y/n] Y
```

と出て、何も起こらない

## これ見た
[https://github.com/bevry/docpad/issues/854](https://github.com/bevry/docpad/issues/854)
ひたすら標準入力を待ち続けたかった


#はじめに
普段解いている問題であれば、いくつ入力が来るか分かっているため、その数だけループを回せば良いはず。（例：http://abc008.contest.atcoder.jp/tasks/abc008_2 ）
でも、もしそうでなかったらどうすれば良いのか分からなかった。
なのでちょっとやってみた。

#作戦を考える
「とりあえずひたすら入力待ち状態にしよう」という案が出てきたので、書いてみた。
たぶんもっと良い方法があるため、ステキRubyistの皆様に教えて頂きたい所存である。

#こんなコード書いた

```ruby:stdin.rb
STDIN.each_line do |line|
	puts line
end
```

#さいごに
たぶんもっと良い方法があるので、調べてみなければ。という感じです。
Railsのmodelで長い文字列を扱う時はstringではなくtextを使おう

追記
Rails 4.2だとこの問題は解決されているようです。

[Rails 4.2 で postgresql を使う場合の注意事項 - おもしろwebサービス開発日記](http://blog.willnet.in/entry/2015/08/31/093741)

-

何かのトークンなんかを保存する時に、データ型をstringでやると、文字数が255より大きくになった時に死ぬ。

例えば、

```
rails generate User name:string token:string
```

みたいな感じでやると、

```
ActiveRecord::StatementInvalid: PG::StringDataRightTruncation: ERROR:  value too long for type character varying(255)
```

とか出てきて怒られた。（PG::StringDataRightTruncationとか出てきてるし、
PostgreSQLだけの話なのかもしれない。

ので、くっそ長い文字列をRailsで扱う時は、

```
rails generate User name:string token:text
```

みたいな感じで text でやってあげましょう。
[PR] Lua でエイリアス定義できるようになったよー [NYAGOS]

[NYAGOS なら Unicode ファイル名にも自信が持てます](http://qiita.com/zetamatta/items/c66197b37244e7b0804c)

> Lua で（カレントディレクトリや環境変数を操作できるような）内蔵コマンドも「まだ」作れない。

**[NYAGOS](http://www.nyaos.org/index.cgi?p=NYAGOS)でも、できるようになったよー**

[NYAOS-3](http://www.nyaos.org/index.cgi?p=NYAOS+3000) と違って、エイリアスとLua関数を等価的に扱えるぞ！

---

通常は NYAGOS ではエイリアスは `nyagos.alias("名前","コード")` と定義できるんじゃが。
起動時に読み込まれる nyagos.lua にて

```lua:nyagos.lua
local function split(equation)
    local pos=string.find(equation,"=",1,true)
    if pos then
        local left=string.sub(equation,1,pos-1)
        local right=string.sub(equation,pos+1)
        return left,right,pos
    else
        return nil,nil,nil
    end
end

function alias(equation)
    if type(equation) == 'table' then
        for left,right in pairs(equation) do
            nyagos.alias(left,right)
        end
    else
        local left,right,pos = split(equation)
        if right then
            nyagos.alias(left,right)
        end
    end
end
```

と定義しているので

```lua:nyagos.lua
alias{
    assoc='%COMSPEC% /c assoc $*',
    attrib='%COMSPEC% /c attrib $*',
    copy='%COMSPEC% /c copy $*',
    del='%COMSPEC% /c del $*',
    dir='%COMSPEC% /c dir $*',
    ['for']='%COMSPEC% /c for $*',
    md='%COMSPEC% /c md $*',
    mkdir='%COMSPEC% /c mkdir $*',
    mklink='%COMSPEC% /c mklink $*',
    move='%COMSPEC% /c move $*',
    open='%COMSPEC% /c for %I in ($*) do @start "%I"',
    rd='%COMSPEC% /c rd $*',
    ren='%COMSPEC% /c ren $*',
    rename='%COMSPEC% /c rename $*',
    rmdir='%COMSPEC% /c rmdir $*',
    start='%COMSPEC% /c start $*',
    ['type']='%COMSPEC% /c type $*',
    ls='ls -oF $*',
}
```

と書く事ができる。

※ Lua では、テーブル一つだけを引数に取る関数コール「`f( {a=b} )`」を「`f{a=b}`」と記述することが出来る。 

んでもって、今日書いたばかりのコードによってじゃ…

```lua:.nyagos
alias{
    hogehoge = function(...) 
        local args={...}
        for i=1,#args do
            print(string.format("[%d]=%s",i,args[i]))
        end
    end 
}
```

と書く事ができるんじゃ。(※2015.04.09追記参照)

```text
<C:\Opt>
$ alias hogehoge
hogehoge=<<Lua-function>>
<C:\Opt>
$ hogehoge 1 2 3 4 5
[1]=hogehoge
[2]=1
[3]=2
[4]=3
[5]=4
[6]=5
<C:\Opt>
```

すごいじゃろ、すごいじゃろ…すごいと言ってくれぇ…

----

ちなみに [NYAOS-3](http://www.nyaos.org/index.cgi?p=NYAOS+3000) でも同様のことはできるが、[NYAOS-3](http://www.nyaos.org/index.cgi?p=NYAOS+3000) ではエイリアスは nyaos.alias、lua関数は nyaos.command と別に分けていた。

----

しかし、この記事、Goタグついてるけど、Goネタが全然書いてない。えー、一応申し上げますと、NYAGOSはGo製のWindows向けコマンドラインシェルです。


**※(2015.04.09) 追記、現行バージョンでは次のように書く必要があります。**

```lua
alias{
    hogehoge = function(args) 
        for i=1,#args do
            print(string.format("[%d]=%s",i,args[i]))
        end
    end 
}
```
ClojureでMessagePackを使う

clojure使いはアプリケーション間やWebAppのクライアント-サーバー間のデータのやり取りに[edn](https://github.com/edn-format/edn)を使う場合が多いかと思います。
ただ、異なる言語で書かれたアプリケーション間でデータをやり取りする場合やネットワーク通信量、シリアライズに必要なコストを抑えたい場合は[MessagePack](http://msgpack.org/)を使うのが良さそうです。

# 準備

clojureには[clojure-msgpack](https://github.com/edma2/clojure-msgpack)というライブラリがあるのでこれを利用します。
leiningenで新たにプロジェクトを作り、project.cljのdependenciesに追加します。

```clj
(defproject test_messagepack "0.1.0-SNAPSHOT"
  :description "FIXME: write description"
  :url "http://example.com/FIXME"
  :license {:name "Eclipse Public License"
            :url "http://www.eclipse.org/legal/epl-v10.html"}
  :dependencies [[org.clojure/clojure "1.6.0"]
                 [clojure-msgpack "0.1.0-SNAPSHOT"]])
```

# replで試す

replを使ってgithubにあるUsageを試してみましょう。

```bash
$ lein repl

user=> (require '[msgpack.core :refer :all])
nil
user=> (pack {:compact true :schema 0})
#<byte [] [B@25bd137c>
user=> (defrecord Employee [name])
user.Employee
user=> (defext Employee 1 [e]
  #_=>   (.getBytes (:name e)))
nil

user=> (let [bob (Employee. "Bob")
  #_=>       bytes (pack bob)]
  #_=>   (map #(format "0x%x" %) bytes))
("0xc7" "0x3" "0x1" "0x42" "0x6f" "0x62")
user=> (pack (->Extension 1 (.getBytes "Bob")))
#<byte [] [B@49592ea1>

user=> (pack {:compact true :schema 0})
#<byte [] [B@8582ec6>

user=> (unpack (pack {:compact true :schema 0}))
{ "compact" true, "schema" 0}
user=>]]]
```

とても簡単。
基本的にpackしたbyte列をネットワーク等で送って、受け取った側でunpackすればよいようです。

TODO: ネットワークを使用したサンプルを書く。
TODO: jsonとの性能比較を検証する

ブラウザ等のクライアント側でunpackするにはjavascriptで以下のライブラリを使えばいいみたいです。
[msgpack-javascript](https://github.com/msgpack/msgpack-javascript)
【AzureSDK2.3・AzureStorageExploer】DevStorage Not Detected エラーの対応方法

#DevStorageに接続できない

AzureStorageExploerでDevStorageへ接続しようとした際に、下記のエラーが出て、接続できないことがある。

![dc0b6d614029b44528477761b02baa55.png](https://qiita-image-store.s3.amazonaws.com/0/31862/c5598cfd-6b21-9360-50ba-0a297c24476b.png)

#対応策

- Storage Emulator, AzureStorageExploerを閉じる
- C:\Program Files\Microsoft SDKs\Windows Azure\Emulator\devstore へ移動
- DSInit.exeを実行

![7163fdacd17399262cccbe944f429d74.png](https://qiita-image-store.s3.amazonaws.com/0/31862/0f248b6f-b328-128f-01e5-ba611643e8c9.png)

![18964ab69c741d7809393e275d5e4b4a.png](https://qiita-image-store.s3.amazonaws.com/0/31862/c69e1f59-397b-8206-df8d-9b677be59b2e.png)


- DSServiceLDB.exeを実行

![19c8a6729d25813c721ffab15efc1a1a.png](https://qiita-image-store.s3.amazonaws.com/0/31862/7b85285e-4a62-12ff-8b6c-a65e06e82151.png)

- AzureStorageExploler開く
- Add Account > DevStorage

![eb88d6a609d2ad9a6ed3b9dc6ed24b76.png](https://qiita-image-store.s3.amazonaws.com/0/31862/2b193817-4811-a3b9-bd19-e2e60e0dc5af.png)

- 完了

## 補足
上記方法でエミュレータを起動した場合、
VisualStudioのプロジェクトからDevStorage接続時に400エラーになる場合がある。
そのときは、AzureStorageExploerを閉じ、エミュレータ類を全停止。そして、インスタンス実行時に自動的にエミュレータを立ち上げると、400エラーはなくなった。
（要調査中）

#ググって出てきた下記の方法では解決できなかった

##csrun.exe
下記コマンドを実行

`"C:\Program Files\Microsoft SDKs\Windows Azure\Emulator\csrun.exe" /devfabric:start`

`"C:\Program Files\Microsoft SDKs\Windows Azure\Emulator\csrun.exe" /devstore:start`
→ depricate

##WAStorageEmulator.exe
下記コマンドを実行

`"C:\Program Files\Microsoft SDKs\Windows Azure\Emulator\WAStorageEmulator.exe" /devstore:start`

`"C:\Program Files (x86)\Microsoft SDKs\Windows Azure\Storage Emulator\WAStorageEmulator.exe" /devstore:start`

`C:\Users\tanaka_yut>"C:\Program Files (x86)\Microsoft SDKs\Windows Azure\Storage
Emulator\WAStorageEmulator.exe" start`
Nginxのロードバランサー機能覚書

Nginxでロードバランサーの機能を使う上で必要な設定を確認しました。

# sticky sessionでサーバーを振り分ける

リクエストのcookieを見て、どのサーバーに割り振るか決定するパターンです。
サードパーティー製のモジュールが必要なのでビルド必須です。
https://bitbucket.org/nginx-goodies/nginx-sticky-module-ng/overview

```nginx
upstream app_server {
      sticky;
      app1 192.168.0.1:8080;
      app2 192.168.0.2:8080;
      app3 192.168.0.3:8080;
}
```

# IP hashingでサーバーを振り分ける

リクエストを送ってきたクライアントのipでどのサーバーに振り分けるか決定するパターンです。

```nginx
upstream app_server {
      ip_hash;
      app1 192.168.0.1:8080;
      app2 192.168.0.2:8080;
      app3 192.168.0.3:8080;
}
```

# 接続数がもっとも少ないサーバーに振り分けるようにする

すべてのサーバーの接続数が均等になるように振り分けるパターンです。

```nginx
upstream app_server {
      least_conn;
      app1 192.168.0.1:8080;
      app2 192.168.0.2:8080;
      app3 192.168.0.3:8080;
}
```

# サーバーの振り分けに重みをつける

特定のサーバーに対して多めにリクエストを割り振りたいパターンです。
以下の例だと`app1:app2:app3 = 3:1:1`になります。

```nginx
upstream app_server {
      app1 192.168.0.1:8080 weight=3;
      app2 192.168.0.2:8080;
      app3 192.168.0.3:8080;
}
```

参考：
[nginxをロードバランサとして使うときのTips](http://labs.borders.jp/wordpress/?p=673)
Play Framework プロジェクト作成 めも

# Play Framework プロジェクト作成 めも

PlayFrameworkをインストールしていることが前提です。
(※Windowsでもコマンドプロンプトで多分実行できるはず・・・)

## プロジェクトの作成

ターミナルから下記のコマンドを実行する。

```
$ activator new プロジェクト名
```

下記のように聞かれるため、作成したいテンプレートを指定。

```
Browse the list of templates: http://typesafe.com/activator/templates
Choose from these featured templates or enter a template name:
  1) minimal-java
  2) minimal-scala
  3) play-java
  4) play-scala
(hit tab to see a list of all templates)
```


## プロジェクトをビルトインサーバで起動

ターミナルから下記のコマンドを実行する。

```
$ cd プロジェクトフォルダ
$ activator run
```

http://localhost:9000 で起動できる。

## Eclipseプロジェクトとして登録するには

ターミナルから下記のコマンドを実行する。

```
$ cd プロジェクトフォルダ
$ activator eclipse
```

EclipseでJavaプロジェクトを作成し、作成したPlayのプロジェクトを読み込ませる。

(以下、".gitignore"に記載されていない場合)
GitでEclipseの設定ファイルをコミットしないように".gitignore"に下記を追記する。

* /.classpath
* /.project
* /.settings

## JavaのバージョンとかOSによっては必要っぽいの

```bash
set _JAVA_OPTIONS="-Dfile.encoding=SJIS"
export _JAVA_OPTIONS="-XX:-UseSplitVerifier"
```
Eclipseを利用したPHP環境の構築(Mac編)


# Eclipseを利用したPHP環境の構築(Mac編)

## PHP動作環境の設定

MacはPHPとApacheがプリインストールされているため
特にXAMPPをインストールしたりする必要もなくPHPの動作環境を構築できます。
※色々と設定は必要なので、下記に記載します。

### PHPの確認

ターミナルから下記コマンドを実行します。
(念のためのPHPのバージョン確認です。)

```
$ php -v

PHP 5.4.24 (cli) (built: Jan 19 2014 21:32:15)
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies
```

### apacheの設定

apacheはプリインストールされている前提で進めます。
/etc/apache2/httpd.confを編集して、PHPを動作できるようにします。

* 118行目あたりのコメントを外す。

```Apache:httpd.conf
#LoadModule php5_module libexec/apache2/libphp5.so
  ↓
LoadModule php5_module libexec/apache2/libphp5.so
```

* 232-234行目に"index.php"を追加する。

```Apache:httpd.conf
<IfModule dir_module>
    DirectoryIndex index.html
</IfModule>
  ↓
<IfModule dir_module>
    DirectoryIndex index.html index.php
</IfModule>
```

* 477行目あたりのコメントを外してバーチャルホストの設定ができるようにする。

```Apache:httpd.conf
#Include /private/etc/apache2/extra/httpd-vhosts.conf
  ↓
Include /private/etc/apache2/extra/httpd-vhosts.conf
```

### バーチャルホストの設定

apacheのデフォルトのDocumentRootを使うのはちょっと面倒くさいので、バーチャルホストの設定をします。

/etc/apache2/extra/httpd-vhosts.confに下記を追加して、任意のディレクトリをDocumentRootとしてアクセスできるようにします。
※DocumentRootに設定するディレクトリ・ServerName(アクセスするURLの設定)は任意なので、下記と同じでなくて問題ないです。

```Apache:httpd-vhosts.conf
<VirtualHost *:80>
    DocumentRoot "/Users/******/Dev/sample"
    ServerName sample.local
    ErrorLog "/private/var/log/apache2/sample_error.log"
    CustomLog "/private/var/log/apache2/sample_access.log" common

    <Directory "/Users/******/Dev/sample">
        Options FollowSymLinks
        AllowOverride None
        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>
```

/etc/hostsにバーチャルホスト名を設定するため、下記を追記します。
(ここで設定するホスト名も例です。)

```hosts
127.0.0.1	sample.local
```

ここまで設定したら、Apacheを再起動します。

```
$ sudo apachectl restart
```

とりあえず、Apacheは一旦おいといて、Eclipseの設定します。
※自分みたく、Eclipse使わないよって人は読み飛ばしてください。

## Ecipseのインストール・日本語化

「Syntax Error.」というサイトの記事を参考にさせてもらいます。
[Syntax Error. - [Sy] MacにてPleiadesを使ってeclipseを日本語化する方法](http://www.utano.jp/entry/2014/01/eclipse_japanese_localization_for_mac)


・Eclipseをダウンロード

 [Eclipseのページ](http://www.eclipse.org/downloads/)

 「Eclipse for PHP Developers」をダウンロードします。
※ここでダウンロードするEclipseのバージョンを覚えておいてください。

・Pleiadesをダウンロード

[Pleiadesのページ](http://mergedoc.sourceforge.jp/)

バージョンはダウンロードしたEclipseのバージョンと同じものを選択してください。

<pre>例) Eclipse 4.4 Luna の場合
1. "Eclipse 4.4 Luna Pleiades All in One"をクリックする
2. PHP列の"Standard Edition"をクリックしてダウンロード
</pre>

ダウンロードしたzipファイルを解凍します。

pleiadesの方のディレクトリに`pleiades/eclipse/dropins/MergeDoc`というディレクトリがあるので、eclipseの方の`eclipse/dropins`内にコピーします。
※pleiadesのディレクトリはもう必要ないです。

・eclipse.iniの設定

eclipseを起動する前に、iniファイルを設定しておきます。
eclipse本体のEclipse.appの上でメニューを表示すると、
「パッケージの内容を表示」というのがあるのでクリックします。

その中にある`/Contents/MacOS/eclipse.ini`に下記を追加します。

```
-Dfile.encoding=UTF-8
-javaagent:../../../dropins/MergeDoc/eclipse/plugins/jp.sourceforge.mergedoc.pleiades/pleiades.jar
```

ここまで設定して、Eclipse.appを起動します。

起動時に「Pleiades All in One」が表示されていれば日本が成功です。

・ワークスペースの設定

ワークスペースは上記Apacheのバーチャルホスト設定で設定した"/Users/******/Dev/sample"を設定します。
(今回の設定がこうするだけで、絶対にこう設定しないといけないわけではないです。)

おわり。
一部コンテンツのスクロール

AutoLayout環境下で一部コンテンツをスクロールする

参考
　①https://www.youtube.com/watch?v=4oCWxHLBQ-A
　　・画面全体でスクロールさせている
　②http://araking56.blog134.fc2.com/blog-entry-101.html
　　・画面の一部をスクロールする例が書かれている

ポイント
　①を参考にスクロールさせることを覚え、②で記載されている下記を参考したところうまく実現できた

view
┗ scrollView
　┗ view