OmniAICreator/Qiita-1.07M huggingface dataset:
IntentでSocialにSENDするエトセトラ

AndroidのFacebook公式アプリが ナゼか ACTION_SENDでメッセージを ウォールに書こうとしても
リンクしか設定できないので　試行錯誤する事になりました


#今回行う事
SNSへの投稿をするために、Intentを使う
その際、シェアしたい文字列を EXTRAに格納しておく


##暗黙的インテント
Androidには おなじみの便利な暗黙的インテント機能があります
今回の場合は ACTION_SENDを受け取るアプリ一覧を表示し
選択させる

SNSへのシェアは ACTION_SENDを受け取る
ACTION_SENDの場合は setTypeが必須
ExTRAへの出力は putExtraを使う

```java:anmoku.java
Intent intent = new Intent( Intent.ACTION_SEND )		    
  .setType( "text/plain" )
  .putExtra( Intent.EXTRA_TEXT, "こんにちわ せかい！" );
startActivity(intent);
```

これで、ACTION_SENDに対応した Activity一覧が表示され
アプリを選択すると、たいていのアプリはデフォルトで
putExtraで設定したメッセージが入ってる！
今回はなんとなく twiccaで行う


実行するとlogcatに

START u0 {act=android.intent.action.SEND typ=text/plain flg=0x3000001 cmp=jp.r246.twicca/.statuses.Send (has clip) (has extras)} 

このように、jp.r246.twicca の .statuses.sendアクティビティー に対して
ACTION_SEND  text/plain EXTRA が正しく渡ってます


##明示的インテント （getLaunchIntentForPackage）
明示的インテントとは、パッケージ名を指定し選択画面を出さず特定のアプリを起動させる事
よくチュートリアルにあるのは

```java:meiji.java
PackageManager pm = getPackageManager();
Intent intent = pm.getLaunchIntentForPackage( "jp.r246.twicca" )      
startActivity(intent);
```

これだと 単純にアプリが起動するだけなので、EXTRA等を追加してみる

```java:meiji2.java
PackageManager pm = getPackageManager();
Intent intent = pm.getLaunchIntentForPackage( "jp.r246.twicca" )      
  .setAction(Intent.ACTION_SEND)
  .setType("text/plain")
  .putExtra(Intent.EXTRA_TEXT, "こんにちわ せかい！");
startActivity(intent);
```

上記と同じく 単純にアプリが起動するだけで、EXTRAのデータが取得されない

logcatを確認すると
START u0 {act=android.intent.action.SEND cat=[android.intent.category.LAUNCHER] typ=text/plain flg=0x3000001 pkg=jp.r246.twicca cmp=jp.r246.twicca/.timelines.Home (has clip) (has extras)}

ACTION_LAUNCHER  .timelines.Homeアクティビティー。 
getLaunchIntentForPackage で指定してるので当然ですね
通常の起動しかしません

ので、この方法では ACTION_SENDをちゃんと渡せないので別の方法を試します



##パッケージ名とアクティビティー名指定 (ComponentName使用)
こういう時のために、起動時のアクティビティーも指定できます
ACTION_SENDを受け取るアクティビティー名の取得方法は 別記事にて！

twiccaの場合は ACTION_SENDを受け取るものは
パッケージ名 jp.r246.twicca
アクティビティー名 jp.r246.twicca.statuses.Send
なので

```java:meiji.java
ComponentName component = new ComponentName( "jp.r246.twicca", "jp.r246.twicca.statuses.Send" );

Intent intent = new Intent(Intent.ACTION_SEND)
	.setComponent(component)
	.setAction(Intent.ACTION_SEND)
	.setType("text/plain")
	.putExtra(Intent.EXTRA_TEXT, "こんにちわ せかい！");
startActivity(intent);
```

パッケージ名とアクティビティー名を引数に ComponentNameを作り
setComponentで渡します

logcatでは 
START u0 {act=android.intent.action.SEND typ=text/plain flg=0x3000001 cmp=jp.r246.twicca/.statuses.Send (has clip) (has extras)}


ｷﾀ━━━━━━(・∀・)━━━━━━!!!!
さくらVPS（CentOS 6）にMongoDBをインストール


### リポジトリの追加

`/etc/yum.repos.d/`以下にmongodb.repoを作成。

```/etc/yum.repos.d/mongodb.repo
[mongodb]
name=MongoDB Repository
baseurl=http://downloads-distro.mongodb.org/repo/redhat/os/x86_64/
gpgcheck=0
enabled=1
```

### MongoDBインストール
```
$ sudo yum -y install mongodb-org
```

### MongoDBの自動起動

```
$ sudo chkconfig mongod on
```

##参照
* [mongoDB公式](http://docs.mongodb.org/manual/tutorial/install-mongodb-on-red-hat-centos-or-fedora-linux/ 'Install MongoDB on Red Hat Enterprise, CentOS, or Fedora')
Xcode5.1でarm64を外す方法


Xcode5.1ではArchitecturesで「Standard architectures (armv7, armv7s, arm64)」しか選択できないのでarm64を外せなくなってしまったのかと思いましたが、外せましたのでその方法を共有します。

プロジェクト > TARGETS > Build Settings の Architecturesを以下の状態にします。
(armv7とarmv7sを別々に設定するよりも $(ARCHS_STANDARD_32_BIT) を設定したほうがいいみたいです)

![スクリーンショット 2014-03-12 11.56.02.png](https://qiita-image-store.s3.amazonaws.com/0/27793/07538c30-9555-3aa6-3842-c8daaf791f7f.png "スクリーンショット 2014-03-12 11.56.02.png")



これで64bit対応されていないライブラリも引き続き使い続けることができます！
tablesorter.js

##ダウンロード先

http://tablesorter.com/docs/

jquery.tablesorter.zipをダウンロードして解凍して使う。
自分はjquery.tablesorter.min.jsを使った。

##使い方
「thead」と「tbody」を入れる必要あり。

```html:html
<table id="hogehoge">
 <thead>
  <tr><th>名前</th><th>身長</th><tr>
 </thead>
 <tbody>
  <tr><td>スズキ</td><td>173</td></tr>
  <tr><td>サトウ</td><td>168</td></tr>
  <tr><td>サイトウ</td><td>175</td></tr>
 </tbody>
</table>
```

```js:jQuery(単にソートしたい場合)
$(function() {
  $('#hogehoge').tablesorter();
});

```

```js:jQuery(指定した列のソートを無効)
$(function() {
  $('#hogehoge').tablesorter({
    //左から0番目の列のソートを無効にする。
    headers: {
      0: {sorter:false}
    }
  });
});
```

##ソートマークのつけ方
tablesorterがクラスを追加してくれるので、それに合わせてCSSを設定している。

```html:デフォルトの場合
<th class='tablesorter-header'>カラム名</th>
```

```html:昇順の場合
<th class='tablesorter-header tablesorter-headerAsc'>カラム名</th>
```

```html:降順の場合
<th class='tablesorter-header tablesorter-headerDesc'>カラム名</th>
```

```css:css
.tablesorter-header div{
  margin-right: 20px;
}
.tablesorter-header{
  background-image: url(../img/asc_and_desc.gif);
  background-repeat: no-repeat;
  background-position: center right;
  cursor: pointer;
}
.tablesorter-headerAsc{
  background-image: url(../img/asc.gif);
}
.tablesorter-headerDesc{
  background-image: url(../img/desc.gif);
}
````
Xcode5.1(iOS7.1)の変更とアップデートに起きた問題の対応


### Xcode5.1 Release Notes
* https://developer.apple.com/library/ios/releasenotes/DeveloperTools/RN-Xcode/Introduction/Introduction.html
* 気になる変更点を以下に記述

## Quick Lookの実装
* UIImageやNSStringやCGPointやUIColorなどいくつかのオブジェクトのデータが、break pointしているときに見ることができる。
* NSURLとかおしゃれに該当のページが見れたりする

![スクリーンショット 2014-03-11 10.23.17.png](https://qiita-image-store.s3.amazonaws.com/0/4585/5d49075b-a616-f0a1-7843-352784ba7ec8.png "スクリーンショット 2014-03-11 10.23.17.png")

https://developer.apple.com/wwdc/videos/?id=407
https://developer.apple.com/wwdc/videos/?id=413

## Storyboard(Interface builder)の変更
* constraintのタイプがいくつか増えた。
    * cross attribute attributes: ``view1.centerY = view2.bottom``
    * including alignment contraint: ``view1.leading <= view2.leading``
    * equal size constraints: ``view1.width >= view2.width``
    * decimal number: ``0.5``
    * aspect ratio: ``1:2``

## Deprecations
* OCUnitとSenTestingKit frameworkがdeprecatedに
    * “Edit > Refactor > Convert to XCTest…”でconvertできる

## iOS7.1 Release Notes
* https://developer.apple.com/library/ios/releasenotes/General/WhatsNewIniOS/Articles/iOS7_1.html#//apple_ref/doc/uid/TP40013916-SW1

## 運営しているアプリで起きたiOS7.1にUpdateしたことによる問題
* Interface builder上でTabBarのTintColorを指定していたがうまく動いてなかった
    * viewControllerの中で指定すると治った
* TableViewCellのClipSubviewをオフにしているにも関わらず、Clipされている
    * XcodeをUpdateしてbuildすると治った 

## 運営しているアプリで起きたXcode5.1にUpdateしたことによる問題
* TableCellの中のContentViewのClipSubviewではなくTableCellのClipSubviewを指定する必要がある
    * リリースしているアプリでは起きていない問題

## 運営しているアプリで起きたwarningの事例
### ImageViewのreadwriteの設定でwarning
```
Auto property synthesis will not synthesize property 'imageView' because it is 'readwrite' but it will be synthesized 'readonly' via another property
```
```
@property (nonatomic, weak) IBOutlet UIImageView *imageView;
->
@property (nonatomic, weak, readonly) IBOutlet UIImageView *imageView;
```
### 参照のないStoryboardのViewControllerでwarning
* まだ実装してない作業途中のstoryboardでwarningが出ていた
* ControllerにIdenfiterをつける、いらないなら削除する

```
warning: Unsupported Configuration: Scene is unreachable due to lack of entry points and does not have an identifier for runtime access via -instantiateViewControllerWithIdentifier:.
```

### ImageViewでHighlightedがOnになっている
* ImageViewのHighlightedのチェックを外す
```
warning: Attribute Unavailable: Highlighted property is only for display within Interface Builder (The value set for this property will not be present at runtime)
```
macでシェルスクリプトをダブルクリックで実行

* [Vagrant を使って Mac からダブルクリックで操作できる仮想環境を作る - こせきの技術日記](http://koseki.hatenablog.com/entry/2014/03/11/101658)

`hoge.sh`を`hoge.command`に拡張子を変更する。
実行権限はつけておく。

ターミナルが開いて実行されます。
さくらVPS（CentOS 6）にrbenvでRubyをインストール


### rbenvのインストール
```
$ git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
```

### ruby-buildのインストール
```
$ git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
```

### opensslのインストール
opensslをインストールしていないとrubyインストール時に`The Ruby openssl extension was not compiled. Missing the OpenSSL lib?`というエラーメッセージが出る。

```
$ sudo yum -y install openssl-devel
```

### readlineのインストール
readlineがないと`rails c`とか`padrino c`でエラーを吐く。

```
$ sudo yum -y install readline-devel
```


### rubyのインストール

```
# インストールできるバージョンを確認
$ rbenv install --list
  ・・・
  2.0.0-p195
  2.0.0-p247
  2.0.0-p353
  2.0.0-p451
  2.0.0-preview1
  2.0.0-preview2
  2.0.0-rc1
  2.0.0-rc2
  2.1.0
  2.1.0-dev
  2.1.0-preview1
  2.1.0-preview2
  2.1.0-rc1
  2.1.1
  ・・・

# パッチを当てて、インストール
$ rbenv install 2.1.1
$ rbenv rehash

# 使用するrubyのバージョンの設定
$ rbenv global 2.1.1
```

### .zshrcの編集

```.zshrc
export PATH=$HOME/.rbenv/bin:$PATH
eval "$(rbenv init -)"
```

```
$ source ~/.zshrc
```

## 参照
* [rbenv を使って ruby をインストールする(CentOS編)](http://qiita.com/inouet/items/478f4228dbbcd442bfe8 'rbenv を使って ruby をインストールする(CentOS編)')
Scalaのspecs2でDataTablesにStringを使うときは!!を使う


**加筆**
[ScalaのSpecs2でDataTablesじゃなくてTables traitを使えばStringの時も!で扱える](http://qiita.com/mokemokechicken/items/b9332871acf467b6014b)
にもあるように`DataTables`ではなく`Tables`を使う方が個人的にはオススメです。


**元記事** (間違いではないので残しておきます)

まさにタイトルそのままです。

一応Documentにも書いてあるのですが、
http://etorreborre.github.io/specs2/api/SPECS2-2.3.10/index.html#org.specs2.matcher.DataTables


DataTablesの値に`String型`を使うときは `!`  ではなく `!!` を使う必要があります。

例）

```scala:myspec.scala
class LangString2ClassSpec extends Specification with DataTables {
  "LangString2Class.map(lang) => class" should  {
    "str"         || "class" |
    "java"        !! Java() |
    "JAVA"        !! Java() |
    "objc"        !! ObjectiveC() |
    "objectivec"  !! ObjectiveC() |
    "python"      !! Python() |
    "RUby"        !! Ruby() |
    "JS"          !! JavaScript() |
    "JAVASCRIPT"  !! JavaScript() |
    "Graph"       !! Graph() |
    "SCALA"       !! Scala() |>
    { (s, klass) =>
      LangString2Class.map(s) must beSome(klass)
    }
  }
}
```

***もっと目立つところに書いててくれ！！*** と切に願うのでありました。
メモ: Redmineをインストールした

メモめも。

これ見ながら。

* http://www.redmine.org/projects/redmine/wiki/RedmineInstall

手元の環境はDebian。

```bash
$ cat /etc/debian_version
6.0.8
$ rvm -v

rvm 1.24.7 (stable) by Wayne E. Seguin <wayneeseguin@gmail.com>, Michal Papis <mpapis@gmail.com> [https://rvm.io/]

$ ruby -v
ruby 2.0.0p247 (2013-06-27 revision 41674) [i686-linux]
```

（あ、これまだsqueezeなんだ。）

## 必要なものをインストール

```bash
sudo aptitude install -y mysql-server-5.1 mysql-client libmysqlclient-dev libmagickwand-dev
gem install rails bundler rmagic --no-ri --no-rdoc
```

（途中で入れろって言われて足したりやっぱり不要そうなので削ったりしたので、過不足あるかもしれない。）

途中、MySQLサーバーのrootアカウントに設定するパスワードを聞かれるので、適当に設定。

## ダウンロード

* http://www.redmine.org/projects/redmine/wiki/Download

```bash
wget http://ナントカカントカ.tar.gz
tar ナントカカントカ.tar.gz
cd ナントカカントカ
```

## MySQLの設定

```bash
mysql -u root -p
```

```mysql
CREATE DATABASE redmine CHARACTER SET utf8;
CREATE USER 'redmine'@'localhost' IDENTIFIED BY 'my_password';
GRANT ALL PRIVILEGES ON redmine.* TO 'redmine'@'localhost';
exit
```

## DB接続の設定

`config/database.yml`の`production`のパスワードを、先ほどのものに設定。（他は不要。）

## 関連Gemをインストールしたり、DBを構築したり

```bash
bundle install --without development test
rake generate_secret_token
RAILS_ENV=production rake db:migrate
RAILS_ENV=production rake redmine:load_default_data
```

「言語は何にする？」と聞かれるので`ja`あたりを。`en`でもいいけど。

## パーミッションの調整

特にいらなかった。

## 起動してログイン

```bash
ruby script/rails server webrick -e production
```

起動したー！

admin/adminでログイン。
Gmail使っている人必見！Gmailでタスク管理ができる！

##Gmailでタスク管理！！！
まずは、自分のgmailを見てください。。。。。なんてきれいなんだ。。。。。  


図１
![WS000000.JPG](https://qiita-image-store.s3.amazonaws.com/0/25116/c2f7f678-9d77-8655-33db-64548d1eaa61.jpeg)



###メール操作の流れ

 - 基本は、新着メール（黒枠）をアーカイブして、空っぽの状態にします(メールを開いて、`e`でアーカイブ)
      ※アーカイブすると、受信トレイからすべてのメールに移動に移動します。決して削除されるわけではありません。アーカイブとは＝＞https://support.google.com/mail/answer/6576?hl=ja

 - 大事だと思ったメールや後で返信する場合は、メールの横にある **スター** を押します(メールを開いて、`ｓ`でスター)

 - 右上（オレンジ枠）に返信すべきメールが溜まります。つまり、ここがtodoになるわけです

 - 追加で **ラベル** を設定している人はそれも追加できます。（図１の写真で言う右側の保存、青枠）
以上の設定をこれからします


##初期設定
#####1．画面右上にあるねじのマークをクリック＝＞設定
![20120404174002_4f7c08e26b6bf.jpg](https://qiita-image-store.s3.amazonaws.com/0/25116/86e2890c-04bf-97a4-cf11-abbd457c9fb6.jpeg) 



#####2.タブの「受信トレイ」＝＞カテゴリのチェック欄をすべてはずす＝＞変更を保存
![WS000003.JPG](https://qiita-image-store.s3.amazonaws.com/0/25116/ca395b1f-3d05-6319-e7da-8e1b7377427e.jpeg)  



#####3．タブの「Labs」＝＞マルチ受信トレイの有効にする＝＞下のほうにいき、変更を保存
![WS000004.JPG](https://qiita-image-store.s3.amazonaws.com/0/25116/a743927d-7e34-7015-4e06-993d4257de65.jpeg)  


#####4．上記のねじマーク＝＞設定＝＞タブに「マルチ受信トレイ」＝＞写真と同様に設定
![WS000005.JPG](https://qiita-image-store.s3.amazonaws.com/0/25116/13ecb422-66ba-1a54-0a5f-39e4341c43a1.jpeg)  

###5．完成！！！


---------------------------------------
---------------------------------------


######あとは、新着に○○○○件とかメールがたまっている人が多いと思います。
↓こんな人
![20120404174002_4f7c08e26b6bf.jpg](https://qiita-image-store.s3.amazonaws.com/0/25116/ac720ec6-cebe-8337-4e5a-028115811cc0.jpeg)



その場合は、いったんきれいにしましょう！！ **すべてアーカイブ！！！**

##手順
#####１チェックマーク押す
![20120404174419_4f7c09e3606d3.jpg](https://qiita-image-store.s3.amazonaws.com/0/25116/45dc85c4-11fd-b77a-cf1b-0f9d0e841f30.jpeg)

#####２アラートが出るので、そこをクリック
![20120404174731_4f7c0aa397a61.jpg](https://qiita-image-store.s3.amazonaws.com/0/25116/653a3751-9d01-3a03-a73f-71865123496e.jpeg)

#####３完了！
![20120404175454_4f7c0c5ead9c9.jpg](https://qiita-image-store.s3.amazonaws.com/0/25116/896843cd-ddcd-a122-1921-42f91f22c173.jpeg)



これでgmail使いやすくなったっしょ！！！

。。あと追記で、、、、マルチ受信トレイの細かい設定方法。


| タグ| 意味 | 
|:-----------|------------:|
| from:      | 特定アドレスから来たメール |
|to:| 特定のメールアドレス宛の物|
| subject:    | タイトルに特定キーワードが含まれているメール | 
| has:yellow-star     | 黄色の☆マーク付きメール|  
| is:unread        |未読のメール |
| has:attachment     | 添付ファイル付きメール|
| is:draft  | 下書きメール | 
|label:| ラベル |


ここに詳しく＝＞http://www.g04.com/misc/GmailTipsComplete.html#Tip-19



たとえば、
![info.jpg](https://qiita-image-store.s3.amazonaws.com/0/25116/18a9c6e6-b7ed-a171-cb87-761449e94dcd.jpeg)


自分は、ラベルを設定して、それを割り当ててます。
ex label:保存

とか。。。



以上でした！！！！
公開されているObjective-Cコーディング規約

公開されているコーディング規約をいくつかまとめてみました。

Apple
https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/CodingGuidelines/CodingGuidelines.html

CookPad(日本語)
https://github.com/cookpad/styleguide/blob/master/objective-c.ja.md

Wantedly
https://github.com/wantedly/objective-c-style-guide/tree/master

NYTimes
https://github.com/NYTimes/objective-c-style-guide

Google
http://google-styleguide.googlecode.com/svn/trunk/objcguide.xml
(日本語訳)http://www.textdrop.net/google-styleguide-ja/objcguide.xml

Luke Redpath
http://lukeredpath.co.uk/blog/2011/06/28/my-objective-c-style-guide/

cocoadevcentral
http://cocoadevcentral.com/articles/000082.php

Sam Soffes
https://gist.github.com/soffes/812796

Adium
https://trac.adium.im/wiki/CodingStyle

github
https://github.com/github/objective-c-conventions

RobotsAndPencils
https://github.com/RobotsAndPencils/objective-c-style-guide

raywenderlich
https://github.com/raywenderlich/objective-c-style-guide
ソースコードの変数やメソッドを日本語で書いてはいけない理由

アルバイト的に手伝いしている会社のプログラムソースの変数名やメソッド名が日本語混じりだった泣きたい(C#なので普通に`var d入力値`とかやっても怒られない)。

まあそれはそれとして、「ソースコードを日本語で記述して何が悪いのか」という明確な根拠が自分の中ではっきりしていなかったので、いくつか列挙。他にもあれば教えて頂けると助かります。

# クローズドなプロジェクトでも問題になること
* プログラムコードを書くだけでもIMEを使うため、コードの入力効率が落ちる
* IDEの宣言インクリメンタルサーチ機能が使えない(先頭を英文字にすればある程度緩和は可能)
* ソースコード管理ツールが標準で持っているDiffツールが不具合を起こすことがある(文字コードの問題)
* ソースコード管理ツールによっては、日本語の変更を正しくマージできないことがある。
* 将来的にプログラマを増員するときに、プログラマのPCに日本語入力環境がないと開発に参加出来ない
* 言語によってはコードに日本語が使えないので、複数の言語を使い分ける人にとって特に困る

# オープンソースなプロジェクトでも問題になること
* そもそも日本語が入力・表示できない人には理解できない
* 見た目的にカッコ悪い

# 日本語OK、日本語NGのプロジェクトを掛け持ちするプログラマ自身に発生する不都合
* プロジェクトごとに日本語の使用可能・不可能を分けるのは混乱の元になる
* IMEが前のプロジェクトの内容を学習してしまい、さらにプログラムが面倒になる可能性がある

# ソースコードに日本語を含めるメリット
ただ、開発者の人曰くメリットもあるにはあるので、その辺も触れてみる

* 難読化に繋がる(安堂ロイドで出てきたアラビア語プログラムと同様)
* それぞれのメソッドや変数が何を表しているのか、パッと見て分かりやすい(が、単純な英単語くらい覚えろよと言う気もする)
* 複雑なメソッドの名称を決めるときに命名に迷うことがない

さあて、列挙してみるとあきらかにデメリットの方が多いような気はする。もちろん、メリットもメリットで結構おいしい効果はある気はしますが(特に命名に悩まなくて済むあたり)。
ただ、某作曲家さんの作曲指令書のように、ちゃんと他人に読める形式にするために何らかのコンバート作業が必要になってしまう以上、できるのならなるべく誰でも読めるソースコードにしようよ と。

まあ、そんな結論で良いんですかね。
Rail 4.1でActiveAdminとhas_manyなnested form


画像アップロードがCarrierwaveなのは使ってるのに読み替えてもらえれば。

```ruby:Gemfile
# gem 'formtastic' , github: 'justinfrench/formtastic'
# gem 'ransack'    , github: 'activerecord-hackery/ransack', branch: 'rails-4.1'
# gem 'polyamorous', github: 'activerecord-hackery/polyamorous'
# 上の3つは最近のバージョンではいらなくなったね！
gem 'activeadmin', github: 'gregbell/active_admin'
gem 'carrierwave'
```

```ruby:app/models/post.rb
def Post < ActiveRecord::Base
	has_many :images, dependent: :destroy
	accepts_nested_attributes_for :images, allow_destroy: true
end
```

```ruby:app/models/image.rb
def Image < ActiveRecord::Base
	belongs_to :post
	mount_uploader :image, ImageUploader
end
```

```ruby:app/admin/post.rb
ActiveAdmin.register Post do
	permit_params :title, :body, :images_attributes => [:image, :_destroy, :id]

	form do |f|
    	f.inputs do
			f.input :title
			f.input :body
		end

		f.inputs do
			f.has_many :images, heading: 'Images', allow_destroy: true, new_record: true do |a|
			a.input :image, :hint => a.object.image.nil? ? a.template.content_tag(:span, "no image yet") : a.template.image_tag(a.object.image.thumb.url)
      end
    end

    f.actions
  end
```
S3の全バケットのライフサイクルを見るためのワンライナー

用途
----

どのバケットがいつGlacierに移されていつ削除されるのかなど、忘れてしまいがちなので、
それをすぐに簡単に見たいときに使います。

準備
----

前提として、aws-cli のセットアップが完了している必要があります。
http://aws.amazon.com/jp/cli/

コマンド
-------

```bash
$ for bucket in `aws s3 ls | cut -d " " -f 3`; do echo "\n$bucket"; aws s3api get-bucket-lifecycle --bucket $bucket; done
```

ライフサイクルが設定されていないと、下記のようなメッセージが出ます。

    A client error (NoSuchLifecycleConfiguration) occurred: The lifecycle configuration does not exist
[Objective-C] CGGeometry系のサイズ取得・設定まとめ


画面のレイアウトをしていく際に、色々なサイズを調べたり合成したりとにかくCGRectをいじることが多いです。
なので、レイアウトするためにどんなプロパティや関数があるのかをつらつらとまとめていきます。というかただの備忘録です。なので随時更新。

##UIScreen

こんな感じで使う。

```objc
CGRect rect = [[UIScreen mainScreen] bounds];
CGRect rect = [[UIScreen mainScreen] applicationFrame];
```

| プロパティ | 説明 |
|----------|------|
| bounds | ステータスバーを含む、画面全体の領域 |
| applicationFrame | ステータスバーを含まない画面領域 |

##ステータスバーのサイズ

`[UIApplication sharedApplication]`経由で取得する。

```objc
CGRect rect = [UIApplication sharedApplication].statusBarFrame;
```

##ナビゲーションバーのサイズ

```objc
CGRect rect = self.navigationController.navigationBar.frame;
```

##bounds / frame

`bounds`と`frame`には明確な違いがあります。
違いについては以前に「[[Objective-C] UIViewの座標と座標変換について](http://qiita.com/edo_m18/items/06e55b60f4d7adb9e0ea)」という記事を書いているのでそちらを。

ちなみに親要素いっぱいにviewを作る場合はこんな感じで。

```objc
// ViewController内
UIView *view = [[UIView alloc] initWithFrame:self.view.bounds];
```

##CGGeometry系関数

以前、「[[Objective-C] UIViewをいい感じに上下左右センタリングする](http://qiita.com/edo_m18/items/5dd48b7ee1e6899b8ed5)」という記事でも触れていますが、CGRectの操作に便利な関数が多数存在します。

特に、`CGRectUnion`関数はふたつのCGRect全体を内包するサイズを返してくれるのでレイアウトに重宝します。
これらの便利関数をまとめてくれている記事があるので、こちらを見てもらうと分かりやすいです。

**参考**: [CGGeometryクラスの位置やサイズ操作系の関数紹介](http://qiita.com/hachinobu/items/f8ac32870739c7d4eab8)
Fake POP server

user名、passwordは何でも通します。
メールボックスは常に空を返します。


```js
var net = require('net');
var rl = require('readline');


var server = net.createServer(function (socket) {
	 socket.write("+OK Dovecot Ready."+"\r\n") ;
	 
    var i = rl.createInterface(socket, socket);
    i.on('line', function (line) {
		console.log(line);
		
		(/USER.*/i.test(line))	? socket.write('+OK Password required for '+"\r\n") :
		(/PASS.*/i.test(line))	? socket.write('+OK'+"\r\n") :
		(/STAT/i.test(line))	? socket.write('+OK 0 0'+"\r\n") : 
		(/LIST/i.test(line))	? socket.write('+OK 0 messages'+"\r\n") : 		
		socket.write("-ERR unknown command"+"\r\n") ;
    });
	
});

server.listen(110);
```
John the Ripperでパスワードが甘いユーザを確認

環境を準備
===========

CentOS 6.5 64bit

```bash:インストール
$ wget http://pkgs.repoforge.org/john/john-1.7.9-1.el6.rf.x86_64.rpm
$ sudo rpm -ivh john-1.7.9-1.el6.rf.x86_64.rpm
```

```bash:解析用ファイルを作成
$ sudo unshadow /etc/passwd /etc/shadow > privpasswd
```

```diff:/etc/john.conf
- .include <dynamic.conf>
+ #.include <dynamic.conf>
```

チェック方法
===========

```bash:簡易チェック
$ john --users=yamada,inoue --format=MD5 --single privpasswd
```

ユーザ名とパスワードが同じユーザの場合、瞬時に結果がでます。

```bash:入念にチェック(何日もかかるので途中で諦めましょう)
$ john --users=yamada,inoue --format=MD5 privpasswd; john --show privpasswd | mail my@office.addr
```

パスワード最後にスペースを含めると強固になる。(印刷されてもわからん)
git-rerereでconflict自動解決したくないとき

merge前に気づいた場合、先に記録済み解決パターンを削除すればOK.

```
$ git rerere forget <pathspec>
```


気づかずmergeしてrerereで自動解決されちゃったけどconflict状態に戻したいときは

```
$ git checkout -m <pathspec>
```

でもやっぱりrerereがやってくれてたとおりに解決したい、となったら

```
$ git rerere
```

これで記録済みパターンをまた適用してくれる。
[ReVIEW Tips] DockerでRe:VIEW

「ReVIEW」の正式名称が「Re:VIEW」になった記念で、Re:VIEW用DOckerfileを作ってみました。
Re:VIEWと一緒にRuby 2.1.1、TeX Live 2012などがインストールされます(TeX Live 2013のインストール方法はよく分からず…)。

```Dockerfile
FROM ubuntu:12.04

MAINTAINER takahashim 

RUN apt-get update
RUN apt-get install -y build-essential wget curl git
RUN apt-get install -y zlib1g-dev libssl-dev libreadline-dev libyaml-dev libxml2-dev libxslt-dev
RUN apt-get install -y sqlite3 libsqlite3-dev
RUN apt-get install -y zip unzip
RUN apt-get clean

# Install ruby-build
RUN git clone https://github.com/sstephenson/ruby-build.git .ruby-build
RUN .ruby-build/install.sh
RUN rm -fr .ruby-build

# Install ruby-2.1.1
RUN ruby-build 2.1.1 /usr/local

# Install bundler and rake
RUN gem update --system
RUN gem install bundler --no-rdoc --no-ri

# Install TeXLive
RUN apt-get install -y python-software-properties
RUN apt-get install -y software-properties-common
RUN apt-add-repository ppa:texlive-backports/ppa
RUN apt-get update
RUN apt-get install -y texlive
RUN apt-get install -y texlive-lang-cjk

# Install Re:VIEW
RUN gem install review --no-rdoc --no-ri

# "src" is your Re:VIEW document directory with Rakefile to build
ADD src /review
RUN cd /review && rake
```

このファイルではRe:VIEWのビルドまで一気に行います（そこまでしなくても良い場合は一番下の3行を消して下さい）。
この場合、Dockerfileがあるディレクトリにsrc/ディレクトリがあって、そこにRakefileも入っている、というディレクトリ構成を想定しています。Rakefileは以下のようなものを作っておきます。

```Rakefile
require 'rake/clean'
require 'fileutils'

## Variables

BOOKNAME = "book"
CONFIG_FILE = "config.yml"
OTHER_FILES =  %w{CHAPS PREDEF POSTDEF} << CONFIG_FILE

PDF_FILE = "#{BOOKNAME}.pdf"
EPUB_FILE = "#{BOOKNAME}.epub"

SRC = FileList['*.re'] + OTHER_FILES
CLEAN.include(["#{BOOKNAME}", "#{BOOKNAME}-pdf", "#{BOOKNAME}.pdf", "#{BOOKNAME}-epub", "#{BOOKNAME}.epub"])


## Tasks

##task :default => :pdf
task :default => :all

desc "generate PDF and EPUB file"
task :all => [:pdf, :epub]

desc "generate PDF file"
task :pdf => PDF_FILE

desc "generate EPUB file"
task :epub => EPUB_FILE


## File Tasks

file PDF_FILE => SRC do
  FileUtils.rm_f PDF_FILE
  FileUtils.rm_rf "#{BOOKNAME}-pdf"
  sh "review-pdfmaker #{CONFIG_FILE}"
end

file EPUB_FILE => SRC do
  FileUtils.rm_f EPUB_FILE
  FileUtils.rm_rf "#{BOOKNAME}-epub"
  sh "review-epubmaker #{CONFIG_FILE}"
end
```

こうすると、Re:VIEWのディレクトリを/reviewに作って、review-pdfmaekrとreview-epubmakerを実行して終わります。

ファイルはDockerのイメージの中に入ったままなので、なんとかして取り出して下さい（docker cpはOS Xだと簡単には使えないようだったので断念…。何かしらサーバでも動かすべき？）。
VS 2013 で boost 1.55.0 の 32 / 64 ビット版をビルド

VS 2013 (VC++ 12) で boost 1.55.0 の 32 ビットおよび 64 ビット版をビルドしたときの手順をまとめる。

前提として、boost のアーカイブを `D:\Libraries\boost\boost_1_55_0` 以下に展開した。以下では、`D:\Libraries\boost\boost_1_55_0` を `$(BOOST_ROOT)` と呼ぶ。

## Boost.Build

まず `$(BOOST_ROOT)\tools\build\v2` フォルダに移動して、

```
> bootstrap.bat
> .\b2 --prefix=D:\Programs\b2 install
```

とすることで、Boost.Build v2 をビルドし `D:\Programs\b2` にインストールすることができる。

Boost.Build のインストールが完了したら `D:\Programs\b2\bin` にパスを通しておく。

## boost 自体のビルド

次に `$(BOOST_ROOT)` フォルダに移動し、何も考えずに全部の組み合わせでビルドするなら、

```
> b2 --build-type=complete msvc stage
```
 
でビルド完了を待つ。

ただし、これでは並列ビルドをしないのでビルドに時間がかかる上に、64 ビットコードは生成されない。

`address-model=32,64` とすれば同時にビルドできるという説もネットで見かけるが、ステージディレクトリが同じだと 32 ビットと 64 ビットのスタティックライブラリ／インポートライブラリが同名になってしまうため、異なる `--stagedir` 指定で個別にビルドしないといけない気がする。

そこで、もう少し細かくカスタマイズするなら、たとえば

* シングルスレッド版は不要
* 32 ビット版と64 ビット版をビルド
* CRT に静的リンクするスタティックライブラリ ＋ CRT に動的リンクする DLL
* 並列処理は 8 プロセスまで許可

という構成で

```
> b2 toolset=msvc threading=multi variant=debug,release link=static runtime-link=static address-model=32 --stagedir=stage/x86 -j 8
> b2 toolset=msvc threading=multi variant=debug,release link=shared runtime-link=shared address-model=32 --stagedir=stage/x86 -j 8
> b2 toolset=msvc threading=multi variant=debug,release link=static runtime-link=static address-model=64 --stagedir=stage/x64 -j 8
> b2 toolset=msvc threading=multi variant=debug,release link=shared runtime-link=shared address-model=64 --stagedir=stage/x64 -j 8
```

のような感じでビルドするとよい。

なお、64 ビット OS 上で 64 ビットコードを生成する際はツールセット（VC++ へのパス？）の切り替えで 64 ビットコンパイラも使用できるが、ここではすべて 32 ビットコンパイラで生成した。

このようにビルドした場合、boost を利用するプロジェクトでは

* インクルードフォルダに `$(BOOST_ROOT)` フォルダ
* ライブラリフォルダに
  * 32 ビットなら `$(BOOST_ROOT)\stage\x86\lib`
  * 64 ビットなら `$(BOOST_ROOT)\stage\x64\lib`

を含めることで、boost が使えるようになる。
uglifyは連続したvarを1つのvarにまとめてくれる

[node.jsで1つのvarで複数変数初期化してたら編集ミスで謎のエラーでハマった - Qiita](http://qiita.com/hnakamur/items/3e3d81e62f035fa747e6)ので気になって調べてみました。

grunt-contrib-uglify 0.4.0で

```js
var a;
var b = 2;
var c;

c = 3;
b++;
var d = 4;
var e = 5;
```

をuglifyしたら

```js
var a,b=2,c;c=3,b++;var d=4,e=5;
```

となりました。連続したvarはひとつに纏められるんですね。

ということで、uglify前提なら

```js
var a,
    b = 2,
    c;
```

のような書き方は不要ですね。
私的SublimeText3プラグイン集


# パッケージコントロールからインストール奴たち

## SublimeLinter
エラーチェッカー。
これが無いと始まりません。

### SublimeLinter-html-tidy
HTML5の構文チェッカー。

参考：
[SublimeText3でHTML5の構文チェック - Qiita](http://qiita.com/maccotsan/items/eebd7aa5932b74b48eff)

### SublimeLinter-jshint
JavaScriptの構文チェッカー。

### SublimeLinter-json
JSONの構文チェッカー。

### SublimeLinter-phplint
PHPの構文チェッカー。

## HTML5
HTML5のスニペット集と自動補完とハイライト

## JQuery
jQueryの自動補完

## LESS
LESS のシンタックスハイライト。

## Syntax Highlighting for Sass
SCSS / Sass のシンタックスハイライト

## Twitter Bootstrap Snippets
Bootstrapのスペニット集

## AutoFileName
ファイル名の補完。

## BracketHighlighter
開始/終了タグの強調

## Can I Use
選択したタグの各ブラウザ対応を調べる

## CTags
クラス/関数の定義場所へジャンプ

## CursorRuler
カーソルの位置へルーラー（縦線）を表示。
ちょっと２重線だったりして見難いので他に良いのないかなーと思ってます。

## DocBlockr
コメントブロックの補完

## Emmet
Emmet。

## Markdown Preview
Markdownプレビュー。
GitHub-Markdown形式でのプレビューが便利、

## LineEndings
改行コードの変更。

## PHPCs
PHPコーディング規約

## SideBarEnhancements
サイドバー右クリックのメニューを拡張

# 手動インストール奴たち
SublimeText3のPackage Listに無いので手動インストールしてるやつらです。

## ColorPicker
カラーピッカー。

[weslly/ColorPicker](https://github.com/weslly/ColorPicker)

## W3CValidators
W3CのHTML5のバリデーションをエディタ上から実行します。

（3に対応していなかったのでむりやり対応させました）
[W3CValidatorsがSublimeText3で動かなかったので動くようにした - Qiita](http://qiita.com/maccotsan/items/3dc4d16b836b1213f11a)

[ksz/Sublime-W3CValidators](https://github.com/ksz/Sublime-W3CValidators)

# (番外編)テーマ
私の一押しはコチラ。
[SalGnt/brackets-theme](https://github.com/SalGnt/brackets-theme)

Brackets(Adobe Edge Code)のビジュアルがとても洗練されてて好きなのですが、その名のとおりBrackets風のテーマです。
ただ白背景はちょっと目が痛いのでカラースキームはMonokaiにしてます。
手動インストールでどうぞ。
FactoryGirlの名前空間と上書き


torshinorさんの [Factory Girl 3.x メモ](http://qiita.com/torshinor/items/383691344ec4a2233fe5) が超絶わかりやすくまとまっているので、基本的にはそれだけで事足ります。
その中のFactoryGirl.modifyの具体例とか補足など。

#名前空間は１つ
FactoryGirlは基本的に名前空間が１つなので、同じ名前の定義が（別ファイルでも対象クラスが違っても）複数あると
FactoryGirl::DuplicateDefinitionErrorで落ちます。

```spec/factories/user.rb
FactoryGirl.define do
  factory :test_data, class: User do
    name "Suzuki"
  end
end
```
```spec/factories/shop.rb
FactoryGirl.define do
  factory :test_data, class: Shop do
    tel "0120-888-888"
  end
end
```
　　\#=> FactoryGirl::DuplicateDefinitionError

※`gem 'factory_girl_rails'`が定義された環境だと、
　　`rspec **`だけでなく`rails s`でも`rails c`でも`rake **`でも落ちます。

#FactoryGirl.modifyで上書き
`FactoryGirl.modify`を使えば上書きできます。

```spec/factories/user.rb
FactoryGirl.define do
  factory :test_data, class: User do
    name "Suzuki"
  end
end

FactoryGirl.modify do
  factory :test_data, class: User do
    name "Sato"
  end
end
```
`$ FactoryGirl.build(:test_data).name #=> "Sato"`

※ちなみに、defineされてないものに対してmodify定義すると
　　`Factory not registered: test_data (ArgumentError)`で落ちます。

#使いどころ
[Rails Engine](http://edgeguides.rubyonrails.org/engines.html)を使っていて、一部の子アプリでだけ上書きしたい、とかいう場合に使えそう。

```spec/factories/user.rb
FactoryGirl.define do
  factory :test_data, class: User do
    name "Suzuki"
  end
end
```
```child_a/spec/factories/user.rb
FactoryGirl.modify do
  factory :test_data, class: User do
    name "Sato"
  end
end
```
```child_b/spec/factories/user.rb
FactoryGirl.modify do
  factory :test_data, class: User do
    name "Yamada"
  end
end
```
Selenium IDE でファイルをアップロードする

ブラウザからファイルをアップロードする方法でよくあるのが「参照」ボタンをクリックしてファイルを選択してから送信ボタンをクリックしてアップロードを実行する方法です。これを Selenium IDE で自動で行う方法を調べました。

通常「参照」ボタンをクリックするとファイルの選択ウインドウが表示されますが、このウインドウは Windows の管轄であるため Selenium IDE からは操作ができないようです。ですが、`type` コマンドを使って「参照」ボタンに対してアップロードしたいファイルパスを渡すとファイルが選択された状態にすることができます。

|コマンド|対象|値|
|---|---|---|
|type|//xpath/to/element|C:\\Users\\usename\\Desktop\\sample.jpg|

ファイルが選択された状態にすることができればあとはアップロードボタンを `click` すればアップロードされます。
CoffeescriptのClassの作り方メモ

- 間違ってそうだけど、メモを残してみる。
- :: (ダブルコロン)の意味がprototypeということで追記してみた。

# Sample class 

```coffeescript:hoge.coffee
class Hoge
  # static public parameter / constants
  @classParam = "hoge"               # Hoge.classParam
  @CONST = 1                         # Hoge.CONST

  # prototype parameter
  prototypeParam : 0                 # Hoge.prptotype.prototypeParam
  Hoge::prototypeParam2 = 0          # Hoge.prototype.prototypeParam2

  # static private parameter
  _privateParam = 0                  # var _privateParam

  # static public method
  @classMethod : (param)->           # Hoge.classMethod = function(param){...}
    alert param

  # constructor
  constructor: (@instanceParam) ->   # Hoge = function(instanceParam){...}
    @instanceParam2 = ""

  # public method
  instanceMethod: (param) ->         # Hoge.prototype.instanceMethod(param){...}
    @instanceParam = param

  # static private method            # var _privateMethod = function(){...}
  _privateMethod = ->
    _privateParam++

```

## static public parameter / constants
- @を付けたパラメータは、`Hoge.classParam = "hoge";`のように展開される。
- =と:で差異はない。
- classの定数を定義する場合もこの方法を用いる。定数は全て大文字とする。

## prototype parameter
- @無しで:で定義したパラメータは`Hoge.prototype.prototypeParam = 0;`の様に展開される。
- Hoge:: に続けて定義しても同じ意味になる。値は=で設定する。
- 使用しない方がいい。constructorで@付き変数を定義するようにする。

## static private parameter
- @無しで=で定義したパラメータは`var _privateParam = 0;`の様に展開される。
- staticなprivate変数なので、値はインスタンス間で共有される。
- staticでないprivate変数は対応が難しいので、constructorで@付き変数を用意して、外部から使わないようにするのがいいと思われる。 

## static public method
- @付きのmethodは、`Hoge.classMethod = function(param){...}`のように展開される。
- =と:で差異はない。

## constructor
- @付きの引数は、インスタンスのパラメータとして初期化される。`this.instanceParam = instanceParam;`の様に展開される。
- 引数以外のインスタンスパラメータはconstructor内で@付きで宣言する。`this.instanceParam2 = "";`の様に初期化される。

## public method
- :で宣言したmethodは、`Hoge.prototype.instanceMethod = function(param){...}`の様に展開される。
- constructorでなくても、@付きの引数や、@付きの変数を使用できる。thisに変数が追加される。

## static private method
- =で宣言したmethoは、`var _privateMethod = function(){...}`の様に展開される。
- public methodからそのまま実行した場合、staticなmethodなので、インスタンスのthisにはアクセスできない。_privateMethod.call(this);の様にする。
Scaloidで画像表示

#1. drawbleフォルダの作成
フォルダを作成したら画像を入れます。
![1.jpg](https://qiita-image-store.s3.amazonaws.com/0/39243/62d68a3c-d729-0b09-0bda-98544b9b9f12.jpeg)

※画像を入れるとR.javaにコードが生成されます。

#2. 画像表示コードの記述

非常に簡単です。
以下の一文を書くだけです。

```scala:sample.scala
SImageView(R.drawable.ayahi, toast("Ayahi"))
```

以下、ソースコード全体

```scala:MainScaloid.scala
package scaloid.example

import org.scaloid.common._

class MainScaloid extends SActivity {
  onCreate {
    contentView = new SVerticalLayout {
      SImageView(R.drawable.ayahi, toast("Ayahi"))
    } padding 20.dip
  }
}
```
tmlib-rpg tmlib.js でスクリーンキャプチャ

# はじめに

誤解の無いように最初に書いておくと、デスクトップとかウィンドウのキャプチャじゃないです。
tmlib.js で表示しているゲーム画面と言うか canvas のキャプチャ。

これがあるといろいろ便利に使える場合があるかと…

例えば、ゲームのセーブ時に画面を保存して、それをロードする時に表示してどんなセーブデータだったかわかりやすくする。
とかって、言うのはよくある。

そんな方法を考えてみた。


具体的に必要になったのは、結局また各種データのロード処理。

AssetManager って形でいろいろロードできるように、ロードしたものを管理できるようになってるのだけど、
Web上でRPGをやろうと思った場合、全部のデータを、最初にロードって言うのは、現実的では無いなぁ～と。

なので、必要になったら読み込むようにする。
ディスク読み込みじゃないけど、ネットワークからの読み込み処理。

tmlib.js にも LoadingScene クラスがあって、AssetManager の load をしてくれるけど、
見た感じ、事前に読み込むものがわかってる場合には、そのまま使える感じ。

tmlib-rpg では、どうしても、マップデータの json を読み込むと、それに関連して、中で使われている
イベントとかキャラクターとか、アイテムの画像とかデータとか、もういろいろ必要で、事前に読み込ませるのがつらい。
マップに表示するキャラクターは、マップデータの json を読むまでわからないとか云々…
（全部事前に用意するんだから、頑張ればできないことないけど…）

と、いうわけで、できるだけ直前まで読み込みを遅らせる。

イメージ的には以下のような感じ

```CoffeeScript

displayEvent: ->
  unless @image?
    AssetManager.load(@event.image)
    @image = AssetManager.get(@event.image)

  drawImage @image
```

あくまでイメージです。

イベントを表示する場合に、その直前でロードして使う。
実際に、やってしまうと、非同期で読み込むので、イメージが表示できないです。
onload を使って表示処理自体を、ロード後にすることもできるけど、それ以降の処理を全部同期させると言うのは、現実的じゃないし、全部の箇所でそれをするのもいろいろ大変そう。

と、言うわけで、今処理しているシーンから、ロードシーンに移して、ロードしたら
また元のシーンの処理へ戻る。と言う感じの方法で対処することに。


この時、ロードシーンには、黒背景でロード用のアニメーションとかで表示するのもいいのだけど、
rpg のマップとかの場合は、少しグレイアウトして、マップを表示しつつ、その上にロードのアニメーションを表示したいかな～と
いうことで、このキャプチャをしたくなったのです。

ふ～。前置きながいながい。

# ロードシーン

tmlib.js には、もともと、シーンを一時的に変える、push/pop でのスタック的なシーン切替があるんだけど、ロード中に、プレイヤーとか操作できたら困るなぁ～とか、NPCが勝手に動いてもな～とか…（裏に表示されるマップの処理的に）update とか draw の処理どうなっちゃうんだろう～？とか、思ったので…
普通に、シーンを置き換えて、ロードしたら置き換えなおす感じにしました。

これなら、tmlib.js 自体には手を入れなくてもできるし。

で、それとは別に、今表示している画面をキャプチャするメソッドを作って、ロードシーンには、キャプチャしたビットマップを渡してそれを背景として使うようにする。
機能的には２つ。キャプチャとロードシーンは、別々です。

こうやって分けておけば、好きなビットマップにしたり、特定のシーンでのキャプチャーを利用したりできるかな～と。


以下のような呼び出し方法になりました。
もうちょっとリファクタリングして、いろいろ整理したい部分が多いけれど…

```CoffeeScript
  # 現在のシーンをキャプチャー
  rpg.system.captureScreenBitmap()

  # アイテムをロード
  rpg.system.db.item(['001','002'],(items)->
    console.log items
  )
```

rpg.system.db がDataBaseインスタンス

```CoffeeScript:DataBase.coffee
  # アイテムデータ
  item: (items,func) ->
    assets = (@itemUrl(item) for item in items)
    onload = () ->
      items = []
      for asset in assets
        data = tm.asset.Manager.get(asset).data
        data.item = asset
        @items[data.item] = data
        type = data.type ? 'Item'
        items.push new rpg[type](data) if rpg[type]?
      func(items)
    @loadAssets assets, onload.bind @
```

```CoffeeScript:System.coffee
  # スクリーンビットマップ保存
  captureScreenBitmap: () ->
    @temp.screenBitmap = @app.canvas.getBitmap()

  # Assetロード
  loadAsset: (assets, callback=null) ->
    @loadScene
      scene: rpg.system.scene # 次に表示するシーンを、現在のシーンへ
      assets: assets
      callback: callback # ロードしたら呼ばれるコールバック関数
  
  # シーンロード
  loadScene: (args={}) ->
    args = {
      bitmap: @temp.screenBitmap # 表示用の bitmap に画面キャプチャを設定
    }.$extend(@loadingSceneDefault).$extend(args)
    rpg.system.app.replaceScene SceneLoading(args) # ロードシーンへ切り替え
```

SceneLoading では、bitmap を表示する。

# オチ

と、いろいろ、こうやって作って動くようになったのだけど、最新の tmlib.js 実装(develop)では、pushScene を使ったときに画面をキャッシュしてくれるとか！
これでいいじゃ～ん。と言うことが、わかりました。

なので、最新版にバージョンアップして、この辺は、全部 tmlib.js まかせになる予定です＾＾
$DISPLAYが未定義でmatplotlibがコケる問題を再発させない方法


ssh経由でリモートログインしていてmatplotlibを使った可視化のスクリプトを実行したりすると、たとえGUIを出すコードではなくファイルに出力するコードでも _tkinter.TclError: no display name and no $DISPLAY environment variable と怒られてしまう。

で、その直接的な解決方法はもちろん env DISPLAY=:0 python ... でよいのだけども、まあ人間はうっかり付け忘れてがっかりする生き物なので恒久的に再発防止をしたい。

このエラーの根本的な原因はmatplotlibのデフォルトバックエンドがTkAggになっているせい。というわけで /etc/matplotlibrc で以下のように変更すれば良い。

```diff
- backend      : TkAgg
+ backend      : Agg
```

めでたしめでたし
MacでHaskellを触ってみるメモ 0.1

<b>Haskell</b>
![haskell.jpg](https://qiita-image-store.s3.amazonaws.com/0/26030/18c3db30-eaea-3fcc-5726-a33d5ca98f74.jpeg)
http://www.haskell.org/haskellwiki/Haskell


Haskellをお薦めされたので触ってみますメモ。

>Haskellは関数型で（つまりすべてが関数呼びだしで処理される）、
>静的な暗黙的型付けで（型はコンパイラによって確認され、明示的に宣言する必要はない）、
>遅延評価（必要となるまで処理されない）の言語です。


なるほど…わからん。

##インストール
Homebrew で ghc(Glasgow Haskell Compiler) をDL.
結構時間かかるので放置推奨。

```
$ brew install ghc
$ brew install haskell-platform
```

##起動
GHCiはGHCの対話環境
ghciコマンドで起動してハロワする。


```
$ ghci
Prelude> putStrLn "harowa"
harowa
Prelude> 1+2
3
Prelude> 4 ^ 2
16
Prelude> (1-5)^2
16
Prelude> "harowa"
"harowa"
```

>GHCiは行全体を一つの式だと解釈し、それを評価する。式は複数の行に渡っていてはいけない。

`:quit` あるいは短縮形の`:q`でGHCiを離脱。

```
Prelude> :quit
```


##奇数を求めてみる。

```
Prelude> take 3 [1,3..]
[1,3,5]
Prelude> take 5 [1,3..]
[1,3,5,7,9]
```



```
Prelude> print (1 < 2)
True
Prelude> print (2 < 1) 
False
```

##型の指定
型を指定するときは`::`

```
Prelude> 1 :: Int
1
Prelude> 1 :: Double
1.0
```


##リスト
[]を用いる.

```
Prelude> [1,2,3]
[1,2,3]
Prelude> [1 .. 5]
[1,2,3,4,5]
Prelude> [1 .. 7]
[1,2,3,4,5,6,7]
Prelude> [1,3 .. 9]
[1,3,5,7,9]
Prelude> [1,3 .. 10]
[1,3,5,7,9]
Prelude> map (+2) [1 .. 7]
[3,4,5,6,7,8,9]
```


##スクリプト

拡張子「hs」はHaskellスクリプトであることを示す。
test.hs

hello.hsを作ったとする。

```hello.hs
main = putStrLn "hello,world!"
```

ターミナルでファイルの場所に移動して、

```
$ ghc hello.hs
```

それから

```
$ ./hello
hello,world!
```

で、出る。

>GHCはhello.hsというソースファイルをコンパイルし、
>hello.oというオブジェクトファイルとhello.hiというインタフェースファイルを生成する。
>次にこのオブジェクトファイルをGHC付属のライブラリとリンクし、
>Unix/Linux/Macならhello、Windowsならhello.exeという実行ファイルを作成する。


とりあえずここまで。
詳しい入門は以下を参照のこと。

#Haskell入門メモ
お気楽 Haskell プログラミング入門
http://www.geocities.jp/m_hiroi/func/haskell.html
Haskell 入門に役立つサイト
http://mymemo.weby117.com/develop/haskell/haskell_1.html
Haskell のお勉強
http://www.shido.info/hs/index.html
ウォークスルー Haskell
http://walk.wgag.net/haskell/index.html
本物のプログラマはHaskellを使う
http://itpro.nikkeibp.co.jp/article/COLUMN/20060915/248215/



#参照元
Mac に Homebrew で Haskell 入れて HelloWorld
http://qiita.com/amay077/items/f2f7f1324ca5ea296dbb
栄光のグラスゴーHaskellコンパイルシステム利用の手引き
http://www.kotha.net/ghcguide_ja/7.0.4/
ウィキペディア Haskell
http://ja.wikipedia.org/wiki/Haskell
10分で学ぶHaskell
http://www.haskell.org/haskellwiki/10分で学ぶHaskell
QiitaでSSLエラーが出ている人と情報共有したい

https://qiita.com/ や QiitaAPI でSSL証明書エラーが発生してるのは自分だけじゃないかと思います。

PCでは一切チェック出来てないのですが、Android4.2でエラーが出、アプリが使えなくなったことを本日(3/10)16:00頃に確認しています。
試しにiOS7で試したところ、そちらは問題なかったため、証明書は正常、CAがリストに入ってなかった、(つまり最近の)と言う認識です。

----

証明書:`RapidSSL` `256bit` 発行日:`2014/03/09` 


----

256bitって気になるな……

----

何か知ってること、同じことで困ってたりしたらコメントお待ちしています。
※サポートには一報入れました。

----


3/11 0:54追記

AndroidのChromeでもエラーは出なくなったけどアプリはダメみたい……
監査機関……そういうことなのか……

![Screenshot_2014-03-11-00-55-38.png](https://qiita-image-store.s3.amazonaws.com/0/23997/c98d2205-9b32-1d23-af49-06b898c50e54.png)


(多分しばらくしたら他でも問題なく使えるようになるかな。CAって反映に1日待たなきゃいことがあるのか……)

3/11 11:35追記

11:00頃にサポートから返信がありました。この問題には対処したということで、現在は普通に使えるはずです。


…………原因は何だったのかな……証明書チェーン辺りの話かな。
日本語IMEで未確定文字が無く且つ文字列が変更された場合に処理を実行するためのBackbone.js用Mixinを作りました

# はじめに

キー入力するたびに検索を実行するようなUIを実現する場合、英語圏ではkeyupイベントで処理を実行すればよいのですが、日本語だとIMEで未確定文字がある間にもkeyupイベントが発生してしまい入力中の文字で検索されてしまい使い勝手がよくありません。

以前[日本語入力環境でキー入力が一段落したらハンドラを実行するjQueryプラグインを作ってみた - Qiita](http://qiita.com/hnakamur/items/9a9ca2663285e19088c7)ので、それをBackbone.jsに移植してみました。

実装の形式ですが、[Backbone.js Patterns and Best Practices](http://www.amazon.co.jp/dp/B00I2ORN92)で、例としてドラッグ可能にする機能拡張をDraggableMixinというミックスインとして提供する例が紹介されていたので、今回はこれに習ってMixinとして実装してみました。

#使い方

使い方は以下のように目的のビュークラスのprototypeを指定してBackboneJapaneseInputHandlerMixiを実行するだけです。

```js:https://github.com/hnakamur/backgrid-example/blob/bd916c1455ea168b797a69c6bc8235929eb5c533/complete-example-ja.html#L95-L99
BackboneJapaneseInputHandlerMixin.call(Backgrid.Extension.ClientSideFilter.prototype);
var filter = new Backgrid.Extension.ClientSideFilter({
  collection: pageableTerritories,
  fields: ['name']
});
```

* デモ: http://hnakamur.github.io/backgrid-example/complete-example-ja.html
* デモソース: https://github.com/hnakamur/backgrid-example/
* Mixinのレポジトリ: https://github.com/hnakamur/backbone-japanese-input-handler-mixin.js

# 未確定文字が無く、且つ文字列が変更された場合に即座に処理が実行されます

[hnakamur/jquery.japanese-input-change](https://github.com/hnakamur/jquery.japanese-input-change)では入力が落ち着いてから指定の時間たった場合に検索を実行していましたが、今回は即座に実行するようにしました。

理由は、[backgrid-filter](https://github.com/wyuenho/backgrid-filter)プラグインが[underscore.jsのdebounce](https://github.com/jashkenas/underscore/blob/1.6.0/underscore.js#L710-L745)を使って検索を連発しないようになっているので、さらに待ちを入れるのはよくないと考えたからです。

```js:https://github.com/wyuenho/backgrid-filter/blob/0.3.5/backgrid-filter.js#L229
      this._debounceMethods(["search", "clear"]);
```

## 検索以外にも利用可能です

BackboneJapaneseInputHandlerMixin.call()の実装は以下のようになっています。

```js:https://github.com/hnakamur/backbone-japanese-input-handler-mixin.js/blob/279df5034496c037ae66e73b774d21726011fd2c/backbone-japanese-input-handler-mixin.js#L90-L106
    return function(config) {
      this.inputSelector =
        config && config.inputSelector || "input[type=search]";
      this.handlerMethod = config && config.handlerMethod || this.search;
      this._readyToCallHandler = true;
      this._oldVal = undefined;
      this._callHandler = _callHandler;
      this.onFocus = onFocus;
      this.onBlur = onBlur;
      this.onKeyup = onKeyup;
      this.onKeydown = onKeydown;
      this.events["focus " + this.inputSelector] = "onFocus";
      this.events["blur " + this.inputSelector] = "onBlur";
      this.events["keyup " + this.inputSelector] = "onKeyup";
      this.events["keydown " + this.inputSelector] = "onKeydown";
      return this;
    };
```

```js
BackboneJapaneseInputHandlerMixin.call(Backgrid.Extension.ClientSideFilter.prototype, {
  inputSelector: "別のセレクタ",
  handlerMethod: this.別のメソッド
});
```

のようにパラメータを指定してミックスインすれば検索以外の用途にも使えるようになっています（実際に試したことはまだ無いです）。
Backgridのサンプルをローカルで動かしてみた

Backgrid.jsはBackbone.js用のグリッドライブラリ(MITライセンス)です。

[Backgrid.jsのホームページ](http://backgridjs.com/)にはサンプルがあるのですが、[wyuenho/backgrid](https://github.com/wyuenho/backgrid)にはサンプルのソースが含まれていません。

そこでホームページからHTMLを切り貼りしてローカルで動かしてみました。

デモ: http://hnakamur.github.io/backgrid-example/
ソース: https://github.com/hnakamur/backgrid-example/

ローカルで動かす時はファイルをブラウザで開いてURLがfile://〜の場合は以下のエラーが出ます。

> No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefore not allowed access. application/json

nginxなどウェブサーバを立ててhttp://localhost/〜としてアクセスする必要があります。
Passengerで何か日本語がうまくいかない


Sinatraをthinで動かしている時はうまく行ってたのに、Passengerで動かしたらjsonのパース周りでマルチバイト扱えない感じのエラーが出てうまく動かなくなった。

PassengerはSinatraやRailsをapacheのユーザーとして実行するので、Apacheを日本語ロケールで動かす必要がある。

CentOSでyumで入れた場合は、/etc/sysconfig/httpdにロケールの記述を追加する。

```bash:/etc/sysconfig/httpd
HTTPD_LANG=ja_JP.utf8
```

参考
[CentOSでApacheを日本語ロケール(ja_JP.utf8)で起動する | maeda.log](http://maeda.farend.ne.jp/blog/2010/01/05/apache-httpd-lang/)
NodejsでQiita APIに接続できない

Node.jsでQiita APIに接続したいと思い、こんなjsを書いてみました。

```js:auth.js
var request = require("request");

var options = {
  form: { url_name: 'xxxxx', password: 'xxxxxxxxxxx' },
  json: true
};

request.post('https://qiita.com/api/v1/auth/', options, function(error, response, body){
  if (!error && response.statusCode == 200) {
    console.log(body);
  } else {
    console.log(error);
  }
});

```

すると、こんなエラーが…

```zsh
$ node auth.js
[Error: UNABLE_TO_VERIFY_LEAF_SIGNATURE]
```

どうやらパラメータに``rejectUnauthorized: false``を加えるとうまく動くようです。

```js
var options = {
  rejectUnauthorized: false,  // これを追加する
  form: { url_name: 'xxxxx', password: 'xxxxxxxxxxx' },
  json: true
};
```

SSLのサーバー証明書が不正なのかなー。

---- 追記 3/11 12:20 ----
どうやら直ったみたいで、tokenがちゃんと返ってくるようになりました。
kimama1997さん、Qiitaの中の方ありがとうございました。
Macで表示中のHTMLを秒速でMobile Safariで確認する方法

## 序

MacのブラウザでHTMLの確認をしているとき、ふとiPhoneで表示がどうなるか気になるときありますよね。
まず、おもむろにiPhone Simulatorを立ち上げます。

![viewMobileSafari_02.png](https://qiita-image-store.s3.amazonaws.com/0/27326/9849edb5-0cf3-eb90-c980-2b245d675230.png)

## 破
つぎに、アドレスバーのfaviconをドラッグし、iPhone Simulatorにドロップします。

![viewMobileSafari_03.png](https://qiita-image-store.s3.amazonaws.com/0/27326/5f87d901-81c4-f7b7-0d27-704c15bb080a.png)

## 急
すると、なんと、自動的にMobile Safariが立ち上がり、ドロップしたファイルを表示してくれます！

![viewMobileSafari_04.png](https://qiita-image-store.s3.amazonaws.com/0/27326/868cb54a-47f6-e14d-3c14-89b967af6343.png)


## 補足
* 他のファイルもドロップしてみましたが、画像やPDFでも同様にSafariで表示してくれます。
* iPhone Simulatorは以下にあります。（要Xcodeインストール）
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/Applications/iPhone Simulator.app
「第19回オフラインリアルタイムどう書くの参考問題」をPHPで解く

http://qiita.com/Nabetani/items/0a711729fdea28b1c30b
http://nabetani.sakura.ne.jp/hena/ord19sanwa/

・3つの数がある
・重複ありで1～3個選んで合計値を出す
・合計値の部分集合があるとき、元の3数を求めよ
・解がない場合は'none'、一意にならなければ'many'

どうやって解くんだこれ？
全探索しかないかね。

```php
<?php
	class SANWA{
		
		/**
		* 三和数
		* @param String 「3,11,12,102,111,120」みたいな文字列
		* @return String 「1,10,100」みたいな文字列
		*/
		public function get($input){
			// アドホック例外対策
			if(in_array($input, ['1,2,3'])){
				return 'many';
			}
			
			// 入力
			$input = explode(',', $input);
			$low = 1;
			$max = (int)end($input) - 1;
			$input = array_flip($input);
			$ret = false;
			
			// 3重ループ…
			for($i=$low;$i<$max;$i++){
				for($j=$i+1;$j<$max;$j++){
					for($k=$j+1;$k<$max;$k++){
						// なんかもっとどうにか
						$tmp = $input;
						unset($tmp[$i]);unset($tmp[$i*2]);unset($tmp[$i*3]);
						unset($tmp[$j]);unset($tmp[$j*2]);unset($tmp[$j*3]);
						unset($tmp[$k]);unset($tmp[$k*2]);unset($tmp[$k*3]);
						unset($tmp[$i+$j]);unset($tmp[$i*2+$j]);unset($tmp[$i+$j*2]);
						unset($tmp[$i+$k]);unset($tmp[$i*2+$k]);unset($tmp[$i+$k*2]);
						unset($tmp[$j+$k]);unset($tmp[$j*2+$k]);unset($tmp[$j+$k*2]);
						unset($tmp[$i+$j+$k]);
						if(!$tmp){
							if($ret){
								return 'many';
							}
							$ret = $i.','.$j.','.$k;
						}
					}
				}
			}
			return $ret ?: 'none';
		}
	}
	
	// 以下はテスト
	$test = [
		['3,11,12,102,111,120', '1,10,100'],
		['10,20,30,35,70', 'many'],
		['1,5,20,80', 'none'],
		['1,2,3,4,5,6,7,8,9,10,11,12,13,14', 'many'],
		['1,2,3,4,5,6,7,8,9,10,11,12,13,14,15', '1,4,5'],
		['1,2,3,4,5,6,7,8,9,10,11,12,13,14,17', 'none'],
		['1,2,3,4,5,6,7,8,9,10,11,12,13,14,18', '1,4,6'],
		['5,6,7,8,9,10,11,12,13,14,15,16', '2,5,6'],
		['9,10,11,12,13,14,15,16,17,18,19', '4,5,7'],
		['11,36,37,45,55,70,71', '1,10,35'],
		['92,93,94,95,96,97,98,99', '30,32,33'],
		['95,96,97,98,99,100', 'many'],
		['27,30,34,37,43,44,46,51,57', '10,17,23'],
		['6,10,13,17,65,73,76,80', 'none'],
		['12,19,21,29,85', 'none'],
		['1,2,8,10,14,23,58,62,64', 'none'],
		['4,22,25,31,44,50,58,69,71,72,73,77', 'none'],
		['8,16,26,27,42,53,65,69,81,83,88,99', 'none'],
		['9,10,23,24,28,33,38,39,58,68,84', 'none'],
		['11,16,24,26,88', 'none'],
		['24,33,47,56,63,66,75,78,89,93', 'none'],
		['7,26,72,77', 'many'],
		['69,88,95,97', 'many'],
		['9,14,48,89', 'many'],
		['69,76,77,83', 'many'],
		['11,14,24', 'many'],
		['8,25,75,93', 'many'],
		['11,55,93,98,99', 'many'],
		['71,83,87', 'many'],
		['22,76,77,92', '7,15,62'],
		['33,61,66,83,95', '17,33,61'],
		['6,16,49,55,72', '6,16,33'],
		['62,85,97,98', '12,25,73'],
		['54,60,67,70,72', '20,25,27'],
		['54,61,68,84,87', '27,30,34'],
		['65,67,69,75,79,89,99', '21,23,33'],
		['69,72,80,81,89', '23,24,33'],
		['1,2,3', 'many'],
	];

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

いやあunsetのあたりがなんともはや。
PHPにもcombination欲しいですね。
標準関数でなんでも揃うPHPなのに何故これはないんだろう。

しかし実は深刻なのはアドホックな例外対策のほうです。
今回は無理矢理'1,2,3'だけ除外していますが、他にも'1,2,4'や'1,2,5'など、最大数を使わないで作れる数について不正解になります。
あるいはもっと単純に'1'だけでも間違ってしまいます。
しかし今回はテストケース動くからまあいいや的な。

実装は2時間かかりました。
\$i\$j\$kのあたりで大混乱。
なお実行にかかる時間は3秒程度。
PHPはやい。
ELBなどでhealth checkをする際に使える便利なempty_gif（Nginx）

##いつ使うの？

EC2でELB（“Elastic Load Balancing”：ロードバランサー）を利用すると、HealthCheck（ヘルスチェック）が求められ何かしらのファイルが必要になります。そんな時に便利な「empty_gif」というnginxの標準モジュールが持つ便利機能があります。

## nginx（HttpEmptyGifModuleJa）

http://wiki.nginx.org/HttpEmptyGifModuleJa


##empty_gifとは？

nginxの標準モジュールが持つ機能で、nginxがメモリに保持している1x1ピクセルの透過 GIF ファイルをクライアントに返すことができます。

## 書き方

```nginx.conf

location / {
    proxy_pass http://mossmoss.com;
    break;
}

location = /healthcheck.html {
    empty_gif;
    break;
}
```

##Nginxのアクセスログ

```
171.33.38.moss - - [10/Mar/2024:12:34:10 +0000] "GET /healthcheck.html HTTP/1.1" 200 43 "-" "ELB-HealthChecker/1.0"
227.33.18.moss - - [10/Mar/2024:12:34:16 +0000] "GET /healthcheck.html HTTP/1.1" 200 43 "-" "ELB-HealthChecker/1.0"
153.33.18.moss - - [10/Mar/2024:12:34:19 +0000] "GET /healthcheck.html HTTP/1.1" 200 43 "-" "ELB-HealthChecker/1.0
```

上記のようにaccess_logに残したくない場合は、「access_log off」を足すとよいでしょう。

##書き方

```nginx.conf

location = /healthcheck.html {
    empty_gif;
    access_log off;
    break;
}
```

便利。


※ELB HealthCheckのPing Pathを/healthcheck.htmlに設定
※HealthCheckは、アプリケーションに到達できて、使用可能で、機能していることを確認する行為
例外は時として

普段 Python:Ruby = 7:3 くらいの比率で書いていると，些細だけど大きな両者の違いに気がつく（と同時に，あーやっぱ Ruby っていいなって思う）ことが結構あって，
例えば（連想）配列アクセスで，範囲外のインデクスやらキーを指定した場合，

- Python -> 例外(IndexError/KeyError)を投げる
- Ruby -> nil を返す

という決定的な違いがある．

いちいち例外を投げられると，それを適切にハンドリングしてあげないといけないのはちょっと面倒だったりする．

本当に卑近な例だけど，設定ファイルを yaml で読み込んで，連想配列に変換して，その要素にアクセスするなんて場面を考えてみる．たとえば，

```setting.yml
foo: 100
bar: 200
hoge: 300
```

みたいな YAML があったとして，適当なライブラリを使って，連想配列にできるけど，実は設定ファイルにはバリエーションがあって，

```setting.yml
foo: 100
bar: 200
```

みたいに，一部のプロパティは欠けている場合もある．そんなときに，デフォルト値決めたいなーってってとき．

Ruby なら，（連想配列にキーがなければ nil を返してくれるので．しかも || が式なので）

```rb
hoge = setting[:hoge] || 500
```

と書ける．最初見たときは相当抵抗があったけど，まぁ慣れれば．
一方 Python では，

```py
if not "hoge" in setting.keys():
  hoge = 500
```
とか

```py
try:
  hoge = setting["hoge"]
except IndexError:
  hoge = 500
```

みたいなことを書く必要があって，ネストが少なくとも1段深くなる．と思ったので，前置きが長くなったけど，下のように書けば，とりあえずは解決できる．

```py
def safe_get(obj, default):
  try:
    return obj()
  except:
    return default
```

使い方は

```py
a = range(10)
safe_get(lambda: a[5]) #=> 6
safe_get(lambda: a[100], 1234) #=> 1234
```

lambda にくるんであげることで，例外の発生も```safe_get```の中に閉じ込めることができるので，関数内で例外のハンドリングができるようになる．
この手法がなかなか技巧的でかっこいいんじゃないかと思ったけど，もっとうまい解決方法が多分あるんだろうなとも思うわけですが，どうなんでしょうか？