OmniAICreator/Qiita-1.07M huggingface dataset:
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed while accessing https://github.com/xxx/xxx.git/info/refs の対応


### ContOSが古い場合

(GitHubにおけるSSLの認証エラーを回避するため、EV SSL用ルート証明書を追加する) [http://d.hatena.ne.jp/tetsuyai/20110924/1316877887]

```
2011年5月末以降、github.comにはDigiCertのEV SSL証明書（DigiCert HighAssurance EV CA-1）が使われるようになりました。しかし、CentOS 5の標準パッケージにはDigiCertのEV SSL用ルート証明書（DigiCert High Assurance EV Root CA）が含まれていないため、cloneしようとしたところでSSLの認証エラーが発生します。
```

### この対応がよい↓

error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed while accessing」の解決方法
http://d.hatena.ne.jp/tututen/20120216/1329358618

```
$ sudo curl http://curl.haxx.se/ca/cacert.pem -o /etc/pki/tls/certs/ca-bundle.crt
```
LabVIEW SJIS <-> UTF-8 文字コード変換

LabVIEW Windows版での日本語文字コードSift_JISからUTF-8へ、あるいはその逆。

関数パレットには表示されないが、文字コード変換用関数が用意されている。
Windows環境のみで有効。cRIO-RTでは動かない(エラーにもならずスルーされるだけ。)

以下、VIスニペット(PNG画像)をダウンロードして、ダイアグラムにドロップすれば、使えるようになります。

![UTF8toSJIS_LabVIEWInternalFunction.png](https://qiita-image-store.s3.amazonaws.com/0/43526/401d8910-be8e-08f5-3209-2e105969567c.png)
How I added default sorting in my Ember.js application


This is a ridiculously short post and kind of highlights how amazing Ember.js is for writing web applications without having to do a lot of boilerplate code. Let's get started.


# The solution

```diff
diff --git a/app/controllers/shows.js b/app/controllers/shows.js
index b387bf5..94845aa 100644
--- a/app/controllers/shows.js
+++ b/app/controllers/shows.js
@@ -1,4 +1,6 @@
 export default Ember.ArrayController.extend({
+    sortProperties: ['title'],
+    sortAscending: true,
     modalId: null,
     modalTitle: null,
     modalEpisode: null,
```


Done.


# Conclusion

Because of the hard work of the folks at Ember.js, I was able to leverage the code already available in the [Ember.sortableMixin](http://emberjs.com/api/classes/Ember.SortableMixin.html) class just by [supplying attributes in my controller](http://emberjs.com/guides/controllers/representing-multiple-models-with-arraycontroller/#toc_sorting).

When I first saw this online, I couldn't believe that I didn't have to do _anything_ to get sorting done. Just one of the many nice things about working with Ember.

My (very simple) Ember.js application is available on Github [here](https://github.com/kimagure/ShowTrackerEmberApp). [Demo here](http://kimagure.github.io/ShowTrackerEmberApp/#/shows).

Screenshot:

![screenshot](http://media-cache-ec0.pinimg.com/originals/fa/a8/b9/faa8b9a09a95b40c51cbd0a4ef77a7b7.jpg)
Clojureでワンライナーする

ClojureはJava上で動いているため、起動がけっこう遅いです。
普段はreplを起動しっぱなしすることが多いかと思います。
ただ、ワンライナーのやり方を覚えているとシェルスクリプトから呼んだりできるので便利です。

文字列を直接Clojureのコードとして評価するには以下のようにします。

```bash
$ java -cp clojure.jar clojure.main -e "(str 'abc 'def)"
"abcdef"
```

leiningenを使用する場合は以下です。

```bash
$ lein run -m clojure.main -e "(str 'abc 'def)"
"abcdef"
```

コマンドライン引数は`*command-line-args*`にstringのシーケンスとして入ってきます。

```bash
$ lein run -m clojure.main -e \
"(doseq [arg *command-line-args*] (println arg))" \
- abc def ghi
abc
def
ghi
```

しかし、この場合は強制終了しないと終了してくれません。
（おそらく標準入力から読み込むモードだからだと思われます）
本来の使い方は以下のような形だと思われます。

```bash
$ lein run -m clojure.main -e \
'(doseq [line (line-seq (java.io.BufferedReader. *in*))] \
  (println (clojure.string/replace line #"cat" "dog")))' \
- <<EOT
This is cat.
Hello cat!!
EOT

This is dog.
Hello dog!!
```

標準入力から順次1行を読みこんで正規表現の置換を行っています。
ヒアドキュメントの部分をファイルからのリダイレクトに変えたり、パイプでつないだり、いろいろできそうですね。
Macでftpサーバを立ち上げる

```diff:/etc/ftpd.conf
  # match umask from Mac OS X Server ftpd
  umask all 022
+ chroot GUEST /tmp
```

これでanonymousユーザは/tmpにアクセスできる。

```bash:起動
$ sudo launchctl load -w /System/Library/LaunchDaemons/ftp.plist
```

```bash:停止
$ sudo launchctl unload -w /System/Library/LaunchDaemons/ftp.plist
```

(pure-ftp, vsftpd, proftpdとbrewでインストールしたが、設定ファイルが
同梱されておらず動作できなかった)
ファイルが見つからない PBXCp Error が出た時の対処法

よく同じことで調べてしまうのでメモ。

使っていないファイルがあるよ、というエラーがでてビルドできないとき。

プロジェクトを選択する
Build Phases
Copy Bundle Resources

該当するファイル名が赤くなっているので、選択して削除する。
これでビルドできます。
CentOSにnginx, php-fpm, mysqlの環境を構築する２


 [前回の投稿](http://qiita.com/puttyo_bubu/items/5bf554ef2790f6435c32)からの続き。

##mysqlの設定
前回の投稿でmysqlをyumでインストール済みだと思います。
ちょっとおさらい。

 ```yumでインストール
$ yum --enablerepo=remi install mysql mysql-server  php php-fpm php-devel php-cli php-xml php-mysql php-mbstring php-gd
```

で、ここから。
まずはログインできるか確認。もちろんrootで。

```
# mysql
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (111)
```

。。。。いきなりエラー。
ぐぐる。 以下のコマンドでmysqlサーバが起動しているか
確認。

```
$ ps -ef | grep mysql
```

もちろん、起動していなかった orz
起動します。コマンドはmysqlという形で実行しますが、
実態はmysqldというサービスです。
まずはステータスの確認から。

```
$ service mysqld status
mysqld is stopped
```

やっぱり止まっていた。起動。

```
$ service mysqld start
Starting mysqld:                      [  OK  ]
```

もう一度、ログイン確認。

```
$ mysql -uroot -p
```

ちなみに、上記はユーザ：rootで パスワード付きで
起動という意味です。成功しました。
今日はここまで。


[続きはこちら](http://qiita.com/puttyo_bubu/items/45384111e0487b215549)
Xcode で Test コードを走らせると、appが起動してしまっていやだ

http://stackoverflow.com/questions/15714697/unit-testing-in-xcode-does-it-run-the-app

Xcodeで iOS appを作成しているとする。
cmd + u で test を 走らせるたびに、ちゃんとappが起動してしまって、起動プロセスが重いappの場合これが、ストレスになる。
main.m に ちょっと細工をする。

```objc
int main(int argc, char *argv[])
{
    int ret = -1;
    @autoreleasepool
    {
        BOOL inTests = (NSClassFromString(@"XCTest") != nil);
        if(inTests) {
            ret = UIApplicationMain(argc, argv, nil, @"MYTestAppDelegate");
        }
        else 
        {
            ret = UIApplicationMain(argc, argv, nil,@"MYAppDelegate");
        }
        return ret;
    }
}
```
XCTestというClassはXCTest.frameworkで定義されており、このframeworkをtargetに含んでいる方だけが inTests = YES となる。

MYTestAppDelegate は UIApplicationDelegateを継承している空実装class。XcodeでNew Fileして放っておく。
結論：Xcode で Test コードを走らせると、appが起動してしまっていやだけど、appは起動します。だから出来るだけ軽く起動するようにします。
ゲストOSのディスクを揮発モードにする

あまりにも間違ったことを書いていたので、全面的に書き換えました。
もし古い記事を読んだ方がいたら見なおしておいてください。
ほんとすいませんでしたorz

* * *

VMware Player ユーザのみなさん大好き、揮発モード(non-persistent) の VirutalBox 版について。

# VMware 版
`.vmx` ファイルを直接編集し、ドライブ指定してモードを記述することで設定できますね。

    ide0:0.mode = "independent-nonpersistent"

ちなみに GUI から設定できるかどうかは不明です。

# VirutalBox 版
## 参考手順
もうそのものずばりな記事がありました。
http://srikeshs.wordpress.com/2014/04/29/how-to-make-a-virtual-disk-non-persistent-or-immutable/

### 超訳抜粋
1. 対象のディスクを、VM 設定のストレージ割り当てから除去
2. メニュー → ファイル(または Ctrl+D)から「仮想メディアマネージャー」を起動
3. ハードドライブタブから、対象ディスク(*.vdi) を選択、「変更不可」に設定
4. VM 設定からストレージ追加しなおし
5. VM 起動


## 公式の解説
http://www.virtualbox.org/manual/ch05.html

よく見ると、「Immutable」と「write-through」だけじゃなくて「Shareable hard disks」「multiattach mode」もありました

### normal
* 普通のディスク


### write-through
* スナップショットを完全に無視
    * このモード時にスナップショット作成しても、そもそも差分ディスクに派生しない。
    * 派生しないので、過去のスナップショットに復元させてもディスクは変更しない
* スナップショット以外の挙動は、normal と同じ？


### Shareable hard disks
* 基本 write-through と同じ
* 複数 VM 同時にアタッチして共有できる点が違う
* ただし、同時書き込みによりデータ破損の可能性があるので素人にはおすすめできないらしい

こええ・・・


### Immutable
* 本来のディスクイメージは読み取り専用に
* 起動中のゲストOSによる書き込みは分離された別ファイルに書き込まれ、ゲスト終了とともに破棄

実際動かしてみた

* 挙動が完全にスナップショット
    * VM 配下のディレクトリに Snapshots フォルダが作成され、差分ディスクに起動中の書き込みが行われる。
    * reboot してる限りは差分ディスクは残る
    * shutdown すると、差分ディスクが一旦クリアされ(サイズ 0 に)、再利用されてる

つまるところ、電源切れる度に自動で巻き戻されるスナップショットです。


### multiattach mode
* 複数 VM 同時にアタッチして共有可能
* 初期の共有箇所は Immutable、各 VM 個別にスナップショット同様の差分ディスクを持つイメージ
* 安全＆共有部分のストレージ容量節約できる

## 派生
こんな感じでしょうか？

<pre>
          write-through － Shareable hard disks
       ／ 
normal
       ＼
          Immutable     － multiattach mode
</pre>

スナップショットの影響を受けない上向き派生
元ディスクに書き込みさせない下向き派生
複数 VM で共有できる右向き派生
・・・と。

### 現実的な選択として
* 普通は normal
* スナップショットで巻き戻したくない場合 write-through   (今のところ使いドコロが思いつかない・・・)
* 複数 VM 共有で容量節約なら multiattach mode

少なくとも自分の使用用途なら、試行錯誤はスナップショットだけで十分実現できると思われます
[Android] ActionBarのタイトルを非表示にする


# 概要

`ActionBar#setDisplayShowTitleEnabled()`に`false`を渡す。
するとActionBarのタイトルが非表示になる。

# サンプルコード

```java:MainActivity.java

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

		....

		final ActionBar actionBar = getActionBar();
		// タイトルを非表示にする
		actionBar.setDisplayShowTitleEnabled(false);

		....

	}
	...
}
```
NULL と nullptr って何が違う？

C++11 では、NULL に代わるものとして nullptr キーワードが追加されています。

この話を聞くと「NULL じゃだめなの？」と一度は思う人は少なく無いと思います。
そこで、今回は NULL と nullptr の違いについて書いてみたいと思います。

# NULL じゃ出来ないことがある
今更言うことでもないですが、NULL は以下のようにマクロで定義されています。

```cpp:
#define NULL    0
```

マクロということは、NULL なんて大層な扱いになっていても 0 以外の何者でもないということです。

そこで、以下のコードと実行結果を見てみます。

```cpp:test.cpp
#include <iostream>

using namespace std;

void Func(void * p) {
    cout << __FUNCSIG__ << endl;
}
void Func(int v) {
    cout << __FUNCSIG__ << endl;
}
int main()
{
    Func(10);
    Func(NULL);

    return 0;
}
```

```:output
void __cdecl Func(int)
void __cdecl Func(int)
```

NULL を指定しても Func(void * v) ではなく、Func(int v) が呼び出されてます。
そりゃそうですよね。

 **コンパイラから見たら NULL はポインタではなく、ただの 0 なんですから。**

もし、Func(void * v) を呼びたいのであれば

```
Func((void*)NULL);
```

のように明示的にキャストしてやる必要があります。

が、NULL ポインタを明示的にキャストするのはなんともおかしな話ですし、
何より「それくらい勝手にやってくれよ！」って思いますよね。

#nullptr だからこそできる事がある
C++11 で追加された nullptr キーワードは、まさしくそのために用意されたものです。

以下が NULL を nullptr に置き換えたコードと実行結果です。

```cpp:test2.cpp
#include <iostream>

using namespace std;

void Func(void * p) {
    cout << __FUNCSIG__ << endl;
}
void Func(int v) {
    cout << __FUNCSIG__ << endl;
}
int main()
{
    Func(10);
    Func(nullptr);

    return 0;
}
```

```:output
void __cdecl Func(int)
void __cdecl Func(void *)
```

nullptr を指定したら、見事に Func(void *) が呼び出されています。

このように、nullptr を指定すると、きちんとポインタとして扱ってくれます。

# nullptr は nullptr_t 型

また、nullptr はポインタとして扱われますが、 **型としては std::nullptr_t 型** という扱いになっています。

どういう事かというと、それは以下のコードと実行結果を見てもらえればわかるかと思います。

```cpp:test3.cpp
#include <iostream>

using namespace std;

void Func(void * p) {
    cout << __FUNCSIG__ << endl;
}

void Func(int v) {
    cout << __FUNCSIG__ << endl;
}

void Func(nullptr_t p) {
    cout << __FUNCSIG__ << endl;
}

int main()
{
    Func(10);
    Func(nullptr);

    return 0;
}
```

```:output
void __cdecl Func(int)
void __cdecl Func(nullptr)
```

このように、ポインタを引数として取る関数と nullptr_t を引数として取る関数がオーバーロードされている場合は、
nullptr の本来の型である nullptr_t が優先して呼び出されることになります。
Eigenの使い方チートシート

公式のドキュメント
http://eigen.tuxfamily.org/index.php?title=Main_Page

## 定義

### 行列

```
#include “Eigen/Core”
Eigen::MatrixXd mat(3,3); 
```
```単位行列
Eigen::MatrixXd mat;                                                                               
mat = Eigen::MatrixXd::Identity(3,3);
```
```comma-initializer
Eigen::MatrixXd mat(3,3); 
mat << 1,2,3,4,5,6,7,8,9;
cout << mat << endl;

出力結果
1 2 3
4 5 6
7 8 9
```


##### 初期化

```
mat.setZero();
```

## 演算


行列式

```
A.determinant();
```


連立方程式を解く

```
#include “Eigen/Core”
#include “Eigen/LU”

Eigen::MatrixXd A(3,3);
A << 1,1,1, 1,2,1, 1,2,3;
cout <<"A = " << endl << A << endl;

Eigen::VectorXd b(3);
b << 5,3,8;
cout <<"b = " << endl << b << endl;

Eigen::VectorXd x = A.fullPivLu().solve(b);

cout <<"x = " << endl << x << endl;

出力結果
A =
1 1 1
1 2 1
1 2 3
b =
5
3
8
x =
4.5
-2
2.5
```

## アフィン変換

### 並進
```
Eigen::Translation<double, 3> trans(x,y,z); // Eigen::Translation<double, 3>(Eigen::Vector3d) も可
```

### 回転
```
Eigen::Matrix3d rot = Eigen::AngleAxisd(roll, Eigen::Vector3d::UnitX())
                    * Eigen::AngleAxisd(pitch, Eigen::Vector3d::UnitY())
                    * Eigen::AngleAxisd(yaw, Eigen::Vector3d::UnitZ());
```

### 並進と回転からアフィン変換を作る
```
Eigen::Affine3d affine = trans * rot;
```

### アフィン変換から並進と回転を取り出す
```
Eigen::Vector3d trans_ = affine.translation(); // 並進
Eigen::Matrix3d rot_ = affine.rotation(); // 回転
Eigen::Vector3d euler = rot_.eulerAngles(0,1,2); // オイラー角． 
```

メモ : オイラー角について， 回転行列からオイラー角は２４パターンあり得るので順番を指定する。この場合 roll, pitch, yaw の順番に取り出される．

調べたら追記する
GateOne のキーマップを修正する

GateOne (https://github.com/liftoff/GateOne) を使っていたところ
私の環境では = を入力しようとすると _ になってしまっていた。
terminal_input.js に keyTable が定義されており、これを編集するとうまく動作した。

(/usr/lib/python2.6/site-packages/gateone-1.2.0-py2.6.egg/gateone/applications/terminal/static/terminal_input.js)

以下、修正箇所のみ

```js:terminal_input.js
        //'KEY_NUM_PAD_HYPHEN-MINUS': {'shift': "_", 'alt': ESC+"-", 'alt-shift': ESC+"_"},
        'KEY_NUM_PAD_HYPHEN-MINUS': {'shift': "=", 'alt': ESC+"-", 'alt-shift': ESC+"_"},
```

```js:terminal_input.js
        //'KEY_HYPHEN-MINUS': {'shift': "_", 'alt': ESC+"-", 'alt-shift': ESC+"_", 'sco': ESC+"[OS"},
        'KEY_HYPHEN-MINUS': {'shift': "=", 'alt': ESC+"-", 'alt-shift': ESC+"_", 'sco': ESC+"[OS"},
```

## 参考リンク
* https://github.com/liftoff/GateOne/issues/10
CentOSの初期設定で最低限やること(@さくらのVPS)

#はじめに#
さくらのVPSを借りた際に、いつもやっている最低限の設定手順を公開していきます。

#初期設定#
##ユーザー設定##

パスワードの設定をします。

```
# passwd
```

新規ユーザーの追加を行い、パスワードの設定、wheelグループへの追加を行います。

```
# useradd ユーザー名
# passwd ユーザー名
# usermod -G wheel ユーザー名
```

続いてrootに関する設定を行います。
以下ではrootになれるユーザーおよびsudoコマンドの実行ユーザーの設定を行っています。

```
# vim /etc/pam.d/su

# 以下の行のコメントを外す
auth required pam_wheel.so use_uid

# visudo

# 以下の行のコメントを外す
%wheel ALL=(ALL) ALL
```


##SSHの設定##
以下でSSHの設定を行っていきます。

rootログイン、空パス、パスワードログインを禁止します。

```
# vim /etc/ssh/sshd_config

PermitRootLogin no
PermitEmptyPasswords no
PasswordAuthentication no
```

続いてSSH鍵の設定を行います。
自分のホームディレクトリに.sshフォルダを作成し、使用する公開鍵を.sshディレクトリに転送します(今回はファイル名をid_rsa.pubとします)。その後SSHログインができるよう設定を行っていきます。

```
$ mkdir .ssh && cd .ssh
$ cat id_rsa.pub >> authorized_keys 
$ chmod 700 /home/ユーザー名/.ssh
$ chmod 400 authorized_keys
```

この時点でsshを再起動します。
そして、作成したユーザーでログインができるか確認をしてください。

```
# /etc/init.d/sshd restart
```

##iptablesの設定##

はじめに、sshで使用するポートの指定を行い、sshを再起動します。

```
# vim /etc/ssh/sshd_config

# 以下のようにポートを指定します
Port  22

# /etc/init.d/sshd restart
```

続いて、iptablesを設定します。

```
# vim /etc/sysconfig/iptable
```

```sh:iptables
*filter
:INPUT   ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT  ACCEPT [0:0]
:RH-Firewall-1-INPUT - [0:0]

-A INPUT -j RH-Firewall-1-INPUT
-A FORWARD -j RH-Firewall-1-INPUT
-A RH-Firewall-1-INPUT -i lo -j ACCEPT
-A RH-Firewall-1-INPUT -p icmp --icmp-type any -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# SSH, HTTP
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT

# 海外IPに対する設定
-A RH-Firewall-1-INPUT -p tcp --dport 22 -m state --state NEW -m recent --set --name SSH
-A RH-Firewall-1-INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 8 --rttl --name SSH -j DROP

-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited

COMMIT
```

上記ファイルを作成後、iptablesの再起動を行います。

```
# /etc/init.d/iptables restart
```

以上で設定は完了です。
最低限やるべきことは、ここまでかと思います。

#あったら便利！#
個人的にはzshとtmuxはぜひ使ってほしいので、以下に導入法を書いていきます。

##zsh ＋ oh-my-zsh##
はじめにzshをインストールし、設定を行います。

```
# yum -y install zsh
# usermod -s /bin/zsh ユーザー名
```

続いてoh-my-zshを入れていきます。
これで面倒なzshの設定とおさらばです。

```
$ wget --no-check-certificate http://install.ohmyz.sh -O - | sh
```

##tmux##
コーディングする上で書かせないtmuxもインストールします。

```
# yum -y install tmux
```


#おわりに#

以上が最低限やっているCentOSの設定となります。
これもした方が良い！など意見ありましたら、コメントを頂けると幸いです。

##参考##
* http://qiita.com/typista/items/e9423efad7a4eee34b48
* https://github.com/robbyrussell/oh-my-zsh
codeigniter で作る簡単管理画面（リンクメモ）



# やりたかったこと

codeigniter を使ったサイトで、管理画面を作ることになった。
しかし面倒！時間ない！

今回は社内専用画面だし、ちゃちゃっと作れる方法はないか探しました。

余力がないので、参考リンクだけメモ。

# Crud 

grocery crud （無料）
http://www.grocerycrud.com/


CodeIgniter CRUD Data Management Tool（有料）
http://codecanyon.net/item/codeigniter-crud-data-management-tool/4119163


# デザインテンプレート

まとめ
http://www.nxworld.net/inspiration/admin-dashboard-design-and-templates.html


Charisma
http://www.moongift.jp/2013/08/20130806-3/


# 結論

Charisma + grocery crud で作りました。
めちゃくちゃ簡単でした！
同僚のインド人もびっくりでした。
PHPでif

PHPには[if文](http://php.net/manual/ja/control-structures.if.php)がある。しかし、おしきせのものに頼るのは癪だ。自分で実装しよう。

つまり、理想はこうだ。

```php
echo $if($true, 'foo', 'bar');
// => 'foo'

echo $if($false, 'foo', 'bar');
// => 'bar'
```

函数にはパワーがある。そのパワーを駆使して、自分で利用するための`$true`も`$false`も、あなたには実装できるはずだ。

```php
$true  = function (...) { return ...; };
$false = function (...) { return ...; };

$if = function ($cond, $then, $else) {
    return ...;
};
```

**`$if`** はオペランドに `$cond, $then, $else` をとる。

実用的には、さらに次のような函数を定義しておくと、極めてべんりだ。

```php
$eq = function ($a, $b) use ($true, $false) {
    return ($a === $b) ? $true : $false;
};

echo $if($eq(10, 20), 'equals!', 'not equals');
```

さらには次のような論理演算も容易に実装することができる。

```php
$not = function ($v) use ($true, $false) {
    return $v($false, $true);
};

$and = function ($x, $y) use ($false) {
    return $x($y, $false);
};

$or = function ($x, $y) use ($true) {
    return $x($true, $y);
};

var_dump(
    $if($and($eq(10, 10),
             $eq(10, 20)),
        'TruE',
        'FalsE'));
```

なに? このままでは相互運用性がないと不便だ? 仕方ない。オレオレBooleanからPHPのbool型に戻す函数も用意しようじゃないか。

```php
$PHPBool = function ($bool) use ($if) {
    return $if($bool, true, false);
};


if ($PHPBool($eq(10, 99))) {
    var_dump("foo");
} else {
    var_dump("bar");
}
```


### あとがき

内容は以下の記事とほとんどおんなじ。ねたは被るまいと思って書きかけのまま一週間寝かせてたら先を越されてぐぬぬ。

 * [Re: if文も三項演算子も書かないで条件分岐をスッキリさせる - Qiita](http://qiita.com/irxground/items/95877d797da25e4e735c) by @irxground
 * [PHP - if文も三項演算子も書かないで条件分岐をスッキリさせる - Qiita](http://qiita.com/t_ishida/items/a1b1fb13490d13b67bc2) by @t_ishida

すこし詳しく書いておくと、これは **型無しラムダ計算** の初歩に相当する。その件については過去に書いた。どちらも短い記事なので、興味があれば参照されたい。

 * [DT戦記 - Pythonでラムダ計算](http://d.hatena.ne.jp/zonu_exe/20111209/1323445757)
 * [DT戦記 - 【DT閑話】童貞プログラマが函数型言語(とラムダ計算)を理解してみる【初心者向け解説】](http://d.hatena.ne.jp/zonu_exe/20121012/1350144895)

おいこれどうなってんだよ、といふ型がいらっしゃれば[代々木.もくもく](http://connpass.com/series/765/)などで詰問するべし。
jade で aタグをブロック要素として出力する方法


divタグをaタグで囲むと下記のような気持ち悪いHTMLにコンパイルされて困っていました

```html
<li><a href="#">
	<div>ホーム</div></a>
</li>
```

どうにかならないかといろいろ見ていたら inline-tags.js というものを発見。


```node_modules/jade/lib/inline-tags.js
'use strict';

module.exports = [
    'a'
  , 'abbr'
  , 'acronym'
  , 'b'
  , 'br'
  , 'code'
  , 'em'
  , 'font'
  , 'i'
  , 'img'
  , 'ins'
  , 'kbd'
  , 'map'
  , 'samp'
  , 'small'
  , 'span'
  , 'strong'
  , 'sub'
  , 'sup'
];
```

下記のようにaタグを除外する

```node_modules/jade/lib/inline-tags.js
'use strict';

module.exports = [
    // 'a'
    'abbr'
  , 'acronym'
  , 'b'
  , 'br'
  , 'code'
  , 'em'
  , 'font'
  , 'i'
  , 'img'
  , 'ins'
  , 'kbd'
  , 'map'
  , 'samp'
  , 'small'
  , 'span'
  , 'strong'
  , 'sub'
  , 'sup'
];
```

できた

```html
<li>
	<a href="#">
		<div>ホーム</div>
	</a>
</li>
```
railsをherokuにデプロイする


前提条件は、herokuにアカウント登録している事、gitが使える事です。

##1. herokuのCLIツールをインストールする
以下からダウンロード可能です。
https://toolbelt.heroku.com

インストールが完了した事を以下のコマンドで確認して下さい。

```shell-session:
$ heroku help
```

##2. SSH通信のための準備をする

SSH通信用の鍵を生成して、以下のコマンドで公開鍵をherokuにアップロードして下さい。

```shell-session:
$ heroku keys:add XXXXXX.pub
```

これで、CLIツールを使って、herokuとセキュアな通信が出来るようになりました。


##3. gitの準備をする

railsプロジェクトフォルダの直下で以下を実行して、プロジェクトをgit管理にします。

```shell-session:
$ git init
$ git add --all
$ git commit -m "xxxxxxxxxxxxx"
```

##4. herokuアプリを作る

railsプロジェクト直下で以下を実行して、herokuプロジェクトを作ります。

```shell-session:
$ heroku create
```


##5. gitリモートリポジトリの登録をする

「4. herokuアプリを作る」の実行に成功すると、最後に以下が出力されます。

```shell-session:
http://xxxxxx.heroku.com/ | git@heroku.com:xxxxxx.git
```

ここで表示されたgitリポジトリを、railsプロジェクトのリモートリポジトリとして登録します。

```shell-session:
$ git remote add heroku git@heroku.com:xxxxxx.git
```

##6. railsプロジェクトを登録したherokuのリモートリポジトリにpushする

```shell-session:
$ git push heroku master
```

##7. DBのセットアップを行う

```shell-session:
$ heroku rake db:setup
```

以上で、herokuへのデプロイは完了です。

##8. デプロイが完了している事を確認する

以下を実行すると、Webブラウザでデプロイしたアプリにアクセスし、デプロイが完了しているかどうかの確認が出来ます。

```shell-session:
$ heroku open
```
「第21回オフラインリアルタイムどう書くの参考問題」をPHPで解く

http://qiita.com/torazuka/items/cbdb6b581a57e4754dd4
http://d.hatena.ne.jp/torazuka/20140509/yhpg

希望日を出して優先順に振り分けるという、現実でもよくある問題です。
今回は受講対象がひとつで、曜日を分けるだけなのでさほど難しくありません。

```php
<?php
	class LESSON{
	
		/**
		* レッスンを振り分け
		* @param String 「1_12345|2_12345」みたいな文字列
		* @return String 「1_1:2」みたいな文字列
		*/
		public function get($input){
			
			// 入力を分解
			foreach(explode('|', $input) as $val){
				$tmp = explode('_', $val);
				$arr[$tmp[0]] = $tmp[1];
			}
			
			// レッスンを埋める
			$list = $this->fillLesson([], $arr, 0);
			
			// 整形して返す
			ksort($list);
			$list = array_map(function($tmp){
				sort($tmp);
				return implode(':', $tmp);
			}, $list);
			$ret = '';
			foreach($list as $key=>$val){
				$ret .= $key . '_' . $val . '|';
			}
			return substr($ret, 0, -1);
		}
		
		/**
		* レッスンを埋める
		* @param array [希望番号=>[社員]]
		* @param array [社員番号=>希望番号リスト]
		* @param int 第x-1希望
		* @return array $list
		*/
		private function fillLesson($list, $arr, $hope = 0){
			// くるくる
			$nextArr = [];
			foreach($arr as $key=>$val){
				if(!isset($list[$val[$hope]]) || count($list[$val[$hope]]) < 4){
					// 余裕があれば埋める
					$list[$val[$hope]][] = $key;
				}else{
					// 埋まっていれば第二希望に持ち越し
					$nextArr[$key] = $val;
				}
			}
			// 次の希望に持ち越して埋める。希望がなくなれば打ち切り
			if($nextArr && $hope<4){
				return $this->fillLesson($list, $nextArr, $hope+1);
			}
			
			return $list;
		}
		
	}
	
	// 以下はテスト
	$test = [
		['1_12345', '1_1'],
		['30_32451', '3_30'],
		/* 省略 */
	];

	$lesson = new LESSON();
	foreach($test as $key=>$data){
		$answer = $lesson->get($data[0]);
		if($answer !== $data[1]){
			print('えらー');
		}
	}
```

簡単とか言いながら色々と微妙。
特に整形のあたりはもうちょっとどうにかならなかったものか。
かかった時間は1時間くらい。
UIViewのconvertRect:toView:に関するメモ

view0
  └ viewA
　    └ viewB
という親子構造がある場合（view0内にviewAがあり、その中にviewBがある場合）、
view0に対するviewB相対座標(frame)を取得する方法は次のようなコードになる

```
CGRect frame = [viewA convertRect:viewB.frame toView:viewA];
```

あえて、viewAを明記しないで、viewBからの相対で考えると次のような書き方も可能。

```
CGRect frame = [viewB.superview convertRect:viewB.frame toView:viewB.superview];
```
カテゴリを理解する

カテゴリは、クラスにメソッドを追加できたりと実現できることは継承に近い。
カテゴリを使う利点としては
・クラスクラスタを継承する場合には面倒な面も多いためカテゴリで機能追加をするほうが簡単
・元々のクラスの機能に付与でき、そのクラスを使用しているコードを書き換える必要がない。
がある。

NSStringをカテゴリを用いて機能拡張することを考える。
（NSStringはクラスクラスタに属する。）
カテゴリNSString+Foo.h、NSString+Foo.mでは、
barメソッドの追加とlowercaseStringの書き換えを行った。

main関数の中では、元々のNSStringしかimportしていないが
NSStringの機能が追加・拡張されていることが確認できる。

参考までに検証に用いたコードを以下に示す。

```objc:NSString+Foo.h
#import <Foundation/Foundation.h>

@interface NSString (Foo)
-(void)bar;
@end
```

```objc:NSString+Foo.m
#import "NSString+Foo.h"

@implementation NSString (Foo)
-(NSString *)lowercaseString
{
    return [self stringByAppendingString:@"foobar"];
}

-(void)bar
{
    NSLog(@"bar is called");
}
@end
```

```objc:main.m
#import <Foundation/NSString.h>

int main()
{
    NSString *msg= [[NSString alloc] init];
    msg = @"lowercaseString";
    NSLog(@"msg:%@",[msg lowercaseString]);
    objc_msgSend(msg,@selector(bar));
    
    return 0;
}
```
リダイレクトの挙動


シェルでの実装場所が分からなかったので、straceを使ってシステムコールレベルでの挙動を確認してみました。
使用するシェルによって細かい部分は異なるが、大まかな流れということで。

## 標準出力リダイレクト
まずは、以下のようなechoで文字列をファイルに書き込む場合を確認する。

```shell-session
$ strace sh -c "echo hoge > sample.txt"
(省略)
open("sample.txt", O_WRONLY|O_CREAT|O_TRUNC, 0666) = 3
fcntl(1, F_DUPFD, 10)                   = 10
close(1)                                = 0
fcntl(10, F_SETFD, FD_CLOEXEC)          = 0
dup2(3, 1)                              = 1
close(3)                                = 0
write(1, "hoge\n", 5)                   = 3
dup2(10, 1)                             = 1
close(10)                               = 0
```

上記処理を順に追っていくと、

1 sample.txtを`open`し、3が割り当てられる。
2  `fcntl`にて10以降の空きのファイルディスクリプタ、今回は10に標準出力のファイルディスクリプタが複製される。

![](https://qiita-image-store.s3.amazonaws.com/0/13343/38715771-8165-0b03-814b-62e801e7ce03.png)

3  標準出力のファイルディスクリプタは10に複製されたので`close`する。
4  sample.txtのファイルディスクリプタを`dup2`で1に複製することで、標準出力への書き込みがsample.txtに書き込まれる。
![kobito.1400498746.667719.png](https://qiita-image-store.s3.amazonaws.com/0/13343/a23c3af9-cca7-03cc-fa77-ae4ae7d62ade.png "kobito.1400498746.667719.png")

5  ファイルへの書き込みは1を通じて行われるので3は`close`する。
6 通常は`write(1,...)`とすることで、標準出力に結果が表示されるが、1はsample.txtとなっているため結果はファイルに書き込まれる。

![kobito.1400498817.434999.png](https://qiita-image-store.s3.amazonaws.com/0/13343/12228ee3-8eff-4083-7e94-c43bc5ac4166.png "kobito.1400498817.434999.png")

7 標準出力のファイルディスクリプタを元に戻すため`dup2`で10を1に複製する
8 複製された標準出力のファイルディスクリプタは不要のため10を`close`する。

![kobito.1400498906.886126.png](https://qiita-image-store.s3.amazonaws.com/0/13343/449cfb2f-827c-9f12-750a-6fbf0123ec6d.png "kobito.1400498906.886126.png")

以上のように標準出力のファイルディスクリプタを退避させ、1に書き込み対象のファイルディスクリプタを割り当てることで標準出力をファイルへ書き込むことを実現しているようです。

ちなみに、`>>`でファイルに上書きする場合は、openフラグの`O_TRUNC`が`O_APPEND`となり、ファイル先頭から上書きでなく、末尾から追記となる。

## 標準出力と標準エラー出力を同時にリダイレクト
`2>&1`を使って標準出力と標準エラー出力の両方出力する場合も確認してみます。

```shell-session
$ strace -f sh -c "ls foo > err.txt 2>&1"
(省略)
open("err.txt", O_WRONLY|O_CREAT|O_TRUNC, 0666) = 3
fcntl(1, F_DUPFD, 10)                   = 10
close(1)                                = 0
fcntl(10, F_SETFD, FD_CLOEXEC)          = 0
dup2(3, 1)                              = 1
close(3)                                = 0
fcntl(2, F_DUPFD, 10)                   = 11
close(2)                                = 0
fcntl(11, F_SETFD, FD_CLOEXEC)          = 0
dup2(1, 2)                              = 2
(省略)
[pid  5851] write(2, "ls: ", 4)         = 4
[pid  5851] write(2, "cannot access foo", 17) = 17
[pid  5851] write(2, ": No such file or directory", 27) = 27
[pid  5851] write(2, "\n", 1)           = 1
[pid  5851] close(1)                    = 0
[pid  5851] close(2)                    = 0
(省略)
dup2(10, 1)                             = 1
close(10)                               = 0
dup2(11, 2)                             = 2
close(11)                               = 0
```
上記の場合も標準出力1と標準エラー出力2はそれぞれ10と11に退避させ、1と2が書き込み対象ファイルに割り当てられます。

![kobito.1400499756.569687.png](https://qiita-image-store.s3.amazonaws.com/0/13343/cd4096d3-6d7f-5118-15c5-9cab61109cf7.png "kobito.1400499756.569687.png")
capistranoのshell機能を触ってみる（２系）



##やりたいこと

サーバを２台同時に構築する際に同じコマンド打つのがダルい
今はVMコピー等でそんな必要もなくなってきてはいる

##インストール

とりあえずrubyの管理にrvmを導入して後は適当に


```
//epelインストール
wget http://dl.fedoraproject.org/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm
rpm -ivh epel-release-5-4.noarch.rpm

// RVMをインストール
curl -sSL https://get.rvm.io | bash -s stable
echo "source /etc/profile.d/rvm.sh" >> ~/.bash_profile
source ~/.bash_profile

// ruby2.1.0をインストール
rvm list known (インストール可能にRuby一覧を確認)
rvm install 2.1.0

//cpstrn先輩をインストール
gem install capistrano
gem install capistrano_colors


```

デフォルトだと3系が入りました。

しかしこいつが曲者で
cap shellでさっさとコンソールに行きたいのに中々させてくれない
どうやらしっかりproductionを定義してやらなければならない模様
色々いじった末に、cap shellをやりたいだけだったので
最終的に2系入れ直してみる事に

```

//アンインストール後バージョン指定してインストール
gem uninstall capistrano
gem install capistrano -v "~>2.0"

//コンソール起動
cap shell HOSTS="192.168.3.11","192.168.3.12" USER=root

```

今度は何の問題もなくコンソール画面へ
2系と3系じゃ全然違うみたい

##感想

いざ使い始めて思ったこと

・ディレクトリ階層まで下にいったスクリプトが実行出来なかった（cd出来ない？）
・yum install とかは-y付与（入力待ち等で止まらなければ）実行出来た。
・ディレクトリ作成、サービスの起動（apachectl graceful or restart)等は実行出来た

中々に限定的だからインフラの運用で日常的に〜ってのはなさそう。
３系とかは特に、しっかり手順を定義してやってデプロイ向けなのかな。
とりあえずcapistranoはしっかり覚えないと使えない事が分かった・・・
MarvericksにRubyの開発環境を構築する


# 前提条件
HomeBrewがインストールされていること

# セットアップ

## rbenvをインストールする

```shell-session
$ git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
$ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
```

参考：Github: [rbenv](https://github.com/sstephenson/rbenv)

新規ターミナルを開く

## ruby-buildをインストールする

`ruby-build`を追加するとrbenvのコマンドに`install`と`uninstall`が追加される

```shell-session
$ git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
```

参考：Github: [ruby-build](https://github.com/sstephenson/ruby-build)

## インストールできるrubyのバーションを確認する

```bash
$ rbenv install -l
```

出力結果

```bash
Available versions:
  1.8.6-p383
  1.8.6-p420
  1.8.7-p249
  1.8.7-p302
  1.8.7-p334
  1.8.7-p352
  1.8.7-p357
  1.8.7-p358
  1.8.7-p370
  1.8.7-p371
  1.8.7-p374
  1.8.7-p375
  1.9.1-p378
  1.9.1-p430
  1.9.2-p0
  1.9.2-p180
  1.9.2-p290
  1.9.2-p318
  1.9.2-p320
  1.9.2-p326
  1.9.3-dev
  1.9.3-p0
  1.9.3-p125
  1.9.3-p194
  1.9.3-p286
  1.9.3-p327
  1.9.3-p362
  1.9.3-p374
  1.9.3-p385
  1.9.3-p392
  1.9.3-p429
  1.9.3-p448
  1.9.3-p484
  1.9.3-p545
  1.9.3-p547
  1.9.3-preview1
  1.9.3-rc1
  2.0.0-dev
  2.0.0-p0
  2.0.0-p195
  2.0.0-p247
  2.0.0-p353
  2.0.0-p451
  2.0.0-p481
  2.0.0-preview1
  2.0.0-preview2
  2.0.0-rc1
  2.0.0-rc2
  2.1.0
  2.1.0-dev
  2.1.0-preview1
  2.1.0-preview2
  2.1.0-rc1
  2.1.1
  2.1.2
  2.2.0-dev
  jruby-1.5.6
  jruby-1.6.3
  jruby-1.6.4
  jruby-1.6.5
  jruby-1.6.5.1
  jruby-1.6.6
  jruby-1.6.7
  jruby-1.6.7.2
  jruby-1.6.8
  jruby-1.7.0
  jruby-1.7.0-preview1
  jruby-1.7.0-preview2
  jruby-1.7.0-rc1
  jruby-1.7.0-rc2
  jruby-1.7.1
  jruby-1.7.10
  jruby-1.7.11
  jruby-1.7.12
  jruby-1.7.2
  jruby-1.7.3
  jruby-1.7.4
  jruby-1.7.5
  jruby-1.7.6
  jruby-1.7.7
  jruby-1.7.8
  jruby-1.7.9
  jruby-9000+graal-dev
  jruby-9000-dev
  maglev-1.0.0
  maglev-1.1.0-dev
  maglev-2.0.0-dev
  mruby-1.0.0
  mruby-dev
  rbx-1.2.4
  rbx-2.0.0
  rbx-2.0.0-dev
  rbx-2.0.0-rc1
  rbx-2.1.0
  rbx-2.1.1
  rbx-2.2.0
  rbx-2.2.1
  rbx-2.2.2
  rbx-2.2.3
  rbx-2.2.4
  rbx-2.2.5
  rbx-2.2.6
  ree-1.8.6-2009.06
  ree-1.8.7-2009.09
  ree-1.8.7-2009.10
  ree-1.8.7-2010.01
  ree-1.8.7-2010.02
  ree-1.8.7-2011.03
  ree-1.8.7-2011.12
  ree-1.8.7-2012.01
  ree-1.8.7-2012.02
  topaz-dev
```

## Ruby 2.0.0-p481をインストールする

```bash
$ rbenv install 2.0.0-p481
```

再読み込みをする

```bash
$ rbenv rehash
```

インストールできたか確認する。
`2.0.0-p481`がインストールされていること

```bash
$ rbenv versions
* system (set by /Users/innova/.rbenv/version)
  2.0.0-p481
```

# Rubyを使う

日本語に対応するため`CONFIGURE_OPTS`を追加してインストールする

```bash
$ CONFIGURE_OPTS="--with-readline-dir=`brew --prefix readline` --with-openssl-dir=`brew --prefix openssl`" rbenv install 2.0.0-p481
```

指定したRubyのVersionが選択されているか確認する。

```bash
$ rbenv versions
```

出力結果

```bash
  system
* 2.0.0-p481 (set by /Users/innova/.rbenv/version)
```

RubyのVersionを確認する

```bash
$ ruby -v
ruby 2.0.0p481 (2014-05-08 revision 45883) [x86_64-darwin13.1.0]
```
Ruby on rails にGoogle Analyticsを入れる


簡単にrailsにGoogleAnalyticsを入れられます。

##1. Gemfileに'google-analytics-rails'を追加する
``` ruby
gem 'google-analytics-rails'
```

##2. トラッキングIDを設定する

config/initializers/google_analytics.rbを作成して、
以下のようにGoogleAnalyticsのトラッキングIDを設定する。

``` ruby 
# config/initializers/google_analytics.rb
GA.tracker = "UA-xxxxxxxx-x"
```

##3. 解析用のコードを埋める
以下で、本番環境向けにのみ解析コードを埋める事が出来ます。


``` ruby 
# app/views/layouts/application.html.erb
# headタグの中
<%= analytics_init if Rails.env.production? %>
```
ORACLEの機能を使って、複数レコードのデータを1レコードのCSVデータにする

# ORACLEの機能を使って、複数レコードのデータを1レコードのCSVデータにする

* データを縦横変換しつつCSVデータにしたい場合のスクリプト

```sql:SQL

-- 複数レコードのデータを、カンマ区切りの1レコードに出力する方法
SELECT
    LISTAGG(DATA_COL,',') WITHIN GROUP (order by DATA_COL) AS CONCAT_NAME
FROM
    SAMPLE_TABLE
/

```
ORACLEの機能を使って、オブジェクト間の依存関係を調べる

# ORACLEの機能を使って、オブジェクト間の依存関係を調べる

* 各DBオブジェクトがどのような依存関係を持っているか調べるスクリプト
* `hogehoge_tbl` が依存関係を調べたいテーブルの名前、のパターンのSQL

```sql:SQL

select
  referenced_owner || '.' || referenced_name as RefObj
, type, owner || '.' || name                 as Object
, decode(Level,1,'直接','間接')              as "dependency"
, substr(sys_connect_by_path(referenced_name,'←'),2) || '←' || name as "dependency_list"
from
  all_dependencies
    start with referenced_name = upper('hogehoge_tbl') -- 依存関係を調べたいオブジェクトの名前
        connect by
              prior owner = referenced_owner        
          and prior name  = referenced_name       
          and prior type  = referenced_type 
order siblings by
  type
, owner
, name
/

```
ORACLEの機能を使って組織階層情報を取得

# 組織階層情報の取得

* 1テーブル内で、 __[自身の組織コード]__ と __[親の組織コード]__ を別カラムで保持するような構造のテーブルで有効
* Oracleの機能を使って親子関係を簡単に取得する
* 階層が変動的でも柔軟に出力してくれるので便利

```sql:SQL

/* 組織階層情報取得 */
select
     lpad('　', 2*level) || t1.ORG_NAME  as LEVEL_DISP -- 階層レベルに合わせて高さを調整 
    ,substr(sys_connect_by_path(
              t1.ORG_NAME,' > '), 4 )    as TREE       -- 上位階層から並べて表示
    ,connect_by_isleaf                   as ISLEAF     -- リーフか否か
    ,level                               as NODE_LEVEL -- 階層レベルを数値で表示
from
        ORG_PARENT_CHILD t1
start  with
     t1.PARENT_ORG_CD = '20000000'
connect by nocycle prior
     t1.ORG_CD = t1.PARENT_ORG_CD   
order by
     t1.ORG_CD
/

```
Re: if文も三項演算子も書かないで条件分岐をスッキリさせる

[if文も三項演算子も書かないで条件分岐をスッキリさせる](http://qiita.com/t_ishida/items/a1b1fb13490d13b67bc2)という投稿を見たとき「アレかな」と思ったら
そうではなかったのでそのネタで書く。

# booleanなんか要らない

`true`や`false`なんか自分で定義してしまえばいいんです、こんな感じに。
（PHPが難しすぎたので代わりにRubyで書きます。ごめんなさい）

```rb:no_if.rb
True  = ->x,y{ x }
False = ->x,y{ y }

And = ->x,y{ x[y,False] }
Or  = ->x,y{ x[True,y] }
Not = ->x{ x[False,True] }

puts True['Yes', 'No']
puts False['Yes', 'No']

puts '-' * 30
puts And[True,True]['Yes', 'No'];
puts And[True,False]['Yes', 'No'];
puts And[False,True]['Yes', 'No'];
puts And[False,False]['Yes', 'No'];

puts '-' * 30
puts Or[True,True]['Yes', 'No'];
puts Or[True,False]['Yes', 'No'];
puts Or[False,True]['Yes', 'No'];
puts Or[False,False]['Yes', 'No'];

puts '-' * 30
puts Not[True]['Yes', 'No'];
puts Not[False]['Yes', 'No'];

puts '-' * 30
True[->{ puts "LazyYes"}, ->{ puts "LazyNo" }][]
False[->{ puts "LazyYes"}, ->{ puts "LazyNo" }][]
```

```text:output.txt
Yes
No
------------------------------
Yes
No
No
No
------------------------------
Yes
Yes
Yes
No
------------------------------
No
Yes
------------------------------
LazyYes
LazyNo
```

# おわり

これで言語から`true`とか`if`とかの予約語を取り除くことができた。
スッキリ！

追記:
こちらもどうぞ [PHPでif](http://qiita.com/tadsan/items/afafceaa70dacf1c3b93)
GCCのデフォルトオプションを知るには

GCCのデフォルトのオプションを知るには、

```
gcc -Q -v 
```

とする。
筆者の手元にある環境(Ubuntu Linux14.04)で試した例である。

```
 % gcc -Q -v                                                              
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/4.8/lto-wrapper
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu 4.8.4-2ubuntu1~14
.04.3' --with-bugurl=file:///usr/share/doc/gcc-4.8/README.Bugs --enable-language
s=c,c++,java,go,d,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.8 --ena
ble-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-get
text --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.8 --libdir
=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-
debug --enable-libstdcxx-time=yes --enable-gnu-unique-object --disable-libmudfla
p --enable-plugin --with-system-zlib --disable-browser-plugin --enable-java-awt=
gtk --enable-gtk-cairo --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-4.8-amd64/jr
e --enable-java-home --with-jvm-root-dir=/usr/lib/jvm/java-1.5.0-gcj-4.8-amd64 -
-with-jvm-jar-dir=/usr/lib/jvm-exports/java-1.5.0-gcj-4.8-amd64 --with-arch-dire
ctory=amd64 --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --enable-objc-gc --en
able-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multil
ib-list=m32,m64,mx32 --with-tune=generic --enable-checking=release --build=x86_6
4-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
Thread model: posix
gcc version 4.8.4 (Ubuntu 4.8.4-2ubuntu1~14.04.3) 
```

値指定系のオプションについては、私の知る限り、gccのソースツリーのconfigディレクトリ以下を探すしかない。
t-XXXのようにプレフィックスで「t-」のつくファイルにあれば良いのだが、ない場合、コードで生成される場合もあったりする。
あとは、config.gcc探るのが吉です。
Jenkinsプラグインのリリースがエラーなく完了してもアップデートセンターに表示されない


先日Jenkinsプラグインのアップデートを行ったのですが上手くリリース出来ず、Jenkins日本ユーザー会のメーリングリストで質問して解決する事が出来ました。
ikikkoさん、曽我部さん、ありがとうございました。

私が困った事と、その解決方法をメモしておきます。


## 困った事
以下のコマンドでアップデートリリースの作業を行い、コマンドがエラーなく終了したのですが、
新しいバージョンのプラグインがアップデートセンターに出てきませんでした。

```shell-session:
$ mvn release:prepare release:perform
```

## 解決方法
上記のコマンドではなく、以下のコマンドを実行します。

```shell-session:
$ mvn org.apache.maven.plugins:maven-release-plugin:2.5:prepare 
$ mvn org.apache.maven.plugins:maven-release-plugin:2.5:perform 
```

以上で正常にリリースされます。
何のエラーも出ずに失敗しているのが厄介ですね。
すでにリリース経験がある方は、この事象にはまる気がしました。。。
AppleScript+RubyでWeb検索ダイアログ


初Mac(MacBook Air 11" 2014)を購入したので練習がてらに。

AppleScriptの文法が慣れない&ライブラリを把握していないので、AppleScriptに加えて私が慣れているRubyも併用しました。

```AppleScript
display dialog "Input Search Keyword..." default answer ""
set kw to text returned of result

"require 'cgi'
uri_list = {
	'g' => 'http://google.com/search?q=', 
	'i' => 'http://google.com/search?btnI&q=',
	'wi' => 'http://ja.wikipedia.org/?search=',
	'wa' => 'http://www.wolframalpha.com/input?i='
}
res = if (uri = uri_list[ARGV.first])
	uri + CGI.escape(ARGV[1..-1].join(' '))
else
	uri_list.first[1] + CGI.escape(ARGV.join(' '))
end
puts res
"
set rb to quoted form of result

set res to do shell script "/usr/bin/ruby -e " & rb & " " & kw
open location res
```



実行するとダイアログが出てくるので、
`MacBook Air`で"MacBook Air"をGoogle検索したり、
`i qiita`で"qiita"をI'm Feeling Lucky検索したり、
`wi applescript`で"applescript"をWikipedia検索します。

KeyRemap4MacBookとかでショートカットから実行できるようにしておくと便利かもしれない。

# 参考にさせて頂いたサイト
- [life log: AppleScript 最速基本文法マスター](http://mc909j.blogspot.jp/2013/03/applescript.html)
- [Applescriptサンプル](http://www.asahi-net.or.jp/~va5n-okmt/factory/applescript/sample_code/)
- [AppleScriptからCocoaを使う - ザリガニが見ていた...。](http://d.hatena.ne.jp/zariganitosh/20100211/1265875573)

----

# ほとんどRubyじゃね？
はい

# QuickSilverとかAlfredでよくね？
はい
[tmlib.js]tmlib.jsでいい感じにaddChildしてみた

# [tmlib.js](http://phi-jp.github.io/tmlib.js/)でいい感じになる要素追加(addChild)方法

まずは普通にシーンへ要素を追加する方法。

```js
tm.define("TestScene", {
    superClass: "tm.app.Scene",

    init: function () {
        this.superInit();

        // 矩形を描画する
        var shape = tm.display.RectangleShape(100,100)
            .setPosition(300,200);
        // シーンへ追加し、描画対象にする
        this.addChild(shape);
    },
});
```

チェーンメソッドでいい感じにする。jQueryライクですね。一時変数いらないし、直感的です。

```js
tm.define("TestScene", {
    superClass: "tm.app.Scene",

    init: function () {
        this.superInit();

        // 矩形を描画する
        tm.display.RectangleShape(100,100)
            .setPosition(300,200);
            .addChildTo(this);
    },
});
```

きわめつけがこれ。

```js
tm.define("TestScene", {
    superClass: "tm.app.Scene",

    init: function () {
        this.superInit();

        // 矩形を描画する
        this.fromJSON({
            children: {
                rect: {
                    type: "tm.display.RectangleShape",
                    init: [100,100],
                    x: 300,
                    y: 200,
                },
            },
        });
    },
});
```

もはやオブジェクトを作る感覚で、表示物を作成できます。コードもすっきりするし便利！

[サンプルはここに置いてます。](http://jsdo.it/omatoro/plCB)
FactoryGirl + mongoid embeddedの書き方


mongoidを使っていて、embedde属性の場合のFactoryGirlの書き方

## mongoidクラス

```ruby:schedule.rb
class Schedule
  include Mongoid::Document
  embeds_many :milestones

  field :title
end
```

```ruby:milestone.rb
class Milestone
  include Mongoid::Document
  field :name, type: String
  field :date, type: String
end
```


## FactoryGirl

```
FactoryGirl.define do
  factory :schedule_base, class: Schedule do
    title "testtitle"
    milestones { [build(:milestone_1), build(:milestone_2)] }
  end

  factory :milestone_1, class: Milestone do
    name "mile1"
    date "20140516"
  end
  factory :milestone_2, class: Milestone do
    name "mile2"
    date "20140520"
  end
end

```

[参考サイト](http://stackoverflow.com/questions/7536064/factory-girl-mongoid-embedded-documents-in-fixtures)
Java8でListをある程度まとめて並列処理

すげー簡単に書けて感動したので。

## 普通にListで並列処理を書く
```java
List<Map<String, Object>> rows = new ArrayList<>(); // データ入れる

rows.parallelStream().forEach(row -> {
    LOG.info("something to do.");
    LOG.info(row);
});
```

すげー簡単に書けるんですが、これだと1つずつスレッド作られる感じ。
DB処理でトランザクションである程度まとめたいとか、そういうのをやりたい。


## ある程度まとめて並行処理する
```java
List<Map<String, Object>> rows = new ArrayList<>(); // データ入れる

for (int start = 0; start < rows.size();) {
    int end = start + 100;
    if (end > oldRows.size()) {
        end = oldRows.size();
    }

    List<Map<String, Object>> subList = rows.subList(start, end);

    ForkJoinPool.commonPool().execute(() -> {
        LOG.info("something to doooooooooooooo.");
        subList.forEach(row -> {
            LOG.info(row);
        });
    });

    start = end;
}
});

// 終了待機
while (!ForkJoinPool.commonPool().awaitQuiescence(1, TimeUnit.HOURS));
```

アー……Java8遥かに良いです。
野暮ったくはなりましたが、同じ物をJava7以前で書いたかと思うとすげー楽になったはず。
subListが実質finalで内側からアクセスできるのがポイントだと思ってる。

## 以上
デッドロックに気をつけてね！（やらかした奴）
あまり調べず書いたので、collectとかでもうちょっといい感じにできるとかあるかも
教えていただけたのなら、それはとってもうれしいなって、思ってしまうのでした。

## 2016-01-21 再帰でやる
```java
import org.apache.commons.lang3.math.NumberUtils;

void doSomething(List<String> list){
    if(list.isEmpty()){
        return;
    }

    List<String> subList = list.subList(0,NumberUtils.min(100,list.size()));

    ForkJoinPool.commonPool().execute(() -> {
        LOG.info("something to doooooooooooooo.");
        subList.forEach(row -> {
            LOG.info(row);
        });
    });

    this.doSomething(list.subList(NumberUtils.min(100,list.size()));
}

// 要終了待機
```

startとかendとか、for文とかダルいよね……ということで最近はこんな感じで書くことが多いです。
実際に動かしたコードじゃないので何かしくってたらすみません。

## 2016-01-21 つーかgroupingByでできんじゃね？
```java
org.apache.commons.lang3.mutable.MutableInt;

void doSomething(List<String> list) {
    MutableInt counter = new MutableInt(-1);

    Map<Integer, List<String>> splitMap = list.stream()
            .peek(s -> counter.increment())
            .collect(Collectors.groupingBy(s -> counter.intValue() / 100));

    splitMap.values().forEach(
            subList -> ForkJoinPool.commonPool().execute(() -> {
                LOG.info("something to doooooooooooooo.");
                    subList.forEach(row -> {
                        LOG.info(row);
                    });
                }));

    // 終了待機
    while (!ForkJoinPool.commonPool().awaitQuiescence(1, TimeUnit.HOURS));
}
```
ラムダ式内はfinalしか使えないので数値とかめんどくさかったりするんですが、
MutableIntという邪道っぽいクラスがあるのでそれを使って要素数を取ります。

streamはシリアルの場合、1要素ごと実行していくので、
counter.increment() と counter.intValue() は要素ごとになる……はず。
（なのでanyMatchみたいなのがあれば、評価が決まった段階で後の要素では評価しない）
すっごいパズル感と関数型ガン無視で副作用使いまくり感があり、アカン気がしますが……。

この辺はオライリーの本がわかりやすかったです。
http://www.oreilly.co.jp/books/9784873117041/
HTML5でファイルをドロップする際に画面全体にオーバーレイを表示する方法

そもそもファイルをドラッグ&ドロップする方法は以下の記事が参考になります．
[JavaScript - HTML5でファイルをドラッグして読み込むやつ - Qiita](http://qiita.com/ginpei/items/5cebb14e210fc0770e94)

#本題
上記の記事はとてもわかりやすく参考になるのだが，タイトルに書いたようなことをすると少しはまる．
どういう事かと言うと以下の用なコードを書いた時にdragleaveイベントがオーバーレイが出たときに発火してしまうのだ．

```js
$('body').on('dragover', function(e){
    e.stopPropagation();
    e.preventDefault();
    $('#overlay').fadeIn(300);
});

$('body').on('dragleave', function(e){
    e.stopPropagation();
    e.preventDefault();
    $('#overlay').fadeOut(300);
});

```

一瞬オーバーレイが表示されたかと思ったらすぐにまた消えてしまう.
これを解決する方法を探しているとstackoverflowに参考になるものを発見した．
[HTML5 dragleave fired when hovering a child element](http://stackoverflow.com/questions/7110353/html5-dragleave-fired-when-hovering-a-child-element)
これの回答の通りにマスクを作ってやるとうまく動く．
ポイントはdragleaveイベントとdropイベントのハンドリングをマスクのイベントリスナーで処理しているところである．
以下にこれを考慮したコードを示す．

```js
var drop_mask = $('<div />').css({
    position: 'fixed',
    top: 0,
    left: 0,
    width: '100%',
    height: '100%',
    opacity: 0,
    display: 'none',
    'z-index': 9999
});

$('body').append(drop_mask);

$('body').on('dragover', function(e){
    e.stopPropagation();
    e.preventDefault();
    drop_mask.show();
    $('#overlay').fadeIn(300);
});

drop_mask.on('dragleave', function(e){
    e.stopPropagation();
    e.preventDefault();
    drop_mask.hide();
    $('#overlay').fadeOut(300);
});

drop_mask.on('drop', function(e){
    e.stopPropagation();
    e.preventDefault();
    drop_mask.hide();
    $('#overlay').fadeOut(300);
});
```

オーバーレイ自体のコードはこんな感じ.

```html
<div id="overlay"></div>
```

```css
#overlay{
    position: fixed;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    background: black;
    opacity: 0.8;
    display: none;
}
```
iptablesで海外アクセスの遮断、制限する設定

#iptablesの設定#
iptablesにて設定する海外アクセスを遮断、制限する際によく使用する設定を以下に書きます。

```
~ vim /etc/sysconfig/iptables
```

```sh:iptables
-A RH-Firewall-1-INPUT -p tcp --dport 22 -m state --state NEW -m recent --set --name SSH
-A RH-Firewall-1-INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 8 --rttl --name SSH -j DROP
```

の２行を追加したら最低限は良いかと思います。

#参考#
* http://d.hatena.ne.jp/fatwebstudy/20130911/1378862249
MySQLのコネクション数一覧を表示するSQL

## 概要

MySQLのコネクション一覧を更新するSQLになります。下記SQLだと、Sleepとかのステータスももってきてしまいますが、
そのあたりは、適宜条件を追加していただければと思います。

## 定義

```
mysql> desc information_schema.processlist ;
+---------+-------------+------+-----+---------+-------+
| Field   | Type        | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| ID      | bigint(4)   | NO   |     | 0       |       |
| USER    | varchar(16) | NO   |     |         |       |
| HOST    | varchar(64) | NO   |     |         |       |
| DB      | varchar(64) | YES  |     | NULL    |       |
| COMMAND | varchar(16) | NO   |     |         |       |
| TIME    | int(7)      | NO   |     | 0       |       |
| STATE   | varchar(64) | YES  |     | NULL    |       |
| INFO    | longtext    | YES  |     | NULL    |       |
+---------+-------------+------+-----+---------+-------+
```

## SQL

```
select
  '[' || RTRIM(IFNULL(X.db,'N/A')) || ']' || RTRIM(X.host) || '@' || RTRIM(count(X.id)) AS CLIENT_NAME
from
(
  select
   replace(host,mid(host,instr(host,':'),length(host)),'') as host,
   db,
   id
  from
    information_schema.processlist
) as X
group by
  X.db,
  X.host
order by
  X.db asc,
  X.host asc;
```

## 出力結果

@以降がコネクション数
[]がホスト名

といった感じで表示しております。

```
CLIENT_NAME
----------------------------------
[N/A]@2
[N/A]192.168.0.249@1
[N/A]localhost@1
[master]192.168.0.126@20
[master]192.168.0.127@20
[master]192.168.0.128@20
[master]192.168.0.129@20
[master]192.168.0.130@20
[master]192.168.0.135@20
[master]192.168.0.136@20
[master]192.168.0.137@20
[master]192.168.0.138@20
[master]192.168.0.140@2
[master]192.168.0.144@21
[master]192.168.0.147@10
[master]192.168.0.167@20
[master]192.168.0.168@20
[master]192.168.0.184@20
[master]192.168.0.185@20
```
IntelliJでscala実行したい時のプロジェクト設定備忘録

### 前提  
---  
- 開発環境：mac  
- scala moduleインストール済

  
  

###  事象  
--- 
1. [公式サイト](http://www.scala-lang.org/)からmac用をインストール  
2. intelliJでscalaプロジェクト作成  
3. HellowWorldクラス実行(Run)

すると、こんなエラーメッセージが。

```
Scala instance doesn't exist or is invalid: version unknown, library jar: /usr/local/opt/scala/idea/lib/scala-library.jar, compiler jar: /usr/local/opt/scala/idea/lib/scala-compiler.jar ....
```

 ![スクリーンショット 2014-05-19 17.28.53.png](https://qiita-image-store.s3.amazonaws.com/0/34039/6bc6cd05-d458-80ed-9c30-046bf223afb5.png)


### 原因
---

どーも、IEDA用のscalaはディレクトリー構成自体が違うらしい。
以下が、1を解凍した階層。（読み飛ばしても問題ない。）

```
$ ls -ar /Users/kkam0907/scala-2.11.0/*
/Users/kkam0907/scala-2.11.0/man:
man1	
..	
.

/Users/kkam0907/scala-2.11.0/lib:
scala-xml_2.11-1.0.1.jar			
scala-library.jar				
scala-actors-migration_2.11-1.1.0.jar		
akka-actor_2.11-2.3.2.jar
scala-swing_2.11-1.0.1.jar			
scala-continuations-plugin_2.11.0-1.0.1.jar	
scala-actors-2.11.0.jar				
..
scala-reflect.jar				
scala-continuations-library_2.11-1.0.1.jar	
jline-2.11.jar					
.
scala-parser-combinators_2.11-1.0.1.jar		
scala-compiler.jar				
config-1.2.0.jar

/Users/kkam0907/scala-2.11.0/doc:
tools		
licenses	
README		
License.rtf	
LICENSE.md	
..		
.

/Users/kkam0907/scala-2.11.0/bin:
scalap.bat	
scalap		
scaladoc.bat	
scaladoc	
scalac.bat	
scalac		
scala.bat	
scala		
fsc.bat		
fsc		
..		
.
```

### 解決方法
---


- brew でscalaをインストールする

```
brew install scala
```

- インストール確認する

```
which scala
/usr/local/bin/scala
```

- Scala Home パス設定を「/usr/local/bin/scala/2.11.0/libexec」にする
- intelliJ からscala_2_11を選んで「Download and Install」を選択し、任意のところにダウンロードする

	![IntelliJ-scala設定.png](https://qiita-image-store.s3.amazonaws.com/0/34039/304cbff3-3b58-26f3-82b0-c20143ec162a.png)

	![スクリーンショット 2014-05-19 18.34.25.png](https://qiita-image-store.s3.amazonaws.com/0/34039/14544c29-0c7e-296d-12a8-db89e714cdb3.png)



- 必要なライブラリーをコピーする

```
cp scala-2.11.0-M4/src/* /usr/local/Cellar/scala/2.11.0/libexec/lib/
cp scala-2.11.0-M4/lib/* /usr/local/Cellar/scala/2.11.0/libexec/lib/
```



### 感想
---
ダサい解決方法だか、、これで、Scalaのビルド環境が整った♪




### 参考
---
http://qiita.com/suin/items/33ba576b3a253d7fa709
コマンドがいつまでたっても終わらないときにすぐに帰る方法

ssh等でLinuxのサーバーにターミナルでログインしているときに、大きなファイルのコピーを始めてしまったときの対処方法です。
ターミナルをそのまま閉じてしまうとログアウトしてシェルが終了してしまい、実行中のコマンドも終了してしまいます。

## GNU Screenを使用している場合

迷う必要はありません。
`C-a d`でデタッチできます。
（コマンド文字を変更している場合はaを変えてください）

## tmuxを使用している場合

迷う必要はありません。
`C-b d`でデタッチできます。
（プレフィックスを変更している場合はbを変えてください）

## ログインしてそのままコマンドを実行してしまった場合

今回の本題です。

以下のようにすればログアウトしても処理が続行されます。

```bash
$ cp ./very_big_file.dat ./another_dir/
(C-zを押してコマンドの実行を一時停止する)
$ bg
$ jobs
$ disown %1
```

プロセスをバックグラウンドに持っていき、デーモン化します。
`disown`で指定する引数は`jobs`で表示されるジョブ番号の頭に`%`をつけます。

これで帰れますね。

ちなみにMacのcpコマンドですと、コピーの途中でC-tを押すと何％完了したか表示されます。
コピー完了の目安になりますね。