OmniAICreator/Qiita-1.07M huggingface dataset:
Express4.xでプロジェクト作成


環境：Mac OS X 10.9.4

[Express](http://expressjs.com/)は、Node.jsのWebアプリケーションフレームワーク。

まず、Expressをグローバルインストールする。

```bash
$ npm install -g express
npm http GET https://registry.npmjs.org/express
:
:
express@4.4.5 /Users/username/.nvm/v0.11.13/lib/node_modules/express
├── parseurl@1.0.1
├── utils-merge@1.0.0
├── merge-descriptors@0.0.2
├── cookie@0.1.2
├── escape-html@1.0.1
├── cookie-signature@1.0.4
├── range-parser@1.0.0
├── fresh@0.2.2
├── vary@0.1.0
├── qs@0.6.6
├── methods@1.0.1
├── serve-static@1.2.3
├── buffer-crc32@0.2.3
├── path-to-regexp@0.1.2
├── debug@1.0.2 (ms@0.6.2)
├── proxy-addr@1.0.1 (ipaddr.js@0.1.2)
├── accepts@1.0.6 (negotiator@0.4.7, mime-types@1.0.1)
├── type-is@1.2.1 (mime-types@1.0.0)
└── send@0.4.3 (mime@1.2.11, finished@1.2.2)
```

インストールしたExpressのバージョンを確認する。

```bash
express -V
-bash: express: command not found
```

あれ！？ expressコマンドが動かない。昔はこれでバージョン表示されたのに…
どうやら、Express3.xではプロジェクトの雛形を用意するexpressコマンドが使えたが、Express4.xでは廃止になって、別パッケージとして分離された様です。

と、言うことでexpress-generatorをインストールする。

```bash
$ npm install -g express-generator
npm http GET https://registry.npmjs.org/express-generator
:
:
express-generator/bin/express
express-generator@4.2.0 /Users/username/.nvm/v0.11.13/lib/node_modules/express-generator
├── mkdirp@0.3.5
└── commander@1.3.2 (keypress@0.1.0)
```

これでexpressコマンドが使える様になります。

```bash
$ express -V
4.2.0
```

expressプロジェクトを作成する。今回はsampleプロジェクトを作成。

```bash
$ express sample

   create : sample
   create : sample/package.json
   create : sample/app.js
   create : sample/public
   create : sample/public/javascripts
   create : sample/routes
   create : sample/routes/index.js
   create : sample/routes/users.js
   create : sample/public/images
   create : sample/public/stylesheets
   create : sample/public/stylesheets/style.css
   create : sample/views
   create : sample/views/index.jade
   create : sample/views/layout.jade
   create : sample/views/error.jade
   create : sample/bin
   create : sample/bin/www

   install dependencies:
     $ cd sample && npm install

   run the app:
     $ DEBUG=sample ./bin/www
```

sampleディレクトリが作成されます。作成されたプロジェクトディレクトリの中に、必要なexpressモジュールを含んだpackage.jsonが作成されているので、次のコマンドを入力してライブラリをインストールする。

```bash
$ cd sample
$ npm install
```

作成したプロジェクトを実行する。

```bash
$ node app.js
$
```

あれ！？HTTPサーバーが実行された気配がないぞ？
どうやら、場所とファイル名が変わっているみたい。(sample/bin/wwwに変わっている）

```bash
$ DEBUG=sample ./bin/www
```

or 

```bash
$ node bin/www

```

これでHTTPサーバーが起動するので、ブラウザで、http://localhost:3000 を入力する。
「Welcome to Express」が表示されます。

![Welcome to Express](https://qiita-image-store.s3.amazonaws.com/0/41963/9b93402b-ab12-289d-c0e4-8d7b88e198d9.png "Welcome to Express")

動いているサーバーを止めるには「control+c」をを押します。
仲の悪い隣人たち

　StackOverFlowみたいです・・・もう少し基礎的な所から見直した方が良いかもしれません。これ以上先に進むのも良いですが、問題に対してもう少し慎重に望まないとマズいですね

問題元：2004TCCC Online Round4 Div1 Level1
問題文：
古い歌は「やれやれ、お隣さんはごめんです」と歌っており、オーネット町の住人はこの言葉を心に刻んでいます。どの住人も両隣の住人を嫌っています。誰も、隣人より町の井戸から遠く離れて住む気がなく、そういうわけで町は井戸の周りをぐるりと囲む様に配置されるようになりました。残念な事に町の井戸は老朽化が進み、修理の必要があります。あなたは、「われわれの井戸を守れ」財団に寄付を集める為に雇われました。町の住人は誰も、int型配列donationsの額を寄付したいとおもっており、int配列は井戸を中心とした時計回りの順になっています。けれど、隣人が寄付をしていたら自分は寄付をしません。隣人は常にdonationsに連続してリストされており、donationsの先頭と末尾も隣人同士です。集める事が出来る寄付で、最も多い金額を計算して返してください。

```java:
public class Main {
	boolean[] check;
	int[] donate;
	int ans = Integer.MIN_VALUE;
	
	void dfs(int pos, int sum) {
		if(pos >= donate.length) return;
		if(check[pos]) return;
		int before = (pos - 1 < 0) ? donate.length - 1 : pos - 1;
		int next = (pos + 1) % donate.length;
		check[before] = check[next] = true;//この人からはもらえない
		for(int r = pos; r < donate.length; r++) {
			sum += donate[pos];
			ans = Math.max(ans, sum);
			dfs(pos + r, sum);
		}
	}
	
	int maxDonations(int[] donations) {
		donate = donations;
		check = new boolean[donate.length];
		donations = null;
		for(int r = 0; r < donate.length; r++) {
			dfs(0, 0);
		}
		return(ans);
	}
	
	void doIt() {
		int[][] donations = {
				{10, 3, 2, 5, 7, 8},
				{11, 15},
				{7, 7, 7, 7, 7, 7, 7},
				{1, 2, 3, 4, 5, 1, 2, 3, 4, 5},
				{94, 40, 49, 65, 21, 21, 106, 80, 92, 81, 679, 4, 61, 6, 237, 12, 72, 74, 29, 95, 265, 35, 47, 1, 61, 397, 52, 72, 37, 51, 1, 81, 45, 435, 7, 36, 57, 86, 81, 72},
		};
		//19, 15, 21, 16
		System.out.println(maxDonations(donations[0]));
	}
	
	public static void main(String[] args) {
		new Main().doIt();
	}
	
}
```
ksnctf q22 Square Cipher

http://ksnctf.sweetduet.info/problem/22
正方形にアルファベットが敷き詰められている。
## やったこと（ネタバレ）
Base64とかそれ系は違うっぽい。
Square Cipherでググるけどそれっぽい奴はでない。
文字列をよく見てみると大文字と小文字の分布が違うことに気づく。特に外周には大文字が出てこない。
なので大文字と小文字に分けて置換してみるとそれっぽいやつが出た。
Mac/iOSのリマインダーでプログラムの終了通知を受け取る

## はじめに
Pythonで実行に数時間以上かかるプログラムを走らせて放置したり外出したりすることが多いのですが、そんなときにプログラムの終了通知やその他メッセージをiPhoneで受け取りたいと思い、Mac/iOSのリマインダーを使うことを考えました。

## やっていること
以下にサンプルスクリプトとして`reminders.py`を作成しました。やっていることは単純で、MacのReminders.appに新規リマインダーを登録させるAppleScriptを、Pythonで作成・実行させているだけです。

1. `script_org`でAppleScriptの文字列を定義する
1. 諸々の変数(タイトル, 本文, 通知時間の遅延)を文字列に突っ込む
1. `subprocess.Popen()`で、完成したAppleScriptの文字列を標準入力としてshell上で`osascript`を実行
1. Reminders.appに新規リマインダーが登録され、指定時間にMac/iPhoneの両方で通知を表示してくれる

## 使用上の注意

実際に使用するときは、モジュールとしてインポートするのが良さそうです。また、使用前にはReminders.appで`Python Notification`というリストを作成しておく必要があります。これはリマインダーの登録先となり、`script_org`に記述した`set pylist to`の後の文字列で定義しています。


```py:example_of_usage
import reminders
reminders.notify(title='Python Notification',message='Calculation finished!',delay=0.25)
```

- title: リマインダーのタイトル(大きく表示される)
- message: リマインダーの本文(小さく表示される)
- delay: リマインダーを登録してから何分後に通知を出すか

## サンプルスクリプト

```py:reminders.py
# coding:utf-8

from subprocess import Popen, PIPE

script_org = \
'''
on run argv
    
    set pylist to "Python Notification"
    
    tell application "Reminders"
        set notification to make new reminder in list pylist
        set name of notification to "{0}"
        set body of notification to "{1}"
        set remind me date of notification to (current date) + ({2} * minutes)
    end tell
     
end run
'''

def notify(title='Python Notification', message='Calculation finished!', delay=0.25):
    script_send = script_org.format(title, message, delay)
    command = Popen(['osascript'], stdin=PIPE, stdout=PIPE, stderr=PIPE)
    command.communicate(script_send)


if __name__ == '__main__':
    notify()
```
Patch of github


Githubのissueのメッセージでpatchフォーマットが使えることを今日知った。
既知なのかな？

![patch1](http://f.cl.ly/items/0k1W3W1j241A251h1k1g/Add_the_name_itemprop_to_%E5%86%A8%E6%B0%B8%E3%83%9E%E3%83%8D%E3%83%BC%E3%82%B7%E3%82%99%E3%83%A1%E3%83%B3%E3%83%88%E3%82%AA%E3%83%95%E3%82%A3%E3%82%B9_on_office_introduce_office_html_%C2%B7_Issue__35_%C2%B7_alice1017_e-tominaga.png)

こうやってpatch形式で書くと、

![patch2](http://cl.ly/image/2R3V0f1R2y1l/Add_the_name_itemprop_to_%E5%86%A8%E6%B0%B8%E3%83%9E%E3%83%8D%E3%83%BC%E3%82%B7%E3%82%99%E3%83%A1%E3%83%B3%E3%83%88%E3%82%AA%E3%83%95%E3%82%A3%E3%82%B9_on_office_introduce_office_html_%C2%B7_Issue__35_%C2%B7_alice1017_e-tominaga.png)

こうやってハイライトされる。

でもGithub特有の、単語単位に対してdiffハイライトしてくれる機能はついてないみたい。
xcode6 beta2 + github でソース管理 その2(リモートリポジトリからXcodeにソースをダウンロード)

githubの２要素認証を行ってる場合はhttp方式でソースをダウンロードすることはできません。本ブログではgithubのリモートリポジトリをSSH方式でソースをダウンロードするまでの流れについて説明します。

**※テスト環境について**
mac os x 10.9.3
xcode6 beta2

## 秘密鍵、公開鍵を作成

ターミナルを開いて鍵作成

```
ssh-keygen
Generating public/private rsa key pair.
```

そのままEnter

```
Enter file in which to save the key (/Users/kilh/.ssh/id_rsa): 
```

パスフレーズと確認用のパスフレーズを入力

```
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
```

鍵作成完了

```
Your identification has been saved in /Users/kilh/.ssh/id_rsa.
Your public key has been saved in /Users/kilh/.ssh/id_rsa.pub.
以下省略
```

## githubに公開鍵を登録する

+ githubにログインしメニューからAccount Settingを選択
+ サイドメニューのSSH Keysを選択
+ Add SSH keyをクリック

![img1.png](https://qiita-image-store.s3.amazonaws.com/0/46268/cf01f77d-c58c-7086-8042-a442adcd010b.png)

ssh-keygenから作成した公開鍵をコピーして以下の画面に登録する。
※公開鍵のデフォルトの名前はid_rsa.pub

![スクリーンショット 2014-07-01 20.17.15.png](https://qiita-image-store.s3.amazonaws.com/0/46268/b53b083b-798d-b670-669d-957d8915149d.png)

github鍵登録完了！！

## githubのリモートリポジトリからssh通信でソースコードをダウンロード

xcode6を起動しCheck out existing projectを選択

![スクリーンショット_2014-07-01_20_21_40.png](https://qiita-image-store.s3.amazonaws.com/0/46268/15dd07d8-ed58-f4ad-06ac-bc9996f66387.png)

githubのクーロン対象レポジトリのssh通信用のアドレスをコビー

![IsaoCorp_swift_app.png](https://qiita-image-store.s3.amazonaws.com/0/46268/fcc2aadb-a428-21a2-967a-dc169ac8bd65.png)

アドレスをOr enter a repository location項目に入れてNextクリック

![Check_Out.png](https://qiita-image-store.s3.amazonaws.com/0/46268/34f081b2-435c-64e1-5752-11944d5a6cb3.png)

ssh-keygenで鍵作成した時、設定したパスフレーズを入力
![スクリーンショット 2014-07-01 20.22.16.png](https://qiita-image-store.s3.amazonaws.com/0/46268/654a77da-a7db-77f4-b830-e22d5cc710c3.png)

ダウンロードするディレクトリ名や場所を指定してCheck Outをクリック
![スクリーンショット 2014-07-01 20.22.49.png](https://qiita-image-store.s3.amazonaws.com/0/46268/4aeb5e62-17f3-90a5-ec3e-4cd8c69c0f33.png)

これでgithubのリモートリポジトリからssh通信にてソースをダウンロードすることができました。お疲れさまです！！

[IOS8アプリ開発日誌掲載中！！](http://qiita.com/kilhyungdoo/items/087dcbf971ac5e05d3f0)
全リージョンのCloudTrailロギングを有効にするワンライナー


## 準備
1. AWS CLIが使えるようにしておく
2. 使用するbucketにあらかじめポリシーを設定しておく[→ドキュメント]([https://docs.aws.amazon.com/awscloudtrail/latest/userguide/create_trail_bucket_policy.html])

```
{
	"Version": "2008-10-17",
	"Statement": [
		{
			"Sid": "AWSCloudTrailAclCheck20131101",
			"Effect": "Allow",
			"Principal": {
				"AWS": [
					"arn:aws:iam::903692715234:root",
					"arn:aws:iam::859597730677:root",
					"arn:aws:iam::814480443879:root",
					"arn:aws:iam::216624486486:root",
					"arn:aws:iam::086441151436:root",
					"arn:aws:iam::388731089494:root",
					"arn:aws:iam::284668455005:root",
					"arn:aws:iam::113285607260:root"
				]
			},
			"Action": "s3:GetBucketAcl",
			"Resource": "arn:aws:s3:::j3tm0t0-audit"
		},
		{
			"Sid": "AWSCloudTrailWrite20131101",
			"Effect": "Allow",
			"Principal": {
				"AWS": [
					"arn:aws:iam::903692715234:root",
					"arn:aws:iam::859597730677:root",
					"arn:aws:iam::814480443879:root",
					"arn:aws:iam::216624486486:root",
					"arn:aws:iam::086441151436:root",
					"arn:aws:iam::388731089494:root",
					"arn:aws:iam::284668455005:root",
					"arn:aws:iam::113285607260:root"
				]
			},
			"Action": "s3:PutObject",
			"Resource": "arn:aws:s3:::j3tm0t0-audit/AWSLogs/*/*",
			"Condition": {
				"StringEquals": {
					"s3:x-amz-acl": "bucket-owner-full-control"
				}
			}
		}
	]
}
```

## 実行

```
% for x in `aws ec2 describe-regions --output text --query 'Regions[*].RegionName'` ; do aws cloudtrail create-trail --name Default --s3-bucket-name j3tm0t0-audit --include-global-service-events --region $x ; aws cloudtrail start-logging --name Default --region $x ; done
{
    "IncludeGlobalServiceEvents": true,
    "Name": "Default",
    "S3BucketName": "j3tm0t0-audit"
}
{
    "IncludeGlobalServiceEvents": true,
    "Name": "Default",
    "S3BucketName": "j3tm0t0-audit"
}
{
    "IncludeGlobalServiceEvents": true,
    "Name": "Default",
    "S3BucketName": "j3tm0t0-audit"
}
{
    "IncludeGlobalServiceEvents": true,
    "Name": "Default",
    "S3BucketName": "j3tm0t0-audit"
}
{
    "IncludeGlobalServiceEvents": true,
    "Name": "Default",
    "S3BucketName": "j3tm0t0-audit"
}
{
    "IncludeGlobalServiceEvents": true,
    "Name": "Default",
    "S3BucketName": "j3tm0t0-audit"
}
{
    "IncludeGlobalServiceEvents": true,
    "Name": "Default",
    "S3BucketName": "j3tm0t0-audit"
}
{
    "IncludeGlobalServiceEvents": true,
    "Name": "Default",
    "S3BucketName": "j3tm0t0-audit"
}
```
## 追記
start-loggingするのを忘れてました...
bash スクリプトの -x トレースを指定したファイルに出力する


単に set -x すると標準エラーに出力されるが、
`$BASH_XTRACEFD` で出力先のファイルディスクリプタを指定できる。


```bash:FD=3でファイルを開いてそちらに向ける
#!/bin/bash

# FD=3 で出力先ファイルを追記モードでオープン
TRACE_LOG=${TRACE_LOG-/tmp/xtrace.$$.log}
exec 3>>$TRACE_LOG
# 上書きしたい場合は演算子を変える
# exec 3<>$TRACE_LOG

# 出力先を FD=3 に指定
BASH_XTRACEFD=3

# デバッグ出力開始
set -x

#
# 必要な処理を実行
#

# デバッグ出力終了
set +x

# 終わったらファイルを閉じる (明示的にやらなくてもスクリプト終了時に閉じる)
exec 3>&-
```
CakePHPのModel->query()でSQLを何回も発行するようなバッチを作る際の注意点


ほとんどこんな事例ないと思うけど、メモ。

CakePHPでバッチを作る際に、Model->query()でSQLを何回も発行するような組み方をしてしまうと、メモリが足りなくて処理落ちする事がある。まぁ、そもそもこんなバッチ組んでるのどうなの？って思うけど。

```
<?php
class HogeShell extends AppShell {
	public $uses  = array('Hoge');
	public function main() {
		for ($i=0; $i<100; $i++) {
			// メモリ足りなくて死ぬ
			$result = $this->Hoge->query('...');
		}
	}
}
```

## 前提

- CakePHP 2.4.x

## Model->find() などはクエリキャッシュできる

Modelにはセッション単位でのクエリキャッシュする機能がある。Model-> cacheQueries に true を設定すると、クエリキャッシュが有効になる。デフォルトでは無効。あくまでセッション単位なので、活用するシーンはあまりなさそうだけど。

```Hoge.php
<?php
class Hoge extends AppModel {
	public $cacheQueries = true;
}
```

## Model->query()はデフォルトでクエリキャッシュする

まさにこれがハマリポイント。

> query() は本質的に分離された機能のため、$Model->cacheQueries は無視されます。クエリ実行のキャッシュしないようにするには、2つ目の引数にfalseを指定してください。query($query, $cachequeries = false)

マニュアルにしっかり書かれているが、特別扱いのため、別個で指定してあげないとNG。それにしてもなぜModel->query()はデフォルトでクエリキャッシュが有効なのか。謎。

```lib/Cake/Model/Datasource/DboSource.php
public function fetchAll($sql, $params = array(), $options = array()) {
		if (is_string($options)) {
			$options = array('modelName' => $options);
		}
		if (is_bool($params)) {
			$options['cache'] = $params;
			$params = array();
		}

		// ここで無指定ならデフォルトで有効にしている…
		$options += array('cache' => true);
		$cache = $options['cache'];

		// snip
}
```

なので、クエリキャッシュする必要がなく、何回もquery()を実行する場合は、引数に false を渡してあげよう。

```
<?php
class HogeShell extends AppShell {
	public $uses  = array('Hoge');
	public function main() {
		for ($i=0; $i<100; $i++) {
			// メモリ足りて無事終わる
			$result = $this->Hoge->query('...', false);
		}
	}
}
```

そして、こういったバッチを書いている状況の場合、もっと改善できないか検討しよう。
正規表現、空行を削除する

正規表現、空行を削除する
==========


■about
----------

正規表現、空行を削除する




■code
----------

```php:php
//検索文字列
^\n
//置換文字列
空
```




■reference
----------
正規表現サンプル(空行を削除する)
http://hodade.adam.ne.jp/seiki/page.php?r_karagyou_sakujo
PDOでページャー作成（自分用メモ）

データベースの登録は省きます。
まずはPDOで接続する。

```php:base.php
<?php
$dsn="mysql:dbname=dbname;host=localhost;charset=UTF8";
$user="root";
$pass="root"
try{
  $pdo=new PDO($dsn,$user,$password);
}catch(Exception $e){
  echo 'error' .$e->getMesseage;
  die();
}
?>
```

次にペーシャーの初期設定

```php:page.php
<?php
if(preg_match('/^[1-9][0-9]*$/',$_GET['page'])){
  $page=(int)$_GET['page'];
}else{
  $page=1;
}
//変数の設定
//表示するコンテンツの数
$content=5;
//初期値
$set=$content*($page-1);
//SQL文の発行
$sql="SELECT count(*) FROM temp006";
$stmt=$pdo->query($sql);
$max=$stmt->fetchColumn();
//最大ページ数
$maxPage=ceil($max/$content);
?>
```

次に

```php:index.php
<?php
//base.phpとpage.phpの読み込み
require 'base/base.php';
require 'page/page.php';
//データベースからの表示
$sql="SELECT * FROM temp006 LIMIT ".$set.",".$content;
$stmt=$pdo->query($sql);
$post=$stmt->fetchAll();
//viewの読み込み
require 'view/index_view.php';
?>
```

最後にViewの表示

```php:index_view.php
<?php
<div class="page">
  //$pageが1より大きい場合
  <?php if($page>1) :?>
    //1ページ前に
    <a href="?page=<?php echo $page-1; ?>"><<</a>
  <?php endif; ?>
  //$i=1でページャーの最初のページ番号
  //$iを最大ページになるまで足していく
  <?php for($i=1;$i<=$maxPage;$i++) :?>
    <?php if($page==$i) :?>
      //$pageと$iの値が同じならstrongで現在のページ番号を強調する
      <strong><a href="?page=<?php echo $i; ?>"><?php echo $i; ?></a></strong>
    <?php else :?>
      <a href="?page=<?php echo $i; ?>"><?php echo $i; ?></a>
    <?php endif;?>
  <?php endfor; ?>
<<<<<<< HEAD
  //$pageが$maxPageより小さい場合
  <?php if($page<$maxPage) :?>
    //1ページ次に
    <a href="?page=<?php echo $page+1; ?>">>></a>
  <?php endif; ?>
?>
```
MongoDBのインストール・使い方

# 概要
OSXでのMongoDBのインストール方法&使い方．
# インストール
<pre>$ brew install mongodb</pre>
# 起動  
<pre>
[defaultの/data/dbにdbを保存するものとする]
$ sudo mkdir -p /data/db
$ sudo chown -R "user name"
$ sudo chgrp -R "user group"
$ mongod
</pre>
# 使い方
随時追記
【GitHubPages】GitHub.ioで自己紹介ページを作りました


## はじめに

このようなページを作ってみました。

**PC版**

[![スクリーンショット 2014-07-01 22.14.08.png](https://qiita-image-store.s3.amazonaws.com/0/47302/30cdcae9-886c-f360-bc91-e9383eec1e89.png "スクリーンショット 2014-07-01 22.14.08.png")](http://programmatore.github.io)

**スマホ版**

[![スクリーンショット 2014-06-30 0.07.43.png](https://qiita-image-store.s3.amazonaws.com/0/47302/35c55bb1-eb9d-db79-898c-1b668785b71c.png "スクリーンショット 2014-06-30 0.07.43.png")](http://programmatore.github.io)

いわゆる自己紹介ページというやつです。

なんかポートフォリオというか自分らしさを表現したいと思って作りました。

さらに踏み込んだ内容はブログに書きましたので、見てみてください。

[【作ってみた】GitHub.ioで自己紹介ページ](http://diario.hatenablog.com/entry/2014/06/29/191059)

で、なにを使って作ったかというとプログラマー御用達のGitHubです。

GitHubにはWebに静的ページを組める様に **GitHubPages** というものが用意されています。

プロジェクトとレポジトリが一体になっているのでGitHubを使ったことがある人にはわかりやすいかと思います。

## GitHub Pagesとは

[![スクリーンショット 2014-06-28 10.39.21.png](https://qiita-image-store.s3.amazonaws.com/0/47302/105015be-7106-f0ec-2682-674d97953b82.png "スクリーンショット 2014-06-28 10.39.21.png")](https://pages.github.com/)

GitHubPagesにWebSiteを公開する方法は二通りあります。

1. 自分のアカウントのページ（User or Organization site）
2. プロジェクトごとのページ（Project site）

自分のアカウントのページの場合はURLが`http://[username].github.io/`となります。

僕のアカウントは[programmatore](https://github.com/programmatore)なので[http://programmatore.github.io](http://programmatore.github.io)というURLになります。

プロジェクト毎のページに関してはURLが`http://[username].github.io/[projectname]`というURLになります。

今回僕が使ったのは自分のアカウントのページなのでそちらの使い方を紹介します。

GitHubPagesを使ってブログを作っている人もいるかと思います。

使い方は人それぞれだと思いますが、導入がすごく簡単なので、使ってみてください。

## 使い方

GitHubのアカウントをお持ちでない方はアカウントを作成してください。

とっても簡単ですぐに始められます。

まずはレポジトリを作成します。

レポジトリ名は

**[ユーザー名].github.io**

となります。

ユーザー名が違う、違う名前をドメインにしたいというわがままは通用しないらしいので、気をつけてください。

そしてその後はGitを使うのと同じです。

まずはgit clone して上記で新しく作成したレポジトリを落としてください。

```
$ cd 作業場所
$ git clone git@github.com:[ユーザー名]/[ユーザー名].github.io.git
```

そしてそこに移動して`index.html`を作成します。

```
$ cd [ユーザー名].github.io
$ echo "Hello GitHub Pages" >> index.html
```  

そしたら後は`Git`のレポジトリにプッシュします。

```
$ git add .
$ git commit -m "Initial commit"
$ git push origin master
```

で、`http://[ユーザー名].github.io`に表示されるかと思ったら、ちょっとだけタイムラグがありました。

自分は飲み物を冷蔵庫からとって、コップに注ぎ、飲み物を冷蔵庫に戻し、３口くらい飲んで、戻ったら反映されていました。

あとの作り込みは静的ページを作る感じでゴリゴリコーディングしていきましょう。

僕のレポジトリは以下のリンクにありますので良かったら参考にしてみてください。

[egenintroduktion/egenintroduktion.github.io](https://github.com/egenintroduktion/egenintroduktion.github.io)

## おわりに

以上になります。

久しぶりに静的ページ（HTML, JavaScript, CSS）を作りました。

ブログでも書きましたが、これをやろうとしたきっかけは[http://yoshiko-pg.github.io/](http://yoshiko-pg.github.io/)のページを見たからです。

本当にありがとうございます。

プログラマなのに自己紹介ページに自分が作った作品がないというのは無力を伝える以外のなにものでもないと思うので、これから色々作っていきたいと思います！
OSXにHomebrewをインストール

# Homebrewとは
OSXにおけるパッケージ管理コマンド．yum，apt-getと同様のことが出来るようになる．
# インストール方法
<pre>$ ruby -e "$(curl -fsSL https://raw.github.com/Homebrew/homebrew/go/install)"
$ rehash</pre>
# 本家
[Homebrew](http://brew.sh/index_ja.html)
# オプション一覧
* アップデート  <pre>$ brew update</pre>
* 正常に動作しているか確認  <pre>$ brew doctor</pre>
AssetBundle化するアセットをビルド対象から外す


公式マニュアルによると Resources フォルダ配下のアセットはSceneで使用しているかどうかに関わらずビルド対象に含まれてしまう。

[Unity - Manual: Reducing the File Size of the Build](http://docs.unity3d.com/Manual/ReducingFilesize.html)

> Unity strips most unused assets during the build, so you don’t gain anything by manually removing assets from the project. The only assets that are not removed are scripts (which are generally very small anyway) and assets in the Resources folder (since Unity can’t determine which of these will be needed and which won’t). With this in mind, you should make sure that the assets in the Resources folder are only the ones you really need for the game. You might be able to replace assets in Resources with AssetBundles to load assets dynamically and thereby reduce the player size.

そのため、AssetBundle化して動的に読み込むことにしたアセットは Resources フォルダから削除するか、Resourcesフォルダとは別の場所（例えば ResourcesForBundle とか）に移す必要がある。

逆に、直接 Scene から参照されていないが動的に Resouces.Load() などで読み込まれるかもしれないアセットは Resources フォルダに入れておけばビルドに含まれる。
複数のインスタンスを一気に作成するコード


なぜかRubyの勉強を再開しました。

さてさて。Rubyには`Kernel.eval`という命令があり、任意のRubyのコードを実行できる仕組みが備わっていることを知りました。

ということは、ループでぐるぐる回せば色んなことができんじゃね？ということで、まずは前々からやってみたかった、複数のインスタンスを一気に作成するコードを書いてみました。

## ソースコード

```ruby:sample_code.rb
#!/usr/local/opt/ruby/bin/ruby

class HelloWorld

    def initialize(name)
        @name = name
    end

    def sayHello
        puts @name << ", Hello."
    end

    attr_accessor :name

end

# 対象になるのはBobとTomとJerry
name_array = ["Bob", "Tom", "Jerry"]

# インスタンスの作成
name_array.each do |name|
    var = "@new_" << name
    value = "HelloWorld.new('#{name}')"

    eval("#{var} = #{value}") # @new_Bob = HelloWorld.new('Bob')
end

# インスタンスメソッドの呼び出し
name_array.each do |name|
    code = "@new_" << name << ".sayHello"
    eval(code) # @new_Bob.sayHello
end
```

## 出力結果

```sh:terminal
[21:50] archinwater % ./test2.rb
Bob, Hello.
Tom, Hello.
Jerry, Hello
```

## ハマりどころ

- evalの中での変数のスコープがややこしい(上記ソースコードで、オブジェクト変数をインスタンス変数にしているが、仮にローカル変数を使うと、後々そのオブジェクトを参照出来なくなる)
- evalの引数はstring（まずは）。`eval("#{var} = #{value}")`は通るけど、`eval(#{var} = #{value})`は通らない。
全角でも半角でも通過する、電話番号入力チェック


#やりたかったこと

表題の通り。
「全角？半角？なんじゃらほい」というユーザーが想定される時に、全角で電話番号入力してもチェックを通過させるバリデーション。


#コード

```
function checkTel($str)
    {
		//全角を半角に
        $str = mb_convert_kana($str,"a", "euc-jp");
		//半角または全角のハイフンは取り除く
		$str = mb_ereg_replace("-", "", $str);
		$str = mb_ereg_replace("ー", "", $str);
		$str = mb_ereg_replace("－", "", $str);
    
		//数字であり、かつ10桁もしくは9桁かチェック
      if(ctype_digit($str) AND (strlen($str) == 10 OR strlen($str)== 11)){
          return TRUE;
      } else {
          return FALSE;
      }
}
```

#捕捉
コメントいただき、修正しました。

## str_replace ではなく mb_ereg_replace に

UTF-8でない文字コードだと、マルチバイトで文字化けするらしい。

参考
http://www.softel.co.jp/blogs/tech/archives/525


## is_numeric ではなくctype_digit に
is_numeric だと16進数や化学記号も通過させちゃうようです。

参考
http://www.php.net/manual/ja/function.is-numeric.php
http://thesaibase.com/php/ctype-digit
Xamarin で System.Data.SqlClient を使うには BUSINESS 版以上が必要でしたが今は無料でできます


## 追記 2016/04/12

[Xamarin が Microsoft に買収され](http://qiita.com/amay077/items/6e5c40abe0c21fc79e6a)、無償で使えるようになったことで、BUSINESS版でなくても ``SqlCommand`` などが使えるようになりました、やったね！

----
当方 Xamarin INDIE 版しか買えないしがない個人開発者です。
Xamarin で ``System.Data.SqlClient.SqlCommand`` などを使ったプロジェクトをビルドしたら、ビルド時にこんなダイアログボックスが。

![](http://blog.amay077.net/assets/images/posts/xamarin_requires_business_edition_when_using_sqlclient_01.png)

![](http://blog.amay077.net/assets/images/posts/xamarin_requires_business_edition_when_using_sqlclient_02.png)

どうやら、特定のクラスを使用するには BUSINESS 版以上が必要なようです。

* [Xamarin でビルドを自動化するには Business 版以上が必要です](http://qiita.com/amay077/items/ab90c74e78dd87ba31fb)

といい、INDIE 版の制限事項が後出しで判明するのなんとかならないですかね。

今回は .NET のプロジェクトを Xamarin に移植する際に発覚したもので、特に ``SqlClient`` は使ってなかったので削除して解決しました。

Xamarin で ``SqlClient`` って何に使うんだろ？イントラ？あるいは SQL Server Compact が使える？まさかね。
メモ：Materialには気を付けよう

GameObjectをデストロイしても、
引っ付いてるMaterialはメモリ上に残ったまま
必ずMaterialはDestroyしなくてはならない。

MaterialのTexture残りっぱなしになってた。

後、NGUIのソースをちらっと見たけど
なかなかMaterialは奥が深い
もう少し詳細に解析しよう。

Matarialに関してリファレンスも見ないとね

これが解決すればメモリは減らないけど
増えてた部分は解決するかも
RuboCop | Style/For

# RuboCop | Style/For

## 概要

RuboCopの「Style/For」警告について。

ForとEachのどちらを使っているかをチェックします。
デフォルトではForに対して警告を出します。

## 設定値一覧

|設定対象|設定値|内容|デフォルト|
|:-----|:---|:---|:---:|
|EnforcedStyle|for|forを警告対象にする|--|
|EnforcedStyle|each|eachを警告対象にする|○|

## For

各設定値での検証結果をまとめます。

### 検証プログラム

for.rb

~~~ruby
for num1 in 1..5 do
  puts num1
end

(1..5).each do |num2|
  puts num2
end
~~~

### 実行結果 デフォルト の場合

.rubocop.yml

※明示的に設定しているが、デフォルト値なので何も設定しなくてもよい

~~~yaml
For:
  EnforcedStyle: each
~~~

~~~bash
$ rubocop for.rb
Inspecting 1 file
C

Offenses:

for.rb:1:1: C: Prefer each over for.
for num1 in 1..5 do
^^^

1 file inspected, 1 offense detected
~~~

### 実行結果 *for* の場合

.rubocop.yml

~~~yaml
For:
  EnforcedStyle: for
~~~

~~~bash
$ rubocop for.rb
Inspecting 1 file
C

Offenses:

for.rb:5:8: C: Prefer for over each.
(1..5).each do |num2|
       ^^^^

1 file inspected, 1 offense detected
~~~
Scala開発環境構築(ScalaIDE, Ubuntu版)

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

```
$ sudo add-apt-repository ppa:webupd8team/java
$ sudo apt-get update
$ sudo apt-get install oracle-java7-installer
```

バージョンを確認します。

```
$ java -version
java version "1.7.0_51"
Java(TM) SE Runtime Environment (build 1.7.0_51-b13)
Java HotSpot(TM) 64-Bit Server VM (build 24.51-b03, mixed mode)
```

## ScalaIDEをダウンロードする

以下のURLにアクセスします。
http://scala-ide.org/download/sdk.html



「For Scala 2.11.1」から以下の２つのどちらかを選択します。
Linux GTK 64 bit 
Linux GTK 32 bit

基本的には64ビット版Ubuntuは「Linux GTK 64 bit」、
32ビット版Ubuntuは「Linux GTK 32 bit」をダウンロードすれば大丈夫です。

正確に確かめたい場合はGTKのバージョンを以下のコマンドで確認できます。

```
$ dpkg -l libgtk2.0-0 libgtk-3-0
```

## ScalaIDEをインストール・起動する

tar.gzファイルを展開して、ScalaIDEを起動します。

```
$ tar xvzf scala-SDK-3.0.4-2.11-2.11-linux.gtk.x86_64.tar.gz
$ cd eclipse
$ ./eclipse
```

Scala開発用のプラグインが入ったEclipseが起動して開発を行うことができます。
rsrubyをRailsで動かす

RをRubyから使えるライブラリ、[rsruby](https://github.com/alexgutteridge/rsruby)をbundlerでインストールします。パッケージの管理はHomeBrewで行うものとします。

MacOSX10.6以前はX11が必須でしたが、今は[XQuartz](https://xquartz.macosforge.org/landing/)が必須になっているのでインストールします。

```sh
$ brew cask install xquartz
$ brew install homebrew/science/r
$ export R_HOME="/usr/local/Cellar/r/3.1.0/R.framework/Resources"
$ bundle config build.rsruby --with-R-dir=$R_HOME # コンパイルオプションを指定
$ bundle install --path=.bundle
```

で、終わりかと思ったらRailsで動かすにはR_HOMEを設定してやらないといけない。自分はMac上で開発しているので、とりあえず以下のコードでプラットフォームを判定している。

```ruby:config/environment.rb
ENV['R_HOME'] ||= case RbConfig::CONFIG['host_os']
                  when /linux/; '/usr/local/lib64/R'
                  when /darwin/; '/usr/local/Cellar/r/3.1.1/R.framework/Resources'
                  end
```
そういえばRubyでプラットフォームを判定する時のデファクトっぽい書き方ってあるんだろうか。
WordPressでお問い合わせフォームとサンキューページにSSL（自分用メモ）

お問い合わせフォームとサンキューページにSSLを設定
-ローカル　vhosts
- http -> 80
- https -> 443
  - 2箇所記入 追加コード

- プラグインを使用
- .htaccessでhttpsとhttpの設定を記入をしようとしたがWordPressの設定が優先されうまくいかない
 - HTTPSのプラグインを停止
 - header.phpに設定を記入
`<?php if ($_SERVER['REQUEST_URI'] == '/contact/index/' && empty($_SERVER['HTTPS'])) {
  header("Location: https://{$_SERVER['HTTP_HOST']}{$_SERVER['REQUEST_URI']}"); 
  exit;
} elseif ($_SERVER['REQUEST_URI'] == '/thanks/' && empty($_SERVER['HTTPS'])) {
  header("Location: https://{$_SERVER['HTTP_HOST']}{$_SERVER['REQUEST_URI']}"); 
  exit;
} elseif ($_SERVER['REQUEST_URI'] !== '/contact/index/' && $_SERVER['REQUEST_URI'] !== '/thanks/' && $_SERVER['HTTPS'] === 'on') {
  header("Location: http://{$_SERVER['HTTP_HOST']}{$_SERVER['REQUEST_URI']}"); 
}
?>`
package.json を解析してnpm install & npm link する

毎回同じ`module`ばかり重複してインストールされるのが、容量の無駄だと思ったので、グローバルにインストールして、リンクするようにした。

**要`jq`**

[jq公式サイト](http://stedolan.github.io/jq/)

```bash
$ brew install jq
```

```sh:npm-link.sh
#!/bin/sh

for i in `cat package.json | jq '.devDependencies | keys | .[]'`;
do
`echo npm install -g $i | sed -e 's/"//g'`;
`echo npm link $i | sed -e 's/"//g'`;
done
```

もっと良い書き方があるのかもしれないけど、とりあえず動くのでよし。

```bash
$ ./npm-link.sh
/path-to-local_node_modules/node_modules/grunt -> /path-to-global_node_modules/node_modules/grunt
...
```
Phlacon でモデルの値が空のときに DB のデフォルト値を使う

ビヘイビアでバリデーション前にデフォルト値を設定するようにしてみた．
MySQL で一応動作確認してる．

```php
<?php

use Phalcon\Db\RawValue;
use Phalcon\Mvc\Model\Behavior;
use Phalcon\Mvc\Model\BehaviorInterface;

/**
 * オプションで指定した値が '' や null で合った場合に DB のデフォルト値を入れるようにするビヘイビア
 */
class DefaultValue extends Behavior implements BefaviorInterface
{
  public function notify($type, $model)
  {
    if ($type === 'beforeValidation')
    {
      foreach ((array)$this->getOptions() as $property) {
        if ($model->$property === '' || $model->$property === null) {
          $model->$property = new RawValue('default');
        }
      }
    }
  }
}
```

使用例

```php
<?php

use Phalcon\Mvc\Model;

class SomeModel extends Model
{
  public $name;
  public $hobby;

  public function initialize()
  {
    $this->addBehavior(new DefaultValue(array('name', 'hobby')));
  }
}
```

実行例はあとで書くかも．
セレクトボックスのCSS3とIE

セレクトボックス
- IE9でデフォルトの矢印とCSS3で背景画像にした矢印が被る
- http://www.conifer.jp/csstest/css-ie-version.html
- CSS
.ie6 .form .select,
.ie7 .form .select,
.ie8 .form .select,
.ie9 .form .select {
  background: none;
}
Xamarin:Storyboard: 指定したビューに強制的に遷移させる


- カスタムURLスキームでサイトからアクティベーションコードをもらって端末アプリをアクティベートするユースケース


# Activationを行うViewを追加 #
- ビュー (ActivationController)追加
- Storyboard ID を指定する

![image](https://lh6.googleusercontent.com/-G3zejPqS8vs/U7KTl2zz-bI/AAAAAAAAAgs/UNvQjoOSGEo/w1128-h1098-no/manual_storyboard.1.png)

- Activation Codeを表示させるラベル(ActivateLabel)

![image](https://lh6.googleusercontent.com/-qrnjSVtLvLg/U7KTl4_c0WI/AAAAAAAAAgo/tmMeB5lm3Cw/w1286-h1098-no/manual_storyboard.2.png)

- Activateさせるボタン(ActivateButton)

![image](https://lh4.googleusercontent.com/-WF8prPYA5fI/U7KTlyLOa4I/AAAAAAAAAgk/5z3zR8cpGLc/w1338-h1098-no/manual_storyboard.3.png)


# カスタムスキームを定義 #

- Info.plist
- Advancedタブ
- "qrcode"という “URL Schemes”を定義


# Activationのビューのラベルにcodeをセット# 

- 実際は ActivateButtonのタッチイベントのハンドラも定義するが省略

```csharp

    using System;
    using MonoTouch.Foundation;
    using MonoTouch.UIKit;
    using System.CodeDom.Compiler;
    
    namespace QrCoder
    {
    	partial class ActivationController : UIViewController
    	{
    		string _activation_code = null;
    		
    		public string ActivationCode
    		{
    			set{ this._activation_code = value; }
    		}
    
    		public override void ViewDidAppear (bool animated)
    		{
    			base.ViewDidAppear (animated);
    			this.ActivateCode.Text = _activation_code ?? "" ;
    		}
    	}
    }
```

# AppDelegateでカスタムスキームで起動するように設定 #

- OpenUrlをオーバーライド

```csharp

		ActivationController _activation_controller = null; 

		public override bool OpenUrl (
			UIApplication application, 
			NSUrl url, string sourceApplication, NSObject annotation)
		{
			// url :  qrcode://host/path?query#fragment 

            // ビューコントローラをStoryboardからロードしてクラス作成する
			if (_activation_controller == null) {
				_activation_controller = this.Window.RootViewController.Storyboard.InstantiateViewController (
					"ActivationController"
				) as ActivationController;
			}

            // URL Query
			var query = System.Web.HttpUtility.ParseQueryString (url.Query); // System.Web.WebServices

			if (string.IsNullOrEmpty (query ["code"]))
                // codeパラメータがなければActivateしない
				return false;

            // ビューにコードをセット
			_activation_controller.ActivationCode = query ["code"].ToString ();

            // ナビゲーションコントローラを取得し、ActivationControllerビューをそこにプッシュする
			var controller = (UINavigationController)this.Window.RootViewController;
			controller.PushViewController (_activation_controller, true);

            // OpenUrlが処理されてUIが変わります
			return true;
		}
```


# Safariからテスト #

- qrcode://me/activate?code=activation_code でActivationビューが起動して、それにコードが設定せれている
- "Activate Now"をクリックして、端末のアプリをアクティベートする
PM2から実行中のワーカーの情報を取得する（サンプルとしてnode.js各ワーカーのメモリを取得）

# PM2に登録するプログラムに監視用のコマンドを仕込む

```js:pm2app.js
var monitor_init = function(){
    if (!('send' in process)) {return;}
    process.on("message", function (msg) {
        if ( "type" in msg ) {
            switch(msg.type){
            case "process.getinfo":
                process.send({type:msg.type, memory:process.memoryUsage()});
                break;
            default:
                break;
            }
        }
    });
}
var main = function(){
    monitor_init();
    var update = function(){
        setTimeout(update, 1000);
    }
    update();
}
main();
```

pm2にワーカーを登録する

```bash:start.sh
pm2 start pm2app.js -i 2 --name worker
```

# データ取得用のコマンドの作成

モジュールをnpmでインストールする

```
npm install pm2-interface@0.1.3
```

ワーカーの情報取得用コマンドを作成する

```js:pm2-monitor.js
#!/usr/bin/env node
var ipm2 = require('pm2-interface')()
var os = require('os');

ipm2.on('ready', function() {
    ipm2.bus.on('process.getinfo', function(worker){
        console.log({
            name : os.hostname()+'.'+worker.process.pm2_env.pm_id,
            data : worker.data.memory
        });
    });
    var msg = {type:"process.getinfo"};
    ipm2.rpc.msgProcess({name:"worker", msg:msg}, function (err, res) {
        setTimeout(function(){
            ipm2.disconnect();
        }, 100);
    });
});
```
ipm2.disconnectを実行しない限りずっとモニタリングすることもできる（pm2に登録してpubsubやfluentdに流すこともできる）

cronなどでポーリングする場合に癖があってipm2.rpc.msgProcessのコールバックではコマンドを発行したコールバックで
リクエストに対するレスポンスを受け取ることはできない。
なのでsetTimeoutで処理を遅らせている（値が取れないことを考慮したほうがいいかも）

※他にやり方があれば教えて下さい

# 結果
```text:console
{name: "mymachine.2", data: { rss: 19156992, heapTotal: 11356928, heapUsed: 5831840 } }
{name: "mymachine.3", data: { rss: 19156992, heapTotal: 11356928, heapUsed: 5831840 } }
```

# おまけ
```
npm install munin-plugin
```

モジュールのexample内にworkerのメモリを取得するmuninのプラグインが入ってます
Vagrantで作るGitLab環境

# GitLabをVagrantを使って構築する
GitLabの環境を構築するのは、結構手間がかかります。
最近は、GitLab Omnibus project という便利なPJがあるようです。GitLab Omnibus project を使うと、PostgreSQLやNginxなどのインストールから設定まで自動（Chefを使っているようです）で行ってくれます。

[GitLab.org / omnibus-gitlab | GitLab](https://gitlab.com/gitlab-org/omnibus-gitlab/blob/master/README.md)

# 事前準備
事前に、Vagrantをインストールしておいてください。

## Windowsの方はこちら
[Windows8 - Windowsに開発環境を構築する - Qiita](http://qiita.com/morozumi_h/items/bd373a1e4ad97e4667bc)

```packages
<?xml version="1.0"?>
<packages>
    <package id="mingw" />
    <package id="mingw-get" />
    <package id="virtualbox" />
    <package id="vagrant" />
    <package id="ruby" />
</packages>
```

```ps1
> cinst packages.config
```

## Macの方はこちら
[環境構築 - Macに開発環境を構築する - Qiita](http://qiita.com/morozumi_h/items/d0967f5861154b92c26c)

```Bundle-vagrant
# Makesure using Homebrew
update
#Update already-installed formula
upgrade
# Add Repository
tap caskroom/cask || true
tap homebrew/binary || true
# Packages for development
install brew-cask
install git
# .dmg from brew-cask
cask install virtualbox || true
cask install vagrant || true
# Remove outdated versions
cleanup
```

```shell-session
$ brew bundle Bundle-vagrant
```

# GitLabインストール

## Box作成

今回は、CentOS6.5上に構築します。

```
$ vagrant box add gitlab https://github.com/2creatives/vagrant-centos/releases/download/v6.5.3/centos65-x86_64-20140116.box
$ vagrant init gitlab
```

※Windows環境だと、Gitbashから実行するのが良いかと思います。

Vagrantファイルを修正し、ホストからアクセスできるように設定します。

```Vagrantfile
23 # config.vm.network "forwarded_port", guest: 80, host: 8080
	↓ ※コメントを外す
23  config.vm.network "forwarded_port", guest: 80, host: 8080
```

Vagrantから仮想マシンを立ち上げます

```
$ vagrant up
$ vagrant ssh
```

## GitLab Download
[GitLab | Downloads](https://about.gitlab.com/downloads/)
このページからダウンロードを行います。
今回はプルダウンから「CentOS」を選びます。

![gitlab.png](https://qiita-image-store.s3.amazonaws.com/0/18582/8cc86ae6-f101-6cd8-61f5-0dc426e058e1.png)

このページに従って作業を行えば、さっくり環境を構築することができます。

## Download the package and install everything

```shell-session
$ sudo yum install wget
$ wget https://downloads-packages.s3.amazonaws.com/centos-6.5/gitlab-7.0.0_omnibus-1.el6.x86_64.rpm
$ sudo yum install openssh-server
$ sudo yum install postfix # Select 'Internet Site', using sendmail or exim is also OK
$ sudo rpm -i gitlab-7.0.0_omnibus-1.el6.x86_64.rpm
```

※今回使ったBoxはwgetが無かったため、別途インストールしました。

## Edit the configuration file to add your hostname

```shell-session
$ sudo vi /etc/gitlab/gitlab.rb
```

```rb:/etc/gitlab/gitlab.rb
# Change the external_url to the address your users will type in their browser
external_url 'http://localhost'
```

※サイトでは edit でしたが、私はviで修正しました。

## Install and start GitLab

```shell-session
$ sudo gitlab-ctl reconfigure
$ sudo lokkit -s http -s ssh
$ sudo gitlab-ctl start
```

## アクセスします 
http://localhost:8080/
Username: root 
Password: 5iveL!fe

# まとめ
簡単にGitLab環境の構築ができました。
メールの設定やSSLの設定などは行っていないため、まだ使える環境では無いかと思います。
今後は、メールの設定、SSLの設定を行っていこうかと思います。
また、最近ではDockerを使って構築することもできるようなので試してみます。
NSURLSessionで任意のProxyを使う

## はじめに

OS X MavericksとiOS7で、NSURLSessionが追加されました。
NSURLSessionを使った通信では、何も指定しなければ、従来のNSURLConnectionと同様、システムで設定されているプロキシを使って通信することになります。
ところが、NSURLSessionはNSURLConnectionとは違い、任意のプロキシを使う方法があります。
ここでは、NSURLSessionでシステムの設定に関係なく任意のプロキシを使ったり、あるいはプロキシを使わないようにしたりする方法を見ていきます。

ちなみに、NSURLSessionは機能が豊富ですが、今回の件であまり関係のない部分はかなり省略します。

## NSURLSessionConfiguration

NSURLSessionを使用する際には、NSURLSessionConfigurationオブジェクトを作って渡してやる必要があります。
HTTP通信に最低限必要なコードは次のようになると思います。

```objc:基本的な通信の例
NSURL *url = [NSURL URLWithString:@"http://example.com/"];
        
NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration];
        
NSURLSession *session = [NSURLSession sessionWithConfiguration:config];
NSURLSessionDataTask *dataTask = [session dataTaskWithURL:url completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
    /* dataを使った処理 */
}];
[dataTask resume];
```

実はこのNSURLSessionConfigurationに、プロキシを設定するためのプロパティがあります。それが`connectionProxyDictionary`です。詳しく見ていきましょう。

## プロキシを指定するには

プロキシに関する値を設定したNSDictionaryオブジェクトを、NSURLSessionConfigurationのconnectionProxyDictionaryプロパティに設定します。
プロキシが localhost:8080 にあると仮定して、このプロキシを通して通信したいときは、次のようなコードを上記のサンプルコードのconfigを作成した後に追加します。（各自の環境にあわせて読み替えてください。）

```objc
config.connectionProxyDictionary = @{(NSString *)kCFStreamPropertyHTTPProxyHost: @"localhost",
                                     (NSString *)kCFStreamPropertyHTTPProxyPort: @8080,
                                     (NSString *)kCFNetworkProxiesHTTPEnable: @YES};
```

`kCFStreamPropertyHTTPProxyHost`でHTTPプロキシのホストを、`kCFStreamPropertyHTTPProxyPort`でHTTPプロキシのポートを、`kCFNetworkProxiesHTTPEnable`でHTTPプロキシを使うかどうかを指定しています。

## プロキシを使わないように指定するには

逆に、システムに設定されているプロキシに関係なく、プロキシを使わずに通信したいときは、`kCFNetworkProxiesHTTPEnable`の値を`NO`にします。

```objc
config.connectionProxyDictionary = @{(NSString *)kCFNetworkProxiesHTTPEnable: @NO};
```

## もっと詳しく

リファレンスを引くと、 **[CFProxySupport Reference](https://developer.apple.com/library/mac/documentation/CoreFoundation/Reference/CFProxySupport/Reference/reference.html)** というページがあります。このページの **Global Proxy Settings Constants** に設定ディクショナリのキー値の一覧があるので、詳しくはこちらをご覧ください。HTTP以外にもプロキシの設定項目があります。PACファイルを使ったプロキシの自動設定にも対応しているようです。
ちなみに、定義されているキー値の型が`CFStringRef`になっているので、上記の例では`NSString *`にキャストしています。
VagrantFile設定あれこれ（随時更新）

#概要
VagrantFileの設定項目を、思いついたら更新していきます。

#前提
下記設定項目をVagrantFileに書いたら、`vagrant reload`で
再起動すること。

#設定項目
##メモリ使用量を変更
単位はMB（メガバイト）

``` VagrantFile.
  config.vm.provider :virtualbox do |vb|
    vb.customize ["modifyvm", :id, "--memory", "1024"]
  end
```

##パーミッションを変更
`/vagrant`内では`chmod`が効かないので、VagrantFileで設定します。

``` VagrantFile.
  config.vm.synced_folder "src", "/vagrant/src",
    mount_options: ['dmode=777','fmode=700']
```
上記の設定で、`/vagrant/src`配下の
ディレクトリのパーミッションが **0777**
ファイルのパーミッションが **0700**
になる
###参考
http://bulblub.com/2013/10/24/setup_vagrant_synced-folders/
Railsインストールのバッドノウハウ

## プラットフォームがWindowsであってはいけない。特に、sqlite3を使ってる場合はそうである。

自分は新人の時にセットアップで３日とか費やしたほうで、その影響でインフラエンジニアになった類だからセットアップ好きには止めないが、公序良俗に富む清純（？）なアプリ作りたいヤーな方には絶対お勧めしない。

というのは、 **「テストを勉強したいからRSpecの勉強がしたくて[Everyday Rails - RSpecによるRailsテスト入門](https://leanpub.com/everydayrailsrspec-jp)を買って、さあいざやるぜbaby！」** って、秋葉原のスタバでヒャッハーしていたときに __sqlite3__のモジュールをインストールする過程で多大な労力を要しているからである。

詳細なノウハウは[こちら](http://superable.wordpress.com/2013/08/11/ruby-2-0-0-rails-4-0-sqlite3-windows/)を参照しながらやっているが、MinGWを使ってgccを入れる必要があり、適当にパッケージを選んでいて「まさかc++は必要ないだろ」と浅薄な思い込みを披露したらまさかのhave toである。

新入社員教育の時分なら、まだ「良い勉強になったね」で済むかもしれないが、正直インフラ５年以上やってきていまさらwindows on gcc っていうのもバカ過ぎる話だ。なにやってんだか。

というわけで、賢明な諸氏はRailsのセットアップは是非[パーフェクト Ruby on Rails](http://www.amazon.co.jp/%E3%83%91%E3%83%BC%E3%83%95%E3%82%A7%E3%82%AF%E3%83%88-Ruby-Rails-%E3%81%99%E3%81%8C%E3%82%8F%E3%82%89-%E3%81%BE%E3%81%95%E3%81%AE%E3%82%8A/dp/4774165166)を参照してみて欲しいと願う（別に宣伝ではありません。）

### やっぱり、Windowsは茨の道なんだと最近つとに思う。
Macでもlessでlzoファイルをみたいよ

CentOSとかではlzoファイルでもlessで見れるんだよなぁ…
お！brewでも強力なパッケージlesspipeはインストールできる`brew install lesspipe`
しかしbz2は開けるもののlzoは…

ということで自作します


/usr/loca/bin/lzopipe.sh

```bash
LESSPIPE_SH=/usr/local/bin/lesspipe.sh #インストールした場所に合わせてくdさい
if [[ $1 =~ .*.lzo$ ]];then
  lzop -dc $1|cat
else
  $LESSPIPE_SH $1
fi
```
これを置いた後に

```bash
sudo chmod 755 /usr/local/bin/lzopipe.sh
export LESSOPEN='|/usr/local/bin/lzopipe.sh %s'
```
してください

[1]別にlesspipeをインストールしたくない人はLESSPIPE_SH=catとすればいいです
[2]lesspipeに.lzoをわたすとバイナリファイルとしてかいしゃくされるので，lzoの時は通しません
ssh公開鍵認証を実装する

#概要

サーバAからサーバBにssh接続を行うため、
秘密鍵、公開鍵を生成する

#実装
##鍵の生成

 **サーバA** で以下実行

```
$ ssh-keygen -t rsa
```

`Enter file in which to save the key`と聞かれるので、
鍵の名前（今回は`id_rsa`）を入力します。

次に`Enter passphrase (empty for no passphrase):`と、
パスフレーズを聞かれるので入力します。
空にするとパスフレーズ無しで生成できます。

すると、カレントディレクトリに以下の2ファイルが生成されます。

* id_rsa （秘密鍵）
* id_rsa.pub （公開鍵）

##公開鍵の配置

まずは公開鍵を配置します。
FTPソフト等で **サーバB** に接続し、 **id_rsa.pub** を転送します。

※id_rsa.pubをサーバBに転送したら、サーバAからは削除してしまって構いません。

その後、 **id_rsa.pub** をサーバBの/.ssh配下に設置

``` bash
$ mv id_rsa.pub ~/.ssh # ファイルの配置
$ cd ~/.ssh # 移動しておく
```

配置したら、.sshディレクトリ配下にある **authorized_keys** ファイルに統合

``` bash
# .ssh配下にauthorized_keysが既にある場合
$ cat id_rsa.pub >> authorized_keys
$ rm id_rsa.pub
```
``` bash
# .ssh配下にauthorized_keysがない場合
$ mv id_rsa.pub authorized_keys
```

**authorized_keys** ファイルのパーミッションは **0600** に変更

``` bash
$ chmod 600 authorized_keys
```

##秘密鍵の配置

秘密鍵を配置します。
 **id_rsa** は **サーバA** のどこに置いても構いませんが、
セキュリティ上、パーミッションを **0600** にする必要があります。

``` bash
$ chmod 600 id_rsa
```

#疎通確認
sshコマンドで疎通確認を行います。
 **サーバA** で以下を実行

``` bash
$ ssh -l [ユーザ名] -i [秘密鍵のパス] [サーバBのホスト名]
```

パスフレーズは設定したものを入力してください。
無事にSSH接続ができれば完了です。

#参考
http://e-days.info/2011/05/ssh-keygen/
Swift + Cocoa Bindingで気をつけること


ObjCでCocoa Bindingを使っているサンプルをSwiftで書き直して実行するとこんなエラーがでました。

`Cannot find object class with name ParsonModel`

どうやらコントローラにバインドしたモデルクラスが見つからないようです。


### 原因
Swiftではシンボル名がマングルされるので、クラス名だけでは名前を特定できない。

### 対策
モジュール名.クラス名 というように指定する必要があります。

### 例
こちらのサンプルをSwiftで書き換えていきます。
[Quick Start for Collection View - Mac Developer Library](https://developer.apple.com/library/mac/documentation/cocoa/Conceptual/CollectionViews/Introduction/Introduction.html)

ほとんど何も考えないで書き換えられますが、
Make the Array Controller and the Array でクラス名を指定する時だけ
"モジュール名.PersonModel" とする必要があります。

またはクラスに(@objc)を付けておけば クラス名 だけでよくなります。

```swift
@objc(PersonModel)
class PersonModel : NSObject {
...
}
```

### 参考
[Swift – “Cannot find object class with name” - stackoverflow](http://stackoverflow.com/questions/24215355/swift-cannot-find-object-class-with-name)
TestFlightで新たにテストユーザーとデバイスを追加する手順

自分向けへのメモ

既にTestFlightに登録済みのAppに対して、新規テストユーザーとデバイスを追加する手順。

1. TestFlightにてInvite Peopleで、テストユーザーのEmailを登録する。
2. テストユーザーにTestFlightの登録手続きを行ってもらう。
3. テストユーザーが登録完了すると、デバイスのUUIDの記載されたEmailが送信されるので、iOSDevにて、DevicesにそのUUIDを追加する。
4. 対象のAdhocのProvisioning ProfilesのEditを選択して、該当するDeviceを有効にする。
5. 対象のmac内にあるProvisioning Profilesファイルを削除する。（そうしないと重複してしまうため）
6. 更新したProvisioning Profilesをダウンロードする。
7. TestFlightの対象アプリのProvisioning Profileをアップデートする。

以上
Julia + PyQtGraph でグラフを描画する(1)

[『プログラミング言語 Julia でグラフを描画する』](http://qiita.com/akmiyoshi/items/a2aca5369c8e3c11ae59) でとりあえずサンプルを動かすことに成功したが、自分の(Julia言語の)プログラムで作ったデータを使ってグラフを描画するにはどうしたら良いかを調べることにした。
単純な関数のグラフとアローアニメーションのサンプルを作ってみた。例によって、Julia で求めた計算結果を PyQtGraph でグラフ表示するようになっている。(環境を作って是非動かしてみてください)

* ArrowSample.jl (Julia のソースコード)は、Python のソース内の graph_run() という関数に配列を渡す。グラフの描画は Python にお任せ。$ y=x^2 $ と $ y=2x+50 $ の $ y $ を $ -10≦x≦10 $ の範囲で計算する($ x $ は 0.1 刻み)。
* ArrowSample.py (Python のソースコード)では、Julia から渡された配列を基に折れ線グラフを描画する。
* PyCall を用いて Python のコードを呼び出す際には、C:\julia-0.2.1-win32\bin がロードパスに含まれるので、ArrowSample.jl および ArrowSample.py の両方共を C:\julia-0.2.1-win32\bin 配下に保存しておくこと。
* ソースコードを保存する際には文字エンコーディングは utf-8 にしておくこと。
* サンプルを起動するには、ArrowSample.jl (Julia のソースコード) をエクスプローラーからダブルクリックします。

> 注記：環境構築については、[『プログラミング言語 Julia でグラフを描画する』](http://qiita.com/akmiyoshi/items/a2aca5369c8e3c11ae59) を参照してください。

![arrow.gif](https://qiita-image-store.s3.amazonaws.com/0/32879/1c40e709-174b-5b3d-44de-33199678ba79.gif)

```jl:ArrowSample.jl(C:\julia-0.2.1-win32\binに保存すること)
# -*- coding: utf-8 -*-

using PyCall

@pyimport ArrowSample
x  = [ -10 : 0.1 : 10 ]
y1 = [ x[i]*x[i] for i=1:length(x) ]
y2 = [ x[i]*2+50 for i=1:length(x) ]
ArrowSample.graph_run(x, y1, y2)
```

```python:ArrowSample.py(C:\julia-0.2.1-win32\binに保存すること)
# -*- coding: utf-8 -*-

from pyqtgraph.Qt import QtGui, QtCore
import pyqtgraph as pg

def graph_run(plot_data_x, plot_data_y1, plot_data_y2):

	app = QtGui.QApplication([])

	win = pg.GraphicsWindow(title=u"Julia+PyQtGraph サンプル")
	win.resize(400,300)

	# Enable antialiasing for prettier plots
	pg.setConfigOptions(antialias=True)

	p1 = win.addPlot(title=u"アロー アニメーション")
	c1 = p1.plot(x=plot_data_x, y=plot_data_y1)
	c2 = p1.plot(x=plot_data_x, y=plot_data_y2)
	p1.showGrid(x=True, y=True)
	
	a1 = pg.CurveArrow(c1)
	p1.addItem(a1)
	anim1 = a1.makeAnimation(loop=-1)
	anim1.start()
	
	a2 = pg.CurveArrow(c2)
	p1.addItem(a2)
	anim2 = a2.makeAnimation(loop=-1)
	anim2.start()

	app.exec_()
```
PHPのswitchで厳密な型比較

phpのswitchでは緩やかな比較が行われる

```php
switch ($hoge) {
	case 1:
		//$hogeが1の場合でも"1"の場合でも実行される
		break;
	case '1':
		//ここには到達しない
		break;
}
```

この仕様がバグの元になることがある

厳密に比較するには、caseで比較する必要がある

```php
switch (true) {
	case $hoge === 1:
		//$hogeが数値の場合のみ実行される
		break;
	case $hoge === '1':
		//$hogeが文字列の場合のみ実行される
		break;
}
```
send_dataでの日本語ファイル名文字化け対策(IE11対応)

IEではダウンロードファイル名にUTFを使うと文字化けするため、
以下のようにURLエンコードを行うかSJISに変換します。

```ruby:xxx_controller
  file_name = '日本語.csv'
  p file_name.encoding     # ⇒ #<Encoding:UTF-8>
  file_name = ERB::Util.url_encode(file_name)
  p file_name.encoding     # ⇒ #<Encoding:ASCII-8BIT>

  send_data 'a,b,c',       # send_fileも同様
            filename: file_name,
            type: 'text/csv'
```

FireFoxなどIE以外のブラウザではURLエンコードしたUTFやSJISは文字化けする場合があるので、
IE以外はエンコードさせないようにします。

```ruby:xxx_controller
  file_name = '日本語.csv'
  file_name = ERB::Util.url_encode(file_name) if msie?
...
def msie?
  (/MSIE/ =~ request.user_agent) || (/Trident/ =~ request.user_agent)
end
```

ユーザーエージェントに「MSIE」または「Trident」という文字列が存在すれば、IEと判断します。
IE11ではユーザーエージェントから「MSIE」が削除されたので「Trident」と文字列を見て判断するようにしています。

# 参考
http://anond.hatelabo.jp/20130219210226
http://furoshiki.hatenadiary.jp/entry/2013/11/11/224605
Titanium で View が端末に表示されたときになにか処理を行う方法


View が表示されてから実施したい処理がありました．
（例えば，該当Viewの高さの値を使った処理などは，表示されてからじゃないと処理できないですね！）

## postlayout イベントに処理を愚直に書いたら大変なことになった

postlayout という名前と，ドキュメントの1行目だけ読んでなんとなくいけそーだなーと思って，alertでも仕込んでみたら大変なことになりました．（Nexus5 が再起動しました）

postlayout についてのドキュメントの記載は...

```
Fired when a layout cycle is finished.

This event is fired when the view and its ancestors have been laid out. The rect and size values should be usable when this event is fired.

This event is typically triggered by either changing layout properties or by changing the orientation of the device. Note that changing the layout of child views or ancestors can also trigger a relayout of this view. On Mobile Web, this event can also be triggered by resizing the browser window.

Note that altering any properties that affect layout from the postlayout callback may result in an endless loop.
```

よく読むと見た目が変わるたびに起動するようでかなり呼ばれるんですね．実質的無限ループです．


## ちょっと工夫して解決

一度呼ばれたらイベントリスナーの処理を消せばいい！

```
$.hogehoge.addEventListener('postlayout', function(){
	// なにかの処理

	// postlayout のリスナーを全部消す
	$.hogehoge.removeEventListener('postlayout', arguments.callee);
});

```

これでなんとかやれそうでした．

## 参考文献

http://docs.appcelerator.com/titanium/latest/#!/api/Titanium.UI.View