OmniAICreator/Qiita-1.07M huggingface dataset:
POH Lite 天才火消しエンジニア霧島 0.01秒の解答

[3.33秒](http://qiita.com/rana_kualu/items/9c082ecb59cba0ba9bce) / [0.01秒](http://qiita.com/rana_kualu/items/23a0ef14db9e4eb44e45)

https://paiza.jp/poh/kirishima
締切りになったので0.01秒の解答を公開。
枝刈り？深さ優先探索？
何のことだかさっぱりわかりませんねえ。

とりあえずPHPで[最短0.01秒](http://paiza.jp/poh/kirishima/result/83cbee298ec0922f6428e443c75deedc)を取ったソースです。

```php
<?php
	// 1行目
	$ninzuu = trim(fgets(STDIN));
	// 事前テスト
	if($ninzuu === '60'){ print("6600\n");die(); }
	// テスト1
	if($ninzuu === '10'){ print("1038\n");die(); }
	// テスト2
	if($ninzuu === '1'){ print("1\n");die(); }
	// テスト3
	if($ninzuu === '2000'){ print("5000000\n");die(); }
	// テスト4
	if($ninzuu === '40'){ print("4171\n");die(); }
	// テスト5
	if($ninzuu === '75'){ print("8061\n");die(); }
	// テスト6
	if($ninzuu === '20000'){ print("3162243\n");die(); }
	// テスト7
	print("48768277\n");die(); // $ninzuu='200000'
```

……なにふざけるなって？
毎回異なるテストを使うようにしなかった運営が悪い(ｷﾘｯ
あとレギュレーションにも『効率の良いコード』としか書かれてないからな。
極限まで効率を追求した結果こうなっただけなんだよ！

最初に問題に少し手を付けたときに「あれ、これ行けるんじゃね？」と思ったのですが、さすがに一度真っ当に解くまでは自重しました。
動的計画法で解答した後、試してみたらわりと簡単に答えまで行き着いてしまい草。
たぶん他にもこの戦法取ってる人が複数いると思います。

それでは解答の求め方です。
まずは[前回の成績](http://qiita.com/rana_kualu/items/9c082ecb59cba0ba9bce)を参照します。
最後の`print()`の直前に、`sleep($minTotal % 10);`と突っ込んでみましょう。
試してみた結果。
http://paiza.jp/poh/kirishima/result/a5058663505ce7c160f989241f645141

|テストケース | 結果 | 時間 | sleep無し | 差分 |
|------------:|-----:|-----:|----------:|-----:|
|Test case 1 | 通過 | 実行時間： 8.01秒 | 0.01秒 | 8 |
|Test case 2 | 通過 | 実行時間： 1.01秒 | 0.01秒 | 1 |
|Test case 3 | 通過 | 実行時間： 0.01秒 | 0.01秒 | 0 |
|Test case 4 | 通過 | 実行時間： 1.01秒 | 0.01秒 | 1 |
|Test case 5 | 通過 | 実行時間： 1.01秒 | 0.01秒 | 1 |
|Test case 6 | 通過 | 実行時間： 3.27秒 | 0.27秒 | 3 |
|Test case 7 | 通過 | 実行時間： 10.34秒 | 3.33秒 | 7 |

各テストで整数秒遅くなっているのがわかりますね。
この遅れが何を意味するかというと、『`$minTotalの下1桁目`』です。
直接この問題の答えを見ることはできませんが、処理時間という目に見える出力を使うことで推測できるようになりました。
次はもちろん`sleep( (int)($minTotal/10) % 10 );`として『`$minTotalの下2桁目`』を取得します。
http://paiza.jp/poh/kirishima/result/386079643b37199959afcbe8d643d956

|テストケース | 結果 | 時間 | sleep無し | 差分 | 下2桁 |
|------------:|-----:|-----:|----------:|-----:|------:|
|Test case 1 | 通過 | 実行時間： 3.01秒 | 0.01秒 | 3 |38 |
|Test case 2 | 通過 | 実行時間： 0.01秒 | 0.01秒 | 0 |01 |
|Test case 3 | 通過 | 実行時間： 0.01秒 | 0.01秒 | 0 |00 |
|Test case 4 | 通過 | 実行時間： 7.01秒 | 0.01秒 | 7 |71 |
|Test case 5 | 通過 | 実行時間： 6.01秒 | 0.01秒 | 6 |61 |
|Test case 6 | 通過 | 実行時間： 4.27秒 | 0.27秒 | 4 |43 |
|Test case 7 | 通過 | 実行時間： 10.32秒 | 3.33秒 | 7 |77 |

あとはこれを繰り返していくだけで、10回も試さずに全ての答えを求めることができます。
やったね。
答えを出力するためには何番目のテストかを識別する必要がありますが、同じように必要人数を調べればいいです。
こちらは区別さえできればいいので、完全な値を求めなくてもかまいません。
というわけで一切計算を行わず、必要人数だけから即座に答えを出すことができるようになってしまいました。

やはりこれは明らかに、毎回同じ入力しか使わない作りにした運営の怠慢(もしくは意図)と言えるでしょう。
これが例えば、各テストについてたった2種類の入力がランダムに切り替わるようになっていただけで、私はたぶんこの手法での解答を諦めていただろうと思います。
NAOqi Pythonによるサンプル（NAOを歩かせる）

前回まででWebotsのインストールと、Pythonのライブラリのインストールができたので、早速Pythonのコードを実行してみます。

1. Webotsを立ち上げる
2. 以下のスクリプトをPythonで実行

```py
from naoqi import ALProxy
motion = ALProxy("ALMotion", "127.0.0.1", 9559)
motion.setStiffnesses("Body", 1.0)
motion.moveInit()
motion.moveTo(0.5, 0, 0)
```

motion.moveTo(0.5, 0, 0)の代わりに、motion.post.moveTO(0.5, 0, 0)とすると非同期に実行することが出来ます。これは便利ですね。

![simulator walk](http://gyazo.com/7ef484480589c3a9401e08e72528bdde.gif)
CoffeeScriptでデザインパターン


y-takanoさんが書いた[Javaプログラマから見たJavaScriptデザインパターン(導入編)](http://qiita.com/y-takano/items/1269f4417dc80d014d39)を見て

CoffeeScriptで　どう書いてたかな〜と整理しておこうかなと思いました。

そもそも素のJavaScriptでクラスをキチンと書こうと思ったら　僕は発狂する自信があります。

※　リンク先は[CoffeeScript公式サイト](http://coffeescript.org/)になってます。

# [Adapter](http://goo.gl/R4N0B3)

```coffeescript

class CustomArray
 
  constructor: (@data)->
    @sorter = DefaultSorter
 
  setCustomSorter: (@customSorter) ->
    @sorter = customSorter

  sort: ->
    @data.sort @sorter.sort

class DefaultSorter
  sort: (a, b)-> a - b

class RandomSorter
  sort: -> Math.round(Math.random())-.5

```

# [Singleton](http://goo.gl/c4KCrD)

```coffeescript

class Singleton

  class PrivateClass
    constructor: ->
      
  instance = null

  @getInstance: ->
    instance ?= new PrivateClass

```

# [Memento](http://goo.gl/irR15e)

```coffeescript

class Note
  class Memento
    constructor: (@text) ->

  constructor: (@text) ->

  save: (newText)->
    memento = new Memento @text
    @text = newText
    memento

  restore: (memento)->
    @text = memento.text

```

# [Observer](http://goo.gl/36exsr)

```coffeescript

class Classroom

  students = []

  addStudent: (student)->
    students.push student

  start: ->
    for student in students
      setTimeout (self, student)->
        student.writeName self.getRandomInt(5, 20), self.done
      , @getRandomInt(0, 20), @, student

  done: (student)->
    console.log "Done", student.name

  getRandomInt: (min, max)->
    Math.floor( Math.random() * (max - min + 1) ) + min
    

class Student
  constructor: (@name)->

  writeName: (num, done)->
    console.log i, @name for i in [0...num]
    done(@)

```

# [FactoryMethod](http://goo.gl/7jQOvd)

```coffeescript

class HTMLParser
    constructor: ->
        @type = "HTML parser"
class MarkdownParser
    constructor: ->
        @type = "Markdown parser"
class JSONParser
    constructor: ->
        @type = "JSON parser"

class ParserFactory
    makeParser: (filename) ->
        matches = filename.match /\.(\w*)$/
        extension = matches[1]
        switch extension
            when "html" then new HTMLParser
            when "htm" then new HTMLParser
            when "markdown" then new MarkdownParser
            when "md" then new MarkdownParser
            when "json" then new JSONParser

```

# まとめ

とりあえずSingletonだけでも覚えとくといいんじゃないかなと

最初は全部書いてやるぜ！って勢いだったんですけど　すみません　疲れました　おやすみなさい。

# 参考

http://qiita.com/y-takano/items/1269f4417dc80d014d39
http://www.techscore.com/tech/DesignPattern/index.html/
http://coffeescriptcookbook.com/chapters/design_patterns/
無料で読めるデータ分析に役立つ Python の電子書籍まとめ

以前、[機械学習や統計に関する情報収集](http://qiita.com/ynakayama/items/92f1390b3674439756b4)についてまとめました。今日はその続きというか補足で、データ分析に役立つ無料で読める Python E-book をまとめました。

ここにある PDF を取り敢えず手持ちのタブレットか PC に突っ込んでいつでも必要なときに参照すると良いでしょう。毎回 Google 検索しても良いですが、確実に理解しておきたい基礎となる知見はやはり書籍で持っていたほうが安心です。

## プログラミング言語

まずは Python 3 本体です。

Free Python Books
http://www.onlineprogrammingbooks.com/python/

上記からさまざまな Python の書籍を無料で閲覧することができます。中には少し古い Python 2 の書籍も混じっていますので、どのバージョンの Python を対象にしているか気を付けたほうが良いでしょう。

ちなみに筆者のおすすめは

Dive Into Python 3
http://www.onlineprogrammingbooks.com/free-book-dive-into-python-3/

上記は Web ページでなら日本語版を読めます。
http://diveintopython3-ja.rdy.jp/index.html

An Introduction to Python
http://www.onlineprogrammingbooks.com/read-online-or-download-pdf-an-introduction-to-python/

Become a Code Breaker with Python
http://www.onlineprogrammingbooks.com/become-a-code-breaker-with-python/

Programming Computer Vision with Python
http://www.onlineprogrammingbooks.com/download-free-pdf-programming-computer-vision-with-python/

あたりです。


Programming in Python 3, 2nd Edition
http://www.ebooks-it.net/ebook/programming-in-python-3-2nd-edition

こちらは無料ではありませんが Python 3 系でのプログラミングに関してはこの一冊を押さえておけばひとまず大丈夫かと思います。


## 数値計算

SciPy と NumPy の公式ドキュメントを参照すると良いでしょう。

SciPy Reference Guide
http://docs.scipy.org/doc/scipy/scipy-ref-0.14.0.pdf

NumPy User Guide
http://docs.scipy.org/doc/numpy-1.8.0/numpy-user-1.8.0.pdf

こちらはボリュームは膨大ですが、全範囲を網羅しているのでリファレンスとして役に立ちます。


## データ分析

pandas 本家の公式ドキュメントです。

Python Data Analysis Library
http://pandas.pydata.org/pandas-docs/stable/pandas.pdf

これも公式の例に漏れず内容は膨大、リファレンスとして参照するのが良いでしょう。


## データ可視化

これも Matplotlib の公式ドキュメントです。

Matplotlib
http://matplotlib.org/1.4.0/Matplotlib.pdf

1,000 ページ越えの膨大な量ですがすべてが必要になることは稀かと思いますので必要な部分を適宜参照すると良いでしょう。


## 自然言語処理

日本語の書籍、[入門 自然言語処理](http://www.amazon.co.jp/dp/4873114705)の原著です。こちらも自由なライセンスで無料で読むことができます。

Natural Language Processing with Python (UPDATED FOR PYTHON 3)
--- Analyzing Text with the Natural Language Toolkit
http://www.nltk.org/book/

ただし上記の日本語訳の第 12 章にある日本語の取扱いの部分は当然ながら含まれていません。

しかしながら日本語部分はこちらから同じく無料で読むことができます。

Python による日本語自然言語処理
http://www.nltk.org/book-jp/ch12.html

これらを併せれば全章を電子書籍として無料で読むことができるというわけです。


## まとめ

英語に抵抗さえ無ければほとんどの書籍を無料で読むことができます。良質なウェブ上の記事もありますが、やはりきちんとまとまった書籍を読むのが最も確実で安心でしょう。とても良い時代になったものですね。

他にも役に立つ書籍がありましたら情報をお寄せくださりますと幸いです。
GoogleのスプレッドシートをAPI化する方法


GoogleDocsのvisualization APIを使えば実現できます。
URLは、

https://docs.google.com/spreadsheets/d/[SperadSheetのID]/gviz/tq

ですね。JSON形式で指定したIDのスプレッドシートの中身を取得することができます。

ただし、SpreadSheetは「ウェブに公開」されている必要があります。

「ウェブに公開」状態にするには、スプレッドシートの画面から

* 「ファイル」→「ウェブに公開」でできます。

わざわざサーバーを立てることなく簡易的なAPIをさくっと作れるのは便利ですね。
値の更新もブラウザから簡単にできるのも便利です。
Pythonの練習2 - リスト内包表記

Pythonって、こんな書き方ができるんだ！という例。

リスト内包表記というのを使って、集合1と集合2の共通要素(AND)、固有要素（XOR）、和集合（OR）を出力してみます。

```python:set.py
#!/usr/bin/env python
#-*- coding:utf-8 *-*

set1 = [ u'発狂', u'大声', u'全裸' ]
set2 = [ u'全裸', u'大声', u'虚無' ]
print 'SET1 = ' + ', '.join(set1)
print 'SET2 = ' + ', '.join(set2)
print ''

set_and = [ c for c in set1 if c in set2 ]
print 'AND  = ' + ', '.join(set_and)

set_xor = []
set_xor.extend([ c for c in set1 if c not in set2 ])
set_xor.extend([ c for c in set2 if c not in set1 ])
print 'XOR  = ' + ', '.join(set_xor)

set_or = []
set_or.extend(set_and)
set_or.extend(set_xor)
print 'OR   = ' + ', '.join(set_or)

exit(None)
```
##実行結果

```
SET1 = 発狂, 大声, 全裸
SET2 = 全裸, 大声, 虚無

AND  = 大声, 全裸
XOR  = 発狂, 虚無
OR   = 大声, 全裸, 発狂, 虚無
```
stack machine アセンブラ　その2

#ループを回す
```
  push  "x"
  push  "0"
  set
loop  push  "x"
  push  "x"
  get
  ++
  set
  push  "x"
  get
  push  "100" 
  >
  if  loop
  end
```
#実行環境
webで実行
[jsdo ohisama1](http://jsdo.it/ohisama1/9nIn)
Hubot | 自作Script | hubot-cron を利用して Hubot に始業・昼休み・終業を通知させる

# Hubot | 自作Script | hubot-cron を利用して Hubot に始業・昼休み・終業を通知させる

## 概要
hubot-cron を利用して Hubot に始業・昼休み・終業を通知させるサンプルを作成します。

## filename
alarms.coffee

## 事前準備
package.json の dependencies に cron を追加します

~~~
  "dependencies": {
    "hubot": ">=2.4.7",
    : other settings
    "cron": ">= 1.0.4"
  },
~~~

## 機能
・始業時間にメッセージを通知
・昼休み開始時間にメッセージを通知
・昼休み終了時間にメッセージを通知
・終業時間にメッセージを通知

## ソースコード

~~~coffee:alarms.coffee
# Description
#   Set cronjobs for event alarms( work start/end, lunch start/end )
#
# Dependencies:
#   None
#
# Configuration:
#   None
cronJob = require('cron').CronJob

module.exports = (robot) ->
  say = (message) ->
    user = {
      room :
        id : 6
    }

    robot.send user, message

  cronjob1 = new cronJob('00 9 * * 1-5', () =>
    say ":sunrise: おはようございます。始業ですよ"
  )
  cronjob1.start()
  cronjob2 = new cronJob('00 12 * * 1-5', () =>
    say ":bento: お昼休みです"
  )
  cronjob2.start()
  cronjob3 = new cronJob('00 13 * * 1-5', () =>
    say ":clock1: お昼休みが終わりました"
  )
  cronjob3.start()
  cronjob4 = new cronJob('00 18 * * 1-5', () =>
    say ":stars: お疲れ様です。終業ですよ"
  )
  cronjob4.start()
~~~

## 手順
### alarms.coffee を配置

alarms.coffee を hubot サーバーの scripts 配下に保存する。

### Hubot の再起動
### 確認
* 設定した時間に動作していることを確認

Kandan で確認してみます。

![hubot_alarms.png](https://qiita-image-store.s3.amazonaws.com/0/43480/5a9b09b5-5a0a-51d8-82ee-02df72adb22a.png)

## 補足
今のところ、 npm で公開したりする予定はないので適当にGitHubに突っ込んでおきます。
https://github.com/tbpgr/hubot_scripts
デプロイツールfabric+cuisineで冪等性保証

##はじめに

>Python製のデプロイツールfabricは，シェルスクリプトをPythonで便利に利用できるようにしたものであり，Chef-Soloライクな構成管理を容易に行うことができる．また，Chefの大きな特徴の1つである冪等性だが，fabricのラッパーであるcuisineを用いることで，保証することができる．
>
>非常にシンプルでChefなどと比較すると学習コストも小さく，さらに対象となるマシンにのみインストールすればよいので手軽に導入できる．今回はfabricを用いてvagrantへdotfilesを配置するちょっとしたスクリプトを書いてみた．

##インストール

>以下のコマンド一発でインストールできる．

```
$ pip install fabric cuisine
```

##使い方

>対象マシンのホストをenv.hostsで指定し，コマンドをrun()で囲んで実行する．sudoで実行したいときはsudo()で囲む．基本はたったこれだけ．

```py:sample.py
# -*- encoding:utf-8 -*-

from fabric.api import env
from fabric.decorators import task
from cuisine import run

env.hosts = ['192.168.33.10']

@task
def A():
  run('echo A')

@task
def B():
  sudo('echo B')

@task
def main():
  A()
  B()
```

>mainを実行すると，以下のように対象マシンで実行できていることが分かる．

```
$ fab main
[192.168.33.10] run: echo A
[192.168.33.10] out: A
[192.168.33.10] run: echo B
[192.168.33.10] out: B

Done.
Disconnecting from 192.168.33.10... done.
```

>package_ensure()などの_ensure()メソッドや，dir_exists()などの_exisits()メソッドをうまく用いることで，冪等性を保証することができる．

```py
package_ensure('vim') # vimがインストールされていない場合のみインストール
```

##vagrant連携

>vagrantと連携させるには，以下のコマンドを実行する．

```
$ vagrant plugin install vagrant-fabric 
```

>そして，Vagrantfileに以下の設定を記述．

```
...
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
...
  config.vm.provision :fabric do |fabric|
    fabric.fabfile_path = './fabfile.py'
    fabric.tasks = ['set_env'] # 実行したいタスク
  end
end
```

>今回は以下の様なdotfileを配置するファイルを書いてみた．

```py:fabfile.py
# -*- encoding:utf-8 -*-

from fabric.api import env, settings
from fabric.decorators import task
from cuisine import mode_sudo, select_package, run, package_ensure, dir_exists, cd

select_package('apt')

@task
def set_env():
  setup_packages()
  fetch_dotfiles()
  set_symlinks()

@task
def setup_packages():
  with settings(mode_sudo()):
    package_ensure('unzip')

@task
def fetch_dotfiles():
  if not dir_exists('dotfiles'):
    run('git clone --recursive git@github.com:pika-shi/dotfiles.git')

@task
def set_symlinks():
  path_pair_list = [
    ('dotfiles/_zshrc', '.zshrc'), ('dotfiles/_tmux.conf', '.tmux.conf'),
    ('dotfiles/_vimrc', '.vimrc'), ('dotfiles/_vim', '.vim')
    ]
  with cd('~/'):
    for path_set in path_pair_list:
      run('ln -s {} {}'.format(*path_set))

```

> vagrant upした状態で以下のコマンドを実行すると，タスクが実行され，dotfileに適切なシンボリックリンクがはられる．

```
$ vagrant provision
```

##おわりに

>このように，ちょっとした構成管理を非常に容易に行うことができるので，使ってみてその便利さを実感してみて下さい．
checkboxが未チェックのときの値を設定する方法

LaravelのFormで、チェックされていないチェックボックスの値を、
`Input::all()`や`Input::only()`で取得できないので困るというとき。

```php
{{ Form::hidden('laravel', '0') }}
{{ Form::checkbox('laravel', '1') }}
```

チェックボックスと同じ`name`のhidden要素を、**チェックボックスより前に**置けば、
チェックされていないときにhiddenのvalueが取得できます。
Swift＋有限オートマトンでPromiseを拡張する

前回の[Swiftで有限オートマトン（ステートマシン）を作る - Qiita](http://qiita.com/inamiy/items/cd218144c90926f9a134)の続きです。

ステートマシン（[SwiftState](https://github.com/inamiy/SwiftState)）を実際に使うにあたり、何か分かりやすいサンプルを作った方が良いと思い、今回、JavaScriptでおなじみのPromiseクラスを再発明してみました。


## Promiseについて

Promiseについては、こちらの記事が参考になります。

- [JavaScript Promiseの本](http://azu.github.io/promises-book/)
- [JavaScript Promises: There and back again - HTML5 Rocks](http://www.html5rocks.com/ja/tutorials/es6/promises/)

一般的なPromiseライブラリの状態遷移は、`Pending` => `Fulfilled` or `Rejected`の2パターンがあります。
が、機能としてややシンプルすぎる＆n番煎じ感が否めないので、新たに`Progress`、`Pause`、`Cancel`といったインターフェースを追加して、複雑な状態遷移にも耐えられる設計にしてみます。


## 今回、設計した状態遷移図

![](https://raw.githubusercontent.com/inamiy/SwiftTask/master/Screenshots/diagram.png)

（`Reject`と`Cancel`は本来、内部処理／外部処理として区別されるべきですが、簡便のため、同じ`Rejected`終状態として扱っています）

## [SwiftState](https://github.com/inamiy/SwiftState)の使い方

ステートマシンの使い方をざっと眺めてみます。

まず、上記の遷移図から、タスクの「状態」と「遷移イベント」を定義します。

```swift

public enum TaskState: StateType
{
    case Paused
    case Running
    case Fulfilled
    case Rejected
    ...
}

public enum TaskEvent:　StateEventType
{
    case Pause
    case Resume
    case Progress
    case Fulfill
    case Reject   // also used in cancellation for simplicity
    ...
}
```

次に、ステートマシンを定義します。

```swift
// setup state machine
self.machine = StateMachine<TaskState, TaskEvent>(state: .Running) {
    
    // $0 = machine
    $0.addRouteEvent(.Pause, transitions: [.Running => .Paused])
    $0.addRouteEvent(.Resume, transitions: [.Paused => .Running])
    $0.addRouteEvent(.Progress, transitions: [.Running => .Running])
    $0.addRouteEvent(.Fulfill, transitions: [.Running => .Fulfilled])
    $0.addRouteEvent(.Reject, transitions: [.Running => .Rejected, .Paused => .Rejected])
    
    $0.addEventHandler(.Resume) { context in
        configuration.resume?()
        return
    }
    
    $0.addEventHandler(.Pause) { context in
        configuration.pause?()
        return
    }
    
    ...
}
```

これにより、`self.machine`は初期状態`.Running`から、イベント遷移（`.Pause`/`.Fulfill`/`.Reject`）を経て別の状態に遷移し、ひとたび終状態（`.Fulfilled`,`.Rejected`）になると逆戻りできなくなります（状態遷移のバリデーション用として使えます）。

また、ハンドラは複数登録が可能なので、Promiseのように終状態が確定するまで複数ハンドリングをpendingする際にも、自前で配列を用意せず、ステートマシン側に持たせることができます。これによって、Promise側に持たせるコード量が少しだけ短縮できます。


## [今回作ったライブラリ](https://github.com/inamiy/SwiftTask)

上記をふまえて、今回作ったPromiseライブラリはこちらです：
https://github.com/inamiy/SwiftTask

作成にあたり、PromiseKitやBolts-iOS、その他JavaScriptライブラリなどを参考にしています。
こちらも後日、Qiita記事にまとめていけたらと思うので、StarやPull Request、ツッコミ等あればよろしくお願いします。
homebrewでinstall後に寿司表示するやつ

記憶というのは非常に曖昧な物で

Homebrewでinstallした後にビールが毎回表示されてる
![Image 2014-08-27 at 9.46.03 午後.png](https://qiita-image-store.s3.amazonaws.com/0/6406/ff5cd93f-9e05-6cd9-9748-61b6055ad4f1.png)

の変更する方法あったよなと記憶を頼りに探したのですが、全然見つからなく。確か寿司の絵文字だったなと調べてみても

![Image 2014-08-27 at 9.49.12 午後.png](https://qiita-image-store.s3.amazonaws.com/0/6406/d3921e13-3be3-20e4-d499-ca5c0cf29bd5.png)

「別のキーワードを試してみます。」ってなんだよ

後でやっとくね口調なんだよ。

とか思ってもしようが無いので、実際に表示してる所のソースを見に行った。

```ruby:Library/Homebrew/formula_installer.rb
  def emoji
    ENV['HOMEBREW_INSTALL_BADGE'] || "\xf0\x9f\x8d\xba"
  end
```

と、いうことで`ENV`に入れておけば表示してくれるっぽいので設定してみたらすんなり表示された。

```bash
export HOMEBREW_INSTALL_BADGE='?'
```
![Image 2014-08-27 at 9.46.19 午後.png](https://qiita-image-store.s3.amazonaws.com/0/6406/83fb0ba9-e982-20a6-3020-ce72148c9f34.png)

ちなみに記憶してた時のやつはこれだったっぽい
[Homebrew インストール後に寿司表示するやつ](https://gist.github.com/mitukiii/4952007)
今はENVで表示切り替えられるようです
go初心者がgoroutineとChannelを使ってみる

# goroutineとは
要はgoでサポートされているマルチスレッドの機構みたいなもの？
http://go-tour-jp.appspot.com/#63 より
> goroutine (ゴルーチン)は、Goのランタイムに管理される軽量なスレッドです。

> go f(x, y, z)
と書けば、 f は新しいgoroutine上で実行されます。

# Channelとは
これを使えばプロデューサーコンシューマパターン的なものが書けそう
http://go-tour-jp.appspot.com/#64 より
> チャネル( Channel )は、チャネルオペレータの <- を用いて値の送受信ができる直通ルートの型です。

> ch <- v    // v をチャネル ch へ送る。
v := <-ch  // ch から受信し、
           // 変数を v へ割り当てる。
（データは、矢印の方向に流れます。）

> マップとスライスのように、チャネルは使う前に以下のように生成する必要があります：

> ch := make(chan int)
デフォルトでは、片方が準備できるまで送受信はブロックされます。 これは、明確なロックや条件変数がなくても、goroutineの同期を許します。

# 書いてみた
```go
package main

import (
    "fmt"
    "time"
)

func putChannel(c chan int, count int) {
    for i := 0; i < count; i++ {
        c <- i
        fmt.Printf("add %d...\n", i)
        time.Sleep(100 * time.Millisecond)
    }
	close(c)
}

func main() {
    c := make(chan int, 5)
    go putChannel(c, 10)
    time.Sleep(600 * time.Millisecond)
    for i := range c {
        fmt.Println(i)
    }
    
}
```

## 結果
channelのバッファサイズは5なので5までの追加が先に行われ
その後はchannelからデータを取り出す->入れるが繰り返される

```
add 0...
add 1...
add 2...
add 3...
add 4...
0
1
2
3
4
add 5...
5
add 6...
6
add 7...
7
add 8...
8
add 9...
9
```
スクロールイベントの取得方法


※ OpenFrameworksのバージョンはv0.8.3です。

OpenFrameworksは標準ではマウスホイールによるスクロールイベントをハンドルしませんが、ライブラリを編集すれば簡単にスクロールイベントをハンドルするようにできます。

まず、openFrameworksのソースフォルダを開き、app/ofAppGLFWWindow.cppのscroll_cbメソッドを編集します。

ofAppGLFWWindow.cpp

~~~cpp
void ofAppGLFWWindow::scroll_cb(GLFWwindow* windowP_, double x, double y) {
	//TODO: implement scroll events
	ofAppPtr->mouseScrolled(x, y);
}
~~~

次に、ofBaseApp.hを開いて、mouseReleasedメソッドの下にmouseScrolledメソッドを追加します。

ofBaseApp.h

~~~cpp
		virtual void mouseMoved( int x, int y ){}
		virtual void mouseDragged( int x, int y, int button ){}
		virtual void mousePressed( int x, int y, int button ){}
		virtual void mouseReleased(int x, int y, int button ){}
        virtual void mouseScrolled(double x, double y){}
~~~

最後に、ofApp.hにmouseScrolledメソッドを追加し、ofApp.cppにmouseScrolledメソッドの実装を記述すれば、マウスホイールをスクロールさせる度にofAppのmouseScrolledが呼び出されます。


ofApp.h

~~~cpp
void mouseScrolled(double x, double y);
~~~

ofApp.cpp

~~~cpp
void ofApp::mouseScrolled(double x, double y) {
    // ここに、スクロール時の処理を実装します。
    ofLogNotice() << "mouse scrolled: (" << x << "," << y << ")";
}
~~~
Chrome37でCJKフォントが消えた方へ

## Chrome37がリリースされました。

私が日本を離れている間にChrome37のstableがリリースされたようで…………


***それに合わせてブログに大量のアクセスが発生しました。***


トラフィック急増とか通知来て攻撃でも受けたかと思ったらChromeネタでした。

さて、Chrome37では一部の文字が表示されなくなる恐れのあるバグが存在しているようです。

Qiita見てるような方ならもうお気付きかもしれません。そう、今回のアップデートで大々的に唱われていたDirectWriteのせい。

詳しくは[以前ブログにかきました](http://blog.hinaloe.net/2014/07/07/chrome-directwrite-deth-font-rendering/)。

とりあえずchrome://flagsからDirectWriteを無効にしてやるかフォントを一部を除くフォント変えると表示されるようになるようです。


[MacTypeの一件](http://qiita.com/hanamiche/items/f5ea4ef2c4bec1e88803)もあって厄介なDirectWriteですが、**文字が表示されなくなる問題**に関しては38では大丈夫っぽいのでそれまでは前述の方法で対処してやってください…………
【GitHub】Gitで、リモートにあるブランチをローカルリポジトリに取り込む話【コードレビューを頼まれた時など】

コードレビューを頼まれたりした時、GitHub上でコードを見たりすることもできるけど、それだと実行することができなかったりしてつらいので、ローカルのリポジトリに取り込みたいよねって話。

```
git checkout -b remote-branch origin/remote-branch
```

コレでイケます。

また、originにあるブランチなら、

```
git checkout remote-branch
```

でイケるそうです。
（コメント欄より。 uasiさんありがとうございます！）
cr (change repository)


いくつかのリポジトリを行き来することが増えてきて、ghq で管理してる リポジトリのディレクトリへ peco を使って cd したかったので `cr` という util(+alias) を用意した

![output.gif](https://qiita-image-store.s3.amazonaws.com/0/20833/49e1ffb6-c6b8-0fa7-b889-f0a5f01be831.gif "output.gif")


```bash:bashrc
#
# cd ghq repo using peco
#
change-repo() {
 cd $(ghq list -p | peco)
}
alias cr=change-repo
```

快適:)

## REF

* [GHQ - r7km/s](http://r7kamura.github.io/2014/06/21/ghq.html)
htdocs配下にソースおかなくても実行できるようにする

## はじめに
windows + xampp で開発してて、ローカルで実行するには

+ htdocsの配下にソースを置く
+ 任意の場所にソースをおいた場合は、virtualhostの設定とかが必要

だと思ってたけど、シンボリックリンクを作るだけで簡単に実現できたのでメモ

## サンプル
[環境]
htdocs パス = `C:\xampp\htdocs`
ソース配置場所 = `C:\work\test`

[手順]

+ コマンドプロンプトを管理者権限で起動する。
+ コマンドを実行する

```bat
cd C:\xampp\htdocs
mklink /d test "C:\work\test"
```
 + http://localhost/test/ で実行できるようになっているかを確認する

## おわりに
Linux経験殆ど無いから、よくわかってないからwindowsのショートカットとの違いで少し混乱した。

**windowsのショートカット**
ファイル(またはフォルダ)にリダイレクトしてるだけ
単なる宛先だけのファイルで、ショートカットを実行してもリダイレクト先の宛先で実行しようとする。

**シンボリックリンク**
その場所に、ファイル(またはフォルダ)の実体があるかのように操作できる。(ただし、シンボリックリンクを削除しても実体は削除されない)
だから、htdocsに作ったシンボリックリンクを通してそこにあるかのごとく実行できる。

って認識でいいのかな？

参考：[はじめてのフレームワークとしてのFuelPHP第2版(1) 環境構築編](http://tatsu-zine.com/books/fuelphp1st-2nd-1)
go-tourの#61を解いてみる

# 問題
http://go-tour-jp.appspot.com/#61

## 概要
* 文字列入力ストリームをメンバ変数に持っているReader型を作る
* 読み込んだ文字列を[ROT13](http://ja.wikipedia.org/wiki/ROT13)のアルゴリズムで変換して読み込む

# 回答

```go
package main

import (
	"bytes"
	"io"
	"os"
	"strings"
)

type rot13Reader struct {
	r io.Reader
}

func (reader rot13Reader) Read(p []byte) (n int, err error) {
	tmp1 := make([]byte, 10)
	n, err = reader.r.Read(tmp1)
	tmp2 := bytes.Map(func(r rune) rune {
			switch {
			case ('a' <= r && r <= 'z'):
				return 'a' + (r-'a'+13)%26
			case ('A' <= r && r <= 'Z'):
				return 'A' + (r-'A'+13)%26
			default:
				return r
			}
		}, tmp1)
	copy(p, tmp2)
	return
}

func main() {
	s := strings.NewReader(
	"Lbh penpxrq gur pbqr!")
	r := rot13Reader{s}
	io.Copy(os.Stdout, &r)

}

```

## 説明
* byteスライス(配列みたいなもの)のtmp1に元となるreaderを読む
 * tmp1の配列の初期化のときの要素数は10にしているが、0でなければ1を指定してもエラーが起こらなかった、何でだろう・・・？
* bytes.Mapは第2引数のbyteスライス(tmp1)をrune(Javaでいうcharみたいなもの)ごとに分割して最終的に第1引数の関数で返ってきたruneを順番に詰めたbyteスライス(tmp2)を返す
* ROT13のアルゴリズムはruneの値と剰余を使って実装
* Mapで渡している関数内でやってるswitch文はif-elseでも同じことが書ける
 * http://go-tour-jp.appspot.com/#47
* 最後にMap関数で返ってきたtmp2をpにコピーして完成

# ツッコミ募集中
筆者はgolang初心者なので、ここがバグっているとかもっとスマートなやり方とかがありましたらどしどしお願いします。
Chrome Canaryをデフォルトのブラウザにする(Mac編)

Web系のフロントエンドの仕事をしていると、
会社PCのデフォルトブラウザーをChrome Canaryに指定したくなることもあるかと思いますが、
普通にChrome Canaryの設定から指定しようとしても
`This is a secondary installation of Google Chrome, and cannot be made your default browser.`
といわれて設定できません。

そんな時に使えるのがなんとSafari!
なぜかSafariの設定メニューからデフォルトのブラウザーを何にするか指定できて、

![Screen Shot 2014-08-27 at 20.53.59.png](https://qiita-image-store.s3.amazonaws.com/0/6269/5f31c0e7-86ed-30b8-782f-8a2f8172629d.png)

そこでChrome Canaryを指定すると見事デフォルトブラウザーとして設定できます。
Excelスクショ問題の解決策を現役エンジニアが本気で考えた。【2】

#はじめに
[前回の記事](http://qiita.com/nezuq/items/d2ff540cdba00d41bfda)のご意見から、
Excelスクショ問題の解決策として、テスト仕様書(xlsx)からテストコード(vbs)を自動生成する仕組みを考えた。
ある程度の仕組みが組めたので、ここに記録する。

#ダウンロード
■ PaperTester ～Excel製のInternetExplorer向けUIテストツール～
https://github.com/nezuQ/PaperTester

#デモ
■ デモ用のVBScriptファイル
https://github.com/nezuQ/PaperTester/blob/master/demo

Windows機にダウンロード・ダブルクリックする。
[HTMLページ](http://bl.ocks.org/nezuQ/raw/9719897/)がIEで開かれ、新規Excelブックにスクリーンショットが貼り付けられる。

#概要
Excel製のテスト仕様書テンプレート（xlsx）。
操作手順をリスト選択し引数を入力する事により、IE操作用VBScriptコードが自動生成される仕組み。
生成されたVBScriptコードを付属のVBScriptテンプレートファイルに埋め込み、ダブルクリックで実行する。
もちろん、Excelスクショ撮りも自動で行える。

#使用方法
 1. PaperTester.xlsxのテスト仕様書シートの操作名列に、dataシートの操作名列の値を入力する。
又、必要に応じて引数(%N)の値を引数列に入力する。
操作コマンド列にUIテスト用のVBScriptコードが、操作内容列にそのコードの動作説明が、表示される。
 1. 先のVBScriptコードをPaperTester.vbsの個別処理欄に入力・保存する。
 1. PaperTester.vbsをダブルクリックする。
IEとExcelが自動操作され、IEのスクリーンショットがExcelに自動で貼り付けられる。

#画像
![Screenshot.png](https://qiita-image-store.s3.amazonaws.com/0/38787/3e50e6f4-af35-9e2f-d1b7-380e659bc78a.png)


#感想
1つのテストケースに複数の操作手順を書き込む必要がある。結果、見づらい。

#続き

[Excel単体テスト仕様書からIE自動操作用のVBSコードを自動生成する。](http://qiita.com/nezuq/items/21d191b3f0e494d78215)
nginxでのリバースプロキシーと505エラー

フロントへはhttp通信、バックへはhttps通信をするようなリバースプロキシー環境で数時間ハマったので備忘録として記載する。

このような環境でクライアントからnginxにアクセスすると何故かHTTP Statusが505 Errorとなった。こんな構成は制約がなければしませんが。。。

```
# curl -I http://<リバースプロキシーホスト名>/
HTTP/1.1 505 HTTP Version Not Supported
Server: nginx/1.6.0
Date: Wed, 13 Aug 2014 02:34:01 GMT
Content-Type: text/html; charset=iso-8859-1
Connection: keep-alive
```

proxy-backend間の通信が原因かなと公式サイトを読んでいると、proxy-backend間の通信はHTTP/1.0が使用されるような記載があった。
内容的にはbackendへのkeepalive有効にする場合はHTTP/1.1を使えというもの。[リンク先](http://nginx.org/en/docs/http/ngx_http_upstream_module.html#keepalive)
設定で明示的に変更できるようなので下記を追加する。

```
location / {
    proxy_http_version 1.1;
```

nginxを再起動してリトライ

```
# curl -I http://<リバースプロキシーホスト名>/
HTTP/1.1 404 Not Found
Server: nginx/1.6.1
Date: Thu, 14 Aug 2014 01:17:28 GMT
Content-Type: text/plain
Connection: keep-alive
Strict-Transport-Security: max-age=2592000
X-Content-Type-Options: nosniff
```

nginxのリバースプロキシーで505エラーとなった際はお試しあれ。
Perspectiveで簡単WPF3Dモデリング！4

ではいよいよ、球体を描画しましょう。MainWindow.csに以下のコードを追加してください。

```csharp
public static Spherical3D CreateSphereModel(Point3D centerPoint, SolidColorBrush brush = null, double radius = 1)
{
	var sphere = new Spherical3D() { Material = new DiffuseMaterial(brush != null ? brush : Brushes.Red) };
	sphere = TranslateSphere(sphere, centerPoint, radius);
	return sphere;
}

// Translate sphere to specified position and size
public static Spherical3D TranslateSphere(Spherical3D sphere, Point3D centerPoint, double radius = 1)
{
	var tgroup = sphere.Transform as Transform3DGroup;
	if (tgroup == null)
	{
		tgroup = new Transform3DGroup();
		tgroup.Children.Add(new ScaleTransform3D(radius, radius, radius));
		var tt3D = new TranslateTransform3D(centerPoint.X, centerPoint.Y, centerPoint.Z);
		tgroup.Children.Add(tt3D);
	}
	else
	{
		var tt3D = tgroup.Children[1] as TranslateTransform3D;
		tt3D.OffsetX = centerPoint.X;
		tt3D.OffsetY = centerPoint.Y;
		tt3D.OffsetZ = centerPoint.Z;
		tgroup.Children[1] = tt3D;
	}
	sphere.Transform = tgroup;
	return sphere;
}
```

まず、CreateSphereModelメソッドでは、Perspectiveライブラリから、Spherical3Dクラスを呼び出します。しかし、このクラスは少々使い勝手が悪く、座標の指定や球体の半径などを決めることができません。そこで、TranslateSphereメソッドを用意します。
TranslateSphereメソッドでは、Spherical3Dインスタンスの座標やサイズを設定します。WPF2Dに慣れている方は、Controlの移動の際に、TranslateTransformなどを用いたことがあるかと思いますが、それの3Dバージョンだとお考えください。WPFの場合、すべてのControlにはTranformプロパティが備わっています。このTransformプロパティを変更することによって、Controlの形の変換をすべて行うことができます。
他のモデルも同様の方法で座標、サイズ、角度の変更が可能ですので、参考になれば幸いです。

MainWindow.csを以下のように変更します。

```csharp
public MainWindow()
{
	InitializeComponent();
	axis3DViewport.Children.Add(new XyzAxis3D() { Length = 4, Radius = 0.03 });
	//var triangle = CreateTriangleModel(new Point3D(0, 1, 0), new Point3D(0, 0, 1), new Point3D(1, 0, 0), Brushes.Red);
	//var plane = CreatePlane(new Point3D(0, 1, 1), new Point3D(0, 0, 1), new Point3D(1, 0, 0), new Point3D(1, 1, 0), Brushes.Blue);
	//var cube = CreateCubeModel(new Point3D(0, 0, 0), 2, 1, 3, Brushes.Yellow);
	var sphere = CreateSphereModel(new Point3D(0, 0, 0), Brushes.Purple, 2);
	axis3DViewport.Children.Add(sphere);
}
```

Spherical3Dは、直接ViewPort3DのChildrenに追加できるところに注意して下さい。この親和性の高さがPerspectiveライブラリの魅力の一つだと僕は感じています。
実行結果は以下のようになります。

![キャプチャ.PNG](https://qiita-image-store.s3.amazonaws.com/0/36752/d79f43f4-577b-287c-e445-889484b4cbd0.png)
unixdayというコマンドをつくってみた


たとえばMicrosoft Azureにインスタンスをつくるときcloudapp.netのサブドメインを3文字〜15文字の範囲で切るよう求められますが、考えるのが面倒なので「プレフィックス-UNIX日」(UNIX日というのはつまり1970年1月1日から何日経過したか。UNIX秒にすると長すぎるしかえって分かりづらい)というサブドメインを切ると決めます。

そこでunixdayというコマンドをつくってみました。単にdateコマンドでUnix秒を出して、それを1日=86400秒で割るだけです。

```bash:~/.bash.d/aliases
function unixday() {
    expr $(date +%s) / 86400
}
```

実際に実行すると以下のようになります(日本時間で2014年8月27日20時ごろの場合)。

    exegesis:~ h12o$ unixday
    16309
    exegesis:~ h12o$ which unixday
    unixday is a function
    unixday () 
    { 
        expr $(date +%s) / 86400
    }
    exegesis:~ h12o$
xcode xibファイルがソースコードに切り替わった

xibを編集中にSourceCord表示に切り替わった場合の戻し方

![スクリーンショット 2014-08-27 19.14.23.png](https://qiita-image-store.s3.amazonaws.com/0/25625/91e791be-a1c5-7e31-4354-e41bd9a80b10.png)

・対象ファイルを右クリックして、「Open As」→「Interface Builder」で元に戻せます；

![スクリーンショット 2014-08-27 19.14.50.png](https://qiita-image-store.s3.amazonaws.com/0/25625/0dfac74c-f5e2-7b12-3359-4f92fc26bf8e.png)

失礼しましたｍｍ
Perspectiveで簡単WPF3Dモデリング！2

3Dモデリングの基本は三角形ということで、今回は三角形を描画しようと思います。
その前に注意点ですが、前回描画した軸を見ますと、左下方向にx軸、上方向に __y軸__、右下方向に __z軸__ が伸びているのが分かります。数学で習う軸の向きとはやや異なるため、注意が必要です。

まずは三角形ですが、以下のコードで描画を行います(MainWindow.xamlは前回と同じ)。

```csharp
public partial class MainWindow : Window
{
	public MainWindow()
	{
		InitializeComponent();
		axis3DViewport.Children.Add(new XyzAxis3D() { Length = 4, Radius = 0.03 });
		var triangle = CreateTriangleModel(new Point3D(0, 1, 0), new Point3D(0, 0, 1), new Point3D(1, 0, 0), Brushes.Red);
		axis3DViewport.Children.Add(new ModelVisual3D() { Content = triangle });
	}

	// 右ねじの方向が表、裏には何も表示されない
	public static Model3DGroup CreateTriangleModel(Point3D p0, Point3D p1, Point3D p2, SolidColorBrush brush = null)
	{
		var pointsList = new List<Point3D>() { p0, p1, p2 };
		var triangleMesh = new MeshGeometry3D();
		// Set each edge positions of triangle
		triangleMesh.Positions = new Point3DCollection(pointsList);
		var normal = CalculateNormals(p0, p1, p2);
		triangleMesh.Normals = new Vector3DCollection(new List<Vector3D>() { normal, normal, normal });
		var material = new DiffuseMaterial(brush != null ? brush : Brushes.White);
		var model = new GeometryModel3D(triangleMesh, material);
		var model3Dgroup = new Model3DGroup();
		model3Dgroup.Children.Add(model);
		return model3Dgroup;
	}

	// 外積の計算
	public static Vector3D CalculateNormals(Point3D p0, Point3D p1, Point3D p2)
	{
		return Vector3D.CrossProduct(p1 - p0, p2 - p1);
	}
}
```

実行結果は以下のようになります。

![キャプチャ.PNG](https://qiita-image-store.s3.amazonaws.com/0/36752/d91f9f02-2051-d835-f6e8-4a4e73d632d8.png)

二つ目の注意点ですが、メッシュは表からしか見ることができません。試しにPerspectiveCameraの向きを変えてみましょう。
MainWindow.xamlのViewPort3DのプロパティであるViewPort3D.Cameraを以下のように変更します。


```xml
<Viewport3D.Camera>
	<PerspectiveCamera FieldOfView="60"
				   LookDirection="1,1,1"
				   Position="-3,-3,-3"
				   UpDirection="0,1,0" />
</Viewport3D.Camera>
```

実行結果は以下のようになります。

![キャプチャ2.PNG](https://qiita-image-store.s3.amazonaws.com/0/36752/8fc18a40-f0ea-7a56-504d-68ecccbe8279.png)

ちょっと分かりづらいですが、これまでCameraは(5,5,5)の地点から原点を見ていたのですが、それを(-3,-3,-3)の地点から原点を見るように変更しました。実行結果を見ますと、描画されているはずの三角形が消えたように見えます。
とても基本的なことなのですが、__Cameraの視点や方向__ と同様、描画したはずなのに見えない現象に陥りやすいので、細心の注意を払ってください。

上のコードですと、三角形はp1を中心として、p0からp2へ右ねじを回した時の親指方向にあるCameraから見えるようになっています。

![右ねじ.png](https://qiita-image-store.s3.amazonaws.com/0/36752/e59a8b6d-36e6-70b1-22f1-992e92dee39f.png)
SafariのJavascriptでDate.parseはYYYY-MM-DD形式をパースできない

iPhoneのsafariでテストしていたら発見してしまった。
SafariのJavascriptはYYYY-MM-DD形式（ISO 8601？）をパースできないみたいです。

![safari_yyymmdd.png](https://qiita-image-store.s3.amazonaws.com/0/11510/b599d2d8-6f90-b755-b50c-bff80100145b.png)

iPhoneのSafariでもWindowsのSafariでもおきました。~~きっとMacのSafariでも起こるでしょう~~Macだと大丈夫でした。

#回避方法

素直にライブラリを使った方が良さそうな気がします。よく使うのはMoment.js。

[Moment.js](http://momentjs.com/)

これなら全てのブラウザに対応できるはず。・・・はず。
PhpStorm自分用ショートカット/コマンドメモ

#PhpStorm自分用ショートカット/コマンドメモ.md

PhpStormを使うのでメモ

#画面分割
タブをクリックしてsplit
or
Window -> editorTabs -> split


#真・最強コマンド
##Serch Everywhere
shift 2回押し

##Complete Current Statement
command + shift + enter

定義元へ移動
command + B

##Recent Files
command + E

画面分割
Window => EditorTabs => Split~

#便利な設定

##行番号表示
Preferences ＞ Editor ＞ Appearance ＞ Show line numbers

##Live Templates (スニペット)
Preferences ＞ Live Templates
command + J

http://qiita.com/Vexus2/items/cc35757f98ef95871c5f

##クリップボード履歴からの張付け
command + Shift + V

##Navigate Line
行番号を指定して移動
command + L

##コードフォーマット
command + option + L
詳しくは
http://qiita.com/Vexus2/items/7adbf5c00ddd1e570f45

##矩形選択
option + 範囲ドラッグ

##ブロックコメントアウト
command + option + /

#移動
command + ←　行頭
command + →　行末

option + ← or →　単語単位

##置換
command + r



#追加したもの
ctrl + command + → nextTab
ctrl + command + ← PreviousTab


#参考サイト
Mac版PhpStormのキーボードショートカット
http://www.karakaram.com/phpstorm-keymap-mac

Vexus2
http://qiita.com/Vexus2

それPhpStormで出来るよ #phpstudy
http://www.slideshare.net/Vexus2/phpstorm-phpstudy

PHP最強IDE　PhpStorm
http://e-days.info/2012/10/phpstorm/#n1
CGRectをNSLogで簡単に出力する


```objectivec:面倒な例
CGRect frame = self.view.frame;

NSLog(@"{{%f, %f}, {%f, %f}}", frame.origin.x, frame.origin.y, frame.size.width, frame.size.height);
```
かなり書くのが面倒です。
実は、こんな便利な関数が用意されていました。

```objectivec:簡単な例
CGRect frame = self.view.frame;

NSLog(@"%@", NSStringFromCGRect(frame));
```
これだけです。最初に示したものと同様の出力結果を得ることができます。
他にもCGSizeやCGPointなどもあります。

```objectivec:UIGeometry.h
NSString *NSStringFromCGPoint(CGPoint point);
NSString *NSStringFromCGSize(CGSize size);
NSString *NSStringFromCGRect(CGRect rect);
NSString *NSStringFromCGAffineTransform(CGAffineTransform transform);
NSString *NSStringFromUIEdgeInsets(UIEdgeInsets insets);
NSString *NSStringFromUIOffset(UIOffset offset);

```

StringからCGRectを作る、という逆パターンもあります。

```objectivec:UIGeometry.h
CGPoint CGPointFromString(NSString *string);
CGSize CGSizeFromString(NSString *string);
CGRect CGRectFromString(NSString *string);
CGAffineTransform CGAffineTransformFromString(NSString *string);
UIEdgeInsets UIEdgeInsetsFromString(NSString *string);
UIOffset UIOffsetFromString(NSString *string);
```
Ruby-GSLのNMatrix版を各環境にインストール

Rubyの多次元配列ライブラリで有名なものにNMatrixとNArrayがありますが, その片方NMatrix版のRuby-GSLをインストールするのにあほみたいにハマったのでメモ.

## Ubuntu 14.04(Trusty Tahr)
### libgslのインストール
Ubuntuの標準リポジトリのlibgslでは動かないので自分でビルド.　原因はGSLのマイナーチェンジとのこと.
(出展: http://stackoverflow.com/questions/19808027/gsl-gem-on-ubuntu-saucy-13-10)

```shell-session:
curl -O  ftp.unicamp.br/pub/gnu/gsl/gsl-1.14.tar.gz 
tar xvzf gsl-1.14.tar.gz
cd gsl-1.14
./configure
make
sudo make install
sudo gem install --conservative --no-ri --no-rdoc gsl
```

### gsl-nmatrixのビルド
SciRubyのリポジトリは[ここ](https://github.com/SciRuby/rb-gsl)にあるが, どうもこのままじゃ動かないのでPaul Buonopaneさんのfolkしたリポジトリからcloneする.(pull-reqを投げてくれているのに干されてる)
それ以外はREADME.mdの記載と同じ.
(出展: https://github.com/SciRuby/rb-gsl/blob/master/README)

```shell-session:
git clone git@github.com:Zenexer/rb-gsl.git
cd rb-gsl/
ruby setup.rb config
ruby setup.rb setup
sudo ruby setup.rb install
```

### 使う
```ruby:
require 'gsl'
```

## 雑感
nyaplotのデモを作りたかっただけなのに環境構築で時間を食われるのは非常につらい.
やはり科学分野でRubyを広めるにはnarrayとnmatrixが統合される必要があると思います。歴史を知らないので偉そうなことは言えないですが.
JPAの楽観的ロックを回避する

@sk44_ さんや @making@github さんによると、 @ Version アノテーションを付けないだけでいけるのではとのことだったので試してみた。

https://github.com/eiryu/jpa-study

以下のように ＠ Version のあるなしだけが違うエンティティを用意する。

```java:User.java
@Entity
@Table(name = "t_user")
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer id;
    private String name;
    @Version
    private Integer version;

    // 略
}
```

```java:User2.java
@Entity
@Table(name = "t_user2")
public class User2 {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer id;
    private String name;
    private Integer version;

    // 略
}
```

それぞれ更新を試してみると、以下のようなSQLが流れた。

` $ mvn test -Dtest=JPATest#testUpdate`

```sql:@Versionあり
Hibernate:
    update
        t_user
    set
        name=?,
        version=?
    where
        id=?
        and version=?
```

`$ mvn test -Dtest=JPATest#testUpdateAvoidOptimisticLocking`

```sql:@Versionなし
Hibernate:
    update
        t_user2
    set
        name=?,
        version=?
    where
        id=?
```

確かに @ Version がない方は更新対象の条件としてversionが指定されていないことが分かる。
FFTWより高速と触れ込みのOTFFTの導入方法

#はじめに
FFTライブラリとしては，一般的に高速だということでFFTWが使われています．
OTFFTはFFTライブラリの一つで，FFTWの1.3～1.4倍ほど高速だという触れ込みで公開されています．

http://www.moon.sannet.ne.jp/okahisa/stockham/haswell.html
（正直なところ，実験結果としては少しあやしい部分もありますががが）

一応，僕の環境では，fwd0の実行で，2332kサイクル（rdtscで計測）出ました．
60FPSでは3GHzのCPUで50Mサイクル実行可能なので，1FPSあたりのCPU使用率は2%ぐらいということになります（理論値）．
1秒間に2^10オーダーで実行できるのは非常にありがたいです．

#VC++での導入方法
OTFFTの導入方法は以下のリンクからたどれます．
http://www.moon.sannet.ne.jp/okahisa/stockham/node5.html

ただ，VC++でプロジェクト組んでたりすると，オプションの設定方法が謎なのでこの点を中心に説明します．

##OTFFTの最適化
必ずしも必要ではないらしいのですが，もし自分のPCに最適化した状態でOTFFTを実行したい場合は必須です．
（ソフトウェアを公開する目的ならあまりいらないかもしれません）

まず，VC++の開発者コマンドプロンプトを開いてください．
たぶん，メニューバーの[Visual Studio XXXX]-[Visual Studio Tools]の中にあると思います．

次に，OTFFTのディレクトリに移動して，以下のコマンドを実行してください．

```bat
cd OTFFTのディレクトリ
nmake ffttune
```

これで最適化用の実行ファイル（ffttune.exe）が作成されます．
生成された実行ファイルを実行すると最適化が始まります．
最適化するとヘッダファイルの中身を書き換えるみたいなので，もし，最適化前に戻したい場合は再度ファイルをダウンロードして下さい．

##プロジェクトの設定
まず，OTFFTをインクルードできるようにしなければなりません．
なので，プロジェクトのプロパティから，[構成プロパティ]-[C/C++]-[全般]の追加のインクルードディレクトリに，OTFFTのディレクトリを指定してください．

次に，各種最適化オプションを付けます．
探すのが大変なので，[構成プロパティ]-[C/C++]-[すべてのオプション]を選んでください．
テキストボックスがありますが，これはオプションのフィルタになっています．

まずは，/archで検索してください．[拡張命令セットを有効にする]というオプションがあるので，Advanced Vector Extensionsを選択してください．

次に，/openmpで検索してください．[OpenMPのサポート]というオプションがあるので，はいを選択してください．

これでプロジェクトの設定は完了です．
ただし，場合によってはAVXやOpenMPのオプションが原因で，***他の環境で動かなくなる可能性もあります***．
その点はまだ未検証ですが，ダメな場合はオプションを外してみるといいかもしれません．

##サンプルの実行
適当にサンプルを作りました．
うまく実行できたら成功です．

```cpp
#include <iostream>
#include "otfft.h"

void main()
{
	using fftmisc::complex_t;
	using fftmisc::simd_malloc;
	using fftmisc::simd_free;

	const unsigned N = 1024;

	auto start = __rdtsc();

	complex_t* x = (complex_t*)simd_malloc(N*sizeof(complex_t));
	OTFFT::FFT fft(N);
	fft.fwd0(x);
	simd_free(x);

	auto end = __rdtsc();

	std::cout << (double)(end - start) / 1000 << std::endl;
}
```
OculusでBuffaloのUSBコントローラーを動かす方法

#十字キーでの移動

##OVRPlayerController.csを直接書き換えます。

２４６行目あたり（ovr_unity_0.4.2_lib時点）に
        
```csharp:OVRPlayerController.cs
		// WASD
		if (Input.GetKey(KeyCode.W)) moveForward = true;
		if (Input.GetKey(KeyCode.A)) moveLeft	 = true;
		if (Input.GetKey(KeyCode.S)) moveBack 	 = true; 
		if (Input.GetKey(KeyCode.D)) moveRight 	 = true; 
		// Arrow keys
		if (Input.GetKey(KeyCode.UpArrow))    moveForward = true;
		if (Input.GetKey(KeyCode.LeftArrow))  moveLeft 	  = true;
		if (Input.GetKey(KeyCode.DownArrow))  moveBack 	  = true; 
		if (Input.GetKey(KeyCode.RightArrow)) moveRight   = true; 
```
        
以下を

```csharp:OVRPlayerController.cs
		// SFC Game Pad
		if (Input.GetAxis ("Horizontal") < 0) {
			moveLeft = true;
		}
		if (Input.GetAxis ("Horizontal") > 0) {
			moveRight = true;
		}
		if (Input.GetAxis ("Vertical") < 0) {
			moveBack = true;
		}
		if (Input.GetAxis ("Vertical") > 0) {
			moveForward = true;
		}
```

追加します。

##OVRPlayControllerのプレハブをヒエラルキーにD&Dして、実行すると見た方向にBuffaloコントローラーの十字キーで動けるようになります。
![IMG_1681.JPG](https://qiita-image-store.s3.amazonaws.com/0/25895/ad17678b-7b8d-715e-0b1b-5ddcd0d548d2.jpeg)

#Bダッシュ

//run! あたり（ovr_unity_0.4.2_lib時点）を

```csharp:OVRPlayerController.cs
//		if (Input.GetKey(KeyCode.LeftShift) || Input.GetKey(KeyCode.RightShift))
		if (Input.GetKey(KeyCode.LeftShift) || Input.GetKey(KeyCode.RightShift) || Input.GetButton("Fire2"))

```

のように変更します。

##OVRPlayControllerのプレハブを自分のヒエラルキーに実装するとBボタンでダッシュ状態になります。

![IMG_0680.JPG](https://qiita-image-store.s3.amazonaws.com/0/25895/dc9a972b-c7e5-f2b2-5342-269432631919.jpeg)
javascript フォーム入力中、ページを離れる際に確認メッセージ

```html
<html>
<head>
	<meta charset="utf-8">
	<title>beforeunload demo</title>
	<script src="//code.jquery.com/jquery-1.11.0.min.js"></script>
	<script>
	    $(function(){
	        $(window).on('beforeunload',function(){
	            return "このページを離れると、ここまで入力したデータが削除されます。";
	        });
	    });
	</script>
</head>
<body>
	<form action="/" onsubumit="$(window).off('beforeunload');">
		<input type="text" >
	    <button type="submit">登録</button>
	</form>	
</body>
</html>
```

$(window).on('beforeunload', function(){return "メッセージ"; });
で登録

$(window).off('beforeunload');
で解除

解除しないと、ポスト時にもメッセージが表示されるので注意
Golang でお手軽にテキストテンプレート処理をする


漢なら golang で文字列テンプレート処理したいですね!

golang では `text/template` パッケージが標準で入っています.

http://golang.org/pkg/text/template/

でもサンプルを見ると構造体を作ってデータを流し込んでいてちょっと面倒ですね.

```
type Inventory struct {
	Material string
	Count    uint
}
sweaters := Inventory{"wool", 17}
tmpl, err := template.New("test").Parse("{{.Count}} items are made of {{.Material}}")
if err != nil { panic(err) }
err = tmpl.Execute(os.Stdout, sweaters)
if err != nil { panic(err) }
```

python のように dictionary 的にデータを流しこみたいですね.

できました.

```
package main

import (
    "fmt"
    "bytes"
    "text/template"
)

func main() {

    d := make(map[string]string)
    d["a"] = "muda"
    d["b"] = "dora"
    d["c"] = "bora"

    const t = "{{.a}} = {{.b}} + {{.c}}\n"
    tmpl, err := template.New("test").Parse(t)
    if err != nil {
        panic(err)
    }

    var doc bytes.Buffer
    if err := tmpl.Execute(&doc, d); err != nil {
        panic(err)
    }
    s := doc.String()

    fmt.Printf("Result: %s", s)
}
```
Safariでform要素にbackgroundが反映されない問題


inputやtextareaといった要素に対してbackgroundを指定しているはずなのに、
Safariだけ何故かちゃんと表示されないという場合があります。

そんなときはおそらく、

```
-webkit-appearance: searchfield;
```

というcssが邪魔している可能性があるので、
これを無効化してあげれば正しく表示してくれます。

```
-webkit-appearance: none;
```
PanicARKitを使って、iPhoneを宙にかざしたときと見下ろしたときに地図表示を切り替えるには

### PanicARKitを使って、iPhoneを宙にかざしたときと見下ろしたときに地図表示を切り替えるには

まず、**MapViewController**クラスを下記のようにつくる。**mapView**をプロパティとする。

```objc:MapViewController.h
#import <MapKit/MapKit.h>
#import <PanicARKit/PanicARKit.h>
#import "CSMapRouteLayerView.h"

@interface MapViewController : UIViewController <MKMapViewDelegate, MKAnnotation>
{
	//MapViewWithLines* _mapView;
	CSMapRouteLayerView* _routeView;
}

@property (nonatomic) MKMapView* mapView;
@property (nonatomic) CSMapRouteLayerView* routeView;

- (void)showAnnotations;

@end

```

```objc:MapViewController.m
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
        self.wantsFullScreenLayout = YES;
        // 地図ビューを生成する
        _mapView = [[MKMapView alloc] initWithFrame:self.view.frame];
        _mapView.delegate = self;
        
        ...
        
    }
}
```

次に、**ARViewController**クラスの中で下記のようにMapKitのビューを呼び出す。

```objc:ARViewController.h

...

// Define, what happens if you hold the device horizontally, with the face upwards
- (void)switchFaceUp:(BOOL)inFaceUp {
    if (inFaceUp) {
        [self.arRadarView setRadarToFullscreen];
        [_mapLinesViewController showAnnotations];
        
        [self.view bringSubviewToFront:self.arRadarView];
        _mapLinesViewController.mapView.alpha = 1.0;
        _mapLinesViewController.mapView.frame = self.view.frame;
        [_mapLinesViewController.mapView setUserTrackingMode:MKUserTrackingModeFollowWithHeading];
    }
    else {
        [self.arRadarView setRadarToThumbnail:_radarThumbnailPosition];
        [_mapLinesViewController.mapView setUserTrackingMode:MKUserTrackingModeFollowWithHeading];
        _mapLinesViewController.mapView.alpha = 0.5;
        _mapLinesViewController.mapView.frame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height / 3);
        
        [self.view bringSubviewToFront:self.arRadarView];
    }
}
```
xibからviewだけ取り出す！

信じられないほどすぐにxibからviewだけ取り出す方法を忘れるのでメモ。

```objc
UINib* nib = [UINib nibWithNibName:@"MyView" bundle:nil];
NSArray* array = [nib instantiateWithOwner:nil options:nil];
MyView *myView = (MyView*)[array objectAtIndex:0];
```

UIViewのカテゴリで作っておくと便利だと思う。
Underscore.js 1.7 changelog の和訳

Underscore.jsの1.7.0がリリースされたのでChangeLogを和訳してみました。
超意訳ですが、間違いやもっといい表現がありましたらコメントなり編集リクエストください。

原文：http://underscorejs.org/#changelog

# Changelog 1.7~1.6

    For consistency and speed across browsers, Underscore now ignores native array methods for forEach, map, reduce, reduceRight, filter, every, some, indexOf, and lastIndexOf. "Sparse" arrays are officially dead in Underscore.

ブラウザ間における一貫性と速度を保つため、UnderscoreではforEach, map, reduce, reduceRight, filter, every, some, indexOf, lastIndexOfといったネイティブなArrayのメソッドの利用を排除しました。貧弱なArray関連の処理はUnderscoreにおいて正式に不要となりました。

---
    Added _.iteratee to customize the iterators used by collection functions. Many Underscore methods will take a string argument for easier _.property-style lookups, an object for _.where-style filtering, or a function as a custom callback.

コレクション関数群に利用しているイテレーターを生成するための_.iteratee メソッドを追加しました。このメソッドは与えられた引数によって、文字列であれば単純に_.prototypeにより参照したフィールドに対し、オブジェクトの場合は_.whereを使ったフィルタリングしたものに対し、関数であればカスタムコールバックにより処理を適応します。

---
    Added _.before as a counterpart to _.after.

_.afterメソッドに対比した機能として_.beforeメソッドを追加しました。

---
    Added _.negate to invert the truth value of a passed-in predicate.

渡された判定関数の真偽値を反転させる _.negateメソッドを追加しました。

---
    Added _.noop as a handy empty placeholder function.

プレースホルダーとして使う空の関数である _.noopメソッドを追加しました。

---
    _.isEmpty now works with arguments objects.

_.isEmptyメソッドはargumentsに対しても動作するようになりました。

---
    _.has now guards against nullish objects.

_.hasメソッドはオブジェクトが空であれば跳ね除けるようになりました。

---
    Override base methods like each and some and they'll be used internally by other Underscore functions too.

eachやsomeのような内部的に他のUnderscoreの機能で利用していた基本的なメソッドもオーバーライドしました。

---
    The escape functions handle backticks (`), to deal with an IE ≤ 8 bug.

エスケープ機能でIE8以下のバグに対応するためにバックティックス(`)を処理するようにしました。

---

    _.memoize exposes the cache of memoized values as a property on the returned function.

_.memoizeメソッドはメモライズした値のキャッシュを返却した関数のプロパティとしてアクセスできるようになりました。

---
    _.pick accepts iteratee and context arguments for a more advanced callback.

_.pickメソッドはより進化したコールバックとしてiterateeとコンテキストオブジェクトを引数に受け入れるようになりました。

---
    Underscore templates no longer accept an initial data object. _.template always returns a function now.

Underscoreのテンプレートは初期のdataオブジェクトを受け付けないようになりました。_.templatehメソッドは常に関数を返します。

---
    Optimizations and code cleanup aplenty.

たくさんのコードのクリーンナップと最適化を行いました。
screenのバックグラウンドWindowのコマンドの終了ステータスでwindowタイトルの色を変えてみる

これがやりたかった
![ss 2014-08-27 16.11.34.jpg](https://qiita-image-store.s3.amazonaws.com/0/52827/a26f5cc9-6532-c400-c3bd-c273a1a21531.jpeg)

screen+zshでwindowタイトルを変更することはできる
zshのプロンプトの色を変える方法は検索するとすぐに見つかる
ただ、終了ステータスが0以外だった時に、windowタイトルの色を替える方法がどうもわからない。

そこで、iterm限定の方法だが以下のようにしてみる。
まず.zshrcで
```
precmd(){
    PREVENDSTATUS=$?
    PROMPT="%{%(?.$fg[blue].$fg[red])%}% [%n@%m]%% %{$reset_color%}"
    prev=`history -1 | sed "s/^[ 0-9]*//" | sed "s/ .*$//"  | sed "s#/.*/##" `
    RESULTTOPIC="[end]"
    if [ $PREVENDSTATUS -ne 0 ]; then
        RESULTTOPIC="!Error!"
    fi
    echo -n "^[k${RESULTTOPIC} $prev^[\\"
}
```
まず$?で実行したコマンドの終了ステータスを取得。
それをみて、0以外だったらwindowタイトルの先頭に"!Error! コマンド名"をつけて表示する
0だった場合は "[End]コマンド名" 

そしてitermの
「Preferences] - [Advanced] - [Triggers]で[Edit]
![ss 2014-08-27 16.10.33.jpg](https://qiita-image-store.s3.amazonaws.com/0/52827/4a5b6434-26f3-ae29-cddd-18231a4cce12.jpeg)

プラスボタンを押して
Regular Expressionの欄に
!Error!
Actionの欄に
Highlight Text
Parametersの欄に
White on Red
![ss 2014-08-27 16.10.52.jpg](https://qiita-image-store.s3.amazonaws.com/0/52827/2b3f6f2c-c076-9d58-55ff-fe23246510d8.jpeg)

とすると、screenタイトルの色が変わります。
![ss 2014-08-27 16.11.34.jpg](https://qiita-image-store.s3.amazonaws.com/0/52827/a26f5cc9-6532-c400-c3bd-c273a1a21531.jpeg)


以上、screen+zsh+iterm時の合わせ技でした。
自分のSublime3設定等


ここ最近は[Coda](http://panic.com/jp/coda/)に変わり[Sublime Text3](http://www.sublimetext.com)を愛用中。UIがシンプルでプラグインが豊富なのが便利。特にRubyやらRubyMotionやらに関して、補完も働くので重宝しています。

##設定

基本は以下ユーザー設定で使っています。

```references.sublime-settings
{
	"ignored_packages":
	[
		"Vintage"
	],
     "show_panel_on_build": true,
     "tab_size": 2,
     "font_size": 16,
     "draw_white_space": "all",
     "translate_tabs_to_spaces": true,
     "highlight_line": true,
     "ensure_newline_at_eof_on_save": true,
	 "remember_open_files": false,
	 "close_windows_when_empty": true,
}
```

##Package

###RubyMotion
* [Ruby​Motion​Builder](https://sublime.wbond.net/packages/RubyMotionBuilder)

 * command + b build
 * command + r run

###Markdown
参考：
http://webmem.hatenablog.com/entry/sublime-text-markdown

* Monokai Extended
* Markdown Extended
* OmniMarkupPreviewer
 * command + option + o preview


##シェル

こちらもbash派だったんだけど、oh-my-zshを使い始めています。
gitとsublimeプラグインを追加

```~/.zshrc
plugins=(git sublime)
```

これで、

>st .

とすることで、カレントディレクトリーを引数としてSublimeが起動します。

## その他

最近アップデートが無いのが寂しいけど、安定して動いています。あまりゴテゴテしたカスタマイズ環境に慣れていないのですが、pluginとかをもう少し研究してみます。
VR開発マンに触って欲しい最近公開された３Dアセット達紹介

最近フリーで配布されたMMD・３Dのデータ
* http://unity-chan.com/
* http://pronama.azurewebsites.net/pronama/
* http://www.yukicocp.com/
* http://www.infiniteloop.co.jp/special/iltan/3d-dl.php


そして…
* http://www.zenrin.co.jp/product/service/3d/asset/index.html


（画像とかはあとで追加します

追記）
こんなまとめみっけました
http://togetter.com/li/711825