OmniAICreator/Qiita-1.07M huggingface dataset:
UITextViewで一文字ずつUndo/Redoする方法

UITextViewには標準でUndo/Redoの機能があります。しかし、その単位が単語となっているため、必ずしも使いやすくありません。これを一文字単位でUndo/Redoする方法を発見しました。
以下のコードを書いて、どこかでsetupHook()を呼びます。するとその後、概ね一文字ずつ逐次Undo/Redoされるようになります。
（追記：日本語のように変換を介するものも逐次Undo/Redoできる方法も発見しました。）

```objc:ObjectiveC
#import <objc/runtime.h>

@implementation UITextView (hook)
- (void)myReplaceRange:(UITextRange *)range withText:(NSString *)text
{
    [self.undoManager beginUndoGrouping];
    [self myReplaceRange:range withText:text];
    [self.undoManager endUndoGrouping];
}

- (void)mySetMarkedText:(NSString *)text selectedRange:(NSRange)range
{
    if (0 < text.length) {
        [self.undoManager beginUndoGrouping];
        [self mySetMarkedText:text selectedRange:range];
        [self.undoManager endUndoGrouping];
    }
}

-(void)myInsertText:(NSString *)text
{
    [self.undoManager beginUndoGrouping];
    [self myInsertText:text];
    [self.undoManager endUndoGrouping];
}

-(void)myDeleteBackward
{
    [self.undoManager beginUndoGrouping];
    [self myDeleteBackward];
    [self.undoManager endUndoGrouping];
}
@end

void setupHook()
{
    static BOOL install = NO;
    if (!install) {
        install = YES;
        Class klass = [UITextView class];
        Method orgMethod = class_getInstanceMethod(klass, @selector(replaceRange:withText:));
        Method myMethod = class_getInstanceMethod(klass, @selector(myReplaceRange:withText:));
        method_exchangeImplementations(orgMethod, myMethod);
        orgMethod = class_getInstanceMethod(klass, @selector(setMarkedText:selectedRange:));
        myMethod = class_getInstanceMethod(klass, @selector(mySetMarkedText:selectedRange:));
        method_exchangeImplementations(orgMethod, myMethod);
        orgMethod = class_getInstanceMethod(klass, @selector(insertText:));
        myMethod = class_getInstanceMethod(klass, @selector(myInsertText:));
        method_exchangeImplementations(orgMethod, myMethod);
        orgMethod = class_getInstanceMethod(klass, @selector(deleteBackward));
        myMethod = class_getInstanceMethod(klass, @selector(myDeleteBackward));
        method_exchangeImplementations(orgMethod, myMethod);
}
```
HipChatの使い方〜入門編〜

オフィスのメールサービスや予定管理システムが外部サービスになっているなかIRCなどチャットツールも外部サービスを使えるようにしていけると良いと思ってHipChatの使い方をまとめてみました。

![HipChatサムネイル](https://www.hipchat.com/img/home/hero-image.png)

# 公式サイト
https://www.hipchat.com/

# What's HipChat?
> HipChatは企業やチームのためのホスティング型プライベートチャットサービスのことで、継続的に使えるチャットルーム、チャット履歴の保存、外部サービスとの連携に便利なAPI、などの特徴を持ちます。
http://blog.qnyp.com/2013/05/27/hipchat-driven-development/

# 登録
https://www.hipchat.com/sign_up

# ブラウザとアプリでの利用が可能
ログイン後の最初の画面でダウンロード可能
![スクリーンショット 2014-02-17 14.34.18.png](https://qiita-image-store.s3.amazonaws.com/0/19548/f325b10e-ea9a-097b-685f-b1215e8bd6a0.png)

# IRCと基本は一緒

# 通知の方法
![通知の方法](https://s3.amazonaws.com/uploads.hipchat.com/6/26/s1mbdfv0t0wpofm/mention-screenshot.png)

http://help.hipchat.com/knowledgebase/articles/64429-how-do-mentions-work-

まず@を入力すると人の候補が出てくるので選択するか、名前をそのまま入力し発言すると相手に通知が飛びます

## @mentions
特定の人に通知をしたいときに利用

## @all
そのルームにいる全員に通知をする

## @here
ルームにいるメンバーの内アクティブなステータスなユーザーだけに通知をする

# mentionだけの通知をポップアップで受け取るようにする

設定から以下の項目をオフにする

![スクリーンショット 2014-02-17 15.40.43.png](https://qiita-image-store.s3.amazonaws.com/0/19548/797c6f45-b402-dccd-41e2-63295e16635e.png)

![スクリーンショット 2014-02-17 15.40.01.png](https://qiita-image-store.s3.amazonaws.com/0/19548/2ef4c3a2-8fbf-a4b2-61c1-a77f06d28d3e.png)

# コマンド一覧

## ルーム
| コマンド | 引数 | 動作内容 |
|:-----------|:-----------|:-----------|
| /join | room name | foom nameのルームに入る |
| /part | | 今いる部屋を退室する |
| /topic | new topic | 部屋のトピック名を変更する |

## ステータス
| コマンド | 引数 | 動作内容 |
|:-----------|:-----------|:-----------|
| /available | message | 着席、ステータスアイコンが緑になる |
| /away | message | 一時退席、ステータスアイコンが黄になる |
| /dnd | message | 取り込み中、ステータスアイコンが赤になる |

## メッセージ書式
| コマンド | 引数 | 動作内容 |
|:-----------|:-----------|:-----------|
| /code | message | コードの引用表示 |
| /quote | message | 引用表示 |
| /clear | | 現在のタブのチャット履歴をクリア |
| | #fe6464 | hexカラー指定で色表示 |
print() on closed filehandle ...

# print() on closed filehandle ...

Perlでpostfixのaliasesファイル操作をしようとしていたところ,上記エラーが発生.

##発生状況

```
open(ALIASES,">> /hoge/hoge/aliases");
for my $mail (@$refmail){
    print ALIASES $mail.",";
}
close(ALIASES);
```
ALIASESをファイルハンドラとしてデータベースから引っ張ってきたメールアドレスをクラスの方で配列として,そのリファレンスを返してもらい,foreach文でデリファレンスして$mailとして回しながらaliasesに追記していこうとしたところうまくいかず,aliasesファイルには何も追記されない.

##結論

単純な話,ファイルの書き込み権限がないだけだった.
Perlうんぬんというより,権限をしっかり確認しましょうというお話.
でも,そもそもこのままだと権限ゆるゆるなので考えなければいけない.

未熟者は精進したします.
DockerAPIでのLXCの設定について

Docker API経由でLXCの設定をしようとしたがどうもうまくいかない。
この問題について調査していると、下記ページにて解決方法が述べられていた。

[API inconsistencies - Docker Los Angeles (Santa Monica, CA) - Meetup](http://www.meetup.com/Docker-Los-Angeles/messages/boards/thread/39838532)

つまり、[公式ドキュメント](http://docs.docker.io/en/latest/reference/api/docker_remote_api_v1.8/#start-a-container  "Start a container: Remote API v1.8 - Docker Documentation") によるとLXCの設定は下記のとおりであるが、

```js
{
  "LxcConf": {"lxc.utsname": "docker"}
}
```

実際は次のように指定しなければならない。

```js
{
  "LxcConf": [{
    "Key": "lxc.utsname",
    "Value": "docker"
  }]
}
```
tigでmerge diffを表示する

[tig](http://jonas.nitro.dk/tig/)はマジで便利なんだけど、mergeコミットだとdiffが表示されなくて、merge diffの詳細を見たい場合は[tigで見ているコミットをgithubで開く](http://qiita.com/yaotti/items/62947b0c981ae38fae82)したりして、その場をしのいでいた。

つまり、これを

![original_tig_merge.png](https://qiita-image-store.s3.amazonaws.com/0/4402/8a6ab823-58ee-da22-a18c-f40c314cd943.png)

こんなかんじで表示したい。しかも結構切実に。

![gh_merge_diff.png](https://qiita-image-store.s3.amazonaws.com/0/4402/1ec9c2ce-01de-6993-dce2-21e1a02eb740.png)

<del>それ、最新のtig@masterで出来るよ！</del>
晴れて tig-2.0.1 がリリースされたので、最新の tig をインストールすれば使えるようになりました:tada:

### 設定

[INSTALL.adoc](https://github.com/jonas/tig/blob/master/INSTALL.adoc)に従い、自分でビルドしたり、OSXの人はHomebrew経由(`brew install tig`)でインストールしたら、`~/.tigrc`にmergeのdiffを表示するように設定

```~/.tigrc
set diff-options = -m --first-parent
```

これで、ローカルのtigでもmerge diffを表示できるようになります。

![kawaii_tig_merge.png](https://qiita-image-store.s3.amazonaws.com/0/4402/63e537db-33dc-17df-09b2-4dcc65ca98d8.png)

yeah!!:sunglasses::sunglasses::sunglasses:
octopressのs3デプロイをs3cmdを使わない方法


octopressをs3で運用する時には`s3cmd`を使ったデプロイが簡単便利なんですが、`s3cmd`のバージョン管理が出来ないし[gz圧縮をアップする時](http://qiita.com/soramugi/items/df320e303dbb8c6ba3f8)面倒だしで調べてみたら`jekyll-s3`が[簡単確実](http://qiita.com/tumf/items/daf1dbee280b8292bf93)打という事を知る

<https://github.com/laurilehmijoki/jekyll-s3/tree/master>


という訳でoctopressの設定


```ruby:Gemfile
  gem 'jekyll-s3'
```

```ruby:Rakefile
require 'jekyll-s3'

deploy_default = "s3"

## -- S3 Deploy config -- #
s3_bucket      = "hugehuge"  # Enter your S3 bucket name here
s3_cache_secs  = "3600" # Number of seconds to keep objects in cache - 3600 = 1 hour

desc "Deploy website via jekyll-s3"
task :s3 do
  puts "## Deploying website via S3"
  config = {
    's3_id'                 => ENV['s3_id'],
    's3_secret'             => ENV['s3_secret'],
    's3_endpoint'           => 'ap-northeast-1',
    's3_bucket'             => s3_bucket,
    'max_age'               => s3_cache_secs,
    'gzip'                  => ['.html', '.css', '.js', '.xml'],
    's3_reduced_redundancy' => true,
  }
  in_headless = true
  #ENV['disable_parallel_processing'] = 'true'
  Jekyll::S3::Uploader.run(public_dir, config, in_headless)
end

```

    bundle install
    s3_id='YOUR_S3_ID' s3_secret='YOUR_S3_SECRET' bundle exec rake gen_deploy

macで初回のアップロードなんかでアップ対象のファイル数が多い時はエラーが発生します。
そんな時は`ENV['disable_parallel_processing']`を宣言しておいた方が良いです。
こんな感じ

    disable_parallel_processing='true' s3_id='YOUR_S3_ID' s3_secret='YOUR_S3_SECRET' bundle exec rake gen_deploy
Webpay等組込型決済モジュールを組み込む時の基本的なポイント


Webサイトで決済サービスを使う際、思わぬセキュリティホールを作らないために、プログラミング、コーディングする際に注意した点をまとめました。手軽に利用できるようになってきた分、トラブルも増えてくるかしらと思い載せてみました。

##APIキーを指定しているファイルは、外部からアクセスされない場所に置く。
フレームワーク等を利用して、ディレクトリ構成を理解していればまず問題ないかと思いますが念のため。

##入力から決済完了まではhttps接続で行う。
言うまでもありませんが、テスト環境でも指定しましょう。

##input text のautocompleteタグをOFFにする

オートコンプリートの情報からカード情報が抜かれることもあります。

```html
<input autocomplete="off" id="cre_id" name="cre_id" maxlength="16" type="text" />
```

##セッションデータが残っていないかどうかチェック

①入力画面→②確認画面→③更新処理→③完了

という流れの時に、①→②→③に渡すデータをセッションで持っている場合、
更新完了とともにセッションを必ずクリアしましょう。また、②の確認画面から①の入力画面に戻る際にも、セッションを消しましょう。タイムアウト設定も忘れずに。
Excelのハイパーリンクをまとめて削除する方法（備忘録)

元ネタ
http://www.atmarkit.co.jp/ait/articles/0704/06/news137.html

1.何もないセルでCtrl+Cなどでコピーする
2.Ctrl+Fなどで検索ウィンドウをだし、'http://'などですべて検索
3.Shift+クリックなどで変更したいURLを選択
![excel1.png](https://qiita-image-store.s3.amazonaws.com/0/37006/9357619b-76ef-e5cd-d4aa-63bcf78b4a9c.png)
4.右クリックして形式を指定して貼り付け＞乗算を選択
![excel2.png](https://qiita-image-store.s3.amazonaws.com/0/37006/09457e94-6b43-a3ee-de09-9645eeee96fb.png)
javassistで可変長引数を持つメソッドを動的に追加する

## javassistとは

javassistはバイトコードエンハンスのためのライブラリで、動的にJavaのクラスを生成させたりすることができます。生成される動的クラスはDynamic Proxyとか言われますね。フレームワークの基礎技術とも言えます。

## javassist導入

pom.xmlにjavassistへの依存を追加します。実はバージョン3.13.0-GAからgroupIdがjavassistからorg.javassistに変更になってます。

```xml|pom.xml
  <dependencies>
  	<dependency>
  		<groupId>org.javassist</groupId>
  		<artifactId>javassist</artifactId>
  		<version>3.18.1-GA</version>
  	</dependency>
  </dependencies>
```

## 動的クラスの親となるクラスを作る

動的クラスの親にしたいクラスを用意します。メソッドは何も定義しません。

```java|Target.java
package me.stormcat;
public class Target {
}

```

## 動的クラスに動的に可変長引数を持つメソッドを追加する

これはgroupIdが"javassist"時代のjavassistにはできなかった機能です。これができると黒魔術力があがります（・∀・）ﾆﾔﾆﾔ
では、コードを見ながら解説していきましょう。

```java|Sample.java
package me.stormcat;

import java.lang.reflect.Method;

import javassist.ClassPool;
import javassist.CtClass;
import javassist.CtMethod;
import javassist.LoaderClassPath;
import javassist.Modifier;

public class Sample {
    
    public static void main(String[] args) throws Exception {
        new Sample().weave();
    }

    public void weave() throws Exception {
        
        ClassPool pool = new ClassPool();
        pool.appendClassPath(new LoaderClassPath(Thread.currentThread().getContextClassLoader()));
        
        CtClass parent = pool.get("me.stormcat.Target");
        CtClass proxy = pool.makeClass("me.stormcat.Target$$Proxy", parent);
        
        // 追加したいメソッド、配列型で定義する
        String methodContent = 
            "public int getArgsLength(Object[] args) {" +
            "    return args.length;" +
            "}";
         
        CtMethod ctMethod = CtMethod.make(methodContent, proxy);
        proxy.addMethod(ctMethod);
        
        Class<?> proxyClass = proxy.toClass();
        Target proxyInstance = (Target) proxyClass.newInstance();

        exec(proxyInstance, "neko"); // 引数1つ
        exec(proxyInstance, "neko", "nuko"); // 引数2つ
    }
    
    public void exec(Target proxy,  Object ...varargs) throws Exception {
        Method method = proxy.getClass().getMethod("getArgsLength", Object[].class);
        Object result = method.invoke(proxy, new Object[]{varargs});
        System.out.println("length = " + result);
    }
    
}

```

### CtClassを生成する

javassistのClassPoolから、ClassPool#getで親クラスのCtClassを取得します。今回はこれを親にして、動的にクラスを生成するのでClassPool#makeClassでTargetを親にしたProxyクラスのCtClassを生成します。

### メソッド定義

methodContentという変数に文字列でメソッド定義がされています。可変長引数のメソッドを追加するので、可変長型で定義したくなりますが、javassistは解釈できずにエラーになります。そのため、Object[]型の引数にしています。

### CtMethodを生成する

CtMethod#makeで、動的クラスに属するメソッドを新たに生成します。これをCtClass#addMethodで追加します。

### インスタンスを生成する

CtClass#toClassすることで動的クラスのClassが生成されます（既に対象のクラスローダーに同名のクラスがロードされている場合は当然生成できないので注意）。インスタンス生成はClass#toInstanceでOk。

### 可変長引数でメソッド呼び出しする

execメソッドからリフレクションで呼び出して確認します。引数1つ、2つパターンで呼び出すといずれの出力になり、動的に追加した可変長メソッドの呼び出しが成功していることがわかりますね。

```text
length = 1
length = 2
```
PhalconでもYAMLが使いたい！

そういえばSymfony2なんかは設定ファイルYAMLだよなー、なんて思ってたら、PhalconでもYAMLが使いたくなった。
Phalconのインストールとかは[こちら](http://qiita.com/A-gen/items/3c76b3abe6baf9948f25)。

# ゴール
```bash
$ mkdir yamltest
$ cd yamltest
$ vi test.yml
```

```yaml:test.yml
hello:
  world: World
```

はい、てな感じのYAMLファイルを用意します。これを読み込めればクリア。

# PhalconでYAMLを読み込むには？
方法はいくらでもあると思うんですが、せっかくのPhalconなんで、Phalcon製の何かで読み込みたいですよねー？
ググってみたら、Phalcon自体には組み込まれてないそうで、代わりに、[Incubator](https://github.com/phalcon/incubator)なるライブラリ集があるみたいです。
これを利用することにします。

# Incubator
<del>僕と契約しｔ（ｒｙ</del>
[Incubator](https://github.com/phalcon/incubator)は、Phalconが提供する便利なライブラリ集のことです。もちろんPhalconがないと動きません。

[Composer](http://getcomposer.org)がない方はComposerを先に入れます。

```bash
$ curl -sS https://getcomposer.org/installer | php
$ vi composer.json
$ php composer.phar install
```

```json:composer.json
{
  "require": {
    "phalcon/incubator": "dev-master"
  }
}
```

Incubatorの最新版は`v1.2.5`なのですが、Phalconが1.2.6のため、Composerを使ってインストールできませんでした。
今回は諦めて、素直に`dev-master`使います。

# ディレクトリ構造
多分こんな感じになってると思います。

```bash
$ tree .
.
├── composer.json
├── composer.lock
├── composer.phar
├── test.yml
└── vendor
    ├── autoload.php
    ├── composer
    │   ├── ClassLoader.php
    │   ├── autoload_classmap.php
    │   ├── autoload_namespaces.php
    │   ├── autoload_psr4.php
    │   ├── autoload_real.php
    │   └── installed.json
    └── phalcon
        └── incubator
            ├── Library
            │   └── Phalcon
... 以下省略
```

# 何はともあれ書いてみる
とりあえずコードから。

```php:index.php
<?php

$loader = new \Phalcon\Loader();

// オートローダを読み込む
include __DIR__ . '/vendor/autoload.php';

// ネームスペースを追加する
$loader->registerNamespaces(
  array(
    'Phalcon' => __DIR__ . '/vendor/phalcon/incubator/Library/Phalcon/',
  )
)->register();

// 読み込み
$test_yaml = new \Phalcon\Config\Adapter\Yaml(__DIR__ . '/test.yml');

echo "Hello, " . $test_yaml->hello->world . "\n";
```

これでいけるはず！

```bash
$ php index.php
PHP Fatal error:  Uncaught exception 'Phalcon\Config\Exception' with message 'Yaml extension not loaded' in /home/agen/yamltest/vendor/phalcon/incubator/Library/Phalcon/Config/Adapter/Yaml.php:24
```

・・・なんか出たよ？
どうやらYAMLのextensionが使えないみたいです。
peclあたりで突っ込めれば楽なんですけど、残念ながら自分の環境では使えません。
なので、ビルドすることにします。

# YAMLのビルド
[ここ](http://pecl.php.net/package/yaml)からYAML持ってきます。

```bash
$ wget http://pecl.php.net/get/yaml-1.1.1.tgz
$ tar zxvf yaml-1.1.1.tgz
$ cd yaml-1.1.1
$ phpize && make && make install
$ echo 'extension=yaml.so' >> ~/.phpenv/versions/5.5.8-phalcon/etc/php.ini
$ php -m | grep yaml
yaml
```

# リベンジ
```bash
$ php index.php
Hello, World
```

出た！
Vagrantでdokkuを動かす


Dockerを使ってHerokuのような環境をお手軽に作れる[dokku](https://github.com/progrium/dokku)を試してみた。

dokkuは動作環境にUbuntu 13.04を推奨しているので、その環境をvagrantでつくる。

<ins>追記：13.04 は EOL なので、今は 12.04 が推奨だった</ins>

まずはUbuntu 13.04のイメージを落としてくる。

```
$ vagrant box add raring64 http://cloud-images.ubuntu.com/vagrant/raring/current/raring-server-cloudimg-amd64-vagrant-disk1.box
```

落としてきたイメージからひな形をつくる。

```
$ vagrant init raring64
```

`Vagrantfile`ができるので、エディタで開いて以下の部分のコメントを外す。これでVMにIPでアクセスできる。

```
config.vm.network :private_network, ip: "192.168.33.10"
```

そしたらゲストOS起動してログイン。

```
$ vagrant up
$ vagrant ssh
```

ログインできたら、ゲストOS側で次のコマンドを実行してdokkuをインストール。少し時間かかる。

```
$ wget -qO- https://raw.github.com/progrium/dokku/v0.2.1/bootstrap.sh | sudo DOKKU_TAG=v0.2.1 bash
```

次にVHOSTを設定する。VHOSTにはxipを使う。

```
$ echo deploy.192.168.33.10.xip.io | sudo tee /home/dokku/VHOST
```

そしたらホストOS（Mac）に戻って、公開鍵を登録する。

```
$ cat ~/.ssh/id_rsa.pub | ssh vagrant@192.168.33.10 "sudo sshcommand acl-add dokku vagrant"
```

パスワード聞かれた`vagrant`でOK。

これでdokkuを使う準備が整ったので、サンプルアプリを動かしてみる。

```
$ git clone https://github.com/heroku/node-js-sample.git
$ cd node-js-sample
$ git remote add my-heroku dokku@deploy.192.168.33.10.xip.io:node-js-sample
$ git push my-heroku master
```

これで以下のアドレスで`Hello World!`が表示されればOK。
http://node-js-sample.deploy.192.168.33.10.xip.io/

### 参考

* [dokku + VirtualBoxで自分のHerokuを作る](http://blog.coiney.com/2013/08/10/create-my-own-heroku/)
* [VirtualBoxでdokkuを試した - @znz blog](http://blog.n-z.jp/blog/2013-11-15-dokku.html)
Cocos2dx3.x系のReslutionPolicyについて


ResolutionPolicyのメインの3つは以下の通り
<center>
・ResolutionPocily::SHOW_ALL
・ResolutionPolicy::NO_BORDER
・ResolutionPolicy::EXACT_FIT
</center>


それぞれの特徴を簡単にまとめてみた
ResolutionPolicyを選択する上で画面上で気にする気にしないで表記してみたらこんな感じになる。


| ResolutionPolicy | SHOW_ALL| NO_BORDER | EXACT_FIT |
|:-----------|------------:|:------------:| :------------:|
| 余白        |   気にしない |       気にする |   気にする    |
| 縦横比  	 	|     気にする |    気にする    |    気にしない   |
| はみでる       |        気にする |     気にしない     |     気にする     |
CSSで画像を上下左右に反転する方法

画像の切り抜きを行うのに使ったサンプル。
IE8でも動作した。結構昔からFlipってあるのね。知らなかった。
IEだとDXImageTransform.Microsoft.BasicImage()があるけど、これと同じことらしい。

```html
<!DOCTYPE html>
<html lang='ja'>
<head>
<meta charset='utf-8'>
<title>画像の上下左右反転サンプル</title>
<style>
.refrect-lr{
  -webkit-transform: scaleX(-1);
  -o-transform: scaleX(-1);
  -moz-transform: scaleX(-1);
  transform: scaleX(-1);
  filter: FlipH;
  -ms-filter: "FlipH";
}
.refrect-ud{
  -webkit-transform: scaleY(-1);
  -o-transform: scaleY(-1);
  -moz-transform: scaleY(-1);
  transform: scaleY(-1);
  filter: FlipV;
  -ms-filter: "FlipV";
}
.refrect-udlr{
  -webkit-transform: scale(-1,-1);
  -o-transform: scale(-1,-1);
  -moz-transform: scale(-1,-1);
  transform: scale(-1,-1);
  filter: FlipH FlipV;
  -ms-filter: "FlipH" "FlipV";
}
</style>
<script type='text/javascript' src='https://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js'></script>
<script>
$(function(){
  // 上下反転
  $('#refrect-ud-check').on({
    'click': function(event) {
      if($(this).prop('checked')) {
        $('#sample').addClass('refrect-ud');
      } else {
        $('#sample').removeClass('refrect-ud');
      }
    }
  });

  // 左右反転
  $('#refrect-lr-check').on({
    'click': function(event) {
      if($(this).prop('checked')) {
        $('#sample').addClass('refrect-lr');
      } else {
        $('#sample').removeClass('refrect-lr');
      }
    }
  });

  // 上下左右反転
  $('#refrect-udlr-check').on({
    'click': function(event) {
      if($(this).prop('checked')) {
        $('#sample').addClass('refrect-udlr');
      } else {
        $('#sample').removeClass('refrect-udlr');
      }
    }
  });
});
</script>
</head>
<body>
<p><img src='sample1.jpg' id='sample'></p>
<p><input type='checkbox' id='refrect-ud-check'>上下反転</p>
<p><input type='checkbox' id='refrect-lr-check'>左右反転</p>
<p><input type='checkbox' id='refrect-udlr-check'>上下左右反転</p>
</body>
</html>
```
テスト落ちてもデプロイされてる!? SimpleCovユーザーが見なおしてほしいたった1つの設定

### 現時点(2014/2/17 日本時間お昼)の情報なので、最新の情報はissueを見てください。

[Rspec 2.14 + Ruby 2.1.0 + Simplecov 0.8.x doesn't pass along the correct exit status · Issue #281 · colszowka/simplecov](https://github.com/colszowka/simplecov/issues/281)

### Important Notice: There is currently a bug that affects exit code handling on the 0.8 line of SimpleCov, see [#281](https://github.com/colszowka/simplecov/issues/281). Please use `gem 'simplecov', '~> 0.7.1'` until this is resolved.

だそうです。

落ちるspecを追加してテストを実行したあと`echo $?`すると確認出来ると思います。

SimpleCovのREADMEにもありますが、`parallel_tests`を使っている方は、バージョンを0.7に落とすとカバレッジがうまく測れなくなるかもしれないので気をつけてください＞＜

- [Automatically detect the usage of parallel tests and modify setup · Issue #64 · colszowka/simplecov](https://github.com/colszowka/simplecov/issues/64)
- [Fix issue #64 by jshraibman-mdsol · Pull Request #185 · colszowka/simplecov](https://github.com/colszowka/simplecov/pull/185)
最近、俺の中で定着してきた Color Theme

> この記事は 2014/2/17 に書かれたものです
> 現在は [こちら](http://qiita.com/luckypool/items/929607f326f9494723f2) の color scheme も紹介しました

## 基本は Tomorrow Theme

これ。しばらく使ってる。

https://github.com/chriskempson/tomorrow-theme

- ☆が6000以上ついてるし、みんなおすすめらしい。
- 複数環境ごとにThemeが用意されている。
- 私の場合、最近だと vim, xcode, iTerm2 にはこれを指定できるようにしている。

- 実は、iTerm2 からも上記のリポジトリがリンクされている。
  - Preferences > Profile > Colors > Load Presets > Visit Online Gallery

- limechat もあればいいのに、、と思ったけど無いから下記の中から選んでる
  - https://github.com/jschoolcraft/Limechat-Themes
  - 個人的には ir_black をいじったりしてる https://github.com/luckypool/limechat-themes


## Package Manager からもインストールできるよ

### Xcodeに個別にいれたい場合

[Alcatraz](http://mneorr.github.io/Alcatraz/)でプラグインの管理をしているのであれば、単にポチるだけでOK。

- 関連: [Xcode のプラグイン Alcatraz を Xcode5 で使ってみた](http://qiita.com/luckypool/items/abbd9fc7ac539ac19841)

![ss_2014-02-17 11.02.55.png](https://qiita-image-store.s3.amazonaws.com/0/17133/238a69c1-609e-2e45-745f-b68f959a1df2.png "ss_2014-02-17 11.02.55.png")

- ちなみにZenburn はとても目に優しい感じがある

### vim に個別に入れたい場合

もしNeoBundleでプラグインの管理をしているのであれば、 NeoBundleInstall すればOK

- vimに関して言えば、いいとこ取りと言われる [hybrid](https://github.com/w0ng/vim-hybrid) も良い
- 個人的には ruby は Tomorrow-Night が良いけど、他は hybridが良い

ってことで下記のようにもしている。

```vim:.vimrc
NeoBundle 'w0ng/vim-hybrid'
NeoBundle 'chriskempson/vim-tomorrow-theme'
```

```vim:.vimrc
"=======================================================
" colorscheme
" ------------------------------------------------------
syntax on
set background=dark
if ($ft=='ruby')
  colorscheme Tomorrow-Night
else
  colorscheme hybrid
endif
```

----

以上！
めもめも

# a

# “Xcodeでリソース(画像、音楽データなど)を自動更新 | KumanBlog” htn.to/26H6B7
http://b.ruyaka.com/2014/02/13/xcode-auto-update-resource-image-music-etc/

# 3.0beta の情報が少なく、あっても 3.0alpha で微妙に違かったりして苦労したので、コードをアレコレ共有するといい
http://codingcafe.jp/cocos2d-x-3-0beta0%E3%82%A2%E3%83%AC%E3%82%B3%E3%83%AC/

# Cocos2d-x v3.0-beta2でタイトル画面を作成
http://blog.shinji.asia/cocos2d-x-v3-0-beta2-title/

# Usage of Container Layer
http://www.cocos2d-x.org/docs/manual/framework/native/gui/container/en

# Cocos2d-x Betaでチェックしておきたい変更点(Value,EventListener,gui::UIButton,gui::UIPageViewなど)
http://qiita.com/KUMAN/items/7d56ae2b8919e5bafc06

# cocos2d-x v3.0beta 通信処理
http://qiita.com/bitlate_chocola/items/29db1ef7d3babf844171

# cocos2d-x 3.0 JSB remote debugging
http://mobiletou.ch/2014/02/%E7%AC%AC%E5%8D%81%E4%B8%80%E5%9B%9E-cocos2d-x-v3-0%E3%81%AE%E6%96%B0%E6%A9%9F%E8%83%BD%E3%80%81%E3%83%AA%E3%83%A2%E3%83%BC%E3%83%88%E3%83%87%E3%83%90%E3%83%83%E3%82%AC%E3%81%AE%E4%BD%BF%E3%81%84

# iOS／Androidとの相互API呼び出しを行う際のコツ (3/3) *GREEのアレ
http://www.atmarkit.co.jp/ait/articles/1304/23/news009_3.html

# cocos2d-xのGUI
http://wonderpla.net/blog/engineer/cocos2d-x_cccontrol/

# cocos2dxでローカル通知を出す（iOS/Android）
http://qiita.com/ksk_kbys/items/2d864f3cad2e104ddfe2

# SOOMLA Cocos2d-X Plugin
http://blog.soom.la/2013/12/cocos2d-x-plugin.html?utm_content=buffer42aaa&utm_source=buffer&utm_medium=twitter&utm_campaign=Buffer

# CCLabelBMFontでADVゲーム風の文字送りを実現する
http://survive-engineer.hatenablog.com/entry/2014/02/13/013103

# CCSprite にマスクをかけられる CCMask クラス
http://blog.syuhari.jp/archives/2454

# CCCameraの使い方 *3DのGraphics
http://cocoabu.com/cccamera

# Is Cocos2d-x or Unity better for use as a cross-platform 2D game engine?
http://blog.newitfarmer.com/internet/game-internet/14077/repost-is-cocos2d-x-or-unity-better-for-use-as-a-cross-platform-2d-game-engine#utm_source=rss&utm_medium=rss&utm_campaign=repost-is-cocos2d-x-or-unity-better-for-use-as-a-cross-platform-2d-game-engine

# リリース目前！cocos2d-x バージョン3.0でゲーム開発は新時代へ
http://gamebiz.jp/?p=127030
Chef omnibusインストーラーで特定のバージョンのchef-clientをインストールする

最新版のchef-solo（11.10.1）で動かないcookbookがあるので、解決するまでの間は、１つ前のバージョンのchef-clientを使うことにした。以下のようにすれば、特定のバージョンのchef-clientがインストールできる。

```shell-session
$ CHEF_SOLO_VERSION=11.8.2
$ curl -L "https://www.getchef.com/chef/install.sh" | sudo bash -s -- -v $CHEF_SOLO_VERSION
```
Unsupported major.minor version hogehoge が出たお

JavaでUnsupported major.minor version hogehogeというエラーが出た場合は、ソース内にそのVersionのJavaに対応してないコードが有るという意味。

hogehogeのところのVersion対応表は下記の通り。

| JRE        | hogehoge  |
|:-----------|----------:|
| J2SE 8     |        52 |
| J2SE 7     |        51 |
| J2SE 6.0   |        50 |
| J2SE 5.0   |        49 |
| JDK 1.4    |        48 |
| JDK 1.3    |        47 |
| JDK 1.2    |        46 |
| JDK 1.1    |        45 |
Selenium::Remote::Driver + PhantomJS によるファイルダウンロード

今回は課題のみ書きます

# 課題
掲題の機能を使い、Google Analytics でレポートデータをエクスポートさせたいのですがうまくいきません。
理由としては以下のものです。

* エクスポート時のURLを抽出できないので、curl head wget が使えない
* S::R::D でエクスポートボタンをクリック（ここではTSV）すると、ダウンロードダイアログが出現しない
* PhantomJS（WebDriver Wire Protocol） のプロファイルにダウンロード設定はないらしいので、クリックしたら自動ダウンロード、って感じにはいかないみたい（←　まだ完ぺきに調査しきれてない）
* PhantomJS 自体にはファイルダウンロード機能は備わっているが、エクスポートボタンをクリックさせるまでの動作がよくわかっていない。
* S::R::D でexecute_script を使ってjavascript を実行させようとしたが、require でこける（カレントページしかサポートしないから？）
* 設計思想の問題で、google の提供しているAPIは使いたくない

このような感じで困っています。

# 現状の試み
* S::R::D でエクスポートボタンをクリックした状態を、PhantomJSにうまいこと渡してダウンロード処理をする
* 別のブラウザのドライバを使って試す（要調査。。CL実行ができるか疑問）
* analyticsのレポート画面に描画してあるsvgデータのpath要素を根こそぎ引っこ抜いてエクスポートファイルの内容と同等の結果を返すロジックをPerlで組む（日付との対応をどのように実施するか悩みどころ）

以上です。進展あり次第共有します。
また、既に御存知の方いらっしゃいましたらご教示いただけますと幸いです。
golangでscp


ググると出てくるサンプルがよくわからないので調べてみた。

https://gist.github.com/jedy/3357393
よくわからないけど、sshパッケージ使ってなぜかリモート側のscpコマンドを実行している・・これでいいのか?

```go:
if err := session.Run("/usr/bin/scp -qrt ./"); err != nil {
````

みたことのない-tオプションとは?
man scp してみよう
http://www.openbsd.org/cgi-bin/man.cgi?query=scp
あれ?記載がない。

よく見ると先ほどのサンプルコードの先頭に URLがあったので
https://blogs.oracle.com/janp/entry/how_the_scp_protocol_works
読んでみる

どうやら隠しオプションでscpプロトコルはこれを使っているようです。
-tで起動して、標準入力からファイル情報とファイル内容を受け取るようです。
具体的には、

```go:
go func() {
		w, _ := session.StdinPipe()
		defer w.Close()
		content := "123456789\n"
		fmt.Fprintln(w, "C0644", len(content), "testfile")
		fmt.Fprint(w, content)
		fmt.Fprint(w, "\x00") // 传输以\x00结束
	}()
```
この部分ですね。

パーミッション情報とサイズとファイル名を送って
ファイルの内容を送って最後に\x00で終わる

なるほど、
簡単だけどちょっと面倒なんで上手くラップしたいところ。
iOSで誰でも簡単に動画にもおしゃれなフィルターをかける方法

最近動画の加工アプリが徐々に盛り上がりを見せていますが、iOSで写真と同じように簡単にフィルターをかける方法を教えます。

それはみんな大好きGPUImageを利用すれば非常に簡単です。
https://github.com/BradLarson/GPUImage


```objc 
GPUImageFilter *filter = xxxxx ;//かけたいフィルタ
NSURL *url = xxxxxxx; //movieのURL
 GPUImageMovie *movieFile = [[GPUImageMovie alloc] initWithURL:url];
    
 AVURLAsset *asset = [AVURLAsset assetWithURL:url];
 NSArray *videoTracks = [asset tracksWithMediaType:AVMediaTypeVideo];
 AVAssetTrack *videoTrack = [videoTracks objectAtIndex:0];
    
 movieFile.playAtActualSpeed = YES;
    
 [movieFile addTarget:filter];


 NSURL    *exportUrl = xxxxxxxxxx; //出力先
 
 
 GPUImageMovieWriter *movieWriter = [[GPUImageMovieWriter alloc] initWithMovieURL:exportUrl size:videoTrack.naturalSize];


[filter addTarget:_movieWriter];
movieWriter.shouldPassthroughAudio = YES;
movieFile.audioEncodingTarget = _movieWriter;
[movieFile enableSynchronizedEncodingUsingMovieWriter:_movieWriter];
 
BOOL alreadyRecordComplate = NO;
    
    
movieWriter.completionBlock = ^(){
        if(!alreadyRecordComplate){
             NSLog(@"movie writer end");
            alreadyRecordComplate = YES;
            [movieWriter finishRecordingWithCompletionHandler:^{
                [filter removeTarget:movieWriter];
          
       		}];
          
	}     
};
    
movieWriter.failureBlock = ^(NSError *error){
        NSLog(@"movie writer failure %@",error.description);

};
[movieWriter startRecording];
[movieFile startProcessing];

```
GPUImageには非常に多数のFilter

その他iOSは非常に動画を扱うAPIが充実しており、AVFoundation.framework を利用すると、もっと凝った編集が可能です。

皆さんもGPUImageを使って楽しい動画アプリを作ってみてください！
iOSのSocial.frameworkでTwitterを利用した場合でもAccessTokenを取得する方法

iOSでSocial.frameworkを利用することで簡単にTwitterとの連携ができるようになりましたが、逆に不都合になる点があります。

それは、OS側で認証をするとAccessTokenをアプリ側で取得がそのままではできないということです。

それで何が困るかというと,Twitpicなどその他のサービスにおいてTokenを必要とする場合に困ったりします。

ただし、それを解決するためにちゃんとTwitterにAPIが用意されております

*Reverse Auth*
https://dev.twitter.com/docs/ios/using-reverse-auth

これを利用すれば後からTokenの取得が可能です。

実際の利用はSTTwitterというライブラリを利用すると簡単に実装ができます。
https://github.com/nst/STTwitter

STTwitterは非常に簡単にTwitterを扱えるのでその他の場合でも利用するとよいかと思います。

```objc
 STTwitterAPI *twitter = [STTwitterAPI twitterAPIWithOAuthConsumerName:nil
                                                             consumerKey:@""
                                                            consumerSecret:@""];
 [twitter postReverseOAuthTokenRequest:^(NSString *authenticationHeader) {
        
        STTwitterAPI *twitterAPIOS = [STTwitterAPI twitterAPIOSWithFirstAccount];
        
        [twitterAPIOS verifyCredentialsWithSuccessBlock:^(NSString *username) {
            
            [twitterAPIOS postReverseAuthAccessTokenWithAuthenticationHeader:authenticationHeader
                                                                successBlock:^(NSString *oAuthToken,
                                                                               NSString *oAuthTokenSecret,
                                                                               NSString *userID,
                                                                               NSString *screenName) {
                                                                    self.accessToken = oAuthToken;
                                                                    self.accessTokenSecret = oAuthTokenSecret;
                                                                  NSLog(@"Token %@ secret %@",oAuthToken,oAuthTokenSecret);
                                                                    
                                                                } errorBlock:^(NSError *error) {
                                                                     NSLog(@"error %@",[error description]);
                                                                    
                                                                }];
            
        } errorBlock:^(NSError *error) {
             NSLog(@"error %@",[error description]);
        }];
        
    } errorBlock:^(NSError *error) {
        NSLog(@"error %@",[error description]);
 }];
```

ちょっと見づらいですがこのように、tokenとsecretを取得することができます。

同じように困った場合はこの方法を利用するとよいでしょう。
perlでAppStoreとGooglePlayのランキングやレビューをスクレイピングするライブラリを書いた。

perlでAppStoreとGooglePlayをスクレイピングするライブラリを書いた。レビューなどもスクレイピング可能



https://github.com/nyankichi820/appcrawler

```pl
#AppStore

my $crawler = App::Crawler::AppStore->new();

# get ranking
my $result = $crawler->get_ranking(category=>{name=>"topfreeapplications"},genre=>{name=>"6018"},limit=>10);

# get review
my $result = $crawler->get_review(app_id=>"xxxxxxx",page=>10);

# get app info
my $result = $crawler->get_app(app_id=>"xxxxxxx");

# search app
my $result = $crawler->get_search_app(query=>"xxxxxxx");

# get suggest keyword
my $result = $crawler->get_suggest_app(query=>"xxxxxxx");

# content fetch only
my $html = $crawler->fetch_ranking(category=>{name=>"topfreeapplications"},genre=>{name=>"6018"},limit=>10);

# parse html
my $result = $crawler->parse_ranking(content=>$html,category=>{name=>"topfreeapplications"},genre=>{name=>"6018"},limit=>10);

#GooglePlay
my $crawler = App::Crawler::GooglePlay->new();

# get ranking
my $result = $crawler->get_ranking(category=>{name=>"topfreeapplications"},genre=>{name=>"6018"},limit=>10);

# get review
my $result = $crawler->get_review(app_id=>"xxxxxxx",page=>10);
```
AppStoreの検索を最適化！webのASO用のツールを作った

AppStoreでのASOが非常に重要な昨今ですが、AppStoreをハックして、webで検索が行えたり、検索ワードの選定を行えるツールを作りました。

http://ios.wchr.jp/

UI適当ですが、特徴としてAppStoreのキーワードサジェストが裏でどの程度マッチングしたかわかるpointみたいなものをもっておりそれも見ることができます。

![スクリーンショット 2014-02-17 9.05.43.png](https://qiita-image-store.s3.amazonaws.com/0/37731/2f6469a1-0649-84b6-f44d-df933dafe20f.png)

皆さんのアプリの集客に役に立てば。
ただしサーバーが貧弱なので、落ちてたらすみません！
FacebookへのRequestの進捗を取得できるcategoryを作った

Facebook SDKを利用する場合、動画など大きいリソースをPOSTする場合、SDKがdidSendBodyDataからのInterfaceを持っていなかったため,Categoryで実装してみました。

利用方法は簡単で

```objc
#import "FBRequestConnection+FBRequestConnection_progress.h"
```
とヘッダーファイルをimportして

```objc
  FBRequestConnection *requestConnection = [[FBRequestConnection alloc] init];

  [requestConnection setProgress:^(float progress){
      // update UI 
  }];
```

FBRequestConnectionにprogressを取得するBlocksをセットすればokです。
この中でUIへの反映など行えば,ユーザに進捗状況を提示できます。

githubにあげていますので、自由に利用してください。

https://github.com/nyankichi820/FBRequestConnection-FBRequestConnection_progress/blob/master/README.md
Compiling and running Fluxus 0.17 on Ubuntu 13.10 64-bit

Download racket - make sure it is version 5.3.6:

```
http://download.racket-lang.org/racket-5-3-6-src-unix-tgz.html
```

Download Fluxus:

```
git clone git://git.savannah.nongnu.org/fluxus.git
```

Configure racket:

```
./configure --prefix=/usr/local/racket --enable-shared
```

Build and Install Racket:

```
sudo make install
```

Configure and Build Fluxus:

```
scons RacketPrefix=/usr/local/racket ADDONS=0
```

Add racket dependencies to root .profile:

```
PATH="/usr/local/racket/bin:$PATH"
PATH="/usr/local/racket/collects:$PATH"
PATH="/usr/local/racket/include:$PATH"
PATH="/usr/local/racket/include:$PATH"
```

Install Fluxus - As root:

```
scons RacketPrefix=/usr/local/racket ADDONS=0 install
```

Set LD_LIBRARY_PATH variable:

```
export LD_LIBRARY_PATH=/usr/local/racket/lib
```
.bash_profile ? .bashrc ? いろいろあるけどこいつらなにもの？

##正体
ログインシェル（PCを起動したときにデフォルトに指定されるシェル）をbashにしている場合はログイン（起動）時に以下のような順番で設定ファイルが読み込まれ、PATHを通す、エイリアスを定義する、プログラムを実行するなどの設定が自動で設定される。
####1. /etc/profile
全ユーザーに適用されるデフォルトの設定ファイル。
ユーザー単位では編集しない。（つまり、ほとんどいじらない）
####2. ~/.bash_profile
存在していれば読込まれる設定ファイル。
ユーザー単位での設定を書く。
無くても良い。
####3. ~/.bash_login
ログインして~/.bash_profileが存在しない場合にのみ、存在していれば読込まれる設定ファイル。
無くても良い。
####4. ~/.profile
ログインして~/.bash_profile ・ ~/.bash_loginが存在しない場合にのみ、存在していれば読み込まれる設定ファイル。
無くても良い。

####5. ~/.bashrc
シェル（bash）ログインで毎回読込まれる設定ファイル。
無くても良い。

#### ~/.bash_logout というのもある。
シェル（bash）ログアウトに毎回読込まれる設定ファイル。
無くても良い。

##どう使い分ければいいか！
####~/.bash_profile
ログイン時に一度設定すればいいもの
####~/.bashrc
bashを起動するたびに設定する必要のあるもの

##その他は？
基本的に上の２つで事足りる。

しかし、以下のような特別な場合があれば利用する価値がありそう。

全ユーザーでログイン時に起動したいアプリケーションがある場合などは/etc/profileにその処理を書いておくことで全ユーザーでログイン時に処理が実行される。

ログイン時には必ずこの処理をしてほしいなどということがあれば、~/.bash_loginにその処理を書いておくことで~/.bashrcを削除しても処理が実行される。
VS2012でPortAudioの環境構築

## なんか
最近やっと暇になったのでなんか書きました。
完全に自分用の備忘録めいた記事なんですけど、こんな適当なの投稿して大丈夫なのかな…
3編併せて文章量だけは多いので暇つぶしにはなるかもしれません

# 3編に分かれてます
この記事は下の2つの記事と連動してるのでそのへんも読むといいとおもいます

- 準備編：VS2012でPortAudioの環境構築　←いまここ
- [前編：PortAudioでWAVEファイルを再生してみる(WAVEファイル読み込み編)](http://qiita.com/nicolai_twi/items/db77bfe802d959c14ba4)
- [後編：PortAudioでWAVEファイルを再生してみる(鳴らす編)](http://qiita.com/nicolai_twi/items/35cfbd868f42afedd88d)


# PortAudioってなに
 __フリーの音声処理ライブラリです。__ 
[Audacity](http://audacity.sourceforge.net/?lang=ja) とかの有名ソフトにも使われてるらしいです。
音声処理ライブラリとは言うもののいわゆるDSP部分（処理部分）は自分で記述する必要があるため、
波形データを直で扱いたい！という人以外には向かないかもしれません。

PortAudioを使うには自分の環境でのライブラリのビルドが必要なのですが、
多少問題になる部分が出てくるので自分の備忘録も兼ねて注意点書いときます。

ビルド環境は __Visual Studio 2012,Windows 8 64bit__ です。

 __PortAudio本家は以下：__ 
[PortAudio](http://www.portaudio.com/)
[PortAudio リファレンス（英）](http://portaudio.com/docs/v19-doxydocs/index.html)

 __・余談__ 
 _いきなり余談ですがゲームに使えるフリーの音声処理ライブラリってググってもあんまり出てきませんね。_ 
 _だいたい[XAudio2](http://msdn.microsoft.com/ja-jp/library/bb694503%28v=vs.85%29.aspx)か、[OpenAL](http://ja.wikipedia.org/wiki/OpenAL)の二択って感じがします…。_ 
 _OpenALはLGPLでちょっと有償販売ゲームには使い辛いし、XAudio2は正直初期化とか色々めんどくさいと思います。_
 _（まあ、前者については動的リンクしてラップしたライブラリ自前で用意すればいいんですけども。_ 
 _ちなみにPortAudioはMITライセンスです）_ 
 _というわけで波形をいじったり、柔軟に色々できるという意味ではPortAudioも選択肢としてアリなんじゃないでしょうか？_  
 _勿論お金を払えば[Fmod](http://www.fmod.org/)とか[BASS](http://www.un4seen.com/)があるんで、それらを使えるなら使った方が楽だと思います。_ 

# ライブラリのビルド
本題です。
まあぶっちゃけ
[ここ](http://kingkingyo.hatenablog.com/entry/2013/10/24/112406)と[ここ](http://terurou.hateblo.jp/entry/2013/07/29/080512)の記事を見れば事足りる感あるんですが、
 __詰まった部分__ として、ASIOドライバが入ってない場合の対処が挙げられます。
 上の一個目のリンクに書いてある

```
PA_USE_ASIO=1
PA_USE_DS=0
PA_USE_WMME=0
PA_USE_WASAPI=1
PA_USE_WDMKS=0
```

と変更する部分なんですけど、 __音が出ない場合__ はとりあえず全部1にしといて問題ないと思います。
ただしどのAPIが優先的に使われるのかよく分からんので、レイテンシを気にする場合はリンク先の設定でいいかと。

あと一番目のリンクではVS2008を使ってますが、VS2012で普通にビルドできました。
（ソリューションの変換も特に問題なくいけました）
今回のビルド環境も64bitですが、ライブラリディレクトリ指定のDirectX SDKのLibフォルダはx86でOKです。
あとは二番目のリンクの通りにリンカー設定してやればビルド出来ると思います。
ちなみに、試しにWin32ではなくx64でビルドしてみましたが、どうもそっちの方は上手く動きませんでした。

 __・余談2__ 
 _ASIO SDKのDLにはSteinbergのデベロッパ登録が必要でめんどくさい感ありますが、_
 _音声処理やるなら登録しといて損はないです。（VSTプラグイン作成に必要なSDKもダウンロードできるので）_  

# サンプルを動かす
その他、参考にさせていただいたページとして

- [こことか](http://qiita.com/mountcedar/items/6fe47ce4231fe0a4360c)
- [こことか](http://2ten1ryu.blog90.fc2.com/blog-category-8.html)
- [こことか](http://www.geocities.jp/ai_parappa/knowledge/main.htm)

があって非常にありがたいんですけれども、
DLLってプロジェクトの作業ディレクトリに置いただけだと使えませんよね…？
それに類する話が参考リンク中のどこにも出てなかったのでちょっと気になりました。

 __コード中でLoadLibrary();するか.libファイル使って静的リンクさせるか__ が必要だと思うんですけど、
portaudio.hを見てもDLL読んでる記述無いし、
当然そのままコンパイルすると外部参照未解決になるのでかなり謎です…。
 _(DLLのロードやったことないので間違ってるかもしれません)_ 

なので、先のライブラリのビルドで一緒に生成された __portaudio_x86.libも一緒に使いましょう。__ 
DLLと同じところに置いて、コードの最初の部分で

```cpp
#pragma comment(lib, "portaudio_x86.lib")
```

と追加してやればコンパイル通ると思います。
あとはportaudioのexamplesフォルダにサンプルがいろいろ入ってるので、
適宜上の記述を追加して試してみましょう。

とりあえず次回はPortAudioでWaveファイル読み込んで鳴らすところまでやりたいと思います。
コード部分が長くなりそう…
Docker を使って Jekyll 環境を構築.


漢なら static site generator は Jekyll ですね!

http://jekyllrb.com/

しかし Jekyll は ruby 製で 1.9 系が求められます. CentOS6 のように 1.8系が標準の環境では面倒ですね. Docker で解決しましょう. 

… と思ったら既に先人が実現していました. なんたるちや! 
これを docker pull すればもう完了でした. ありがとうございます.

https://workshop.avatarnewyork.com/post/jekyll-up-and-running-with-docker/

## 応用

応用として gcc のバージョンを Docker で内包するというのもありますね.

## まとめ

Docker コンテナごとに ruby のバージョンを入れればシステム内のソフトウェアのバージョン混在に手こずることはありません.
"Supercharging your Gruntfile"のGruntプラグインを試してみたの

[Supercharging your Gruntfile](http://www.html5rocks.com/en/tutorials/tooling/supercharging-your-gruntfile/)で紹介されていたプラグインをいくつか試してみたのです。


## load-grunt-config (+ load-grunt-tasks)

Gruntfileに書く、各プラグインの記述を別ファイルに分割できるプラグイン。（と、loadNpmTasksを自動で検索・実行してくれるプラグインを内包している）

ディレクトリ構造とか試した設定などは以下のような感じ。`grunt/`以下のファイルは、jsかcoffeeもしくはyamlで書けるみたい。yamlならクォートで囲まなくて尚更、記述が楽かも。

```:ディレクトリ構造
|-- Gruntfile.coffee
|-- package.json
|-- coffee/
|-- jade/
|-- grunt/
    |-- aliases.coffee
    |-- coffee.coffee
    |-- jade.coffee
```

```coffeescript:Gruntfile.coffee
module.exports = (grunt) -> require('load-grunt-config') grunt
```

```json:package.json
{
  "private": true,
  "devDependencies": {
    "grunt": "*",
    "grunt-contrib-coffee": "*",
    "grunt-contrib-jade": "*",
    "load-grunt-config": "*"
  }
}
```

```coffeescript:aliases.coffee
module.exports =
  default: [
    'jade'
    'coffee'
  ]
```

```coffeescript:coffee.coffee
module.exports =
  compile:
    files: [
      expand: true
      ext: '.js'
      src: 'coffee/*.coffee'
    ]
  options:
    bare: true
    sourceMap: true
```

```coffeescript:jade.coffee
module.exports =
  compile:
    files: [
      expand: true
      ext: '.html'
      src: 'jade/*.jade'
    ]
  options:
    pretty: true
```

これで`Gruntfile.coffee`のディレクトリに居るときに、`$ grunt`をすれば`jade/`にあるjadeのファイルと`coffee/`にあるcoffeescriptのファイルがコンパイルされる。

`loadNpmTasks`を書かなくて良くなった事と、設定が分散して書けるようになったからそれぞれの設定ファイルが見やすくなったことが利点かな。

## grunt-newer

最後に成功したビルドのファイルを返してくれるプラグイン？

```bash:Terminal
$ npm install --save-dev grunt-newer
```

```coffeescript:aliases.coffee
module.exports =
  default: [
    'newer:jade'
    'newer:coffee'
  ]
```

に変更して、わざとコンパイルに失敗するcoffeescript書いたけどよくわからない……

## grunt-concurrent

タスクを並列実行してくれるプラグイン。

```bash:Terminal
$ npm install --save-dev grunt-concurrent
```

```coffeescript:grunt/aliases.coffee
module.exports =
  default: [
    'concurrent:first'
  ]
```

```coffeescript:grunt/concurrent.coffee
module.exports =
  first: [
    'jade'
    'coffee'
  ]
```

これで実行したら並列実行……してくれたみたいです。ファイル数多くしたり、ファイルサイズ大きくしたりしてないのでわかんないけど……
`first`というタスクに`jade`と`coffee`のタスクを書いているので、これらがそれぞれ並列で動作するみたい。`second`というタスクを書いて、`aliases.coffee`に追加すれば何かのタスクを並列実行したあとに別のタスクを実行するということもできるので、順を追って何かをする必要がある時にはそういう書き方もできるみたい。

---

`time-grunt`と`grunt-notify`も使わなかったけど、これはこれであると便利かなーと思った。`time-grunt`はあまり使わなそうな気はするけど。
XcodeでlibGPUImage.a　が消えるトラブル

開発していたxcodeのプロジェクトで
実機テストしようとしたら、次のようなエラーが出てできませんでした。

<i>clang: error: no such file or directory: '（ディレクトリ省略）/Build/Products/Debug-iphoneos/libGPUImage.a'</i>

シミュレータのlibGPUImage.aがない場合は
Debug-iphoneosのところが
Debug-iphonesimulatorになります。

どうも、プロジェクトのコピーやフォルダの移動をしていると
libGPUImage.aというデータが消えてしまう事があるようです。

実機テストが出来た頃のバージョンからlibGPUImage.aをコピーしてきて
目的のプロジェクトの中に入れたら直りました。
（逆に言うと前のバージョンがないと、どうしようもないようです。）

やり方はfinderを開いて、「移動」を開いた状態でoptionを押すと
「ライブラリ」というのが出てくるので
そこからエラーメッセージで出たディレクトリをたどっていき
当該プロジェクトのフォルダの中にlibGPUImage.aをペーストします。
Objective-Cで動的にクラス定義/メッセージ送信


objc/runtime.hをフル盛りで使うとこんなことができる。

```objectivec
- (void)testDynamicClassDefinition
{    
	// コンパイル時に存在しないクラスをallocateする
    Class dynamicClass = objc_allocateClassPair([NSObject class], "DynamicClass", 0);
	// コンパイル時に存在しないクラスに存在しないメソッドを実装する
    SEL dynamicSelector = NSSelectorFromString(@"whoami");
    IMP dynamicImp = imp_implementationWithBlock(^{return @"I'm DynamicClass!!";});
    BOOL added = class_addMethod(dynamicClass, dynamicSelector, dynamicImp, @encode(NSString*));
    XCTAssert(added, @"メソッドが追加されている");
	// コンパイル時に存在しないクラスを新規にruntimeに登録する
    objc_registerClassPair(dynamicClass);
	// コンパイル時に存在しないクラスをインスタンス化する
    typeof(dynamicClass) dynamicInstance = objc_msgSend(dynamicClass, @selector(new));
    XCTAssert(dynamicInstance, @"ちゃんとインスタンス化されている");
	// コンパイル時に存在しないインスタンスメソッドを呼び出す
    NSString *s = nil;
    XCTAssertNoThrow(s = objc_msgSend(dynamicInstance, dynamicSelector), @"メソッドが呼び出せる");
    XCTAssert([s isEqualToString:@"I'm DynamicClass!!"], @"返り値もただしい");
}
```

キモイよぉ……
Objective-Cで動的にクラスメソッドを呼び出す


objc_msgSendの第一引数にオブジェクトでなくClassを渡すとクラスメソッドも動的に呼び出すことができる。

```objectivec
- (void)testCallClassMethod
{
    XCTAssert(objc_msgSend([self class], @selector(instancesRespondToSelector:), _cmd), );
    XCTAssertFalse(objc_msgSend([self class], @selector(instancesRespondToSelector:), @selector(objectAtIndex:)), );
}
```

キモイ。
tail -fしているログ中の文字をハイライトする

## Mac(iTerm2)の場合
Mac使いでログ確認対象のマシンが多数ある場合は、こちらがおすすめ

Preferences -> Profiles -> Advanced -> Triggers -> Edit
で以下のように登録

* Regular Expression	: ハイライトしたい文字列の正規表現
* Action					: Highlight Text
* Parameters				: ハイライトの色

あとはtail -fするだけ

## Windows(秀丸)の場合
昔々、私が窓使いだった頃に常用していた方法です。手元に実機がないのでうろ覚え

* 適当なterminalソフトでログ出力先をファイルに設定(teratermのmacroで自動でファイル出力するようにするとオペミスした時にも安心)
* 秀丸の設定で、強調表示でハイライト文字、色を登録
* terminalソフトのログを秀丸で開く
* 秀丸の設定で、更新ファイルの自動読み込みをオフ
* tail -fの代わりに「ファイルを読み込み直す」で読み進める(カーソルが勝手に移動しないので、どこまで確認したか見失わない)

(下の二つはオプショナル。多分)


## sedが使える環境の場合
ログ確認対象のマシンが限定的か、簡単にsed scriptが配信できる場合はおすすめ
tailの結果をsedにパイプして使うsed scriptが公開されてます
[ログを色つけて見やすくする君](http://qiita.com/tukiyo/items/4725c3d637d70844fa56)
テキスト入力ごとに処理を行う

## 基本

```html:html
<input type="text" id="search">
```

```jq:jquery
$('search').keyup(function(){
    ～処理～
});
```

## 応用

###入力文字数のチェック

```html

```


```js



```

###インクリメンタルサーチ（ローカル編）

```js

```


###インクリメンタルサーチ（ajax編）
```js

```
vagrantでホストOS上のスクリプトをゲストOSで実行するvagrant-exec

Vagrantにはprovisioningという仕組みがありますが、それとは別にゲストOSにスクリプト等で仕事をさせたいケースもあります。そんなときはvagrant-execというプラグインを導入しましょう。

[vagrant-exec](https://github.com/p0deje/vagrant-exec)

## 導入手順

```bash
$ vagrant plugin install vagrant-exec
```

## 使い方

### コマンド実行する

exec の後に実行したいコマンドを記述でOK

```bash
$ vagrant exec pwd
```

### スクリプト（シェル）を実行させる

```bash
$ vagrant exec ./hoge.sh
```

### 注意点
シェルを実行させる場合の注意点として、スクリプトの改行コードはCRLFではなくLFでなければ実行時にエラーになることである。
ホストOS上のスクリプトをゲスト上で実行するので当たり前なのだが、例えばgit管理してるスクリプトをwindowsユーザーが利用する場合、core.autocrlfの設定に酔ってはでgit clone時にLF→CRLF変換されてしまうので運用面ではかなり注意である。
gitではファイルの移動を明示的に追跡できないことを再確認

git mvでファイルの移動を表すメタデータが記録される、というブログエントリーがあったので、淡い期待を込めて試してみたが、やっぱり記録されませんでした、という話。

```
> git mv aaa.txt bbb.txt
> cat bbb.txt > aaa.txt
> git commit -a -m 'mv track test'
> git log
> git diff --name-status   HEAD^
A	bbb.txt
```

bbb.txtが追加されたとしか認識されず。
Emacs(GNU Emacs on MaxOS)でEvernoteをMarkdownで編集する

環境は，OS X 10.9.1，Emacs24.3です．

geeknoteという本来はLinux向けのEvernoteコマンドラインツールを使うことで実現します．

## Emacs側の設定

Emacsはサーバ起動しておき，emacsclientから接続します．

init.elなどに以下を追記します．

```
(require 'server)
 (unless (server-running-p) (server-start))
```

## geeknoteのインストールと設定

```
% git clone git://github.com/VitaliyRodnenko/geeknote.git
% cd geeknote
% sudo python setup.py install
```

ここまででインストールが完了します．

`% geeknote login`

でEvernoteにログインします．

ログイン後，以下を設定すれば準備完了です．(Emacsは起動しておく必要があります．)

`% geeknote settings --editor /Applications/Emacs.app/Contents/MacOS/bin/emacsclient`

## geeknoteの利用

### ノートの作成

`% geeknote create --title hogehoge`

### ノートの検索

最新20件

`% geeknote find`

文字列検索(本文を含む)

`% geeknote find --search hogehoge --content-search`

### ノートの編集

`% geeknote edit -n 対象ノートのNo`

### サンプル

```
% geeknote find --search "Shop*"

Total found: 2

1 : Shopping list 22.04.2012
2 : Shopping list 25.04.2012

% geeknote edit -n 1
```

これで，Shopping list 22.04.2012がEmacsで編集できます．
Emacsから戻るには，C-x #です．

Evernote側ではきちんとHTMLっぽく表示されるので，中々いいです．

geeknoteについて詳しくは[公式](https://github.com/VitaliyRodnenko/geeknote)にあるとおりです．
GradleプロジェクトでMavenローカルリポジトリにJarをインストールする

Gradle構成のGroovyプロジェクトで軽めのDSLを作ったので、他のJavaプロジェクトでMaven参照したい。
つまり、Gradleからmvn installと同等のことをしたいわけだが、uploadArchivesでmavenDeployerを使ってやれば良い。

```groovy|build.gradle
apply plugin: 'groovy'
apply plugin: 'eclipse'
apply plugin: 'maven'

group = 'me.stormcat'
version = '0.0.1'

task sourcesJar(type: Jar, dependsOn:classes) {
     classifier = 'sources'
     from sourceSets.main.allSource
}
repositories {
    mavenCentral()
}

artifacts {
    archives sourcesJar
}

dependencies {
    compile 'org.codehaus.groovy:groovy-all:2.2.0'
    testCompile 'junit:junit:4.11'
}

uploadArchives {
    repositories {
        mavenDeployer {
            repository(url: "file:${System.getProperty('user.home')}/.m2/repository")
        }
    }
}
```
Mavenリポジトリにインストールするからといってpomを作る必要はない。はmavenで言うところの*groupId*は*group*で設定でき、*artifactId*は未設定ならプロジェクト名がそのまま利用されるが、指定したいのであれば*archivesBaseName*を設定すればartifactIdとして利用される。
また、versionに-SNAPSHOTを付加すれば勝手にSNAPSHOTデプロイにしてくれる。
sourcesJarタスクを設定しておけば、source-jarもデプロイされる。

ビルド実行してローカルインストールは以下のコマンドでOk。

```bash
$ gradle uploadArchives
```
ディレクトリ内の全Excelファイルの特定セルをRubyで書き換える(Spreadsheet使用)


以前、[こちら](http://qiita.com/damassima/items/5db8b5569c3b8ad7525e)でスクリプトを書いたが、使用しているOSがWindowsでなくなったのでWin32OLEが使えなくなった。
Spreadsheetを使って書き直してみた。


```ruby
require 'spreadsheet'

if ARGV.length != 5 then
  abort "引数の数が正しくありません。\nruby spreadsheet.rb 対象ディレクトリ 対象シート 対象セル（行） 対象セル（列） 値"
end

@src_dir, @target_sheet, @target_cell_row, @target_cell_col, @value = ARGV

Dir.glob("#{@src_dir}/*.xls") do |f|
  book = Spreadsheet.open f
  sheet = book.worksheet @target_sheet
  r = @target_cell_row.to_i
  c = @target_cell_col.to_i
  sheet[r, c] = @value
  book.write "dst/#{File.basename f}"
end
```
jenkinsを始める時に知っておいた方が良い事


# ディレクトリ構成
apt-get等のパッケージ管理ソフトで入れた場合にはjenkinsのホームディレクトリは`/var/lib/jenkins`になります。そのパスはjenkinsの実行時に使用出来、`$JENKINS_HOME`の変数名で閲覧できる。

ジョブの設定ファイルは`$JENKINS_HOME/jobs/*/config.xml`に記述される。このファイルを別サーバーのjenkinsに設置するだけで移行する事ができる(らしい)

ジョブでgitなどのバージョン管理ツールからソースをcloneすると`$JENKINS_HOME/workspace/*`に展開される。jenkinsで設定したビルド手順はworkspace下でcloneされたディレクトリ内で実行されている。

# jenkinsユーザーになる。

最初のビルドの設定時、失敗する事が多々あると思われる。
問題把握の為にはjenkinsユーザーになり、実際にビルド手順を手打ちした方が手っ取り早い。

    sudo vi /etc/passwd

```
jenkins:x:106:65534::/var/lib/jenkins:/bin/false
```

`/bin/false`を`/bin/bash`に変更する

    sudo su jenkins
    cd
    cd workspace/{ジョブ名}

でビルド手順を実行してみる。

作業終了後には`/bin/false`に戻す事を忘れずに！

# プラグンの導入

jenkinsはデフォルトではgitに対応していないので`Git Plugin`の導入をする必要がある。

`Git Plugin`では導入をしたあと、`jenkinsの管理`➡`システムの設定`でgitのユーザー名、メールアドレスの設定が必要。

rubyプロジェクトのビルド、rubyスクリプトの定期実行でのrubyのバージョン管理は`rbenv plugin`が簡単便利。

# ディスク容量

jenkinsを定期実行してしばらくすると失敗するようになります(というか、なりました)。原因はビルド後のログが貯まってディスク容量がいっぱいになっている事です。


対策としてはジョブ毎の設定で`古いビルドの破棄`をしておく。
これをする事によってビルド後のログを破棄してくれるようになります。

ビルドの保存日数、ビルドの保存最大数が設定出来ます。

保存日数`30`
保存最大数`100`

程度に設定しておけば大抵は大丈夫かと思われます。
RubyでExcelファイルを扱うライブラリの比較

# 概要

RubyでExcelファイルを扱うライブラリは、Win32OLEをはじめとしていくつか存在する。
どれを使用すべきか迷ったので、ざっくり比較してみた。

2014/09/03追記
こちらの方がよくまとまっています。
[Ruby - RailsでExcelを扱うGemまとめ - Qiita](http://qiita.com/Kta-M/items/02a2c41c5624f75498aa)

# ライブラリ

* [Win32OLE](http://docs.ruby-lang.org/ja/2.1.0/class/WIN32OLE.html)
* [WrapExcel](https://github.com/tomiacannondale/wrap_excel)
* [Spreadsheet](https://github.com/zdavatz/spreadsheet)
* [Roo](https://github.com/Empact/roo)
* [Axlsx](https://github.com/randym/axlsx)

# 比較

| ライブラリ | 読み込み可能ファイル形式 | 書き込み可能ファイル形式| 特徴 |
|:--|:--|:--|:--|
| Win32OLE | xls, xlsx | xls, xlsx | ・Windows上でのみ使用可能（標準ライブラリに含まれている）<br>・COMオブジェクトを操作する感じ |
| WrapExcel | xls, xlsx | xls, xlsx | ・Win32OLEをラップしてRubyっぽく使いやすくしたもの|
| Spreadsheet | xls | xls | ・読み込んだファイルをそのまま上書きすることはできない（別ファイルで書き込む必要がある）<br>・'A1'形式でのセル指定はできない（ゼロ始まりのインデックスで指定する）|
| Roo | xls, xlsx, OpenOffice, Google spreadsheets, LibreOffice, CSV | Google spreadsheets | ・xlsファイルへのアクセスには内部的にSpreadsheetを使用している<br>・インデックス（1始まり）でも'A1'形式でもセル指定ができる<br>・書き込みができるのはGoogle spreadsheetsのみ |
| Axlsx | N/A | Office Open XML (xlsx, OpenOffice, ...) | ・読み込みはできず書き込みしかできない<br>・チャートや数式、その他の書式等、細かい指定が可能<br>・'A1'形式だけでなく、'A1:D4'形式、'Sheet1!A3:B4'形式でのセル指定が可能<br>・商用利用の場合はドネーション推奨 |
CygwinのJavaを快適に使う方法

まずここの説明を読む

http://www.02.246.ne.jp/~torutk/javaoncygwin/javaoncygwin.html

そして、ここからjava_wrapperの最新版をダウンロードする

http://sourceforge.jp/projects/javaoncygwin/

上記の説明通りにjava_wrapperのインストールを行う

最後に、UTF-8でターミナル（僕の場合はmingetty）を使っている場合、
javaのコマンド群がことごとく文字化けするので、

java_wrapperに以下のパッチをあてる

```
103a104
>         ARGS="$ARGS -J-Dfile.encoding=UTF-8"
119a121,124
>     java)
>         ARGS="$ARGS -Dfile.encoding=UTF-8"
>         general_parse_arg $*
>         ;;
120a126
>         ARGS="$ARGS -J-Dfile.encoding=UTF-8"
```

やっていることは、単に、file.encodingを指定するオプションをつけているだけ

ただし、javaのときだけ指定方法が違うので条件を分けている