OmniAICreator/Qiita-1.07M huggingface dataset:
実践！ウェブサイトを作ろう（ドットインストール）

web制作におけるレイアウト手法
ほとんどがレイアウト制作の例
内容的にはドットインストールのhtml, css, css3入門でやったことの復習なので、細かいことはそちらを参照


#2カラムの例

```
<!doctype html>
<html lang=“ja”>
<head>
<meta charset=“UTF-8”>
<title>レイアウトの練習</title>
<link rel=“stylesheet” type=“text/css” href=“http://yui.yahooapais.com/3.16.0/build/cssreset/cssreset-min.css”>
<link rel=“stylesheet” type=“text/css” href=“mycss.css”>
</head>
<body>
     <div id=“container”>
          <div id=“header”>
           </div>
          <div id=“mail”>
               <div id=“left”>
                  </div>
               <div id=“right”>
               </div>
          </div>.
          <div id=”footer”>
          </div>
     </div>
</body>
</html>


/* mycss.css */

#container{
     width:500px;
     margin: 0 auto;
}

#main{
overflow:hidden;

#left{
float:left;
width:30%;
}

#right{
float:right;
width:60%
}
```

#カラムのレイアウト

floatをつかうときにはwidthを指定する
floatの回り込み回避のために、overflow:hidden;をつかう

上下にmarginを指定するとmarginの相殺が起こる

#containerの高さを画面いっぱいにのばす

```
container{
height:100%
}

body{
height:100%;
}

body >#container{
height:100%;
}

#container{
min-height:100%
height:100%
}

```

#header

```
<h1><img src=“image.png”></h1>
```

#menu

```
<ul>
     <li><a>ホーム</a></li>
     <li><a>製品情報</a></li>
</ul>
```

  例(css) ）

```
#menu ul > li{   
     float:left;
     width:100px;
     font-size:13px;
     text-align:center;
     padding:4px;
     background:#ccc;
     margin-right:10px;
     border-radius:4px;
     text-shadow:0 1px 0 #fff ;
}

#menu ul>li:hover{
     background;#ddd;
}

#menu ul >li>a{
     text-decoration:none;
     display:block;
}
```

#footer

  例(css) ）
```
 #footer{
          font-size:12px;
          color: #css;
          text-align:center;
          border-top:1px solid #ccc;
}
```

#見出しの例

```
h2{
font-size:16px;
border-left:5px solid #ccc;
padding:3px 0 3px 10px;
margin-bottom:10px;
}

h3{
border-bottom:1px solid #ccc;
padding:3px 0;
margin-bottom:10px;
}
```

#最後のリストのborderだけ外す

```
ul.products>li{
     border:1px dotted #ccc;
} 

ul.products>li:last-child{
     border:none;
}
```

#アイコン付きリストの例

```
ul .submenu >li{
     background:url(‘image.png’) no-repeat;
     padding:0 0 5px 20px;
}

```
管理しているネットワーク上のホストがOpenSSL Heartbleed脆弱性の影響を受けるかどうかNmapでまとめてチェックする


Nmap 6.45がリリースされ、OpenSSL Heartbleed脆弱性のチェックを行なうssl-heartbleed.nseスクリプトが含まれるようになりました。

1. まず、Homebrewがインストール済みの環境で下記のようにして最新のNmapをインストールします。

 ```
brew update
brew install nmap
 ```

2. ssl-heartbleed.nseスクリプトを使用して、OpenSSL Heartbleed脆弱性のチェックを行ないます。

 ```
nmap -sS -p443 -script=ssl-heartbleed.nse 【ネットワークアドレス】/【ネットマスク】
 ```

 脆弱性が見つかった場合、下記のような結果表示となります。

 ```
Nmap scan report for 【ホスト名】 (【IPアドレス】)
Host is up (0.0059s latency).
Not shown: 992 closed ports
PORT     STATE SERVICE     VERSION
443/tcp  open  ssl/http    Apache httpd 2.2.3 ((CentOS))
| ssl-heartbleed: 
|   VULNERABLE:
|   The Heartbleed Bug is a serious vulnerability in the popular OpenSSL cryptographic software library. It allows for stealing information intended to be protected by SSL/TLS encryption.
|     State: VULNERABLE
|     Risk factor: High
|     Description:
|       OpenSSL versions 1.0.1 and 1.0.2-beta releases (including 1.0.1f and 1.0.2-beta1) of OpenSSL are affected by the Heartbleed bug. The bug allows for reading memory of systems protected by the vulnerable OpenSSL versions and could allow for disclosure of otherwise encrypted confidential information as well as the encryption keys themselves.
|           
|     References:
|       https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-0160
|       http://www.openssl.org/news/secadv_20140407.txt 
|_      http://cvedetails.com/cve/2014-0160/
Service Info: Host:  someserver; OS: Linux; CPE: cpe:/o:linux:linux_kernel
 ```

自分が管理しているネットワーク以外にやっちゃダメだよ！
OS X で Vagrant な Ubuntu に Oracle XE をインストール


**環境**
- OS X 10.9.2
- Vagrant 1.5.2
- Ubuntu 12.04 64bit (precise64)
- Oracle Database XE 11.2

[（参考）ubuntu 13.04(64bit)にoracle-xe-11.2をcuiでインストール](http://blog.livedoor.jp/jun_dime/archives/51761343.html)

-
**仮想マシンを作成する**

```bash
$ vagrant init hashicorp/precise64
$ vagrant up
```

Oracleからパッケージを入手する（要OTNアカウント）
http://www.oracle.com/technetwork/jp/database/database-technologies/express-edition/downloads/index.html
- oracle-xe-11.2.0-1.0.x86_64.rpm.zip

**仮想マシンにパッケージをコピーする**

```bash
$ vagrant ssh-config > .vagrant.ssh.config
$ scp -F .vagrant.ssh.config path/to/oracle-xe-11.2.0-1.0.x86_64.rpm.zip default:
```

**仮想マシンにログインする**

```bash
$ vagrant ssh
```

-

```bash
$ sudo apt-get update
$ sudo apt-get install alien libaio1 unixodbc unzip
$ unzip oracle-xe-11.2.0-1.0.x86_64.rpm.zip
$ cd Disk1/
```

**rpm形式をdebian形式に変換する**

```bash
$ sudo alien --to-deb --scripts oracle-xe-11.2.0-1.0.x86_64.rpm
oracle-xe_11.2.0-2_amd64.deb generated
```

-
**chkconfigファイルを作成する**

```bash
$ sudo vi /sbin/chkconfig
```


```
#!/bin/bash
# Oracle 11gR2 XE installer chkconfig hack for Debian by Dude
file=/etc/init.d/oracle-xe
if [[ ! `tail -n1 $file | grep INIT` ]]; then
   echo >> $file
   echo '### BEGIN INIT INFO' >> $file
   echo '# Provides:             OracleXE' >> $file
   echo '# Required-Start:       $remote_fs $syslog' >> $file
   echo '# Required-Stop:        $remote_fs $syslog' >> $file
   echo '# Default-Start:        2 3 4 5' >> $file
   echo '# Default-Stop:         0 1 6' >> $file
   echo '# Short-Description:    Oracle 11g Express Edition' >> $file
   echo '### END INIT INFO' >> $file
fi
update-rc.d oracle-xe defaults 80 01
```

```bash
$ sudo chmod 755 /sbin/chkconfig
$ sudo ln -s /usr/bin/awk /bin/awk
$ sudo dpkg --install ./oracle-xe_11.2.0-2_amd64.deb
```

**初期化スクリプトを修正する**

```bash
sudo vi /u01/app/oracle/product/11.2.0/xe/config/scripts/init.ora
sudo vi /u01/app/oracle/product/11.2.0/xe/config/scripts/initXETemp.ora
```

```
#memory_target=
pga_aggregate_target=200540160
sga_target=601620480
```

**パスワードは oracle に設定する**

```bash
sudo /etc/init.d/oracle-xe configure
```

**sqlplusで確認する**

```bash
$ source /u01/app/oracle/product/11.2.0/xe/bin/oracle_env.sh
$ sqlplus system/oracle
```

-
**仮想マシンをログアウトして1521ポートをフォワードする**

```bash
$ vi Vagrantfile
```

```
config.vm.network :forwarded_port, guest: 1521, host: 1521
```

```bash
$ vagrant reload
$ sqlplus system/oracle@127.0.0.1
```

**ボックスを保存する**

```bash
$ vagrant package
$ vagrant box add oracle package.box
```
CentOS6.5 に proxyありの環境下で jenkins インストール

基本的には[公式](https://wiki.jenkins-ci.org/display/JENKINS/Installing+Jenkins+on+Red+Hat+distributions)のページの手順に沿えばOKです。

## 1. jenkinsインストール

```:/etc/wgetrc
http_proxy = http://proxy.com:PORT/
https_proxy = http://proxy.com:PORT/
```

`$ rpm --httpproxy proxy.com --httpport PORT
$ sudo wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo`

`$ sudo rpm --import http://pkg.jenkins-ci.org/redhat/jenkins-ci.org.key`
rpm用にproxy設定しつもりでしたが、keyを取得できないので別手段を取りました。

`$ wget http://pkg.jenkins-ci.org/redhat/jenkins-ci.org.key
$ sudo rpm --import jenkins-ci.org.key
$ sudo yum install jenkins
`

## 2. javaインストール

`$ sudo yum install java-1.7.0-openjdk
$ java -version
java version "1.7.0_51"
OpenJDK Runtime Environment (rhel-2.4.4.1.el6_5-x86_64 u51-b02)
OpenJDK 64-Bit Server VM (build 24.45-b08, mixed mode)
`
GCJバージョンではないことを確認


## 3. jenkins起動
`$ sudo service jenkins start
$ sudo chkconfig jenkins on`

別の起動方法...
jekins.war の場所を確認します。
`$ sudo updatedb
$ sudo locate jenkins.war
　/usr/lib/jenkins/jenkins.war
$ java -jar /usr/lib/jenkins/jenkins.war
`

http://server.com:8080/
で確認して下さい。


## 4. jenkins設定
```:/etc/sysconfig/jenkins
JENKINS_HOME="/var/lib/jenkins"
JENKINS_USER="jenkins"
JENKINS_PORT="8080"
JENKINS_DEBUG_LEVEL="5"
...
```
Rubyで出力に色を付ける方法

コマンドラインでRubyを使ってて出力に色を付けたいなーと思った事はありませんか？
実はとても簡単で以下のように書くだけOKです。

```rb
print "\e[31m"
puts "こんにちは！"
print "\e[0m"
```
ただ、これだといちいち `print "\e[0m"` で元に戻すのめんどいし、
何色に変更してるのかわかり辛いですね(上記の場合は赤)…。
という事でRubyで出力に色を付けたい時に便利なgemライブラリをご紹介します。

# color_echo
`color_echo`はコマンドライン出力を装飾するためのライブラリです。
`color_echo` は `ANSIエスケープシーケンス`を使って`puts`, `print`, `p` メソッドの出力を装飾します。

良ければ以下のリンクもご覧ださい。
日本語ドキュメント: http://colorecho.github.io/ja/
コマンドライン出力に色をつける：http://qiita.com/khotta/items/c76b4d7fbfc404b8bded

## 256色の指定が可能
`color_echo`をインストールしたら `color_echo -l` とコマンドラインで実行してみてください。指定可能なカラーインデックスが表示されます。
rbenv環境ではrehashをしてください。

## 指定した文字列だけを装飾できる！
```rb
puts <<EOS
[Wed Oct 11 14:32:52 2000] [error] [client 127.0.0.1] client denied by server configuration: /export/home/live/ap/htdocs/test
[Wed Oct 11 14:32:52 2000] [error] [client 127.0.0.1] client denied by server configuration: /export/home/live/ap/htdocs/foo
[Wed Oct 11 14:32:52 2000] [error] [client 127.0.0.1] client denied by server configuration: /export/home/live/ap/htdocs/bar
[Wed Oct 11 14:32:52 2000] [error] [client 127.0.0.1] client denied by server configuration: /export/home/live/ap/htdocs/test
[Wed Oct 11 14:32:52 2000] [error] [client 127.0.0.1] client denied by server configuration: /export/home/live/ap/htdocs/bar
EOS
```
実行結果
![ex_1.png](https://qiita-image-store.s3.amazonaws.com/0/37104/f6bb420c-f912-187c-3384-71c9f2a60194.png)

この出力を`color_echo`で装飾してみましょう。

```rb
CE.fg(:gray).pickup("127.0.0.1", :h_yellow, nil, :underscore).pickup([/foo$/, /bar$/], :h_white, :index200)

puts <<EOS
[Wed Oct 11 14:32:52 2000] [error] [client 127.0.0.1] client denied by server configuration: /export/home/live/ap/htdocs/test
[Wed Oct 11 14:32:52 2000] [error] [client 127.0.0.1] client denied by server configuration: /export/home/live/ap/htdocs/foo
[Wed Oct 11 14:32:52 2000] [error] [client 127.0.0.1] client denied by server configuration: /export/home/live/ap/htdocs/bar
[Wed Oct 11 14:32:52 2000] [error] [client 127.0.0.1] client denied by server configuration: /export/home/live/ap/htdocs/test
[Wed Oct 11 14:32:52 2000] [error] [client 127.0.0.1] client denied by server configuration: /export/home/live/ap/htdocs/bar
EOS
```
強調したいパターンは文字列や正規表現、あるいはそれらの配列で指定します。

実行結果はこちらです。なんとたった1行加えるだけで強調して表示できました。
![ex2.png](https://qiita-image-store.s3.amazonaws.com/0/37104/b047164e-ecea-4aa2-d911-1296171c5f80.png)

文字列にエスケープシーケンスを付けて返すようなライブラリは多くあれど、`color_echo`ではこのように既存のプログラムにほとんど干渉せずに出力に色を付けることができます。
画像認識のWebサービスAPI「ReKognition」を使ってみた

個人的に画像認識に少し興味があったのと、GoogleGlassのSDKまで出していて注目を少し浴びていたのでReKognitionを使ってみた。

http://techcrunch.com/2013/06/12/visual-recognition-api-for-google-glass/

http://kenz0.s201.xrea.com/weblog/2014/03/rekognition.html



普段rubyで書いているので、実際にrailsのアプリに組み込んでいきます。

####①まずはサービスに登録します。
https://rekognition.com/


####②gemをインストールします。

```
gem 'rekognize'
```

####③実際に使ってみます。

```
require 'rekognize'

client = Rekognize::Client::Base.new(api_key: '会員登録後に得たapi keyを入力', api_secret: '会員登録後に得たapi_secretを入力')
client.face_detect(urls: "画像のURL", jobs: '※1')
```

このように簡単に使う事が可能です。
上記では顔認識なのですが、このサービスは大きく分けて3つ。

・顔認識
→年齢/性別/表情/人種/....

・場所認識
→海/山/レストラン...

・場面認識
→セミナー/クリニック/研究... (※最近でたやつみたいです)

####④顔認識を深く掘ってみます。
docsを見てもらえれば一発なのですが、一応使ってみたものだけ簡単にここにまとめておきます。
https://rekognition.com/developer/face

・jobs

| 名前        | 説明 | 例 |
|:-----------|------------:|:------------:|
| gender       |     性別　 |     0.84(1:男性⇔0:女性)     |
| emotion     |      感情 |    {happy: 0.93, sad: 0.2}(1が最大値)    |
| race       |        人種 |     {asian: 0.99, white: 0.12}     |
| age         |          年齢 |      23.4(少数点第一位までで記載)      |
| glass       |       眼鏡の有無 |    0.22(最大値1)    |
| mouth_open_wide    |     口の開き具合 |   0.24(最大値1) |
| beauty | 美しさ(?) | 0.79(最大値1)


ちなみに鼻の位置や目の位置なんかも当たり前ですが、取る事は可能です。

####⑤このサービスに画像を登録してみる
僕がこの「ReKognition」で面白いな〜と思ったのは、表情を認識する事もそうなんですが、顔検索ができるという所。

例えば自分のFBの友達のプロフィール画像をこのサービスに保存し、
(ちなみにFace Crawlというapiのメソッドを使えば、友達の画像とか全て取ってきてくれます。もちろんFBのid、access_tokenが必要です)何かの画像から、そのDBに登録した中でどれが一番近いか？というのを出してくれます。

GUIでも提供してくれているので、こちらをどうぞ。
https://rekognition.com/user/panel

ますが画像を追加していきます。

```
client.face_detect(urls: "画像URL", jobs: 'face_add')
```
これを実行すれば、ReKognitionに画像を保存してくれます。
※まだapiを通してtagを登録するやり方は分かっておりません...orz

いくつか登録したら、いよいよメインの検索をしてみましょう。

```
client.face_detect(urls: "画像URL", jobs: 'face_search') 
```

```
=> {"url"=>"画像URL",
 "face_detection"=>
  [{"boundingbox"=>
     {"tl"=>{"x"=>94.62, "y"=>56.15},
      "size"=>{"width"=>97.69, "height"=>97.69}},
    "confidence"=>1,
    "matches"=>
     [{"tag"=>"hogekawa", "img_index"=>"1010634", "score"=>"1.00"},
      {"tag"=>"hogekawa", "img_index"=>"1471688", "score"=>"0.91"},
      {"tag"=>"hogekawa", "img_index"=>"1065556", "score"=>"0.80"}],
    "pose"=>{"roll"=>5.73, "yaw"=>-3.64, "pitch"=>1.85}}],
 "ori_img_size"=>{"width"=>300, "height"=>300},
 "usage"=>{"quota"=>3262, "status"=>"Succeed.", "api_id"=>"CiQabQj3a9F1Sp0H"}}

```

若干伏せさせていただいてますが、このように何とmatchしたか？というデータを取り出す事ができます。
今回はtagに名前を入れてますが、少しidを変形させた文字列等にしておけば、どのuserと合致したか？なんてのも使えそう。

ざっくりでしたが、個人的には
・顔認証に使えそう
・好みの顔の人をレコメンドするような出会い系が作れそう
VMware vSphere HypervisorでのOVA/OVF


VMware vSphere Hypervisorで動作中のVMのOVFをエクスポートして、そのファイルを使ってデプロイしようとすると以下の様なメッセージが出ることがある。

	OVF パッケージのデプロイに失敗しました：タスクは、ユーザーによってキャンセルされました。

どうやら、ハードウェアの構成でCD/DVDデバイスでデータストア ISOファイルを選択していると起こるらしい。

CentOS6.4 のOVFテンプレートのデプロイに失敗する。
https://communities.vmware.com/thread/449828?start=0&tstart=0

その他のハードウェア構成でも起こるのかは未検証。


# VirtualBoxからのインポート
幾つか試してみたけどダメだった。要検証。
Canvasでバウンド？

```html:index.html
<!DOCTYPE html>
<html lang="ja">
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title></title>
    <style>#myCanvas {
  display: block;
}

    </style>
  </head>
  <body>
    <canvas id="myCanvas" width="1000" height="500"></canvas>
    <!--button#startAnimation Start-->
    <!--button#stopAnimation Stop-->
    <script src="http://code.jquery.com/jquery-1.11.0.min.js"></script>
    <script>(function(){
    $(function(){
        //キャンバス要素
        var canvas = $('#myCanvas');
        
        //2Dレンダリングコンテキスト
        var context = canvas.get(0).getContext('2d');
        
        var canvasWidth = canvas.width(); //キャンバス要素　幅
        var canvasHeight = canvas.height(); //キャンバス要素　高さ
        
        //矩形（x座標, y座標, 幅, 高さ, 回転時の半径, 回転時の角度）をまとめて管理するクラス
        var Shape = function(x, y, width, height) {
            this.x = x;
            this.y = y;
            this.width = width;
            this.height = height;
            this.radius = 150;
            this.angle = 0;
        };
        
        //複数の矩形を格納する配列
        var shape = new Shape(250, 250, 50, 50);
        
        var x = 0; var y = 0;
        
        //アニメーションループ
        function animate() {
        
            context.save();
            
            //矩形クリア
            context.clearRect(0, 0, canvasWidth, canvasHeight);
            
            //5°ずつ加算
            shape.angle += 5;
            
            //角度が360度を超えたら0度に戻す
            if (shape.angle > 360) {
                shape.angle = 0;    
            };
            
            x += 5;
            x %= 1000;
            y = shape.y+(shape.radius*Math.sin(shape.angle*(Math.PI/180)));
            
            //円の描画
            context.beginPath();
            context.arc(x, y, 50, 0, Math.PI*2, false);
            context.closePath();
            context.fill();
            
            context.restore();
            
            //アニメーションフラグが開始のとき
            setTimeout(animate, 1000/30);
        };
        //アニメーション初回スタート
        animate();
    });
})()
    </script>
  </body>
</html>
```
Ruby の Time でマイクロ秒・秒を切り捨てる

**追記: Ruby 2.7 からは Time#floor メソッドが追加され、Time.now.floor のようにしてマイクロ秒を
切り捨てることができるようになりました**

Ruby の Time インスタンスはマイクロ秒まで保持しているので、データベースや文字列から復元したときに == が false を返す場合がある。

```ruby
# Rails で MySQL 使ってる場合
@now = Time.now
@article.published_at = @now
@article.save!
@article.published_at == @now # true
@article.reload
@article.published_at == @now # false
```

下記の 2 つのメソッドを使って、マイクロ秒を切り捨てることができる。

- `Time#to_i` UNIX エポックからの秒数を整数で返す
- `Time.at` UNIX エポックからの秒数から Time インスタンスを作る

```ruby
t = Time.at(Time.now.to_i)
t.usec # => 0
```

応用すれば、秒の切り捨てもできる。

```ruby
t = Time.new(2013, 4, 4, 12, 34, 56) # => 2013-04-04 12:34:56 +0900

# 秒の切り捨て
SEC_PER_MIN = 60
Time.at(t.to_i / SEC_PER_MIN * SEC_PER_MIN) # => 2013-04-04 12:34:00 +0900
```

分・時の切り捨てはタイムゾーンが影響するのでこの方法ではうまくいかない。
Excel から CSV 出力して Ruby で読み込み


# Excel からの出力

[ファイル]-[名前を付けて保存] でフォーマットを `CSV (コンマ区切り)` で保存すると、Shift_JIS の CSV が出力される。

しかし、Excel は内部では Unicode を使ってるため、一部の文字が欠損する。また、Windows 版と Mac 版で使用する文字セットが異なり、文字化けする。

そのため、フォーマットは `UTF-16 Unicode テキスト` にする。これで UTF-16LE (BOM つき)、列区切り `\t`、行区切り `\r\n` の CSV (TSV) が出力される。

# Ruby で読み込み

下記はコマンドライン引数に指定した CSV を読み込んで、行を `p` で表示するコード。


```ruby
require "csv"

# BOM でバイトオーダーを判定したうえで BOM を削除して UTF-8 に変換しつつ読み込み。
open(ARGV.first, "rb:BOM|UTF-16:UTF-8"){|f|
  # 列区切り文字 (col_sep), 行区切り文字 (row_sep) を指定
  # headers: :first_row は最初の行をヘッダとみなすオプション
  CSV.new(f, col_sep: "\t", row_sep: "\r\n", headers: :first_row).each do |row|
    # セル内改行は Win だと CRLF、Mac だと CR になる。面倒なので LF に統一する。
    row.each{|k, v| v.gsub!(/(\r\n|\r)/, "\n") unless v.nil? }
    p row
  end
}

```

# Rails での日時の扱い

直接 CSV とは関係ないが、CSV からインポートする際などに、時差による問題が起こりやすい。

日付をパースする場合は `ActiveSupport::TimeZone#parse` を使ってタイムゾーンを明示するのが確実。

```ruby
ActiveSupport::TimeZone["Asia/Tokyo"].parse("2014/4/15 12:00:00") #=> Tue, 15 Apr 2014 12:00:00 JST +09:00
```
C++11のtypeinfoについて

実行時型情報(Run Time Type Info: RTTI)をC++11で得るには、
`#include <typeinfo>`して`typeid(型名や変数名)`する。
人間が可読な形式にするには`typeid(型名や変数名).name()`すればいい。
ところが、どうも実装によっては人間可読ではない、
もしくは、暗黙の了解な形式で出力されることがある。
例えば、`int`は、MSVCでは`int`だが、OSXのclang++では`i`と表示される。
(コンパイラの問題なのか標準ライブラリの問題なのかは調べていない)
原子的な型なら一文字でもわかるが(`int`, `char`, `void`, `bool`, `float`, `double`)、`signed`や`unsigned`,`long`などの修飾子が付いたものは一文字だと何のことやらわからないので、調べたものをここに貼り付けておく。

-----
|type|letter|
|:---|:--:|
|int|i|
|float|f|
|double|d|
|char|c|
|void|v|
|bool|b|
|short|s|
|signed char|a|
|unsigned int|j|
|unsigned char|h|
|unsigned short|t|
|long int|l|
|long double|e|
|long long int|x|
|unsigned long int|m|
|unsigned long long int|y|
|wchar_t|w|
|size_t|m|

(`size_t`はloopのカウンタの型に使うと便利なやつ
`for(size_t i=0; i<max; i++)`みたいな
)
C言語の文法について	

初めてC言語のプログラムを読む人のための，ちょっとした解説．

## if文

```C
if ( 条件式 ){
	何か実行する;
}
```

ここの条件式では，次ようのな論理演算が使用できる．

```C
if ( i == 1 && j == 2 ){...}
if ( i > 1 || i == 0 ){...}
if ( i <= 1 && j > 0 ){...}
```

`&&`はAND，`||`はORを意味する．

## functionの使い方
以下では，乱数を発生する関数(function) getRandom() を定義し，それをmain()ルーチン内で呼び出して使用している．
このように書くことで，変数`r`にgetRandom()で計算された乱数が代入される．

```C
float getRandom( void ){
	random= (k*randnum+c) % m;
	return (float)randnum/m;
}

main(){
	...
	float r;
	...
	r= getRandom();
}
```

`void`は「何もないよ」みたいな意味．


## define文
以下で定数を定義する．

```C
#define NX 400
```


## 型の変換
変数には型がある．整数はint，浮動小数点はfloatやdouble．
C言語では，intとfloatの演算はfloatに変換される．
明示的にintに変換したい場合は，

```C
ix= (int)(NX*getRandom());
```

のように，`(int)`を変数の前に付けることで，型変換を行うことができる．floatに変換したい場合は，`(float)`を付ければよい．
IAM ベストプラクティス10

http://youtu.be/4AZX8COgnmU
http://aws.amazon.com/jp/iam/?nc1=h_ls

なんとなく訳した

- 個別のユーザーを作成する
- パーミッションをグループで管理する
- 最小の権限を付与する
- 強固なパスワードポリシーを使う
- 特権ユーザーにはMFA(Multi Factor Authentication)を有効にする
- EC2インスタンスにはIAM rolesを使う
- IAM rolesを共有してアクセスする
- Security credentialをローテートする
- 条件付きで特権アクセスを制限する
- rootを使う機会を減らす。もしくは使わない


## EC2インスタンスにはIAM rolesを使う

- roleを作成する
- roleとともにインスタンスを起動する

=> 起動済みのインスタンスには割り当てられなさそうな雰囲気
Rails4でのjavascript_include_tagで指定したはずなのに適応されない。


[javascript_include_tag Rails 4 generating "/javascripts/" instead of "/assets" in production - Stack Overflow](http://stackoverflow.com/questions/17622858/javascript-include-tag-rails-4-generating-javascripts-instead-of-assets-i)

ここの質問のように、```javascript_include_tag```を使って特定のjsファイルを読み込もうとした時に、Production環境だと、```/assets/hoge.js```じゃなくて、```/javascripts/hoge.js```を指定していた。

## 解決策

>The default matcher for compiling files includes application.js, application.css and all non-JS/CSS files (this will include all image assets automatically) from app/assets folders including your gems:

[The Asset Pipeline — Ruby on Rails Guides](http://guides.rubyonrails.org/asset_pipeline.html#precompiling-assets) 

どうやら Rails4でassets precompileされるのは、app/assets 以下に入っている、application.js, application.css, .js, .css以外のファイルだそうです。

なので、


```ruby:config/environments/production.rb

config.assets.precompile += ['hoge.js', 'hoge.css']

```

みたいな感じで書いておくとassets precompileしてくれます。
CSS3入門（ドットインストール）

CSS3

特徴：
-多彩な表現
-W3Cが策定中
-各ブラウザによって実装がまちまち。

知識：
html,css

範囲：
比較的ブラウザで実装が進んでいて、よく使われるもの。

#ベンダープレフィックス

各ブラウザが先行的に似たようなものを実装していることを示すもの
各ブラウザごとに異なる

##例

border-radius:5px;
-webkit-border-radius:5px;

##種類

-webkit- : chrome /safari
-moz- : firefox
-o- :opera
-ms- :ie

##対応状況
-caniuse.comで調べられる

#角丸をつける
border-radius:10px;
角に半径10pxの円が入っているということ

右上に角丸border-top-right-radius:30px;

##テクニック
border-radius:50%;で円のなる
background-image:url(‘image.jpg’);でバックに画像

#色の指定と透明化

##背景の透明化
-rgba
例）background-color:rgba(0, 0, 0, 0.7);

##要素全体の透明化

-opacity
 例）opacity:0.3; 

#ボックス要素に影をつける

box-shadow:水平方向のずらし　垂直方向のずらし　ぼかし具合　影の幅　色　内側にかげをつける（inset）,新たな指定;

例）box-shadow:10px 20px 5px  20px rgba(0, 0, 0, 0.3) inset,
                     5px 5px 5px red;

#テキストに影をつける
text-shadow box-shadowと同様に指定出来る

#線形グラデーション

以下はクロムへの対応（-webkit-）
●赤から青へのグラデーション
background:-webkit-linear-gradient(red, blue);

●赤から黃、黃から青へのグラーデーション（赤10px　黃90px）
background:-webkit-linear-gradient(red 10px, yellow 90px, blue);

●右からグラデーション
background:-webkit-linear-gradient( right red 10px, yellow 90px, blue);

●右上からデコレーション
background:-webkit-linear-gradient(right top red 10px, yellow 90px, blue);

●45°からデコレーション
background:-webkit-linear-gradient( 45deg red 10px, yellow 90px, blue);

#円形のグラデーション

●中心からグラデーション
background:-webkit-radial-gradient(red,blue);


●右上を中心
background:-webkit-radial-gradient(right top red,blue);

●色の割合も指定可能
background:-webkit-radial-gradient(red　10%,blue);

●起点も指定可能　（横　縦）
background:-webkit-radial-gradient(10px　10px,　red,　10%,blue);

●円形にする（circle）
background:-webkit-radial-gradient(10px　10px, circle,　red,　10%,blue);

● cover 円でいっぱいになるようにする
   contain  必ず円が含まれるようにする

#要素の変形

transform:scale(1.2,1.5);
transform-origin:top left;
transform:scaleZ

移動　transform:translate(20px, 100px);
回転　transform:rotate(45deg);
傾き　transform:skew(45deg, 20deg);

#簡単なアニメーション

transition
アニメーションの対象 -property:all
アニメーションにかかる時間-duration:1s
開始と終了を滑らか（ease）-timing-function:ease;
開始までの時間-delay:2s


全部一緒に指定できる
transition:all 1s ease 2s;

#キーフレームでアニメーション
animation-name:
animation-duration:
animation-timing-function:
animation-delay:
animation-interation-count:
animation-direction:

animation: animationTest 5s ease 1s infinite normal  alternate;

alternate:逆に戻る

@-webkit-keyframes animationTest{
0%{ width 50px; background: orange;}
50%{ width 50px; background: orange;}
100%{ width 50px; background: orange;}

#属性セレクタ
a[href^=“http”]{
     color:yellow;
}

^ 前方一致
$後方一致
*部分一致

#n番目に来る要素
div p nth-child(odd){
     color:red;
}

odd 奇数
even 偶数
3n　3の倍数

last-child
only-child

div p:nth-of-type(even){
     color:red;
}

#要素の状態で指定するセレクタ

input[type=“text”]:enable{
     border:1px solid red;
}
input[type=“radio”]:checked +label{
     font-weight:bold;
}

#CSS3のジェネレーター

http://www.css3maker.com/
http://border-radius.com/
http://css3button.net/
http://www.colorzilla.com/gradient-editor/
CentOSにgitflowをインスールする方法

CentOSにgitflowをインストールするのが面倒だったのでメモ。
（yumだと出来なかった）



curl-develがいないとgit-hubからhttpsでcloneする際にエラーになった。

```
# yum install curl-devel
```

gitをsrcからインストール

```
# wget http://www.kernel.org/pub/software/scm/git/git-1.8.4.tar.gz
# tar zxvf git-1.8.4.tar.gz
# cd git-1.8.4
# ./configure
# make
# make all
```

git-flowをインストール

```
# curl https://raw.github.com/nvie/gitflow/develop/contrib/gitflow-installer.sh
# vi gitflow-installer.sh
# REPO_HOME="https://github.com/nvie/gitflow.git" // httpだとcloneできない
# ./gitflow-installer.sh
```
クロス集計表の関連の強さを測る

## クラマーの V 係数

クロス集計表で離散変数間での独立性を検定するためにカイ二乗検定をする話は[以前に説明](http://qiita.com/ynakayama/items/67ddb321a8ce5b07274c)しました。

カイ二乗値 χ^2 が大きいほど 2 変数の関連は強いと考えられます。しかし χ^2 値はクロス集計表の大きさやケース数に依存しますし、最大値も異なります。また、行・列の数が異なるクロス集計表では比較が難しいという面もあります。

[クラマーの V 係数](http://en.wikipedia.org/wiki/Cram%C3%A9r%27s_V) では χ^2 を次式で変換し、どんなクロス集計表でもまったく関連の無い状態を 0 、完全な関連のある状態を 1 とした値を導出します。

```math
\Phi_c = \sqrt{\frac {\chi^2} {N(k-1)}}
```

このとき N は総度数、 k はクロス集計表の行数か列数の小さいほうです。

総度数を使うことでケース数の影響を補正、列数と行数の小さいほうを取ることで行列数の影響を補正します。また元がカイ二乗値なので平方根を取るわけですね。

## コードで計算する

[こちら](http://telliott99.blogspot.jp/2011/06/cramers-rule-calculation.html)に参考になるコードがあるので引用します。

```py3
import numpy as np

def det2x2(A, v=False):
    if v:  print('compute 2 x 2 det of')
    if v:  print(A)
    assert A.shape == (2,2)
    return A[0][0]*A[1][1] - A[0][1]*A[1][0]

def det3x3(A):
    print('compute 3 x 3 det of')
    print(A)
    assert A.shape == (3,3)
    a,b,c = A[0]
    c1 = a * det2x2(A[1:3,[1,2]])
    c2 = b * det2x2(A[1:3,[0,2]])
    c3 = c * det2x2(A[1:3,[0,1]])
    return c1 - c2 + c3

def solve(A):
    print('solve')
    print(A, '\n')
    assert A.shape == (3,4)
    D = det3x3(A[:,:3])
    print('D = ', D, '\n')
    if D == 0:
        print('no solution')
        return
    Dx = det3x3(A[:,[3,1,2]])
    print('Dx = ', Dx, '\n')
    Dy = det3x3(A[:,[0,3,2]])
    print('Dy = ', Dy, '\n')
    Dz = det3x3(A[:,[0,1,3]])
    print('Dz = ', Dz, '\n')
    return Dx*1.0/D, Dy*1.0/D, Dz*1.0/D

def check(A,x,y,z):
    print('check')
    for i,r in enumerate(A):
        print('row', i, '=', r)
        pL = list()
        for coeff,var in zip(r[:3],(x,y,z)):
            c = str(round(coeff,2))
            v = str(round(var,2))
            pL.append(c + '*' + v)
        print(' + '.join(pL), end=' ')
        print(' =', r[0]*x + r[1]*y + r[2]*z, '\n')

```

実行するとこうなります。

```py3
import numpy as np
import cramer

def run_cramer():
    L = [2, 3, 0, 5,
         1, 1, 1, 3,
         2,-1, 3, 7]
    A = np.array(L)
    A.shape = (3,4)
    result = cramer.solve(A)
    if result:
        x,y,z = result
        print('solution')
        print('x =', x)
        print('y =', y)
        print('z =', z, '\n')
        cramer.check(A,x,y,z)

run_cramer()
# =>
# solve
# [[ 2  3  0  5]
#  [ 1  1  1  3]
#  [ 2 -1  3  7]] 
# 
# compute 3 x 3 det of
# [[ 2  3  0]
#  [ 1  1  1]
#  [ 2 -1  3]]
# D =  5 
# 
# compute 3 x 3 det of
# [[ 5  3  0]
#  [ 3  1  1]
#  [ 7 -1  3]]
# Dx =  14 
# 
# compute 3 x 3 det of
# [[2 5 0]
#  [1 3 1]
#  [2 7 3]]
# Dy =  -1 
# 
# compute 3 x 3 det of
# [[ 2  3  5]
#  [ 1  1  3]
#  [ 2 -1  7]]
# Dz =  2 
# 
# solution
# x = 2.8
# y = -0.2
# z = 0.4 
# 
# check
# row 0 = [2 3 0 5]
# 2*2.8 + 3*-0.2 + 0*0.4  = 5.0 
# 
# row 1 = [1 1 1 3]
# 1*2.8 + 1*-0.2 + 1*0.4  = 3.0 
# 
# row 2 = [ 2 -1  3  7]
# 2*2.8 + -1*-0.2 + 3*0.4  = 7.0 
# 
```

また引用元の記事にもありますが、[こちら](http://www.analyzemath.com/Calculators/Calculator_syst_eq.html)にオンライン計算機もあります。
Android SDKのアップデート後のeclipse起動時エラー解決方法

**(2014/04/16時点)**

・【Android SDKのアップデート後のeclipse起動時エラー解決方法】
------------------------------------------------------------------

久しぶりにelipseを起動したら以下のエラーが発生したので解決方法を探してみた。
`【エラー内容】
this android sdk requires android developer toolkit version [バージョン] or above　
`
エラーダイアログの中に親切に更新できるっぽい「Check for Updates」ボタンがあるけど、押しても解決はしない。（このボタン何か意味あるの？？）


「なんだこれは、意味不明だぜっ！？」と思ってソースを見てみると・・・
見渡すかぎりの、赤、赤、赤でした。これじゃ動かん。
![無題.jpg](https://qiita-image-store.s3.amazonaws.com/0/41775/f60bf6d9-83b1-fc0e-5970-592e4568fcac.jpeg)

調べてみるとの以下サイトに解決方法が綺麗にのってた。
[参考：http://papakingyo-android.blogspot.jp/2013/02/android-sdk.html](http://papakingyo-android.blogspot.jp/2013/02/android-sdk.html)

**■解決方法**
==================================================================
①eclipseの右上のヘルプ＞「 **新規ソフトウェアのインストール** 」を開く
------------------------------------------------------------------
![1.jpg](https://qiita-image-store.s3.amazonaws.com/0/41775/8906c8c3-eff1-9e05-d1d2-79962510246a.jpeg)



②インストールのダイアログが開いたら「 **追加** 」を押下
------------------------------------------------------------------
![2.jpg](https://qiita-image-store.s3.amazonaws.com/0/41775/eb23d39a-d6b2-82ed-445a-5fbd25758bdb.jpeg)


③ロケーションに以下のURLを指定し「 **OK** 」を押下
------------------------------------------------------------------
[https://dl-ssl.google.com/android/eclipse/](https://dl-ssl.google.com/android/eclipse/)
![3.jpg](https://qiita-image-store.s3.amazonaws.com/0/41775/4d44e332-0e94-0c98-2bea-e70febb4541a.jpeg)

あとは流れのままに進めていけば解決！！
※作業後にはeclipseの再起動が必要となるため、ご注意を。

参考まで。

---
[簡単家計簿 Androidアプリ](https://play.google.com/store/apps/details?id=jp.example.keepingbook.app&hl=ja)

[音感診断 Androidアプリ](https://play.google.com/store/apps/details?id=jp.xising.single.app&hl=ja)
よく使うSPARQLサンプル集 

SPARQL Endpointを目の前にしたときに、いったい何を問合せたらいいのだろう？という場合に使えるSPARQLをまとめてみました。

とりあえずトリプルが何件入ってるか知りたい
`SELECT count(*) WHERE { ?s ?p ?o }`
 
とりあえずどんなデータが入っているか見たい
`SELECT * WHERE { GRAPH ?g { ?s ?p ?o }} LIMIT 500`

グラフ毎の件数を集計して見たい
`SELECT ?g count(?g) WHERE {GRAPH ?g {?s ?p ?o}} GROUP BY ?g`

**あるグラフ**配下のデータだけを見たい（何のグラフがあるかは一つ上↑のSPAQLで）
`SELECT * WHERE { GRAPH <あるグラフ> {?s ?p ?o }}`

**aomori**が含まれるデータを探したい（主語から探す）
`SELECT * { GRAPH ?g { ?s ?p ?o . FILTER( contains(str(?s),'aomori') ) }}`

**title**が含まれるデータを探したい（述語から探す）
`SELECT * { GRAPH ?g { ?s ?p ?o . FILTER( contains(str(?p),'title') ) }}`

**青森県**が含まれるデータを探したい（目的語から探す）
`SELECT * { GRAPH ?g { ?s ?p ?o . FILTER( contains(str(?o),'青森県') ) }}`

**グラフ**完全一致でデータを探す
`SELECT * { GRAPH <グラフ> {?s ?p ?o}}`

**主語**完全一致でデータを探す
`SELECT * { GRAPH ?g {<主語> ?p ?o}}`

**述語**完全一致でデータを探す
`SELECT * { GRAPH ?g {?s <述語> ?o}}`

**目的語**完全一致でデータを探す
`SELECT * { GRAPH ?g {?s ?p '目的語'}}`

**目的語**完全一致でデータを探す（言語指定あり）
`SELECT * { GRAPH ?g {?s ?p '目的語'@ja}}`

以下のサイトでなどでお試しできます。（負荷にご注意）
[DBpedia - SPARQL Endpoint](http://dbpedia.org/sparql)
[DBpedia japanese - SPARQL Endpoint](http://ja.dbpedia.org/sparql)

↓2014/8/6追加

述語の種類を列挙する。どんな述語(?p)があるのか。
`SELECT DISTINCT ?p {?s ?p ?o} ORDER BY ?p`

**LEFT JOIN**みたいなことをする。 下記例ではtitleにtelとaddressを連結。
`SELECT * {
  GRAPH ?g {?s <title> ?title}
  .OPTIONAL {?s <tel> ?tel}
  .OPTIONAL {?s <address> ?address}
}`

↓2014/10/22追加

**GROUP CONCAT**する。1レコード中に複数出現する項目(tag)を1つにまとめて1レコードに。
`SELECT ?title GROUP_CONCAT(?tag ; separator=' ') AS ?tags
{ 
	?url <title> ?title
	.?url <tag> ?tag
}
LIMIT 100`

**複数のGRAPH**を指定してSELECTする。
`SELECT * 
FROM <GRAPH_SONO_1>
FROM <GRAPH_SONO_2>
FROM <GRAPH_SONO_3>
{ ?s ?p ?o }
LIMIT 100`
OpenGLのTexture Unitについてのメモ

Multiple Textureを扱うためにTexture Unitというものがある。(初期値は0で、同時に1枚のテクスチャしか扱わない場合は特に気にしなくてもいい。)  
例えば、
`glActiveTexture(GL_TEXTURE0);
glActiveTexture(GL_TEXTURE1);
glActiveTexture(GL_TEXTURE2);`
のように指定する。また、
`glActiveTexture(GL_TEXTURE0 + 0);
glActiveTexture(GL_TEXTURE0 + 1);
glActiveTexture(GL_TEXTURE0 + 2);`
というようにも指定できる。  
Texture関連のOpenGLラッパークラスを作成していたところここでハマった。  
クラスメンバーに、
`GLuint mTextureUnit;`
というものを持っておいて、
`glActiveTexture(GL_TEXTURE0 + mTextureUnit);`
というように利用しようという算段である。  
どうせ0以上の数だし`unsigned int (GLuint)`でいいだろうと思ったのが運の尽き。
0以外のTexture Unitにバインドしたテクスチャが利用できないという事態に。
そうとう長い間シェーダーが悪いのかと考えてひたすらシェーダーを書き換えていたが、
`glGetError`やOpenGL4.3から標準規格となったDebugMessageによって`GL_INVALID_ENUM`や`GL_INVALID_OPERATION`が発生していることを確認し、原因を突き止めた。  
`int (GLint)`でないければならなかったのだ。  

-----

試しに`int`と`unsigned int`の足し算や引き算を行って`auto`で受けてその型を調べたら`unsigned int`になっていた。色んな意味でつらぽよい事象であった。。。
作業メモ：MEAN+Angular-fullstack/Yeoman+EC2で小ハマり

#やりたいこと
node.jsがインストールされたAmazonLinux/EC2にyeomanを使ってMEAN(MongoDB+Express+Angular+Node)環境を作成する。

#やりかた
[このページ](http://slowquery.hatenablog.com/entry/2014/01/30/023712)のやり方を少しだけ変えて実行。以下、変えた部分だけメモ。
※後述する通りこのページのソース生成のコマンド間違っています。

* rootユーザでnodeのモジュールインストール`npm -e generator-angular generator-angular-fullstack`
* rootユーザで[このページ](http://docs.mongodb.org/manual/tutorial/install-mongodb-on-red-hat-centos-or-fedora-linux/)を見てMongoDBをインストール。

#ハマったこと／解決策
* npmでgenerator-angular-fullstackをインストールしても、generator-angularがないと怒られたので追加した。フルスタックなはずなんだけどなぜ？
* mongodb起動時に/data/dbがないと怒られたのでmkdirで作成。ハマったわけではない。
* grunt serverでweb serverが起動したはずが、ブラウザからアクセスできない現象発生。

対処１：EC2セキュリティグループのポートの穴をあける。
~~対処２：Gruntfile.jsのconnectにあるhostnameを"localhost"から"0.0.0.0"に変更。~~

* 参考にしたページのyoコマンドのパラメータにミスがあり、サーバ側で生成されない問題が発生。正しくは、`yo angular-fullstack [app-name]`ですね。 
* grunt serveで起動したところopen:serverで以下のエラーとなりました。

> Warning: Command failed: /home/ec2-user/prototype/node_modules/open/vendor/xdg-o
pen: line 584: xdg-mime: command not found

xdg-mimeのコマンドが見つからない。これはxdg-utilsに含まれるのでyumでインストールしようとしたところamazonのリポジトリになかったので、[このページ](http://d.hatena.ne.jp/hiratake55/20120708/1341753901)を見てcentosのリポジトリからyumインストールできました。とりあえずOK.

* mongodを自動起動にしようと思ったが、service startできなかったので調べたところ以下のエラーが出ていました。(/var/log/mongodb/mongod.log）

> 2014-04-16T23:27:42.302+0000 [initandlisten] Please make at least 3379MB available in /var/lib/mongo/journal or use --smallfiles

ので、/etc/mongod.confに`smallfiles=true`をつけて起動したら問題なし。chkconfigで自動起動設定できました。
Gradle で Maven にデプロイしようとしたら怒られた時の対処法

[この記事](http://qiita.com/KeithYokoma/items/e9ee24e7f6a62623f2fb)の末尾でも説明したように、`gradle-mvn-push`プラグインの`uploadArchives`では、内部的に`androidJavadocs`タスクも実行されており、このタスクは、`dependencies`による依存関係を知らないため、Java の標準 API 以外はほとんど解釈できません。そのため、Javadoc の生成時に解決できないシンボルが出現してしまうため、タスクが失敗します。

そこで、以下の解決策があると説明しました。

```groovy

afterEvaluate {
    androidJavadocs.classpath += files(android.plugin.runtimeJarList)
}
```

この場合、Android フレームワークの API を解決させるには十分です。
しかし、依然として`dependencies`に記述した依存までは解決してくれません。

そこでどうするかというと、以下のようにします。

```groovy

afterEvaluate {
    androidJavadocs.classpath += files(android.plugin.runtimeJarList)
    androidJavadocs.classpath += project.android.libraryVariants.toList().first().javaCompile.classpath
}
```

`androidJavadocs`タスクのクラスパスに、自分のライブラリが持っているクラスパスを渡します。
これで無事シンボルが解決出来るようになります。
【質問】ページ遷移の際のパラメータ渡しについて

閲覧ありがとうございます。
Salesforce,Visualforce,Apexに関する質問です。

ページ１で、ある商品を選択するボタンを押すと
その商品の詳細が載ったページ２に遷移するページを作成しています。
ページ１のcommandButtonにparamを使って、ページ２へid情報を渡したいです。

いくつかのページを参考にしましたがこちらのページが自分のやりたいことに
最も近いと思い、それにかなり近く組んでみたつもりなのですが、上手くいきません。

https://developer.salesforce.com/forums/ForumsMain?id=906F00000009B4vIAE


【コントローラ】

```
public with sharing class testController {
    public List<MerchandiseInventoryControl__c> targetList {get; set;}
    public String targetId {get; set;}
   
    public testController() {
    }
   
    public Pagereference doSelect() {
　　targetId = ApexPages.currentPage().getParameters().get('tgtm');
        targetList = testDao.getTargetRecs(targetId);
        return Page.Page2;
    }
 
}


【ページ１】
<apex:page controller="testController">
    <apex:form >
    <apex:pageBlock title="商品一覧">
        <apex:pageBlockSection >
                <apex:pageBlockTable value="{!inventoryList}" var="im">  
                    <apex:column >
                        <apex:commandButton value="この商品を選択する" action="{!doSelect}">
                            <apex:param name="tgtm" value="{!im.Name}" assignTo="{!targetId}"  id="tgtm"/>
                        </apex:commandButton>
                    </apex:column>
                </apex:pageBlockTable>      
        </apex:pageBlockSection>
    </apex:pageBlock>
    </apex:form>
</apex:page>

【ページ２】
<apex:page controller="testController">
    <apex:form >
        <apex:pageBlock title="選択した商品の情報">
        <apex:pageBlockSection >
                <apex:pageBlockTable value="{!targetList}" var="tl">
                </apex:pageBlockTable>
        </apex:pageBlockSection>
    </apex:pageBlock>
    </apex:form>
</apex:page>

```

色々試してみたのですが、どうしてもページ２の方にid情報が渡らないので
質問させていただきました。
どうか、よろしくお願い申し上げます。
【CakePHP】独自ログ

Cakeを使った独自ログの出力方法。

##ログ定義
ログ定義は、CakeLogが読み込まれていればどこに定義してもよいが、通常はConfig/bootstrap.phpの最後にデフォルトのログ定義があるので、その後に記述する。

ログの定義は以下のように行う。

```php:ログ定義
CakeLog::config('access_log', array( //ログ定義名
  'engine' => 'FileLog',//出力先。FileLogでファイルに出力するということ。
  'types' => array('access'),//$this->log()の第二引数に渡す値。
  'file' => 'access', //tmp/logs配下に出力されるログ名。拡張子に.logが付く。
));
```


##ログ出力
ログ定義のtypeを指定して出力する。typeが複数のログ定義に存在すれば、それらに出力される。

```php:ログ出力
$this->log('ログ内容', 'access');
```

```php:出力結果
2014-04-16 11:51:28 access: ログ内容
```

参考：[CakePHP 2でオリジナルログを吐き出す方法](http://ivystar.jp/programming/php/cakephp-php-programming/how-to-spit-out-the-original-log-in-cakephp-2/)
地図表示の経度幅と横ピクセル幅から、ズームを逆算する方法

昨日会社で、同僚に経緯度と表示範囲から、地図ズーム逆算する方法聞かれたんですよ。
で、偉そうに、メルカトル図法だから緯度が影響するからとかなんとか言ったんですけどね、なんかいざ計算してみると、緯度関係なく計算できそうなんですよ。

で、よくよく考えると、等角図法なんで緯度に関係なく経度間の幅は一定になるはずで、それとピクセル間の比でズーム決まるはずですから、どう考えても緯度関係なさそうなんですよね。
今までよくよく考えてなかったから気づきませんでしたけど。

いやあ、これだけ地図に詳しくなったつもりでも、いろいろ気づかされるもんですね…。

というわけで、ちょっと算出法をまとめてみたら、チョー簡単な式になりました。

まず、ズームレベルzと、そのズームレベルでの球面メルカトル座標(単位m)とピクセルの比(meter per pixel:正式用語ではありませんが、mppとでも略します)の定義を見てみましょう。
JavaScriptベースだと[この辺](http://qiita.com/kochizufan/items/bf880c8d2b25385d4efe)に以前まとめましたが、数式ベースだと、

```math
M_{max}:球面メルカトル座標最大値 (赤道での地球半周のm)\\
R:地球半径\\
\\
とおくと、M_{max}=\pi R \\
また、ズームレベルzでの世界全体地図の1辺ピクセル数は、\\
256 \times 2^z なので、mppは、\\
mpp = \frac{2\pi R}{256 \times 2^z} = \frac{\pi R}{128 \times 2^z}
```

また、地図表示エリアの東端経度Lx1、ピクセルx座標Px1、西端経度Lx2、ピクセルx座標Px2とおくと、表示領域から求まるmppは、

```math
東端メルカトルx座標 M_{x1} = \frac{L_{x1} \pi R}{180}\\
西端メルカトルx座標 M_{x2} = \frac{L_{x2} \pi R}{180}\\
\\
mpp = \frac{M_{x1}-M_{x2}}{P_{x1}-P_{x2}}\\
=\frac{\frac{\pi R (L_{x1}-L_{x2})}{180}}{P_{x1}-P_{x2}}\\
経度差を\Delta L = L_{x1}-L_{x2}、\\
ピクセル差を\Delta P = P_{x1}-P_{x2}とおくと、\\
mpp = \frac{\pi R \Delta L}{180 \times \Delta P}
```

この両者が一致するzを求めるので、

```math
\frac{\pi R}{128 \times 2^z} = \frac{\pi R \Delta L}{180 \times \Delta P}\\
2^z = \frac{180 \times \Delta P}{128 \times \Delta L} = \frac{45 \times \Delta P}{32 \times \Delta L}\\
z = log_2(\frac{45 \times \Delta P}{32 \times \Delta L}) \\
= log_2(1.40625\frac{\Delta P}{\Delta L}) \\
= \frac{log_e(1.40625\frac{\Delta P}{\Delta L})}{log_e 2} (対数法則詳しくない人のために)
```

という感じの計算結果になると思います。

つまり、JavaScriptで書くなら、

```js:経度差とX座標ピクセル差から、ズームレベルを求める
    var zoom = Math.Log( 1.40625 * (px1 - px2) / (lon1 - lon2) ) / Math.LN2;
```

という感じでしょうか。

小数になるので、適宜ceil/floor/roundしてください。
また、Retinaだのxxhdpiだのみたいな高解像度環境では、実ピクセル数ではなく、dpやpointのような値を使うのが吉です。
Wikipediaの手順通りに「エラトステネスの篩」をJavaで書いてみた



	public static void main(String[] args) {
		List<Long> ansList = sieve(1000L);
		System.out.println(ansList.toString());
	}

	public static List<Long> sieve(Long x) {

		// 探索リストを作成
		LinkedList<Long> searchList = new LinkedList<Long>();
		for (Long i = 2L; i <= x; i++) {
			searchList.add(i);
		}

		// 素数リスト
		LinkedList<Long> primeNumberList = new LinkedList<Long>();

		// 探索リストの先頭要素がxの平方根に達するまで以下の処理を繰り返す
		while (searchList.getFirst() < Math.sqrt(x)) {

			// 探索リストの先頭要素を素数リストに追加する
			Long primeNumber = searchList.getFirst();
			primeNumberList.add(primeNumber);

			// 探索リストの先頭要素の倍数を探索リストから削除する
			for (Iterator<Long> it = searchList.iterator(); it.hasNext();) {
				if (it.next() % primeNumber == 0) {
					it.remove();
				}
			}
		}

		// 探索リストに残った数を素数リストに追加する
		primeNumberList.addAll(searchList);

		return primeNumberList;
	}
Gradle で Maven から依存関係を解決しようとしたら怒られた時の対処その2

最近の AndroidStudio のアップデートで、新規にプロジェクトやモジュールを作った時、モジュール直下に libs ディレクトリが作られるようになりました。このおかげで、ADT 時代のように、jar を直接ぶち込んでパスを通すという作業が簡単になりました。

この libs ディレクトリは、ライブラリプロジェクトでも使うことができます。どの種類のモジュールでも、以下のようにしておくだけでパスが通ります。

```groovy:build.gradle

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
}
```

さて、jar が libs ディレクトリにぶち込まれるということは、ADT 時代のような悪夢が再来するということになります。
つまり、ライブラリプロジェクトが保持している jar と、sha1 ハッシュの異なる jar をアプリケーションプロジェクトでも保持してしまうと怒られたり、ライブラリプロジェクトが保持している jar と同じものをアプリケーションプロジェクトが保持すると怒られたり（名前空間の衝突）します。

maven repo への依存を記述すているものは、アプリケーションプロジェクトで全てが解決されるのでこのようなことは起こりません。逆に言えば、github repo に maven repo があるものに依存するライブラリを使うときは、アプリケーションプロジェクト側でもその github repo にある maven repo のことを知らせないといけないということでもあります。

現状のビルドツールでは、ライブラリが持つ jar とアプリケーションプロジェクトが持つ jar を見分けていい感じに解決してくれるような機能は無いようなので、ライブラリプロジェクトで jar を持つのは余程のことがない限りしないほうが良さそうに思いました。
emacs24にtramp,w3m,mewをインストール

vim使いがemacs24の環境構築してみた。
他に便利そうなものありましたら教えて下さい。

emacs24
===============================

```bash:emacs24のインストール
$ brew install -y emacs
```

```bash:~/.bashrc
PATH=/usr/local/bin:$PATH
```

```bash:
$ source ~/.bashrc
```


trampでリモートのファイルを編集
===============================

```bash:trampをインストール
$ mkdir ~/emacs; cd ~/emacs
$ wget http://ftp.gnu.org/gnu/tramp/tramp-2.2.9.tar.gz
$ tar xzf tramp-2.2.9.tar.gz
$ mv tramp-2.2.9 tramp
```

```lisp:~/.emacs
;;tramp
(add-to-list 'load-path "~/emacs/tramp/lisp/")
(require 'tramp)
```

## trampの使い方

```bash:emacsから
c-x,c-f
Find file: /ssh:username@192.168.11.2:.bashrc
```

リモート側でファイルが更新された場合、vimだと即座に`L`押せと出るが
emacsでは編集開始しようとした時に表示されます。`r`を押して最新の状態に更新。


w3m
===============================

```bash:w3mをインストール
$ brew install -y w3m
```

```bash:cvsをインストール
$ brew install -y cvs
```

```bash:cvs版のemacs-w3mをインストール
$ cvs -d :pserver:anonymous@cvs.namazu.org:/storage/cvsroot co emacs-w3m
$ wget http://emacs-w3m.namazu.org/emacs-w3m-1.4.4.tar.gz
$ tar xfz emacs-w3m-1.4.4.tar.gz
$ 'cp' -a emacs-w3m/* emacs-w3m-1.4.4
$ cd emacs-w3m-1.4.4
$ ./configure
$ make EMACS=/usr/local/bin/emacs
$ make EMACS=/usr/local/bin/emacs install
```

```lisp:~/.emacs
;;w3m
(require 'w3m-load)
```

## emacs-w3mの起動

```bash:emacsから
M-x w3m
```

もしくは

```bash:shellから
$ emacs -e w3m
$ emacs -e w3m google.co.jp
```

eshell
===============================

```bash:emacsから
M-x shell
```

Mew
===============================

```bash:
$ git clone git://github.com/kazu-yamamoto/Mew.git
$ cd Mew
$ ./configure
$ make
$ make install
```

```bash:
$ brew install -y stunnel
```

## mewからgmailを使う

```bash:~/.emacs
;;mew
(require 'mew)
;; IMAP用
(setq mew-proto "%")
(setq mew-user "username@gmail.com")
(setq mew-mail-domain "gmail.com")
(setq mew-imap-server "imap.gmail.com")
(setq mew-imap-user "username@gmail.com")
(setq mew-imap-auth  t)
(setq mew-imap-ssl t)
(setq mew-imap-ssl-port "993")
(setq mew-smtp-auth t)
(setq mew-smtp-ssl t)
(setq mew-smtp-ssl-port "465")
(setq mew-smtp-user "username@gmail.com")
(setq mew-smtp-server "smtp.gmail.com")
(setq mew-ssl-verify-level 0)
(setq mew-use-cached-passwd t)
```

## mewの起動

```bash:emacsから
M-x mew
```

```bash:shellから
$ emacs -e mew
```
PHP5技術者認定初級試験 合格必勝法

# 試験の概要
* 試験の名前の通りPHPの基本的な知識が問われる試験です
* 試験の勉強をしていれば、簡単なのPHP製アプリならちゃちゃっと作れるようになります
 * 「試験に合格したという満足感＋自信」「スキルアップ」が得られる一石二鳥のすばらしい試験です
 * 私は普段は主にRubyを中心に触っていてPHPなど全くしらないド素人ですが、勉強しているうちに簡単なアプリを作るところまでできるようになりました

### 設問数
* 40問

### 試験時間
* 60分 ( 90秒 / 問ペース )

### 合格ライン
* 7割正解
* 試験会場を退出するまでに合否が分かります

### 出題範囲(試験結果レポートより)
* 01. オリエンテーションと始めの一歩
* 02. テキストと数の操作
* 03. 判定と繰り返しについて
* 04. 配列の操作
* 05. 関数
* 06. Webフォームの作成
* 07. データベースに情報を保存
* 08. クッキーとセッションでユーザを記憶
* 09. 日付と時刻の取り扱い
* 10. ファイルの操作
* 11. XMLのパースと作成
* 12. デバッギング
* 13. クラスとオブジェクト
* 14. 日本語処理
* 15. 正規表現の基本
* 16. PHP5.1とPDO
* 17. セキュリティ
* 18. 出力バッファ
* 19. 定数・予約語

# 試験の申込方法
* プロメトリック経由のオンライン予約
* http://it.prometric-jp.com/testlist/php/index.html
* 全国約140会場で毎日受験可能

### 受験料金
* 12,000円(税抜)

# 試験対策教材
* Web教材
 * @ITの[ITトレメ](http://jibun.atmarkit.co.jp/scenter/ittrain/122_today_q.html)
 * PHP5技術者認定初級試験の模擬問題の更新版を2014/04/14から1週間フリーダウンロードできます
 * 詳しくは[一般社団法人PHP技術者認定機構のFacebook](https://www.facebook.com/phpexam.jp)ページへ
* 書籍 (詳しくは[こちら](http://www.phpexam.jp/material/)に)
 * 初めてのPHP5 (オライリージャパン) ◀︎ 主教材
 * PHP公式資格教科書 (PHP技術認定機構) ◀︎ 認定対策本
 * 徹底攻略 PHP5技術者認定[初級]試験 公式問題集 (インプレスジャパン)
* 受験した感触ではPHP公式資格教科書とITトレメをやれば7〜8割(合格ラインは7割)くらいはとれそうです
* ただ、そこには載っていないことも出題されるので主教材の「初めてのPHP5」も目を通しておいた方がいいです

# 勉強のコツ

## まず、本を買いましょう！
* ITトレメにも対策問題は載っています
* しかし、それだけで試験に挑むのは自信がある人でないと危険な道だとおもいます

## 対策本とITトレメをしっかりと

* これが出た、あれが出たという問題はここでは公表できないのでこう勉強したらいいよというコツだけ
* 出題されるのは基礎の基礎なので、PHP公式資格教科書をしっかりと読んで何度も解くのが一番です！
* [ITトレメ](http://jibun.atmarkit.co.jp/scenter/ittrain/122_today_q.html)の問題は「正しくないものを選択せよ」という形式がたくさんありますが、本番の試験ではそこまでありません
* 設問は「正しいものを選択」、「正しくないものを選択」、「複数選択」と様々な問われ方があるので設問をしっかり読みましょう
* 2つ選択しないといけないときに１つは分かるのに、もう１つはどれだとならないように強調されている記述以外のところも読むことが大切です
* PHPの試験ですが、一般的なITの技術的な知識を問われる問題も少々あります
 * 情報処理技術者試験の基本情報技術者レベルの知識があれば大丈夫
* データベースの知識も少し必要なので、自信がなければ参考書などでよくその章を確認しましょう

## O'Reilly本で強化
* O'Reilly本を読む気力があれば、是非 ①O'Reilly本 ②試験対策本 ③ITトレメの順で勉強することをお勧めします
* また、私のようなPHPド素人の場合は導入部分をO'Reilly本で学習。少し分かるようになったら試験対策本というやり方もよかったです
* 情報量としては、O'Reilly　＞ 試験対策本　＞　ITトレメなので、O'Reilly最強
* 私のようなド素人なら尚更O'Reillyを見なければ、危うかったと思います(流し読みでしたがw)

# 合格後のお楽しみ
## 認定証明書
* プロメトリックでの申し込み時に入力した住所へ合格認定証と認定カードが届きます
* 到着まで結構かかります
 * 私の場合は1月末に受験して4月中旬に到着(2ヶ月半くらい^q^)
 * [FAQ](http://www.phpexam.jp/contact/faq/)にも「合格してから1か月〜1か月半程度以内に認定証明証と認定カードが届きます」とある
 * あまりに到着が遅いようでしたら、Twitter/Facebookでお問い合わせをするのがおすすめです(私の場合その日に回答を頂きました)
 
## 合格体験記
* [合格体験記](http://www.phpexam.jp/summary/goodphper/)
* [合格体験記応募方法](http://www.phpexam.jp/summary/goodphper_aply/)からインタビューに答えてメールすれば素敵なグッズがもらえます！
 * 2014/04現在では「ペチゾーのぬいぐるみ」 OR 「I ♡ PHPマグカップ」でした 

----

* Twitter：@phpexam (http://twitter.com/phpexam/)
* Facebook：https://www.facebook.com/phpexam.jp (一般社団法人PHP技術者認定機構)

# ～ただの宣伝～
* [全国のSeleniumer必読](http://qiita.com/oh_rusty_nail/items/b8ba525d31ea7c522856)
* Seleniumerといっていますが、Selenium, SauceLabs, Travis, Jenkinsに関するノウハウ書いているのでよかったら参考にしてみてください
CSS入門（ドットインストール）

ドットインストール　CSS入門で学ぶことのまとめ。

Cascading Style Sheet
HTML(文書構造)　＋　CSS（見た目）　＝　Webページ

セレクタ{
     プロパティ:値;
     プロパティ:値;
     プロパティ:値;
}

id→ # 
class→.
コメントアウト　/*       */

#スタイルの書き方

●　styleタグに入れる
<style>
     style=“color:red;
</style>

●　インラインで書いていく
<p style=“color:red;”>

●　外部ファイルに書いていく
p{
     color:red;
}


#セレクタについて

*: すべてのセレクタ
a,b（カンマ区切り） :ふくすうのセレクタを指定
a b (空白を開ける)　:aの中のbのすべての子要素を指定
a > b（不等号記号）:aの直下のbだけに適用
a + b （プラス記号） :aの直後のbにだけ適用
a.b(aとbの間に空白なし)　:aかつbである要素にだけ適用

#スタイル指定の優先度

　●後から書いたほうが優先
　●インラインで書いた方が優先
　●詳細度の高い方が優先　例）section #main h1のように詳しく
　●!importantが優先

 #色の指定方法

   ●名前　red blue purple
   ●r(ed) /g(reen) /b(lue) 0-255 rgb(0,255,0) 
  ●16進数　#00f #ff0000

#様々なプロパティ

　color, font-weight, font-size, text-align, text-decoration,font-family, line-height

#背景の色

background-color:green;
background-image:url(‘bg.png’);
background-repeat:no-repeat; repeat-x;なら横方向,repeat-y;なら縦方向のみ
background-position:10px 10px;
background:attachment:fixed;(scroll)

これらは順不同で複数指定可能

#ボックスモデル

width, height, border,margin, padding

##border

 border-color
 border-width
 border-style    solid, dashed, dotted, double, inset,outset 

 例）　border : red 5px solid ;

#padding

padding:10px; 上下左右すべての余白
padding:10px 20px;上下10px　左右20px
padding:10px 20px 30px; 上10px 左右　20px　下30px
padding:10px 20px 30px　40px; 上10px 　右20px　下30px　左40px

margin も同様

#display 
-block　前後に改行が入る
-inline　前後に改行が入らない（高さと幅の設定が解除）
-inline-block　前後に改行が入らない（高さと幅の設定が有効）
none　表示されない

#overflow
-visible はみ出した部分も表示
-hidden　はみ出した部分は非表示
-scroll　はみ出した部分はスクロールで表示

#position
-static
-relative 親要素
-absolute　子要素
　top right left bottom  で位置を指定できる
-fixed
     top right left bottom  で位置を指定できる

#z-index
要素の重なりを指定するプロパティ
position のstatic以外に指定出来る

z-index:1;
z-index:2; では　後者のほうが上に来る

#float
##要素の回り込み
float
-left
-right

##解除
clear
-left
-right
-both 両方解除

#list

list-style-type マーカーの種類　circle square katakana
list-type-position マーカーの位置　outside inside
list-style-image list-style-typeより優先される
例)　list-style:url(‘image.png’);

#cursor
カーソルの形を変える
cursor
-move
-help
-wait
-pointer

#擬似クラス
　ある要素が特定の状態にある場合にスタイル指定
:link　未訪問のリンクにスタイルを指定
:visited　訪問済みのリンクにスタイル指定
:hover マウスが乗っかったときのスタイル指定（リンク要素でなくても可能）
:active　リンクを押してから離すまでのスタイル指定
:focus　formにfocusしたとき色が変わる
FuelPHP開発入門_07


今回は主にDBの単純な操作を行うクエリビルダ周りをやります。
モデル構築とリレーションの話はまた別の時に。
DBの設定については[FuelPHP開発入門_02](http://qiita.com/yumura_shiho/items/eb07f130270cee27717c)を参考にしてください。

## Insert

insert文の基本構文は

```php
DB::insert('hoge')->set(array('key'=>'value'))->execute();
```

の形です。
set()部分は連想配列が見やすくて好きです。
postと合わせると以下

```php
$post=Input::post();
if(!empty($post)){
	DB::insert('hoge')
		->set(array('name'=>$post['name'],'age'=>$post['age']))
		->execute();
}
```

## Update

```php
DB::update('hoge')
	->set(array('name'=>$post['name']))
	->where('id'=>$post['id'])->execute();
```

Where句に関してはbetweenやlikeなどもサポートされています。
より詳細なwhereに関しては[FuelPHP公式リファレンス](http://fuelphp.jp/docs/1.7/classes/database/usage.html#/where_statements)参照のこと(´@ω@｀)ﾏﾙﾅｹﾞ

## Select

```php
$data=DB::select()->from('hoge')
	->set(array('name'=>$post['name']))
	->where('id'=>$post['id'])->execute();

// ついでに件数取得
$cnt=count($data);

```

## Delete

```php
DB::delete('hoge')->where('id',$post['id'])->execute();
```

てっ手抜きじゃないですよ書式が統一されているだけでえっととても使いやすいです

ちなみにあとで取り扱おうと思いますが、SimpleAuthパッケージを用いる際は
ユーザー情報の登録編集削除は専用の関数があります。
Ormパッケージを用いる際もまた書き方が変わりますので、
今回の話はあくまでクエリビルダのことと思っていていただければと思います(´@ω@｀)
詳細は：[FuelPHP公式リファレンス](http://fuelphp.jp/docs/1.7/classes/database/usage.html)

次回Orm/Modelの作成ですかねー
本当に正しい .bashrc と .bash_profile の使ひ分け

適当にググると「とにかく何でも .bash_profile に書いとけばおk」みたいな嘘を書いたブログ記事がわんさか出てくるのでここに正解を書いておきます。

# .bash_profile

.bash_profile はログイン時にのみ実行されます。具体的な用途は:

* 環境変数を設定する (export する変数)

環境変数はプロセス間で勝手に受け継がれるのでログイン時のみ設定すれば十分です。

# .bashrc

.bashrc は対話モードの bash を起動する時に毎回実行されます。具体的な用途は:

* 環境変数でない変数を設定する (export しない変数)
* エイリアスを定義する
* シェル関数を定義する
* コマンドライン補完の設定をする

これらは bash を起動する度に毎回設定する必要があるものです。

# その他

[.bash_profile ? .bashrc ? いろいろあるけどこいつらなにもの？](http://qiita.com/hirokishirai/items/5a529c8395c4b336bf31) を参照。もっと突き詰めたい人は [Linux: .bashrcと.bash_profileの違いを今度こそ理解する](https://techracho.bpsinc.jp/hachi8833/2019_06_06/66396)。

Bash 以外のシェルを使用しない人は .bash_profile と .bashrc だけ知っておけば十分です。

.bashrc に書いた設定が反映されないけど .bash_profile に書くといける場合は、 .bash_profile から .bashrc を読み込む処理が抜けてます。

```bash
# .bash_profile の最後に
test -r ~/.bashrc && . ~/.bashrc
```