OmniAICreator/Qiita-1.07M huggingface dataset:
Hamlのサンプル（フォーム）


```index.haml
!!!
%html
    %body
        %form{:action => "/", :method => "post"}
            Title:
            %input{:name => "title", :size => "40"}
            %br
            URL:
            %input{:name => "url", :size => "80", :value => "http://"}
            %br
            %input{:type => "submit", :value => "send"}
        - @bookmarks.each do |bookmark|
            %div
                %a{:href => bookmark['url']}= h bookmark['title']
            - unless bookmark['title'] == ''
                %hr
        %div#record 登録数#{@now_rec}
        %div#page #{@paging}
MechanizeでTLSv1を使用して暗号化通信するサーバー上のページにアクセスできない問題の対処法

# 問題の概要
MechanizeでTLSv1を使用して暗号化通信するサーバー上のページにアクセスしようとすると、接続が切断されます。

## 再現コード
```ruby:ng.rb
require 'rubygems'
require 'mechanize'

agent = Mechanize.new
agent.verify_mode = OpenSSL::SSL::VERIFY_NONE # 証明書の検証をしない（通常はこの行は不要）
agent.get('https://www.hikari.ntt-east.net/AGT_Main.htm') # => Connection reset by peer
```

## 出力
```
$ ruby1.9.3 ng.rb
/var/lib/gems/1.9.1/gems/net-http-persistent-2.8/lib/net/http/persistent/ssl_reuse.rb:70:in `connect': Connection reset by peer - SSL_connect (Errno::ECONNRESET)
        from /var/lib/gems/1.9.1/gems/net-http-persistent-2.8/lib/net/http/persistent/ssl_reuse.rb:70:in `block in connect'
        from /usr/lib/ruby/1.9.1/timeout.rb:54:in `timeout'
        from /usr/lib/ruby/1.9.1/timeout.rb:99:in `timeout'
        from /var/lib/gems/1.9.1/gems/net-http-persistent-2.8/lib/net/http/persistent/ssl_reuse.rb:70:in `connect'
        from /usr/lib/ruby/1.9.1/net/http.rb:755:in `do_start'
        from /usr/lib/ruby/1.9.1/net/http.rb:750:in `start'
        from /var/lib/gems/1.9.1/gems/net-http-persistent-2.8/lib/net/http/persistent.rb:628:in `start'
        from /var/lib/gems/1.9.1/gems/net-http-persistent-2.8/lib/net/http/persistent.rb:570:in `connection_for'
        from /var/lib/gems/1.9.1/gems/net-http-persistent-2.8/lib/net/http/persistent.rb:926:in `request'
        from /var/lib/gems/1.9.1/gems/mechanize-2.5.1/lib/mechanize/http/agent.rb:258:in `fetch'
        from /var/lib/gems/1.9.1/gems/mechanize-2.5.1/lib/mechanize.rb:407:in `get'
        from ng.rb:6:in `<main>'
```

# 解決方法
Mechanize#ssl_version= で 'TLSv1' を指定する

## 解決コード
```ruby:ok.rb
require 'rubygems'
require 'mechanize'

agent = Mechanize.new
agent.verify_mode = OpenSSL::SSL::VERIFY_NONE # 証明書の検証をしない（通常はこの行は不要）
agent.ssl_version = 'TLSv1'
agent.get('https://www.hikari.ntt-east.net/AGT_Main.htm') # => Success
```
MySQL5.6のsysbench検証


## MySQL5.6の性能があまりよくないらしい
[Is MySQL 5.6 slower than MySQL 5.5 ?](http://www.mysqlperformanceblog.com/2013/02/18/is-mysql-5-6-slower-than-mysql-5-5/ "aaa")の記事では単純なsysbenchでは性能が落ちるようなので、確認する。

## sysbenchのインストール
````
wget http://sourceforge.net/projects/sysbench/files/latest/download
tar zxvf sysbench-0.4.12.tar.gz 
cd sysbench-0.4.12
libtoolize --force --copy
aclocal
autoconf
touch NEWS
touch AUTHORS
automake
./configure
make
make install
````

## MySQLのインストール
````
wget http://dev.mysql.com/get/Downloads/MySQL-5.6/MySQL-client-5.6.10-1.linux_glibc2.5.x86_64.rpm/from/http://cdn.mysql.com/
wget http://dev.mysql.com/get/Downloads/MySQL-5.6/MySQL-server-5.6.10-1.linux_glibc2.5.x86_64.rpm/from/http://cdn.mysql.com/
wget http://dev.mysql.com/get/Downloads/MySQL-5.6/MySQL-shared-5.6.10-1.linux_glibc2.5.x86_64.rpm/from/http://cdn.mysql.com/
wget http://dev.mysql.com/get/Downloads/MySQL-5.6/MySQL-devel-5.6.10-1.linux_glibc2.5.x86_64.rpm/from/http://cdn.mysql.com/
wget http://dev.mysql.com/get/Downloads/MySQL-5.6/MySQL-shared-compat-5.6.10-1.linux_glibc2.5.x86_64.rpm/from/http://cdn.mysql.com/
rpm -ivh /usr/local/src/MySQL*5.6.10*.rpm
````
MySQL-sharedがないとsysbenchが動かないので入れておく
インストールについては省略

## データ作成
````
mysql>create database sbtest;
mysql>GRANT ALL ON *.* TO benchuser@"localhost" IDENTIFIED BY "benchuser";
#/usr/local/bin/sysbench --test=oltp --mysql-table-engine=innodb --oltp-table-size=1000000 --mysql-user=benchuser --mysql-password=benchuser prepare
````

## 負荷テスト実行
````
/usr/local/bin/sysbench  --test=oltp  --oltp-table-size=1000000 --num-threads=1 --max-requests=200000 --max-time=0 --oltp-test-mode=complex --mysql-user=benchuser --mysql-password=benchuser run
/usr/local/bin/sysbench  --test=oltp  --oltp-table-size=1000000 --num-threads=4 --max-requests=200000 --max-time=0 --oltp-test-mode=complex --mysql-user=benchuser --mysql-password=benchuser run
/usr/local/bin/sysbench  --test=oltp  --oltp-table-size=1000000 --num-threads=64 --max-requests=200000 --max-time=0 --oltp-test-mode=complex --mysql-user=benchuser --mysql-password=benchuser run
````
##結果

| 同時接続数 | MySQL5.6(tps) | MySQL5.5(tps) |
|:-----------|------------:|:------------:|
|64|2729|2980|
|4|938|1099|
|1|292|341|
Xcodeでビルド番号に日付をくっつける方法

ビルド番号が欲しくなしました。

参考URL:[Xcode 4でビルド番号を自動的に増やす方法](http://www.awaresoft.jp/ios-dev/item/113-xcode-increment-build-num.html)

インクリメントではなく日付にしたかったのでとCFBundleShortVersionStringの後ろに日付を付けたかったので、スクリプトを修正

```
builShortdNumber=$(/usr/libexec/PlistBuddy -c "Print CFBundleShortVersionString" "$INFOPLIST_FILE")
datetime=$(date +%Y%m%d%H%M)
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $builShortdNumber.$datetime" "$INFOPLIST_FILE"
```
三項演算子は可読性を落とすか


しばしば三項演算子やdo-while構文が禁止されているコーディング規約に遭遇する。それは今すぐ撤廃すべきという論理武装を考えてみよう。事例はPHPだが、このことはすべての言語にいえる。

### 例

あるサービスから何らかのデータを取り出し、それをクライアント側で使うという手続きを考える。

```php
<?php
$client->useSomeData($service->getSomeData());
```

ここで、サービス側のAPIとクライアント側のAPIに仕様ギャップがあったとしよう。`$service` は古く、うまく行かなかったとき例外ではなく `null` 的なもの(PHPではもしかすると`false`かもしれない)を返す習慣で作られていた。いっぽう `$client` は `null` を入力される想定がない。何もしないで欲しいときは空の `array` を入力する仕様だった。

以下の実装例を見てほしい。

```php
<?php
$data = $service->getSomeData();
if ($data === null || $data === false) {
    $data = array();
}

$client->useSomeData($data);
```

このコードがまずいのは、ひとつの変数を構築するプロセスが3行に分かれている点だ。ここに手続きプログラミングゆえの記述の曖昧さが入る余地がある。後のメンテナが `$data2` も同時に取り扱いたい場合、どう書き足すだろうか。

```diff
<?php
$data = $service->getSomeData();
if ($data === null || $data === false) {
     $data = array();
}
+ $data2 = $service->getSomeData2();
+ if ($data2 === null || $data2 === false) {
+     $data2 = array();
+ }

$client->useSomeData($data);
+ $client->useSomeData($data2);
```

```diff
<?php
$data = $service->getSomeData();
+ $data2 = $service->getSomeData2();
+ 
if ($data === null || $data === false) {
     $data = array();
}
+ if ($data2 === null || $data2 === false) {
+     $data2 = array();
+ }

$client->useSomeData($data);
+ $client->useSomeData($data2);
```

前者は取り出しと妥当化をワンセットと認識して書いたもの、後者は、取り出しは取り出し、その後妥当化手続きをすると認識して書いたもの。どちらも間違いとは言えない。意図を知らずにこのソースコードのあるがままを読んだのだと仮定すれば…

(そして、コードの意図を共有しきれないのもまた、保守フェーズの宿命だ)

当初の目的の意味は、レガシーなサービスが提供するデータ形式はこのシステムでは受け入れられないということだ。とすると、前者はまだいいが、後者では `$data` 変数の値を決定するブロックが分断されている。ここに「文脈を共有しうる手続きが走っている間、妥当化されていない変数が存在する」状態を許しているという問題がある。

では三項演算子に登場してもらおう。三項演算子は手続きを式にすることができる。そして式は文に入れ込むことができる。

```php
<?php
$d = $service->getSomeData();
$data = ($d !== null || $d !== false) ? $d : array();

$client->useSomeData($data);
```

こう書くことで、`$data` は条件付きで変化する状態変数ではなく、必ず再定義されるイミュータブルな変数(とみなして扱うことが可能)であることが、機械的に保証できた。このほうが関数型言語でいう変数(Scalaのval)に近い。

後者の保守プログラマーがなぜそれを定義と手続きとに分けて意識してしまうのか。それは if 文によって `$data=` と `$data2=` が不揃いになるせいで、変数の定義に見えなくなるせいだ。定義に見えない変数代入は手続きフェーズに移動させるという癖は、C言語経験があるベテランプログラマーほど強くなる。

もう少しPHPらしく。厳密さは型アノテーションとPHPUnitに任せよう。

```php
<?php
$d = $service->getSomeData();
$data = !empty($d) ? $d : array();

$client->useSomeData($data);
```

PHPの `empty` は変数に対してしか使えないので、PHP5.2までは `$d` を消すことができなかった。が、さらにここで、PHP5.3で登場したエルビス演算子で置き換えるとどうなるか。

```php
<?php
$data = $service->getSomeData() ?: array();

$client->useSomeData($data);
```

あらゆる変数から、一時的にですら `null` である可能性を完全に排除できた。何より素晴らしいのは、変数の値を決定するのが「1行」になったことだ。変数の妥当化までに他の手続きが介入する余地がいっさいない。

またこうなると、文による記述の制約から開放されるので、機械的なリファクタリングで以下のコードと相互変換できるようになる。

```php
<?php
$client->useSomeData(
    $service->getSomeData() ?: array()
);
```

これを `null` を意識しなかった修正前のコードと比べてみるといい。式は値と相互に置き換えられることがポイントだ。

三項演算子はif文と全く等価ではない。それが「式であること」が重要なのだ。

- ミュータビリティを式の中に封印できる
- 変数がイミュータブルになる
- 文は一時変数を欲しがる
- 文は行を消費する
- 複数の行があるところにはコード挿入の余地がある
- 後任の保守プログラマーは何を考えているかわからない

動くだけのコードから、動かなくなる余地のないコードへ、そして、プログラマーの心理学へというのを考えてみた。

三項演算子が無条件に可読性を上げるか下げるかではなく、可読性はプログラマーの心理の中にあり、適切に使うか使わないかを決める能力と権限が必要だという考え方になろう。

特定のイデオムを禁止したせいで、後々本当に読めないコードに変化することのほうが、ちょっとした言い回しを知らない人にマニュアルを参照してもらうより、生産性へのダメージが大きいのは明白だ。
Hash#keysの順番は保証されるのか？

**結論** : 1.9からは保証される

[Hash(1.8.7)](http://miyamae.github.com/rubydoc-ja/1.8.7/#!/class/-hash.html) 

> ハッシュに含まれる要素の順序は保持されません。 列挙する順序は不定です。 

[Hash(1.9.3)](http://miyamae.github.com/rubydoc-ja/1.9.3/#!/class/-hash.html) 

>ハッシュに含まれる要素の順序が保持されるようになりました。 ハッシュにキーが追加された順序で列挙します。 


```hash.rb
v = {a:1, b:2, c:3, d:4}

p v.keys   # => [:a, :b, :c, :d]
p v.values # => [1, 2, 3, 4]
```
VBScriptにおけるMail処理

**VBScriptでMailのテンプレートを保存したExcelを読み込んで、OutLookMailを作成**

```vbnet
Option Explicit

Dim oExcel
Dim strTo
Dim strCc
Dim strSubject
Dim strBody
Dim strEvrionment
Dim strWorkName
Dim strUserName
Dim strUserFirstName
Dim strFolderPath
Dim strMailAddress
Dim strYYMM
Dim strYoubi
Dim strTime
Dim message
Dim oOutlook
Dim oMail
 
'************************************************************************
'Excelを開く
'************************************************************************
On Error Resume Next
Set oExcel = CreateObject("Excel.Application")
oExcel.Visible = false
 
oExcel.WorkBooks.Open(Replace(WScript.ScriptFullName,WScript.ScriptName,"") _
                      & "\MailTempLate.xls")
 
If Err.number <> 0 Then
 oExcel.Quit
 MsgBox "Excelを正常に開けませんでした。"
 WScript.Quit
End If
 
'************************************************************************
'メールを編集する
'************************************************************************
strEvrionment = "検証環境"
strWorkName = "ファイル移行"
strUserFirstName = "名字"
strUserName = "名字　太郎"
strMailAddress = "taro@gmail.co.jp"
strYYMM = Month(Now )& "/" & Day(Now)
StrYoubi = GetYoubi()
 
message = "移行対象指示書のサーバー上の保存パスを設定してください。"
strFolderPath = InputBox(message, "移行指示書FullPath指定")
WScript.Echo "入力された内容⇒" & strFolderPath
 
message = "作業開始時間をHH:MM形式で入力してください。"
StrTime = InputBox(message, "作業開始時間　HH:MM")
WScript.Echo "入力された内容⇒" & StrTime
 
strTo = oExcel.WorkSheets(1).Range("MAIL_TO")
strCc = oExcel.WorkSheets(1).Range("MAIL_CC")
 
strSubject = oExcel.WorkSheets(1).Range("MAIL_SUBJECT")
strSubject = Replace(strSubject,"@@@環境@@@",strEvrionment)
strSubject = Replace(strSubject,"@@@作業内容@@@",strWorkName)
 
strBody = oExcel.WorkSheets(1).Range("MAIL_BODY")
strBody = Replace(strBody,"@@@苗字@@@",strUserFirstName)
strBody = Replace(strBody,"@@@環境@@@",strEvrionment)
strBody = Replace(strBody,"@@@作業内容@@@",strWorkName)
strBody = Replace(strBody,"@@@依頼書保存フォルダ@@@",strFolderPath & vbCrLf)
strBody = Replace(strBody,"@@@氏　名@@@",strUserName)
strBody = Replace(strBody,"@@@mailaddress@@@",strMailAddress)
strBody = Replace(strBody,"@@@YY/MM@@@",strYYMM)
strBody = Replace(strBody,"@@@曜日@@@",StrYoubi)
strBody = Replace(strBody,"@@@HH:MM@@@",StrTime)
 
If err.number <> 0 Then
 oExcel.Quit
 MsgBox "Excelの読み込み中にエラーが発生しました。"
 WScript.Quit
End If
 
'************************************************************************
'Mailを作成する
'************************************************************************
Set oOutlook = CreateObject("Outlook.Application")
Set oMail = oOutlook.CreateItem(0)
 
oMail.To = strTo
oMail.Cc = strCc
oMail.Subject=strSubject
oMail.body = strBody
 
oMail.Display()
 
WScript.Quit 0
 
'************************************************************************
'現在の日付に該当する曜日を返す
'************************************************************************
Function GetYoubi()
 
 GetYoubi = WeekDay(date,2)
 
 Select Case GetYoubi
  Case 1
   GetYoubi = "月"
  Case 2
   GetYoubi = "火"
  Case 3
   GetYoubi = "水"
  Case 4
   GetYoubi = "木"
  Case 5
   GetYoubi = "金"
  Case 6
   GetYoubi = "土"
  Case 7
   GetYoubi = "日"
  Case Else
   GetYoubi = ""
 End Select
 
End Function
```
fgetcsv というものがあってだな

```php:ltsv.php
<?php

$ret = array();

$file = new SplFileObject('hoge.ltsv');
$file->setFlags(SplFileObject::READ_CSV);
$file->setCsvControl("\t");

foreach ($file as $row) {
    $keys = $values = array();

    foreach ($row as $i) {
        list($key, $value) = explode(':', $i, 2);

        $keys[]   = $key;
        $values[] = $value;
    }

    $ret[] = array_combine($keys, $values);
}

var_dump($ret);
```
CoffeeScriptのfor


なんでこういう構文にしたんだろう？
`Array`と`Object`を`for in`と`for of`で区別しなければならないのもアレだし、
csで`for in`したものが、jsで`for`になって、
csで`for of`したものが、jsで`for in`になるとか、
`value``index`と`key``value`の順番とか、
ちょっとややこい。

```CoffeeScript
for value in array
  hoge

for value, index in array
  hoge

for key of object
  hoge

for key, value of object
  hoge
```

吐き出すJavaScirptは

```javascript
var index, key, value, _i, _j, _len, _len1;

for (_i = 0, _len = array.length; _i < _len; _i++) {
  value = array[_i];
  hoge;

}

for (index = _j = 0, _len1 = array.length; _j < _len1; index = ++_j) {
  value = array[index];
  hoge;

}

for (key in object) {
  hoge;

}

for (key in object) {
  value = obj[key];
  hoge;

}
```
Mercurialでデフォルトのpush先の変更


Mercurialのリポジトリを移動したときなど、デフォルトのpush先(`paths.default`)を変更するには、リポジトリ内のファイル`.hg/hgrc`内の`paths`セクションの`default`を編集する。

```
[paths]
default = https://user@hg.example.jp/path/to/repo
```
MySQLの各テーブルに対してまとめてごにょごにょするワンライナー

#### 例：データベース名"database_name"にある全てのテーブルにtruncateするワンライナー

```
for x in `mysql -N -ppassword database_name -e "show tables;"`; do echo "truncate table ${x} ;" | mysql -N -ppassword database_name ; done
```
Rails: mongoid を利用したwhere filter

## rails で mongo を利用する為に、mongoidを利用した場合

```ruby:Gemfile
gem "mongoid"
```

```ruby:user.rb
class User 
  include Mongoid::Document
  field :user_id, :type => Integer
  field :name, :type => String
  field :email, :type => String
  field :time, :type => DateTime
end
```

######例：直近一週間にログインしたuserの情報

```ruby:xxx.rb
User.where(:logged_in_time => { '$lte' => Time.now  , '$gt' => Time.now - 7.days })
```

######例：emailがnil以外の物
```ruby:xxx.rb
 User.excludes(:email => nil)
```

######例：配列の中の値を使う

```ruby:xxx.rb
User.any_in(:user_id => ids)
```

######例：like あいまい検索 (gmailのuserを探す)

```ruby:xxx.rb
User.any_of({ :email =>/.*gmail.*/ })
```
Homebrew で mroonga 3.00 インストールの際、pkg-config に怒られたら

Homebrew で groonga をインストールしている前提のお話。

and GROONGA_LIBS to avoid the need to call pkg-config.
See the pkg-config man page for more details.

とか出てたら、GROONGA_CFLAGS と GROONGA_LIBS を指定してあげる。

```sh
GROONGA_CFLAGS="-I/usr/local/include/groonga" \
GROONGA_LIBS="-L/usr/local/lib -lgroonga" \
brew install https://raw.github.com/mroonga/homebrew/master/mroonga.rb --use-homebrew-mysql
```
JSONPで受け取れない文字? \u2028

# 半日以上かかってしまった!
JSONPで返却する文字列に\u2028が含まれているとブラウザで
扱えない模様。

任意のURLを指定するとその内容をJSONPで返していたのだが、
特定のページがなぜかエラーとなってしまい、原因に時間がかかった。

## JSON.stringifyすりゃ、デコード絶対出来るものと思い込んでいた
ちなみに、JSON.stringifyしてJSONPで返す文字列を作成していたので、
余計に時間がかかった気がする。

# どんなエラーが出るのか？

Chromeでは

```
Uncaught SyntaxError: Unexpected token ILLEGAL 
```

Firefoxでは

```
SyntaxError: unterminated string literal 
```

\u2028のほか\u2029も問題になる模様

# 2014/10/25追記

コメントでご指摘いただき、改めて分かりづらかったので、
コードでどんな事だったかを残しておきます。

```js
function callback(obj) {
    console.dir(obj);
}

function myEscape(str) {
    //return str;
    return str.replace(/\u2028/g, "\\u2028").replace(/\u2029/g, "\\u2029");
}

var cb = "callback(" + myEscape(JSON.stringify(["\u2028", "\u2029"])) + ")";
console.log(cb);

var s = document.createElement("script");
s.innerHTML = cb;
document.body.appendChild(s);

// myEscapeで\u2028,\u2029をエスケープしないと後処理でエラーになる。
// 実際のケースでは、JSONPで受けた側でコールバック実行直前でエラーとなる。
cb = "callback(" + myEscape(JSON.stringify(["b\u2028a", "d\u2029c"])) + ")";
console.log(cb);

s = document.createElement("script");
//本来はここでsrc属性にJSONP対応のWebAPIを指定する。
s.innerHTML = cb;
document.body.appendChild(s);
```

Runstantでこれを動かせるようにしておきました。

- http://goo.gl/7y4mT0

# 関連するリンク
原因が「\u2028」と分かってからは、類似の情報は容易に見つかった。

-  [Unicode Newline Guidelines](http://www.unicode.org/reports/tr13/tr13-9.html)
-  [メモ: U+2028,U+2029が含まれるJSONデータをeval関数を使ってデコードするとエラーになる](http://php-tips.com/%E3%83%A1%E3%83%A2/2009/11/%E3%83%A1%E3%83%A2-u2029%E3%81%8C%E5%90%AB%E3%81%BE%E3%82%8C%E3%82%8Bjson%E3%83%87%E3%83%BC%E3%82%BF%E3%82%92eval%E9%96%A2%E6%95%B0%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%83%87%E3%82%B3%E3%83%BC)

# 関連記事

- [iPad2からのメールが文字化けする](http://abrakatabura.hatenablog.com/entry/2011/06/09/222028)
-  [#trouble #unicode #utf8 ハイフンの文字コード #windows](http://abrakatabura.hatenablog.com/entry/2012/04/23/061800)
-  [#javascript ココログの2013年1月の記事だけがNG #trouble #solved](http://abrakatabura.hatenablog.com/entry/2013/02/17/201801)
- [Mavericksのせいで俺のEmacsで斜体が豆腐表示されていると思っていた件](http://abrakatabura.hatenablog.com/entry/2014/01/07/232713)
rvmメモ


### rvm自身のアップグレード

```
rvm get head
```


### インストール可能なRubyバージョンの一覧

```
rvm list known
```

### インストール

```
rvm install 1.9.3-p327
```

### デフォルトの変更

```
rvm use 2.0.0 --default
```

### gemset の変更

'global'という名前のgemsetを使う

```
rvm gemset use global
```

## 参考

The Basics of RVM
https://rvm.io/rvm/basics
MacOS XでMercurialのSSLサーバ証明書の警告を解消する


MercurialでリモートのサーバにHTTPSでアクセスすると以下のような警告が表示される場合がある。これは、Mercurialが参照するルート証明書の設定が行われていないのが原因である。

```
warning: hg.example.jp certificate with fingerprint 41:e6:46:86:a0:a2:f3:e7:8d:35:06:be:1c:88:fb:59:61:e0:e5:12 not verified (check hostfingerprints or web.cacerts config setting)
```

## 対処方法1

ダミー証明書 `/etc/hg-dummy-cert.pem` を作成。

```
openssl req -new -x509 -extensions v3_ca -keyout /dev/null -out dummycert.pem -days 3650
sudo cp dummycert.pem /etc/hg-dummy-cert.pem
```

Mercurialがダミー証明書を参照するよう `~/.hgrc` に以下の設定を追加。

``` ~/.hgrc
[web]
cacerts = /etc/hg-dummy-cert.pem
```

## 対処方法2

RubyとHomebrewがインストールされている環境であれば、以下の手順でも良い。

ルート証明書取得。

```
brew install curl-ca-bundle
```

取得したルート証明書を `~/.hgrc` に追加。

``` ~/.hgrc
[web]
cacerts = /usr/local/Cellar/curl-ca-bundle/1.87/share/ca-bundle.crt
```

## 参考

- http://mercurial.selenic.com/wiki/CACertificates
- [
homebrew で入れた openssl を使って Ruby をコンパイルすると SSL 利用時に証明書エラーが発生する場合の対応] (http://qiita.com/items/12457815d5cee3723b97)
homebrew で入れた openssl を使って Ruby をコンパイルすると SSL 利用時に証明書エラーが発生する場合の対応


さて、皆さん割と homebrew で openssl 入れて brew link しちゃってる人も多いと思います。そんな環境でその openssl を使って Ruby をコンパイルすると、OpenSSL 利用時に証明書エラーが発生します。

```sh
$ pry
[1] pry(main)> require 'open-uri'
=> true
[2] pry(main)> open('https://www.google.com/').read
OpenSSL::SSL::SSLError: SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed
from ~/.rbenv/versions/2.0.0-rc2/lib/ruby/2.0.0/net/http.rb:917:in `connect'
```

エラーをぐぐると山ほど出てきます。ただ大抵書かれてる対応方法が

```sh
$ ruby -ropenssl -e "p OpenSSL::X509::DEFAULT_CERT_FILE"
"/usr/local/etc/openssl/cert.pem"
```

して出てくる標準証明書のパスに

```sh
$ wget -O /usr/local/etc/openssl/cert.pem http://curl.haxx.se/ca/cacert.pem
```

で対応してね、という方法でいささか気持ちが悪かったのでちょっと調べました。

## curl.haxx.se って？
cURL のサイトです。

- http://curl.haxx.se/docs/caextract.html

に詳しく書いてありますが、curl のサイト上で配布してる cacert.pem は、Mozilla で利用している証明書です。

(しかしハッシュ値も表示されて無くて https でもないので、いささかこの証明書を突っ込むの不安ですね…)

## homebrew から証明書を入れる
同等の証明書は curl-ca-bundle という formula で提供されているので、

```sh
$ brew install curl-ca-bundle
$ brew list curl-ca-bundle
/usr/local/Cellar/curl-ca-bundle/1.87/share/ca-bundle.crt
$ cp /usr/local/Cellar/curl-ca-bundle/1.87/share/ca-bundle.crt /usr/local/etc/openssl/cert.pem
```

することで、証明書を設置でき、SSL でのエラーは発生しません。
Mac(Snow Leopard) に ALMinium インストール

CentOS6上で開発してたけど、移動中にローカルで開発したくなったので。
環境は、Mac OS X 10.6.8(Snow Leopard)
mysql は事前インストール済み。(多分 homebrew で入れたと思う)
他の環境が汚れる可能性もあるので注意。

まずは、ALMinium を clone してインストールスクリプト実行

```sh
% git clone git://github.com/alminium/alminium.git
% alminium
% ./smelt
% /opt/alminium
% rails s
Could not find gem 'pg (>= 0.11.0) ruby' in the gems available on this machine.
Run `bundle install` to install missing gems.
```
と怒られたので

```sh
% bundle install --path vendor/bundle
```

ログ取り忘れたけど、Rmagick がないとかどうとかだったので [Imagemagick 追加](http://blog.ruedap.com/entry/20110320/mac_ruby_imagemagick_rmagick_install)。ついでに、_www グループに追加。(でもなんかユーザー変更したほうが楽っぽいので chown)

```sh
% brew install imagemagick
% sudo dscl . -append /Groups/_www GroupMembership suVene
% sudo chown -R suVene /opt/alminium
```

んで、

```sh
% bundle install
```

したら gem のインストールは無事終了。

```sh
% rails s -e development
=> Booting WEBrick
=> Rails 3.2.12 application starting in development on http://0.0.0.0:3000
=> Call with -d to detach
=> Ctrl-C to shutdown server
Exiting
/Users/suVene/.rvm/gems/ruby-1.9.3-p125/gems/activerecord-3.2.12/lib/active_record/connection_adapters/abstract/connection_specification.rb:47:in `resolve_hash_connection': database configuration does not specify adapter (ActiveRecord::AdapterNotSpecified)
…
```

だったので(元々 Alminium は production で動かすようになインストーラのため)、

```sh:config/database.yml
% vim config/database.yml
```

で、development 用の設定を追加。(production  をコピー)
あと mysql のユーザーも作成されてないっぽいので(mysql 最初から入ってたからかも？) mysql のユーザー作成

```
% mysql -u root -p
mysql> create database alminium;
mysql> create user alminium identified by 'alminium';
mysql> grant all privileges on alminium.* to alminium@'%' ;
mysql> quit;
% rake db:migrate RAILS_ENV=development
% % rake load_default_data RAILS_ENV=development

Select language: ar, bg, bs, ca, cs, da, de, el, en, en-GB, es, et, eu, fa, fi, fr, gl, he, hr, hu, id, it, ja, ko, lt, lv, mk, mn, nl, no, pl, pt, pt-BR, ro, ru, sk, sl, sq, sr, sr-YU, sv, th, tr, uk, vi, zh, zh-TW [en] ja
====================================
Default configuration data loaded.

Note: The rake task load_default_data has been deprecated, please use the replacement version redmine:load_default_data
rake load_default_data RAILS_ENV=development  4.89s user 0.55s system 39% cpu 13.900 total
％ 
```

これでブラウザから http://localhost:3000 でアクセスできるので、admin/admin でログイン後 admin  のパスワードを変更するなり、他のシステムユーザを作って admin を削除するなりすれば完了。

、、、とおもいきや、Alminium でインストールされるべきプラグインが全然入ってない。
なんか、Alminium 側のインストーラに不具合あったんで [pull request](https://github.com/alminium/alminium/pull/79) 送って対応(Merge済み)。

これで一応動いた。
RubyでJSON形式の結果が返ってくるURLをParseする


HTTPリクエストでJSONが返ってくるAPIを処理するとかよくあるケースだけど、意外と書き方忘れるのでメモ

```ruby
require 'net/http'
require 'uri'
require 'json'

uri = URI.parse('http://www.example.com/sample.json')
json = Net::HTTP.get(uri)
result = JSON.parse(json)
puts result
```

## RedirectとかTimeoutとかエラー処理とかちゃんとやりたい時用

```ruby	
require 'net/http'
require 'uri'
require 'json'

def get_json(location, limit = 10)
  raise ArgumentError, 'too many HTTP redirects' if limit == 0
  uri = URI.parse(location)
  begin
    response = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == 'https') do |http|
      http.open_timeout = 5
      http.read_timeout = 10
      http.get(uri.request_uri)
    end
    case response
    when Net::HTTPSuccess
      json = response.body
      JSON.parse(json)
    when Net::HTTPRedirection
      location = response['location']
      warn "redirected to #{location}"
      get_json(location, limit - 1)
    else
      puts [uri.to_s, response.value].join(" : ")
      # handle error
    end
  rescue => e
    puts [uri.to_s, e.class, e].join(" : ")
    # handle error
  end
end

puts get_json('http://www.example.com/sample.json')
```


## 公式ドキュメント
- http://ruby-doc.org/stdlib-2.0/libdoc/net/http/rdoc/Net/HTTP.html
- http://ruby-doc.org/stdlib-2.0/libdoc/uri/rdoc/URI.html
- http://ruby-doc.org/stdlib-2.0/libdoc/json/rdoc/JSON.html

## 日本語版ドキュメント
- http://doc.ruby-lang.org/ja/2.0.0/library/net=2fhttp.html
- http://doc.ruby-lang.org/ja/2.0.0/class/URI.html
- http://doc.ruby-lang.org/ja/2.0.0/class/JSON.html
botの一部の機能として天気予報(雨など)をDMで告知


`python -c "import sqlite3; db=sqlite3.connect('rain.db'); db.text_factory=str; db.execute('create table tweet(locate, now, tomorrow)'); db.execute('''insert into tweet values ('ichikawa', 'ダミー', 'ダミー')'''); db.commit(); db.close()"`

何故かワンライナーで天気予報の内容を保存するdbファイルを作成。定期稼働させつつ前回と予報内容が同じ場合は送信の必要が無さそうなので記録が必要に。。。。
データベースのファイル名がrain.db、テーブル名がtweet。そして場所、nowの天気、tomorrowの天気を記録することを想定しています。


```python:yohou.py
#!/usr/bin/env python
# -*- coding:UTF-8 -*-

import pywapi
from urllib import urlencode
#oatはウチのOAuthトークン収納の独自のものです。。。
import oat
import sqlite3

result = pywapi.get_weather_from_yahoo('JAXX0011','metric')

twit =  u"市川の現在から今夜くらいの天候は" + result['forecasts'][0]['text'] + u" 気温は最高" + result['forecasts'][0]['high'] + u"で最低が" + result['forecasts'][0]['low'] + u"くらい。" + " #fkdr "
alert = ['Rain', 'Storm', 'Thunder', 'Thunderstorm', 'Snow']
word = result['forecasts'][0]['text']
weth =  twit.encode("utf-8")
con = sqlite3.connect("rain.db")
con.text_factory=str;
log = con.cursor()
#今回は今日の天気を設定しています。帰り時間の雨など告知のために。
log.execute(u"select now from tweet")
for row in log:
    pass
#前回と違う天気でかつ警戒対象なRainなどか判定
if row[0] != weth and word in alert:
    dm = "D スクリーンネーム？ " + weth
    oat.client.request('https://api.twitter.com/1.1/statuses/update.json', 'POST', urlencode({'status':dm}))
else:
    pass

#sql文の箇所には変数名を入力で内容を保存というのが出来ないように
#なっているようです。
con.execute(u"update tweet set now=?", (weth,))
con.commit()
log.close()
con.close()
```
すべてのアプリケーションのパス一覧を取得する

Core Services の undocumented な関数 `_LSCopyAllApplicationURLs` を使うと、すべてのアプリケーションのパスを取得できる。

```objc
// ヘッダではプロトタイプ宣言されていないので自前で宣言する
void _LSCopyAllApplicationURLs(CFArrayRef *appURLs);

- (NSArray *)allApplicationURLs {
    CFArrayRef appURLs;
    _LSCopyAllApplicationURLs(&appURLs);
    return CFBridgingRelease(appURLs);
}
```

*すべての* アプリケーションとは、 `/Applications` ほかいくつかのシステム標準アプリケーションフォルダに入っているアプリケーションすべてという意味。それ以外のフォルダに入っているアプリケーションは対象にならない。

この関数はシステムにキャッシュされたパスを返すので、アプリケーションフォルダを走査するコードより高速に動作する。

参考にしたページ： [AllApplications - CocoaDev](http://cocoadev.com/wiki/AllApplications)
iOSアプリ開発でアプリデザイン経験のない人にデザインの納品物をお願いするときのリスト

このTipsはiOSアプリ開発時に納品物定義をする際のリストです。デザインをお願いする他社のデザイナさんがiOSアプリなどの経験がない場合、どのような納品形態として成果物を納めてもらうかということでよく話題になるのでその項目を残しています（同じ社内にいるメンバーの場合は適当にコミュニケーションをとることやググレカスで解決すると思いますが…）。

ですので、デザインに対する細かい指示というよりもそもそも納品物として何がいるんだっけ、どう指定しておけば面倒が増えないんだっけということを書いています。

前提としてディレクターが作ったワイヤーフレームもしくは画面遷移図があり、そのドキュメントを元に他社のデザイナさんとのやりとりがあった後に納品というフェイズがあることを想定しています。

以下がその本文

---

# 納品物定義
## 納品物
* 画面全体のデザインとしてのPSDファイル
（納品物として管理するために必要となります。ファイル名は日本語名でかまいません）

* 画面ごとのデザインが分かるJPEGファイル
（画面ごとのデザインの確認用に使用します。ファイル名は日本語名でかまいません）

* ボタンや背景画像など各パーツをPNGファイルとして出力したもの
（開発側で使用します。ファイル名ルールについては下記参照）

## 備考
* PSDファイルの互換性はPhotoshop CSで開けるファイルでお願いします。

* 画面イメージは横画面サイズを640px（iPhone4, iPhone4S, iPhone5相当）で作成をお願いします。

* 各パーツの縦横サイズはRetina相当のPNGファイルと、非Retina相当のPNGファイルを2つをお願いします

* PNGファイルの命名はRetina相当のものについては@2xをつけてください

* PNGファイルのファイル名はアルファベットすべて小文字で文字の区切りはアンダースコアでお願いします
（例:button_back@2x.png)

* Ratian素材の縦横画像サイズは必ず偶数にしてください

* ナビゲーションバーのボタン内の画像は、上下左右の余白なくお願いします。

* タブバーの画像については次のサイトを参考にして下さい http://golog.plus.vc/web/5866/

* ActivityIndictorはiOSの標準にあるので素材として必要ありません

* セル右側のアクセサリー">"等は標準のものであれば素材として必要ありません

----

このような内容をそのまま納品物定義として送っています。

# お願いする内容について

Photoshop CS以降は互換性があるために、CS以降で開けるファイルとお願いすれば良いらしいです。解像度は指定していませんがデザインするキャンバス自体の横サイズを640pxにしてデザインを作成してもらえばRetinaと同じピクセルとなるので、それぞれの素材の解像度が低いということは無い気がします。ファイル名はそのままアプリに組み込みたいので日本語などで作成してもらわず、大文字小文字の区別もしたくないのですべて小文字で作成してもらったほうが楽です。

また、PSDファイルや確認だけできればよいJPEGファイルに独自ルールのアルファベットの名前を付けられることがありますが、これは解りづらいだけです（バージョン管理するなら別かもしれませんが）。

画像のサイズについてRatinaを偶数にする理由は、もし奇数だった場合に非Ratinaのサイズが奇数の半分で小数点以下になってしまうからです。

ナビゲーションバー、ActivityIndicatorやセルなどはなるべく正しい名前を使って指示します。ググってもらえればそれがなにか分かるはずですし、わかりやすくしようと”ぐるぐるのやつ”、"上のバー"などの言葉をつかってしまったりすると逆に混乱を招いたりします。

この他にもこういう勘違いがおこるからこうしたらいいよ！などのご意見があればコメントでお願いします。追記していきます。
virtualbox(centos)でnginxインストールメモ


環境 centos6.3（ゲストOS）macosx10.8(ホストOS)

nginxというapacheよりも高速に動くサーバーがにわか?に人気らしい
名前は知っていたがapacheでいいじゃん〜という怠けから今まで入れていなかったが気が向いたので入れてみた。

* ここから先は全てrootユーザーで実行しています
* 開発環境構築の話です。本番環境などはもっと詳しいブログをみつけてください。

## 参考にしたサイト

* [nginx wiki(日本語版)](http://wiki.nginx.org/NginxJa)
* [CentOS-6へ最新版のnginxを3分でインストールする方法](http://d.hatena.ne.jp/yoshi-ken/20120205)


## repoファイルの作成（リポジトリの追加）
nginxの公式方法のほうが最新のnginx入れられるのでこっちの方法をとった。
/etc/yum.repos.d/に追加する

```shell
vim /etc/yum.repos.d/nginx.repo



[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=0
enabled=1
```

## インストール

yumでサクッと

```shell
yum install nginx
```

## サーバーの設定

なんか間違えた場合に備えてバックアップ

```shell
cp /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf.default
```

サクッと書く。apacheの設定よりシンプル
listen,server_name,locationの項目のrootを変更するだけ

```shell
vim /etc/nginx/conf.d/default.conf


listen       80;
server_name  lo.test.org; #自分で設定しているhostのアドレス自分はlo.test.orgというhostを設定しているのでそれで設定

    location / {
        root   /home/web/lo.test.org/www; #追加apacheでいうドキュメントルートのこと自分の開発環境のドキュメントルートになおして記載してください
        index  index.html index.htm;
    }

```

## hostsの設定について

知ってる人は読み飛ばしてください。
ゲストOS側（centos）のifconfigからゲストOS側のIPアドレス調べてホストOS(mac)側の/etc/hostsに記載する

```shell
ifconfig

#下記の項目(inet)がどこかにあるのでメモしておく（デフォルトだと192.168.xx.xxx）なはず
inet addr:192.168.56.101
```


ホストOS側(MAC)

```shell
vim /etc/hosts

#下記の項目を最後に記載
192.168.56.101  lo.test.org

```


## apacheが動いている場合はapacheを止める

とりあえずはシンプルに動作確認するためにapacheは止める
(/etc/nginx/conf.d/default.confの設定でport80番を使用する設定にしている為)

```shell
/etc/init.d/httpd stop
```

## テスト用のhtmlファイルを設置

いつもどおりのhello.worldを

```shell
vim /home/web/lo.test.org/www/index.html

<html>
<body>
hello.world
</body>
</html>
```

## nginxの起動

これもapacheと似た感じでほぼ一緒

```shell
/etc/init.d/nginx start
```

## 動作確認

[http://lo.test.org]()にアクセスしてhello.worldが表示されればOK


nginxでググるとシンプルな設定方法がなかったので書いてみました。
これだけだと今時のナウなこと(php-fpmやnodejs等)はまだまだなのですがまずはnginxのインストールから慣れてからナウなことをしようかということで
Lion/Mountain Lionで絵文字を入力する方法

----
再インストール後にいつも忘れてるのでメモ。

`System Preferences > Language & Text` を開きます。
`Keyboard & Character Viewer` のチェックを入れます。
![]( https://dl.dropbox.com/u/32205774/20130218_how_to_use_emoji_on_mountain_lion/001.png )

メニューバーから `Show Character Viewer` を選択します。
![]( https://dl.dropbox.com/u/32205774/20130218_how_to_use_emoji_on_mountain_lion/002.png )

文字ビューアが開くので `Emoji` を選択します。
![]( https://dl.dropbox.com/u/32205774/20130218_how_to_use_emoji_on_mountain_lion/003.png )

絵文字をダブルクリックすると入力できます。
コマンドラインやvimから言語を指定してDash.appを呼び出す

[Dash - naoyaのはてなダイアリー](http://d.hatena.ne.jp/naoya/20130218/1361171277) で MacのDash.appが便利と話題らしい

もとはスニペットマネージャらしいですが、各言語のドキュメント閲覧に使うと非常に便利らしいです。

基本的な使い方は上記URLなりで見てもらうとして、少し凝った呼び出し方法を紹介。

まずは、コマンドラインから呼び出す方法。

```
$ open dash://[word]

$ open dash://'[word1] [word2]'

$ open dash://[language]:[word]
```

スペースを空けて検索ワードを追加することで、そのワードでページ内検索ができるようです。(分かりづらいですが実際にやってみると分かるかと思います。AND検索とはちょっと違うみたいです。)

また、コマンドラインから呼び出す場合は、クォーテーションで括ることで複数ワードを指定できるようです。
ただし、言語を指定した場合は複数ワードの指定ができないみたいです…
別のやり方があるのかもしれません。

さらに、上記コマンドを利用することでvimからも呼び出すことができます。
上記URLにもある通り、すでにvimから呼び出すコードが紹介されています。

- [dash.vim](https://gist.github.com/mattn/4975267)

今回はさらにこれに、filetypeを自動で入力するようにしてみました。

```vim
function! s:dash(...)
  let ft = &filetype
  if &filetype == 'python'
    let ft = ft.'2'
  endif
  let ft = ft.':'
  let word = len(a:000) == 0 ? input('Dash search: ', ft.expand('<cword>')) : ft.join(a:000, ' ')
  call system(printf("open dash://'%s'", word))
endfunction
command! -nargs=* Dash call <SID>dash(<f-args>)
```

これで、``:Dash <word>`` 、または``:Dash<Enter>`` のあとに検索ワードを入力することで検索できます。
filetype以外の言語で検索したい場合は、``:Dash<Enter>`` の方をご利用ください。

また、言語によってはfiletypeそのままではダメな場合がありますので、適当に変更する処理を追加して下さい。
どの言語がどの名前で呼び出せるかは、設定>Docsets の2カラム目を参照して下さい。
自由に変更することもできるようです。
ドラッグ&ドロップと、ファイル選択ダイアログ両方で動くAppleScriptのひな形


```applescript
on main(myFiles)	repeat with myFile in myFiles				--ここに処理を書く		display dialog myFile as string			end repeatend mainon open dropFiles	my main(dropFiles)end openon run	set choosedFiles to choose file with multiple selections allowed
	my main(choosedFiles)end run
```
受け取ったファイルのパスをダイアログで出力しているだけです。

どこかで見つけたはずなのに検索しても見つからなくなっちゃったので記憶を頼りに再現。しかし全然違うものになった気がしまぷ
nginx で SSL解きリバースプロキシな設定のお作法

フロントでSSL解いてリバースプロキシってのは割と良く作るのだけど、あれれ...?

nginx, ときどき httpd で出来てたことが出来なくて「えっ？」てなる。今後のためにメモ。

```nginx.conf
server {
       listen         80;
       server_name    www.example.com;
       rewrite        ^ https://$http_host$request_uri? permanent;
}

server {
       listen         443;
       server_name    www.example.com;
       
       ssl on;
       ssl_certificate ...
       ssl_certificate_key ...
       
       :
       location / {
             proxy_set_header Host $host;
             proxy_set_header X-Real-IP $remote_addr;
             proxy_set_header X-Forwarded-Proto https;
             proxy_set_header X-Forwarded-Host $host;
             proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

             proxy_pass http://backend.example.com/;
             proxy_redirect http:// https://;
       }
}

```

ポイントは ```proxy_redirect http:// https://;``` の行。後ろが頭のいい奴(例:Rails)だと、X-Forwarded-Proto を見てよしなにヘッダを吐いてくれるんだけど、X-Forwarded-Proto 見てくれない奴が裏側にいる場合には、これで Location ヘッダなんかを強制的に https:// に書き換える必要がある。

apache httpd で言うところの ProxyPassReverse ですな。こっちの方が融通利くみたい。

ちなみに nginx の $http_host と $host は同じようでいて微妙に違うらしい > [ネタ元](http://forum.nginx.org/read.php?2,213799,213813#msg-213813)
モジュールのロードパスの列挙

現在、require.pathsが削除され使えないですが、代わりに何を呼び出すのかいつも忘れてしまうので、メモとして残しておきます

```
global.module.paths
```

参考：キーワードが分からず、試行錯誤でググって見つけたサイト
[npm と Node.js 上で require を使ったモジュール読み込みの仕組みについてメモ ](http://tmlife.net/programming/javascript/npm-node-js-require-module-memo.html)
Multistage な Capistrano with Rails

複数環境にデプロイできるようにするため、capistrano-ext を使っていると思いますが、本体に取り込まれていたので、使い方のメモ。

## Before(本体とは別で配布されていたころ)

```ruby:Gemfile
gem 'capistrano'
gem 'capistrano-ext'
```

```ruby:deploy.rb
require "capistrano/ext/multistage"
```

で、config/deploy 以下に {環境名}.rb というファイルを作ると、それぞれの環境を認識し、環境ごとの設定が記述できる

## After(本体同梱)

```ruby:Gemfile
gem 'capistrano'
```

```ruby:deploy.rb
require "capistrano/ext/multistage"

set :stages, %w(staging production)
set :default_stage, "staging"
```

config/deploy 配下にファイルを作る部分は一緒。

環境を明示的に書く必要があるのが、変更点か。デフォルトを設定できるのは、ミスオペを考えると安全側に倒しておけるから、ありがたいかも。

## 参考資料

<https://github.com/capistrano/capistrano/wiki/2.x-Multistage-Extension>
otoolでアプリが使っているフレームワークの一覧を取得する

otoolというコマンドを使用すると、iOSアプリのバイナリの様々な情報を調べることができます。

ここでは、アプリが使用しているフレームワークを調べる方法を紹介します。

##otoolの使い方

バイナリ（拡張子.app）のあるフォルダへ移動し、ターミナルから以下のように実行します。

````
otool -l {アプリ名}.app/{アプリ名}
````

バイナリのある場所は、Xcode4を使用しているのであれば、

````
~/Library/Developer/Xcode/DerivedData
````

配下を辿っていく、あるいはバイナリファイル名で検索すれば見つけられます。

##使用フレームワークのみを出力する

上記コマンドでこのアプリに関する諸々の情報がコンソールに出力されるのですが、次のようにパイプを使って`grep`コマンドに渡すことで、

````
otool -l {アプリ名}.app/{アプリ名} | grep framework
````

「使用しているフレームワーク」だけに絞って出力させることができます。

````
name /System/Library/Frameworks/AudioToolbox.framework/AudioToolbox (offset 24)
name /System/Library/Frameworks/MediaPlayer.framework/MediaPlayer (offset 24)
name /System/Library/Frameworks/QuartzCore.framework/QuartzCore (offset 24)
name /System/Library/Frameworks/MessageUI.framework/MessageUI (offset 24)
name /System/Library/Frameworks/ImageIO.framework/ImageIO (offset 24)
name /System/Library/Frameworks/CoreImage.framework/CoreImage (offset 24)
name /System/Library/Frameworks/MobileCoreServices.framework/MobileCoreServices (offset 24)
name /System/Library/Frameworks/Accelerate.framework/Accelerate (offset 24)
````
What you can do when you get error "Fatal error: Maximum function nesting level of '100' reached, aborting! in …Twig/Compiler.php"



When you get an error like "Fatal error: Maximum function nesting level of '100' reached, aborting! in /.../Twig/Compiler.php on line XXX" you should increase the value of `xdebug.max_nesting_level` at your php.ini.

```php.ini
…
xdebug.max_nesting_level = 1000
```

According to Fabian:

[![](https://dl.dropbox.com/u/949822/qiita.com/130218-twig-fatal.png)](https://github.com/fabpot/Twig/issues/993)
ローカル時刻を入力させて UTCTime で受け取るようなカスタムフィールド

色々な前提や import 文を省略しているのでもちろんそのままでは動かない。

```haskell
localDatetimeField :: Field App App UTCTime
localDatetimeField = Field
    { fieldParse = \rawVals fVals ->
        case rawVals of
            [dayF, timeF] -> runErrorT $ do
                tz <- liftIO getCurrentTimeZone
                mDay <- ErrorT $ fieldParse dayField [dayF] fVals
                mTime <- ErrorT $ fieldParse timeField [timeF] fVals
                return $ localTimeToUTC tz <$> (LocalTime <$> mDay <*> mTime)
            _ -> return $ Left . SomeMessage $ MsgInvalidDatetime
    , fieldView = \idAttr nameAttr attrs eResult isReq -> do
        timeId <- lift newIdent
        tz <- liftIO getCurrentTimeZone
        let dayWidget = fieldView dayField idAttr nameAttr attrs eDay isReq
            timeWidget = fieldView timeField timeId nameAttr attrs eTime isReq
            eDay = localDay . utcToLocalTime tz <$> eResult
            eTime = localTimeOfDay . utcToLocalTime tz <$> eResult
        [whamlet|$newline never
            _{MsgDate} ^{dayWidget} #
            _{MsgTime} ^{timeWidget}
        |]
    , fieldEnctype = UrlEncoded
    }
```
カラーテーマファイルを用いてXcodeのエディタのカラーをカスタマイズする

Xcodeのエディタのフォントや背景のカラーは、PreferencesのFonts & Colorsタブからカスタマイズすることができます。

![Fonts & Colorsタブ](http://f.cl.ly/items/1j0q3a2G422E2c3T3e2i/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%202013-02-18%209.02.32.png)

テーマを新規作成してひとつひとつ自分で設定する以外に、**カラーテーマファイル（拡張子.dvtcolortheme）からテーマを追加**することもできます。

カラーテーマファイルはGithubでも数多く公開されているので、自分好みのものを見つけてそこから必要に応じてカスタマイズする、というのも一つの手です。

ここではカラーテーマファイルの使用方法と、Githubで公開されているカラーテーマファイルをいくつかピックアップして紹介します。

##カラーテーマファイルの使い方
以下のパスに、カラーテーマファイル（拡張子.dvtcolortheme）を置きます。（FontAndColorThemesというディレクトリがない場合は、新規作成してください）


````
~/Library/Developer/Xcode/UserData/FontAndColorThemes
````

その後、Xcodeを再起動します。

これで、PreferencesのFonts & Colorsタブ内で追加したテーマが選択できるようになります。

##公開されているカラーテーマファイル

Githubで"dvtcolortheme"で検索すると、多くのカラーテーマファイルが見つかります。以下にその中から比較的有名なものをピックアップして紹介します。

- [brianmichel / solarized](https://github.com/brianmichel/solarized/tree/master/apple-xcode4-solarized)

Solarizedという、エディタでの作業向けに最適化されたカラースキームを利用したテーマです。（筆者はこのリポジトリにある"Solarized - Light"を使用しています。）


- [jbrennan / xcode4themes](https://github.com/jbrennan/xcode4themes)

執筆時点で144Starがついているリポジトリです。Solarizedに基づくテーマが2つと、ObsidianCode, Humaneというテーマが入っています。


- [fidgetfu / xcode-themes](https://github.com/fidgetfu/xcode-themes)

Monokaiなどの、他のエディタで人気のあった配色が10種ほど納められています。
EmacsからFirefoxをリロードする

```reload.el
(require 'moz)

(defun moz-browser-reload ()
  (interactive)
  (comint-send-string
   (inferior-moz-process)
   "BrowserReload();"))
```

以下のインストールが必要

* [MozRepl :: Add-ons for Firefox](https://addons.mozilla.org/en-US/firefox/addon/mozrepl/) 
* [moz.el](https://github.com/bard/mozrepl/blob/master/chrome/content/moz.el)
C#: 実行時に名前を指定してメソッドを呼び出す

C# 4.0からは以下のように書けるそうです。
うまく統合されているんですね。

```csharp
Type t = ...;
dynamic instance = Activator.CreateInstance(t); 
instance.SayHello("Hello Unknown Method!");
```

参考:
http://code.msdn.microsoft.com/windowsdesktop/16-Reflection-83fc4215
Rとmongodb

===============
Rのインストール
===============
$ sudo vim /etc/yum.repos.d/R.repo

以下を記載
[R-project]
name=R project for Statistical Computing repository
baseurl=http://rm.mirror.garr.it/mirrors/CRAN/bin/linux/redhat/el5/x86_64/
failovermethod=priority
enabled=1
gpgcheck=0
priority=15

インストールする
$ sudo yum install R R-devel

R起動
$ R

rmongodbパッケージをインストール
> install.packages("rmongodb")

※パッケージのリファレンス
http://cran.r-project.org/web/packages/rmongodb/rmongodb.pdf
レスポンスヘッダからサーバタイムを取得する方法


```js:
$.ajax({
  type    : 'GET',
  url     : '',
  cache   : false,
  success : function (data, status, xhr) {
    var date = new Date(xhr.getResponseHeader('Date'))
      ;
  }
});
```

## テストした環境

|Webサーバ|バージョン|
|---|---|
|Apache|2.0|
|Nginx|1.2.0|

|ブラウザ|バージョン|
|---|---|
|Chrome|24.0.1312.57|
|Safari|6.0.2|
|Firefox|18.0.2|
|Opera|12.12|
|IE|6,7,8,9,10Pre|
定型ファイルを読み込んで、LINQで対象の行を抽出

とりあえず 動いたので載せてみます。
悪い点がありましたら、教えて下さい。

```csharp:ソース
// CSVファイルの読み込み
string[] lines = System.IO.File.ReadAllLines( strFilePath, enc );

// 正規表現で抽出する形を指定
Regex reg = new Regex( "\"(?<test>[0-9]{7}?)\"" );

// 対象の行を抽出
var targetLine = lines.Where( c => {
	// 正規表現にマッチしたか
	if( reg.IsMatch( c ) )
		// 判定対象位置がキーとマッチしたか。
		if( reg.Match( c ).Groups["test"].ToString() == key )
			return true;
	return false;
}).FirstOrDefault();
```

## いただいたコメントを元に修正してみる　１
```csharp:ソース
// CSVファイルの読み込み
IEnumerable<string> lines = System.IO.File.ReadLines( strFilePath, enc );

// 正規表現で抽出する形を指定
Regex reg = new Regex( "\"(?<test>[0-9]{7}?)\"" );

// 対象の行を抽出
var targetLine = lines
    .Where( c => reg.IsMatch( c ) )
    .FirstOrDefault( c => reg.Match( c ).Groups[ "test" ].ToString( ) == key );
```

だいぶ　すっきり
【メモ】 PHP で Google カレンダーから祝日を取得

個人的なメモ。
Google カレンダーから祝日を取得。

```php:CODE
<?php
	$gCalendarResult = array();
	$holiDays = array();
	
	// 祝日を調べたい範囲を設定
	$ymd = date('Y-m-d');
	$ymdNext = date('Y-m-t', strtotime('1 month'));
	
	// 指定年の祝日をJSON形式で取得するためのURL
	$gCalendarUrl = sprintf(
		'http://www.google.com/calendar/feeds/%s/public/full?alt=json&%s&%s',
		'japanese__ja%40holiday.calendar.google.com',
		'start-min=' . $ymd,
		'start-max=' . $ymdNext
	);
	
	// JSON形式で取得した情報を配列に変換
	$gCalendarResult = json_decode(file_get_contents($url), true);
	
	// 祝日を取得
	// だたしデータがない場合は飛ばす
	if(isset($gCalendarResult['feed']['entry'])){
		foreach ($gCalendarResult['feed']['entry'] as $value) {
			$holiDay = $value['gd$when'][0]['startTime'];
			$holiDays[$holiDay] = $holiDay;
		}
	}
	
	// 結果
	print_r($holiDay);
?>
```

```php:RESULT
/* 上記のコードでの出力例 */
Array
(
    [2013-02-23] => 2013-02-23
    [2013-02-24] => 2013-02-24
    [2013-03-02] => 2013-03-02
    [2013-03-03] => 2013-03-03
    [2013-03-09] => 2013-03-09
    [2013-03-10] => 2013-03-10
    [2013-03-16] => 2013-03-16
    [2013-03-17] => 2013-03-17
    [2013-03-20] => 2013-03-20
    [2013-03-23] => 2013-03-23
    [2013-03-24] => 2013-03-24
    [2013-03-30] => 2013-03-30
    [2013-03-31] => 2013-03-31
)
```
Rakeの補完をキャッシュする in zsh


rakeのサブコマンドの補完がとにかく遅いと思う。

http://weblog.rubyonrails.org/2006/3/8/fast-rake-task-completion-for-zsh/ が動かなかったので作ってみた。GemfileかRakefileが更新されたらキャッシュ更新するようになってる。

```sh
_cachefile_updated_at() {
  echo $(stat .rake_tasks -c%Y)
}

_rakefile_updated_at() {
  echo $(stat Rakefile -c%Y)
}

_gemfile_updated_at() {
  echo $(stat Gemfile -c%Y)
}

_generate_cachefile() {
  rake --silent --tasks 2> /dev/null | cut  -f 2 -d " " > .rake_tasks
}

_rake() {
  if [ -f Rakefile ]; then
    if [ ! -f .rake_tasks ] || \
       [ "`cat .rake_tasks | wc -l`" = "0" ] || \
       [ `_cachefile_updated_at` -lt `_rakefile_updated_at` ] || \
       [ -f Gemfile -a `_cachefile_updated_at` -lt `_gemfile_updated_at` ]; then
      _generate_cachefile
    fi
    compadd `cat .rake_tasks`
  fi
}

compdef _rake rake
```

## 追記
BSDのstat使ってる場合は stat -f%m Gemfile で更新時刻取れるようです。coreutilsで入れてるの使ってることに気づきませんでした。
Arduino x Ruby でSwitchを使う＆ネットに状態を流す


## Switchを使ってみたい

結線の参照先
[Switches and Arduino](http://learning.codasign.com/index.php?title=Switches_and_Arduino)

![結線はこんな感じ](http://learning.codasign.com/images/a/a8/Arduino_switch.png)

ソースはDinoのサンプルから拝借

```ruby:03_switch.rb
require "dino"
 
board = Dino::Board.new(Dino::TxRx.new)
button = Dino::Components::Button.new(pin: 2, board: board)

button.down do
  puts "button down"
end
 
button.up do
  puts "button up"
end

sleep
```

サンプルソースに付属の画像では、結線はこうなっている。
![サンプルの方の結線](https://github.com/austinbv/dino/raw/master/examples/button/button.png)

回路のことはよく解らないのだが、抵抗ってどんな役割をしているのだろうか。

## Switchの状態をネットの向こうへ届けよう

面白いサンプルを発見した。
[austinbv / dino_rails_example](https://github.com/austinbv/dino_rails_example)

- サーバに接続されているArduinoのLEDをブラウザから光らせる
- サーバのArduinoのスイッチを押すと、接続しているブラウザの背景が赤になる

という動きをするサンプルです。

最初の「LEDを光らせる」については、特定のURLにアクセスがあった場合、Arduinoへ信号を送ってLED光らせたり、消したりします。

もう一つの方についてはPusherというサービスを使って、サーバ側に接続されているArduinoのスイッチの状態をリアルタイムに配信するというものです。

スイッチの状態が変化したらサーバからPusherへ通知が行われ、Pusherから接続しているクライアントへサーバの状態が配信されるというもの。

### Pusherの準備

- http://pusher.com/ でアカウント作成
- app_id, key, secretを入手

### dino_rails_exampleの準備

- gitでソースをクローンする

```
/Users/yoshidayuuya/develop/dino% git clone https://github.com/austinbv/dino_rails_example.git
Cloning into 'dino_rails_example'...
remote: Counting objects: 41, done.
remote: Compressing objects: 100% (35/35), done.
remote: Total 41 (delta 0), reused 41 (delta 0)
Unpacking objects: 100% (41/41), done.
```

- 必要なところを修正する
  - GemfilesでRailsの最新バージョンで作成したプロジェクトのGemfileを参考に修正
Arduino x Ruby でLEDを光らせる


まずはこちらを参考にやってみることにした。
[Introducing Arduino & Dino](http://tutorials.jumpstartlab.com/projects/arduino/introducing_arduino.html)

## まずはLEDを光らせる

まずは通電しているかチェック。

無事光りました。
では、次。

## 環境構築

### Dinoのインストール

```
/Users/yoshidayuuya% gem install dino
Fetching: serialport-1.1.0.gem (100%)
Building native extensions.  This could take a while...
Fetching: dino-0.10.0.gem (100%)
Successfully installed serialport-1.1.0
Successfully installed dino-0.10.0
2 gems installed
Installing ri documentation for serialport-1.1.0...
Installing ri documentation for dino-0.10.0...
Installing RDoc documentation for serialport-1.1.0...
Installing RDoc documentation for dino-0.10.0...
```

### Arduinoの環境構築

from [Getting Started w/ Arduino on Mac OS X](http://arduino.cc/en/Guide/MacOSX) 

- MacOSX用のArduino Softwareをダウンロード
- Zipを解凍し、出てきたアプリをアプリケーションへ
- アプリを起動し、https://raw.github.com/austinbv/dino/master/src/du.ino をダウンロードして開く
- マイコンボードに書き込むを実行
 - 基板の"L"の横にあるLEDが点滅していたが点灯に変わった

## LEDを光らせる

ボード上のLEDは１３番PINに繋がっているそうです。サンプルを実行して光らせてみました。

```ruby:blink.rb
require 'dino'

board = Dino::Board.new(Dino::TxRx.new)
led = Dino::Components::Led.new(pin: 13, board: board)

[:on, :off].cycle do |switch|
  led.send(switch)
  puts switch
  sleep 1
end
```

光りました〜。
これだとRubyらしくないので、pryを使ってみましょう。

`gem install pry`でインストールし、`pry`で実行。
実行したら、上記のサンプルコードを順々に打ちこみます。
これでインタラクティブにソースを実行させることができます。

では、早速お遊び。２つのLEDを交互に光らせてみます。

赤いLEDと緑のLEDを用意し、ボードに差し込みます。
それぞれの＋側はボードの１１番と１２番へ差し込みます。それぞれのー側はブレッドボードのマイナスへつなげてしまいます。最後にブレッドボードのマイナスから基板の"GNDへつなげて完成。（回路の基本は、マイナスをすべてGNDへ戻すこと。）
結線は以上。

プログラムは先ほどのものを改造しました。

```ruby:02_blinks.rb
require 'dino'

board = Dino::Board.new(Dino::TxRx.new)
green_led = Dino::Components::Led.new(pin: 11, board: board)
red_led = Dino::Components::Led.new(pin: 12, board: board)

[[:on, :off],[:off,:on]].cycle do |switch|
  red_led.send(switch[0])
  green_led.send(switch[1])
  p switch
  sleep 1
end
```

はい、完成。実行してみましょう。

なんだか妙に楽しいですな。
ニフティクラウドでMosh(mobile shell)を使う


以下は、執筆途中です。
メモをまとめただけで、ちゃんと使えるのか等はテスト中です。

IaaSを使っていてSSHを繋いで作業をするのはしょっちゅうなのだが、もうちょっと便利にならないのかなぁと思っていました。

screen/tmux/byobuなどを使って、接続を切ってもサーバ側でプロセスを続行してくれるのももちろん便利なのだが、他のやり方も無いのかと調べていて「Mosh」というものを見つけました。

http://mosh.mit.edu/

私のように移動しまくる人間にとってはホント嬉しい機能満載。
ということで、ニフクラで使えるようにしてみました。
もちろん、どのIaaSでも使えます。

## ニフティクラウド側の設定

ファイアーウォールに以下のルールを追加する。

プロトコル: UDP
宛先ポート: 60000
IN/OUT: IN
接続元種別: CIDR
IPアドレス・グループ: 0.0.0.0/0

Ubuntuを使っている人はufwの設定も忘れずに。

    $ ufw allow 60000



## Moshのインストール

以下を参考にサーバ側とクライアント側の両方にインストールを行います。
CentOSでのセットアップ方法？
知りません。私はUbuntu派です。キリッ!!

http://mosh.mit.edu/#getting

Ubuntuの場合は

    $ apt-get install python-software-properties
    $ add-apt-repository ppa:keithw/mosh
    $ apt-get update
    $ apt-get install mosh


MacOSXは

    $ brew install mobile-shell

か、パッケージのインストール

https://github.com/downloads/keithw/mosh/mosh-1.2.1.pkg


## 使い方

    % mosh --ssh="ssh -i SSHの秘密キー.pem" -p 60000 root@IPアドレス

こんな感じです。

## 感想

まだお試し中です。
LWP の timeout は秒単位

LWP::UserAgent の timeout は秒単位とドキュメントにも書いてあるけど

http://cpansearch.perl.org/src/GAAS/libwww-perl-6.04/lib/LWP/Protocol/http.pm

のように time 関数と比較しているので小数で指定しても意味が無い。秒単位。
Emacsに環境変数を取り込む… をもっと。

こんにちはこんにちは、DT です。全然説明してなかった気がするので、説明に上がりました。

ステマのお時間です。

前回
----

 * [zonuexe/shellenv-el · GitHub](https://github.com/zonuexe/shellenv-el)
 * [Emacsに環境変数を取り込む… の次。(with 初めてのelisp) - Qiita](http://qiita.com/items/bdc979a7b93ea8f76bd3)

前提
----

 * EmacsはGUIで起動したい
 * システムデフォルトじゃないシェル(zshとか)を常用してる
 * Bash と zsh で二度も同じ設定を書きたくない

設定するのがめんどくさいだけじゃなくて、実際に困ることがありますからね ヾ(〃＞＜)ﾉﾞ☆

導入
----

前回の記事ではel-getを使って導入する方法をおすすめしましたが、OS X環境に最新のGitを入れると `.gitconfig` とデフォルトの `git` のバージョンのミスマッチでel-getが動かなくなる現象が起こるので、 `$HOME/.emacs.d/site-lisp/shellenv-el` みたいな位置に配置することにしました。

僕は `.emacs.d` をGitで管理してるので、サブモジュールにして置きます。つまり `~/.emacs.d` にリポジトリルートがあるとすると、こんな感じのコマンドで配置できますね。

```
git submodule add git@github.com:zonuexe/shellenv-el.git site-lisp/shellenv-el
```

で、 `~.emacs.d/init.el` の、できるだけ頭の行に二行を足します。

```cl:.emacs
(require 'shellenv "~/.emacs.d/site-lisp/shellenv-el/shellenv")
(shellenv/setpath 'zsh)
```

この函数を評価すると、以下の副作用が発生します。

 1. `zsh` が起動され、 `$PATH` を取得します
   * このとき、 `.zshenv` などが実行されます
 2. Emacsの環境変数 `"PATH"` に、zshの `$PATH` の内容をセットする
 3. `setq-default` で次の変数を設定する
   * `eshell-path-env` にzshから取得した `$PATH` を(Lispの)リストに変換したもの
   * `exec-path` にzshから取得した `$PATH` のリストに既存の `exec-path` を追加したリスト

その結果、次のような効果を得ることができます。

 * `shell-command` でzshと同じコマンドを実行することができる
 * EShellでzshと同じコマンドを実行することができる

やりましたね ヾ(〃＞＜)ﾉﾞ☆

さらに
------

### 任意の環境変数をセットしたい

`$HOGE` を取得したいときは、こんなふうに書けば良いですね。

```cl:.emacs
(shellenv/setenv "HOGE" 'zsh)
```

`shellenv/setenv` は環境変数の取得とセットをします。

### 任意の環境変数を取得したい

別にセットはしなくていいけど、取得した文字列を自分で利用したい、みたいな場合。

```cl:.emacs
(shellenv/.getenv "HOGE" 'bash)
```

こんな感じで取得できます。

### 何度もシェルの名前を指定するのはだるい

```cl:.emacs
(setq shellenv/shell 'zsh)
(shellenv/setpath)
(shellenv/setenv "HOGE")
```

これでいけます。

その他
------

上記で説明した用途だと問題ないはずですが、このレールから外れたところにまだバグがあ残ってるくさいので直していきたい…?