OmniAICreator/Qiita-1.07M huggingface dataset:
HerokuにPushしようとしてはまったこと


#現象

```
$ git push heroku master
```
すると以下のエラーが出る。

```
ssh: connect to host gmail.com port 22: No route to host
fatal: The remote end hung up unexpectedly
```

ssh出来ないのが原因と思い、~/.ssh/configに以下を書いても解決せず。

```
Host heroku.com
  Hostname heroku.com
  PreferredAuthentications publickey
  IdentityFile ~/.ssh/id_rsa
  port 22
```


#原因

+ デプロイしようとしているアプリを削除していた(古いアプリにリモートリポジトリにデプロイしようとしていた)


#解決策

```
# リモートリポジトリを確認する(リモートリポジトリが古いものではないか？)
$ git remote -v

# 上記で古いリポジトリにPushしようとしていたら、それを削除する
$ git remote rm heroku

# 新しくaddする
$ git remote add heroku git@heroku.com:アプリ名.git
$ git push heroku master
```

#参考
[herokuを始めてつまったところメモ - x**3な人生](http://d.hatena.ne.jp/verdigrisbrain/20111103)
MacのJavaVMでの実行時に起きる文字化けへの対処


いつも悩まされてます(alias設定したり、ターミナルの文字コード変更したり...)がようやく良さそうな解決策を見つけました。

以下の環境変数設定を`.bash_profile`などに書いておけば大丈夫そうです！

```bash
export JAVA_TOOL_OPTIONS=-Dfile.encoding=UTF-8
```
RDSのクエリ調査

RDSのクエリ調査を実施する際にすべきこと。

##（１）RDSの設定

- general_log：1 ・・・全てのクエリをログに残す
- slow_query_log：1　・・・スロークエリ（時間のかかっているクエリをログに残す）
- long_query_time：1　・・・スロークエリの時間（秒）

##（２）設定確認

- show global variables like 'general_log';
- show global variables like 'slow_query_log';
- show global variables like 'long_query_time';

##（３）全クエリの確認

- select * from mysql.general_log;

##（４）スロークエリの確認

- select * from mysql.slow_log;
Ruby で定数を環境変数から取得したい、かつデフォルト値を定義したい

## 文字列を取得したい場合

```rb
LOCALE = ENV['LOCALE'] || 'ja'
```

## 数値を取得したい場合
```rb
MAX_COUNT = (ENV["MAX_COUNT"] || 30).to_i
TIMEOUT = (ENV["TIMEOUT"] || 0.5).to_f
```
ELB の Cross-Zone Load Balancing という機能

## 旧来のELB

旧来のELBの有名な話で、マルチAZで均等にリクエストを振り分けるためには各AZに配置するインスタンス数を同数とする必要がありました。
これはELBがAZ毎にLBを置き、その配下のインスタンスにしかリクエストを転送できないアーキテクチャとなっていたためです。

この性質はオートスケールと組み合わせて考えた場合に困ります。
なぜならオートスケール時はAZ間で足並みそろえてスケールされるわけではないため、例えば以下のような設定とした場合、一方のAZでは１台のインスタンス、他方のAZでは５台のインスタンスという状態が発生し得るからです。

＜ELBとオートスケール設定＞

* ELBでは２つのAZを管理
* 各AZ配下のインスタンスは平常時は１台
* 各AZ配下のインスタンスは高負荷時は最大5台まで増加

## Cross-Zone Load Balancing という機能

これまで前述の事項は避けようがなかったのですが、それを解決してくれる「Cross-Zone Load Balancing」という機能が2013年11月にリリースされました。
[Elastic Load Balancing Announces Cross-Zone Load Balancing](http://aws.amazon.com/jp/about-aws/whats-new/2013/11/06/elastic-load-balancing-adds-cross-zone-load-balancing/)

アーキテクチャとしてはこれまで同様にAZ毎にLBが置かれるようですが、Cross-Zone Load Balancing を有効化すると各LBがAZを跨いでリクエストを転送できるようにしてくれるようです。
したがって、AZ単位ではなくインスタンス単位でリクエストを均等に振り分けることが出来るようになるため、AZ間でインスタンス数を合わる必要がなくなり、オートスケール時も懸念する必要がなくなりました。
ナイスな機能ですね。


ちなみに Cross-Zone Load Balancing は CLI で有効化できるようです。（現時点ではまだマネージメントコンソールは未対応。。。）
[Enable or Disable Cross-Zone Load Balancing for Your Load Balancer - Elastic Load Balancing](http://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/enable-disable-crosszone-lb.html)
Markdownの見出し行に「C#」と書く方法


Markdownでは行頭に # をつけると見出し行になりますが、見易さの観点からこんな感じに見出しの後ろにも # をつけていいことになっています：

```
## 見出し ##
```

で、そうすると例えば

```
## クールだぜC#
```
と書くと

## クールだぜC#

という風にCがクールなことになってしまいます（笑）。いや、Cもクールだとは思うのですが。

これを避けるには末尾にスペースをつければOKです。こんな風に。

## クールだぜC# 

これでC#がクールになりました（笑）
ExceptionNotifier.notify_exception で処理されない３つの Exception

[exception_notification v4.0.0](https://github.com/smartinez87/exception_notification/tree/v4.0.0) の話です。

v4.0.0から通知処理をバックグラウンド実行する、以下のようなコードが書けるようになりました。

```rb
begin
  some code...
rescue => e
  ExceptionNotifier.notify_exception(e)
end
```

これは便利なのですが、１点認識しておかないといけないことがあります。
ExceptionNotifier では以下の３つの Exception についてはデフォルトで処理しないように[ハードコード](https://github.com/smartinez87/exception_notification/blob/v4.0.0/lib/exception_notifier.rb#L19)されています。

- ActiveRecord::RecordNotFound
- AbstractController::ActionNotFound
- ActionController::RoutingError

もしこれらを処理対象としたいのであれば、[ここ](http://smartinez87.github.io/exception_notification/#ignore-exceptions/ignore_exceptions)にあるように ignore_exceptions オプションを利用して、例えば下記のような定義をする必要があります。

```rb
Whatever::Application.config.middleware.use ExceptionNotification::Rack,
  :ignore_exceptions => '',
  :email => {
    :email_prefix         => "[Whatever] ",
    :sender_address       => %{"notifier" <notifier@example.com>},
    :exception_recipients => %w{exceptions@example.com}
  }
```
Outlet Collectionの連携を確認したくなったら見るメモ

Outlet CollectionをConnections inspectorで確認しようとして、なかなか表示できず困ったのでメモ。

StoryboardでView Controller自体を選択すると表示できました。

![スクリーンショット 2014-03-28 9.27.16.png](https://qiita-image-store.s3.amazonaws.com/0/38863/154af636-d15e-a5ab-d66f-fe3e417ba68c.png)


※View Controllerは、左上をクリックしても選択できます。
Amazon LinuxにDockerが入った！！

[Amazon Web Services Blog](http://aws.typepad.com/aws/2014/03/amazon-linux-ami-201403-is-now-available.html)で、今回のAmazon Linux AMI 2014.03リリースに[Docker](https://www.docker.io/)が導入されたことがアナウンスされています。

> Docker 0.9 - You can now run Docker containers on the Amazon Linux AMI.

さっそく試してみた:

確認する、

```bash
$ sudo yum search docker
読み込んだプラグイン:priorities, update-motd, upgrade-helper
================================================================== N/S matched: docker ==================================================================
docker.x86_64 : Automates deployment of containerized applications

  Name and summary matches only, use "search all" for everything.

$ sudo yum info docker
読み込んだプラグイン:priorities, update-motd, upgrade-helper
================================================================== N/S matched: docker ==================================================================
docker.x86_64 : Automates deployment of containerized applications

  Name and summary matches only, use "search all" for everything.
[ec2-user@ip-172-31-20-119 ~]$ sudo yum info docker
読み込んだプラグイン:priorities, update-motd, upgrade-helper
利用可能なパッケージ
名前                : docker
アーキテクチャー    : x86_64
バージョン          : 0.9.0
リリース            : 2.10.amzn1
容量                : 5.0 M
リポジトリー        : amzn-main/latest
要約                : Automates deployment of containerized applications
URL                 : http://www.docker.io
ライセンス          : ASL 2.0 and BSD
説明                : Docker is an open-source engine that automates the deployment of any
                    : application as a lightweight, portable, self-sufficient container that will
                    : run virtually anywhere.
                    : 
                    : Docker containers can encapsulate any payload, and will run consistently on
                    : and between virtually any server. The same container that a developer builds
                    : and tests on a laptop will run at scale, in production*, on VMs, bare-metal
                    : servers, OpenStack clusters, public instances, or combinations of the above.
```

おー、いるいる、入れる、

```bash
$ sudo yum install docker
```

起動する、

```bash
$ sudo service docker start
```

これだけじゃつまらないので、Blogエンジンの[Ghost](https://ghost.org/)の[イメージ](https://index.docker.io/u/dockerfile/ghost/)を起動してみる

```bash
$ sudo docker run -d -p 80:2368 dockerfile/ghost
```

じゃーん

![ghost.png](https://qiita-image-store.s3.amazonaws.com/0/14712/cd27e6b6-fa62-03ff-3e9c-5f9a63a7d176.png)

んー、プロダクションでもEC2上でしかもAmazonLinuxでDockerって、もう全然未来の話じゃないんだな
iOSで1秒未満のバイブレーション


<script src="https://gist.github.com/asus4/9664093.js"></script>

https://gist.github.com/asus4/9664093

Androidなら細かいバイブレーション制御できるのに。って思っていましたが。
iOSでもこうやれば出来ました。

カスタムバイブレーション機能をプログラムから使う方法ないのかな。
docomo絵文字をスマホサイトで表示する①


![スクリーンショット 2014-03-28 11.03.14.png](https://qiita-image-store.s3.amazonaws.com/0/35733/93129834-fe0c-afe0-6c43-3e72bd0b44f5.png "スクリーンショット 2014-03-28 11.03.14.png")

- Unicode形式の docomo絵文字 をスマホサイト(for iOS/Android)で表示します。
	- 絵文字の例：晴れマークの場合 → `&#xE63E;`
	- HTMLファイルは UTF-8 形式を想定しています。
- これ重要なのですが、最終的には画像(CSSスプライト)で表示でします。
	- iOSとAndroidの違いや、Android端末の機種依存を考えると、画像で表示するのが今のところベストプラクティスかなと。
	- なので特にスマホに限らず、PC等でも表示できます。
- docomo絵文字に限らず、今回利用するJSライブラリは au、SoftBank の絵文字も対応しているようです(未検証)。

# デモ

- こちらをご覧ください。
	- http://hkusu.github.io/emoji_js_demo/

# 利用するライブラリ

- このJavaScriptライブラリを使います。
	- https://github.com/fengmk2/emoji
	- 変換マップはこれのようです。
		- http://code.iamcal.com/php/emoji/

# docomo絵文字について

- docomoのサイトで説明されています。
	- 基本絵文字
		- https://www.nttdocomo.co.jp/service/developer/make/content/pictograph/basic/index.html
	- 拡張絵文字
		- https://www.nttdocomo.co.jp/service/developer/make/content/pictograph/extention/index.html
- docomo絵文字の入力ツール
	- docomoから入力ツール「i絵文字」が提供されています(ただしWindows用のみ)。
		- https://www.nttdocomo.co.jp/service/developer/make/content/pictograph/tool/index.html
	- Macの方はこのサイトが便利です。
		- http://code.cside.com/i-mode/emojimode/#
		- このサイトの「ユニコード」欄をコピペすればOKです。

# 導入手順メモ

- 今回は Bower でJavaScriptライブラリのパッケージ管理をすることにします。

## 手順

- Bower で、このライブラリ([https://github.com/fengmk2/emoji](https://github.com/fengmk2/emoji))をインストール

```
$ bower install emoji --save
```

- index.html で CSSファイル をインクルード

```html:index.html
<link rel="stylesheet" href="bower_components/emoji/lib/emoji.css">
```

- index.html で JSファイル をインクルード ※jQueryも必要です。

```html:index.html
<script src="bower_components/emoji/lib/emoji.js"></script>
```

- HTMLへの記載
	- 実際には JavaScript の記載は外部ファイルにした方がいいです。
	- `class="emojstext"` は一カ所しか書けないようです。
		- なのでページ全体を絵文字対応したいなら body のすぐ下の層で div で定義する。

```html:index.html
<body>
    <div class="emojstext">
        これは&#xE63E;晴れマークです。
        これは&#xE63F;曇りマークです。
    </div>
    <script>
        $(function () {
            var $text = $('.emojstext');
            var html = $text.html().trim().replace(/\n/g, '<br/>');
            //html = jEmoji.softbankToUnified(html);
            //html = jEmoji.googleToUnified(html);
            html = jEmoji.docomoToUnified(html);
            //html = jEmoji.kddiToUnified(html);
            $text.html(jEmoji.unifiedToHTML(html));
        });
    </script>
</body>
```

## 結果

- ブラウザで表示するとこんな感じ。

![スクリーンショット 2014-03-28 0.03.28.png](https://qiita-image-store.s3.amazonaws.com/0/35733/aeeca3bf-8d1e-9672-c34a-c0e7217c0c47.png "スクリーンショット 2014-03-28 0.03.28.png")

- うまく動かない！という方の為に、デモのソースはこちらに置いておきます。
	- https://github.com/hkusu/emoji_js_demo
		- `index.html`を見てください。
	- 何カ所か変換できてないのがありますが（□みたいな表示）、iアプリマークなどdocomo固有の絵文字がそうなるようです。
	- 「晴れ」と「曇り」が続くと「晴れのち曇り」の絵文字になる？謎。

# ほか

- PHP版もあるようです。
	- https://github.com/iamcal/php-emoji
	- ただ、結局は CSSスプライト で画像を表示するようです。

# さいごに

- Unicodeで入力するの面倒だよ単純に装飾として絵文字を使いたいんだよ、というもあるかと思いますので、それは別の投稿で書きます。
direct_to_templateからTemplateViewへ移行できない

Djangoチュートリアル（後編）で詰まった点
参考URL: http://codezine.jp/article/detail/4264?p=3

Django 1.6で上記チュートリアルを進めると・・・

```py
# 略
from django.views.generic.simple import direct_to_template
# 略
def item_page_display(request, item_id):
    item = get_object_or_404(Item, id=item_id)
    return direct_to_template(request, 'page/item.html', extra_context = {'item': item })
```
とすると、direct_to_templateのImportErrorが出るので、
TemplateViewの使用を検討。
参考URL: http://stackoverflow.com/questions/11005733/moving-from-direct-to-template-to-new-templateview-in-django

ところが、
AttributeError: 'function' object has no attribute 'get'が、site-packages/django/middleware/clickjacking.py内のprocess_responseで起こってよーわからんくなったので、
direct_to_templateに似た働きをするrenderやrender_to_responseをインポートして使用。

```py
# 略
from django.shortcuts import render, render_to_response
from django.template import RequestContext
# 略
def item_page_display(request, item_id):
    item = get_object_or_404(Item, id=item_id)
    return render_to_response('page/item.html', {'item':item}, context_instance=RequestContext(request))
    # または、よりシンプルに、return render(request, 'page/item.html', {'item': item})
```

参考URL: https://groups.google.com/forum/#!topic/django-users/ZuDi-iqd1Xk

これで一応商品画面が表示されるようになった。

![shot.png](https://qiita-image-store.s3.amazonaws.com/0/32910/283f3529-5c17-9efd-30f8-8b279ed99ca3.png)
iOSでテクスチャの非同期読み込み

サイズの大きいテクスチャを読み込む画面がある場合に、全てのテクスチャの準備が出来てから画面を表示するとレスポンスが遅くなる。
このような場合に別スレッドでテクスチャをロードしつつ、用意のできた部分から使うことにより画面のレスポンスを改善する方法がある。

ただし、各スレッドはデフォルトで異なる OpenGL ES レンダリングコンテキストを持つため、
異なるスレッドで確保したテクスチャを使う場合は、各スレッドで使用する EAGLContext から EAGLShareGroup を共有する必要がある。
これを行うには EAGLContext 生成時に initWithAPI:sharegroup: で元スレッドの sharedGroup を渡す。

```AsyncSample.m


- (id)init
{
    // ... (略)
    // 非同期読み込み. EAGLContext を渡す.
    [self performSelectorInBackground:@selector(loadTexture:) withObject:[EAGLContext currentContext]];
    // ... (略)
}

// バックグラウンドスレッドで呼ばれるメソッド.
- (void)loadTexture:(EAGLContext *)ctx;
{
    // sharegroup を指定して異なるコンテクストのリソースを共有する.
    EAGLContext* myContext = [[EAGLContext alloc] initWithAPI:[ctx API]
                                                   sharegroup:[ctx sharegroup]];
    // EAGLContext を設定
    [EAGLContext setCurrentContext:myContext];
    NSArray *imageNames = @[@"image1.png", @"image2.png", @"image3.png"];
    glFlush(); // glFlush を呼び出してコマンドを反映させる.
    for (NSString *imageName in imageNames) {
        GLuint tex = [self createTextureFromUIImage:[UIImage imageNamed:imageName]];
        dispatch_async(dispatch_get_main_queue(), ^{
            // スレッド間共有変数への書き込みは競合を起こさないよう main スレッドで実行.
            self.textures[i] = tex;
        });
    }
}


// UIImage からテクスチャの作成.
- (GLuint)createTextureFromUIImage:(UIImage *)teximage
{
    CGImageRef textureImage = teximage.CGImage;
    NSInteger texWidth = CGImageGetWidth(textureImage);
    NSInteger texHeight = CGImageGetHeight(textureImage);
    GLubyte *textureData = (GLubyte *)malloc(texWidth * texHeight * 4);
    CGContextRef textureContext = CGBitmapContextCreate(textureData,
                                                        texWidth,
                                                        texHeight,
                                                        8, texWidth * 4,
                                                        CGImageGetColorSpace(textureImage),
                                                        kCGImageAlphaPremultipliedLast);
    CGContextDrawImage(textureContext, CGRectMake(0.0, 0.0, (float)texWidth, (float)texHeight), textureImage);
    CGContextRelease(textureContext);
    
    GLuint texid;
    glGenTextures(1, &texid);
    glBindTexture(GL_TEXTURE_2D, texid);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);    
    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, texWidth, texHeight, 0, GL_RGBA,GL_UNSIGNED_BYTE, textureData);
    free(textureData);
    return texid;
}
```
LINQメモ

たまにLINQのどの操作が何なのか混乱するのでメモ。


```csharp:Program.cs
//ランダムの生成
var rand = new Random();

//0～99の乱数を100個集めたIEnumerable<int>を作る
var list = Enumerable.Range(0, 100).Select(x => rand.Next(100));

//それを結合して文字列として出力する
Console.WriteLine(string.Join(" ", list));


//標準入力から受け取ったものを' 'で分割、intに変換して10未満のものだけ、数が小さいものから選びList<int>にする
var arr = Console.ReadLine().Split(' ').Select(int.Parse).Where(x => x < 10).OrderBy(x => x).ToList();

//1個ずつ出力する
arr.ForEach(x => Console.Write(string.Format("{0} ", x)));

//最後の改行
Console.WriteLine();
```

Whereはフィルタ
Selectは射影
OrderByは選択する順番
1回のreplaceで複数のパターンを置き換える例2つ

Stringのreplace()関数は第2引数に関数を指定することも出来ます。
[String.prototype.replace() - JavaScript | MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace)

それを使って1回のreplaceで複数のパターンを置き換える例を2つ上げます。MITライセンスとします。

# escapeHTML

1つめはHTMLをエスケープする関数です。[Underscore.js](http://underscorejs.org/)を使っている場合は[escape](http://underscorejs.org/#escape)が用意されていますのでそちらを使いましょう。これはUnderscore.jsが無いときに使うためのスタンドアロン版です。

```js
var escapeHTML = function() {
  var escapes = {
        '&': '&amp;',
        '<': '&lt;',
        '>': '&gt;',
        '"': '&quot;',
        "'": '&#x27;'
      },
      re = /[&<>"']/g;
  function replacer(c) { return escapes[c]; }
  return function(html) { return html.replace(re, replacer); };
}();
```

関数を定義する時点で評価しておける部分はなるべく評価するようにして、実際に呼び出されるときの処理を少なくなるようにしています。
具体的にはreとreplacerはescapeHTMLの実行時に毎回計算されるわけではなくて、上のコードを実行した時点で1度だけ計算されます。

使い方の例は以下の通りです。

```js
console.log(escapeHTML('<a href=\'/foo?a=1&amp;b=2\' class="foo">here</a>'));
```

出力

```
&lt;a href=&#x27;/foo?a=1&amp;amp;b=2&#x27; class=&quot;foo&quot;&gt;here&lt;/a&gt;
```

# tr

Unixにはtrというコマンドがあります。[tr(1): translate/delete char - Linux man page](http://linux.die.net/man/1/tr)
2つめの例はこれと似たような置換を実現する関数です。

```js
function buildTr(from, to) {
  var replaces = {}, i, c, exp = '', re;
  for (i in from) {
    c = from[i];
    replaces[c] = to.substr(i, 1);
    exp += '[]-^\\'.indexOf(c) < 0 ? c : '\\' + c;
  }
  re = RegExp('[' + exp + ']', 'g');
  function replacer(c) { return replaces[c]; }
  return function(str) { return str.replace(re, replacer); };
}
```

こちらも基本方針は1つめの例と同様です。置換元の文字列が引数で渡されるので、動的に正規表現を作っています。正規表現のキャラクタセット（[Regular Expressions - JavaScript | MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions)）を使っているので、その中で意味を持つメタキャラクタ[]-^\はバックスラッシュでエスケープしています。

変換元は配列の添字でfrom[i]のように文字を取り出しているのに対して、変換先はto.substr(i, 1)のようにしているのは、toの文字数が少ない場合は空文字に置換したいからです。to[i]でiがtoの長さ以上だとundefinedになりますが、to.substr(i, 1)なら空文字になるので後者を使っています。

使い方の例です。第1引数より第2引数は1文字短いので、第1引数の最後の文字xは削除されます。他の文字は対応する文字に置き換えられます。

```js
var tr = buildTr(
  'あいうえおやゆよわつは。[]-\\^x',
  'ぁぃぅぇぉゃゅょゎっゎo{}_/~'
);
console.log(
  tr('replaceの第二引数に関数を使うことでreplaceを一回で済ませています。変換元は配列の添字でfrom[i]のように文字を取り出しているのに対して、変換先はto.substr(i, 1)のようにしているのは、toの文字数が少ない場合は空文字に置換したいからです。あとはメタ文字のテスト-\\^と消すテストx。わあい、えいゆう、おやつ'));
```

出力例です。

```
replaceの第二引数に関数を使ぅことでreplaceを一回で済ませてぃますo変換元ゎ配列の添字でfrom{i}のょぅに文字を取り出してぃるのに対して、変換先ゎto.substr(i, 1)のょぅにしてぃるのゎ、toの文字数が少なぃ場合ゎ空文字に置換したぃからですoぁとゎメタ文字のテスト_/~と消すテストoゎぁぃ、ぇぃゅぅ、ぉゃっ
```
GitHubに入門（その１）

GitHubをこれまでに触ったことがなかったので、
「[GitHub実践入門](http://www.amazon.co.jp/GitHub%E5%AE%9F%E8%B7%B5%E5%85%A5%E9%96%80-~Pull-Request%E3%81%AB%E3%82%88%E3%82%8B%E9%96%8B%E7%99%BA%E3%81%AE%E5%A4%89%E9%9D%A9-PRESS-plus/dp/477416366X)」を参考に実施した際のメモ。

* OS：Windows 7 Professional 64bit
* Git：1.8.3.msysgit.0

#全体の流れ
1. GitHubにアカウントを登録
2. ローカルでssh-keygenを実行して鍵を作成（パスフレーズも設定）
3. GitHubのページで公開鍵（~/.ssh/id_rsa.pub）の内容を貼り付けてSSH Keyを登録
4. リポジトリの作成
5. 作成したリポジトリをclone
6. コードの作成
7. コミット（git commit）
8. push（git push）
9. ブラウザでpushしたファイルが参照できるかを確認

#公開鍵の登録後、動作確認時にエラー
公開鍵の登録後、GitHubと認証しようとした際にエラーが発生。

`$ ssh -T git@github.com
The authenticity of host 'github.com (192.30.252.131)' can't be established.
RSA key fingerprint is ＜フィンガープリント＞.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'github.com,192.30.252.131' (RSA) to the list of known hosts.
Permission denied (publickey).
`

ググったところ、`ssh-add`で秘密鍵を追加すればよいとのこと。
`$ ssh-add /C/Users/＜ユーザ名＞/.ssh/id_rsa
Could not open a connection to your authentication agent.
`

エラーが出る。

さらに[ググったところ](http://memopct.blogspot.jp/2013/08/ssh-addcould-not-open-connection-to.html)、事前にeval \`ssh-agent\`を実行しないといけない模様。

```
$ eval `ssh-agent`
Agent pid 1940

$ ssh-add /C/Users/＜ユーザ名＞/.ssh/id_rsa
Enter passphrase for /C/Users/＜ユーザ名＞/.ssh/id_rsa:＜パスフレーズ＞
Identity added: /C/Users/＜ユーザ名＞/.ssh/id_rsa (/C/Users/＜ユーザ名＞/.ssh/id_rsa)

$ ssh -T git@github.com
Hi ＜ユーザ名＞! You've successfully authenticated, but GitHub does not provide shell access.
```

無事に動作確認が完了した。

`ssh-agent`は認証エージェントと呼ばれるもので、パスフレーズを保持するプロセス。ssh-agentを実行すると実行したいコマンドが出力されるので、eval \`ssh-agent\`としてあげる必要がある。
`ssh-add`はパスフレーズを登録するためのコマンド。

# git push時に警告発生
下記のような警告メッセージが出力された。

```
$ git push
warning: push.default is unset; its implicit value is changing in
Git 2.0 from 'matching' to 'simple'. To squelch this message
and maintain the current behavior after the default changes, use:

  git config --global push.default matching

To squelch this message and adopt the new behavior now, use:

  git config --global push.default simple

See 'git help config' and search for 'push.default' for further information.
(the 'simple' mode was introduced in Git 1.7.11. Use the similar mode
'current' instead of 'simple' if you sometimes use older versions of Git)

Username for 'https://github.com':
```

```git config```でpush.defaultに値を設定する必要がある。設定する値や詳細については[ここ](http://qiita.com/misopeso/items/ede49b661cc7ad30528a)に記載されている。

```
$ git config --global push.default matching

$ git push
Username for 'https://github.com': ＜ユーザ名＞
Password for 'https://＜ユーザ名＞@github.com':＜パスフレーズ＞
Counting objects: 4, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 361 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To https://github.com/＜ユーザ名＞/Hello-World.git
   8d7b8fc..77fcef3  master -> master
```
Facebook, Twitterでの拡散情報を取得する


「うわー、このURLのソーシャルメディアでのシェア状況知りたいって感じやわー」ってことが3日に1日くらいあると思うので、メモがてら投稿します。

- - -

### Facebook

* xml

```
# https//google.comのいいねとシェア数を取得
https://api.facebook.com/method/fql.query?query=select%20like_count,%20share_count%20from%20link_stat%20where%20url=%22https://google.com%22

```

```xml
<fql_query_response xmlns="http://api.facebook.com/1.0/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" list="true">
  <link_stat>
    <like_count>86482</like_count>
    <share_count>134607</share_count>
  </link_stat>
</fql_query_response>
```

* json

```
# https//google.comのいいねとシェア数を取得
https://api.facebook.com/method/fql.query?format=json&query=select%20like_count,%20share_count%20from%20link_stat%20where%20url=%22https://google.com%22

```
```json
[
  {
    like_count: 86482,
    share_count: 134607
  }
]
```

- - -

### Twitter

```
# https://facebook.comのツイートカウントを取得
http://urls.api.twitter.com/1/urls/count.json?url=https://facebook.com/
```

```

{
  count: 26250,
  url: "https://facebook.com/"
}

```
　
  

超簡単ですね。
[一日一Vim](その3)検索した文字を置換する

# まず検索

まず`/`で何かしら検索します。

# 置換

次に`:%s`で置換をするのですが、今まで私は検索した文字を手入力してましたが、そんなことしなくても`:%s//{置換文字}/`と、検索文字部分を何も記述しないと、以前に検索した文字を検索文字の対象にするそうです。

# 例

次のような文字列があったとして

```
test hoge fuga test hoge fuga
```

`/test` として検索

その後で`:%s//TEST/g`とすると

```
TEST hoge fuga TEST hoge fuga
```

と以前に検索した文字が置換されました。ちなみに置換コマンドの最後の`g`は`ヒットした文字列を全て置換する`という意味になります。
CakePHP2 containableでrecursive=2のテーブルを取得する方法

忘備録として
containableでrecursive=2のテーブルのレコードを取得する方法。
Model1 - Model2 - Model3と取得する場合

```php

$data= $this->Model1->find('first', array(
	'contain' => array(
		'Model2' => array(
			'Model3',
		),
	),
	'conditions' => array(
		'Model1.id' => $id,
	),
));
```

こうやって書けば、Model2に関連づくModel3のレコードも取得できる。
recursive=2にすると、必要のない階層のテーブルのレコードまで取得してくるので
必要なレコードだけを取ってきたい場合はこのように書けばいいね。というメモ。
WordVBAで分かち書き

#概要
現在開いているWord文書を分かち書きした別文書を開く。

#コード
```bas:分かち書き文書作成.bas
Option Explicit

Sub 分かち書き文章作成()
    Dim doc As Document
    Set doc = Documents.Add
    Dim wrd As Variant
    For Each wrd In ThisDocument.Words
        doc.Content.InsertAfter wrd & " "
    Next
End Sub
```

#出力イメージ
WordVBA で 分かち書き を 試して みる 。 
 分かち書き と は 、 文書 を 単語 ごと に スペース で 区切る 事 だ 。 
 その 結果 が これ だ 。 。  
 注意点 と して 、 区切る 方法 が 複数 ある 場合 に は 複数 の 結果 が 返される 。 
 
#感想
調べた中で最も簡単な分かち書き方法だった。
Tmux 1.9でウィンドウ分割後もカレントディレクトリに留まる

## 背景

Tmux 1.9で、`new-window`その他の挙動が変更されました。新しく作られたウィンドウやペーンは、すべてホームディレクトリから始まるようになったのです。個人的には、`new-window`に関してはこの挙動のほうが好ましい場合もあるかなと思います（別プロジェクトの作業環境を作る場合などは一旦ホームディレクトリに戻るのは合理的です、そして`new-window`を使う場合はプロジェクトを変更するケースも多いでしょう）。しかし、`split-window`に関しては納得できませんでした。通常ウィンドウを分割する場合、同じプロジェクトで複数のペーンを使いたいケースがほとんどではないでしょうか。ならば、同じディレクトリに留まっていてほしい。

## やってみた

`split-window`には`%`と`"`がバインディングされているので、それを変更します。

```text:.tmux.conf
# 1.9 changed the behaviour of split-window and new-window.
# I prefer the old style for split-window.
unbind %
bind-key % split-window -h -c "#{pane_current_path}"
unbind '"'
bind-key '"' split-window -v -c "#{pane_current_path}"
```

## 注意事項

試してないのですが、1.8以前では以上のコードは動作しないようです。`if-shell`コマンドでバージョン判定ができるようですので、それでやるしかないようです。少し面倒ですね。

## 参考資料

https://coderwall.com/p/tjo3ig
jsの設定ファイルをcoffeeで書く方法

jsonやjs で書く設定ファイルとかけっこうあるとおもいます。
たとえば gulp なら、gulpfile.js という名前のjsファイルを作る必要があります。

これを coffee-script で書きたい我々なのですが、設定ファイルを読むライブラリがcoffeeに対応してなくても、以下のようにすればいけます。

```bash
$ npm install --save coffee-script
```

```js:gulpfile.js
require('coffee-script/register');
require('./gulpfile.coffee');
```

```coffeescript:gulpfile.coffee
gulp   = require 'gulp'
# 以下 coffee-script
```

jsから `coffee-script/register` をrequireすると、coffeeのファイルをrequireできるようになるまっす

coffee-script 1.7以前は、 `require('coffee-script')` だったので注意です。
Dockerで開発環境を試す

開発環境って試すのが **結構めんどくさかったり** 、これ使ってみたいけど、 **インストールが大変だったり** しますよね。そこで！今流行りの[docker](https://www.docker.io/)で試してみようと思いました。

# Githubに上がってるDockerfile

Githubで「 docker XXX 」で検索するとたくさん出てきます。

[JIRA](https://github.com/docker-atlassian/jira)
[gitlab](https://github.com/search?q=docker%20gitlab)
[Jenkins](https://github.com/search?q=docker+jenkins&type=Repositories&ref=searchresults)
[Redmine](https://github.com/search?q=docker+redmine&type=Repositories&ref=searchresults)

# ALMiniumのDockerfileがない。。

## ALMiniumとは
Redmine、DVCS(Git/VMercurial)、Backlogs、コードレビュープラグインなど、開発に必要な環境を簡単にセットアップします。

Github:[ALMinium](https://github.com/alminium/alminium)

HP:[ALMiniumをGitの共有リポジトリとして使う](http://alminium.github.io/alminium/git.html)

# ALMiniumの確認用にひとまず見れる環境としてDockerfile作りました

[docker_ALMinium](https://github.com/koudaiii/docker_ALMinium.git)

> ※注意
> ALMiniumのinstallのShell(smelt)が大きくShell最後に出力されるHTTPD[OK]からConsoleがなかなか帰って来ませんが気長に待ちます＾＾；
> 原因はDockerでimageの作成待ち(?)
任意の数の文字列から最長共通部分文字列を抜き出す

いわゆる最長共通部分文字列問題（LCS）っていうやつです  
競技プログラミングなどでは大体2つの文字列が与えられますが、今回は任意の数の文字列からLCSを得る（しかも共通文字列長ではなく共通文字列そのもの）必要があったので、Dartで書きました。  

参考になったのは[こちら](http://d.hatena.ne.jp/jetbead/20110724/1311526610)の記事です。一方を固定し、もう一方をずらしながら重ね合わせて最長共通部分文字列を得るアルゴリズムです。  
`sortByLength`は`List<String>`を受け取って、文字列長の短い順に並べる関数です。

```dart
getLongestCommonSubstring(List<String> list) {
  //共通部分文字列のリスト
  List<String> csList = new List<String>();
  //最長文字列（固定用）
  String base = sortByLength(list).last;
  //ループ処理
  for (int k = 0; k < list.length; k++) {
    String s = list[k];
    //固定文字列と同じなら中断
    if (s == base) {
      continue;
    }
    //固定文字列の前後にダミー挿入
    int length = s.length;
    String dummy = "";
    for (int i = 0; i < length; i++) {
      dummy += "*";
    }
    dummy += base + dummy;
    //現在の2つの文字列の共通部分文字列を取得
    List<String> commons = new List<String>();
    //走査
    for (int i = 0; i < (base.length + s.length); i++) {
      int matchCount = 0;
      int matchStart = 0;
      int tmpCount = 0;
      int tmpStart = 0;
      for (int j = 0; j < s.length; j++) {
        if (s[j] == dummy[i + j]) {
          if (tmpCount == 0) {
            tmpStart = j;
          }
          tmpCount++;
        } else {
          tmpCount = 0;
          tmpStart = 0;
        }
        //最長マッチとマッチ開始位置を更新
        if (tmpCount > matchCount) {
          matchCount = tmpCount;
          matchStart = tmpStart;
        }
      }
      //一致がある場合は部分文字列を抜き出す
      if (matchCount > 0) {
        commons.add(s.substring(matchStart, matchStart + matchCount));
      }
    }
    //走査で見つかったもののうち、共通のものだけを残す
    if (commons.isEmpty) {
      break;
    }
    if (csList.isEmpty) {
      csList.addAll(commons);
    } else {
      csList.removeWhere((String s) => !commons.contains(s));
    }
  }
  if (csList.isEmpty) {
    return "";
  }
  //残った共通部分文字列のうち最も長いものを返す
  return sortByLength(csList).last;
}
```

Dartで初めて書いたスクリプトがこれなのでDartらしくかけていないと思います（この実装なら大体どの言語でも同じように書けるはず）  
計算量はO(m*n^2)って感じでしょうか　  
競技プログラミングも普段やらないのでもっと効率がいい方法があるよということであればぜひ教えていただきたいです
phpunit/DbUnit + oracleで接続ができない

管理者権限があれば問題無いと思うんだけどないとコケるからパッチ当てる。

`PHPUnit/Extensions/Database/DB/MetaData/Oci.php`

Oci.php.patch

~~~patch
156c156
<                     FROM USER_TAB_COLUMNS
---
>                     FROM ALL_TAB_COLUMNS
168c168
<                        FROM user_constraints a, user_cons_columns b
---
>                        FROM all_constraints a, all_cons_columns b
~~~


関連情報
https://github.com/sebastianbergmann/dbunit/issues/41
https://github.com/sebastianbergmann/phpunit/issues/703
あるレコードを、そのレコードに含まれるカウント用カラムに設定された数だけ増殖させる SQL

投稿の内容を適切に表現したタイトル募集中！

# 改版履歴

2014/04/17 Oracle での連番作成のやり方を追記

# やりたいこと

**table name : table1**

| id | name | num |
|---:|:-----|----:|
| 1  | aaa  | 2 |
| 2  | bbb  | 3 |
| 3  | ccc  | 5 |
| 4  | ddd  | 1 |

こんなテーブルを、num の数に着目し

| id | name | seq |
|---:|:-----|----:|
| 1  | aaa  | 1 |
| 1  | aaa  | 2 |
| 2  | bbb  | 1 |
| 2  | bbb  | 2 |
| 2  | bbb  | 3 |
| 3  | ccc  | 1 |
| 3  | ccc  | 2 |
| 3  | ccc  | 3 |
| 3  | ccc  | 4 |
| 3  | ccc  | 5 |
| 4  | ddd  | 1 |

こんな感じで増幅させたいことって、よくはないけどたまにはありますよね？

# やりかた (MySQL の場合)

```sql
select
  t1.id
  , t1.name
  , seq_t.seq
from
  table1 as t1
  , (select
       @i := @i + 1 as seq
     from
       information_schema.tables
       , (select @i := 0) as dummy
     where
       @i < 5) as seq_t
where
  t1.num >= seq_t.seq order by t1.id, seq_t.seq;
```

# なんでそうなるの？

## 連番作成

```sql
select
  @i := @i + 1 as seq
from
  information_schema.tables
  , (select @i := 0) as dummy
where
  @i < 5;
```

この、サブクエリの部分の SQL の結果は

| seq |
|:--:|
| 1  |
| 2  |
| 3  |
| 4  |
| 5  |

こうなります。

### 解説

`(select @i := 0) as dummy` で開始値、を設定し、` @i := @i + 1` で一行ごとにインクリメントさせて表示しているだけです。とはいえ、それだけ（`select @i := @i + 1 as num from (select @i := 0) as d;`）では一行しか拾ってこれませんので、適当なテーブルを join させて行数を稼ぎます。上記の例では `information_schema.tables` を使っていますが、必要な行数を持っていることが保証できるならどんなテーブルでもいいです。（慣例的には、必ず存在してある程度の行数が保証されるシステムテーブルを使うことが多いです。）
無条件で結合させると `information_schema.tables` の行数分の連番ができてしまいますので、where 句を付けて適当な長さで切っています。

## 増幅

サブクエリの部分が連番作成をまかなっていることがわかりました。

```sql
select
  t1.id
  , t1.name
  , seq_t.seq
from
  table1 as t1
  , (連番作成) as seq_t
where
  t1.num >= seq_t.seq order by t1.id, seq_t.seq;
```

要するに、こういうことです。

### 解説

ここまで来ればもう簡単ですね。

```sql
from
  table1 as t1
  , (連番作成) as seq_t
```

増幅させたいテーブルと、連番テーブルの直積をとって

| id | name | num | seq |
|---:|:-----|----:|----:|
| 1  | aaa  | 2 | 1 |
| 1  | aaa  | 2 | 2 |
| 1  | aaa  | 2 | 3 |
| 1  | aaa  | 2 | 4 |
| 1  | aaa  | 2 | 5 |
| 2  | bbb  | 3 | 1 |
| 2  | bbb  | 3 | 2 |
| 2  | bbb  | 3 | 3 |
| 2  | bbb  | 3 | 4 |
| 2  | bbb  | 3 | 5 |
| 3  | ccc  | 5 | 1 |
| 3  | ccc  | 5 | 2 |
| 3  | ccc  | 5 | 3 |
| 3  | ccc  | 5 | 4 |
| 3  | ccc  | 5 | 5 |
| 4  | ddd  | 1 | 1 |
| 4  | ddd  | 1 | 2 |
| 4  | ddd  | 1 | 3 |
| 4  | ddd  | 1 | 4 |
| 4  | ddd  | 1 | 5 |

そこから

```sql
where
  t1.num >= seq_t.seq
```

連番が num を超えない範囲のレコードのみを抽出すれば、無事要件を満たしました。めでたしめでたし。

# Oracle の場合

## Oracle の場合の連番作成

```sql
select rownum seq from all_catalog where rownum <= 5;
```

Oracle だと rownum があるのでわかりやすいですね。
ここでも、対象テーブルは適切な件数があるものなら何でもいいですが、やはり必ず存在してある程度の行数が保証されるシステムテーブルということで、慣例的に all_catalog が用いられることが多いようです。

# 注意点

直積を取るため、うっかりすると件数が爆発する可能性がありますので注意してください。
XamarinでAndroid Wearサンプルを動かしてみる その2


[前回](http://qiita.com/droibiter/items/33e0fa0fd62ced676d5f "前回")に引き続きAndroid WearのサンプルをXamarinで動かしてみます。
今回はサンプルの一つ *RecipeAssistant* をXamarin版に書き換えました。ソースコードは[GitHub](https://github.com/droibit/AndroidWearSamples.Xamarin "GitHub")にあります。

## RecipeAssistantとは
前回のサンプルはAndroid Wearの使い方を知るためのリファレンス的なアプリでした。
今回のRecipeAssistantはアプリになっているので、この中でAndroid Wearがどのように使われているを理解のために簡単にメモしていきます。

* Android端末側
![Recipe Assistant](http://cl.ly/image/0t1x2v163B27/download/%E5%90%8D%E7%A7%B0%E6%9C%AA%E8%A8%AD%E5%AE%9A.png)

* Android Wear側
![Recipie Assistant](http://cl.ly/image/3L2r2L2E1p1z/download/%E5%90%8D%E7%A7%B0%E6%9C%AA%E8%A8%AD%E5%AE%9A.jpg)

このアプリは上記の画像のようにアプリ側でレシピを選択し見ることができます。
そして、レシピの作成手順をAndroid Wearに飛ばせるようになっています。

# 実装部分
今回の肝はサンプル内の *RecipeSerivce* クラスになります。このサービスクラスがAndroid Wearを利用した通知を行っています。実装部分は次のようになっています（Recipieクラスに料理の種々の情報が格納されている）。

``` c#:RecipeService.cs
private void CreateNotification(Intent intent) {
	this.mRecipe = Recipe.FromBundle (intent.GetBundleExtra (Constants.EXTRA_RECIPE));
	var notificationPages = new List<Notification> ();

	int stepCount = mRecipe.RecipeSteps.Count;
	for (int i = 0; i < stepCount; ++i) {
		var recipeStep = mRecipe.RecipeSteps [i];
		// レシピのステップごとのページのスタイルを作成する
		var style = new NotificationCompat.BigTextStyle ();
		style.BigText (recipeStep.StepText);
		style.SetBigContentTitle (Resources.GetString (Resource.String.StepCount, i + 1, stepCount));
		style.SetSummaryText ("");

		// ページ用の通知を作成する
		var builder = new NotificationCompat.Builder (this)
								.SetStyle (style);
		notificationPages.Add (builder.Build ());
	}

	{
		var builder = new NotificationCompat.Builder(this);

		// レシピに画像がある場合は通知の背景用に設定する
		if (mRecipe.RecipeImage != null) {
			var recipeImage = Bitmap.CreateScaledBitmap(
				AssetUtils.LoadBitmapAsset(this, mRecipe.RecipeImage),
				Constants.NOTIFICATION_IMAGE_WIDTH, Constants.NOTIFICATION_IMAGE_HEIGHT, false);
			builder.SetLargeIcon(recipeImage);
		}
		builder.SetContentTitle(mRecipe.TitleText)
				.SetContentText(mRecipe.SummaryText)
				.SetSmallIcon(Resource.Drawable.NotificationRecipe);

		// WearableNotifications.Builderクラスを利用し、Android Wear用のページ通知を作成し、発行する
		var notification = new WearableNotifications.Builder(builder)
				.AddPages(notificationPages)
				.Build();
		mNotificationManager.Notify(Constants.NOTIFICATION_ID, notification);
	}
}
```

RecipieAssistantアプリではページ型の通知を出しています。ページを作成するために、複数のNotificationを作成しているような形になっています。
このサンプルのAndroid Wearを利用している部分は上記のメソッド1つのみになります。
[Groovy]メソッドをクロージャに変換する

#概要
Groovyでは、インスタンスメソッドをクロージャに変換する機能があります。
方法は簡単で、 **".&"** という特殊な記号を使います。
例えば、hogeというオブジェクトのpiyoというメソッドをクロージャに変換するには以下のようにします。
`def clos = hoge.&piyo`
メソッドのpiyoにカッコ()は必要ありません。
これでpiyoメソッドがクロージャに変換されて、clos変数に格納されます。
ちなみに、clos変数の型（メソッドをクロージャに変換した結果の型）厳密に言うとClosure型ではなくて、[MethodClosure](http://groovy.codehaus.org/api/org/codehaus/groovy/runtime/MethodClosure.html)型になります。
MethodClosureクラスはClosureクラスを継承しているので、Closureとして振る舞えます。

MethodClosureオブジェクト（今回の場合clos変数）は、元のhogeオブジェクトの参照を持っているので、hogeオブジェクトのプロパティを変更すれば、closの実行結果も変化させることができます。

# 使い方
ソースを見るのが手っ取り早い

```groovy
class Test {
    def str = "string"
    def num = 1
    def hoge(){
        println "execute hoge()"
        "${str} from hoge method"
    }

    def piyo(Integer i) {
        println "execute piyo()"
        num + i
    }
}

// インスタンスの生成
def obj = new Test()

// インスタンスのメソッドをクロージャに変換
def clos = obj.&hoge
assert clos() == "string from hoge method"

// objインスタンスへの参照を持っているので、objのプロパティを変更すればすでにクロージャに変換しているものの実行結果も変化する。
obj.str = "change"
assert clos() == "change from hoge method"


// 引数が必要なメソッドをクロージャに変換。やり方は一緒。
def clos2 = obj.&piyo

// 実行時に引数を渡してあげればOK
assert clos2(100) == 101
```
#使い所
[GrailsのInterception](http://grails.jp/doc/latest/guide/single.html#interceptors)で利用するので、確かにあれば便利な機能だな、というのは解る。
けど自分で使うシチュエーションは思い浮かばない。。。
Rubyで前処理。Pixivのタグ検索結果から作品ID別タグリストを作る

#概要
Pixivタグ検索APIの結果をDBに格納する事を考える。
第一正規化の為に、
Pixivタグ検索結果（A）から作品ID別タグリスト（B）を出力するRubyコードを書いた。

（A）
00000001,……,X Y Z
00000002,……,X
00000003,……,Y Z

（B）
00000001,X
00000001,Y 
00000001,Z
00000002,X
00000003,Y
00000003,Z

#データ
[-> Pixiv検索結果をCSVダウンロードするHTMLファイルを用意した](http://qiita.com/nezuq/items/55800d55c03606e0b13c)

#コード
```ruby:pxcsv2taglist.rb
# coding: UTF-8

require 'csv'

CSV.open("OUTPUT.csv", "wb") do |csv|
	CSV.foreach('INPUT.csv', encoding: "UTF-8") do |row|
		row[13].split(' ').each do |item|
			csv << [row[0], item]
		end
	end
end

puts 'end!'
```
#出力イメージ
```csv:OUTPUT.csv
00000001,龍田
00000001,天龍
00000001,艦隊これくしょん
00000001,艦これ
00000001,百合
```

#テーブル生成用SQL(SQLite)

```sql:CreateIllusttagTable.sql
CREATE TABLE illust_tag(illust_id TEXT, tag TEXT,PRIMARY KEY(illust_id, tag));
```
#関連ページ
[Pixivイラスト検索APIの取得結果のデータ構造を調べる](http://qiita.com/nezuq/items/e4c55bb9c68bf5785e73)
maven plugin で一部の package だけを対象にする

compiler, sources は includes だが javadoc プラグインは sourceFileIncludes だったりする。

```xml
<plugins>
   <plugin>
       <groupId>org.apache.maven.plugins</groupId>
       <artifactId>maven-compiler-plugin</artifactId>
       <configuration>
           <includes>
               <include>com/example/api/common/**</include>
               <include>com/example/api/client/**</include>
           </includes>
       </configuration>
   </plugin>
   <plugin>
       <groupId>org.apache.maven.plugins</groupId>
       <artifactId>maven-source-plugin</artifactId>
       <configuration>
           <includes>
               <include>com/example/api/common/**</include>
               <include>com/example/api/client/**</include>
           </includes>
       </configuration>
   </plugin>
   <plugin>
       <groupId>org.apache.maven.plugins</groupId>
       <artifactId>maven-javadoc-plugin</artifactId>
       <configuration>
           <sourceFileIncludes>
               <include>com/example/api/common/**</include>
               <include>com/example/api/client/**</include>
           </sourceFileIncludes>
       </configuration>
   </plugin>
</plugins>
```
Javassistを使ってJavaのfinalクラスの拡張は・・・

できなかった。
Stringクラスの拡張をしたかった。

```ExtendSample.java
package javassist.test;

import javassist.ClassPool;
import javassist.CtClass;

public class ExtendSample {
	public static void main(String[] args) throws Exception{
		ClassPool pool = ClassPool.getDefault();
		CtClass cc = pool.makeClass("dynamic.clazz.Sample");
		cc.setSuperclass(pool.get("java.lang.String"));
		Class<?> clazz = cc.toClass();
		Object obj = clazz.newInstance();
	}
}
```

```
Exception in thread "main" javassist.CannotCompileException: by java.lang.VerifyError: Cannot inherit from final class
	at javassist.ClassPool.toClass(ClassPool.java:1099)
	at javassist.ClassPool.toClass(ClassPool.java:1042)
	at javassist.ClassPool.toClass(ClassPool.java:1000)
	at javassist.CtClass.toClass(CtClass.java:1224)
	at javassist.test.ExtendSample.main(ExtendSample.java:11)
Caused by: java.lang.VerifyError: Cannot inherit from final class
	at java.lang.ClassLoader.defineClass1(Native Method)
	at java.lang.ClassLoader.defineClassCond(Unknown Source)
	at java.lang.ClassLoader.defineClass(Unknown Source)
	at java.lang.ClassLoader.defineClass(Unknown Source)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at javassist.ClassPool.toClass2(ClassPool.java:1112)
	at javassist.ClassPool.toClass(ClassPool.java:1093)
	... 4 more
```
Silex + iframeファイルアップロード

- 通常、Silexでは```$_FILES```ではなく```$request->files```経由でアップロードされたファイルの情報にアクセスする。
- iframeを利用して非同期にファイルをアップロードした場合、Silexは```$request->files```にファイルをセットしてくれない
- 以下のように自力でファイルをセットしてあげると、```$_FILES```を利用しなくてすむ

```php
$app = new Silex\Application();

$app->before(function (Symfony\Component\HttpFoundation\Request $request) {
    // ヘッダをもとに非同期のファイルアップロードかどうかを判断する
    // 以下はjquery.iframe-transportを利用している場合の例
    if ($request->get('X-Requested-With') === 'IFrame') {
        $request->files->replace($_FILES);
    }
});

$app->post('/file/', function (Silex\Application $app) {
    $app['request']->files->get('file'); // Symfony/Component/HttpFoundation/File/UploadedFile
});

$app->run();
```
Pythonからredmineのissue登録する

python-redmineを使えばいい

以下のscriptで使っているライブラリは

 * python-redmine
 * pit

<pre>
#! /usr/bin/env python
#-*- coding: utf-8 -*-                                                                                                                                
from pit import Pit
from redmine import Redmine # needs python-redmine (execute the command "pip instsall python-redmine")                                                

def main():
    conf = Pit.get('redmine',
                   {'require': {'url': '',
                                'username': '',
                                'password': '',
                                }})
    url = conf['url']
    username = conf['username']
    password = conf['password']

    redmine = Redmine(url, username=username, password=password)

    issue = redmine.issue.new()
    issue.project_id = 'project'
    issue.subject = u'テスト'
    issue.tracker_id = 12 # トラッカー                                                                                                      
    issue.description = u'テスト'
    issue.status_id = 1 # ステータス
    issue.assigned_to_id = 51 # 担当者 
    issue.save()

if __name__ == '__main__':
    main()
</pre>
[tmlib.js]シーンまわりでよく使うイベント

# `tmlib.js`の、シーン周りでよく使うイベント

備忘録としてまとめておきます。

```js
tm.define("HogeScene", {
    superClass: "tm.app.Scene",

    init: function(){
        this.superInit();
    },

    /** クラス生成・破棄まわり **/
    onenter: function(){/*このシーンがappにreplaceScene(or pushScene)されたときに呼ばれる*/},
    onexit: function(){/*他のシーンにreplaceSceneしたとき(or 自分自身をpopScene)に呼ばれる*/},
    onresume: function(){/*pushしたシーンがpopSceneを実行し、このシーンに戻ってきたときに呼ばれる*/},
    onpause: function() {/*自分の上にシーンがpushSceneされたときに呼ばれる*/},

    /** pointingまわり **/
    onpointingstart: function(){ /*タッチ開始時*/ },
    onpointingmove: function(){  /*タッチし続ける間、ずっと呼ばれ続ける*/ },
    onpointingend: function(){   /*タッチ終了時*/ },

    /** updateまわり **/
    onenterframe: function(){ /*this.update関数が呼ばれる前に、毎フレーム呼ばれる*/ },
});
```

以下のように書くこともできます。

```js
tm.define("HogeScene", {
    superClass: "tm.app.Scene",

    init: function(){
        this.superInit();

        // onを省いて、以下のように書くこともできる
        this.on("enter", function(){});
        this.on("exit", function(){});
        this.on("resume", function(){});
        this.on("pause", function(){});

        this.on("pointingstart", function(){});
        this.on("pointingmove", function(){});
        this.on("pointingend", function(){});

        this.on("enterframe", function(){});
    },
});
```

違いは
 - `on`関数を使うと複数のイベントを登録することができること。
 - `onenter`とかで書くと、下記のように途中で書き換えることができること。

```js
tm.define("HogeScene", {
    superClass: "tm.app.Scene",

    init: function(){
        this.superInit();
        this.counter = 0;
    },

    onenterframe: function(){
        ++this.counter;
        console.log(this.counter);

        // 一度実行したら書き換える
        this.onenterframe = function(){};
    },
});

tm.define("Hoge2Scene", {
    superClass: "tm.app.Scene",

    init: function(){
        this.superInit();
        this.counter = 0;
        var self = this;
        // たくさん登録できる
        this.on("pointingstart", function(){ console.log(++self.counter); });
        this.on("pointingstart", function(){ console.log(++self.counter); });
        this.on("pointingstart", function(){ console.log(++self.counter); });
        this.on("pointingstart", function(){ console.log(++self.counter); });
    },
});
```

お試しあれ！
Clojureでwrite-lines関数を作ってみる

Clojureでシーケンスをファイルに書き出すwrite-lines関数を作ってみます。
なお、clojure.contribにも似たようなものはありますが、オプションすら指定できないのであまり役に立たちません。

```write-lines.clj
(def line-separator (System/getProperty "line.separator"))

(defn write-lines
  [f lines & {:keys [separator add-bom]
              :or {separator line-separator add-bom false} :as opts}]
  (with-open [^java.io.Writer w (apply clojure.java.io/writer f (apply concat opts))]
    (when add-bom (.write w "\ufeff"))
    (doseq [line lines] (.write w (str line separator)))))
```

たまにBOM（Byte Order Mark）が必要なときがあるのでオプションで指定できるようにしてみました。
こんな感じで使えます。

```clj
(write-lines "sample.txt" ["あいう"] :encoding "Windows-31J")
(write-lines "sample2.txt" (range 10) :add-bom true :separator "x")
```

:encodingは指定しないときはUTF-8が用いられます。
これはclojure.java.ioのreader, writerのデフォルト動作がそうであるためです。
WordPressの引っ越し方法3種

引っ越し方法が色々あるっぽいのでメモ。

#WPの機能をつかってエクスポート→インポート
http://seotech.jp/146
※基本機能だけで超かんたん。ただし、いろいろ拾えないデータがある。


#データベースバックアッププラグインをつかってバックアップを作成→新しいところに展開してバックアップから復元
http://plus1world.com/wp-db-backup
※プラグインが必要で結構簡単


#phpMyAdminでデータベースをまるっとエクスポートして新しいところにそれをインポート
http://yokotakenji.me/log/?p=2027
※一番面倒。でも私でもできます。
レスポンシブなウェブサイト&iframe（youtubeの埋め込み）(ドットインストール)

レスポンシブweb デザイン
-PC/Tablet/Smartphone向けのサイトを一つのhtmlを実現


#スタイルの振り分け

スマホ　320px - 480px
タブレット　480px - 768px
PC 768px 以上

#ポイント
●@media all and (min-width: px)
　<meta name=“viewport” content=“width=device-width, initial=1.0”>を利用してデバイスで振り分け

●基本％で指定

●display:none; でデバイスごとに要素を変える


#cssの例


```
/*共通の設定*/
body{
     font-family:Arial, Verdana, san-serif;
     width:95%;
     margin:0 auto;
}

/*スマホのスタイル*/
#headerNav{
     display:none;
}

/*タブレットのスタイル*/
@media all and (min-width: 480px){
     #footerNavLink{
          display:none;
     }

     #headerNav{
          display:block;
     }

     #footerNav{
          display:block;
     }
}
/*PCのスタイル*/
@media all and (min-width: 480px){
     #container{
          overflow:hidden;
     }

     #main{
          float:left;
          width:78%;
     }

     #sub{
          float:right;
          width:20%;
     }
}

```

#スマホのViewport

この設定によって、仮想的に 幅980px(iphone)として表示されるスマホの画面をスマホの画面サイズとして表示させる


```
<head>
<meta name=“viewport” content=“width=device-width, initial=1.0”>
</head>
```

#iframeの埋め込み

```
<div style=“width: 75%; margin:  0 auto;”>
<div class=“movie”>
<iframe src=“http://www.youtube.com/embed/XvannIjPtQ” frameborder=“0”></iframe>
</div>
</div>

/* css　以下、ハック的手法*/

.movie{
     position: relative;
     height:0;
     padding-top:56.25%; /*16:9*/
     }

iframe{
     height:100%;
     position:absolute;
     left:0;
     top:0;
     width:100%;
     }
```
iPhoneアプリの簡単説明動画の作り方


1.デスクトップを綺麗にする
2.iOSシミュレーターを起動する
3.QuickTimeを起動する
4.iMovieなどで、良い感じにする

##デスクトップを綺麗にする
画面収録で動画を制作するのでデスクトップを綺麗にしておくと良いです。　

##iOSシミュレーターを起動する
iOSシミュレーターはXcodeをインストールするとついてくる機能です。
Xcodeを起動してメニューバーのXcodeをクリック
Open Developer Toolの中にiOS Simulatorがあるので起動する。
iPhoneを日本語化したい場合
通常のiPhoneと同様にSettingからGeneral＞International＞Language＞日本語
を選択
あとは通常通りiPhoneを操作する。  
収録に失敗しないように、何度か通しで操作してみる。

##QuickTime Playerを起動する
メニューバーのファイルから新規画面収録を選ぶ。
画面の説明に従って操作すると録画が開始される。
収録した動画を保存して、動画素材を作る。

##iMovieなどで、良い感じにする
動画編集ツールで収録して出来た動画素材を使って良い感じにする。

[作ってみた動画](https://www.youtube.com/watch?v=HRlNhcGUdn4 "5374の使い方")
Jenkinsお気に入りプラグイン


メモです（よく入れ忘れるので）。


# [Copy project link plugin](https://wiki.jenkins-ci.org/display/JENKINS/Copy+project+link+plugin)

プロジェクトを複製（clone）するプラグイン。
少し違う複数のプロジェクトが必要、なんてときに簡単に複製できる。


# [Shelve project plugin](http://wiki.jenkins-ci.org/display/JENKINS/Shelve+Project+Plugin)

プロジェクトを隠すことができる。
もう不要だけど削除するにはもったいない秘伝のレシピを寝かせるのに最適。


# [Locks and latches plugin](http://wiki.hudson-ci.org/display/HUDSON/Locks+and+Latches+plugin)

Jenkinsプロジェクトにロック機構を追加するプラグイン。
**AプロジェクトとBプロジェクトは同時に動いてはいけない** 場合などに、同時に動作しないように制御できる。


# [Job Config History](https://wiki.jenkins-ci.org/display/JENKINS/JobConfigHistory+Plugin)

プロジェクト設定の更新履歴を保持してくれる。
もちろん、差分も確認出来る。


# [Dependency viewer](https://wiki.jenkins-ci.org/display/JENKINS/Dependency+Graph+View+Plugin)

Jenkinsプロジェクトの依存関係を視覚化してくれる。[Graphviz](http://www.graphviz.org/)が必要。


# [SiteMonitor](https://wiki.jenkins-ci.org/display/JENKINS/SiteMonitor+Plugin)

特定のURLを叩いてステータスを確認してくれる。
デプロイ後にサイトが正常動作しているか確認する場合などに使える。

----

参考

* [Jenkinsに入れているプラグインまとめ（Rails中心）](http://sue445.hatenablog.com/entry/2014/01/08/225128)

Embeddable build status plugin, Throttle Concurrent Builds Pluginあたりが気になる。
phpで特殊文字をエンコード＆デコード

まとめて対象にしたいときは
`htmlentities/html_entity_decode`

特定の特殊文字だけを対象にしたいときは
`htmlspecialchars/htmlspecialchars_decode`

http://atamoco.boy.jp/php5/20110425_1.php

>上記２つの関数の違いは、htmlentities がエンコード可能なものはすべてエンコードするが、 htmlspecialchars は、不等号（<>）、アンパサンド（&）、シングルコーテーション（'）、ダブルコーテーション（"） のみをエンコードすることである。 htmlentities では コピーライト文字もエンコードされているが、htmlspecialchars ではコピーライト(©)の変換は 行われていないことがわかる。

smartyテンプレートで画面に出力している場合は、更に
`smarty:nodefaults`
を噛ませる必要があることに注意。
if文内で">"を使うと恐ろしいことが

すごくあふぉなことをしたので、自戒を込めて投稿します。

3つの引数（整数）を数値の小さい順に並べ替える、という課題です。

	# 間違い！
	#!/bin/bash
	n1=${1:?}
	n2=${2:?}
	n3=${3:?}
	if [ $n1 > $n2 ];then
		tmp=$n1
		n1=$n2
		n2=$tmp
	fi
	if [ $n2 > $n3 ];then
		tmp=$n2
		n2=$n3
		n3=$tmp
	fi
	if [ $n1 > $n2 ];then
		tmp=$n1
		n1=$n2
		n2=$tmp
	fi
	echo $n1 $n2 $n3

シェルスクリプトのtestコマンドに、```>``` というのは指定できません。
このコードを実行すると、2つ目と3つ目に指定した名前のファイルができて、if 文はすべて true になります。
つまり、```>``` はリダイレクトの記号として解釈されるようです。
なぜ ```test 1``` や ```test 0``` がtrue になるのかはよくわかりませんでした。

正しくは、こう。

	# 正しい
	#!/bin/bash
	n1=${1:?}
	n2=${2:?}
	n3=${3:?}
	if [ $n1 -gt $n2 ];then
		tmp=$n1
		n1=$n2
		n2=$tmp
	fi
	if [ $n2 -gt $n3 ];then
		tmp=$n2
		n2=$n3
		n3=$tmp
	fi
	if [ $n1 -gt $n2 ];then
		tmp=$n1
		n1=$n2
		n2=$tmp
	fi
	echo $n1 $n2 $n3

```-gt``` (is greater than: > )を指定します。

以上です。
論文紹介：直積HMMと、ポリフォニックMIDIスコア・フォローイング

予め用意した楽譜データと、リアルタイムの音楽演奏データをマッチングする技術を「スコア・フォローイング」というらしい。
自動伴奏等への応用を目指した技術である。

この論文では、直積HMM（隠れマルコフモデル）という手法で、和音演奏を含む演奏データをリアルタイムでフォローしようとするものらしい。

"Outer-Product Hidden Markov Model and Polyphonic MIDI Score Following"

http://arxiv.org/pdf/1404.2313v1.pdf

面白い
getoptsの使い方メモ


- -fが来たら、フラグを立てる
- -d dataで、dataを受け取る
- -hが来たら、ヘルプを表示

するというシェルスクリプトの例

```bash:getopts.sh
#!/bin/bash




print_help(){
    echo "usage: $0 [-f] [-d data]"
}




flag=""
while getopts fd:h opt; do
    case ${opt} in
	f ) flag="TRUE" ;;
	d ) data=${OPTARG} ;;
	h ) print_help ; exit 0 ;;
    esac
done




if [ "$flag" = "TRUE" ]; then
    echo flag is true
else
    echo flag is false
fi
echo data is $data
```
Gitでファイル名&ディレクトリ名の大文字/小文字を変更方法

Gitでディレクトリ名を小文字から大文字に変更した際に差分に認識されなかった。
また同条件が発生しそうなのでメモ。

ファイル名

```
# git mv -f main.cpp Main.cpp
```

ディレクトリ名
-f では駄目だったの一度別名に変更してから変更する
（何か他にいい方法ないのか・・・）

```
# git mv main _main
# git commit .
# git mv _main Main
# git commit .
```
Angularのコントローラ間通信

AngularでコントローラAからBのメソッドをたたく方法。

```js:xxxx
//コントローラA側
 cotrollerA =  function($scope,$rootScope)
{
    $rootScope.$broadcast('hogehoge');
}

//コントローラB
controllerB = function($scope,$rootScope)
{
    //ブロードキャストを受け取る
  $scope.$on('hogehoge',function(event,data)
  {
     //もちろん$scopeにアクセス可能
  });
}
```