OmniAICreator/Qiita-1.07M huggingface dataset:
C/C++のコメントにマッチする正規表現

見えないほうがマシなコメントを抽出して削除するときに使っています。

###正規表現
`/\*[\s\S]*?\*/|//.*`

###使用例

よく見かけるコード

```c:source.c
/*
 ファイル先頭によく書かれているの仰々しいコメント。

 コピーライトとか。

 長々と増えていく変更履歴
 長々と増えていく変更履歴
 長々と増えていく変更履歴
 長々と増えていく変更履歴
 ...
 長々と増えていく変更履歴
 長々と増えていく変更履歴

 ファイル本体が長すぎて、あるいは節操無い変更が繰り返されたため
 全てを説明しきれていない説明文。
*/
#include <stdio.h>

/*
 アプリケーションのエントリーポイントです。
*/
int main()
{
    int iValue = 0; // int型変数 iValue を 0 で初期化

    /*printf( "iValue は %d です。\n", iValue ); //念のため残しておく　// 削除 // 復帰 */
    printf( "iValue は %2d です。\n", iValue ); /* 2003/4/1 [田中(カ)] */

    //正常に終了
    return 0;
}
```

抽出したら消します。

```c:source.c
#include <stdio.h>


int main()
{
    int iValue = 0; 

    
    printf( "iValue は %2d です。\n", iValue ); 

    
    return 0;
}
```
ソースからインストールしたapacheにmod_rewriteを追加する

前提：/usr/local/srcでhttpd-2.2.27.tar.gzを展開

mkdir /usr/local/apache2/3rdparty

find /usr/local/src/httpd-2.2.27/modules/ -name "*rewrite*"

cp -p /usr/local/src/httpd-2.2.27/modules/mappers/mod_rewrite.c /usr/local/apache2/3rdparty/

cp -p /usr/local/src/httpd-2.2.27/modules/mappers/mod_rewrite.h /usr/local/apache2/3rdparty/

cd /usr/local/apache2/3rdparty/

/usr/local/apache2/bin/apxs -c mod_rewrite.c

/usr/local/apache2/bin/apxs -i -a -n rewrite mod_rewrite.la

service httpd restart
CSRファイルの作成

# CSRファイルの作成手順

cd /root

mkdir csr

cd csr

touch csr

openssl sha1 * > sha1.dat

ls

openssl genrsa -des3 -out server.key -rand sh1.dat 2048
>Enter pass phrase for server.key:xxxxxxxxxx
>Verifying - Enter pass phrase for server.key:xxxxxxxxxx

openssl req -new -key server.key -out CSRyyyymmdd.txt

>Country Name (2 letter code) [XX]:JP
>State or Province Name (full name) []:
>Locality Name (eg, city) [Default City]:
>Organization Name (eg, company) [Default Company Ltd]:test
>Organizational Unit Name (eg, section) []:test
>Common Name (eg, your name or your server's hostname) []:www.test.jp
>Email Address []:
>Please enter the following 'extra' attributes
>to be sent with your certificate request
>A challenge password []:
>An optional company name []:

openssl asn1parse -in CSRyyyymmdd.txt

# PRINTABLESTRINGにするには、事前に/etc/pki/tsl/openssl.cnfで以下にする

vi /etc/pki/tsl/openssl.cnf

```lang:openssl.cnf
string_mask = utf8only
↓
string_mask = nombstr
```
:wq

service sshd restart
Proessing.js でJavaScript側からProcessingの任意の関数を呼ぶ or 値を渡す方法


自由な描画ができて便利なProcessingをWebアプリでも積極的に使っていきたいところです。

ところがいざHTMLに埋め込んでも動的な値を渡したり、任意の関数を呼んだりできないと使い道が限られるので、標題の通り調べました。

[ここ](http://stackoverflow.com/questions/4496378/how-to-pass-dynamic-parameters-to-pde-file)から[ここ](http://processingjs.org/articles/jsQuickStart.html#accessingjsobjectsfrompjs)にたどり着いて解決しました。

日本語コメント入れながらソース引用します。


```html
<!DOCTYPE html>
<html>
<head>
    <title>Hello Web - Controlling Processing from JavaScript</title>
    <script src="processing-1.3.6.min.js"></script>
</head>
<body>

	<!-- ここまでは必須項目
		Processingアプリケーションのjavascriptモードでも自動的にエクスポートされます -->
    <canvas id="sketch" data-processing-sources="controlling.pde"></canvas>

	<!-- インターフェースが必要ならここでボタン等を設置します -->
    <button onclick="startSketch();">
        Start</button>
    <button onclick="stopSketch();">
        Stop</button>
	
	<!-- ここでスクリプトを追加します -->
    <script type="application/javascript">
        var processingInstance;

			// 上記ボタンが押された時の処理
         function startSketch() {
             switchSketchState(true);
         }
         function stopSketch() {
             switchSketchState(false);
         }
 
         function switchSketchState(on) {
             if (!processingInstance) {
					/* 
						Processing.getInstanceById()を呼んで
						自分のProcessing.pdeの名前を指定します。
						（上のcanvasタグのidと同じ名前になるはずです）
						これでProcessingのインスタンスが取得できます。
					*/
                 processingInstance = Processing.getInstanceById('sketch');
             }
 
             if (on) {
					/* 
						JS側でインスタンスが取得できたら、あとは任意の関数を呼ぶだけです。
						Processing独自の関数や自分が作った関数が呼べます。
						引数でProcessing側に値を送ることも出来ます。
						（あまり調べてませんが静的メンバ変数は呼べないみたいです）
					*/
					processingInstance.loop();
				　	processingINstance.myFunction("from js message");
             } else {
					processingInstance.noLoop();
             }
         }
     </script>
</body>
</html>
```
ひらがな・カタカナの相互変換

# くだらないコメント拒否

この記事はPOSIX原理主義に基づいて書いている。POSIXを逸脱した途端、「どこでも動く」「コンパイル不要で動く」「10年、20年先もたぶん動く」という**時空を超えた互換性を捨てることになる。** だからPOSIX原理主義な記事を書いているというのに、その意図を汲まずにするくだらないコメント、とくに**[heliac2000](http://qiita.com/heliac2000)という[著作権侵害も平気で犯す](http://qiita.com/richmikan@github/items/5f1b721374e505bf9e6e#comment-326b299df9fd56aa76c1)輩は絶対にコメントしないこと。**

# 人によってひらがなだったりカタカナだったり

> 名簿入力フォームで名前とふりがなが集まったのだが、ふりがなが人によってひらがなだったりカタカナだったりするので統一したい。

という相談を受けた。

尚、ひらがなは全角文字にしか存在しない（MSXなど半角ひらがなを持っているコンピューターはあるのだけど一般的ではない）ため、全角文字前提での話とする。半角カタカナを扱いたい場合は、[全角文字・半角文字の相互変換](http://qiita.com/richmikan@github/items/8849a8be3f4120ec8814)によって全角に直してから参照すること。

さて、どうすればいいか。

# 正攻法で変換する

これも[全角文字・半角文字の相互変換](http://qiita.com/richmikan@github/items/8849a8be3f4120ec8814)と同様に、正攻法でやるとよい。つまり、

> テキストデータを1バイトずつ読み、各文字が何バイト使っているのかを認識しながら読み進めていく。
> その際、対になるひらがなあるいはカタカナに変換可能な文字に遭遇した場合は置換する。

それにはAWKを使うとよいだろう。

## ひらがな→カタカナ変換コマンド`hira2kata`

例によってPOSIXの範囲で実装し、コマンド化したものがGitHubに公開されている。[hira2kata](https://github.com/ShellShoccar-jpn/misc-tools/blob/master/hira2kata)という名のコマンドだ。[Open usp Tukubai](https://uec.usp-lab.com/TUKUBAI/CGI/TUKUBAI.CGI?POMPA=ABOUT)というシェルスクリプト開発者向けコマンドセットにある[han](https://github.com/321516/Open-usp-Tukubai/blob/master/COMMANDS.SH/han)、[zen](https://github.com/321516/Open-usp-Tukubai/blob/master/COMMANDS.SH/zen)コマンドのインターフェースに似せる形で作ったものである。

例えば、次のようなテキストファイルがあったとする。

```text:furigana.txt
#No. フリガナ
い   もがみ
ろ   カガ
は   ふぶき
に   ムツ
ほ   ぜかまし
```

問題文にもあったように、回答者によってふりがなをひらがなで入力したりカタカナで入力したりまちまちになっている。回答者名で検索したいとなった時、検索する側はいちいちひらがなかカタカナかを区別したくない。このよう時に、次のようにしてhira2kataを使うのである。

```sh:
$ ./hira2kata 2 furigana.txt
#No. フリガナ
い モガミ
ろ カガ
は フブキ
に ムツ
ほ ゼカマシ
$ 
```

こうしておけば、全角カタカナで簡単に回答者名のgrep検索が可能になるだし、50音順ソートもできるようになる。注意すべきは、この例ではhira2kataコマンドの第1引数に“2”と書いてあるところである。のは、第2フィールドだけ変換せよという意味である。よって第1フィールドの数字はそのままになっている。仮に“2”という引数無しにファイル名だけ指定すると、フィールドという概念無しに、テキスト中にある全てのひらがなを変換しようとする。よって、その場合第1フィールドの「いろは……」もカタカナになる。

尚、この**hira2kataコマンドはUTF-8のテキストにしか対応しておらず**、JISやShitf JIS、EUC-JPテキストには対応していない。そのような文字を扱いたい場合は、iconvコマンドを用いたり、nkfコマンド（POSIXではないが）を用いて予めUTF-8に変換しておくこと。

それから、このサンプルデータで「ほ」行の島風さんだけ右から書いてあるが、**昭和じゃないんだから左から書くように**と言っておいってもらいたい。

## カタカナ→ひらがな変換コマンド`kata2hira`

上の例ではカタカナに統一したが、逆にひらがなに統一してもよい。その場合は[kata2hira](https://github.com/ShellShoccar-jpn/misc-tools/blob/master/kata2hira)という名のコマンドを使う。

# もう少し詳しい解説

全角文字を半角文字に変換するコマンドが作れたのだから、半角文字に変換する代わりにひらがな・カタカナの変換をするのも大したことはない。

マルチバイト文字なので、半角・全角変換と同様に、1バイトずつ読んだ場合、それがマルチバイト文字の終端なのか、それとも途中なのかということを常に判断しなければならないのだが、その後の置換作業で一工夫してある。

半角全角変換の際は完全に連想配列に依存していたが、ひらがな・カタカナ変換においては、高速にするために使用を控えている。その代わりにキャラクターコードを数百番ずつシフトするような計算を行っている。UTF-8においては、ひらがなとカタカナはユニコード番号が数十バイト離れたところにそれぞれマッピングされているので、それを見ながらユニコード番号を数百番ずらして目的の文字を作っているというわけだ。

## 参照

→[『オレンジ工房』さんのUTF-8の文字コード表 全角ひらがな・カタカナ](http://orange-factory.com/sample/utf8/code3-e3.html)
Markdown から HTML を作る的なやつ


なんか思えば沢山あるので。

したいのは、markdownで書いた文章をHTMLにしたい、という事。ただHTMLにしたいだけで、S3やgit commitまでしてくれたら嬉しいかもしれない的なやつ。

他にもあると思うけど、さっと見渡した程度なので。見つけたり思い出したり覚えていれば追記していく。

## Kobito

これよね。

何も言うまい。

制限としては、Qiitaにしかアップロード出来ないのと、デザイン変更が出来ない。まぁ仕方ないよね。

## nanco

http://nanoc.ws

Ruby の bundle で使うやつみたい。FTP, SFTP, SCP, SSH, S3, rsyncとかGithubにアップロードできるっぽい。

なるほど、わからん。普通に静的HTMLも吐けるんだろうけど、どうやるんだろこれ。

## Pandoc

http://johnmacfarlane.net/pandoc/

markdown やら Texやら何やらかんやらから、HTMLやらmarkdownやらEpubやらなんやらかんやらに変換するHaskellのやつ。

静的HTMLだけだったらこれで十分。FTP,SFTP,SCP,SSH,S3,RSync,Githubとかにアップロードまではしない。ただ、吐くだけ。


## markdown-js

https://github.com/evilstreak/markdown-js

npm でインストールして、md2htmlでHTML化。アップロード機能まではない。grunt でHTML化が自動でできる。自動化バンザイ

## 番外編

web上で書けるmarkdown-editor なら馬鹿みたいにある

http://yoshimov.com/list/markdown-online-editor-list/
ApacheのMaxClientsとListenBackLogのチューニングの覚書

ListenBackLog
 →デフォルトでは511らしいが、httpd.confに記載はない。
 →ListenBackLogはカーネルのtcp_max_syn_backlogの値に加算される。
 →tcp_max_syn_backlogのデフォルトは2048

http://software.fujitsu.com/jp/manual/manualfiles/M050000/B1WN4991/03/ihsaa/ihs00102.htm

ListenBackLogとtcp_max_syn_backlogの値の合計が、キュー待ち数。

デフォルトだと511 + 2048 = 2559がキュー待ち数

MaxClients値とServerLimit値が256（同時アクセス可能数）のため、例えば2000の同時アクセスが来た場合は、1744（2000 - 256）は、キュー待ち状態となり、キュー待ち数は、815(2559 - 1744)の空きがある状態となる。

同時アクセス数が3000の場合は、2744(3000 - 256)は、キュー待ち状態となり、キュー待ち数は2559を超過た185(2559 - 2744)は破棄されることになる。


※MaxClients:同時接続数の最大値を設定。デフォルト256。この値は、 ServerLimit値よりも大きくは出来ない為、値を増やす場合は、ServerLimit値も同時に変更する。
MaxClients値の出し方：Apacheに割り当て可能なサーバのメモリ量 ÷ 子プロセスが消費するメモリ量


疑問1：ListenBackLogのデフォルト値511の設定が無いので、tcp_max_syn_backlogの値が、キュー待ち数となると思ってよいのか？

疑問2：ListenBackLogはapacheの公式では設定変更は推奨されていないが問題ないか。

http://httpd.apache.org/docs/2.2/mod/mpm_common.html#listenbacklog
homeにgolang, direnv とvirtualenvを入れて動かす

# 概要

さくらレンタルサーバー(FreeBSD)にて、homeディレクトリにgoとdirenvを入れて、direnvでvirtualenvを動かすようにしたのでメモ。

|環境                                       |
|-------------------------------------------|
|FreeBSD 9.1-RELEASE-p15 amd64              |
|プラン さくらのレンタルサーバ スタンダード |

# 手順

## 環境変数

```
export MYBASE='usr'

export LOCALBASE=${HOME}/${MYBASE}/local
export PATH=${PATH}:${LOCALBASE}/bin

export GOROOT=${LOCALBASE}/go
export PATH=${PATH}:${GOROOT}/bin
```

## golangをdownloadして$LOCALBASEに展開

```sh:01_go.sh
export OSNAME=$(tr '[A-Z]' '[a-z]' <<< $(uname -s))
export ARCHNAME='amd64'

export FILENAME=go1.4.${OSNAME}-${ARCHNAME}.tar.gz
export URL=http://golang.org/dl/

mkdir -p ${LOCALBASE}/{src,bin}
cd ${LOCALBASE}/src
curl -L ${URL}/${FILENAME} | tar xfz -
mv go ${LOCALBASE}/
```

## direnvをdownloadして$LOCALBASE/binにインストール

```sh:02_direnv.sh
cd ${LOCALBASE}
git clone https://github.com/zimbatm/direnv.git
cd direnv
DESTDIR=${LOCALBASE} make install
```

以上でbash_profileなどに

```
export MYBASE='usr'
export LOCALBASE=${HOME}/${MYBASE}/local
export PATH=${PATH}:${LOCALBASE}/bin
export GOROOT=${LOCALBASE}/go
export PATH=${PATH}:${GOROOT}/bin
eval "$(direnv hook bash)"
```
などと加えれば、direnvが動き、各ディレクトリの.envrcを読み込むようになる。

# direnvでvirtualenv

## virtualenvを$LOCALBASE/binにインストール

```sh:03_virtualenv.sh
cd ${LOCALBASE}/src
curl -L https://pypi.python.org/packages/source/v/virtualenv/virtualenv-1.11.6.tar.gz | tar xfz -
cd virtualenv-1.11.6
python setup.py build
mv build/lib/* ${LOCALBASE}/bin
```

以上で、以下のように.envrcを書いたディレクトリに移動すると、そのディレクトリに.direnv/virtualenvが作成される。

```text:.envrc
WORK_DIR_NAME=.direnv/virtualenv
if ! [ -d $WORK_DIR_NAME ]; then
  virtualenv.py --no-site-packages --distribute $WORK_DIR_NAME
  virtualenv.py --relocatable $WORK_DIR_NAME
fi
. $WORK_DIR_NAME/bin/activate
```

# 参考

[zimbatm/direnv](https://github.com/zimbatm/direnv/wiki)
ビーコン式によるPiwikアクセスログ取得方法

# モーダルのクリック回数を取得したい。
該当リンクに以下追加。

```html
<a data-toggle="modal" href="#modal1" onclick="javascript:_paq.push(['trackEvent', 'Home', 'Modal1']);">Modal Open</a>
```

Home カテゴリの Modal1 アクションとしてイベントに記録される。

# JavaScript中のイベントを取得したい。

JavaScriptのイベント処理部分に追加する。

```js
_paq.push(['trackEvent', 'SomethigHappen', 'Table1']);
```

SomethigHappen カテゴリのTable1アクションとしてイベントに記録される。

# CakePHPに組み込みたい。

PiwikTracker.phpをapp/Vendorフォルダーに設置。
bootstrap.phpに以下を追記。

```php:app/Vendor/bootstrap.php
App::import('Vendor', 'PiwikTracker');
```

ログを取得したい処理の後に以下を追加。

```php
$t = new PiwikTracker($idSite = 1, 'http://localhost/piwik/');
$t->setTokenAuth("123456786dfc412345678aee12345678");
$t->setUrl($url = 'http://localhost/myPage/');
$t->doTrackPageView('MyPage');
```
ApacheのDOS攻撃対策

# mod_evasiveモジュールの利用

このモジュールを使用することで、 特定のIPアドレスからの過度のリクエストに対して、 アクセスブロックを実行、ブロック解除を行うことができる。

＜仕組み＞

（1）mod_evasiveモジュールが、URLリクエストをApacheサーバーに送信するIPアドレスの記録を取る

（2）その後、あらかじめ設定した許容範囲を超えるリクエストがいずれかのIPアドレスから送信されていないか測定する

（3）許容範囲を超えるリクエストがあった場合、そのIPアドレスからのリクエストは一時的にブロック

＜設定＞

下記いづれかの条件にマッチした時に、Dos攻撃とみなして、 600秒アクセス禁止(403 Forbidden)にし、XXXX@XXXX.comへ拒否IPをメールで通知する。

条件1: 同一ページへ、2秒間に3回のリクエストがあった場合 条件2: 同一サイトへ、1秒間に30回のリクエストがあった場合

設定ファイル：/etc/httpd/conf/httpd.conf

```lang:httpd.conf
<IfModule mod_evasive20.c>
DOSHashTableSize 3097
DOSPageCount 3
DOSSiteCount 30
DOSPageInterval 2 
DOSSiteInterval 1 
DOSBlockingPeriod 600 
DOSWhitelist 127.0.0.1 192.168.1.*
DOSLogDir “/var/log/mod_evasive”
DOSEmailNotify XXXX@XXXX.com 
</IfModule> 
```

※DOSHashTableSizeの値を大きくすることで、記録できるIPアドレスの数は多くなる

＜その他＞

モジュール配布サイト:
http://www.zdziarski.com/blog/?page_id=442
参考サイト:
http://dev.classmethod.jp/cloud/aws/mod_evasive20/
http://blog.livedoor.jp/imura81gt/archives/24866172.html

# mod_evasiveのインストールから設定

tar zxvf mod_evasive_1.10.1.tar.gz

cd mod_evasive

/usr/local/apache2/bin/apxs -i -a -c mod_evasive20.c

cd /usr/local/apache2/modules

ls -l mod_evasive20.so

-rwxr-xr-x 1 root root 51287 Mar  1 15:33 mod_evasive20.so

mkdir /var/log/mod_evasive/

chown apache:apache /var/log/mod_evasive/

cd /usr/local/apache2/conf

vi httpd.conf

```lang:httpd.conf
LoadModule evasive20_module   modules/mod_evasive20.so　←インストールすると自動で設定される。
 
<IfModule mod_evasive20.c>
     DOSHashTableSize 3097
     DOSPageCount 3
     DOSSiteCount 20
     DOSPageInterval 2
     DOSSiteInterval 1
     DOSBlockingPeriod 3600
     DOSLogDir "/var/log/mod_evasive"
     DOSEmailNotify xxxxx@xxxx.jp　←拒否したIPアドレスをメール送付。
</IfModule>
```
:wq

service httpd restart

/usr/local/apache2/bin/apachectl -M

cd /usr/local/src/mod_evasive

chmod +x test.pl

/usr/local/src/mod_evasive/test.pl
JavascriptでArrayとObjectをきちんと判定する

お恥ずかしいことに今まで判定方法がわかんなかったので、
♪～(´ε｀ )　ってな感じでスルーしてきたんですが、わかったので書いておく。
(というか確実に忘れそうなので)

## だって普通に判定したらできないじゃん(-ε-)ﾌﾞｰﾌﾞｰ

```js:よくありそうな判定
// Array
var arrayTest = ['foo', 'bar'];
typeof arrayTest;
// => object

// Object
var objectTest = {foo:'bar'};
typeof objectTest;
// => object
```

## こう書いたらできるよ( ｰ`дｰ´)ｷﾘｯ

どうやらこうしたら判定できるらしい。

```js:判定メソッド
// Array
function isArray (item) {
  return Object.prototype.toString.call(item) === '[object Array]';
}

// OBJECT
function isObject (item) {
  return typeof item === 'object' && item !== null && !isArray(item);
}
```



**試してみる(｀･ω･´)ゞ**

```js:判定テスト
// Array
var arrayTest = ['foo', 'bar'];
// OBJECT
var objectTest = {foo:'bar'};


// Array判定
isArray(arrayTest);   // true
isArray(objectTest ); // false


// Object判定
isObject(arrayTest);   // false
isObject(objectTest ); // true
```

**できた！！！**
**ﾜｰｲヽ(ﾟ∀ﾟ)ﾒ(ﾟ∀ﾟ)ﾒ(ﾟ∀ﾟ)ﾉﾜｰｲ**

## 参照
ここで見つけました。
http://cdn.cxense.com/cx.js
google go で hello world

ちょっと触れる機会があったので、
goをインストールしてhello, worldしてみる

# 環境
+ centos6.5 64bit

# goのバージョン
+ 1.3.3

# フロー
+ バイナリダウンロード
+ 解凍
+ PATHを通す
+ hello, world


# バイナリダウンロード
```bash
cd /tmp
curl -O https://storage.googleapis.com/golang/go1.3.3.linux-amd64.tar.gz
```

# 解凍
```bash
tar -C /usr/local -xzf go1.3.3.linux-amd64.tar.gz
```

# PATHを通す
```bash
export PATH=$PATH:/usr/local/go/bin

# pathが通っているか確認
which go
/usr/local/go/bin/go
```

# hello, world
/tmp下など適当なところでhello.goファイルを作成
以下の内容を記述

```go
package main

import "fmt"

func main() {
  fmt.Printf("hello, world\n")
}
```

それでは実際に実行してみる。
実行コマンドは以下です。

```bash
go run hello.go
```

hello, worldと表示されればOKです。
上記一連のフローは[公式サイト](https://golang.org/doc/install#tarball)に載っていますので興味ある方は見てみてください。


以上！！
Heroku の Apache で Basic 認証を行う


public/ を docroot とする PHP アプリケーションで、Apache を使って Basic 認証を行う。

ファイル構成は以下。（.git/ の内容や、vendor/ は除外）

```
$ tree -a
├── .git
├── .gitignore
├── .htpasswd
├── Procfile
├── composer.json
└── public
    ├── .htaccess
    └── index.php
```

.htaccess は、docroot に置く。

```
$ cat public/.htaccess
AuthUserFile /app/.htpasswd
AuthType Basic
AuthName "Restricted Access"
Require valid-user
```

.htpasswd を作成。.htpasswd は、docroot 以外に配置。

```
$ htpasswd -c .htpasswd user
```

Procfile と composer.json は、最低限のものだけ。

```
$ cat Procfile
web: vendor/bin/heroku-php-apache2 public/

$ cat composer.json
{
  "require": {
    "php": "~5.6.0"
  }
}
```

Git で、heroku にデプロイするだけ。

```
$ git init
$ git add .
$ git commit -m 'init'

$ heroku create
$ git push heroku origin
$ heroku open
```
homeにportsを入れて、nodejsをインストール

# 概要

さくらレンタルサーバー(FreeBSD)にて、homeディレクトリにportsを入れ、それを使ってnodejsをインストールしたのでメモ


|環境                                       |
|-------------------------------------------|
|FreeBSD 9.1-RELEASE-p15 amd64              |
|プラン さくらのレンタルサーバ スタンダード |

# 手順

## 環境変数

```
export MYBASE='usr'

export LOCALBASE=${HOME}/${MYBASE}/local
export PORTSDIR=${HOME}/${MYBASE}/ports

export PREFIX=${LOCALBASE}
export PKG_DBDIR=${LOCALBASE}/var/db/pkg
export PORT_DBDIR=${LOCALBASE}/var/db/pkg
export DISTDIR=${LOCALBASE}/tmp/dist
export WRKDIRPREFIX=${LOCALBASE}/tmp/work
export PKGTOOLS_CONF=${LOCALBASE}/etc/pkgtools.conf

export DEPENDS_TARGET='install clean'
export INSTALL_AS_USER=yes

export LDCONFIG="/sbin/ldconfig -f ${LOCALBASE}/var/run/ld-elf.so.hints -i -R ${LOCALBASE}/etc/ld-elf.so.conf"
export LD_LIBRARY_PATH=${LOCALBASE}/lib
export LD_RUN_PATH=${LOCALBASE}/lib
export PATH=${PATH}:${LOCALBASE}/bin:${LOCALBASE}/sbin
export MANPATH_MAP=${LOCALBASE}/man
export SRCCONF=${LOCALBASE}/etc/src.conf
export MAKE_JOBS_UNSAFE=yes
```

## portsとINDEXを持ってくる

```
mkdir -p ${LOCALBASE}/{etc,lib,tmp/dist,tmp/work,var/db/pkg}
cd ${HOME}/${MYBASE}
fetch ftp://ftp.jp.freebsd.org/pub/FreeBSD/ports/ports/ports.tar.gz
tar xzf ports.tar.gz
cd ${PORTSDIR}
fetch http://www.FreeBSD.org/ports/INDEX-9.bz2
bunzip2 INDEX-9.bz2
```

## ld-elf.so.conf作成

```
ldconfig -r | awk '/search/ {print $3}' | tr ":" "\n" > ${LOCALBASE}/etc/ld-elf.so.conf
echo ${LOCALBASE}/lib >> ${LOCALBASE}/etc/ld-elf.so.conf
```

## pythonのmake

```
cd ${PORTSDIR}/lang/python
make install
```

## そのままではnodejsをbuildできなかったので、workaround

```
mkdir -p ${HOME}${HOME}
ln -sf ${HOME}/usr ${HOME}${HOME}/usr
```

## nodejsとnpmインストール

```
cd ${PORTSDIR}/www/node
make install

cd ${PORTSDIR}/www/npm
make install
```

# 参考

[otsune's FreeBSD memo](http://www.otsune.com/bsd/ports/install_as_user.html)
vim vi tips

# モード関連
ノーマルモード
入力モード(i)→ESC
コマンドモード(:)→ESC
ビュジュアルモード(v)→ESC 選択モード

# ファイルの保存・読み込み（コマンドモード）
:w 上書き保存
:w ***.php 名前をつけて保存
:q 終了
:q! 変更を無視して終了
:e ***.php 別のファイルを開く

# 移動系コマンド（ノーマルモード）
gg 一番上の行へ
G 一番下の行へ

CTRL+f 画面移動
CTRL+b 画面戻る

w 単語単位で移動
b 単語単位で戻る

^ 行頭に移動
$ 行末に移動
f+文字 文字までジャンプ、「;」で次の文字までジャンプ
% かっこの上で「%」入力→対応するかっこまで移動

# 選択系コマンド（ビジュアルモード）
v 文字単位のビジュアルモード・選択
V 行単位のビジュアルモード・選択
CTRL+v 矩形単位のビジュアルモード・選択
全選択 gg V G

# カット（削除）、コピー、貼付け（ノーマルモード）
x 1文字カット（削除）
dd 1行カット（削除）
5dd 5行カット（削除）
p 貼付け
yy コピー
3yy 3行コピー

# 検索（ノーマルモード）
/+文字  
n 下方向に検索
N 上方向に検索
* 今カーソルがある位置の単語を上検索（完全一致）
\# 今カーソルがある位置の単語を下検索（完全一致）

# 置換（ノーマルモード）
:s/置換する文字/置換後の文字/
:s/i/I/g カーソルがある行を一気に置換）
:%s/i/I/g 全てを一気に置換 
:%s/i/I/gc 全てを一気に置換（一つずつ確認）

# undo関連
undo u 元に戻す（何度でも戻れる）
redo CTRL+r （undoを元に戻す）

# ウィンドウ分割（コマンドモード）
:sp 縦に並べて分割
CTRL+w w ウィンドウ間の移動
:vs 横に並べて分割
:close ウィンドウを閉じる

# タブ（コマンドモード）
:tabnew 新しいタブを作る
:tabe ***.php ファイルを指定して開く

gt タブ間を移動

:tabclose タブを閉じる

vimを起動する時にタブを開く
vim -p ***.php ***.php タブ2つ開く

:tabdo %s/html/HTML/g 全てのタブで置換

# 直前の動作を繰り返す
.（ピリオド）

# インデントを揃える
=（イコール）
gg V G =（全選択してイコール）

# 補完機能
CTRL+n（長い変数名など、入力途中に「CTRL+n」と入力すると補完） 

# 矩形選択後に編集
CTRL+v（矩形選択）→ I（挿入モード）→ 文字入力 →ESC（全て編集される）
CTRL+v（矩形選択）→ x （削除）

# テキストオブジェクト（ノーマルモード）文書の構造を見てオブジェクトとして扱う
c/d/y change (delete & insert)
i/a 中身か全体か
t/"/}"] tagなど

# 設定（コマンドモード）
:set number （行番号を表示）
:set nonumber （行番号を非表示）
:syntax on （コードを色分け）
:syntax off （色分け終了）
:set tabstop=8 （タブの文字数を規定）
:set ignorecase （検索の時に大文字・小文字の区分けしない）
:set noignorecase （小文字だけに戻す）
スタティックルートの設定

# スタティックルートの設定

設定ファイル：
/etc/sysconfig/network-scripts/route-ethXX
/etc/sysconfig/network-scripts/route-bondXX

上記ファイルを新規に作成し、下記の設定を記載する

接続先のセグメント/サブネットマスク via ゲートウェイ dev デバイス名

例）192.168.1.0/24 via 192.168.3.1 dev bond0

※設定ファイルに記載する内容及びファイル名は、NICに設定されているセグメントとゲートウェイが同一であること。

設定後の確認コマンド：netstat -rn
ruby,rubygems,chef,knife-soloのインストール

# ruby-2.1.4のインストール

tar xvzf ruby-2.1.4.tar.gz

cd ruby-2.1.4

./configure

make

make install

cd ext/zlib

ruby extconf.rb

make

make install

# rubygems-2.4.2のインストール

tar xvzf rubygems-2.4.2.tgz

cd rubygems-2.4.2

ruby setup.rb

# chefのインストール

gem install chef

# knife-soloのインストール

gem install knife-solo

knife configure
jQueryUI：tab選択時に元のスクロール位置を復元する方法

以下のように「activeate」と「beforeAvtivate」でスクロール位置の保存・復元を行う。

```js

タブの外枠.tabs({
    activate: function (event, ui) {
        …
        var $selectedItem = $(アクティブになった要素);
        if ($selectedItem[0].scrollHeight > 0)
        {
            $selectedItem.scrollTop($selectedItem.data("scrollTop"));
        }
        $selectedItem.data("scrollTop", 0);
    },
    beforeActivate: function (event, ui) {
        var $beforeSelectedItem = $(非アクティブになる要素);
        $beforeSelectedItem.data("scrollTop",$beforeSelectedItem.scrollTop());
    }
});

```
iPhone(実機)の通信ログ(パケットのキャプチャ)を簡単に取得する方法

iPhoneの通信ログを簡単に取得する方法です。

1. まずPCとiPhoneをUSBケーブルで繋ぎます。
2. iOSデバイスのUDIDを確認します。(iTunesやXcodeで簡単に確認できます)
3. iTerm2などのターミナルで以下のコマンドを叩きます

```
rvictl -s "確認したUDID"
```

接続しているiOSデバイスのUDIDを指定すると

```
Starting device "指定したUDID" [SUCCEEDED] with interface rvi0
```
というメッセージが表示され準備が完了です。
上のメッセージはネットワーク・インタフェースとして`rvi0`というものが出来たということです。

あとはWiresharkで`rvi0`を選択すればiPhoneの通信ログが取得可能です。

別のやり方としては
コンソールにて

```
tcpdump -i rvi0 -w xxxxxxx.log
```

というようにすれば`xxxxx.log`というファイルに通信ログが記録されます。

あとはWiresharkで上記のファイルを開くなどすれば通信ログを簡単に確認することが可能です。

最後にログの取得が終わったら、

```
rvictl -X "指定したUDID"
```

とコマンドを叩きrviを破棄してください。

以上、簡単にiPhoneの通信ログを取得する方法でした。

#### 参考書籍
[パケットキャプチャの教科書 (Informatics&IDEA)](https://amzn.to/2AqShH4)
[パケットキャプチャ入門 第4版～ LANアナライザWireshark活用術～](https://amzn.to/3MvcyNK)
シェルスクリプトでfizzbuzz

# for文

for 変数 in 値リスト
do
処理
done

```lang:example
例1)
for i in `seq 1 10`
do
 echo $i
done
exit 0

例2)
for i in {1..10}
do
 echo $i
done
exit 0

例3)
for ((i=1;i<=10;i++))
do
 echo $i
done
exit 0
```

# if文
(1)
if 条件式; then
処理
fi

```lang:example
例)
a=1
if ((a == 1)); then
 echo test
fi
exit 0
```

(2)

if 条件式; then
処理1
else
処理2
fi

```lang:example
例)
a=1
if ((a == 1)); then
 echo ABCD
else
 echo EFG
fi
exit 0
```

(3)

if 条件式1; then
処理1
elif 条件式2; then
処理2
else
処理3
fi

```lang:example
例)
a=1
if ((a == 1)); then
 echo ABCD
elif ((a == 2)); then
 echo EFG
else
 echo hij
fi
exit 0
```

それでは、シェルスクリプトでfizzbuzzを作ってみましょう。

vi fizzbuzz.sh

```lang:fizzbuzz.sh
#!/bin/bash

for ((i=1;i<=30;i++))

do
    if (($i % 15 == 0)); then
    echo fizzbuzz
    elif (($i % 3 == 0)); then
    echo fizz
    elif (($i % 5 == 0)); then
    echo buzz
    else
    echo $i
    fi
done

 exit 0
```
:wq

chmod +x fizzbuzz.sh

sh fizzbuzz.sh
Struts2.3.20にするときの注意点

約1年ぶりにGAリリースされたStruts2.3.20。マイナーチェンジがいくつかあり、jdk8対応やパラメータフィルタリング方法に変更があります。
ライブラリの依存性関連では、asm-5.0.xを使うようになりました。

もしcglib2.2を使っている場合は、asm-3.3と競合してしまいますので、解除しましょう。
MySQLとPostgresqlの基本コマンド

# MySQL

mysql user パスワード変更
set password for dbuser@localhost=password('dbuser123');

ユーザ一覧
select host,user from mysql.user;

ユーザ削除
DELETE FROM mysql.user WHERE user='ユーザ名';

パスワードの設定
※rootに対して設定する例
set password for root@localhost=password('xxxxxxx');

データベース作成
create database xxxxx;

データベース削除
drop database xxxxx;

データベースの一覧確認
show databases;

使用するデータベース
use データベース名;

新たにデータベースを作成して、
そのデータベースにアクセスできるユーザを作成する。

grant all on データベース名.* to ユーザ名@localhost identified by 'パスワード';
grant all on blog_app.* to dbuser@localhost identified by 'XXXXXX';


テーブルの作成
create table XXXX ();

テーブルの確認
show tables;

テーブル構造の確認
desc XXXX;

テーブルの削除
drop table XXXX;

テーブルにデータの挿入
insert into テーブル名 (各フィールド名) values (各値);

テーブルの内容確認
select * from テーブル名;

select * from users;

*をフィールド名にすればそのフィールド名の内容だけ表示できる。
select name,email from users;

ダンプ
mysqldump -u user名 -p データベース名 > XXXXXX.sql

リストア
mysqldump -u user名 -p データベース名 < XXXXXX.sql


# Postgresql

一覧表示
psql -l

データベース作成
createdb XXXXX

データベース削除
dorpdb XXXXX

データベースへのアクセス
psql データベース名

プロンプトに張った場合
¥l　一覧表示
¥q 終了

テーブルの作成
create table XXXX (フィールド名 型, .....);

テーブルの削除
dorp table XXXX;

テーブルの確認
¥dt

テーブル構造の確認
¥d テーブル名

外部ファイル名から入力
¥i 外部ファイル名

テーブルにデータの挿入
insert into テーブル名 (各フィールド名) values (各値);
Serverspecのインストールからテスト実行まで

想定としては、

* 192.168.1.18みたいなネットワーク上のサーバーがあってそれがテストの対象
* 自分のPC（vagrantでCENTOSを入れて、そこでrubyが動いている状態）

サーバー：192.168.1.18
ユーザー：serverspec

自分のPC：127.0.0.1:2222
ユーザー：vagrant


まず自分のPCにログインして公開鍵を作成する。

```bash
cd ~/.ssh/
ssh-keygen -t dsa
```

ここは何も入力せずにエンターキー3回

```bash
id_dsa
id_dsa.pub
```

の２つのファイルが生成される

次にサーバーにログインして、

```bash
mkdir .ssh
chmod 700 .ssh
cd .ssh/
```

この`.ssh`ディレクトリに先ほど作成した`id_dsa.pub`をWinSCP等を用いてコピーする。
コピーしたら、以下を実行。

```bash
cat id_dsa.pub >> authorized_keys
chmod 600 authorized_keys
```

`id_dsa.pub`は消してよい。

引き続きルートになってsshの設定を変更する。

```bash
su -
cd /etc/ssh/
vim sshd_config
```

以下2か所のコメントアウトを外す。

```bash
#PubkeyAuthentication yes
#AuthorizedKeysFile   .ssh/authorized_keys
```

保存したら、sshdを再起動。

```bash
service sshd restart
```

いったん自分のPCへ戻る。sshのコンフィグファイルを作成する。

```bash
cd ~/.ssh/
vim config
```

以下を記入して保存

```bash
Host my-host
  HostName 192.168.1.18
  Port 22
  User serverspec
  IdentityFile ~/.ssh/id_dsa
```

ここでssh接続をテストしてみる。


```bash
ssh my-host
```

でつながればOK.

再び開発サーバーにログインする。
ルートになって、sudo設定を行う。

```bash
su -
visudo
```

viの編集画面になるので、以下を追記

```bash
serverspec   ALL=(ALL)       ALL
```

ここで一旦ルートを抜ける

適当なディレクトリを作ってそこで作業する。

```bash
cd /share
mkdir serverspec
cd serverspec
vim Gemfile
```

以下を書き込みます。

```ruby
source 'https://rubygems.org'

gem 'serverspec'
gem 'rake'
gem 'highline'
```


保存して、以下実行。

```bash
bundle
```

ここでbundleが見つからなかった場合は

```bash
gem install bundle
```

続いて以下実行。

```bash
bundle exec serverspec-init
```

以下のような画面になる。

```bash
	Select OS type:

	  1) UN*X
	  2) Windows

	Select number: 1

	Select a backend type:

	  1) SSH
	  2) Exec (local)

	Select number: 1

	Vagrant instance y/n: n
	Input target host name: my-host
	 + spec/
	 + spec/my-host/
	 + spec/my-host/sample_spec.rb
	 + spec/spec_helper.rb
```

これでspec/以下にテスト用のファイルが生成される。ので、以下編集


```bash
vim spec/my-host/sample_spec.rb
```

以下の一行を追加。(環境によっては不要な場合もある)

```bash
set :request_pty, true
```

最後に以下でテスト実行

```bash
ASK_SUDO_PASSWORD=1 bundle exec rake spec
```

途中で

```bash
Enter sudo password:
```

と聞かれるのでユーザーserverspecのパスワードを入れる。

テスト結果が出れば成功。

```bash
	Package "httpd"
	  should be installed

	Service "httpd"
	  should be enabled
	  should be running

	Port "80"
	  should be listening

	Finished in 1.03 seconds (files took 9.88 seconds to load)
	4 examples, 0 failures
```

毎回パスワード入れたくない場合は以下の書き方で実行すればよい。

```bash
SUDO_PASSWORD=password bundle exec rake spec
```


テストの書き方は以下参照。
http://serverspec.org/resource_types.html

追記：複数サーバーをリストで指定してそれぞれにパラメータを渡してテストする方法は以下URL参照のこと
http://ex-cloud.jp/techblog/?p=699
初めてRailsでFontAwesomeした日の事憶えてる? link_toでfa-trash-oしようとしたわよね

ご注文はFont Awesomeですか？ 第3羽です．

* 第1羽「[ひと目で尋常でないスライドだと見抜いたよ](http://qiita.com/izumin5210/items/83839616b149c907c3c3)」
* 第2羽「[SNSを愛したFont AwesomeとSNSに愛されたFont Awesome](http://qiita.com/izumin5210/items/3e79a85c54dc4b755801)」

タイトルが苦しい？ やかましいわ

# Ruby on RailsでFont Awesomeをつかう

[Font Awesome](http://fontawesome.io/)を使うためのgemには[bokmann/font-awesome-rails](https://github.com/bokmann/font-awesome-rails)などが存在しますが，これはFont Awesome公式が出しているものではないためバージョンアップに追従できない可能性があります（このgemに関しては今のところ着いてきてるみたいですが…）．

そこで，僕は『[Use Bootstrap-Sass 3.x and Font Awesome (bower-rails vs. rails-assets)](http://qiita.com/izumin5210/items/73f93347a9fe458dbbf5)』にあるように[**Rails Assets**](https://rails-assets.org/)信者ですので，今回はこちらを利用します．
[**Rails Assets**](https://rails-assets.org/)は[bower](http://bower.io/)にあるパッケージを利用しますので，Font Awesomeも公式が提供しているものを利用できるためです．

```rb:Gemfile
source 'https://rails-assets.org'

gem 'rails-assets-fontawesome'
```

あとは，`application.css.scss`（もしくは`application.css`）に`require`ディレクティブを追加するだけで利用可能になります．


```sass:app/assets/stylesheets/application.css.scss
/*
 *= require_tree .
 *= require fontawesome
 *= require_self
 */
```

# べんりなHelperをつくる

上記だけで`<i class="fa fa-trash-o"></i>`などのアイコンが利用できますが，このままだと`link_to`を始めとするViewHelperで利用するにはめんどくさすぎることになります．
怠惰プログラマな自分的には面倒なのは嫌なので，楽にFont Awesomeを利用するためのヘルパを作りたいと思います．
（[bokmann/font-awesome-rails](https://github.com/bokmann/font-awesome-rails)にも同じような便利ヘルパが存在しますが…）

```rb:べんりへるぱ
def fa_icon(names, options = {})
  names = (names.is_a?(Array) ? names : names.split(/\s+/)).map { |n| "fa-#{n}" }
  classes = %W(fa #{names.join(' ')} #{options.delete(:class)})
  icon = content_tag(:i, nil, options.merge(class: classes))
  (block_given? ? yield(icon) : icon).html_safe
end
```

```rb:へるぱのつかいかた
fa_icon 'twitter'
# => <i class="fa fa-twitter"></i>

fa_icon('download') { |i| "#{i} Download" }
# => <i class="fa fa-download"></i> Download

fa_icon('caret-down') { |i| "dropdown #{i}" }
# => dropdown <i class="fa fa-caret-down"></i>

fa_icon 'quote-left 2x border', class: 'pull-left'
# => <i class="fa fa-quote-left fa-2x fa-border pull-left"></i>
```

これでいい感じに適当に使えますね．

# 参考URL

* [Font Awesome, the iconic font and CSS toolkit](http://fontawesome.io/)
* [bokmann/font-awesome-rails](https://github.com/bokmann/font-awesome-rails)
改めてObjective-C の言語を理解する(プロパティ編 その1)


# はじめに
私はObjective-c に出会う前まではJava、C#をメインに開発を行っていました。
そのため、プロパティは他の言語でも使用していたため特に違和感はありませんでした。
しかし、オプションという概念だけは他の言語と比べて重要であり避けては通れない知識であると感じたため、改めて理解を深める意味も含めて纏めたいと思います。

# お願い
人に読んでもらえるような記載にはなっていない点や自己都合で省略している点もありますので、参考にされる方がいらっしゃいましたら、よく理解した上で再検証して頂ければと思います。

# オプション(アクセサー名の指定: setter=)
- getter=
- setter=

このオプションは一度も使ったことがありません。
そのため念のため、検証してみました。
結果から先に書いておきます、以下のコードのままでは実行時エラーとなります。

```objc:
// Person.h
#import <Foundation/Foundation.h>

@interface Person : NSObject

@property NSString *name1;
@property (setter=fullName:) NSString *name2;

@end
```

```objc:
// ViewController.m
#import "ViewController.h"
#import "Person.h"

@interface ViewController ()

@end

@implementation ViewController

// ------ 一部省略 ------ //

#pragma mark -

// プロパティ実験(アクセサー名の指定)
- (IBAction)tapPropertiesTestByAccessorName:(id)sender {
    
    Person *person = [[Person alloc] init];

    // OK
    person.name1 = @"ネーム";

    // OKのはず
    [person fullName:@"フルネーム"];
}
@end

```

# 調査しました
元々の想像(指定した名前でビルド時にセッターが生成される)とは違い、
このオプションは明示的にアクセッサメソッドを指定出来るというものでした。

そのため、以下のコードを追加してあげることによって期待した動作になりました。
無限ループになるコードは日常では無意識で回避していたようで遭遇しませんでしたが、
今回はあえて試してみたところ想定通りの動作となりました。

```objc:
// Person.m
#import "Person.h"

@implementation Person

-(void)fullName:(NSString*)value {
    //self.name2 = value;  : NG 無限ループします
    _name2 = value;
}

@end
```

ちなみに以下のようなコードを記載しても先ほど指定したセッター経由でデータが引き渡されるようになります。

```objc:
person.name2 = @"フルネーム2";
```

# 備考
地味な検証ではありましたが、過去の経験則から考えるとこのような細かい調査の積み重ねは継続が大事なので不定期にはなると思いますが思いついた時に少しずつ書き溜めたいと思います。
またサンプルコードのままでは警告が表示されているので、少しずつ確認も含めて調査したいと思います。
全角文字・半角文字の相互変換

# アンケートで集めたローマ字が全半角混在

ということはないだろうか。同じ人が混ぜて使うことはないと思うが、人により、アンケートフォームに全角文字で入力したり半角文字で入力したり……。このようなテキストファイルから特定の人をgrep検索するのは大変面倒臭い。

tomitaさんっているかなと思ったら、“ｔｏｍｉｔａ”、"tomita"、いや先頭を大文字に、あるいは苗字を全部大文字にする人もいるから“Ｔｏｍｉｔａ”、"Tomita"、“ＴＯＭＩＴＡ”、"TOMITA"……、と6通りくらい試さなければならない。半角文字なら大文字・小文字を区別しないこともできるけど、全角文字ではそうはいかない。

というわけで「半角文字に変換したい」と思った。さてどうやるか？

# 正攻法でやる

やっぱ正攻法でしょ。

> テキストデータを1バイトずつ読み、各文字が何バイト使っているのかを認識しながら読み進めていく。
> その際、半角文字に変換可能な文字に遭遇した場合は置換する。

というわけで、そんな正攻法で作られたのがこのコマンド。→[han](https://github.com/321516/Open-usp-Tukubai/blob/master/COMMANDS.SH/han)
ついでに、全角へ変換するコマンドもある。→[zen](https://github.com/321516/Open-usp-Tukubai/blob/master/COMMANDS.SH/zen)

これらのコマンドは、[Open usp Tukubai](https://uec.usp-lab.com/TUKUBAI/CGI/TUKUBAI.CGI?POMPA=ABOUT)というシェルスクリプト開発者向けコマンドセットに収録されているものを、POSIX原理主義に基づいてシェルスクリプト+UNIXコマンドに移植したものだ。

## 使用例

例えば、次のようなテキストファイルがあったとする。

```text:enquete.txt
#name                 ans1  ans2
Ｍｏｇａｍｉ          yes   no
Kaga                  no    yes
fubuki                yes   yes
ｍｕｔｓｕ            no    no
Ｓｈｉｍａｋａｚｅ    no    yes
```

アンケート回答がまとまっているのだが、回答者によって自分の名前を全角で打ち込んだり半角で打ち込んだり、まちまちというわけだ。回答者名で検索したいとなった時、検索する側はいちいち大文字・小文字や全角・半角を区別したくない。このよう時に、hanコマンドを使うのである。

次のようにしてhanコマンドに掛けた後、trコマンドで大文字を全て小文字に変換する（その後でAWKに掛けているのは見やすさのためだ）。

```sh:
$ ./han enquete.txt | tr A-Z a-z | awk '{printf("%-10s %-4s %-4s\n",$1,$2,$3);}'
#name      ans1 ans2
mogami     yes  no
kaga       no   yes
fubuki     yes  yes
mutsu      no   no
shimakaze  no   yes
$ 
```

こうしておけば、半角英数字で簡単に回答者名のgrep検索が可能だ。

尚、この**hanコマンドはUTF-8のテキストにしか対応しておらず**、JISやShitf JIS、EUC-JPテキストには対応していない。そのような文字を扱いたい場合は、iconvコマンドを用いたり、nkfコマンド（POSIXではないが）を用いて予めUTF-8に変換しておくこと。

### 全角への変換

半角から全角への変換をしたい場合は、zenというコマンドを使う。ちなみにこちらには、`-k`というオプションがあって、これを付けると半角カタカナのみ全角変換することができる。これはe-mail送信用のテキストファイルを作る際に有用だ。あとの使い方はhanと同じ。標準出力または引数でファイルを喰わせるだけだ。

# もう少し詳しく仕組みを解説

全角混じりのテキストだって取り扱いを諦めることはない。一文字一文字愚直に、変換可能なものを変換していけばいいだけだ。ただ、その際に問題になるのはマルチバイトの扱いである。1バイトずつ読んだ場合、それがマルチバイト文字の終端なのか、それとも途中なのかということを常に判断しなければならない。

han、zenコマンドは文字エンコードがUTF-8前提で作られているが、そのためにはUTF-8の各文字のバイト長を正しく認識しなければならない。その情報は、[Wikipedia日本語版のUTF-8のページ](http://ja.wikipedia.org/wiki/UTF-8)にも記載されている。1文字読み込んでみてそのキャラクターコードがどの範囲にあるかということを判定していくと、1バイトから6バイトの範囲で長さを決定することができる。han、zenにはそのようなルーチンが実装されている。

そして1文字分読み取った結果、それと対になる半角文字あるいは全角文字が存在する時は、元の文字ではなく用意していた対の文字を出力すればよい。この時もPOSIX版AWKがやっていることはとても単純だ。対になる文字を全てAWKの連想配列に登録しておき、要素が存在すれば代わりに出力しているに過ぎない。ただし、半角カタカナから全角カタカナへの変換の時には注意事項がある。それは濁点、半濁点の処理だ。例えば、半角の「ハ」の直後に半角の「゜」が連なっていたら「ハ゜」ではなくて「パ」に変換しなければならないので、「ハ」が来た時点ですぐに置換処理をしてはならずに次の文字を見てからにしなければならないのだ。

このようにやり方を聞いて「なんてベタな書き方だ」と笑うかもしれない。しかし**速度の問題が生じない限り、プログラムはベタに書く方がいい。**その方が、他人にとっても、そして将来の自分にとっても、メンテナンスしやすいプログラムになる。UNIX哲学の教義その1

> Small is beautiful.

のとおりだ。
Basic認証とDigest認証

# Basic認証

htpasswd -b -c -m /etc/httpd/conf/.htpasswd USERNAME PASSWORD
※上記は新規にファイルを作成、既存ファイルがある場合は上書きされます。（新たに追記出来ない）
htpasswd -b /etc/httpd/conf/.htpasswd USERNAME PASSWORD
※上記は既存ファイルにユーザとパスワードが追記されます。

cat /etc/httpd/conf/.htpasswd

vi /.htaccessファイルを置くディレクトリ/.htaccess

```lang:.htaccess
AuthUserFile /etc/httpd/conf/.htpasswd
AuthGroupFile /dev/null
AuthName "Secret"
AuthType Basic
require user USERNAME
```
:wq

service httpd restart

# Digest認証

htdigest -c /etc/httpd/.htdigest '領域名' USERNAME

パスワードを入力

cat /etc/httpd/conf/.htdigest

vi vi /.htaccessファイルを置くディレクトリ/.htaccess

```lang:.htaccess
AuthType Digest
AuthName "領域名"
AuthUserFile /etc/httpd/.htdigest
Require user USERNAME
```
:wq

service httpd restart
【iOS】Google material-design-iconsをフォント化(ttf)して使いやすくしたよ

フォントをiOSアプリに組み込めることはご存知かと思います。

もちろん画像を使ってもいいのですが、
フォントを使うと以下の良いことがあります。

**・プロジェクトにimportが楽(１ファイルに纏まっているので)**
**・色変更が簡単**
**・サイズ変更に強い**
**・管理が楽**
**・AttributedStringの一部として文章中に出せる**

<br>

先日、Googleがmaterial-design-icons [https://github.com/google/material-design-icons](https://github.com/google/material-design-icons)を公開しましたが、
iOS用の画像も用意されています（さすがGoogleさん)。  

残念ながらフォントは用意されてなかったので作ることにしました。
svgファイルをフォント化(ttf)してiOSから使いやすくしたので公開します。
**全部で1661個のアイコンが使用できます。**
<br>
※Swiftで実装しています。
<br>

![GoogleMaterialDesignIcons2.gif](https://qiita-image-store.s3.amazonaws.com/0/48971/092c6afa-81e9-26e7-3f75-c47dc1c93198.gif)

<br>
**Source Code**
[dekatotoro/GoogleMaterialDesignIcons · GitHub](https://github.com/dekatotoro/GoogleMaterialDesignIcons)  
<br>

使い方
GoogleIcon.swiftファイルとgoogleicon.ttfファイルをプロジェクトに追加。
info.plistにFonts provided by application keyを追加して、googleicon.ttfを指定。

<br>

GoogleIconクラスに定数でフォント文字を全て定義してあるので、
アイコン一覧から使いたいアイコン文字を見て使用してください。
※アイコン一覧はicon/googleicon.htmlで見れます。

```swift

GoogleIcon.e600
GoogleIcon.e601
GoogleIcon.e602
GoogleIcon.e603
..

hogeLabel.font = UIFont(name: GoogleIconName, size: 30.0)
hogeLabel.textColor = UIColor.greenColor()
hogeLabel.text = GoogleIcon.e600
```
  
<br>
storyboardからフォントを指定する場合
![ScreenShotLabelFont.png](https://qiita-image-store.s3.amazonaws.com/0/48971/6d6638af-2f8a-94f7-e8f8-5809878ab0a4.png)
<br>


デザイナーがいない方や、個人で開発している方などにお役に立てたら嬉しいです。
ぜひFeedBackお願いしますm(- -)m
<br>
ライセンスはGoogleのmaterial-design-iconsを使用したものなので、[Creative Commons CC BY 4.0](https://creativecommons.org/licenses/by/4.0/deed.ja)です。
JenkinsのGroovy Postbuild Pluginで特定ビューの全てのジョブを無効化する

Jenkinsの[Groovy Postbuild Plugin](https://wiki.jenkins-ci.org/display/JENKINS/Groovy+Postbuild+Plugin)で特定ビューの全てのジョブを無効化してみたのでメモする。

Postbuild Pluginで以下のようなスクリプト書いた。

```groovy
// パラメータの値を変数に
view = manager.envVars["VIEW"] // ビューの名前
action = manager.envVars["ACTION"] // enable:有効化/disable:無効化

// jobの有効化/無効化
for (job in jenkins.model.Jenkins.instance.getView(view).items) { 
  if (action == "enable") {
    manager.listener.logger.println "${job.fullDisplayName} enabled"
    jenkins.model.Jenkins.instance.getItem(job.fullDisplayName).enable()
  } else {
    manager.listener.logger.println "${job.fullDisplayName} disabled"
    jenkins.model.Jenkins.instance.getItem(job.fullDisplayName).disable()
  }
}
```
Apacheのconfigureオプションの確認

今走ってるApacheのコンパイル時のオプションを表示。
どんなオプションでコンパイルしたか忘れたとき、わからないときに使う。

/usr/sbin/apachectl -V

モジュールの一覧表示

/usr/sbin/httpd -l
【FileMaker】条件付値一覧（追記あり）


FileMaker社のサイトで非常にわかりにくい条件付値一覧の作り方。
http://filemaker-jp.custhelp.com/app/answers/detail/a_id/11960

なんでこんなに文字だけなんでしょうね〜。

これについて、「要はこうだよ」と解説します。

# 作りたいもの #
「レストラン」で提供するメニューとそのメニューからお客が注文する注文書

# 必要な機能 #
* テーブル
    * 「メニュー」テーブル
    * 「注文」テーブル
* 値一覧
    * 注文する際の「カテゴリー（タイプ）」（ランチ、ディナー、デザート）
    * 注文する際の「カテゴリー（タイプ）」の「料理（項目）」
* レイアウト
    * 「メニュー」を登録するレイアウト
    * 「注文」を取るレイアウト

# イメージ #
作りたい画面のイメージです。

- メニューがこんな感じであります。ランチではサンドイッチ、スープ、ハンバーガーを提供していますね。
![1210_4.png](https://qiita-image-store.s3.amazonaws.com/0/60538/19d84aca-eba3-9fdf-ccfa-2748ece3898c.png)


- 注文をしてみましょう。
![1210_1.png](https://qiita-image-store.s3.amazonaws.com/0/60538/a7c30b61-4035-1e4a-2a2f-bbed41f7e0c3.png)

- どのカテゴリー（タイプ）を食べたいかを選びます。
![1210_2.png](https://qiita-image-store.s3.amazonaws.com/0/60538/9a94a301-fd89-1f5c-459d-9da32806e4c7.png)

- どの食べ物にしようかな？
![1210_3.png](https://qiita-image-store.s3.amazonaws.com/0/60538/a08e1e04-dd1c-e77b-7280-c916531bdfb3.png)

という感じでしょうか？

だいたいイメージできました？

では、作っていきましょう。

# 作り方 #

## テーブルを作ってリレーションをはる
メニューテーブルと注文テーブルを作成し（フィールドのタイプは全てテキスト）、それぞれ関連するタイプをリレーションします。
![1210_5.png](https://qiita-image-store.s3.amazonaws.com/0/60538/7f4fed5d-8587-bde6-b16a-547eecfa7026.png)

## 値一覧を作る ##
値一覧を二つ作ります。

まずは、料理のカテゴリー（タイプ）ですね。
「メニュー」テーブルの「カテゴリー（タイプ）」を表示するときの値一覧になります。
![1210_6.png](https://qiita-image-store.s3.amazonaws.com/0/60538/7fc8341a-de3e-3e0b-8488-15a3a7162c2c.png)

そして、カテゴリー（タイプ）ごとに表示される料理そのもののリストです。
![1210_7.png](https://qiita-image-store.s3.amazonaws.com/0/60538/ddf06b7a-8e20-f4ef-1129-e6f0f2770834.png)
このとき、カテゴリー（タイプ）と関連できるように、リレーションで作成したオカレンスのリレーションを利用します。
実際に注文している「注文」で入力されたカテゴリー（タイプ）をキーにして、「メニュー」の料理（項目）を表示する、ということになります。
これで、「関連するデータのみの」の表示ができるようになります。

ついうっかり、関連データの部分を「メニュー」にしそうですが、「**実際に**」選択されたデータをもとに「メニュー」を表示する、ということを覚えておけば混乱が少ないと思います。

## レイアウトで値一覧を指定する ##
では、実際の「注文」レイアウトで値一覧を設定使っていきましょう。

* カテゴリー（タイプ）
![1210_8.png](https://qiita-image-store.s3.amazonaws.com/0/60538/224cc45f-0c35-d67a-6e16-c71c8c4381f2.png)
入力を「ポップアップメニュー」にして、値一覧の「項目のタイプ」を指定します。

* 項目（料理）
![1210_9.png](https://qiita-image-store.s3.amazonaws.com/0/60538/26d4f64b-6368-fcba-5d20-de1080592523.png)
入力を同じく「ポップアップメニュー」にして、値一覧の「項目の名前」を指定します。

これで、レイアウトモードを終了してブラウズモードで見ると値一覧が設定されているのが確認できます。


いかがですか？
ちょっと敷居が高い動的に表示するリストの切り替えのできる条件付値一覧、これができればシステム屋さんの領域に突入です^^
では！

---
追記です。
[階層が深くなった場合の実装の仕方](http://qiita.com/tyuma/items/3f1e51306c9fe3a7e5f7)を、公開しました。
こちらも参考にしてください。

---
追記の追記です。
[条件付き値一覧で選択した項目の別フィールドを取得する](https://qiita.com/tyuma/items/c17d8b7fb152974ba28f)を、公開しました。
こちらも参考にしてください。

では、FileMakerライフをお楽しみください。
ChEMBLの全化合物の原子数を見てみる

#概要
>bioinformatics - ChEMBLから全化合物データをダウンロードして分割したsdfファイルをつくる - Qiita
>http://qiita.com/tonets/items/272ed39b1cc663c47fac

の続きになります．

EMBL-EBIが運営する化合物／薬物のデータベース ChEMBL にはどんな化合物があるのだろう，というのを見ていきたいと思います．
手始めに全ての化合物の原子の数がどんな分布になっているかを見てみます．

#ChEMBLからsdfをダウンロードしてバラす
こちらの内容をやっておきます．
>bioinformatics - ChEMBLから全化合物データをダウンロードして分割したsdfファイルをつくる - Qiita
>http://qiita.com/tonets/items/272ed39b1cc663c47fac

#sdfファイルの原子数をカウントする
sdfファイルを開いてみると以下のようになっています．

```lang:sdfファイルの例：CHEMBL601.sdf
CHEMBL601
  SciTegic12111210002D

  9  8  0  0  0  0            999 V2000
    1.9000   -3.8875    0.0000 C   0  0
    1.9000   -3.1792    0.0000 O   0  0
    3.7167   -5.0000    0.0000 O   0  0
    3.7375   -4.2875    0.0000 C   0  0
    2.5042   -4.2542    0.0000 C   0  0
    1.2750   -4.2375    0.0000 O   0  0
    3.1375   -3.9250    0.0000 C   0  0
    4.9750   -4.3292    0.0000 N   0  0
    4.3625   -3.9542    0.0000 C   0  0
  2  1  2  0
  3  4  2  0
  4  7  1  0
  5  1  1  0
  6  1  1  0
  7  5  1  0
  8  9  1  0
  9  4  1  0
M  END
> <chembl_id>
CHEMBL601

$$$$
```

今回のポイントは <b>4行目の最初の3文字が原子の数</b> になっているということです．4文字目～6文字目は結合数になっているので要注意です．何が言いたいかというと，下のようなファイルも存在します．

```lang:sdfファイルの例：CHEMBL440060.sdf
CHEMBL440060
          11280716012D 1   1.00000     0.00000     0

206208  0     1  0            999 V2000
    2.0792   -0.9500    0.0000 N   0  0  0  0  0  0           0  0  0
    1.4671   -0.5958    0.0000 C   0  0  2  0  0  0           0  0  0
    0.8510   -0.9500    0.0000 C   0  0  0  0  0  0           0  0  0
以下略
```
原子数206と結合数208がくっついてしまっています．というわけで，丁寧に切り取ってあげましょう．今回は以下のpythonスクリプトを使いました．普通にワンライナーでできますが．

```py:count.py
#!/usr/bin/python
import re
import sys
import linecache

if (len(sys.argv) != 2):
    print 'Usage: # python %s sdf' % sys.argv[0]
    quit()

sdffile = sys.argv[1]
fi = open(sdffile, 'r')
line = fi.readlines()
Natom = int(line[3][0:3])
print sdffile, ", ", Natom
fi.close()
```

```bash:実行
$ python count.py CHEMBL440060.sdf
> CHEMBL440060.sdf ,  206
```

#ChEMBLの全部の化合物の原子数をカウントする
これを1,404,752個全てに適用します．
とりあえず32コアのサーバで以下のシェルスクリプトを使ってやりました．

```bash:たくさん実行
#!/bin/sh
PROCMAX=32
np=$PROCMAX

FP=chembldata.txt
DIR=chembl_sdfs

if [ -e $FP ]; then
    rm -f $FP
    echo "rm -f $FP"
fi

touch $FP

for i in $DIR/*; do
    python count.py $i >> $FP &
    let np=np-1
    if [ $np -eq 0 ]; then
        wait
        np=$PROCMAX
    fi
done
```

これで`chembldata.txt`というファイルに全部の原子数が書き込まれます．6時間くらい*かかりました．バラさないで`chembl_19.sdf`から直接やった方が絶対速いですね（てへぺろ）．
*追記：やり直してみたら2時間13分で終わりました．

#ヒストグラムを描く(R)
Rを使ってヒストグラムを描いてみます．

```R:ヒストグラムを描く（pngで保存）
data <- read.csv("chembldata.txt", header=FALSE)
Natom <- t(t(data[2]))
png("plot.png", width = 600, height = 600)
hist(Natom, col = "orange", main = "N_atom", breaks = "Scott", xlim=c(0,100), ylim=c(0,80000))
dev.off()
```

こうなりました．
![plot.png](https://qiita-image-store.s3.amazonaws.com/0/57626/6aaa8e63-4311-e89a-b83a-2e804a350d86.png)

ちなみに $N_{atom}>100$ の化合物はだいたい1万個ぐらいあります．

```r
> sum(Natom > 100)
[1] 11443
```

ピークは $N_{atom}=26$ で，原子数26の化合物は74,693個ありました．
RaveJS入門


## [RaveJS](https://github.com/RaveJS/rave)とは

JavaScriptのモジュールローダーです。  
似たライブラリに[RequireJS](http://requirejs.org/)がありますが、RaveJSはNode.jsやBowerのパッケージ情報から依存関係を解決してくれます。

標準ではAMD、node.js、ES6のモジュールに対応しており、拡張により、CSS、テンプレート、JSON、JSX等を読み込むことも可能です。

Note: [JavaScriptのモジュール化 AMDとrequire.js](http://matome.naver.jp/odai/2137754797849445801)



## Try

まずはbower.jsonを用意してください。
bower initを使うと楽。

例:

```json
{
  name: 'myapp',
  version: '0.0.0',
  main: 'myapp.js'
}
```

次にRaveJSをダウンロード。

```sh
bower install rave.js --save
```

index.htmlはとりあえず↓な感じでRaveJSを読み込むだけ。

```html
<!doctype html>
<html data-rave-meta="bower.json">
	<head>
		<meta charset="UTF-8"/>
		<title>my app</title>
		<script src="bower_components/rave/rave.js"></script>
	</head>
	<body>
	</body>
</html>
```

myapp.jsを用意して

```js
alert("hello world");
```
ブラウザでindex.htmlを読み込めばok!

と思いきや、現状、require関数が一度は実行されないとエラーになってしまうようなので  
jqueryをダウンロードして、とりあえず読み込んでおきましょう...

```sh
bower install jquery --save
```

```js
require("jquery");
alert("hello world");
```


## Note

```js
require("jquery");
```
の戻り値はjQueryオブジェクトではありません。  
理由はjQueryがAMD等に沿った記述になっていないからです。

jQueryオブジェクトが必要な場合はグローバル変数から取得する必要があります。

```js
var jquery = (typeof global !== "undefined" && global !== null ? global.jQuery : void 0) || (typeof window !== "undefined" && window !== null ? window.jQuery : void 0);
```

ただし、別途jsを組むことで、`require("jquery");`の戻り値をjQueryオブジェクトにする方法はあります。


## 所感

RequireJSと違って、ライブラリのパス等(require.config)を書かなくていいのが非常に楽でした。

ただし、まだ問題も残っているようで、markdownのライブラリが読み込めないなんてことがありました。  
が、それも今後解消されていくでしょう。
ImageMagickインストール済みのとこからImage::Magick(PerlMagick)をコンパイル・インストールする方法

ImageMagick本体をコンパイル・インストールした「後」に、Image::Magick(PerlMagick)をインストールする方法を紹介します。

## 普通にPerlMaigckをmakeするとエラーが出る

```
cd PerlMagick/
/path/to/bin/perl Makefile.PL
make
```
すると下記のようなエラーが出ます。

```
cp Magick.pm blib/lib/Image/Magick.pm
AutoSplitting blib/lib/Image/Magick.pm (blib/lib/auto/Image/Magick)
make[1]: Entering directory `/opt/ImageMagick/src/ImageMagick-6.8.6-10/PerlMagick/default'
cp Magick.pm ../blib/lib/Image/Magick.pm
Manifying ../blib/man3/Image::Magick.3
make[1]: Leaving directory `/opt/ImageMagick/src/ImageMagick-6.8.6-10/PerlMagick/default'
make[1]: Entering directory `/opt/ImageMagick/src/ImageMagick-6.8.6-10/PerlMagick/quantum'
make[1]: *** No rule to make target `Q16.pm', needed by `pm_to_blib'.  Stop.
make[1]: Leaving directory `/opt/ImageMagick/src/ImageMagick-6.8.6-10/PerlMagick/quantum'
make: *** [subdirs] Error 2
```

はい、悲しいですね。

## 対処法

ImageMagickのtarballを展開したディレクトリで下記のようにします。

```
./configure --with-quantum-depth=16 --with-perl=/path/to/bin/perl
make perl-sources 
cd PerlMagick/
/path/to/bin/perl Makefile.PL
make
make install
```

*  --with-quantum-depth=16は、必要に応じて"8"に設定してください。(Q8.pm/Q8.xsを使いたい場合)
* `/path/to/bin/perl`のところは、あなたが使いたいperlバイナリのパスを指定します。(~/.plenv/shims/perl, /opt/perl5-20/bin/perl, など)
* 最後のmake installは、環境によってはsudoが必要かもしれません。

## 参考
こちらの掲示板で解決法を見つけました。
がんばって英語を読むといいことがありますね( ˘ω˘)

http://www.imagemagick.org/discourse-server/viewtopic.php?t=22984
初めて見たエラーLine 20:EntityRef: expecting';'



知り合いのアプリをiOS8対応していたら、初見のエラーに遭遇しました。

## 6,6+対応の為、Lanch　Screenを追加しようとしたら...
![スクリーンショット 2014-12-10 12.52.56.png](https://qiita-image-store.s3.amazonaws.com/0/15703/14835a79-c722-622a-1f2f-2192ed728128.png)

原因を探っていたら、プロジェクト名がA&B(仮)の為でした。
”&”が含まれている為にLanch ScreenのXML読み込みにエラーが発生したためでした。

##解決策
![スクリーンショット 2014-12-10 12.59.01.png](https://qiita-image-store.s3.amazonaws.com/0/15703/4b8d4b8b-69a1-3c1b-811a-1996bcbf6d0e.png)

上記の手順で、XMLを表示し、20行目の【text=】を編集すれば、開くことが可能です。

##あとがき
＆で動かなくなるとは、意外でした。
ちなみに後で入力した場合は、XMLに追加されずエラーが表示されないようです。
「値を返却する」って言うな

よく「整数を返却する関数」とか「メソッドの返却値」という表現を目にしますが，たいへん違和感があります。
「返却」は，借りたり<ruby>貰<rt>もら</ruby>ったりしたものを返す（元へ戻す）ことだからです。
それぞれ「整数を返す関数」「メソッドの返り値」と言えばいいでしょう。

和語の「返す」は「返却する」よりもかなり意味が広い言葉です。
「返却する」は，何かが A から B に移ったあと，B がそれを再び A に移すことです。
一方，「返す」はそれ以外にも，「言葉を返す」（口答えする，反論する）のようにも使います。この場合，何かを言われて，その相手に別の言葉を投げるわけですね。「返事を返す」「挨拶を返す」「笑顔で返す」も同様。働きかけに対する反応になっています。
関数やメソッドが値を返すのも，呼ばれたときに持ち込まれた引数を元に戻すというわけではなく，制御の流れが呼び出し側に戻る際に何らかの値を持って行く，そのことを言っているわけですよね。

ここ最近，急激に「返却する」という表現が広まっているように感じます。
多くの人が使えばそれに目が馴れてしまい，「おかしい」と感じる人は減っていくでしょう。
この流れはもう止められないのかもしれません[^nov]。
一般論として，言葉の意味・用法が変化することは自然なことですが，私はまだこの「返却」に抵抗を続けたいと思います。

[^nov]: プログラミング界隈では「返却」に新しい意味・用法が付け加わった，と考える時期が近づいているのかもしれません。

「返却する」と書いてしまう背景には，意識的にせよ無意識にせよ「漢語で表現したい」という動機があるのでしょう。
人によりますが，ある種の文章（「きちんとした文章」とか）を書くときに和語を避けようとする傾向があります。漢語を使うと何かもっともらしい感じがするんですね。
それと，漢語は「返却」だけで名詞になりますが，和語だと「返すこと」のような形にせざるを得ません[^meishi]。また，漢語だと「返却値」「返却時」などのように造語要素として幅広く使えますが，和語は漢語ほどの造語力がありません[^z]。
「値を返す」の「返す」を漢語で表そうとすると，他に適当な語が浮かばないために，意味の似た「返却」を選んでしまうのではないかと思っています。

[^meishi]: 和語でも「返し」で名詞になるのですが，今の場合には使えないでしょう。

[^z]: 「返却値」には「返り値」「戻り値」という定着した用語があるので，それを使えばいいのですが，ここでは漢語・和語の造語力の一般論を述べています。

ところで，Rust には「所有権を返す」という概念があります。これはまさに返却です。
所有権が一時的に移り，その所有権を元に戻すわけですから。