OmniAICreator/Qiita-1.07M huggingface dataset:
Rで溜まってしまったPostgreSQLとのコネクションを全部消す

RでいっぱいになったPostgreSQLへのコネクションを一気に切断する方法のメモです。
下記のコードでできます。MySQLの場合は、PostgreSQL()の部分をMySQL()にすれば動くと思います。

```
cons <- dbListConnections(PostgreSQL()) # すべてのコネクションのリストを取得
for(con in cons){
  results <- dbListResults(con) # コネクションに結びついたResultのリストを取得
  if(length(results) > 0){
    cat("remain\n")
    for(r in results){
      dbClearResult(r)　# Resultの消去
    }
  }
  dbDisconnect(con) # コネクションの切断
}
```

というのも、RでPostgreSQLに接続してデータを解析していると、以下のようなエラーになりがちです。

```
> con <- dbConnect(PostgreSQL(), host="localhost", user= "postgres", dbname="mydb")
以下にエラー postgresqlNewConnection(drv, ...) : 
RS-DBI driver: (cannot allocate a new connection -- maximum of 16 connections already opened)
```

切断しようにも、以下のようなエラーで切断できないこともしばしば。

```
> dbDisconnect(con)
以下にエラー postgresqlCloseConnection(conn, ...) : 
connection has pending rows (close open results set first) 
```
Windows で動作する Android 仮想環境の比較まとめ (Xamarin 関係者向け)

こんにちは。エクセルソフトの田淵です。

無事 [VS Emulator Android Phone が動いた](http://ytabuchi.hatenablog.com/entry/2014/11/14/214918) ので、巷に出回っている Android エミュレーターを用途に合わせて比較してみたいと思います。


# 比較対象

- Android SDK 謹製 ARM エミュレーター
- [Intel HAXM](https://software.intel.com/en-us/android/articles/intel-hardware-accelerated-execution-manager) を使用した Android SDK x86 エミュレーター
- [Genymotion](http://www.genymotion.com/)
- [Xamarin Android Player](http://developer.xamarin.com/guides/android/getting_started/installation/android-player/)
- [VS Emulator Android Phone/Tablet](http://blogs.msdn.com/b/visualstudioalm/archive/2014/11/12/introducing-visual-studio-s-emulator-for-android.aspx)


# 比較

凄く個人的な比較項目ですがご了承ください。
Xamarin Love な人間としては [XAP をお勧めする 3つの理由](http://ytabuchi.hatenablog.com/entry/2014/12/02/133709) を是非ｗ

||ARM|x86|Genymotion|Xamarin Android Player|VS Emulator|
|---|---|---|---|---|---|
|**軽さ**|重い (高スペックのマシンであればそこまで重くない)|マシンスペックが良ければ快適|試してないですが、かなり快適な模様|多分一番快適|起動まで少し重いが起動すれば快適|
|**ベース**|ARMエミュレーター|Intel HAXM|Oracle Vertual Box|Oracle Vertual Box|Hyper-V|
|**用意された Android イメージ**|すべて|ARM とほぼ同じ|2.3, 4.1, 4.2, 4.3, 4.4|4.4.2, 4.1.1|4.4 のみ|
|**機能・便利な点**|クソほど重い Android 純正の ARM 命令を処理できるエミュレーター。|軽い無料の純正高速エミュレーター|Genymotion 製高速 x86 エミュレーター。カメラ、GPS、加速度センサーなど標準的な補助機能はカバー。|Xamarin 製高速 x86 エミュレーター。カメラ、GPS、加速度センサーなど標準的な補助機能はカバー。**Windows と Mac で動作。Open GL が動くのでゲームの実行も可能。画面サイズを動的にスケール可能。Google Play Service がインストール出来るため、マップも動作可能。**|MS 製高速 x86 エミュレーター。カメラ、GPS、加速度センサーなど標準的な補助機能はカバー。Hyper-V なので Windows Phone Emulator と共存が可能。|
|**Google Play 対応**|×|×|？|○|○|
|**APKドラッグ＆ドロップでインストール**|×|×|×|○|○|
|**価格**|Free|Free|Free: 非商用 / INDIE: 3人までの企業は企業で 1つだけ購入可能で 年 €99(＄136) / Business: 制限なし。年 299€(＄412)|Xamarin のINDIE 以上のユーザーのみ使用可能|VS 2015 Preview 同梱。恐らく VS 2015 Pro以上のユーザーが使用可能。|
|**弱点・制限事項**|重い|設定が手間|有償。Open GL 未サポート。|Xamarin ユーザーに限定される。Open GL で描画するため、リモートデスクトップで使用できない。|Windows ユーザー、VS ユーザーに限定される。Open GL 未サポート。|
|**適した用途**|なし|お金を掛けずに悪くない環境を作りたい。なるべく余計なものはインストールしたくない。|お金かけてもいいから快適な環境を作りたい。Xamarin や VS 以外でも使いたい。|Xamarin! Xamarin! Xamarin! Mac ユーザー、マップ関連のアプリ開発者。|Windows Phone アプリの開発者|
|**備考**||[インストール](http://ytabuchi.hatenablog.com/entry/2014/10/02/201817)|[機能](https://shop.genymotion.com/index.php?controller=order-opc)|[インストール](http://yutawatanabe.hatenablog.com/entry/xamarin-android-player-preview-install), [小ネタ](http://ytabuchi.hatenablog.com/entry/2014/10/09/164202), [詳細なインストール](http://ytabuchi.hatenablog.com/entry/2014/12/11/170945)|[動いた](http://ytabuchi.hatenablog.com/entry/2014/11/14/214918) / [動いたけど VS2013との共存大変！](http://www.moonmile.net/blog/archives/6648) / [エラー回避](http://zatsugaku.info/cryearth/?p=854)



# まとめ

2014/11/15 追記：大事なことを忘れてました。純正以外のエミュレーターを使用する場合でも、Lollipop, wear などの開発をしたければ、純正の x86 エミュレーターは必須になります。用意しておくに越したことはありませんね。

WP 開発者で Xamarin 使ってクロスプラットフォーム開発だぜって方は VS Android Emulator 一択で良さそうです。2015 の正式リリースを楽しみに待ちましょう。**(ただし、現時点ではかなりの棘の道です。人柱になりたいヤツは出てこい！って感じですねｗ)**

Xamarin の開発者で WP やらない方は Xamarin Android Player で良いでしょう。

その他のネイティブ Android 開発者はお金に余裕があれば Genymotion、金払う価値はないと考えれば x86 Emulator でしょう。

ARM エミュレーターはクソなので触らないようにしましょうｗ

好みもあるかと思いますので、上記を参考に色々触ってみると良いと思います。



以上です。
Vimのキーマッピングを書いた

Vim pluginをできるだけ少ないキーで実行させたいのと、前々から不便なところを変えたいと思ってたので書いた。
`:VimShell` などと毎回打ち込むのは非常に面倒だし( `q:` してhistoryから選ぶのもいいけど)。
マッピングするにあたって参考にしたサイト
[http://deris.hatenablog.jp/entry/2013/05/02/192415](http://deris.hatenablog.jp/entry/2013/05/02/192415)

とりあえず今回書いたマッピング。(変更部分あり:2014-11-17)

```.vimrc
noremap j gj
noremap k gk
noremap <S-h>   ^
noremap <S-j>   }
noremap <S-k>   {
noremap <S-l>   $
noremap m  %
nnoremap <CR> A<CR><ESC>
nnoremap == gg=G''
nnoremap <Space>n  :NERDTree<CR>
nnoremap <Space>v  :vs<CR>:<C-u>VimShell<CR>
nnoremap <Space>tl  :vs<CR>:TweetVimHomeTimeline<CR>
nnoremap <Space>tm  :vs<CR>:TweetVimMentions<CR>
nnoremap <Space>ts  :TweetVimSay<CR>

inoremap <C-f> <C-x><C-o>

```

## ちょっとした解説
- `noremap j gj`とか `noremap k gk`は割と定番なマッピング。
- `Shift + h` で左端、 `Shift + l`で右端にカーソル移動。いちいち `$` とか `^` を押す必要がない。 **めっちゃ便利**。
- `nnoremap <CR> A<CR><ESC>` :ノーマルモードでもリターンキーで改行できるようにした。
- `=`を二回連続で入力することでバッファ全体のインデント整理をするようにした。
- 各プラグインは`Space + 'プラグインの頭文字'`みたいに設定した。
- `inoremap <C-f> <C-x><C-o>` : オムニ補完をキー一発でできるように設定。

個人的におすすめは、`noremap <S-h>   ^` と `noremap <S-l>   $`。 **ものすごい便利**。ホームポジションを崩さずに操作できるのは気持ちがいい。

## 最後に
あくまでこういうマッピングもあるんだな程度で。
たぶん、コピペしてもマッピング内容を忘れるので。
ちなみにこれ書くのに2時間くらい使った。テキストエディタの闇は深い。
CocoaPodsで配布するライブラリにStoryboardを含めたい


`storyboard`と`xib`を同梱したかったのでやってみた。

と言っても、`podspec`にちょっと書き足してあげるだけ。

# 変更部分

`podspec`に、`resource_bundles`を追記すればいい。

```xxx.podspec
s.resource_bundles = {
  'バンドル名' => ['パス']
}
```

という感じ。

```xxx.podspec
s.resource_bundles = {
  'ABC' => ['Assets/*.storyboard']
}
```

とか書けば、

`ABC.bundle`に`Assets`配下の全ストーリーボードを入れられる。

# 呼び出し方

```swift
let path = NSBundle.mainBundle().pathForResource("ABC", ofType: "bundle")!
let bundle = NSBundle(path: path)
let storyboard = UIStoryboard(name: "NAME", bundle: bundle)
```

こんな感じで、`bundle`からストーリーボードを取り出せる。

`xib`や画像も基本的にはこの`bundle`を渡せば取得できる。

# 実際のpodspec

https://github.com/taka0125/TAKKit/blob/1.3.0/TAKKit.podspec

が追加してみたもの。
print で、リスト内の非ascii文字を見栄え良く 

こんにちは。
リスト内の非ascii文字を見栄え良く print させる方法を、ここから見つけました：["How to print tuples of unicode strings in original language (not u'foo' form)"](http://stackoverflow.com/questions/621321/how-to-print-tuples-of-unicode-strings-in-original-language-not-ufoo-form)。

```python
s = [1, '日', ['本']]
print(list_str(s)) # ==> [1, '日', ['本']]
print(s) # ==> [1, '\xe6\x97\xa5', ['\xe6\x9c\xac']]
```


```python
def list_str(x):
    if not isinstance(x, list):
        if isinstance(x, str):
            return '\'%s\'' % x
        return str(x)
    items = ', '.join([list_str(x) for x in x])
    return '[%s]' % items
```

また他に、
https://pypi.python.org/pypi/prettyprint の方法は、

```python
import json
def list_str(x):
    return eval("u'''%s'''" % json.dumps(x)).encode('utf-8')

s = [1, '日', ['本']]
print(list_str(s)) # => [1, "日", ["本"]]
```
Gitで管理しているファイルをTree表示する


Gitで管理されているファイルを参照する方法として`git ls-files`があるが、ディレクトリ構造がわかりにくく始めて見るレポジトリなどでは全体が把握しにくいことがありました。
でも、いっぽうで`tree`コマンドは管理対象外のファイルも表示されてしまうのでGitで管理されているファイルだけをTree表示する`git-tree`なるものを作りました。
はじめてのPyPiへの登録だったのでいろいろ不具合等があるかもしれませんが何かあればコメントください。

##Install
PyPiに登録されているのでpipまたはeasy_installを使ってインストール


```bash
$ pip install git-tree
```

##使い方
コマンド名を`git-tree`としているので、Gitのコマンドのように`git tree`としても実行できます。

```bash
$ git-tree
```
or

```bash
$ git tree
```

##Demo
実際実行してみると下記のようになる。
さらに下に表示した`git ls-files`よりはディレクトリ構造がわかりやすいはず…？

##git-tree
ディレクトリや実行ファイルなどには色がつくようにしています。
また、ディレクトリにはindicatorとして`/`が末尾につくようにしています。
これらはそのうちコマンドラインオプションにでも仕様かと考えています。

![git-tree.png](https://qiita-image-store.s3.amazonaws.com/0/21173/51cd4acc-e1bc-fe64-203b-6aef08ac8c60.png "git-tree.png")

##比較 git ls-files
`ls-files`のほうがコンパクトでいいっちゃいいんですけどね。
![ls-files.png](https://qiita-image-store.s3.amazonaws.com/0/21173/c6fc0d10-e33c-31c2-aabf-efe478282236.png "ls-files.png")


## Link
- [GitHub:kosystem/git-tree](https://github.com/kosystem/git-tree)
- [PyPi:git-tree](https://pypi.python.org/pypi/git-tree)
Swiftのプロパティとメソッドの修飾子

Swiftのプロパティとメソッドの修飾子の以下の通り。

|修飾子|解説|
|:----|:---|
|convenience|他のイニシャライザを呼ぶことを許可するイニシャライザに指定する修飾子|
|required|イニシャライザをオーバーライドするとき実装必須であるイニシャライザに指定する修飾子|
|override|オーバーライドするメソッドに指定する修飾子|
|static|構造体または列挙型特有（オブジェクトごとではない）のプロパティとメソッドに指定する修飾子|
|class|クラス特有（オブジェクトごとではない）プロパティとメソッドに指定する修飾子|
|lazy|はじめて利用したときにオブジェクトを生成するプロパティに指定する修飾子|

サンプルがないと難しい！
update-alternativesをroot無しローカルで使う

gcc、clang、ld等は状況によっては頻繁にバージョンを切り替えなければいけない場面がある。
特に研究室のクラスタ上のログインノードのローカルアカウントで最新のclangで遊ぶ場合である。

そういう場合は、update-alternativesコマンドが便利である。
update-alternativesコマンドはプログラムのパスをグループ分けして登録しておけば、コマンド一つでシンボリックリンクをディスパッチしてくれる。

$HOME以下でバージョン管理を完結したい場合は、

update-alternatives --altdir dir1 --admindir dir2　コマンド

として用いれば良い。
こうすると、シンボリックリンクはdir1に置かれ、グループ分け等を登録した作業ファイルはdir2に置かれる。

以上のコマンドを update-alternatives-local 等とエイリアスをかけておけば便利である。
もちろん、dir1にパスを通しておくのを忘れない様に。
activerecord-importのLoggerを黙らせる

activerecord-import gemを使っています。
大量データをbulk insertしても一瞬で終わるのでとても快適です。
しかし、logを見ると、大量なinsert文が吐かれています。

その他のActiveRecordログは時々確認したいですが、importログは見たくないです。
ネットでググると、ActiveRecordのLogger Levelを一時的に変えるなどの記事がありましたが、これが一番素敵です。

```rb
  ActiveRecord::Base.logger.silence do
    SomeModel.import a_lot_of_data
  end
```
ActiveRecordにCallbackクラス＆Validatorクラス＆Valueオブジェクトを組み込んでみる

Callbackクラス・Validatorクラス・ValueオブジェクトをActiveRecordに組み込んでみました。

ActiveRecordモデルのコードはこんな感じです。

```rb
# app/models/blog/site.rb
class Blog::Site < ActiveRecord::Base
  validates :title, presence: true
  validates :description, presence: true
  validates_with Blog::SiteDescriptionSignificanceValidator

  before_save Blog::SiteLanguageEstimator.new(:language)

  def rating
    @rating ||= Blog::SiteRating.from_description(description)
  end
end
```

ここでは

* カスタムValidatorで`description`の内容をチェックする
* `before_save`でCallbackクラスを使って`language`を設定する
* Valueオブジェクトで`rating`を扱う

ということを行っています。

各クラスの中身はたいしたことしてないので省略しますが、いちおう元記事の「[Rails4.1.7のActiveRecordにCallbackクラス＆Validatorクラス＆Valueオブジェクトを組み込んでみる](http://blog.enogineer.com/2014/11/12/rails-model-design/)」にはそれぞれのサンプルコードも載せておきました。
ActiveRecordのブルクアップデート(bulk update)で悩みました

## ある日、突然ぶつかったActiveRecordの大量Update問題
Rails4で大量レコード(数10万件)のUpdate処理を書いています。しかも似たような処理を70回前後繰り返す必要があります。
１行ずつupdateすると、アップデート文だけで日が暮れちゃいます。

## Insertなら、軽い軽いですが
insertするときは、bulk insertのgemがあって助かりました。

```rb
  gem 'activerecord-import'
```

## bulk updateで調べよう
activerecord-import gemで"bulk update"が実現できますが、ON DUPLICATE KEY UPDATEを使っているため、MySql限定サービスらしいです。

ネットで「ActiveRecord bulk update」を調べてもいい回答がなく、もう降参だ！、と思いました。

## ひらめき
そのとき、update_all関数が目に留まりました。なるほど、だからbulk updateのgemがないわけですね。そもそもupdate_allがあるから。

```rb
  conditions.each_slice(1000) do |sliced_conditions|
    SomeModel.where(condition_field: sliced_conditions).update_all(field_to_be_update: value_to_set)
  end
```
で悩んでいたbulk updateを実現できました。
*each_sliceを使うのがSQLでINリストの上限オーバーを回避するため*

## 独り言
なるほど、そもそも、bulk updateって必要ないわけないですね。
Atomに入れたプラグインめも

2014/11/14現在 version 0.146.0 で使ってるプラグイン
※windows(64bit)環境です

## Autocomplete Plus

https://github.com/saschagehlich/autocomplete-plus

標準だと`ctrl-space`で表示されるオートコンプリート(自動補完)が自動表示されるようになる。  
標準だとTabキーによる確定。Enter確定のほうが何かと便利なので、KeyBindingを変更する。

1. `ctrl-,`で設定を開く
2. `Open in Atom` から設定を開く
3. `autocomplete-plus.cson`ファイルがあるので、変更する

    ```cson
    ".autocomplete-plus input.hidden-input":
        "enter": "autocomplete-plus:confirm"
    ```

## Docblockr

https://github.com/nikhilkalige/docblockr

コメントなどを自動補完してくれる。  
javascriptを例とすると

```
/**
```

とだけ打ってEnterを押すと、

```
/**
 * |←カーソル
 */
```
になる。

## File Icons

https://github.com/DanBrooker/file-icons

TreeViewで見たときのファイルアイコンが素敵になる。cool


## Git Plus

https://github.com/akonwi/git-plus

Git操作が楽になる。

`Ctrl-Shift-A a` で全ファイルAdd + コミット用のコメント記入用のパネルが開く。  
コメントを書いて保存すればすぐにコミット。楽。

## Linter

https://github.com/AtomLinter/Linter

Linter。画面下部にリアルタイムで表示されるようになる。  
言語に対応するプラグインを別途入れる必要あり。

とりあえず以下を追加

- Linter Coffeelint (Coffee Script)
- Linter Jshint (JavaScript)
- Linter Rubocop (Rails)
- Linter Ruby (Ruby)

## Local History

https://github.com/Nicolab/atom-local-history

ローカルの履歴管理が出来るようになる。

こまめにGit管理すればいいだけじゃね？という気もしますが、  
コミット忘れてて何かあったときのための保険。

## Minifier

https://github.com/wylst/atom-minifier

jsとcssのminifyが出来るようになる。

デフォルトだと `ctrl-shift-M` なので、Markdownプレビューと激突する。  
Autocomplete Plusのところと似たような感じで、KeyBindingsをかえるとよい。  
(とりあえず `ctrl-shift-alt-M` にしていて今のところ困ってはいない。)

`hoge.js`を開いている状態で実行すると、同じディレクトリに `hoge.min.js`が出来る。

## Monokai

https://github.com/kevinsawicki/monokai

Sublime Text のときの見た目が恋しくなったときに

## Script

https://github.com/rgbkrk/atom-script

javascript等を`ctrl-shift-B`で簡易的に実行出来るようになる。  
「この一行ってどうなるんだっけ？」みたいなときにサクっと見れる。


----

とりあえず今はこんな感じ。
beautifyとかも入れたいのですが、私の環境だとエラーになる・・。

Windowsだといい感じにMarkdown編集できるエディタが無かったので、Atomいいですね。
geolocation APIを使用するも位置情報がとれない（PERMISSION_DENIED）ときの対処


# この現象が起こる要因
*navigator.geolocation.getCurrentPosition()* を使用すると、iPhoneのSafari上に、以下の二つの確認メッセージが表示される。

1. (Safariで)位置情報の利用を許可するかどうか。
2. (ドメインに対して)現在の位置情報を利用してよいかどうか。

上記の確認で、許可しない（利用しない）を選択すると、以降確認のダイアログが表示されず、エラー発生時のコールバック関数の引数であるオブジェクトには、以下の内容が返却される様になる。

**obj.message : "User denied Geolocation"**
**obj.code    : 1 (= PERMISSION_DENIED)**

# 対処法として
iPhoneより以下の操作を行う事で、Safariの位置情報取得に関する設定を初期化する事が出来る。

**「設定」->「一般」->「リセット」->「位置情報とプライバシーをリセット」**

なお、[このサイト](https://discussionsjapan.apple.com/thread/10086315)が参考になりました。
代入なし関数型プログラミングはなぜ「簡単」か


# プログラミング == プランニング問題

| プログラム | プランニング |
|:-----------:|:------------:|
| 入力 | 初期状態 $s_0= \\{ p_0, p_1\ldots \\} $ |
| オブジェクト | 命題 $p$ |
| X86 命令セット | アクションスキーマ $A= \\{ a_0, a_1, \ldots \\}$ |
| X86 命令 | アクション $ a : s_i \mapsto s_j $ |
| レジスタ・メモリ | 状態 $s = \\{ p_0, p_1\ldots \\} $ |
| 出力 | ゴール条件 $s^* =\\{ p_0, p_1\ldots \\} $ |
| プログラム | プラン $P=(a_0, a_1, \ldots)$|

# 前提条件・追加効果・削除効果

アクションには前提条件・追加効果・削除効果がある。

    Destination=5, Source=7

のときに ADD 命令

    Destination = Destination + Source;

を実行すると、

    Destination=12, Source=7

となる。これを命題論理で表すと、

    (when (and (is destination five)
               (is source seven))
       (add    (is destination twelve))
       (delete (is destination five)))

と表現できる。

こういった命令=アクションを組み合わせて目的状態を達成するプランを探索する問題のことを、古典プランニング問題(ないしSTRIPSプランニング)と呼ぶ。

プランニングの計算複雑性クラスはPSPACE-Hard.

# 削除効果がない = NP-Hard

ここで、プランニング問題のうち、削除効果 (delete effect) がないが無いものを非削除(delete free)プランニング問題と呼ぶ。delete-free プランニング問題はナップサック問題と相互に変換でき、ナップサック問題はNP完全なので、delete-free プランニングはNP完全。

PSPACE-Hard から　NP-Complete に 計算複雑性クラスが下がる、すなわち、delete-free プランニング は古典プランニングより簡単。


# 破壊代入がない = 削除効果がない


プログラムを書く作業は、目的を達成するプログラムを探索することだから、本質的にプランニングと同じ。ここで、破壊代入がない == 操作によってfalseになる命題がないということ。従って、破壊的代入のない世界ではプログラミングがより簡単になる。
AWS CodeDeployでコマンドラインでGitHubからデプロイする方法


CLIの準備や、アプリケーションの作成などの全手順は[こちら](http://www.ryuzee.com/contents/blog/7022)を参照

# コマンド

S3経由の場合と違うのは、`--s3-location`の引数ではなく、`--github-location`を使う点となる。ここでレポジトリとコミットIDを指定すればOK

```
aws deploy create-deployment \
--github-location repository=ryuzee/codedeploy_sample,commitId=3ca071bfa2a0fc57d8b3491e12852e6a6e9cad0e \
--application-name sampleapp1 \
--deployment-group-name deploygroup1 \
--region us-west-2
```

以下のように表示されればOK

```

{
    "deploymentId": "d-UNFPQIZ9Z"
}
```
UICollectionViewにヘッダー、フッターを付ける方法がわからない

SwiftでUICollectionViewのヘッダー、フッターを表示させる方法がわからない。

どなたかの作った、動くソースがこちらにあった。
https://github.com/hiroto-yamashita/swift-collectionview
↑そのまま起動するとコンパイルエラーになるけど、?とかちょっと触ると動く。
ヘッダーを表示させようとしてるっぽいが、表示されない。

ヘッダービューのクラスを作って、それを
UICollectionViewControllerのcollectionViewメソッド内でオブジェクトを作って返す。
Swiftでできないというわけじゃないですよね。。

【追記】
ヘッダーが表示されない状態のソースをForkしてコンパイルエラーして、pushした。
https://github.com/hanoopy/swift-collectionview
![](http://i.gyazo.com/7844b974edbbca9a3214c6566e604521.png)
https://github.com/hanoopy/swift-collectionview/blob/master/CollectionViewTutorial/MyCollectionViewController.swift
こちらをみて分かる人がいたらいいなあ〜。

（追記終わり）

Objective-Cでやる方法はこちらとかあった。
http://www.appcoda.com/supplementary-view-uicollectionview-flow-layout/
re:invent2日目、新サービス雑感とまとめ


re:invent2日目の新サービス雑感です

1日目は[こちら](http://qiita.com/toyama0919/items/c6545bf91a0183407893)に書いていますのでよかったらどうぞ

## EC2 Container service
* dockerなどのContainerを扱えるサービス
* ECSと呼ぶ
* 複数AZにデプロイ可能
* dockerリポジトリ使用可能(docker hubとか)
* awscliはaws ecs ~
* VPC前提の記述あり

### 雑感
* 開発時にLocalでContainerを作って、それをEC2上にdeployするなんてことが出来るようになった。
* dockerリポジトリなら何でも使えるようなので、docker hubの盛り上がりが更に加速する可能性ある。
* docker名前先行でいまいち使われていなかった感があるが、起爆剤になるか。
* Containerを前提にしたアーキテクチャがあるので、そこのギャップをどう埋めるかが普及のための鍵か。
  * 環境が準備されただけで、それについていく人が増える事が重要。
* awscliのdemoやってた
* MarketplaceにContainerイメージが売買されそう。。

## AWS Lambda
* Eventのcallbackをプログラミング出来るサービス
* fluentdのプラグインを作れる環境、ただしevent発火条件はaws内のものとでも言うとわかりやすいか
* Event発火のtrigger
  * S3のupload,deleteなど
  * DynamoDBの更新
  * kinesis
* 現状node.jsのみ対応(他言語もsupportしてくって言ってた)
* ユースケース
  * S3にファイルをアップロードした際のウイルスチェック
  * S3にサムネイル画像をアップロードした際のリサイズ
  * Cloud Trailで何か操作があった際にS3にアップロードされるので、それをsnsにpush
* eventを処理するメモリサイズを128MB~1GBの中で指定する
* LambdaのLibraryにはImageMagickが同梱されている
* awscliだとこんな感じで関数をupload出来る(DynamoDBの例)

```bash
aws lambda upload-function \
   --region eu-west-1 \
   --function-name ProcessDynamoDBStream  \
   --function-zip file-path/ProcessDynamoDBStream.zip \
   --role arn:aws:iam::account-id:role/executionrole  \
   --mode event \
   --handler ddbtest.handler \
   --runtime nodejs \
   --debug \
   --profile adminuser
```

### 雑感
* callbackをrubyで書けるようにして欲しい
* 動かすコードの参照先をgithubとかにしたい
  * fluentdみたいにNPMで公開されたものをインストール出来る、とかだったら最高
* まだちょっとEventの定義が少ない気はするが、大体s3と連携しているサービスが多いのでそれで結果的に網羅できてる印象
* KinesisからEvent Driven的なserviceにも力を入れてきてるように思う

## c4 instance
* インテルHaswellプロセッサ搭載
* EC2の中で最も高い計算能力を発揮
* 拡張ネットワーキングを利用
  * 著しく高いパケット/秒(PPS)性能
  * 少ないネットワークの揺らぎ
  * 低いネットワークレイテンシー
* ハードウェア仮想化(HVM)を利用
* VPC onlyの記述あり。
* EBS-Optimizedがdefault
* タイプ一覧

![c4](http://gyazo.com/d03fa30bfda182d6da138d62e6d10f01.png "c4")

### 雑感
* このインスタンスタイプのアップデートの早さを見ると、Reserved3年契約とかもう絶対やめたほうが良さそう
* 今後はvpc前提のサービスやResourceが増えそうな機運を感じた。
* 拡張ネットワーキング気になるところ、こういう恩恵って結構Amazon Linuxじゃないと受けられなかったりするので。



## EBS
* General Purpose(SSD)
  * 最大16TBの容量(もともと1TB)
  * 最大10,000IOPSのベースパフォーマンス(もともと3000IOPSが最大値)
  * 最大スループットは160MB/s(もともと128MB/s)

* Provisioned IOPS(SSD)
  * 最大16TBの容量(もともと1TB)
  * 最大20000IOPSまでのパフォーマンスを指定可能(もともと4000プロビジョンIOPSが最大)
  * 最大スループットは320MB/s(もともと128MB/s)

![EBS](https://pbs.twimg.com/media/B2SK_QDCMAASgpE.jpg "EBS")

### 雑感
* IOPS、容量ともに倍以上になった。
* 16TBとかになるとスナップショット取る時間とか凄い掛かりそう。
  * バックアップの速度結構遅いので改善して欲しい。。
* MYSQLをEC2でhardに使ってるところとかだと、PIOPSの性能向上は相当嬉しいはず(お金もかかるけど)

## 今日出たsession
* 基調講演
* MBL202-R - NEW LAUNCH: Getting Started with AWS Lambda
* APP303 - Lightning Fast Deploys with Docker Containers and AWS
* SDD402 - Amazon ElastiCache Deep Dive
* APP313 - NEW LAUNCH: Amazon EC2 Container Service in Action


## 全体的に
* 2日目の新サービスは一転してアーキテクチャ寄りだった。
* CTOのWerner Vogelsいい声してた。
* 東京Regionは後回しみたいなのが多そう
* re:play会場が爆音過ぎているのが辛かった
* aws-sdk-v2が良さそうだった
* [こちら](https://twitter.com/toyama0919)で実況に近いことやってます
Railsでアプリの設定とは別のタイムゾーンでparseする


例えばアプリはUTCで動かしているけど設定はJSTでやりたいみたいな場合は、時間文字列の末尾にタイムゾーンまたは実際の時差を入れて`DateTime.parse`するとうまくいく。

```
DateTime.parse("2014-11-14 19:53:44 JST")
DateTime.parse("2014-11-14 19:53:44 +0900")
DateTime.parse("2014-11-14 19:53:44 +9")
```

実際にActiveRecordのモデルにいれてみると

```
time = DateTime.parse("2014-11-14 19:53:44 JST")
user = User.new(created_at: time)
user.created_at.to_s # => "2014-11-14 10:53:44 UTC"
```
意図通り設定されている。
最低限覚えたいXcodeのショートカットコマンド

新しくiOSアプリを書き始める人に教えたら
「もっと早く言って！」って言われました。

|コマンド                |動作|
|-----------------------|-----------------------------|
|**Command + クリック**  | メソッド、クラスの定義に飛ぶ |
|**Ctl + / (または Tab)**| 補完された次のプレースホルダに移動|
|**Ctl + i**             | 1行を自動インデント |
|**Command + /**         | 1行をコメントアウト |

Emacsのキーバインドはデフォルトで割と使えます。
「プログラムでシダを描画する」をClojureで描画する(リアルタイム描画)

> 空前のシダ描画ブーム到来！？(^^;)
> あなたも得意なプログラミング言語でシダを描画してみよう！

Clojure版は既出ですが、マルチスレッドでリアルタイムに描画するコードを書いてみました。
(バグとかご意見ありましたら https://twitter.com/akmiyoshi までお願いします)

![2014-1114-1950.png](https://qiita-image-store.s3.amazonaws.com/0/32879/974ad609-d056-85bd-c800-17c15f83eac7.png)

```clj:project.clj
(defproject sida "1.0.0"
  :main sida.core
  :dependencies [[org.clojure/clojure "1.6.0"]
                 [quil "2.2.2"]])
```

```clj:src/sida/core.clj
(ns sida.core
  (:gen-class)
  (:require [quil.core :as quil]))

(def QUIL-WIDTH 500)
(def QUIL-HEIGHT 500)
(def PLOT-STEP 500)

(def quil-count (atom 0))
(def plot-count (atom 0))
(def plot-queue (new java.util.concurrent.ConcurrentLinkedQueue))

(defn setup []
  (quil/frame-rate 200) ;; 200 FPS
  (quil/no-smooth) ;; アンチエイリアスなし
  (quil/background 0 0 0) ;; 黒 ⇒ RGB(0,0,0)
  (quil/stroke 0 255 0) ;; 緑 ⇒ RGB(0,255,0)
  (quil/stroke-weight 1))

(defn draw []
  (let [$size (.size plot-queue)]
    (dotimes [_ $size]
      (let [[$x $y] (.poll plot-queue)]
        (quil/point
          (+ (* $x (quil/width) 0.98) (* (quil/width) 0.5))
          (- (quil/height) (* $y (quil/height) 0.98)))
        (swap! quil-count inc)))
    (when (> $size 0)
      (println "Draw-Thread: $size=" $size "(quil-count=" @quil-count ")"))))

(defn W1x [$x $y] (+ (* 0.836 $x) (* 0.044 $y)))
(defn W1y [$x $y] (+ (* -0.044 $x) (* 0.836 $y) 0.169))
(defn W2x [$x $y] (+ (* -0.141 $x) (* 0.302 $y)))
(defn W2y [$x $y] (+ (* 0.302 $x) (* 0.141 $y) 0.127))
(defn W3x [$x $y] (- (* 0.141 $x) (* 0.302 $y)))
(defn W3y [$x $y] (+ (* 0.302 $x) (* 0.141 $y) 0.169))
(defn W4x [$x $y] 0)
(defn W4y [$x $y] (* 0.175337 $y))

(defn plot [$x $y]
  (.add plot-queue (vector $x $y))
  (swap! plot-count inc)
  (cond
    (< @plot-count PLOT-STEP) (Thread/sleep 5)
    (= 0 (rem @plot-count PLOT-STEP)) (Thread/sleep 5)))

(defn f [$k $x $y]
  (cond
    (< 0 $k)
    (do
      (f (- $k 1) (W1x $x $y) (W1y $x $y))
      (when (< (rand) 0.3)
        (f (- $k 1) (W2x $x $y) (W2y $x $y)))
      (when (< (rand) 0.3)
        (f (- $k 1) (W3x $x $y) (W3y $x $y)))
      (when (< (rand) 0.3)
        (f (- $k 1) (W4x $x $y) (W4y $x $y)))
      )
    :else
    (plot $x $y)))

(defn -main [& args]
  ;; Start quil (draw) thread
  (quil/defsketch draw-thread
    :title "Sida in Clojure"
    :draw draw
    :setup setup
    :size [QUIL-WIDTH QUIL-HEIGHT]
    :features [:exit-on-close])
  (println "Main-Thread Start")
  (f 20 0 0)
  (println "Main-Thread End: plot-count=" @plot-count))
```
Swift で関数一つ呼ぶのに苦労した話し

# 概要

Swift では関数定義は比較的簡単にできますが、呼び出し方法にはややクセがあります。
感覚でコードを書いてるとハマります。古いドキュメント等を見ててもハマります。

**関数呼び出し方法**

|   |引数が 1 つ|引数が 2 つ以上|
|---|----|----|
|**ラベル無し**|①呼び出し時に引数名は不要|**②2 つめ以降は引数名を指定して呼び出し**|
|**ラベル有り**|③ラベルを指定して呼び出し|④ラベルを指定して呼び出し|

**②ラベル無し、かつ複数の引数を持つ関数** の呼び出し方法には注意が必要。

# サンプル

## ①ラベル無し・引数 1 つ

```swift
func myFunc1(str1:String) {
    println("str1=\(str1)")
}

// 引数名は不要
myFunc1("foo") // OK
myFunc1(str1: "foo") // Extraneous argument label 'str1:' in call
```


## ②ラベル無し・引数複数

```swift
func myFunc2(str1:String, str2:String) {
    println("str1=\(str1), str2=\(str2)")
}

// 2 つめ以降の引数には引数名が必要（1 つめの引数には不要）
myFunc2("foo", "bar") // Missing argument label 'str2:' in call
myFunc2(str1: "foo", str2: "bar") // Extraneous argument label 'str1:' in call
myFunc2("foo", str2: "bar") // OK
```

## ③ラベル有り・引数 1 つ

```swift
func myFunc3(label1 str1:String) {
    println("str1=\(str1)")
}

# ラベルが存在する場合は（引数名ではなく）ラベルをつけて呼び出す
myFunc3("foo") // Missing argument label 'label1:' in call
myFunc3(str1: "foo") // Incorrect argument label in call (have 'str1:', expected 'label1:')
myFunc3(label1: "foo") // OK
```

## ④ラベル有り・引数複数

```swift
func myFunc4(label1 str1:String, label2 str2:String) {
    println("str1=\(str1), str2=\(str2)")
}

# ラベルが存在する場合は（引数名ではなく）ラベルをつけて呼び出す
myFunc4("foo", "bar") // Missing argument label 'label1:label2:' in call
myFunc4(str1: "foo", str2: "bar") // Incorrect argument label in call (have 'str1:str2', expected 'label1:label2')
myFunc4(label1: "foo", label2: "bar") // OK
myFunc4(label1: "foo", str2: "bar") // Incorrect argument label in call (have 'label1:str2', expected 'label1:label2')
```


# Playground で試すと挙動が違う？

Playground で試すとラベル名が指定されていない関数に関しては、
（複数引数が存在する場合でも）引数名を設定する必要がないです。

Playground で利用している Swift のバージョンが異なるのでしょか？
XCode の設定の問題でしょか？なんでだろう。

**関数呼び出し方法**

|   |引数が 1 つ|引数が 2 つ以上|
|---|----|----|
|**ラベル無し**|①呼び出し時に引数名は不要|**②呼び出しの際に引数名不要（ここが違う）**|
|**ラベル有り**|③ラベルを指定して呼び出し|④ラベルを指定して呼び出し|


## ①ラベル無し・引数 1 つ

```swift
func myFunc1(str1:String) {
    println("str1=\(str1)")
}

// 引数名は不要
myFunc1("foo") // OK
myFunc1(str1: "foo") // Extraneous argument label 'str1:' in call
```


## ②ラベル無し・引数複数

```swift
func myFunc2(str1:String, str2:String) {
    println("str1=\(str1), str2=\(str2)")
}

// 引数名は不要（！）
myFunc2("foo", "bar") // OK
myFunc2(str1: "foo", str2: "bar") // Extraneous argument label 'str1:str2:' in call
myFunc2("foo", str2: "bar") // Extraneous argument label 'str2:' in call
```
Xamarin.Forms をガチで使うときのプロジェクト構成案


　[Xamarin.Forms](http://xamarin.com/forms)（以下 XF とします）を本格的に開発に導入してみようと思ってるんだけど、その時のプロジェクト(アセンブリ)構成はこんな感じかな、というのを考えてみた。

## コンセプト

* XF を使う理由は、Viewのワンソース化よりも *DataBinding機構が使えること*
* いざという時逃げられるように XF への依存を最小限にする
* iOS/Android 対応アプリ開発のこと、他は知らん
* MVVM で PCL で、PCL のところを最大化する

## プロジェクト構成図

　角丸四角形がプロジェクトを、矢印は依存を示す。

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

左から説明。

### XF.Android, XF.iOS, XF.Core

　Xamarin.Forms ソリューションを作成するとテンプレで作られるプロジェクト群。
　XF.Core でプラットフォームに依存しないView（ボタンとか）を、XF.Android/XF.iOS でプラットフォーム固有のView（スライドメニューとかNotificationなど）を提供する。
　これらは BindableProperty を介して ViewModel とデータバインディングする。
　XF は他に、ServiceLocator や MessageCenter を提供するが、それらは使用しない（ロックインを防ぐため）
　結局この案では、「XF=View層のみ」となる。

### App.Core

　アプリのView以外の共通部分のプロジェクト。ViewModel と Model を含む。
　ViewModel から View へシグナルを送るために "XFではない" Messengerを使う。（MvvmLight とか Prism とかから引っこ抜いてくればいいかな？）
　Model にはビジネスロジックのみを記述し、通信処理やデータI/Oなどのプラットフォーム共通なAPIはModelから直接使い、プラットフォーム固有の機能は、ServiceInterface を使う。
　ServiceInteface は、ServiceLocator によって App.Android/iOS から実体が Inject される。ServiceLocator は "XFではない"…以下略
　Rx を使うので、たぶん Model のメソッドの返り値は全部 IObservable<T> になります。

### App.Android, App.iOS

　プラットフォーム固有のAPI層。例えば GPS とか、アプリ連携とか、アイテム課金とか。ServiceInterface に定義されている Interface を実装するところ。

## 懸案

* PUSH通知受信とか、本来は Platform Specific APIs で担当したいが、プラットフォームの都合で、View で受信しなければならない機能の落としどころ。
* App.core をもっと分割した方がよい「ViewModelからAPI呼ばないよね？」とか「App.AndroidからModelにアクセスできるのがイヤ」とかを厳格に制限しようと思ったら分割した方が良さそう。
* Model から左側を全部 IObservable<T> 化しようと思っているが、Callback→Observable変換をModelでやるか、API層でやるか。"ビジネス"ロジックではないので、右側かな。
* XF.Core にどれだけ詰め込むか。画面レイアウトもXFでできるだけ頑張る、画面遷移フレームワークもXFで用意する、か？Sketches がどこまで活用できるか？

さて、どんなもんでしょ？
TrelloでBoardを削除する

TrelloでWelcome Boardを削除したかったのですが、なかなか分かりにくい場所にありました。

![trello.board.close.png](https://qiita-image-store.s3.amazonaws.com/0/52375/2b94dd75-b8e9-5235-49a6-0a6be1443dc3.png)

上の画像のとおり、該当boardに入り、右のサイドバーの`Menu`をクリック。
サイドバーが出ていない方は`Show sidebar`をクリックすると出ます

そうするとメニューが開かれるので、その中の`Close Board`を押すと削除できます。
※厳密にいうと削除ではなく一時的に非表示にしているだけです。

以上です。
Python で Project Euler #8「数字列中の最大の積」

[Problem 8 「数字列中の最大の積」](http://odz.sakura.ne.jp/projecteuler/index.php?cmd=read&page=Problem%208)

> 以下の1000桁の数字から13個の連続する数字を取り出して その積を計算する. そのような積の中で最大のものの値はいくらか.
>
> > (※数値はプログラム中に記載のため省略)
>
> EX 6桁の数123789なら, 1*2*3*7*8と2*3*7*8*9の二通りとなり, 後者の2*3*7*8*9＝3024が最大の積となる.

```py:Python
n = 13

text = """
73167176531330624919225119674426574742355349194934
96983520312774506326239578318016984801869478851843
85861560789112949495459501737958331952853208805511
12540698747158523863050715693290963295227443043557
66896648950445244523161731856403098711121722383113
62229893423380308135336276614282806444486645238749
30358907296290491560440772390713810515859307960866
70172427121883998797908792274921901699720888093776
65727333001053367881220235421809751254540594752243
52584907711670556013604839586446706324415722155397
53697817977846174064955149290862569321978468622482
83972241375657056057490261407972968652414535100474
82166370484403199890008895243450658541227588666881
16427171479924442928230863465674813919123162824586
17866458359124566529476545682848912883142607690042
24219022671055626321111109370544217506941658960408
07198403850962455444362981230987879927244284909188
84580156166097919133875499200524063689912560717606
05886116467109405077541002256983155200055935729725
71636269561882670428252483600823257530420752963450
"""[1:-1]

bignum_str = reduce(lambda x,y: x+y, text.split("\n"))

max_prod = 0
max_num_str = ""
for i in range(len(bignum_str)):
  num_str = bignum_str[i:i+n]
  if(len(num_str) == n):
    prod = reduce(lambda x,y: int(x)*int(y), num_str)
    if(prod > max_prod):
      max_prod = prod
      max_num_str = num_str

result = max_prod
print result
print result == 23514624000
print max_num_str
```

```:結果
23514624000
True
5576689664895
```
Ruby2.1.xを使うためのGemfileの指定について


rubyの2.1系からセマンティックバージョニングに移ったので3桁目がよく更新される。

Rubyのバージョン指定として、Gemfileに

```Gemfile
ruby '2.1.5'
```

とかするけど、チーム開発してたりすると誰かが更新したらそれ取り込んだ時点で強制的にアップデートしなきゃいけなったりするの若干面倒で、自分のタイミングで更新したいとかあるはず。

それどう指定すればいいんだろうと思って色々調べてた時に見つけたのが[こちら](http://blog.uu59.org/2013-03-16-bundler-ruby-version.html)。Gemfileで下記のように指定する。

```Gemfile
target = "2.1.0"
if Gem::Version.new(RUBY_VERSION.dup) < Gem::Version.new(target)
  puts "Use ruby #{target}+ (Your version is #{RUBY_VERSION})"
  exit(1)
end
```

こうするとruby2.0系を使ってるとbundleが実行されず、2.1以降だとbundleが通る。

```2.0系
$ rbenv global 2.0.0-p594
$ bundle install 
Use ruby 2.1.0+ (Your version is 2.0.0)
```

```2.1系
$ rbenv global 2.1.4
$ bundle install
...
Your bundle is complete!
Use `bundle show [gemname]` to see where a bundled gem is installed.

$ rbenv global 2.1.5
$ bundle install
...
Your bundle is complete!
Use `bundle show [gemname]` to see where a bundled gem is installed.
```

いい感じ。
Specifying accept-language of browserstack


I managed to figure out the way to specify `accept-language` only when using chrome as the browser.

```
caps = Selenium::WebDriver::Remote::Capabilities.new
caps["chromeOptions"] = {}
caps["chromeOptions"]["args"] = ["--lang=ja"]

caps["browser"] = "chrome"
caps["browser_version"] = "21.0"

```

This also works for android/Samsung Galaxy S5 for some reason.

```
caps = Selenium::WebDriver::Remote::Capabilities.new
caps["chromeOptions"] = {}
caps["chromeOptions"]["args"] = ["--lang=ja"]

caps[:browserName] = 'android'
caps[:platform] = 'ANDROID'
caps['device'] = 'Samsung Galaxy S5'
```
(iOS8.1)PhotoKitで各種アルバムを取得する


雑なメモですみません。

自前で写真選択UIを作り込む必要が出たのですが、iOS8から使えるようになったPhotoKitを使ってあれこれやってわかったことを適当に残しておきます。

* Xcode6.1 + SDK8.1 + iOS8.1 + Swift

## 標準写真アプリのアルバムタブに出てくる各アルバムの取り方

`PHAssetCollection.fetchAssetCollectionsWithType(...)`のタイプとサブタイプにいろいろ突っ込めば目的のコレクションだけ取得できる。

|アルバム|タイプ|サブタイプ|
|:--|:--|:--|
|カメラロール|SmartAlbum|SmartAlbumUserLibrary|
|自分のフォトストリーム|Album|AlbumMyPhotoStream|
|お気に入り|SmartAlbum|SmartAlbumFavorites|
|パノラマ|SmartAlbum|SmartAlbumPanoramas|
|ビデオ|SmartAlbum|SmartAlbumVideos|
|スローモーション|SmartAlbum|SmartAlbumSlomoVideos|
|タイムラプス|SmartAlbum|SmartAlbumTimelapses|
|ユーザーが端末上で作成したアルバム|Album|AlbumRegular|
|iTunesで同期したアルバム|Album|AlbumSyncedAlbum|

ユーザーが端末上で作成したアルバムは他にも`PHCollection.fetchTopLevelUserCollectionsWithOptions(...)`を使って取得することもできる。


### よくわからん事

* 今のところ固定アルバムの順番はハードコーディングするしかなさそうな予感だが、標準写真アプリと同じような順番で列挙する方法が無いか？（贅沢を言えば標準写真アプリと同じ順番＆内容で列挙する方法が無いか？）
* 「最近削除した項目」の取り方（特に必要ではないが）
* アルバムを列挙すると「バースト」とか「最後に追加した項目」とか「非表示」とかあるけど、標準写真アプリでいつ出てくるんだろう？
* ユーザーが端末上で作成したアルバム（複数）やiTunesで同期したアルバム（複数）をどういう順番で並べてユーザーに提供したら良いか？

## 参考にしたサイトなど

* https://developer.apple.com/library/IOs/documentation/Photos/Reference/PHAssetCollection_Class/index.html#//apple_ref/c/tdef/PHAssetCollectionSubtype
* http://stackoverflow.com/questions/25981374/ios-8-photos-framework-get-a-list-of-all-albums-with-ios8
MacTeX 2014+texmaker+GhostView の環境で日本語PDFを作成する方法


##環境
MacTeX 2014
OSX Marvericks

##症状
MacTeX 2014同梱のtexmakerに日本語を含むLaTeX文章のコンパイル設定をした後　http://oku.edu.mie-u.ac.jp/~okumura/texwiki/?Texmaker%2F%E8%A8%AD%E5%AE%9A%2FOS%20X
[LaTeX + Bib(la)tex + LaTeX (x2) + dvips + ps2pdf + View Pdf]でQuick Buildした際にPDFで日本語が化ける

##原因?
1.texmakerのbuilt-in PDFViewerは日本語が表示できない?
2.MacTeXのps2pdfでは日本語を扱えない?

##対策
###http://www.muskmelon.jp/?page_id=75 で公開されてるGhostViewに含まれるps2pdfを利用する
1.GhostViewをインストールする
2.texmakerの設定でps2pdfの項目を``"/Applications/Ghostscript.app/bin/ps2pdf" %.ps``に変更

##追加:ヒラギノなフォント埋め込みでは困る場合(ipaフォントを適用する方法)
1.``kanji-config-updmap ipa``を実行
2.GhostViewのcidfmapにIPAフォントの定義を追加

```diff:/Applications/Ghostscript.app/share/ghostscript/9.15/Resource/Init/cidfmap

+/IPAMincho << /FileType /TrueType /SubfontID 0 /CSI [(Japan1) 6] /Path (/usr/local/texlive/2014/texmf-dist/fonts/truetype/public/ipaex/ipam.ttf) >> ;
+/IPAGothic << /FileType /TrueType /SubfontID 0 /CSI [(Japan1) 6] /Path (/usr/local/texlive/2014/texmf-dist/fonts/truetype/public/ipaex/ipag.ttf) >> ;

/Ryumin-Light           /HiraMinPro-W3 ;
/Ryumin-Regular         /HiraMinPro-W6 ;
/FutoMinA101-Bold       /HiraKakuStd-W8 ;
/GothicBBB-Medium       /HiraKakuPro-W3 ;
/FutoGoB101-Bold        /HiraKakuPro-W6 ;
/Jun101-Light           /HiraMaruPro-W4 ;

```
3.texmakerの設定でps2pdfの項目を``env GS_LIB=/usr/local/texlive/2014/texmf-dist/fonts/truetype/public/ipaex "/Applications/Ghostscript.app/bin/ps2pdf" %.ps``に変更
#kichijojipm mini 初めてのPerl読書会（第２回）	に参加してきました。


@magnolia_k_ さんが主催する、Kichijoji.pmの番外編である、Kichijoji.pm mini 初めてのPerl読書会（第２回）に参加してきました。
少人数で集まって音読し、気になる所をあーでもないこーでもないと意見しあう読書会です。

第１回も参加したのですが、あーでもないこーでもないしているとなかなか読み進まず、前回は「第２章 スカラーデータ」しか読めなかったのですが、今回もあーでもないこーでもないで盛り上がり「第３章 リストと配列」だけで精一杯でした。
とは言えPerlにおいてリストと配列はわりと最初のハマりポイントなので、じっくりやれて良かったんじゃないかと思います。

## 会場

今回の会場は（吉祥寺になかなかいい場所がみつからない事情もあり）武蔵境駅徒歩３分くらいのコワーキングスペース「[ぴこす](http://picos.pickle.ne.jp/)」でした。
小奇麗でアットホームなスペースでとても居心地が良かったです。
Facebookの写真で少しだけ屋内の雰囲気もかめます (https://www.facebook.com/picos.musashisakai)

## あーでもないこーでもない

[リストと配列(Array)はPerlでは別物](http://togetter.com/li/263729) をみなで囲んで読みなら、とにかくリストはリスト言わず、リストコンテキストって用語で使わないと混乱するよねーって話してました。

コンテキストで返り値が変わるメソッド実装はよくあるので（例えばスカラコンテキストではイテレータ、リストコンテキストでは配列を返すメソッド）
理解が浅いうちに以下のようにしてしまい、なぜだー！ってなるの結構Perl怖い話だよねーって感じでした。

```
my ($all) = MyDB->get_all; # (で囲んでしまったら)リストコンテキストである！
# my $all = MyDB->get_all; # 正しくはこちら

while(my $item = $all->next){
	print $item->id;
}
```

## eachを配列に使うとインデックスを返す（>=5.12）

新しい発見としてはeachを配列に使うとインデックスを受け取ることができる機能が5.12から実装されていることが書かれていました。

```
use 5.012;

my @list = qw/mon tue wed thu fri sat sun/;

while ( my ( $i, $val ) = each @list ) {
  say "$i: $val";
}
```

## 名言(迷言) 事実、Perl を学ぶことのうち大きな部分を占めるのは、Larry の考え方を学ぶことなのです

ここは一同苦笑いで読書が進まない感じでした。Larryさん。。。

>通常はリストを生成するために使うような式はたくさんあります。そのような式をスカラーコンテキストで使うと何が得られるでしょうか? それを知るには、作った人が言っていることを調べてください。通常、その人物とは Larry であり、ドキュメントを読めばすべてが記述されてい ます。事実、Perl を学ぶことのうち大きな部分を占めるのは、Larry の考え方を学ぶことなのです*27 。ですから、Larry のように考えられるようになれば、Perl が何をするかが理解できるように なるはずです。
> *27 これはそんなに大変なことではありません。なぜなら、LarryはPerlを書く際に、あなたのような人の立場に立って、どんなものが欲しいだろうかを予想していたからです。

要は、コンテキスト重要！ってことですかね（笑）人間のコミュニケーションでもコンテキスト（文脈）はとても重要ですから。

## 余った時間で少しだけサブルーチン

本当は４章サブルーチンまでやるはずだったのですが、リストで盛り上がりすぎて時間が微妙になってしまい、余った時間で少しだけ僕が最近はまったサブルーチン話題を共有しました。

Perlのデプロイツールである[Cinnamon](https://github.com/kentaro/cinnamon)を導入しようとして設定ファイルを書いていた時に、DSLがあまりに（自分には）奇妙でした。

```
remote {
  run "cd $deploy_to && git fetch origin && git checkout -q $branch && git submodule update --init";
} $host;
```

remoteがサブルーチンなのはわかりましが、引数が関数リファレンスっぽいのにsubが無いし、第二引数の前に,(カンマ)がない。なんじゃこりゃー。

[ソース]
(https://github.com/kentaro/cinnamon/blob/master/lib/Cinnamon/DSL.pm#L42)をみると、

```
sub remote (&$) {
  my ($code, $host) = @_;
  ...
}
```

ということでサブルーチンのプロトタイプだったんですね。
http://perl-users.jp/modern_introduction_perl/sub_prototype.html
この辺りを読んである程度理解は出来たのですが、普通に書いたほうが混乱無いと思うんですけど、プロトタイプを使うメリットって…？

```
remote sub {
  run "cd $deploy ..."
}, $host;
```

## 次回 サブルーチン

年内にもう一回読書会が開ければいいな、とのことなので、こんな感じであーだこーだ話したい人は是非参加していただきたく思います！ （#kichijojipm か 主催の @magnolia_k_ さんをヲチすると吉）
@magnolia_k_ さんお忙しい中主催あがりがとうございました！！
Mac OSのUnityでJavaのバージョンが古くなってしまっている時の対応

プラグインとして使用しているライブラリのjarファイルが求めているバージョンなどで、現在のMacにインストールされているJavaではコンパイル時にエラーとなるときがある。

<pre>
�x��:java/lang/Object.class(java/lang:Object.class): ���W���[�o�[�W���� 51 �́A���̃R���p�C���ŃT�|�[�g�����Ă����ŐV�̃��W���[�o�[�W���� 50 �����V�����ł��B
�R���p�C���̃A�b�v�O���[�h�������߂��܂��B
�x��:java/lang/String.class(java/lang:String.class): ���W���[�o�[�W���� 51 �́A���̃R���p�C���ŃT�|�[�g�����Ă����ŐV�̃��W���[�o�[�W���� 50 �����V�����ł��B
�R���p�C���̃A�b�v�O���[�h�������߂��܂��B
�x�� 2 ��
</pre>

というエラーが文字化けして出てくることもある。
これはどうやら
<pre>
java/lang/Object.class(java/lang:Object.class): major version 51 is newer than 50, the highest major version supported by this compiler. It is recommended that the compiler be upgraded. 1 warning
</pre>
ということのようなので、javaのバージョンを確認する。

しかし、Appleの古いJDK (1.6以前)とOracleのJDK(1.7以降)が入っている場合、
コマンドラインから
<pre>
java -version
</pre>
としても、1.8と返ってくることがある。
Unityが参照しているバージョンとは明らかに違う。

この場合、Unityがandroidのコンパイルに使用しているのは
/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK
からリンクされたJDKのようだ。

OracleからインストールしたJDKは、
/Library/Java/JavaVirtualMachines/jdk1.8.0_25.jdk/Contents/
というように格納されているので、そちらを指すようにする。

形式に習って、/System/Library/Frameworks/JavaVM.framework/Versions/以下で

<pre>
sudo ln -s /Library/Java/JavaVirtualMachines/jdk1.8.0_25.jdk/Contents/ 1.8.0
sudo rm CurrentJDK
sudo ln -s 1.8.0 CurrentJDK
</pre>
として、CurrentJDKが1.8.0を向くようにする。
Dartでjsonp


はじめに、まず、 **Ajaxを呼ぶ先が Acess-Control-Allow-Origin をちゃんと返していれば、こんな凝ったことする必要ない** です。

さて、Ajaxで呼べない時のJSONPの取り方。パッケージの中には、下記の2つのように動きそうなライブラリがあるが、動かず。

* [jsonp_request](https://github.com/cherreman/dart-playground/tree/master/jsonp_request)
* [jsonp](https://pub.dartlang.org/packages/jsonp)

ちなみに、Dart VMは1.7.2 (2014/11/14)。

さて、困りました。ということで、次のようなコードを発見したのでメモ。(参照[sample_jsonp](https://github.com/dart-lang/sample-jsonp))

```dart

import 'dart:html';
import 'dart:js';

void main() {
  querySelector("#button")
      ..text = "Click me!"
      ..onClick.listen(fetchJSON);
}

void fetchJSON(MouseEvent event) {
  context['myCallback'] = (res) {
    print(convert(res));
  };
  ScriptElement script = new Element.tag("script");
  script.src = "https://api.github.com/users/dart-lang/repos?callback=myCallback";
  document.body.children.add(script);
}

convert( JsObject object ) {
  return JSON.decode( context['JSON'].callMethod("stringify", [ object ]));
}

```

ちょっと解説。

`("#button")`のクリックする度にデータを取得しに行っている。

`context`というのは、Dart内でJSでの変数を参照する時に使うもの。このコードでは`myCallback `に`=`以降の関数をアサインしている。
その次の後の行で`<script>`タグを作りだして、その`src`にJSONPで呼ぶべきURLを渡している。

そして、ajaxで得たJsObjectをDartの文字列に変換するのにも`context`から、JSの`JSON.stringigy()`を呼び出している。

ふむふむ。なんとも苦肉の策。
私がインストールしているBracketsのプラグイン一覧

### プラグイン

|プラグイン名|説明|
|:--|:--|
|Brackets Icons|※記述中|
|Emmet|※記述中|
|Extract for Brackets (Preview)|※記述中|
|Indent Guides|※記述中|
|Indentator|※記述中|
|jsbeautifier|※記述中|
|Lorem Ipsum|※記述中|
|Markdown Preview|※記述中|
|Minifier|※記述中|
|Quick Search|※記述中|
|Rename JavaScript Identifier|※記述中|
|Sidebar Plus|※記述中|
|String Convert|※記述中|
|Strip trailing spaces|※記述中|
|SVG Preview|※記述中|
|Tab To Space|※記述中|
|Themes|※記述中|

この他にステキなプラグイン、このプラグインよりこっちのほうがいいよ～という情報があれば教えてください。
Windows Server 2012 R2でのMicrosoft .Net Framework 3.5の構成

# 概要

Windows Server 2012 R2でMicrosoft .Net Framework 3.5を構成したい時は、「機能の追加」を使用する。またいくつかのトラブルシュートにも触れる。

# 詳細

Windows Server 2012 R2でMicrosoft .Net Framework 3.5を構成したい時は、「機能の追加」を使用する。また「状態: 0x800f0906」でエラー終了するときは、特に[KB:3005628](http://support2.microsoft.com/kb/3005628)を確認する。

## インストール方法

msdn.microsoft.comの「[Windows 8 または 8.1 への .NET Framework 3.5 のインストール](http://msdn.microsoft.com/ja-jp/library/vstudio/hh506443.aspx)」を参照。Windows 8向けの情報だが、Technetの「[Windows 8 または Windows Server 2012 へ .NET Framework 3.5 をインストールする方法](http://blogs.technet.com/b/askcorejp/archive/2012/12/11/windows-8-windows-server-2012-net-framework-3-5.aspx)」によれば、Windows Server 2012でもこの方法でよい。

おおまかには、以下になる。

1.「スタート」画面で、「コントロール パネル」と入力して選択します（スタート画面にアクセスするには、キーボードの Windows ロゴ キー を押します）。
2.「プログラム」を選択し、「Windows の機能を有効化または無効化」を選択します。「役割と機能の追加ウィザード」が開始されます。
3.「機能」のステップで、「.NET Framework 3.5 (.NET 2.0 と 3.0 を含む)」チェック ボックスをオンにします。

## トラブルシュート

### 「ソースファイルが見つかりませんでした」

私の環境では、「ソースファイルが見つかりませんでした」となった。この場合以下を試す。

* Windows Serverのインストールメディアを挿入した状態で手順を行う。「役割と機能の追加ウィザード」の「確認」ステップで、代替ソースとしてインストールメディアの `<ドライブレター>:\sources\sxs\` ディレクトリを指定して、実行する。指定時、最後の `\` を省かないこと。
* 上記をローカルディスクにコピーしてから、同様に実施する。OSとドライブとの相性で失敗した事例があるとのこと。

### エラーコードの確認

イベントビューアー＞Windowsログ＞Setupを確認する。

### エラーコード：0x800F0906、0x800F081F、0x800F0907

イベントに0x800F0906、0x800F081F、0x800F0907のいずれかの状態が記録されているときは、以下のナレッジを確認する。

* [.NET Framework 3.5 インストール エラー: 0x800F0906、0x800F081F、0x800F0907](http://support.microsoft.com/kb/2734782/ja)

### エラーコード：0x800F0906

イベントに「パッケージMicrosoft .NET Framework 3.0のNetFx3を有効にできませんでした。状態: 0x800f0906」が記録されていたら、「[Windows 8、Windows 8.1、Windows Server 2012、および Windows Server 2012 R2 上の .NET Framework 3.5 の更新プログラム](http://support2.microsoft.com/kb/3005628)」も確認する。

おおまかには、セキュリティ更新プログラム 2966827 または 2966828が適用されていると、NetFx3を有効にできない。この場合、更新プログラム 3005628 をインストールする。この問題は、Windows 8、Windows Server 2012、同2012R2で発生する。

# 参考

* [Windows 8 または 8.1 への .NET Framework 3.5 のインストール](http://msdn.microsoft.com/ja-jp/library/vstudio/hh506443.aspx)
* [Windows 8 または Windows Server 2012 へ .NET Framework 3.5 をインストールする方法](http://blogs.technet.com/b/askcorejp/archive/2012/12/11/windows-8-windows-server-2012-net-framework-3-5.aspx)
* [.NET Framework 3.5 インストール エラー: 0x800F0906、0x800F081F、0x800F0907](http://support.microsoft.com/kb/2734782/ja)
* [Windows 8、Windows 8.1、Windows Server 2012、および Windows Server 2012 R2 上の .NET Framework 3.5 の更新プログラム](http://support2.microsoft.com/kb/3005628)
Visual Studioの正規表現で"$_foo"を"$foo_"に置換するときに困った話(置換後の表現で、"$"の直後に"$1"を指定したい場合)


## 概要

私はHTML、CSS、LESS、JavaScriptの編集にVisual Studioを利用しているのですが、その時タイトルにある通り`$_foo`を`$foo_`に置換しようとして困ったことになりました。
具体的には、`$_example`を`$example_`、`$_bar`を`$bar_`、`$_hogehoge`を`$hogehoge_`としたいと考えました。
Visual Studioに限らず、他のテキストエディタでも同じ方法が通用するかもしれません……

## 問題

```text:検索語句
\$_(\w+)
```

上記のように、`$_`の後に任意の数の英数字とアンダーライン(`\w`)が続くような文字列の
先頭からアンダーラインを削除し、それを末端に持って行こうとしました。
任意の英数字`\w`を括弧でくくっているため、置換後の語句では`$1`と記述することで取得できるのですが……

```text:置換後の語句
$$1_
```

素直に書けばこうです。ですが当然動きません。
`${$1}_`とか`\$$1_`とか`$\$1_`とか`$${1}_`とかいろいろ試しましたがうまくいきませんでした。

## 回答

```text:検索語句
\$_(\w+)
```

```text:置換後の語句
$$$1_
```

`$$`が置換後の語句における`$`なのですね!
ググっても出ず、10分程頭を悩まし解法を見つけることが出来ました。
Web上にある画像ファイルの大きさを得る （Python3, 追加ライブラリ不要）

クローラなどでWeb上の画像を収集する際に、「画像ファイル全部をダウンロードせずに、画像の大きさ（解像度）だけを得たい」という状況になることがあります。そこで、ファイルのヘッダさえ見れば、全てをダウンロードせずとも目的の情報を得られることが出来ます。

以下ソースコードです。Python 3.4.2 + OS X 10.10(Yosemite)で動作を確認しました。
GIF, JPEG, PNG フォーマットに対応しています。
なお、OpenCVなどの追加ライブラリは必要がありません。

```py3
import sys
import struct
import urllib.request

def parse_jpeg(res):
    while not res.closed:
        (marker, size) = struct.unpack('>2sH', res.read(4))
        if marker == b'\xff\xc0':
            (_,height,width,_) = struct.unpack('>chh10s', res.read(size-2))
            return (width,height)
        else:
            res.read(size-2)

def parse_png(res):
    (_,width,height) = struct.unpack(">14sII", res.read(22))
    return (width, height)

def parse_gif(res):
    (_,width,height) = struct.unpack("<4sHH", res.read(8))
    return (width, height)

def get_image_size(url):
    res = urllib.request.urlopen(url)
    size = (-1,-1)
    if res.status == 200:
        signature = res.read(2)
        if signature == b'\xff\xd8': #jpg
            size = parse_jpeg(res)
        elif signature == b'\x89\x50': #png
            size = parse_png(res)
        elif signature == b'\x47\x49': #gif
            size = parse_gif(res)
    res.close()
    return size
```

エラー処理などは適宜補ってください。

# 参考資料

暗黒通信団『ファイルフォーマット小事典』(ISBN4-87310-064-X)
Swift で URL クエリパラメータ を抽出する

# 概要

`http://hoge.com/?name1=val1&name2=val2` という URL が存在する場合に、クエリパラメータを抽出し操作したくなる場合があります。

```json
{
    "name1": "val1",
    "name2": "val2"
}
```

`NSURL` クラスには `query` というメソッドが用意されており `name1=val1&name2=val2` というクエリ文字列をまとめて取得することは可能ですが、個々のパラメータの抽出はできません。
さすがに正規表現で抽出するのはイケてないですね。


# 実装

`NSURLComponents` および `NSURLQueryItem` を利用することによって（比較的）簡単にクエリパラメータを抽出することが可能となります。

```swift
# String から NSURLComponents
let comp: NSURLComponents? = NSURLComponents(string: "http://hoge.com/?name1=val1&name2=val2")

# 操作例
for (var i=0; i < comp?.queryItems?.count; i++) {
    let item = comp?.queryItems?[i] as NSURLQueryItem
    println("name=\(item.name), value=\(item.value)")
}

# 辞書型に格納する
func urlComponentsToDict(comp:NSURLComponents) -> Dictionary<String, String> {
    var dict:Dictionary<String, String> = Dictionary<String, String>()

    for (var i=0; i < comp.queryItems?.count; i++) {
        let item = comp.queryItems?[i] as NSURLQueryItem
        dict[item.name] = item.value
    }
    
    return dict
}

var dict = urlComponentsToDict(comp!)

dict["name1"] // -> Some "val1"
```




# 参考

- [NSURL Class Reference](https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSURL_Class/#//apple_ref/occ/instp/NSURL/query)
- [NSURLComponents Class Reference](https://developer.apple.com/library/IOs/documentation/Foundation/Reference/NSURLComponents_class/index.html#//apple_ref/occ/instp/NSURLComponents/URL)
- [NSURLQueryItem Class Reference](https://developer.apple.com/Library/ios/documentation/Foundation/Reference/NSURLQueryItem_Class/index.html#//apple_ref/occ/instp/NSURLQueryItem/value)
R：plyrパッケージのWindows環境化での並列化

そういえば長いこと投稿していなかった。。。

Rでデータの分割・処理適用・結合を行う上でとても便利なパッケージのひとつにplyrさんがあります。

以下のスライドをみてから使い始めましたが、今では欠かせないパッケージのひとつとなっています。
http://www.slideshare.net/teramonagi/tokyo-r30-20130420

このplyrさんのXXply系の関数には「.parallel」という並列処理を可能とするオプションがあります。

マルチスレッドなCPUと潤沢なメモリがあるなら、それを有効活用して大量データも効率よく処理しましょう。

Windows環境化では、doParallelパッケージを使うことでこのオプションを有効にすることができます（64bit Windows7環境にて確認）。

```
# ライブラリを読み込む
library(plyr)
library(doParallel)

# 並列数の設定
registerDoParallel(makeCluster(7))

# 処理対象データの読み込み
d <- read.csv('data.csv', stringsAsFactors=F)

# ddplyで入出力共にデータフレームとなる独自の処理を実行
result <- ddply(d, "group", .parallel=TRUE, function(targets){...})
```

タスクマネージャーをみると、並列処理を有効にした場合はCPUがガリガリ仕事をしていることがわかります。

ちなみに進捗状況を示す「.progress="text"」のオプションは、並列処理時には使えません。こんな警告が出ます。

```
Progress disabled when using parallel plyr
```

.parallelオプションのおかげでplyrさんの利便性を保ちつつ、ネックである処理の遅さをある程度解決できます。

ばんざーい。

以上
HerokuのPostgreSQLのTimezoneの変更方法

## 事前準備

* 操作端末にHerokuToolbeltがインストール済みであること。
* 同様にpostgresがインストールされpsqlコマンドにPATHが通っていること

#### 接続してみる

以下のコマンドを実行し、接続を確認する

    heroku pg:psql --app your_database_name HEROKU_POSTGRESQL_TEAL

#### 現状を確認

以下のコマンドを実行し、Timezoneがずれていることを確認する

    > select current_timestamp;

#### Timezoneを変更

以下のコマンドを実行し、Timezoneを修正する

    > alter database your_database_name set timezone = 'Asia/Tokyo';

#### 一旦接続の解除

以下のコマンドで一旦接続を解除する

    > \q

#### 再度HerokuのPostgreSQLへ接続

    heroku pg:psql --app your_database_name HEROKU_POSTGRESQL_TEAL

#### 変更の適用の確認

再度以下のコマンドを実行し、Timezoneが期待通りであることを確認する。

    > select current_timestamp;


以上です。
Elixir Strings と Character List の違い #elixir

# Elixir Strings と Character List の違い

## 概要
Elixir の Strings と Character List の違いについて

Elixir では、他の多くの言語と異なり
シングルクォートによる文字列リテラルと、
ダブルクォートによる文字列リテラルの型が異なります。

シングルクォートは Character List 
ダブルクォートは Strings
です。

Strings の引数を期待する関数は、 Character List を渡しても動作しません。
## シングルクォート: Character List 
シングルクォートの文字列は integer の list です。

~~~elixir
hello_chars = 'hello'
IO.inspect hello_chars
# シングルクォートリテラルで宣言された文字列は List
IO.inspect is_list(hello_chars)
# シングルクォートリテラルで宣言された文字列の中身は Integer
for char_cd <- 'hello' do
  IO.puts is_integer(char_cd)
  IO.puts Integer.to_string(char_cd)
end
# 文字コードの数値リストと等価
IO.inspect hello_chars == [104,101,108,108,111]

# 通常のリストと同様の操作が可能

## concat
IO.inspect 'hello' ++ 'world'
## lower to upper
IO.inspect Enum.map('hello', &(&1 - 32))
~~~

* 出力

~~~
'hello'
true
true
104
true
101
true
108
true
108
true
111
true
'helloworld'
'HELLO'
~~~

## ダブルクォート: Strings
ダブルクォートの文字列は バイナリシーケンス です。

## サンプル

~~~elixir
iwashi = "鰯を食べるaa"
IO.inspect String.length iwashi
IO.inspect byte_size iwashi
IO.inspect String.codepoints iwashi

ab =[<<97>>,<<98>>]
IO.inspect ab
IO.inspect Enum.join(ab)
IO.inspect Enum.join(ab) == "ab"
~~~

## 出力

~~~
7
17
["鰯", "を", "食", "べ", "る", "a", "a"]
["a", "b"]
"ab"
true
~~~

## 参照
* [Enum to_list](http://elixir-lang.org/docs/stable/elixir/Enum.html#to_list/1)
* [Elixir getting_started 18 Comprehensions](http://elixir-lang.org/getting_started/18.html)