OmniAICreator/Qiita-1.07M huggingface dataset:
[tmlib.js]特定の値をランダムに一つずつ取得したいとき

答え

```js
[1,2,3,4,5].shuffle().each(function (num) {
    console.log(num);
});
```

そう、[tmlib.js](http://phi-jp.github.io/tmlib.js/)ならね

他にも、ランダムで問題を取得していろいろやりたいときも応用できます。

```js
[
    {text: ["A", "B"], answer: 0},
    {text: ["A", "B"], answer: 1},
    {text: ["A", "B"], answer: 0},
].shuffle().each(function (question) {
    // 何かする
});
```

結構便利です。

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

ライブラリ作者さんから更なる答えがきたので掲載します。
ありがとうございます！ > @phi san

```js
Array.range(5).shuffle().each(function (num) {
    console.log(num);
});
```
vagrantでログインする際のユーザーを変更する

仮想マシンにログインする方法は２通りある。

1.vagrant ssh 

デフォルトではvagrantユーザーでログインされる。この方法でユーザーを変えたい場合はVagrantfileに下記を追加。

```
config.ssh.guest_port = 22
config.ssh.username = "yusuke"
config.ssh.host = "127.0.0.1"
config.ssh.private_key_path = "/Users/higakiyuusuke/.ssh/id_rsa"
```

これでyusukeユーザーでログインできる。
Vagrantfileを編集したら`vagrant reload`を忘れずに。

2.ssh melody

chef利用時にknifeコマンドを使う使う場合などは仮想サーバーに名前をつけてこちらでやるほうが便利。この方法でユーザーを変えたい場合は~/.ssh/configに下記を追加。

``` 
Host melody
HostName 127.0.0.1
User yusuke
Port 2222
UserKnownHostsFile /dev/null
StrictHostKeyChecking no
PasswordAuthentication no
IdentityFile /Users/higakiyuusuke/.ssh/id_rsa
IdentitiesOnly yes 
LogLevel FATAL
```

両方とも鍵認証でログインする場合を想定しています。
NSCopying サンプル


```swift
import Foundation

class Product : NSObject, NSCopying {
    var _type: String

    init(_ type: String) {
        _type = type
    }

    func copyWithZone(zone: NSZone) -> AnyObject! {
        var newInstance = Product(_type)
        return newInstance
    }
}

var foo = Product("test")
var bar = foo.copy() as Product

if (foo === bar) {
    println("reference")
} else {
    println("copy")	// copy
}
```

## 概要

+ コピー機能を実装するクラスが `NSObject` `NSCopying` を継承していること
+ コピー機能を実装するクラスに `copyWithZone` メソッドを実装すること
+ コピー先の変数に代入する際、`copy()` メソッドを呼び、`as クラス名` を最後に付与すること
（付けなくても動作するが、`Variable 'bar' inferred to have type 'AnyObject!', which may be unexpected` と warning が出る）


### P.S.

`@NSCopying` については期待する動作にならないので追って調査

ref https://developer.apple.com/library/prerelease/ios/documentation/swift/conceptual/swift_programming_language/Attributes.html
MagicalRecord 2.2メモ


試行錯誤してだいぶ理解がまとまってきたのでメモです。わりとお手軽に使えるライブラリですが、CoreDataの基礎知識がないとハマります（ハマりました）。

# 起動と終了
## 使いはじめる

`MagicalRecord:setupCoreDataStack`メソッドで永続ストアの初期化と同時にアプリケーションデフォルトの`NSManagedObjectContext`を初期化する。

```objectivec
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    // 色んな処理

    [MagicalRecord setupCoreDataStack];
    return YES;
}
```

## 使い終わる

ドキュメントによれば`UIApplication:applicationWillTerminate:`で`MagicalRecord:cleanUp`を呼べ、とある。

```objectivec
- (void)applicationWillTerminate:(UIApplication *)application
{
    [MagicalRecord cleanUp];
}
```


# NSManagedObjectContextの使い分け

MagicalRecordを使うとNSManagedObjectContextに、NSManagedObjectContext取得用のカテゴリが追加される。

## NSManagedObjectContext:MR_defaultContext
とりあえずNSManagedObjectContextが欲しいときはコレ。

```objectivec
NSManagedObjectContext *context = [NSManagedObjectContext MR_defaultContext];
```

## NSManagedObjectContext:MR_contextWithParent:

NSManagedObjectContextを引数として渡すと、そのオブジェクトを親に持つNSManagedObjectContextを返す。親子関係を持ったオブジェクトが欲しいときに利用する。

```objectivec
- (void) viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];

    NSManagedObjectContext *localContext = [NSManagedObjectContext MR_contextWithParent:self.moc];

    // localContextで行う処理を書く
}
```

## NSManagedObjectContext:MR_contextForCurrentThread

呼び出し時のスレッドを考慮してNSManagedObjectContextを返す。

* メインスレッド（UIスレッド？）であれば、アプリケーションデフォルトのNSManagedObjectContextを返す
* バックグラウンドスレッド（通信スレッド等）であれば、アプリケーションデフォルトのNSManagedObjectContextを親に持つNSManagedObjectContextを返す


# NSManagedObjectの操作
## 生成

NSManagedObjectにもカテゴリが追加されています。`NSManagedObject:MR_createInContext:`でオブジェクトの生成。

```objectivec
// スレッドを考慮したコンテキストで生成(内部的にMR_contextForCurrentThreadを使用)
SomeNSManagedObject *obj = [SomeNSManagedObject MR_createEntity];

// コンテキストを指定して生成
SomeNSManagedObject *obj = [SomeNSManagedObject MR_createInContext:localContext]
```

## 保存

コンテキストで保持しているNSManagedObjectを保存する。

```objectivec
// 非同期で保存
[localContext MR_saveOnlySelfWithCompletion:nil];

// 同期保存
[localContext MR_saveOnlySelfAndWait];
```


# tips

## MagicalRecord:saveWithBlock:でまとめて保存

`MagicalRecord:saveWithBlock:`を使用すると、NSManagedObjectの操作と保存を1ブロックで行うことが出来ます。

```objectivec
[MagicalRecord saveWithBlock:^(NSManagedObjectContext *localContext) {
    SomeNSManagedObject *obj = [SomeNSManagedObject MR_createInContext:localContext]
    obj.name = @"hogehoge;
    obj.lastAccess = [NSDate date];
}];
```


----

あとで書き足そうと思っているもの

* マージ
* マイグレーション
あなたがそのうち躓く、MacのEclipse LunaにJava8を設定する方法。またはJavaが配置される場所。

EclipseはバージョンLunaからデフォルトでJava8に対応しています。
Java8をLunaに設定するためには、インストール後、Javaが置かれる場所を知って置かなければならないのですが、それを探すのが意外と手間。which javaで見つかる場所ではうまく行きません。

本投稿の内容を覚えておくと、Lunaを使うときにスムーズにJava8を設定できます！

# 主題！Mac で Java8がインストールされる場所。

```
/Library/Java/JavaVirtualMachines/jdk1.8.0_XX.jdk/Contents/Home
```

です。人によっては、上記情報だけで十分役に立つでしょう。

以下、Eclipse LunaとJava8のインストール＋設定手順
# セットアップ
## ダウンロード
[Eclipse Luna](https://www.eclipse.org/downloads/index-developer.php)
[Java8](http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html)
をダウンロードします。
Eclipseは解答して、Javaはインストールします。

## セットアップ
Lunaを立ち上げて、Eclipse→Preference(もしくは環境設定)→Java→Installed JREsを開きます。
Addを押して、
![スクリーンショット 2014-06-13 13.25.49.png](https://qiita-image-store.s3.amazonaws.com/0/25176/52f61888-601a-fb14-6c88-c846fe396e58.png)

MacOS X VMを選びます。
![スクリーンショット 2014-06-13 13.26.16.png](https://qiita-image-store.s3.amazonaws.com/0/25176/a98e5005-271e-b029-529f-5ba45204892b.png)

JREの設定で、
![スクリーンショット 2014-06-13 13.28.02.png](https://qiita-image-store.s3.amazonaws.com/0/25176/c4775b9f-1571-f7b8-52a5-abb4b61ade87.png)

JRE home:に、
/Library/Java/JavaVirtualMachines/jdk1.8.0_XX.jdk/Contents/Home
XXは替えて入力するとOK。

# 。。。ホントはもうちょっと簡単に設定できるので、告白。
ホントは、設定画面で、（Addではなく）Searchボタンを押すとJava8が出てくるので、こちらのほうが簡単な事を告白しておきます。

苦労してJava8のパスを見つけたので、皆さんに報告したかったのです。。。
Capistrano3で複数のリリースを一つにまとめようとしたが諦めた

Capistrano3で複数コンポーネントのリリースを一つにまとめようとしたが諦めた。
ここでは諦めた理由をメモしておく。
db:migrateなど同一のタスクを利用する同じ種類のコンポーネントなら一つにはまとめられそうではある。

## やりたかったこと

[capistrano-multiconfig](https://github.com/railsware/capistrano-multiconfig)で以下のような感じで複数コンポーネントのリリースを1つにまとめてしまう。

```bash
$ cd cap-all
$ cap app:staging deploy # rails app リリース
$ cap static:staging deploy # 非rails static リリース
```

## 諦めた理由

capistranoでは以下のような順番で処理が行われる([該当コード](https://github.com/railsware/capistrano-multiconfig/blob/5f352ea4321ccda036bdde71eae6ecaee1785d40/lib/capistrano/multiconfig.rb))。
1. 定義されたload:defaultsタスクで初期値読み込みなど([19行目](https://github.com/railsware/capistrano-multiconfig/blob/5f352ea4321ccda036bdde71eae6ecaee1785d40/lib/capistrano/multiconfig.rb#L19))
2. 指定されたconfig読み込み([34行目から](https://github.com/railsware/capistrano-multiconfig/blob/5f352ea4321ccda036bdde71eae6ecaee1785d40/lib/capistrano/multiconfig.rb#L34-L39))

例えばbundle installをするためのcapistrano/bundlerはタスク定義とload:defaultによる初期値設定が同じファイルで定義されている([該当コード](
https://github.com/capistrano/bundler/blob/master/lib/capistrano/tasks/bundler.cap))。
このため

* 1.の処理前にcapistrano/bundlerをrequireするとタスクが定義され[タスク間のhook](https://github.com/capistrano/bundler/blob/master/lib/capistrano/tasks/bundler.cap#L53)が決められてしまう。
 * (bundleが必要なコンポーネントとそうでないコンポーネントがある場合でも、共通でbundleのタスクが実行されてしまう)。
* configでrequireするとタスクとタスク間のhookはわけられるが、load:defaultsタスクが実施されないため初期値が定義されない。

上記どちらの方法も対応は可能だと思うが複雑になりそうだと思ったので諦めた。
パーミッション早見表

r 4 読出可能(read)
w 2 書込可能(write)
x 1 実行可能(execute)

本人 / グループ / 他人 の順で。

パーミッションと関係があるもので`umask`というものがあります。これは`0002`などの数値で、ファイル及びディレクトリ作成時のデフォルトパーミッションを規定します。

* ディレクトリ : 0777 - umask値 = 0775
* ファイル : 0666 - umask値 = 0664

がデフォルト値となります。umask値は、

```linux
$ umask
```
で確認できます。
SAP GUIのインストール方法

需要があるかは別として、SAP GUIのインストール方法を紹介する。

インストーラーがあればインストールに手間取ることはない。ただ、このインストーラーの場所が死ぬほどわかりにくいのでここに書いておく。

## インストーラーの場所
まず[サービスマーケットプレイス](http://service.sap.com/patches)に入り、以下のメニューをたどる。

```
Browse our Download Catalog
SAP Frontend Components
SAP GUI FOR WINDOWS
SAP GUI FOR WINDOWS 7.20 CORE or 7.30 CORE
Win32
```

インストールサーバーを使う場合？は[こちら](https://websmp208.sap-ag.de/swdc)

```
Installations and Upgrades
Browse our Download Catalog
SAP Frontend Components
SAP GUI FOR WINDOWS
SAP GUI FOR WINDOWS 7.20 CORE or 7.30 CORE
Installation
```

こちらからインストールすればOK。
ただし、ダウンロードファイルは800M近くあるので注意が必要だ。

＜参考＞
[SAP GUI Installer](http://scn.sap.com/thread/3226233)
BeanとUtility

ある日の偉い人「Beanは部品で機能をまとめたものな」
俺「ほう」
またある日の偉い人「Utilityクラスっていう共通処理を集めたクラスがあるんな」
俺「ほうほう」

……どっちも機能をまとめた奴じゃねえか！何が違うんだおまえら！とか1人で勝手に激おこプンプン丸状態だったので調べてまとめ。
ただし間違えてるかもしれない。

#定義
##Bean
特定の機能を持ったプログラム。
privateな変数（プロパティ）とpublicなアクセス経路（アクセスメソッド：getter/setter）を持つ。
**インスタンス化して用いる。**
###サンプル
```java:InfoBean.java
public class InfoBean {
	/** ID */
	private String id;
	/** 名前 */
	private String name;

	/**
	 * IDを返却
	 * @return id
	 */
	public String getId() {
		return id;
	}
	/**
	 * IDをセット
	 * @param id ID
	 */
	public void setId(String id) {
		this.id = id;
	}
	/**
	 * 名前を返却
	 * @return name
	 */
	public String getName() {
		return name;
	}
	/**
	 * 名前をセット
	 * @param name 名前
	 */
	public void setName(String name) {
		this.name = name;
	}
}
```


##Utility
staticな変数とstaticなメソッドのみからなる。
**インスタンス化を避けるため** コンストラクタは基本的にprivateかprotectedで宣言。
###サンプル
java.lang.Mathとかあのあたり
→ http://docs.oracle.com/javase/jp/6/api/java/lang/Math.html


#まとめ
たぶん「インスタンス化して使うかどうか」が一番の違いだと思う。
インスタンス化するってことはそいつが死ぬまでプロパティが保持されるってことになるので（上の例だとIDとNameをそれぞれ持たせたのを作れる）
Beanの利用例としてあるメソッドの引数として生成したインスタンスをぶん投げたりして **共通データ** を利用したり出来る。
一方でUtilityは **共通処理** としてあらゆる場所から引っ張ってくることが出来る。

ということで
Bean = 共有するデータ
Utility = 共通する処理

とおぼえておくことにした。 **なおあっているのかは不明の模様**
カレントディレクトリのPDFをTIFFに変換する

Linux上でghostscriptを使ってカレントディレクトリにある全てのPDFファイルをTIFFファイルに変換します。

```bash
#!/bin/bash

files="./*.pdf"
for filepath in ${files}
do
   pdfname=`basename ${filepath}`
   tifname=`echo ${pdfname} | sed "s/.pdf/.tif/"`
   gs -q -dNOPAUSE -dBATCH -sDEVICE=tiffg4 -r400 -sOutputFile=${tifname} ${pdfname}
done
```
B4で1ページ1ファイルになっている地積測量図PDFを変換する為に書きました。
`-sDEVICE=tiffg4`と`-r400`を指定すると<a href="http://www.moj.go.jp/MINJI/minji101.html">不動産登記規則第73条第１項の規定により法務大臣が定める土地所在図等の作成方式</a>に従ったファイルができてくるのでオンライン申請に使えそうです。
SystemStackError - stack level too deep


  actionpack (4.0.0) lib/action_dispatch/middleware/reloader.rb:70:in `'

##原因不明の謎エラー
画像アップロードのさいにでる。

macだけで、サーバやubuntuではエラーが出ない。
rmagickを明示的に指定する必要があった。

```ruby
#gem 'rmagick' <-　ここを変更
gem 'rmagick', :require => 'RMagick'
```
ググってやっと見つけたのがこれ
http://stackoverflow.com/questions/22206350/stack-level-too-deep-when-using-carrierwave-versions-with-sidekiq

半日かかった
GroupとHGroup/VGroupのレイアウト

下記のようなレイアウトをしたい場合、GroupとHGroup/VGroup のプロパティの使い方を個人的に混乱しており、結構迷うので覚え書き。

![layout.png](https://qiita-image-store.s3.amazonaws.com/0/3184/fb606178-7b49-23e6-d603-787a47fb8f97.png)

```Layout.mxml
<s:Group width="100%">
    <s:HGroup>
        <s:Button label="A"/>
        <s:Button label="B"/>
    </s:HGroup>
    <s:HGroup right="10">
        <s:Button label="C"/>
        <s:Button label="D"/>
    </s:HGroup>
</s:Group>
```
setTimeoutくんとsetIntervalさんの引数と仲良くなれなれませんでした

ということで

```coffeescript
class after
  constructor: (time) ->
    return new after(time) unless this instanceof after
    @time = time
  using: ->
    (@args = Array::slice.call(arguments)) and @
  run: (callback) ->
    if @args?
      @args.unshift(callback, @time)
      setTimeout.apply(null, @args)
    else
      setTimeout(callback, @time)

class eachTime
  constructor: (time) ->
    return new eachTime(time) unless this instanceof eachTime
    @time = time
  using: ->
    (@args = Array::slice.call(arguments)) and @
  run: (callback) ->
    if @args?
      @args.unshift(callback, @time)
      setInterval.apply(null, @args)
    else
      setInterval(callback, @time)
```

```coffeescript
after(300).run ->
  # do something

after(500).using('hoge', 'fuga').run(callback_having_two_args)

eachTime(100).run ->
  # do something

eachTime(50).using('foo', 'bar').run(callback_having_two_args)
```

JS版

```js
var after, eachTime;
 
after = (function() {
  function after(time) {
    if (!(this instanceof after)) {
      return new after(time);
    }
    this.time = time;
  }
 
  after.prototype.using = function() {
    this.args = Array.prototype.slice.call(arguments)
    return this;
  };
 
  after.prototype.run = function(callback) {
    if (this.args != null) {
      this.args.unshift(callback, this.time);
      return setTimeout.apply(null, this.args);
    } else {
      return setTimeout(callback, this.time);
    }
  };
 
  return after;
})();
 
eachTime = (function() {
  function eachTime(time) {
    if (!(this instanceof eachTime)) {
      return new eachTime(time);
    }
    this.time = time;
  }
 
  eachTime.prototype.using = function() {
    this.args = Array.prototype.slice.call(arguments)
    return this;
  };
 
  eachTime.prototype.run = function(callback) {
    if (this.args != null) {
      this.args.unshift(callback, this.time);
      return setInterval.apply(null, this.args);
    } else {
      return setInterval(callback, this.time);
    }
  };
 
  return eachTime;
})();
```
Effect と Animate の整理

今の時代、Adobe Flex を使用している人も少ないと思いますが、個人的に、使用方法や概念を混乱していたので整理します。

下記のMoveEffect、とMoveAnimateは同じ動作をします。

```MoveEffect.mxml
	<fx:Declarations>
		<!--MoveEffect-->
		<s:Move id="moveAnimate"
				target="{moveContainer}"
				duration="1000"
				xFrom="100"
				xTo="500"
				yFrom="100"
				yTo="500">
		</s:Move>
	</fx:Declarations>
```

```MoveAnimate.mxml
	<fx:Declarations>
		<!--Animation-->
		<s:Animate id="moveAnimate"
				   target="{moveContainer}"
				   duration="1000">
			<s:SimpleMotionPath property="x"
								valueFrom="100"
								valueTo="500"/>
			<s:SimpleMotionPath property="y"
								valueFrom="100"
								valueTo="500"/>
		</s:Animate>
	</fx:Declarations>
```

```Main.mxml
protected function moveBtnClickHandler(event:MouseEvent):void
{
	moveAnimate.play();
}

```
いまさらHTML5


## はじめに

HTML5でWebの世界が変わるよ！って言われても
私の仕事場では、IEの古いバージョンをサポートすべしと言われ
HTML5についての知識が無くとも、全く問題ありませんでした。

しかし、XPがお亡くなりになり、やっと使いドコロが出てくるのではと
いまさらながらHTML5を勉強していきたいと思います。


## 勉強候補

* [__FileAPI__](http://qiita.com/tnakagawa/items/68260254045dce44c913) <br>ローカルファイルが読み込める！？、だいたいD&Dとセット
* [__WebSocket__](http://qiita.com/tnakagawa/items/f7c764d044ba56d9e0fd) <br>ブラウザとサーバで双方向通信！？チャット以外に何に使うんだろ
* [__Workers__](http://qiita.com/tnakagawa/items/e1ab9b4ab9e25f71f1e8) <br>javascriptで複数スレッドが可能！？使いドコロあるのかな
* [__まとめ（簡易プレイヤー）__](http://qiita.com/tnakagawa/items/fed9eb58fea69e7fa90b) <br>audioタグやvideoタグを用いて簡易プレイヤーを作ってみる

---

特に問題なければ以下の条件でサンプルを作成してみます。

* JQueryと共に利用する
* サーバ側はTomcatを利用する

===

他に何を勉強していけばいいんでしょうか？
キーワードだけでも、教えて頂けるとありがたいです。
Rails table relationship using foreign key

:paperclip: Before I forget the logic, It is better to write it in a blog. 

  It is very confusing to me when it comes to relations of tables since I am new to rails. The results always gives wrong queries that I don't want to deal with. But this time I had managed to do the relations of 2 tables using 2 foreign keys. 

:arrow_forward: Let us have the scenario:
Let us say we had employee model but each employee wants to give other employees some thanks points. (Similar to likes but in some terms it differs). So there will be a taker of thanks employee, and a giver of thanks employee. But take note that a taker can also be a giver and a giver can also be a taker.
:arrow_forward: This is the relations. I have nested employee model and thank model.
The thank model consists of taker_id and giver_id. Employee id must be entered in that two fields.

employee.rb

    has_many :thanks_givers, foreign_key: :giver_id, dependent: :destroy, class_name: Thank.name
    has_many :thanks_receivers, foreign_key: :taker_id, dependent: :destroy, class_name: Thank.name
    has_many :givers, through: :thanks_receivers
    has_many :takers, through: :thanks_givers

thank.rb

    belongs_to :employee
    belongs_to :giver, class_name: Employee.name
    belongs_to :taker, class_name: Employee.name

So in the ThanksController we can now have

    @employee = Employee.find(params[:employee_id])
    @distributed = @employee.takers
    @received = @employee.givers

:ballot_box_with_check: We were now be able to get the employee id, the taker_ids and the giver_ids.
:question: But what if we want the thanks points for this month and three months ago

:arrow_forward: In the employee model we can add 2 scopes to select thanks point for this month and thanks points 3 months ago.

    scope :this_month, -> { where("core_thanks.created_at BETWEEN ? AND ?",      Time.now.beginning_of_month, Time.now)}

    scope :three_months_ago, -> { where("core_thanks.created_at BETWEEN ? AND ?", 3.months.ago, Time.now)}

On thanks/index.html.erb add

    <% @distributed.this_month.each do |employee| %>
      <%= employee.name %>
    <% end %>
    <% @received.this_month.each do |employee| %>
      <%= employee.name %>
    <% end %>
    <% @distributed.three_months_ago.each do |employee| %>
      <%= employee.name %>
    <% end %>
    <% @received.three_months_ago.each do |employee| %>
      <%= employee.name %>
    <% end %>
コードテンプレートにより Logger を常に追加する。

# 編集する位置

※プロジェクトの固有の設定でもOK

* ウィンドウ(W) 
* 設定(P)
* Java
    * コード・スタイル
        * コード・テンプレート

# 編集内容

## コード/新規 Java ファイル

```java:importの追加
${filecomment}
${package_declaration}

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

${typecomment}
${type_declaration}
```

## コード/クラス本文

```java:オブジェクトの作成の定型句を記述
	/** logger. */
	protected static final Logger logger;
	static {
		logger = LogManager.getLogger(${type_name}.class);
	}
```

あっ。　これ log4j2 の記述 なんで 適宜使うロガーに変えてくださいね。
AWS 権限とか、公開とか、お金とか　小ネタ

# AWS IAM account

AWSのベストプラクティスでは、IAMアカウントに付与する権限は必要なものに絞ることとなっていますが、その権限を調べるのが意外と大変という経験はありませんか？　私はあります。
下記のアマゾンお手製ツールをつかうと　そのあたりが若干らくになるかも。
下記のサービスで使用するpolicy を生成してくれます。

* IAM
* S3 Bucket
* SNS Topic
* SQS Que

http://awspolicygen.s3.amazonaws.com/policygen.html



# AWS S3 一部 backet 一般公開するには

下記で詳しく説明しています。
http://www.jppinto.com/2011/12/access-denied-to-file-amazon-s3-bucket/

1. 上記policygen toolでS3 GetObject　policy を作成しておきます
1. AWS Web console S3 対象バケットを選択してproperties を開く
1. "Add bucket policy" を選択
1.  作成しおいいたpolicyをペースト　

例：
``` S3 Bucket Policy
{
  "Id": "Policy1402621765000",
  "Statement": [
    {
      "Sid": "Stmt1402621761922",
      "Action": [
        "s3:GetObject"
      ],
      "Effect": "Allow",
      "Resource": "*",
      "Principal": {
        "AWS": [
          "*"
        ]
      }
    }
  ]
}
```


# AWS コスト見積もり

　下記便利なページがあります

(English)http://calculator.s3.amazonaws.com/index.html
(日本語版)http://calculator.s3.amazonaws.com/index.html?lng=ja_JP#
Android Hardwareにカメラデバイスファイルを確認

## 背景
* Android HardwareとUSB WebCamは、接続できるかどうかことを確認したい
* Android Hardwareに、デバッグ手法を把握したい
* LinuxOSに、/dev/videoXで、カメラ情報を把握できることが分かっている

## 目的
* Android Hardware上に、カメラデバイスファイル(/dev/videoX)を確認できる

## 環境
* windows7
* ADT v22.6.2
* Nexus7
* java8
* Android 4.4.2(API 19)

## 経過
#### 【Windows7側】Nexus7ドライバをインストールする
* [詳しい方法は、ここに参照してください](http://androidlover.net/tablet/nexus7-2/nexus7-2013-driver-install.html)
* [Google USB Driverのダウンロード](http://developer.android.com/sdk/win-usb.html)
* インストール
 * Nexus7を、USBケーブルで、Windows7と繋がる
 * ダウンロードしたlatest_usb_driver_windows.zipファイルを解凍
 * 管理者として、デバイスマネージャーを開ける
 * ほかのデバイスに、Nexus7上に、右クリックして、「ドライバーソフトウェアの更新」をクリックする
 * 上記に解凍したフォルダに、「usb_driver」を選択し、インストールする

#### 【Nexus7側】Android デバイスで USB デバッグを有効にする
* [詳しい方法は、ここに参照してください](http://docwiki.embarcadero.com/RADStudio/XE5/ja/Android_%E3%83%87%E3%83%90%E3%82%A4%E3%82%B9%E3%81%A7_USB_%E3%83%87%E3%83%90%E3%83%83%E3%82%B0%E3%82%92%E6%9C%89%E5%8A%B9%E3%81%AB%E3%81%99%E3%82%8B)
* 「開発者向けオプション」を表示できるようにする
 * 設定→<デバイス種別>情報→ビルド番号、7回タッブ
* 開発者向けオプション→USBデバッグを有効 

#### adb.exe の使い方
* [参照](http://qiita.com/t2low/items/cb37cec5f864c4748e14)
 * Qiitaの投稿なので、とても理解しやすいよ
* cd Path/to/sdk/platform-tools
* adb.exe shell
* ll /dev

#### 結果
![android_camera_device_info.png](https://qiita-image-store.s3.amazonaws.com/0/13451/53cc1955-6aed-2bc6-d3f7-f508a925888c.png)

* 上記の情報より、Nexus7は、三つのカメラをサポートする
 * front camera
 * back camera
 * USB WebCame(後で確認)
[覚書]Goでenumっぽいので表示名を作る

いつも忘れるのでメモ

time.Monthとかtime.Weekdayあたりが参考になる。
Goにはenum的なものがないので代わりに定数とiotaを使う。
(こういう時なんていう表現なのかわらないのだけど)この時int型をwrapした
enum用の型を作成してそいつにメソッドつける感じで対応する。

```go:enum.go

type EnumType int

const (
  One EnumType = iota //初期値を0以外にする場合は iota+1とかで調整
  Tow
  Three
)

//EnumType の文字列表現
var enumTypes = [...]string{
  "一",
  "二",
  "三",
}

//Enum→string
func (e EnumType) String() string { return enumTypes[e]}

//string→Enum こっちは微妙
func ParseEnumType(name string) EnumType {
	for i, display := range enumTypes {
		if name == display {
			return EnumType(i)
		}
	}
	return One  
}

//int → Enum は EnumType(int)とかでやるはず
```
OSXでfish shellを使う


## インストール

`homebrew`でインストールできる

```
brew install fish
```

デフォルトのシェルを変更する
`which`コマンドでfish本体のある場所を調べて
`chsh -s`で指定する

```
which fish
chsh -s /usr/local/bin/fish
```

`chsh`して`chsh: /usr/local/bin/fish: non-standard shell`と怒られる場合は
vimなどで`/etc/shells`を開いてファイル末尾に`/usr/local/bin/fish`を追記するとよい

ターミナルを再起動するとシェルがfishになっているはず

## oh-my-fish

fishは素の状態でもかなり補完効いてくれたり便利なんだけど
色々設定したい場合、zshの`oh-my-zsh`のような設定を管理するフレームワークの`oh-my-fish`がある

導入は簡単で[公式サイト](https://github.com/bpinto/oh-my-fish)の以下のコマンドを叩けばよい

```
curl -L https://github.com/bpinto/oh-my-fish/raw/master/tools/install.fish | fish
```

### テーマ変える

fishの設定ファイルは`.bashrc`や`.zshrc`とかではなくて
`$HOME/.config/fish/config.fish`というファイル

[ここ](https://github.com/bpinto/oh-my-fish/tree/master/themes)から好きなテーマ選んで`config.fish`の該当箇所を以下のように書き換える
`fishface`とかfish感出ていいと思う

```config.fish
# Theme
# set fish_theme robbyrussell
set fish_theme fishface
```

![fish.png](https://qiita-image-store.s3.amazonaws.com/0/36767/461b132d-6c2b-bacd-ae7e-d1818f50e68f.png "fish.png")

かわいい
ドットインストール、SublimeText2 講座で使えてなかったコマンド

#### Cmd + /

* 選択しているもしくはカーソル位置を言語に応じてコメント化
* Set syntax されている必要がある
* Syntaxの設定は、アプリ右下から選択もしくは、拡張子を保存、もしくは、コマンドパレット( Cmd + Shift + P)をひらいて、Set Syntax

#### Cmd + D

* カーソル位置の単語を選択
* 複数箇所選択して押すと、マルチカーソル化
* Escでマルチカーソル解除

#### Cmd + Ctrl + G

* 開いているファリイルの、現在のカーソル位置の単語を全てマルチカーソル化

#### Cmd + Shift + P
* コマンドパレットを開く

#### Cmd + P
* GoToAnything
* 任意のファイルに移動
* :78 とすると、開いたファイル行数に移動
* @hoge とすると、開いたファイルのシンボル（関数など）に移動

#### Snippet
* コマンドパレットから、任意のスニペットを選択してペーストできる
* 独自のスニペットも作成可能 http://dotinstall.com/lessons/basic_sublimetext/10510

#### PackageControl
* https://sublime.wbond.net/ からインストール可能なPackageManager
* 簡単にパッケージをインストールできるようになる
* コマンドパレットで、install と入れると様々なパッケージをインストールできる

#### Window分割
* Cmd + Option + 数字
  横に数字の数だけウィンドウ分割

* Ctrl + 数字 
  指定の数字の横分割のウインドウに移動

* Cmd + Shift + Option + 数字
  縦に数字のウィンドウ分割

* Ctrl + Shift + 数字
  指定の数字の縦分割のウィンドウに移動

* Cmd + Option + 1 
  分割解除（ウィンドウの数が1)
Shipyard をお試しする為の Vagrantfile

[Shipyard](http://shipyard-project.com/) - Open Source Docker Management

```rb:Vagrantfile
VAGRANTFILE_API_VERSION = "2"

SHIPYARD_HOST_IP = "192.168.33.10"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "yungsang/boot2docker"

  config.vm.network :forwarded_port, guest: 2375, host: 2375, auto_correct: true
  config.vm.network :forwarded_port, guest: 2375, host: 4243, disabled: true

  config.vm.define "shipyard" do |shipyard|
    shipyard.vm.provider "virtualbox" do |v|
      v.memory = 2048
    end

    shipyard.vm.network "private_network", ip: SHIPYARD_HOST_IP

    shipyard.vm.provision :docker do |d|
      d.pull_images "shipyard/deploy"
      d.pull_images "shipyard/redis"
      d.pull_images "shipyard/router"
      d.pull_images "shipyard/lb"
      d.pull_images "shipyard/db"
      d.pull_images "shipyard/shipyard:latest"
      d.run "shipyard/deploy",
        args: "--rm -v /var/run/docker.sock:/docker.sock",
        cmd: "setup",
        auto_assign_name: false, daemonize: false
    end

    shipyard.vm.network :forwarded_port, guest: 8000, host: 8000

    shipyard.vm.provision :shell do |s|
      s.inline = <<-EOT
        # Wait to complete starting servers
        sleep 5
      EOT
    end

    shipyard.vm.provision :docker do |d|
      d.pull_images "shipyard/agent:latest"
      d.run "shipyard_agent",
        image: "shipyard/agent",
        args: "-v /var/run/docker.sock:/docker.sock -p 4500:4500"
    end
  end
end
```

```bash
$ vagrant up
$ open http://localhost:8000
```

Username: admin Password: shipyard

Cf.) https://github.com/shipyard/shipyard

※) 使われている [docker-py](https://github.com/shipyard/docker-py) が古いせいか、コンテナの作成時に一部微妙な感じになります。(port の publish とか)
Sphinx(latex→PDF)で図がはみ出さないようにする方法

Sphinxの`sphinxcontrib-plantuml`や`sphinx.ext.graphviz`を使って図を書いていたら、すごく縦長になってページの下にはみ出てしまう。

この場合、下記の対処をするとうまく行った。

* adjustboxを使って、はみ出しそうな場合にはリサイズする。
* ページいっぱいになってしまう場合は、自動的に別ページに逃がせるよう、figureを使う。

プリアンブルを`conf.py`に追記しておけば、どんな図でも同じように対応できる。

```lang:conf.py
# 末尾に追加

latex_elements['preamble'] = r'''
\usepackage[export]{adjustbox}
\usepackage{letltxmacro}
\LetLtxMacro{\origincludegraphics}{\includegraphics}
\renewcommand*\includegraphics[2][max width=\textwidth,max height=\textheight,keepaspectratio]{%
\begin{figure}[htbp]
\origincludegraphics[#1]{#2}
\end{figure}
}
'''
```
N個中K個のくじが当たり　引いたら戻さない条件でn回引いたうちk個当たりである確率

超幾何分布
http://ja.wikipedia.org/wiki/%E8%B6%85%E5%B9%BE%E4%BD%95%E5%88%86%E5%B8%83

超幾何分布とは K 個の成功状態をもつ N 個の要素よりなる母集団から n 個の要素を非復元抽出したときに k 個の成功状態が含まれている確率を与える離散確率分布の一種

![無題の画像.png](https://qiita-image-store.s3.amazonaws.com/0/1642/1f816b63-b373-da1e-0224-c2b4652b3cd8.png)
x86-64 アセンブリ読むのに役立つサイト

http://homepage1.nifty.com/herumi/prog/x64.html#GCC64

http://codezine.jp/article/detail/420

http://www.mztn.org/lxasm64/amd04.html

http://sunnyone41.blogspot.jp/2012/09/x86x8664.html
↑のサイトにある早見表は大変便利である

http://sandpile.org/
↑regとかopcodeのテーブルがある

また足すかも
複数のExcelが起動しているときにrubyのWIN32OLEで特定のブックを操作する

`WIN32ole.connect('Excel.Application')`とすると起動中のEXCELオブジェクトが取れます。

しかし、複数起動していると、一番初めに起動したEXCELしか取れず、残念な感じ。

`WIN32ole.connect(ブックのファイル名)`とすると、複数起動していても、特定のブックが取れます。

そのブックが開かれていない場合は新たに開きます。

```rb
require 'win32ole'

work_book = WIN32OLE.connect('C:/test.xlsx') # 絶対パスでないとダメっぽい
# WIN32ole.connect('Excel.Application')ではExcelアプリケーションのオブジェクトが返るがこれはワークブックのオブジェクトが返る。

work_book.Name #=> test.xlsx
```
RaspberryPi + Pidora 20 + 外付けHDD｜Macで使えるTime Machineを作る バグ回避編

##初めに
前回の投稿[RaspberryPi + Pidora 20 + 外付けHDD｜Macで使えるTime Cupsuleを作る　ver.0.8](http://qiita.com/ente04/items/67506f2b994fd616683a)で作成したTimeMachineに、Macから接続しようとしたところ「バージョンの問題で接続できない」という旨のエラーダイアログが表示され、上手くサーバーを稼働させることが出来ませんでした。

@HAT0001 さんのコメントのお陰で解決することが出来ましたので報告します。
 
##原因｜Netatalkのバグ
前回`UAMs: No User Authent`とログにあったようにUAMが上手く機能していないということまではわかっていましたが、どうやらUAMのインストール時に古いNetatalk特有のバグがあるようです。
その辺りの詳しいお話は[HATさんがブログ](http://hatx.blog.so-net.ne.jp/2011-10-23)にて解説なさっています。

私の方では、具体的な操作のほうをメモに残すことにします。

##具体的にはUAMのシンボリックリンクが無い

`/etc/netatalk/afpd.conf`を確認するとデフォルトのUAMディレクトリは`/usr/lib/atalk`です。

```:/etc/netatalk/afpd.conf
#   Authentication Methods:
#     -uampath <path>  Use this path to look for User Authentication Modules.
#                      (default: /usr/lib/atalk)
```
`/usr/lib/atalk`の中身はこうなっていました。

```bash
$ cd /usr/lib/atalk
$ ls -l
-rwxr-xr-x   1 root root 15516 11月 10  2013 uams_dhx2_pam.so
-rwxr-xr-x   1 root root 11700 11月 10  2013 uams_dhx2_passwd.so
-rwxr-xr-x   1 root root 14272 11月 10  2013 uams_dhx_pam.so
-rwxr-xr-x   1 root root  7796 11月 10  2013 uams_dhx_passwd.so
-rwxr-xr-x   1 root root 10812 11月 10  2013 uams_gss.so
-rwxr-xr-x   1 root root  6128 11月 10  2013 uams_guest.so
-rwxr-xr-x   1 root root  9652 11月 10  2013 uams_pam.so
-rwxr-xr-x   1 root root  8036 11月 10  2013 uams_passwd.so
-rwxr-xr-x   1 root root 10872 11月 10  2013 uams_randnum.so
```
なるほど、HATさんの解説通りシンボリックリンクがありません。
すなわち、`afpd.conf`においてUAMとして`uams_dhx.so`を選択した場合には`uams_dhx_pam.so`もしくは`uams_dhx_passwd.so`が選択されるということなのですが、
シンボリックリンクが無いのでどちらも選ばれていない状況にあるようです。

```:/etc/netatalk/afpd.conf
#                      uams_dhx.so: (uams_dhx_pam.so or uams_dhx_passwd.so)
#                                  Allow Diffie-Hellman eXchange
#                                  (DHX) for authentication.
#
#                      uams_dhx2.so: (uams_dhx2_pam.so or uams_dhx2_passwd.so)
#                                   Allow Diffie-Hellman eXchange 2
#                                   (DHX2) for authentication.
```

##解決策｜シンボリックリンクを自分で作る
yumインストールで勝手にやってくれないなら自分でシンボリックリンクを作成します。

```bash
$ sudo ln -s uams_dhx_passwd.so uams_dhx.so
$ sudo ln -s uams_dhx2_passwd.so uams_dhx2.so
```
これでもう一度`/usr/lib/atalk`を確認します。

```bash
$ ls -l
total 104
lrwxrwxrwx 1 root root    18  6月 13 00:56 uams_dhx.so -> uams_dhx_passwd.so
lrwxrwxrwx 1 root root    19  6月 13 00:46 uams_dhx2.so -> uams_dhx2_passwd.so
-rwxr-xr-x 1 root root 15516 11月 10  2013 uams_dhx2_pam.so
-rwxr-xr-x 1 root root 11700 11月 10  2013 uams_dhx2_passwd.so
-rwxr-xr-x 1 root root 14272 11月 10  2013 uams_dhx_pam.so
-rwxr-xr-x 1 root root  7796 11月 10  2013 uams_dhx_passwd.so
-rwxr-xr-x 1 root root 10812 11月 10  2013 uams_gss.so
-rwxr-xr-x 1 root root  6128 11月 10  2013 uams_guest.so
-rwxr-xr-x 1 root root  9652 11月 10  2013 uams_pam.so
-rwxr-xr-x 1 root root  8036 11月 10  2013 uams_passwd.so
-rwxr-xr-x 1 root root 10872 11月 10  2013 uams_randnum.so
```

上手く作成できました。
これでUAMが上手く機能するはずです。

![スクリーンショット 2014-06-13 1.48.34.png](https://qiita-image-store.s3.amazonaws.com/0/43890/72b55aa2-ce8a-5ffe-a900-797828fc7ec3.png)

良かった、上手く接続してくれました。

---

Special Thanks: @HAT0001
Xamarin.Forms の Label から iOS の UILabel を取り出す

[Xamarin.Forms でどうにかしたい iOS と Android の違い]( http://qiita.com/amay077/items/12979585ac3e2dcacacb) の「文字の自動縮小」の自己回答。

Xamarin.Forms で定義した ``Label`` は、iOS では ``UILabel`` となるはずなので、その過程のどこかでフックできれば ``UILabel.AdjustsFontSizeToFitWidth`` が仕込める、と目論んで、ホントにできたのでメモ。

## 要点

~~Forms→ネイティブのフックは PageRenderer でできる。その中で得られる UIView（のサブクラス）は、Label と UILabel の両方の参照を持っているので、あとは使うだけ。~~

**ページでなく、UIパーツレベルでフックできたので、全面的に書き換えた。**

## やってみる

参考にしたのは https://github.com/xamarin/xamarin-forms-samples/tree/master/Forms2Native 。

このサンプルをちょっと改造して試した。

まずは Forms側の MySecondPage.cs を修正。

```csharp:MySecondPage.cs
public class MySecondPage : ContentPage
{
    public Label MyLabel { get; private set; }

	public MySecondPage ()
	{
        this.MyLabel = new Label
        {
            Text = "Too loooooooooooooooooooooooong label",
            Font = Font.SystemFontOfSize(30d),
            LineBreakMode = LineBreakMode.NoWrap
        };

        Content = new StackLayout
        {
            Orientation = StackOrientation.Vertical,
            VerticalOptions = LayoutOptions.CenterAndExpand,
            Children = 
            {
                this.MyLabel
            }
        };
	}
}
```

ラベルを配置。とても文字が長いので全部は表示しきれない。

次に iOS側に MyLabelRenderer.cs を作成。

```csharp:MyLabelRenderer.cs
using System;
using Xamarin.Forms;
using Forms2Native;
using Xamarin.Forms.Platform.iOS;
using MonoTouch.UIKit;

[assembly:ExportRenderer(typeof(Label), typeof(MyLabelRenderer))]

namespace Forms2Native
{
    public class MyLabelRenderer : LabelRenderer
    {
        protected override void OnElementChanged(ElementChangedEventArgs<Label> e)
        {
            base.OnElementChanged(e);
            this.Control.AdjustsFontSizeToFitWidth = true;
        }
    }
}
```

``ExportRenderer`` で「Formsの``Label``は、``MyLabelRenderer``を使う」と定義している。
するとすべての ``Label`` の生成時を ``OnElementChanged`` でフックでき、``Control`` で ``UILabel`` は取り出せるので、あとはご自由に、という感じ。

この実装だと、すべての Label に Ajusts が適用されてしまう。個別に行いたい場合は、Forms側に Labelから派生した ``AjustableLabel`` を作成して使い、``ExportRenderer(typeof(Label),…`` のところを ``ExportRenderer(typeof(AjustableLabel),…`` にすればいけるはず。そしてこの方法はカスタムビューを作る手順に通じる（というかそのもの？）はず。

ちなみにこの ``OnElementChanged`` は、Nuget の Xamarin.Formsパッケージの Ver1.1.0.6201から利用できる。

## 実行する

こんな感じで、ちゃんと文字サイズが縮小されました。

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

Android の方も同じ要領でいけるは…ず。
★メモ★Pythonいろは


ちょっと最近、 **Python** をお勉強しているので、メモ程度に書きます。

----
- Excelで **Python** を使えるらしい・・・<br>▶︎使うためには `DataNitro` っていうプラグインが必要みたい。<br>▶︎↓みたく表示されるらしい・・・<br>
![Python図](http://blog.godo-tys.jp/wp-content/plugins/wp-dokuwiki/lib/exe/fetch.php?w=&h=&cache=cache&media=http%3A%2F%2Fblog.godo-tys.jp%2Fwp-content%2Fgallery%2Fdatanitro%2Fimage01.jpg)

- `import icon` からファイルを選択して実行することができる<br>★通常の実行と同じように動作する

- 参考サイト<br>http://blog.godo-tys.jp/2013/09/07/4269/
class 初期化時に特定の条件でクラッシュ


**[追記]** コメント欄で頂いた様に、playground 以外では正常に動作する事から、playground のバグの可能性が高そうです。

## 落ちないケース

```swift
class Foo {
    var array :String[]

    init() {
        array = ["bar"]
    }
}

var foo :Foo? = Foo() 	// {["bar"]}

```


## 落ちるケース

```swift
class Foo {
    var dict = Dictionary<String, String>()

    init() {
        dict = ["bar":"baz"]
    }
}

var foo :Foo? = Foo()	// {["bar", "baz"]}
```

### 以下の条件で必ず落ちる

+ プロパティに Dictionary を持つ
+ 生成したクラスを代入する変数の型を、`クラス型 + ? (OptionalValue)` とする

### 経緯

abstract factory パターンを実装していて、factoryメソッドが `nil` もしくは Fooクラスを返却するという処理を書いており、factoryメソッドの戻り型を `Foo?` と定義した。上記例は余計なロジックを排除した再現コード。

### 疑問

そもそもクラスに `?` を付ける方法が適切かどうかが確認できていないが、warning も出ないし、プロパティがディクショナリ以外であれば問題無く動作する。ディクショナリのみ落ちるロジックが知りたい。

どなたか説明付く方ご教示頂ければ幸いです。
部分テンプレートのscriptタグをasyncで非同期実行する

# tl;dr

1. Railsの部分テンプレート中にjavascript埋め込みたい
2. でもページ途中に```<script>```入れると、パフォーマンス落ちる :cry: 
3. :bulb: async属性使えばいいんじゃね

# kwsk
Railsを使っていて、Viewの途中にjavascriptを入れたくなることが結構あります。
たとえば部分テンプレートを使ったり、[Cells](https://github.com/apotonick/cells)なんかを使って、

* controllerやmodel的な処理
* html構造
* javascriptでの画面動作

を一つにまとめておきたい、という感じで。

```app/cells/cart_cell.rb
class CartCell < Cell::Rails
  def show(args)
    user    = args[:user]
    @items  = user.items_in_cart

    render  # renders show.html.haml
  end
end
```
```app/cells/cart/show.html.haml
#cart
  You select #{@item.size} items.
  %ul
    - @items.each do |item|
      %li= item.name

= javascript_include_tag "cart/list_lazy_load"
```

最後の行で```app/view/assets/cart/list_lazy_load.js.coffee```あたりを呼び出し、適当な機能を画面につけています。

問題なのが、bodyの途中に```<script>```タグがあるとブラウザが以下のように動作をするということ。

```html:
<p>content 1 ...</p>     <!-- ブラウザによるレンダリング -->

<script src='sleep100.js'></script>
<!-- sleep100.jsの実行が終わるまでレンダリングをブロック -->

<p>content 2 ...</p>     <!-- ブラウザによるレンダリングの続き -->
```

この現象を回避するために「```<script>```はheadの中かbodyの一番最後に書く」というテクニックを使うのがHTMLの常套手段です。

スクリプトファイルの中にコストのある処理（jQueryを使ったすごいやつとか）がある場合、低スペックマシンではページ全体の印象がもっさりとしてしまいます。

ってわけで、```<script>```にasync属性を指定して、裏で実行するようにしましょう。

```app/cells/cart/show.html.haml
 :
= javascript_include_tag "cart/list_lazy_load", async: 'async'
```

これでjavascriptの実行を待たずに、HTMLページのレンダリングをしてくれるようになりました。

# 参考
とても参考になりました
[scriptのdefer/asyncを理解し、ページの高速化方法を探る - ゆっくりと…](http://tokkono.cute.coocan.jp/blog/slow/index.php/xhtmlcss/how-to-use-script-defer-and-async-for-performance-enhancement/)
┗ [defer/asyncチェックツールを作りブラウザ対応状況を確認してみた](http://tokkono.cute.coocan.jp/blog/slow/index.php/xhtmlcss/script-defer-async-attribute-of-major-browsers/) 2010/12/4
SwiftでRubyのInteger#timesを実装してみた


Swiftでは数値リテラルがオブジェクトとして扱えるので、Rubyっぽく数値にいろんなメソッドを定義することができる。そこで、簡単な`#times`をSwiftで実装してみた。

```swift
extension Int {
	func times(repeat: (Int) -> ()) {
		for var index = 0; index < self; index++ {
			repeat(index)
		}
	}
}

5.times { n in println("naoty \(n)") }
//=> naoty 0
//=> naoty 1
//=> naoty 2
//=> naoty 3
//=> naoty 4
```

きっと誰かがActiveSupportのような`1.minutes`みたいなExtensionを書くのでしょう（予言）。

---

せっかくなので、Swiftのクロージャの文法について軽く補足してみる。

まず、`#times`メソッドは`(Int) -> ()`型の関数を引数にとる。このとき、以下のように書くことができる。

```swift
5.times({ (n: Int) -> () in
	println("naoty \(n)")
	})
```

`in`以下が十分に短い場合は一行に続けることもできる。

```swift
5.times({ (n: Int) -> () in println("naoty \(n)") })
```

ところで、`#times`の定義で引数の関数の型は`(Int) -> ()`であると明示的に宣言しているので、型推論を利用できる。実際に引数に関数を渡すとき、その関数の型をわざわざ宣言する必要がない。そのため、以下のように書き直せる。

```swift
5.times({ n in println("naoty \(n)") })
```

もし、あるクロージャを関数の最後の引数として渡す場合、クロージャを`()`の外に追い出すことができる。なので、さらに以下のように書き直せる。

```swift
5.times() { n in println("naoty \(n)") }
```

---

### 追記

さらに、クロージャが関数の唯一の引数である場合は`()`を省略できるので、以下のように書き直せる。

```swift
5.times { n in println("naoty \(n)") }
```

ここまで来るとほとんどRubyと同じように書ける。
Unity Macでマルチスクリーン＆フルスクリーン。


色々調べると、Unityのフルスクリーンで、マルチスクリーンは出来ないってのが定石のようだったので。
諦めるのは悔しいので、サイネージで使うネイティブ拡張機能をまとめたリポジトリ公開しました。

[Githubリポジトリ](https://github.com/asus4/UnitySignageKit)

まだ実践投入してないですが、こんな感じ。３画面テストまでは成功。
![capture](http://photos-h.ak.instagram.com//hphotos-ak-xfp1//10431892_514869468613911_358035618_n.jpg)


あとは4点ホモグラフィー補正機能とかも入れていきたいなあ。


## TODO

１個だけ。'Displays have separate Spaces'をOFFにしないと、うまく動きません。
![image](http://i.gyazo.com/ce3ad374a73d66787e9f562a688e378a.png)

## その他の機能

- アプリの起動中は環境設定を変えなくてもスリープしない機能、スクリーンセーバーにならない機能
- メニューバーを隠す
- ウィンドウのタイトルを隠す
- ウィンドウの優先度を変えて、最前面に（エラーダイアログ、Dock、通知とかより前に）。Finderを選択しても、このアプリのほうが上に出ます。

## サンプルアプリもダウンロード

[Download link](https://dl.dropboxusercontent.com/u/150564/UnitySignageKit.app.zip) 
osx:10.9~
Dartでクラスのインスタンスの内容をJSON化する方法

Dartでクラスのインスタンスの内容をJSONの文字列に変換したい場合は、`dart:convert`ライブラリにあります`JSON.encode()`を使用します。

しかし、クラスのインスタンスの各フィールドの内容を自動的にJSONの形へ変換することはできず、クラスの内容をどのようなJSONの形として変換させるかを、`Map toJSON()`メソッドとして定義する必要があります。

```dart
import 'dart:convert';

class Hoge {
  int value = 10;
  String name = 'hogehoge';

  Map toJson() => {'value': value, 'name': name};
}

main() {
  Hoge hoge = new Hoge();
  String jsonStr = JSON.encode(hoge);
  print(jsonStr); // => {'value':10,'name':'hogehoge'}
}
```

`toJson()`の内容を変えれば、フィールドに存在しない情報を追加することもできます。

```dart
  Map toJson() => {'added_value': value + 10};
```

```dart
  Map toJson() {
    // JSONのMap生成時にロジックを組み込むことも可能
    Map json = {};
    if (value > 10) {
      json['many'] = true;
    } else {
      json['many'] = false;
    }
    return json;
  }
```
よく使う R のパッケージ一覧

今日は統計解析用の言語である R でよく使うパッケージをまとめてみます。

## R のパッケージについて

R のパッケージは [CRAN](http://www.okada.jp.org/RWiki/?CRAN%B9%F1%C6%E2%A5%DF%A5%E9%A1%BC%A4%CE%BB%C8%A4%A4%CA%FD) からダウンロードできます。 CRAN は R 本体や各種パッケージをダウンロードするためのサイトで全世界にミラーが存在します。 Perl でいう [CPAN](http://ja.wikipedia.org/wiki/CPAN) のようなものですね。

## ミラーサイトの指定

まず次のようにミラーをあらかじめ指定すると良いでしょう。

```r
options(repos="http://cran.ism.ac.jp")
```

R のインタプリタから直接パッケージをインストールしようとした場合、対話的にロケーションを質問されます。

## R パッケージインストール方法

次のコードでインストールできます。

```r
install.packages('パッケージ名')
```

## プロキシの設定

http_proxy 環境変数で設定しておけば OK です。

## よく使う R パッケージ

機械学習で使いそうなパッケージは次表の通りです。

|パッケージ名|説明|
|:--|:--|
|TTR|テクニカル・トレーディング・ルールを構築する関数とデータ|
|biOps|画像処理、画像の切り抜きや RGB のチャンネルごとの操作など|
|igraph|ネットワーク解析|
|kernlab|SVM 解析|
|lattice|S 用に開発されたグラフィックスパラダイムの R への移植|
|mvtnorm|二変量正規分布をはじめとした多変量正規分布の操作|
|plotrix|さまざまなプロット関数|
|pracma|数値解析 (ラグランジェ補間多項式など)|
|quadprog|二次計画法|
|tseries|時系列分析とコンピューテーショナル・ファイナンス|
|xts|zoo オブジェクトベースの便利な関数|
|zoo|時系列を扱うためのクラス zoo および zooreg とその操作のための関数群|

## その他のパッケージ

CRAN パッケージリストを参照すると良いでしょう。
http://www.okada.jp.org/RWiki/?CRAN%A5%D1%A5%C3%A5%B1%A1%BC%A5%B8%A5%EA%A5%B9%A5%C8

## まとめ

今日は時間が無いので R のパッケージを紹介して終わりです。
RSpec3.0.0をvim-quickrunとvimprocで行指定実行

RSpec3.0.0になってrspecコマンドの-lオプションがなくなりました。
vim-quickrunとvimprocでrspecコマンドを実行しているのですが、オプションがなくなったためRSpecファイルを編集中にカーソルがある行を指定して実行するときにエラーが出るようになりました。

今までの設定は以下のようにしていました。(quickrunの設定部分を抜粋)

```vim:.vimrc
"===========================================
" quickrun settings
"===========================================
let g:quickrun_config = {}
let g:quickrun_config._ = {'runner' : 'vimproc', "runner/vimproc/updatetime" : 10}
let g:quickrun_config['ruby.rspec'] = {'command': 'rspec', 'cmdopt': '-cfd'}

augroup QRunRSpec
  autocmd!
  autocmd BufWinEnter,BufNewFile *_spec.rb set filetype=ruby.rspec
augroup END

nnoremap [quickrun] <Nop>
nmap <Space>k [quickrun]
nnoremap <silent> [quickrun]r :call QRunRspecCurrentLine()<CR>
fun! QRunRspecCurrentLine()
  let line = line(".")
  exe ":QuickRun -cmdopt '-cfd -l " . line . "'"
endfun
```
QRunRspecCurrentLine関数でrspecコマンドを行指定で実行しているのですが、上記の設定だとRSpec3.0.0にすると行指定実行したときに以下のようなエラーが出力されます。

```
invalid option: -l

Please use --help for a listing of valid options
```

rspecコマンドのヘルプを見ると


```
  **** Filtering/tags ****

    In addition to the following options for selecting specific files, groups,
    or examples, you can select a single example by appending the line number to
    the filename:

      rspec path/to/a_spec.rb:37
```
とあるので、ファイル名の後にコロンと行番号をつけてやればよさそうです。

なので、以下のように設定を変更しました。

diff形式で示します。

```diff:.vimrc
"================================================================================
" quickrun settings
"================================================================================
let g:quickrun_config = {}
let g:quickrun_config._ = {'runner' : 'vimproc', "runner/vimproc/updatetime" : 10}
let g:quickrun_config['ruby.rspec'] = {'command': 'rspec', 'cmdopt': '-cfd'}

augroup QRunRSpec
  autocmd!
  autocmd BufWinEnter,BufNewFile *_spec.rb set filetype=ruby.rspec
augroup END

nnoremap [quickrun] <Nop>
nmap <Space>k [quickrun]
nnoremap <silent> [quickrun]r :call QRunRspecCurrentLine()<CR>
fun! QRunRspecCurrentLine()
  let line = line(".")
- exe ":QuickRun -cmdopt '-cfd -l " . line . "'"
+ exe ":QuickRun -exec '%c %s%o' -cmdopt ':" . line . " -cfd'"
endfun
```

具体的にはコマンド実行の書式を変更しました。

bundlerを使用している場合は以下のように設定してください。

```diff:.vimrc
 "===========================
 " quickrun settings
 "===========================
  let g:quickrun_config = {}
  let g:quickrun_config._ = {'runner' : 'vimproc', "runner/vimproc/updatetime" : 10}
- let g:quickrun_config['ruby.rspec'] = {'command': 'rspec', 'cmdopt': '-cfd'}
+ let g:quickrun_config['ruby.rspec'] = {'command': 'rspec', 'exec': 'bundle exec %c', 'cmdopt': '-cfd'}

  augroup QRunRSpec
    autocmd!
    autocmd BufWinEnter,BufNewFile *_spec.rb set filetype=ruby.rspec
  augroup END

  nnoremap [quickrun] <Nop>
  nmap <Space>k [quickrun]
  nnoremap <silent> [quickrun]r :call QRunRspecCurrentLine()<CR>
  fun! QRunRspecCurrentLine()
    let line = line(".")
- exe ":QuickRun -cmdopt '-cfd -l " . line . "'"
+ exe ":QuickRun -exec 'bundle exec %c %s%o' -cmdopt ':" . line . " -cfd'"
endfun
```


詳しくはヘルプをご覧ください。
```:h quickrun-option-exec
```


これでRSpec3でもファイルを編集中に行指定のテスト実行ができるようになります。
Ruby On Rails Gemまとめ -state_machine-


##state_machineとは
「state_machine」は公開・非公開、ON・OFFなどの属性の状態をよりシンプルに管理できるようにする。

##インストール
Gemfileに以下を追加。

```bash:
gem "state_machine"
```

ターミナルで` $ bundle install `を実行。

##使い方
例として、Article（記事）モデルのカラム「status」に「下書き（draft）、公開（public）、非公開（private）」の３つの状態を保持し、また、「delete_flag」に「on、off」の２つの状態を保持するとします。

まずは、以下のように定義します。

```bash:
$ rails g model Article status
```

```ruby:article.rb
class Article < ActiveRecord::Base
  state_machine :status, initial: :draft do
    state :draft
    state :public
    state :private

    before_transition on: :draft, do: :preview_on  #状態の変更前に実行される
	after_transition draft: :public, do: :set_public_date  #状態の変更後に実行される

    event :change_status do
      transition draft: :public
      transition public: :private
    end
  end

  state_machine :delete_flag, initial: :off do
    state :on, value: 1
    state :off, value: 0

    event :delete_on do
      transition off: :on
    end

    event : delete_off do
      transition on: :off
    end
  end

  def set_public_date
    #公開日の設定、保存の処理
  end

  def preview_on
    #プレビュー機能をactiveに設定する処理
  end
end
```

使い方は、以下のようになります。

```ruby:
article = Article.new

"・statusの状態を表示"
article.status  # => "draft"（initialで初期がdraft）

"・イベント「change_status」を実行"
article.change_status
article.status  # => "public"（change_statusでdraftからpublicに変更）

"・statusはdraftか？publicか？"
article.draft?  # => false
article.public?  # => true

"・delete_flagの状態、valueを表示"
article.delete_flag_state  # => 0
article.delete_flag_name  # => :off（_nameだとシンボル）

"・イベント「change_status」を実行"
article.delete_on
article.delete_flag  # => "on"
```
VirtualBoxのネットワーク設定でGenymotionが起動しないときの対処法


#環境
+ Mac OSX
+ VitualBox4.3.6
+ Genymotion2.2.2

#困ったこと
Android開発のために、爆速エミュレーターと名高いGenymotionを使ってみようと、以下の記事を参考にセットアップ。
<a href="http://tamotamago.com/?p=608" target="_blank">Android Studio から genymotion を使ってビルドしてみた | tamo*memo</a>

いざ、Genymotionを立ち上げようとしたら、

	Unable to connect to your virtual device! Genymotion will now stop. Check your VirtualBox network configuration.

というエラーメッセージで怒られてしまいました(´・ω・｀)
VirtualBoxのネットワーク設定をチェックしろやって言ってます。

#対処法
##VirtualBoxで新しいホストオンリーネットワークを作成
VitualBox本体の『環境設定』から『ネットワーク』の設定に行きます。
右にある「＋」ボタンをクリックして、新しくネットワークを作成。(今回はvboxnet1を作りました。)

![ネットワーク設定](https://qiita-image-store.s3.amazonaws.com/0/19111/6a69c589-023b-82a7-cc8f-06a843177038.png "e46248f9329509d162a6e91675f17abe.png")

##新規作成したネットワークの詳細設定
それぞれ以下のように設定する。

**アダプター**
IPv4アドレス：192.168.57.1
IPv4ネットマスク：255.255.255.0
IPv6アドレス：なし
IPv6ネットマスク長：0

**DHCPサーバー**
サーバーアドレス：192.168.57.100
サーバーマスク：255.255.255.0
アドレス下限：192.168.57.100
アドレス上限：192.168.57.254

##Android仮想マシンのネットワーク設定を変更
最後に、Genymotionで作成したAndroid仮想マシンのネットワーク設定を変更します。
下の図のように、さっき新規作成したネットワーク「vboxnet1」を適用。
![62847273ee806aeacb8bd4dde0c50a9a.png](https://qiita-image-store.s3.amazonaws.com/0/19111/243943ba-1039-3b22-7437-a0ab7116f37c.png "62847273ee806aeacb8bd4dde0c50a9a.png")

これでGenymotionが動くようになってくれました(ФωФ)
Rails4でcollection_check_boxesを使って、多対多の関連をチェックボックスで設定する

##多対多の関連するフォームの作り方
[Rails4で　１対多、多対多関連しているときのフォームを作るなら、Nested Form Gemが便利](http://qiita.com/regonn/items/cdbda32900a15721d59b)
最初に見つけた多対多の関連フォームの作成サンプルです。
nested form gemを使ったサンプルですが、やりたい事とちょっと違いました。

###多対多の関連をチェックボックスで設定したい
Rails3の頃のやり方もちらほら見つかりました。
[Rails3でhas_many throughな関連をcheckboxで登録する](http://blog.sanojimaru.com/post/20811733359/rails3-has-many-through-checkbox)
（sanojimaruの若大将は元気かな・・・）

###Rails4でのやり方は？
その後、いろいろ調べていくと、Rails4ではcollection_check_boxesっていうヘルパーメソッドが増えているという事がわかりました。
今回はこれを使ってやってみます。

##collection_check_boxesを使って、関連フォームを作成する
###scaffoldでMVCを作成する
適当なサンプルとして、PostとAuthorを作って、それに関連するAuthorPostを作ってみます。
サンプルなので、scaffoldを使っていきます。
コンソールで、次を入力します。
author_postはmodelだけでもいいです。

```
rails g scaffold post title:string
rails g scaffold author name:string
rails g scaffold author_post post:references author:references
```

###モデルに関連を設定する
post.rbとauthor.rbをこんな感じに編集しましょう。

```lang:app/models/post.rb
class Post < ActiveRecord::Base
  has_many :author_posts
  has_many :authors, :through => :author_posts
end
```

```lang:app/models/author.rb
class Author < ActiveRecord::Base
  has_many :author_posts
  has_many :posts, :through => :author_posts
end
```

###ビューにチェックボックスを表示する
postのフォームにauthorのチェックボックスを表示するようにします。

```lang:app/view/posts/_form.html.erb

  ...

  <div class="field">
    <%= f.label :title %><br>
    <%= f.text_field :title %>
  </div>
  <div class="field">
    <%= f.label :authors %><br />
    <%= collection_check_boxes(:post, :author_ids, Author.all, :id, :name) do |b| %>
      <%= b.label { b.check_box + b.text } %>
    <% end %>
  </div>

  ...

```

###動きを確認してみる
マイグレーションをして、サーバーを起動してみます。

```
rake db:migrate
rails s
```

http://localhost:3000/authors
ここから適当にいくつかauthorを作成しておきましょう。
![スクリーンショット 2014-06-12 23.01.07.png](https://qiita-image-store.s3.amazonaws.com/0/16481/281308ff-4e95-ab65-cef8-9dfd0c6f29fc.png)

その上で、postの作成画面を見てみます。
http://localhost:3000/posts/new
![スクリーンショット 2014-06-12 23.02.19.png](https://qiita-image-store.s3.amazonaws.com/0/16481/2c961a18-f18a-8b2a-dc95-2a643f5b9da9.png)

追加した、authorがチェックボックスになって、表示されていますね。
（ちなみに、この段階では、チェックボックスの情報が保存されません。）

###チェックボックスの情報が関連情報として保存されるようにする
いよいよ最後です。
チェックボックスの情報がAuthorPostとして保存されるようにしましょう。

```lang:app/controllers/posts_controller.rb
class PostsController < ApplicationController

    ...

    def post_params
      params.require(:post).permit(:title, {:author_ids => []})
    end

    ...

end
```

どうでしょう？
無事こんな感じで保存されましたか？
![スクリーンショット 2014-06-12 23.08.42.png](https://qiita-image-store.s3.amazonaws.com/0/16481/93b7afd8-51e3-327b-6b15-a9757d5dc5b3.png)

##最後に
作成したコードを公開しておきます。
https://github.com/hamichamp/collection_check_boxes_sample
PerlでのImageMagickでの透明キャンパスの作成方法

PerlでのImageMagickでの白色キャンパスの作成方法についてのメモ。

```pl:perl
# 透明のcanvasを作成
my $canvas = Image::Magick->new;
$canvas -> Set(size=>$target_size . 'x' . $target_size);
## 白色キャンパスの作成
$canvas -> ReadImage('xc:white');
## 白色キャンパスを透明にする
$canvas -> Transparent(color=>'White');
```

一旦、白色キャンパスを作成してから透明にしている。
以下でも一緒かも。

```pl:perl
# 透明のcanvasを作成
my $canvas = Image::Magick->new;
$canvas -> Set(size=>$target_size . 'x' . $target_size);
## 透明キャンパスの作成
$canvas -> ReadImage('xc:none');
```

PHPのImageMagickの使い方と多少お作法が違う感じ。

★参考
http://ohbarye.blogspot.jp/2014/05/perl.html
http://matsup.blogspot.jp/2009/12/freebsdperlmagick_09.html
http://matsup.blogspot.jp/2009/12/freebsdperlmagick_13.html
PerlのImageMagickでのフォーマットなどの取得

PerlのImageMagickでの値の取得。


```pl:perl
my $image = Image::Magick->new;
$image->Read("$filename");
my ($width, $height, $format, $depth, $filesize, $colorspace) = $image->Get('width', 'height', 'magick', 'depth', 'filesize', 'colorspace');
```

通常、formatは「format attribute」で取るが、返ってくる値が「Joint Photographic Experts Group JFIF format」とかなので、使いにくい。

「magick」アトリビュートを使用。

あと、depthが深いとAndroidで使えないことがあるのでチェック。
FINDで特定文字列を含むファイルの一括検索

findで特定の文字列を含むファイルの一括検索。

```bash:command
# find ./ -name "*.php" -exec grep -H "Referer Check Failed" {} \;
```

ここでは「Referer Check Failed」という文字列を含むPHPファイルを探しています。