OmniAICreator/Qiita-1.07M huggingface dataset:
ひたすら文字列のスクロール

文字列をスクロールさせて表示させたくって
ちょっと試しに作ってみた

ŧ‹”ŧ‹”ŧ‹”ŧ‹”(๑´ㅂ`๑)ŧ‹”ŧ‹”ŧ‹”ŧ‹”

ŧ‹”ŧ‹”ŧ‹”ŧ‹”(๑´ㅂ`๑)ŧ‹”ŧ‹”ŧ‹”ŧ‹”

ŧ‹”ŧ‹”ŧ‹”ŧ‹”(๑´ㅂ`๑)ŧ‹”ŧ‹”ŧ‹”ŧ‹”

・・・イマイチ◝(๑⁺д⁺๑)◞՞

# ソースコード
```scala:Main.scala
import frame.TFrame

/**
 * Created by FScoward on 2014/11/20.
 */
object Main {
  
  def main(args: Array[String]): Unit = {
    val frame = new TFrame
  }

}
```

```scala:Tweet.scala
package frame

import java.awt.{Font, Graphics}

/**
 * Created by FScoward on 2014/11/30.
 */
class Tweet(str: String, var x: Int, y: Int) {

  def move() = {
    x -= 3
  }

  def draw(g: Graphics) = {
    if (x > - str.length * 24) {
      val font = new Font("Arial", Font.PLAIN, 24)
      g.setFont(font)
      g.drawString(str, x, y)
    }
  }

}
```

```scala:TFrame.scala
package frame

import java.awt.Graphics
import javax.swing.{JPanel, UIManager, JFrame}

import scala.collection.mutable.ListBuffer

/**
 * Created by FScoward on 2014/11/20.
 */
class TFrame extends JFrame {
  private[this] final val rectangle = getGraphicsConfiguration.getBounds

  UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName)
  setTitle("Hide and Seek")
  setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
  setBounds(0, (rectangle.getMaxY - 20).toInt, (rectangle.getMaxX).toInt, 20)
  setUndecorated(true)
  setOpacity(0.4f)
//    setBackground(new Color(0, 0, 0, 0))

  setContentPane(new TPanel(rectangle.getMaxX.toInt))

  setVisible(true)
}

class TPanel(width: Int) extends JPanel with Runnable {
  // ダブルバッファリング
  setDoubleBuffered(true)

  var initPos = width
  val lb = new ListBuffer[Tweet]
  
  def run = {
    while(true) {
      val text = "test"
      val t =  new Tweet(text + initPos, initPos, 20)
      lb += t
      lb.foreach(_.move())
      revalidate()
      repaint()
      initPos += 50 + text.length * 20
      Thread.sleep(10)
    }
  }
  
  override def paintComponent(g: Graphics): Unit = {
    super.paintComponent(g)
    lb.foreach(_.draw(g))
  }

  new Thread(this).start()
}
```
YAMLを始める

# YAML
* テキストデータの構造管理を簡単な記述で実現する
* マークアップランゲージではない

## 参考
* [ドットインストール](http://dotinstall.com/lessons/basic_yaml/29001)
    * 基本的にドットインストールの写経です

## 環境準備とお試し
* vagrantでCentOS6.5の仮想環境を準備
* 仮想環境内にはrubyの2.1系をインストール済み
* 以下のディレクトリで作業する
    * `/home/vagrant/yaml_lesson`
* ファイル作成

```aaa:コマンド
touch mydata.yml
touch parse.rb
```

* YAMLファイルを編集

```yaml:mydata.yml
- d1
- d2
- d3
```

* Rubyファイルを編集

```rb:parse.rb
require 'yaml'
d = YAML.load_file('mydata.yml')
p d
```

* Rubyファイルを実行

```aaa:コマンド
ruby parse.rb
```

```shell-session:出力
["d1", "d2", "d3"]
```

## シーケンスを扱ってみる

* Rubyで言うところの配列（上記でやったやつ）
* mydata.ymlを編集

```yaml:mydata.yml
# ハイフン＋スペースの後にデータを記述
# インデントでデータのネストも可能
- d1
-
 - x1
 - x2
- d3
```

* Rubyファイルを実行

```rb:コマンド
ruby parse.rb
```

```rb:出力
["d1", ["x1", "x2"], "d3"]
```
* インデント時はtabは使えないので注意


## マッピングを使ってみる

* Rubyで言うところのハッシュ
* keyとvalueをペアで管理する
* mydata.ymlを編集

```yaml:mydata.yml
name: taro
address: japan
```

* Rubyファイルを実行

```rb:コマンド
ruby parse.rb
```

```rb:出力
{"name"=>"taro", "address"=>"japan"}
```
* コロンの後はスペース必須なので注意
* こっちもシーケンスと同じでネスト可能

```yaml:mydata.yml
name: taro
address:
  main: japan
  sub : UK
```

## ブロックスタイルとフロースタイル

* 上記までのは「ブロックスタイル」
* 「フロースタイル」をやってみる
    * シーケンスは `[hoge, fuga]` といった形で記述
    * マッピングは `{key: value}` といった形で記述

```yaml:mydata.yml
[d1, d2, {key: val}, {key2: val2}]
```

* Rubyファイルを実行

```rb:コマンド
ruby parse.rb
```

```rb:出力
["d1", "d2", {"key"=>"val"}, {"key2"=>"val"}]
```

## データ型の解釈
* 基本はオート

```yaml:mydata.yml
str: hoge
num: 1
num2: 2.2
bool: true
bool2: false
nothing: null
```
```rb:出力
{"str"=>"hoge", "num"=>1, "num2"=>2.2, "bool"=>true, "bool2"=>false, "nothing"=>nil}
```

* "true"とかダブルクォーテーションで囲めば文字として認識される


## 改行データをあつかう

* ` | ` を使う
* ラスイチの改行だけを生かす場合は ` > ` を使う

```yaml:mydata.yml
d1:
 aaa
 bbb
 ccc
d2: |
 aaa
 bbb
 ccc

d3: >
 ddd
 eee
 fff

```
```rb:出力
{"d1"=>"aaa bbb ccc", "d2"=>"aaa\nbbb\nccc\n", "d3"=>"ddd eee fff\n"}
```

## ...と---

* ` ... ` は解釈の終了を意味する
* ` --- ` は区切りを意味する

```yaml:mydata.yml
---
[d1,d2,d3]
---
[d4,d5,d6]
...
---
[d7,d8,d9]
```

```rb:parse.rb
require 'yaml'

File.open('mydata.yml') do |io|
  YAML.load_documents(io) do |d|
    p d
  end
end
```

```rb:出力
["d1", "d2", "d3"]
["d4", "d5", "d6"]
["d7", "d8", "d9"]
```
` ...` が効かなかったっぽい



```yaml:mydata.yml
- d4
- d5
...
- d6
```

エラー

* parse.rb を戻せば正常に動作した

```rb:出力
["d4", "d5"]
```
* 元のrubyソースはファイル単位で読み込む際に...をただしく解釈したということか
css Animation


        .on{-webkit-animation: move 2s linear;}

  @-webkit-keyframes move{
            0%{
                -webkit-transform:translate(0px,0);
            }
            100%{
                -webkit-transform:translate(200px,0);
            }
        }


0%から100%になるが、変化させたいプロパティを一括指定
-webkit-transition-property: -webkit-transform,width,border-radius,margin;
【さくらVPS】バーチャルホストに設定した独自ドメインに対するメールを別のメアドに転送できるようにする

#概要
さくらVPSにバーチャルホストに設定した独自ドメイン宛てのメールを別のメールアドレスに転送する方法のメモ。

#事の発端
StartSSLでマルチドメインに対するSSL証明書を取ろうとしたら確認の為にドメイン宛てにメールを送る事に。だけどメールの設定なんてしてない！！
独自ドメインに対するメールを受け取れるようにするサービスは昔googleやOutlook(Micro soft)でやっていたがgoogleは廃止されOutlookは機能を上位版に移譲。無料では使えなくなった。
無料のものは現状ないっぽいしもう自分で設定した方が良いのではといった感じ。

#流れ
* DNSを設定
* postfixにメールの受信設定と転送設定を追加
* 転送するメールアドレスを登録
* ポート25を開く
* メールサーバの第三者中継の可能性をチェック

#DNSを設定
https://secure.sakura.ad.jp/menu/domain/
からドメイン設定を確認できる。VPSのバーチャルホスト設定してるなら独自ドメイン追加時に設定してるはず。
んでここのゾーン編集を開く。

左側の編集でゾーンを編集。

MXレコードを次のように追加

```lang:MXレコード追加設定
エントリ名：@
種別：MX
値：10 ドメイン名.
```

値のドメイン名の最後には必ずドットが入る事に注意。

続いてTXTレコードを次のように追加。

```lang:TXTレコード追加設定
エントリ名：@
種別：TXT
値：@ v=spf1 mx ~all
```

#postfixにメールの受信設定と転送設定を追加
/etc/postfix/main.cf
を次のように編集。

```lang:/etc/postfix/main.cf
inet_interfaces = all
inet_protocols = ipv4
mynetworks_style = host　←ここは初めからhostだと思う
```

更に一番最後の行に次を追加
ドメイン名のところはバーチャルホストに登録したドメイン名と同じにする。

```lang:/etc/postfix/main.cf
smtp_banner = $myhostname ESMTP unknown
virtual_alias_domains = ドメイン名
virtual_alias_maps = hash:/etc/postfix/virtual
```

#転送するメールアドレスを登録
/etc/postfix/virtual
の一番最後の行に次を追加する。

```lang:/etc/postfix/virtual
ドメイン名 anything
転送したいメアド@ドメイン名 転送先のメアド
```

例としてはこんな感じ。
仮にドメイン名が hoge.org だとして aaa@hoge.org というメアドに送信されたメールを gmail に転送したいとする。

```lang:/etc/postfix/virtual
hoge.org anything
aaa@hoge.org oreno_mail@gmail.com
```

尚この転送設定いくらでも増やせる。

```lang:/etc/postfix/virtual
hoge.org anything
aaa@hoge.org oreno_mail@gmail.com

hoge.org anything
bbb@hoge.org oreno_mail@gmail.com

hoge.org anything
ccc@hoge.org oreno_mail@gmail.com

hoge.org anything
ddd@hoge.org oreno_mail@gmail.com
```

最後にDB更新して再起動する。

```bash
$sudo postmap /etc/postfix/virtual
$sudo service postfix restart
```


#ポート25を開く
/etc/sysconfig/iptables
に追加する。以下追加例。適切じゃないかもしれないけど。

```lang:/etc/postfix/virtual
-A INPUT -m state --state NEW -m tcp -p tcp --dport 25 -j ACCEPT
```

んでファイアウオール再起動。

```bash
$sudo service iptables restart
$sudo iptables -L
```
#メールサーバの第三者中継の可能性をチェック
http://www.rbl.jp/svcheck.php

#動作確認
メール送信して転送されたらＯＫ！

#最後に
このメモ通りにメールの送信設定をするのは構わないけどスパムの踏み台になる危険性とかあるので自己責任でお願いします。
AutoLayoutで画面の大きさに比例してViewの大きさを変えたい

例えばデバイスの幅が1000pxだった時、Viewの幅は500px（50%）にしたい、という場合です。

AutoLayoutを始めて「これくらい当然できるでしょふふーん」と思っていじってみたけど、全然出来る気配がなくて、結局泣きながらコードと併用して対応したというお話です。

って、実はStoryboardエディタだけでできるのでしたら教えてください。

＝＝＝＝＝
追記
2014/11/30 3:56 できました

Multiplierを使います。（いままでお試しでしか使ってなくて忘れていた・・・）

親をSuperviewとかにして、一度EqualWidthをつけたあと、Multiplierに0.5と入れると50%になります。こんな感じです。

![スクリーンショット 2014-11-30 3.55.34.png](https://qiita-image-store.s3.amazonaws.com/0/19676/f5eebeb9-adc6-1af3-08cd-68aeea7100cc.png)


まあ、ConstraintをIBOutletで引っ張って云々できる、というのは知っていて損がないので、それはそれ、これはこれで！

＝＝＝＝＝

結論からいうと単純ですが、Height EqualやWidth EqualのConstraintをIBOutletでつないで、その値をいじってしまえ、ということです。

例えばこういうStoryboardがあって
![スクリーンショット 2014-11-30 2.11.31.png](https://qiita-image-store.s3.amazonaws.com/0/19676/6f19040e-e9cd-2b21-6daf-b29a882583c4.png)

こういう風につないで
![スクリーンショット 2014-11-30 2.16.31.png](https://qiita-image-store.s3.amazonaws.com/0/19676/baa2dccf-b0be-2cb7-aaec-4323f6964f55.png)
（わかりづらいですが、HeightとWidthをつないでます）

こういうコードを書くと
![スクリーンショット 2014-11-30 2.16.42.png](https://qiita-image-store.s3.amazonaws.com/0/19676/c4e0db0c-ab2a-c62d-324a-39a7c04025aa.png)

4sだとこうなって
![スクリーンショット 2014-11-30 2.21.47.png](https://qiita-image-store.s3.amazonaws.com/0/19676/9f68102c-512b-58fb-a53d-8475eab307c8.png)

5sだとこうなって
![スクリーンショット 2014-11-30 2.21.59.png](https://qiita-image-store.s3.amazonaws.com/0/19676/98c92766-8c0a-7e03-a4a4-c62a9182fa9f.png)

6plusだとこうなります
![スクリーンショット 2014-11-30 2.35.05.png](https://qiita-image-store.s3.amazonaws.com/0/19676/e8e4d7a7-fc56-febd-cca6-68bb8907426c.png)

ステータスバーやナビゲーションバーの分ずらしたりはお好みに応じてどうぞ。
herokuでmatplotlibでSVGなグラフを作る（日本語表示）

# はじめに
日本語の入らないグラフ作成は[過去記事](http://qiita.com/kounoike/items/7a73ed7417289edb8be7)参照のこと

# 日本語フォントの準備
適当な日本語フォントファイルを準備して、gitに追加する。Googleの[Noto](http://googledevjp.blogspot.jp/2014/07/noto.html)とか。
```shell-session
$ cd qiita-sin
$ mkdir fonts
$ cp .../NotoSansCJKjp-Medium.otf fonts/
```

# アプリの修正
```py:app.py
#!/bin/env python
# coding: utf-8

import os
import StringIO

from flask import Flask, render_template
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties
import numpy as np

fontprop = FontProperties(fname='./fonts/NotoSansCJKjp-Medium.otf', size=10)

app = Flask(__name__)
app.debug = True

@app.route('/')
def do_sin():
    x = np.arange(-np.pi, np.pi, 0.1)
    y = np.sin(x)

    fig, ax = plt.subplots(1)
    plt.plot(x, y, label="sin")
    plt.legend(loc="best")

    strio = StringIO.StringIO()
    fig.savefig(strio, format="svg")
    plt.close(fig)

    strio.seek(0)
    svgstr = strio.buf[strio.buf.find("<svg"):]

    return render_template("sin.html", svgstr=svgstr.decode("utf-8"))

@app.route('/sin-jp')
def do_sin_jp():
    x = np.arange(-np.pi, np.pi, 0.1)
    y = np.sin(x)

    fig, ax = plt.subplots(1)
    plt.plot(x, y, label=u"sinカーブ")
    plt.legend(loc="best", prop=fontprop)
    ax.set_title(u"テスト", font_properties=fontprop)
    ax.set_xlabel(u"x軸", font_properties=fontprop)
    ax.set_ylabel(u"y軸", font_properties=fontprop)

    strio = StringIO.StringIO()
    fig.savefig(strio, format="svg")
    plt.close(fig)

    strio.seek(0)
    svgstr = strio.buf[strio.buf.find("<svg"):]

    return render_template("sin.html", svgstr=svgstr.decode("utf-8"))

if __name__ == "__main__":
    port = int(os.environ.get("PORT", 5000))
    app.run(port=port)
```

出来上がったアプリは https://limitless-garden-3527.herokuapp.com/sin-jp 参照

# ポイント
フォントファイルを自前で用意して、fontpropを作っておくことと、描画の際にそのfontpropを指定すること
template引数にポインタ

全然知りませんでしたが、template引数に一部のポインタ(参照)が入れられるそうです。いまいち使い方は分かりません。

# おさらい

C++のtemplateと言えば普通こんな感じで何らかの型(type)が入ります。

```cpp
template<typename T> void hoge(T& t){ std::cout << t << std::endl; }
```

ちょっと詳しい人なら整数(integral or enumeration type)が入れられることも知っていると思います。階乗をコンパイル時に計算する例がいろんなところで紹介されています。

```cpp
template<int N> int intTpl(){ return N; }

typedef enum{
	FOO,
	BAR,
} FooBar;
template<FooBar fb> bool enumTpl(){ return fb == FOO; }
```

ちなみに脱線ですが、階乗などの"計算"のためにtemplateを使うのは可読性の面でやり過ぎという意見が最近では出始めています。コンパイル時に計算を済ます方法としてはC++11以降constexprが用意されていて、そちらの方が素直に書けます。特にC++14ならほぼ普通の(=実行時の)書き方と同じでコンパイル時計算を記述できるようです。

# ポインタをtemplate引数に

さて本題です。以下のように一部のポインタ(参照)をtemplate引数に与えることができます。"一部の"という条件は、簡単に言えば「コンパイル時にコードが生成できるもの=コンパイル時にアドレスが静的に決まるもの」となるようです。

```cpp
template<double* X> void dptr(){ std::cout << "value: " << *X << std::endl; }

double global_x = 0.3;

void test(){
	double local_x = 0.3;

	dptr<&global_x>();
//	dptr<&local_x>(); // error
}
```

ブロック内のポインタはコンパイル時点ではアドレスが決まらないのでtemplate関数の展開時にコード生成ができず、コンパイルエラーです。一方大域に出している変数はアドレスが決まるのでOKです。

ではこんなもの何に使うかというと、どうやら関数のセット。

```cpp
typedef void (*FuncA)(int i, int j);

template<FuncA F>
struct FuncTpl{
	static void call(int i, int j) { (*F)(i, j); }
};

void funcA(int i, int j){ std::cout << "funcA" << std::endl; }
void funcB(int i)       { std::cout << "funcB" << std::endl; }

void test(){
	FuncTpl<funcA>::call(2, 3);
//	FuncTpl<funcB>::call(2, 3); // error
}
```

あまりいい例が思いつかなかったので無意味な例ですが、おそらくCRTPやType Erasureと似た効果を発揮するような気がします。…と思ったけどアドレスが引けるかどうかを吟味するってことはinline展開は起きないんでしょうかね。この書き方が「一番書きやすい」か「一番早い」という例が見つかれば良いのですが。

おまけでconst char*に関してはどうなるのかを試しましたが、あんまり期待通りにはなりませんでした。

```cpp
template<const char* Str> void print(){
	std::cout << Str << std::endl;
}

const char  hw_obj[] = "Hello World";
const char* hw_ptr   = "Hello World";

void test(){
//	print<"const char">(); // error
	print<hw_obj>(); // needs C++11
//	print<hw_ptr>(); // error
}
```
Win環境で複数のRubyを管理

#Win環境で複数のRubyを管理

## Pik
* [参考] (http://heroween.hateblo.jp/entry/2014/07/04/144309)
* [ダウンロード](https://github.com/vertiginous/pik/downloads)

## インストール
* msiをダウンロードしてインストーラでインストール
* デフォルトのインストール先は`c:\pik`
* パスは通らないので、自身で環境変数を設定するか、毎回`c:\pik`上で作業をする

## 操作

* インストール済みのrubyをpikに登録

```shell-session

pik add  "c:\Program Files (x86)\Ruby-2.1\bin"

```
```shell-session:メッセージ
INFO: Adding:  [ruby-]2.1.2-p95
      Located at:  C:\Program Files (x86)\Ruby-2.1\bin
```
```shell-session

pik add  c:\Ruby200-x64\bin

```

```shell-session:メッセージ
INFO: Adding:  [ruby-]2.0.0-p451
      Located at:  C:\Ruby200-x64\bin
```

* リストを表示

```shell-session
pik list
```

```shell-session:メッセージ
=> ruby-2.0.0-p451
   ruby-2.1.2-p95
```

* 切り替え

```shell-session
pik use ruby-2.1.2-p95
```
* リストを表示

```shell-session
pik list
```

```shell-session:メッセージ
   ruby-2.0.0-p451
=> ruby-2.1.2-p95
```

* 切り替わったことをDosコマンドから確認

```shell-session
ruby --version
```

```shell-session:メッセージ
ruby 2.1.2p95 (2014-05-08 revision 45877) [i386-mswin32_100]
```
herokuでmatplotlibでSVGなグラフを書く

# はじめに
前にも似たようなことを書きましたが改めて。

## pyenv環境の準備
pyenv, pyenv-virtualenvをhomebrewでインストールしておきます。

```shell-session
$ mkdir qiita-sin
$ cd qiita-sin
$ pyenv virtualenv 2.7.8 qiita-sin
$ pyenv local qiita-sin
```

## 必要なライブラリのインストールとHerokuで動かす準備
```shell-session
$ pip install flask
$ pip install gunicorn
$ pip install matplotlib
$ echo python-2.7.8 > runtime.txt
$ pip freeze > requirements.txt
$ echo web: gunicorn app:app --log-file=- > Procfile
$ mkdir templates
```

# テンプレート、アプリの準備
## テンプレート

```html+jinja:sin.html
<!DOCTYPE html>
<html lang="ja">
    <head>
        <title>sinカーブテスト</title>
    </head>
    <body>
        <h1>sinカーブテスト</h1>
        {% autoescape false %}{{svgstr}}{% endautoescape %}
    </body>
</html>
```

## アプリ

```py:app.py
#!/bin/env python
# coding: utf-8

import os
import StringIO

from flask import Flask, render_template
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
import numpy as np

app = Flask(__name__)
app.debug = True

@app.route('/')
def do_sin():
    x = np.arange(-np.pi, np.pi, 0.1)
    y = np.sin(x)

    fig = plt.figure()
    plt.plot(x, y, label="sin")
    plt.legend(loc="best")

    strio = StringIO.StringIO()
    fig.savefig(strio, format="svg")
    plt.close(fig)

    strio.seek(0)
    svgstr = strio.buf[strio.buf.find("<svg"):]

    return render_template("sin.html", svgstr=svgstr.decode("utf-8"))

if __name__ == "__main__":
    port = int(os.environ.get("PORT", 5000))
    app.run(port=port)
```

# デプロイ
## gitに追加

```shell-session
$ git init
$ echo .python-version > .gitignore
$ git add .
$ git commit -m "initial commit" .
```

## herokuにデプロイ
```shell-session
$ heroku create
$ git push heroku master
```

numpyやmatplotlibのコンパイルがあるのでしばしコーヒーブレイク

# 完成
## 確認
```shell-session
$ heroku open
```

https://limitless-garden-3527.herokuapp.com/ が開く

# ポイント

* SVGの処理`（strio.buf.find("<svg")`と`decode("utf-8")`あたりがポイント
* 日本語の表示はあとでまた

# コメント
なんかいつの間にかCeder-14スタックとhttpsがデフォルトになってたんですね
Adobe MediaEncoderで拡張子.webmや.oggに変換する


##html5での動画再生がFirefoxでつまずく
Mac版Firefoxでhtml5の\<video\>タグでのmp4動画が再生できず困っていました。調べてみると

https://developer.mozilla.org/ja/docs/Web/HTML/Using_HTML5_audio_and_video

>「Firefox は MP4 および 3GP を特許で妨害されているためにサポートしません」

とあり、Firefoxでは\<video\>タグでのmp4再生はできないようです。

ではどうすればいいのか。
https://support.mozilla.org/ja/kb/viewing-html5-audio-and-video
>Vorbis オーディオ、Opus オーディオ、Theora ビデオ および VP8 ビデオ は、特許による制限なしで自由に使用することができる 音声圧縮/動画圧縮 形式です。これらの形式は、次の コンテナフォーマット に埋め込まれていれば Firefox で再生できます: Ogg (.ogg, .oga, .ogv, .ogx, .spx, .opus ファイル形式) または WebM (.webm ファイル形式)。

**WebM** または **Ogg** というファイル形式に変換する必要がありそうです。

##WebMやOggに動画を変換したい

変換ツールとしてはMiroVideoConverterというアプリがありました。

http://www.mirovideoconverter.com/

しかし、僕はAdobeCCを契約しているので、Adobe MediaEncoderで出来ないものかと思い調べるとこちらのページにそれらしい情報があり、

http://fr32c.free.fr/Am/index.php?post/2014/08/17/Adobe-Media-Encoder-AME-Ogg-WebM

リンクをたどると、プラグインを作ってくださっている方がいるということが分かりました。

##Adobe MediaEncoderでも変換できるようにしてくれるプラグイン


https://github.com/fnordware

結果、ここからバイナリファイルをダウンロードできました。

WebM: https://github.com/fnordware/AdobeWebM#download
Ogg: https://github.com/fnordware/AdobeOgg#download

プラグインファイルの置き場所は、ダウンロードしたファイルのReadMe内に

>Mac:
Ogg Premiere.bundle -> /Library/Application Support/Adobe/Common/Plug-ins/CSX/MediaCore

>Win:
Ogg.prm -> C:\Program Files\Adobe\Common\Plug-ins\CSX\MediaCore


>Replace "CSX" with your version.  For the latest Premiere Pro CC release, it will be "7.0".


とあり、僕の場合は Adobe MediaEncoder CC 2014 だったのですが、
/Library/Application Support/Adobe/Common/Plug-ins/7.0/MediaCore
でいけました（ディレクトリがなかったので作りました）。

ここに、ダウンロードした WebM Premiere.bundle と Ogg Premiere.bundle を設置しました。

Adobe MediaEncoderを起動して変換ダイアログを開くと、

![webm.png](https://qiita-image-store.s3.amazonaws.com/0/16914/5cc8f8f7-cdf4-8b64-1592-a6618ba9442d.png "webm.png")

このように、選択できるようになっています。
ありがたいです。

ところで以前はAdobe MediaEncoderは、AdobeCCを契約していても単体ではインストールできませんでした。Adobe Premireなどと同時にインストールしないといけなかったものが、最近単体でできるようになりましたね。



htmlは

```html
<video>
    <source src="movie/filename.mp4">
    <source src="movie/filename.webm">
    <p>動画を再生するには、videoタグをサポートしたブラウザが必要です。</p>
</video>

```
このようにすれば上から使用可能なファイル形式が使われるようです。
「HHKB Professional2」＆「かな入力」で最速の入力をめざす

## HHKB Professional2とかな入力は両立できる。

HHKB Professional2を買った。
英字配列、かっこいい！まっくろ！しかも無刻印！！
**しかし私はカナ入力ユ－ザ。**
英字配列に負けてロ－マ字入力には戻りたくない。

とは言ったものの…

* 「む」ってどこだ。
* 「ろ」なんて、キ－自体がない。
* 「－」もない。

**日本語キ－ボ－ドと同じ場所にないキ－がいくつかある。**

しかしそんなことはなかった。
以下は、私がHHKBでかな入力を続けていけると知った設定。

1. PFUのホ－ムペ－ジから「HHKBキー配列切替ツール」を落として英字入力に切り替え。
1. DIPスイッチの「SW1」をONにして、Lite拡張モ－ドにする。
1. すると、以下のキ－配置になる。
(※ ハイフンはFn+「も」)

**HHKBとカナ入力で、快適なハックライフを迎えよう。**

## キ－配置図
![hhkb_pro_2_kana_layout.jpg](https://qiita-image-store.s3.amazonaws.com/0/57085/05789537-e262-ba0b-116c-39cf5495eb93.jpeg)

### 新版書きました

1年使ってきた知見を注ぎ込んだ新版を書きました。[(今度こそ)HHKBとかな入力でHappyにHackする](http://qiita.com/blackawa/items/370b411301692226280b)もご覧ください。
楽天高速バスの残り数が少なくなったらつぶやくBotを作ってみた。

### 作ったもの

楽天高速バス残席数アラート
https://twitter.com/bus_alert_

楽天高速バスで
・東京から大阪行き
・夜行3列シート
のバスの残コース数が少なくなったらその日付をツイートします。

![ScreenClip.png](https://qiita-image-store.s3.amazonaws.com/0/50690/aabac233-0be0-6228-0bbf-8e006158285e.png)

以前、↓の記事で楽天バスのスクレイピングを実施するスクリプトを作っていたので、少し手直ししてTwitterBotにしてみました。

最近高速バスを使う場面がちょくちょくありますが、連休前やイベント前だと意外に早めに残席が無くなってたりするので、無くなりそうになったらつぶやくようにしています。
（例えば、まだ11月ですが、このBotを見ると年末の高速バスが埋まりつつある（！）のが分かります）


参考：
PHPで楽天高速バスサービスをスクレイピングしてDBに保存する - Qiita http://qiita.com/kure/items/8cd3f4f5678bb6b47d17
markdown+pandoc+css組み込み

wordpressに投稿する時、vimでmarkdownで書いてpandocでhtml形式にしてコピペでwordpressに投稿。という流れを行っているが、blogはもともとのstyle.cssを読み込んでくれるからいいんだけど、固定ページのcssは別で使いたいという状況             
で、pandocのオプション-cはcssを参照する形でhtml出力するんだけど、これを埋め込みにしたい。          
軽く調べた感じだといい感じな解決方法が見つからなかった。軽くというのは時間がかかりそうならもうwordpressのフォルダにcss置こうかなって妥協案が浮かんでいる(∀｀*ゞ)ﾃﾍｯ  
そんな今日この頃でした。( ´Д｀)ﾉ~ﾊﾞｲﾊﾞｲ
      
###追記
なんかwordpressで違うスタイルシート読み込ませるのもめんどそうだな〜 
[WordPressでページごとに別のスタイル（外部CSS）を適用させる方法](http://presentnote.com/apply-different-css-each-page/)
Chromeでデバグ中にjQuery等のライブラリをデバガから除外したい

ChromeのDev Toolsでブレークポイントを設置してデバグしているときにフレームがjQueryなどの実装の中に突入してしまうことがある。ほとんどの場合はjQueryの中身をデバグしたくない。

![debug.png](https://qiita-image-store.s3.amazonaws.com/0/19201/84c66a7d-c10c-6af9-ba57-6f2f7187793b.png)

この Manage framework blackboxing で URI patternを指定することでデバグから除外するライブラリを指定できる。

![スクリーンショット 2014-11-30 00.40.57.png](https://qiita-image-store.s3.amazonaws.com/0/19201/97a3759c-a1a5-0534-2b33-e27f826b61ee.png)

あるいは、デバグしている途中に右クリックして"Blackbox Script"を選択してもいい。

![スクリーンショット 2014-11-30 00.42.10.png](https://qiita-image-store.s3.amazonaws.com/0/19201/ea9aa146-4d97-4ba7-0ffe-44fb60dcaa60.png)

超便利。
JenkinsにMacのスレーブを追加してみる



## 概要

* さくらのVPSで動かしているJenkinsに、自宅のMacをスレーブとして追加する

### 環境

* master
	* CentOS 6.6 (Final)
	* Jenkins 1.580.1
* slave
	* OS X Yosemite 10.10.1

### 前提

* [Jenkinsでアクセス制御を設定してみる](http://qiita.com/kiarina/items/7f0001a834b448f925a8)
* [Jenkinsでスレーブとの接続ポートを固定化してみる](http://qiita.com/kiarina/items/2827776cc267cb9a6eb8)


## ノードを追加する

マスターで「Jenkinsの管理 > ノードの管理 > 新規ノード作成」を選択する。

![](https://www.evernote.com/shard/s138/sh/086febbe-f675-42b1-891a-4629ebc0e847/d24e0445730940c93acd9230804c81fc/deep/0/Jenkins.png)

ノード名を入力し、ダムスレーブを選択する。

![](https://www.evernote.com/shard/s138/sh/bd58d73d-068a-4bea-8063-6015a6ca9a03/ff2e6a919700ddaf31934b8e9fc1fd6d/deep/0/Jenkins.png)

上記のような感じで設定して保存するとノードが追加される。


## エージェントを起動する

### ノード情報を確認する

[Jenkinsの管理] > [ノードの管理] で一覧から追加したノードを選択する。

* [slave.jar] をダウンロードしてスレーブの適当な位置に配置する
* jnlpUrlを確認する - [jnlpUrl]
* secretを確認する - [secret]

### Launchd に登録する

以下のファイルを追加する。

```:~/Library/LaunchAgents/jp.fuga.hoge.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>UserName</key>
    <string>[実行ユーザ名]</string>
    <key>Label</key>
    <string>jp.fuga.hoge</string>
    <key>ProgramArguments</key>
    <array>
        <string>/usr/bin/java</string>
        <string>-jar</string>
        <string>[slave.jarへのパス]</string>
        <string>-jnlpUrl</string>
        <string>[jnlpUrl]</string>
        <string>-secret</string>
        <string>[secret]</string>
    </array>
    <key>KeepAlive</key>
    <true/>
    <key>RunAtLoad</key>
    <true/>
</dict>
</plist>
```

設定をロードする。

```bash
$ launchctl load ~/Library/LaunchAgents/jp.fuga.hoge.plist
```

この際に ``Operation not Permitted.`` のエラーが出た場合は、tmuxなどの仮想端末ツールなどを使用しない状態で実行しなおす。


## 参考

* [家庭で余ったMacをJenkinsのスレーブにする](http://blog.ishkawa.org/2014/10/18/1413635730/)
【CSS】シンプルな線を引く


線を入れたい場所に"hr"を入れて

```css
hr {
  height: 1px;
  border: none;
  border-top: 1px #000000 solid;
}
```

線の太さと色は変更できる

<hr>

このようなシンプルな線が表示される

solid まっすぐ
dashed 切り取り線みたいな点線
dotted 丸い点線
CaskでインストールしたDash.appがクラッシュした時の対処法2014/11


## 事案

cask install で入れたdash.appがクラッシュするようになっちゃった。

しかも、`brew cask uninstall cask`しても brewが止まっちゃう。


## 対処方法

おもむろに

```shell-session
$ sudo brew cask uninstall dash
```

コンソールに何も出力されないけど気にしない。

```shell-session
$ brew cask install dash
```

これで再インストールできてクラッシュしなくなった。
ちなみにDoc setは再インストールしても残ってた。

## 豆知識

ちなみに App storeでdashに課金してる場合は、cask install しちゃダメだよ。App Storeからインストールしないと、ライセンス復帰できない。
JavaScript Consoleに面白い出力をしているサービス

社内のもくもく勉強会でちょっとしたネタとして紹介した話。勉強会のときはネタバレしないように資料なしで発表したのだけど、せっかくなので簡単にまとめておきます。

そもそものきっかけは、ChromeのDevToolsが便利すぎるんだけど、意外に知らない機能が多いから調べて共有しようということでした。そしたらJavaScript Consoleにはただのログだけじゃなく、CSSでスタイル付きのログを出力したり、テーブルまで出力したりできることが分かったので、これはきっと面白い出力をしているサービスがあるに違いないと脱線してしまったのが発端です。

* https://developer.chrome.com/devtools/docs/console-api
* https://developer.chrome.com/devtools/docs/commandline-api

## 採用系

定番な使い方は採用メッセージです。JavaScriptコンソールを表示するようなユーザーはまず間違いなく開発者なので、開発者を釣るためのメッセージを出しているということでしょう。

* https://www.etsy.com/jp/

![141129-0002.png](https://qiita-image-store.s3.amazonaws.com/0/33668/ce2df4df-2760-0e2a-e22e-40131eacc8af.png)

Pinterestは少し凝っていて、最初に表示されるメッセージが伏線になっています。「joinUs()」っていかにもJavaScript関数っぽいですよね。実行してみると別のメッセージが表示された後に採用ページが開きました（404でしたが…）

* https://jp.pinterest.com/

![141129-0003.png](https://qiita-image-store.s3.amazonaws.com/0/33668/fa931414-2c71-da56-f3cc-4cdd1cfe1b22.png)

他にも、[Parse](https://parse.com/) がこの手の採用メッセージを表示していました。


## ロゴ系

単なるメッセージだけじゃなく、サービスのロゴを表示しているところもあります。mozillaのMDNは採用メッセージではあるのですが、アスキーアートでロゴも表示していてしゃれています。

* https://developer.mozilla.org/ja/

![141129-0001.png](https://qiita-image-store.s3.amazonaws.com/0/33668/80b56fec-65c4-e12e-0e7d-d27a72a7bdd4.png)

こちらも採用メッセージではあるのですが、つみきブログでもロゴを表示しています。

* http://blog.tsumikiinc.com/

![141129-0004.png](https://qiita-image-store.s3.amazonaws.com/0/33668/8493bfa1-e950-ef21-5d8f-fc756f3ab8c6.png)

## セキュリティ警告系

FacebookやGoogle+では、セキュリティに関する警告メッセージを表示しています。 [Self XSS](https://www.facebook.com/selfxss) という攻撃手法があるのを初めて知ったのですが、ユーザーが悪意ある第三者に言われるがまま自分でJavaScriptコードを実行してしまうのを防ぐことが目的のようで、有名サービスならではというか、とても興味深いです。

* https://www.facebook.com/

![141129-0005.png](https://qiita-image-store.s3.amazonaws.com/0/33668/61a310fb-4efa-500d-0746-49c230349fcd.png)

* https://plus.google.com/

![141129-0006.png](https://qiita-image-store.s3.amazonaws.com/0/33668/24f1ae81-f62b-a1cb-5d0c-c9d6c8267242.png)

* http://cookpad.com/

![image](https://qiita-image-store.s3.amazonaws.com/0/33668/87c26301-934c-b674-07c7-57027d4192a1.png)

## おもしろ系

サービスではないのですが、画像をドット絵チックに表示するサンプルも見つけました。事前にサンプリングしたデータを用意しておかなければならないようですが、目の付け所が面白いですね。

* http://ohgyun.github.io/console-text-image/example/example.html

![141129-0007.png](https://qiita-image-store.s3.amazonaws.com/0/33668/abcbfa15-5586-60d3-8dde-f13d71fb640c.png)

## おわりに

探してみるとあれこれ面白い出力をしているサービスが見つかったのですが、なかなか検索ビリティが低く、まだまだ他にもありそうな予感です。何か面白い出力を見つけた方はぜひタレコミお願いします。AWSとかYeomanはターミナルにもロゴを表示するので、何かしら出していそうだったのですが…。
OpsWorksでRails＋SQLiteアプリを立ち上げてみるときの設定

OpsWorksを試しに使ってみようと思い、細かいこと考えず、
RailsアプリのDBをSQLiteにして、とりあえず動かしてみたかった。

そういうわけで、こちらを参考にやってみた。
http://qiita.com/jwako/items/4890b5b2d9c26d1eb4b6


### secret_key_base
> Custom JSONに、secret.ymlのsecret_key_baseをJSONで指定

という部分は、OpsWorksの機能追加（？）の関係で、Appの設定の「Environment Variables」からSECRET_KEY_BASEを登録すればOKだった


### Custom JSON
DB用の設定はStackの設定の「Configuration management > Custom JSON」に入れた

```
{
  "deploy": {
    "railbook": {
      "database": {
        "host": "localhost",
        "database": "db/railbook.sqlite3",
        "adapter": "sqlite3"
      },
      "migrate": true
    }
  }
}
```

### その他

#### ログを見たいとき
```
# unicornのエラーログ
/srv/www/app-name/current/log/unicorn.stderr.log
```

#### Chefの設定を見たいとき（github上で見てもいいけど）
```
/opt/aws/opsworks/current以下
```


#### VPCを設定している場合

Layer設定の「Network > Automatically Assign IP Addresses」のPublic IP addressesを「YES」にしておかないと、Instanceを立ち上げた後ステータスが「booting」のまま変わらなくなる（他に回避策はあるんでしょうけど、とりあえず試したいときはYESにしておいた方がはやい）
Macで、FAT16フォーマットをする方法


ディスクユーティリティだとFAT32はできますが、FAT16フォーマットは出来ないよう。
とあるArduinoで必要だったので、手順まとめました。


### 1 ターミナルアプリを開く
_Application/Terminal.app_


### 2 ディスクのIDを確認する

ターミナルで、↓うつ。

	diskutil list
	
すると、

	/dev/disk0
	#:                       TYPE NAME                    SIZE       IDENTIFIER
	0:      GUID_partition_scheme                        *500.3 GB   disk0
	1:                        EFI EFI                     209.7 MB   disk0s1
	2:                  Apple_HFS Macintosh HD            499.4 GB   disk0s2
	3:                 Apple_Boot Recovery HD             650.0 MB   disk0s3
	/dev/disk2
	#:                       TYPE NAME                    SIZE       IDENTIFIER
	0:     FDisk_partition_scheme                        *15.7 GB    disk2
	1:             Windows_FAT_32 NO NAME                 58.7 MB    disk2s1
	2:                      Linux                         15.7 GB    disk2s2

/dev/disk0は、内蔵ハードディスク。
/dev/disk2s1がフォーマットしたいハードディスクになります。(NO NAMEって名前のディスクのIDはdisk2s1って意味)
多分、/dev/disk2s1, /dev/disk3s1, /dev/disk5s1 みたいなIDがふられてると思います。


### 3 マウント解除

指定のIDで、マウント解除コマンド↓を打ちます。

	diskutil unmount disk2s1


### 4 フォーマット

FAT16フォーマットに変更↓
*"disk2s1"*の部分は先ほどのIDで。

	sudo newfs_msdos -F 16 /dev/disk2s1

この時に間違ったやつをマウントしてしまうと大変なので要確認。
パスワードを聞かれるので自分のAdminのパスワードを入力します。（画面には****の文字とかはでません。）


### 5 出来たか確認

Disk Utility.appでちゃんとFAT16に変わっているか確認できます。

![Screen Shot 2014-11-29 at 22.36.41.png](https://qiita-image-store.s3.amazonaws.com/0/14330/b4dfc563-fc3e-ac14-b54d-a8be283a81ba.png "Screen Shot 2014-11-29 at 22.36.41.png")
TiSocial.Frameworkを使うとwindowのfocusイベントが取れなくなる問題

* Titanium SDK : 3.4.1
* MacOS : 10.10.1

## TiSocial.Framework

Titaniumでツイッター投稿するときサクッと作成できるモジュール。

* [viezel/TiSocial.Framework](https://github.com/viezel/TiSocial.Framework)
* gittio : [Titanium module: social • gitTio](http://gitt.io/component/dk.napp.social)
* 参考 : [Titaniumで簡単にTwitterにつぶやくならTiSocial.Frameworkが手軽](http://www.absolute-keitarou.net/blog/?p=416)

## 問題点

* [Windows loose "focus" event when activity view is loaded. · Issue #86 · viezel/TiSocial.Framework](https://github.com/viezel/TiSocial.Framework/issues/86)

TiSocial.Frameworkでツイート画面を開いて、ツイートするなりキャンセルするなりしたあと、それ以降全くfocusイベントが効かなくなる。
新しく画面をタブに追加しても、タブを移動してもfocusイベントが呼ばれなくなる。
最初私がなにか実装方法がおかしいかと思ったけどどうやらバグっぽい。

## 対処法

暗黒魔術です。上記issueに載っているのに加筆したもの。


	var fakeWin = Ti.UI.createWindow({
		backgroundColor : 'transparent',
		zIndex : 1500,
		touchEnabled : false,
		top : 20//fullscreen: true
	});
	fakeWin.open();
	fakeWin.close();



TiSocial機能を使ったあとに`fakeWin`を作成しすぐ消す。

これで現状回避できた。

最近Titaniumでこういう暗黒魔術あまり使ってなかったんだけど、久しぶりに使った。
数年前を思い出して懐かしい気持ちになった。

こうなる原因はissueの解決策載せてくれた人が記載してくれてて、といってもモジュールのソース追った方が絶対に良いのだが、いかんせんObjCからっきしなので辛い。
Swiftは勉強中なのでSwiftはちゃんと出来るようになりたい。
[Swift]キーボード以外をタッチするとキーボードが下がる方法

TextFieldを実装した際にキーボードでReturnやGoを押さない限りキーボードが下がらないのが気になり色々調べた結果一応わかったのでメモをします。

# オブジェクトの配置
キーボードを出すためにTextFieldを適当に配置します。

![スクリーンショット 2014-11-29 22.55.49.png](https://qiita-image-store.s3.amazonaws.com/0/60753/aff9567d-6a44-01a1-6969-d47984aff292.png)

そして次に、TapGestureRecognizerを配置します。

![スクリーンショット 2014-11-29 23.00.48.png](https://qiita-image-store.s3.amazonaws.com/0/60753/2edb2cb1-9d5a-0af4-0c4e-b39112f9a1cb.png)

ViewControlloerに配置すると以下の画像のようになります。

![スクリーンショット 2014-11-29 23.01.56.png](https://qiita-image-store.s3.amazonaws.com/0/60753/42f7e536-542f-0aa2-070e-66de93649ad2.png)


# コードの編集
先ほどのTapGestureRecognizerをaction接続します。
ここではnameはtapScreenとします
self.view.endEditing(true)をtapScreenの中に記述します。

```ViewController.swift
import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    @IBAction func tapScreen(sender: UITapGestureRecognizer) {
        self.view.endEditing(true)
    }

}

```
self.view.endEditing(true)を調べたところ
"UIView の endEditing(YES) が呼び出されることで、First Responder として編集状態になっている UITextField も endEditing:YES となり、UITextField の "Editing Did End" イベントが呼び出され、最終的に、キーボードが非表示になる感じのようです。"
と書いてありました。（http://program.station.ez-net.jp/special/handbook/objective-c/uiview/hide-keyboard.asp）

これはObjective-Cなので記述の仕方が若干変わりますが、内容としてはこんな感じだと思います。

# まとめ
これでNumberPadなどReturnがないキーボードでもキーボード外をタップすればキーボードがさがるようになりました。
結構用途がありそうです。
知っている人は知っていると思いますけど、初心者はこういうことをコツコツやっていかないとダメですねｗ
Androidアプリ制作備忘録


最近備忘録ばっかりだな...
と思いつつも投稿。

##Velloy便利。

[Androg](http://kwmt27.net/index.php/2014/07/10/how-to-use-volley-library/)

[TechBooster](http://techbooster.org/android/hacks/16474/)

この両方のサイトを見て頂けると分かりやすいですが
簡単に言うと

「Android開発においてネットワーク周りの学習コストが高い。
その多くの部分をカバーしてくれるモジュール」

APIを叩いたり
どこからか画像を引っ張ってくる際には非常に便利です。

サンプルで
> RequestQueue mQueue = Volley.newRequestQueue(this);

て感じで書いてあったんですけど、ListFragment等で使おうとした時には

```java
 public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //ListViewを生成する時に利用。

        // ImageLoaderをもっているアダプタを設定
        RequestQueue mQueue = Volley.newRequestQueue(getActivity());

		/* 以下省略 */

    }
```

という感じにしないと、どうして出来ないんだろうと
僕のように悩むことになります！



##xmlのあれやこれ。

AndroidStudioでxml使ってがしがしレイアウトを整えているわけですが

％で指定したい！
が上手く出来ずに悩んで調べておる所
**そんなこと出来ないよ？**　と書いてあり愕然としました。なんでや！
どうしてもやりたいときはプログラム側からやるしか無いかも...面倒(^_^;)

レイアウトは種類がいっぱいありますよね。
相対レイアウト(RelativeLayout)
グリッドビュー(GridView)
リストビュー(ListView)
テーブルレイアウト(TableLayout)
リニアレイアウト(LinearLayout)
使い方がよくわからんという方は

[Androidアプリ入門](http://androidguide.nomaki.jp/html/layout/layoutMain.html)
此方が参考になると思います。

ちなみに、絶対座標でレイアウトしたい！
という方って居ますかね？
一時期僕もやりたいなぁと思って探していたら「AbsoluteLayout」というものが引っかかったのですが
**今では非推奨らしいのでご注意下さい**


横幅、縦幅の指定に関しては

「wrap_content」・・・表示するものに合わせてビューサイズを自動で合わせる
「fill_parent」・・・画面いっぱいまで
「match_parent」・・・画面いっぱいまで

この子たちが良く出てきます。
fill_parent」「match_parent」こいつらなんで同じ機能なのに統一されてないの？
という所気になりますよね。

とあるサイトさんによるとfill_parentはAPI8以前のもので
match_parentが推奨されるようになったらしいです。なにか不具合などでもあったんですかね。

そろそろAndroid2.xを持つ方もいなくなり、4.x以降のユーザーをターゲットにするなら
match_parentを使うのが良いですね。

後、前述したように％での指定ができません。
xmlではなくjavaのほうでごにょごにょしましょう。
おそらくbitmapとか使わないと大きさ調整出来ないんだろうなぁ。(´Д｀)ﾊｧ…
iosならそのへん柔軟なのに！
SignalRでのエラー処理

ハブでは普通にエラー処理するのと変わらずいけると思います。

一点、HubExceptionと他Exceptionの使い分けがいまいちわかっていません。。

クライアントでの呼び出し側でもfail()かthen()でエラー処理を記述するので問題ないかと。


## サーバー側(ハブ)

```csharp

public class Person
{
    public string Id { get; set; }
    public string Name { get; set; }
    public int Age { get; set; }
    public string[] Attributes { get; set; }
}

public class HogeHub : Hub
{
    public HogeHub()
    {
    }

    public Task<string> GetHubDescription()
    {
        return Task.Run<string>(async () =>
        {
            await Task.Delay(3000);
            return "ほげげ";
        });
    }

    public Task<Person> GetPerson(string id)
    {
        var tcs = new TaskCompletionSource<Person>();
        var rnd = new Random();

        Task.Run(() =>
        {
            try
            {
                var num = rnd.Next(100);

                if (num % 7 == 0)
                {
                    tcs.SetCanceled();
                }
                else if (num % 3 == 0)
                {
                    throw new HubException("エラーが発生しました！！！！");
                }
                else
                {
                    tcs.SetResult(new Person()
                    {
                        Id = id,
                        Name = string.Format("山田太郎{0:00000}", id),
                        Attributes = Enumerable.Range(1, 10).Select<int, string>((i) => { return string.Format("属性{0:00000}", i); }).ToArray(),
                        Age = 30
                    });
                }
            }
            catch(Exception e)
            {
                tcs.SetException(e);
            }
        });

        return tcs.Task;
    }

    public Task ThrowError()
    {
        return Task.Run(() =>
        {
            throw new Exception("何らかのエラーが発生しましたYO");
        });
    }
}
```


## クライアント

エラーボタン(ID:error-button)、ほげボタン(ID:hoge-button)ページに対するスクリプトコード

```typescript
/// <reference path="Scripts/typings/jquery/jquery.d.ts" />
/// <reference path="Scripts/typings/signalr/signalr.d.ts" />

$(() => {

    var connection = $.hubConnection(＜ハブURL＞, true);
    var hub = connection.createHubProxy("hogeHub");

    $("#error-button").click(() => {
        hub.invoke("throwError").then(
            () => {
                console.log("throwError() 成功");
            },
            (reasons) => {
                console.dir(reasons);
            });
    });

    $("#hoge-button").click(() => {
        hub.invoke("getPerson", 10).then(
            (person) => {
                console.log("getPerson() 成功");
                console.dir(person);
            },
            (reasons) => {
                console.dir(reasons);
            });
    });


    connection.start().then(
        () => {
            console.log("[" + new Date() + "] 開始");
            hub.invoke("getHubDescription").then(
                (result) => {
                    console.log("[" + new Date() + "] 応答：" + result);
                },
                (reasons) => {
                    console.dir(reasons);
                });
        },
        (reasons) => {
            console.dir(reasons);
        });
});
```
swiftでアプリ作ってみたらリリースヴィルドで落ちた(Releaseビルドで落ちた)

## アプリ作ったのに
タイトル通り、リリースビルドで落ちました。
全swiftでTodoアプリを作ったんですが、なんと***2件目のタスクを入れると落ちる***という非常に***仕事をさせてくれないタイプのアプリ***となってしましました。
苦労してリジェクトの波を乗り越え初のswiftアプリリリースとなろうものが、まさかのリリースビルドだけで落ちる状態に・・・

いったいなにが原因なのか？

##とりあえずどこが原因か？
挙動的に以下のメソッドで落ちる・・・

```
   @IBAction func finish()
    {
        // task for me
        let task: Task = self.editTask
        task.content = self.contentTextView.text
        task.date = NSDate()
        
        if !(task.venueName != nil) {
        task.venueName = "" }
        
        if (task.lat == nil){
            task.lat = 0}
        if (task.lng == nil){
            task.lng = 0}
        
        task.check = 0
        task.notif_flag = false
        task.distFromNow = 100000
        
        task.t_id = NSString(format: "%f", NSDate().timeIntervalSince1970)
        
        task.managedObjectContext?.MR_saveWithOptions(MRSaveContextOptions(1),
            completion:
            {(success:Bool, error:NSError!) -> Void in
                self.dismissViewControllerAnimated(true, completion: nil)
        })
        
        GAI.sharedInstance().defaultTracker.send(GAIDictionaryBuilder.createEventWithCategory("AddTask", action: "tap", label: "finish", value: 0).build())
    }

```

やっていることはMagicalRecordでcoredataに情報を追加しているってだけ。
え？コードが汚い？それは言っちゃダメだ///

試しにTestFlight経由でアプリを突っ込んでみた・・・▷落ちる。

## 暫定的な対策
リリースビルドといえばOptimazation Levelが違うとか・・・
具体的に何が違うのかまで知らない。

でも外人も[stack overflow](http://stackoverflow.com/questions/25629841/app-crashes-in-release-build-but-not-in-debug)で「Optimizationじゃね？」って言ってるし。
以下のように変更して再度TestFlight経由で送る。
![スクリーンショット 2014-11-29 22.44.13.png](https://qiita-image-store.s3.amazonaws.com/0/31237/011aa8f0-2171-66e4-1b83-e3fcc7ed40c3.png)


すると・・・▷落ちない！！
つまり結論として
###### swiftのリリースビルドで落ちるのは、swiftのComplilerがリリースビルドではなんや悪さしている。
ということで。

今回のコードの中ではMagicalRecordを使っていて、Bridge経由でこれを使っている。
問題が特定しにくい、とりあえずCrashlyticsを仕込んでみた。

原因は調査中です、今回はここまで。



### TestFlightで新しいビルドが出ない！
なかなか待っても**新しいビルドがテストフライトに表示されない**・・・
そんな時は

![スクリーンショット 2014-11-29 22.49.13.png](https://qiita-image-store.s3.amazonaws.com/0/31237/b37d6d5e-2376-8b16-1ed6-6f970419e665.png)
これの右側のスイッチを一回オフにしてからオンにしてください。
LAN 内に GitHub WebHooks の HTTP リクエストを届ける

git push 等による GitHub からの HTTP リクエストを受信するためには、GitHub WebHooks を利用するアプリケーションは GitHub から見えるサーバ上に設置する必要があります

今回は、GitHub から直接 HTTP リクエストを受信できない LAN 内の Drone に、GitHub から送信された HTTP リクエストを受信させてみました

## 構成

![drone.png](https://qiita-image-store.s3.amazonaws.com/0/36202/96ba94a3-9503-6918-92e2-90fe741986d7.png)

GitHub からの POST リクエストを、EC2 上のスクリプトで受信して、
[MQTT as a Service sango](https://sango.shiguredo.jp/) に POST リクエストを PUBLISH することで、
LAN 内の MQTT Subscriber に GitHub からの POST リクエストが送られ、
さらに、MQTT Subscriber は受信した POST リクエストを Drone に送ります


## EC2

GitHub からの POST リクエストを受信して、そのまま sango に PUBLISH します

下記のような適当なスクリプトを準備します

```rb
require 'socket'
require 'mqtt'

sango_host = ''
sango_port = 1883
username = ''
password = ''
topic = [username, 'github'].join('/')

Socket.tcp_server_loop('0.0.0.0', 80) do |sock, addr|
  payload = ''
  length = nil

  loop do
    buffer = sock.recv(1024)
    break if buffer == 0

    payload += buffer

    if length
       body = payload.split("\r\n\r\n")[1]
       if body
         break if body.length == length.to_i
       end
    else
      if payload =~ /content-length:\s(\d+)\r\n/i
        length = $1
      end
    end
  end

  client = MQTT::Client.connect(
    :host => sango_host,
    :port => sango_port,
    :ssl => false,
    :username => username,
    :password => password
  )
  client.publish(topic, payload)

  sock.write("HTTP/1.1 200 OK\r\n\r\n")
  sock.close
end
```

## LAN

### MQTT Subscriber

下記のようなスクリプトで、あらかじめ sango に SUBSCRIBE しておきます
メッセージを受信すると、そのまま Drone に送信されます

```rb
require 'socket'
require 'mqtt'

drone_host = '127.0.0.1'
drone port = 80
sango_host = ''
sango_port = 1883
username = ''
password = ''
Topic = [username, 'github'].join('/')

client = MQTT::Client.connect(
  :host => sango_host,
  :port => sango_port,
  :ssl => false,
  :username => username,
  :password => password
)
client.get(Topic) do |topic, msg|
  sock = TCPSocket.open(drone_host, drone_port)
  sock.write(msg)
  sock.close
end
```

## 追記

直接 sango に PUBLISH する場合は下記を参照

[GitHub から MQTT PUBLISH されたメッセージを受信して、POST リクエストで送信する - Qiita](http://qiita.com/Hexa/items/78b977014726e8c6af7e)
OpenCVインストール備忘録

###OpenCVをUbuntuにインストールする備忘録
Ubuntu14.04LTS
fffmpegとかgitとかpkg-config,cmake,cmake-qt-guiは事前にインストールしておく

SourceForgeからZipとるなりGitHubからCloneするなりしてソース入手
多分最新版が以下で取れるはず

```bash
$ git clone https://github.com/Itseez/opencv.git
```

ソースのルートディレクトリにreleaseディレクトリを作成して、cmake-gui起動

```bash
$ mkdir release
$ cd release
$ cmake-gui
```

Configureをボタンを一回押すとオプション一覧が出てくるので確認して、もう一度Configureを押す。
Generateを押すとMakefileが作成されるのであとは煮るなり焼くなり。

```bash
$ make -j8
$ sudo make install
```
iframe内のコンテンツサイズに応じて、frameの高さを動的に変更する方法

**iframe内のコンテンツサイズに応じて、frameの高さを動的に変更する方法**

`docFrame.contentDocument.body.scrollHeight`
でも
`docFrame.contentWindow.document.body.scrollHeight`
でもサイズ取得できた。contentWindowがw3c基準でない。

動作確認バージョン

* IE9
* Chrome　39.0
* FireFox　33

```html:aaa.html
<!DOCTYPE HTML>
<html>
<script type="text/javascript">
<!--
function change_frame_height(frm){
  var contentsHeight;
  var docFrame = document.getElementById(frm);
  try{
    contentsHeight = docFrame.contentWindow.document.body.scrollHeight;
  }catch(e){}
  if(!isNaN(contentsHeight) && !contentsHeight == 0){
    docFrame.height = contentsHeight;
  }else{
    docFrame.height = 120;
    docFrame.scrolling="auto"
  }
}
//-->
</script>
<head>
</head>
<body>
	<table border="3">
	<tr>
	<td>lt</td><td>ct</td><td>rt</td>
	</tr>
	<tr>
	<td>l</td>
	<td>
	<iframe id="newsframe" onLoad="change_frame_height(this.id)" 
		frameborder="0" width="100%" marginheight="0" 
		marginwidth="0" scrolling="no" src="bbb.html">
	</iframe>
	</td>
	<td>r</td>
	</tr>
	<tr>
	<td>lb</td><td>cb</td><td>rb</td>
	</tr>
	</table>
</body>
</html>
```

```html:bbb.html
aaaa</br>
aaaa</br>
aaaa</br>
aaaa</br>
aaaa</br>
aaaa</br>
aaaa</br>
```
Ruby | eto gem で十干十二支を取得できるようにする #ruby

# Ruby | eto gem で十干十二支を取得できるようにする #ruby
## <i class="fa fa-cubes" style="font-size:1em;"></i> 概要
eto gem で十干十二支を取得できるようにします。
## <i class="fa fa-cube" style="font-size:1em;"></i> eto gem について
eto gem って何？というかたはこちらを参照。
[Ruby | 西暦年をもとに十二支（文字列 / emoji ）を取得する eto gem を作成した](http://qiita.com/tbpgr/items/c885b4902f4e8cd6011c)
## <i class="fa fa-file-text-o" style="font-size:1em;"></i> version 1.0.1 追加仕様
### Eto.name(year, japanese_zodiac = true)
* japanese_zodiac が true の場合は 十二支を返却する
* japanese_zodiac が false の場合は 十干十二支を返却する

* 利用想定

~~~ruby
require 'eto'

Eto.name(1965) # => "巳"
Eto.name(1965, true) # => "巳"
Eto.name(1965, false) # => "乙巳"
Eto.name(1977) # => "巳"
Eto.name(1977, true) # => "巳"
Eto.name(1977, false) # => "丁巳"
~~~

* 利用想定( Command Line Interface)

~~~bash
$ eto name 1977
巳
$ eto name 1978
午
$ eto name 1965 --not-japanese_zodiac
丁巳
$ eto name 1977 --not-japanese_zodiac
乙巳
# alias
$ eto name 1965 --njz
乙巳
~~~

## <i class="fa fa-arrow-circle-right" style="font-size:1em;"></i> 参照
<i class="fa fa-github" style="font-size:1em;"></i> [eto GitHub](https://github.com/tbpgr/eto)
<i class="fa fa-external-link" style="font-size:1em;"></i> [eto RubyGems](http://rubygems.org/gems/eto)
Xfce4 設定備忘録1 温度センサ表示＆Windowsみたいにショートカットでウィンドウ操作

Xfce4快適使用のための設定
便利なパネルプラグインとWindows風なショートカットの設定
###温度センサ表示

```bash
$ sudo apt-get install xfce4-sensors-plugin lm-sensors
$ sudo sensors-detect
```

Xfceのパネルにセンサープラグインが追加されているので適宜設定追加

###Windows風なショートカット
* アプリケーション起動  
設定マネージャ→キーボード→アプリケーションショートカットタブ  
以下コマンドとショートカットを追加  

|コマンド| ショートカットキー|Windows相当|
|---|---|---|
|gnome-system-monitor| Shift+Ctrl+Esc|タスクマネージャ|
|xfrun4|Super+R|ファイル名を指定して実行|
|thunar|Super+E|エクスプローラ|


* ウィンドウ操作  
設定マネージャ→ウィンドウマネージャ→Keyboardタブ
以下ショートカットを設定

|動作|ショートカットキー|
|------------------------------|------------------|
|ウィンドウを最大化|Super+Up    |
|ウィンドウを画面左にタイル表示-|Super+Left        |
|ウィンドウを画面右にタイル表示-|Super+Right       |

逐次よく使うものは追加します  
設定ファイルはまだ探してないです
自動化したいですね
mapで利用する関数の引数を固定する


### 関数の引数を固定する方法
mapを使うときに、一部の引数だけを固定したい場合がよくあるので、メモしておく。

functools.partialを使う。
このオブジェクトは引数付きで呼び出された関数のように振る舞う。

２つの引数を足し合わせて返す関数につくり、その後で片方の引数のみを固定する場合を考える。

```python
In [1]: import functools

In [2]: def f(a, b):
   ...:         return a + b
   ...:

In [3]: map(functools.partial(f, b=1), [1, 2, 3])
Out[3]: [2, 3, 4]
```

### 参考
[functools.partial](http://docs.python.jp/2/library/functools.html#functools.partial)
運用で使うUNIXコマンド（備忘録的なもの）

# <i class="fa fa-arrow-circle-right" style="font-size:1em;"></i> 更新履歴

* 2014/11/29
@heliac2000さんのご指摘を反映しました。
また思い出したコマンドを追記。今後も不定期に追記していくかもしれません。タイトルも変えました。ほぼ単発のコマンドということに気づいたので。

* 2014/12/28
@tukiyo3さんのご指摘を反映しました。

#ユーザが所有するファイルを一覧表示する
`find / -user ユーザID -ls`

**用途**
ユーザを削除する前に影響を受けるファイルがないか確認する、など。

#更新されたファイルを一覧表示する
`find / -mtime -日数 -ls`
<日数>日前から現在までに更新されたファイル

**用途**
サーバに導入した定義の洗い出し、リリース後だとログファイルの洗い出しなど。

#ディレクトリのディスク使用量を一覧表示する
`du -sh .[^.]* *`

**用途**
容量を食っているディレクトリの特定。

#直前のディレクトリに戻る
`cd -`

**用途**
2つのディレクトリ間を行ったり来たりするときに。サーバ作業ではよく使う。

#まだ存在していないログファイルをtail

```bash:GNU_tail
tail -F tmp.log 2>/dev/null
```

```bash:それ以外のtail
until tail -f tmp.log 2>/dev/null; do sleep 10; done
```

**用途**
あまり無いかもしれないが、システムや新機能をリリースした直後の稼働監視など。

#端末のスクリーンをクリア

`clear`

**用途**
TeraTermなどの端末画面をきれいにしたい場合に使用。端末作業の証跡を取る前に実行したりする。TeraTermなどの端末ソフト側でも大抵行えるけど、コマンドで実行すると楽。

#端末サイズをウインドウサイズに合わせる

`resize`

**用途**
Linuxでは気にする必要はないが、AIXなどはデフォルトの端末設定でうっかりTeraTermのサイズを変更してしまうと端末サイズとウインドウサイズが合わなくなり、スクリーンの表示がめちゃめちゃになってしまう（特にviやsmittyなどの表示がひどいことに）。
resizeはそれを同期してくれるコマンド。具体的にはTERMCAPと端末の設定をウインドウサイズに合わせてくれる。


#障害メッセージが出ていないかを確認する

`grep -v info /var/adm/messages`

※/var/adm/messages：システムログ。OSやログの設定により出力先が異なる。

**用途**
Informationレベル以外のメッセージが出力していないかを確認する。サーバの挙動がおかしいぞ、となったら何はともあれこれを打つと良い。
ただし、これで全てのエラーメッセージが捕捉できるわけではないため注意すること。OSによってはメッセージをシスログ以外に吐いていることも。
例
・AIX  ：errpt -a
・HP-UX：/var/opt/sfm/log/sfm.log

また、メッセージ内容からの特定が難しい事象の場合、事象発生付近のメッセージ群と通常時のメッセージ群を突き合わせて差異を見つけるといったことを行うこともあるので、調査資料として採取する場合はシステムログは丸ごと回収するのが良い。

ちなみに、シスログは運用によっては馬鹿でかいサイズになることも少なくない。サイズが数百MB〜GBクラスの場合に単純に上記コマンドを実行すると標準出力の嵐となることもあるため、コマンドの実行前には、ファイルサイズをよく見て実行方法を工夫する必要がある。
例えば、サイズが大きい場合は、 `tail -n 1000 messages | grep -v info` や `grep 日時 messages | grep -v info` などのように打つと良い。
Erlang で HTTP/2 サーバー Lucid を書きました

Erlang で HTTP/2 サーバー Lucid を書きました.
https://github.com/tatsuhiro-t/lucid

この記事では特に HTTP/2 の仕様に関して説明はしませんので, HTTP/2 に興味ある方は [HTTP/2 Advent Calendar](http://qiita.com/advent-calendar/2014/http2) を読む, あるいは [HTTP/2 ID](http://http2.github.io/http2-spec/index.html) を読む等をおすすめします.

Lucid は私が初めて Erlang で書いたアプリケーションです. 私は Programming Erlang を 7 年程前に買いました. そのころは日本語訳がまだでていませんでした. 半分ほど読んでからほったらかしにして 7 年程たちました. その間一切 Erlang のコードは書いていません.
さて私の twitter TL において "すごい E 本" の日本語版出版の話題が連日盛り上がっていました. そんなに盛り上がるなら何かあるのだろうということで, [原文](http://learnyousomeerlang.com/)を Web で読み始めました. The Count of Applications の章まで読んで飽きがきました. しかしそれなりに分かった気になったので一つサーバーを書いてみようと思い立ちました. どのプロトコルを実装するかは大きな選択でしたが, まだだれもやっていなさそうである HTTP/2 を実装することにしました. HTTP/2 については C で [nghttp2](https://nghttp2.org) を実装しているので, ワタシ HTTP/2 チョットデキル. そこで [Buckets of Sockets](http://learnyousomeerlang.com/buckets-of-sockets) の章を斜め読みし, supervisor や acceptor 辺りを参考に実装をはじめました.

いくつか HTTP/2 に関連した実装の話題を書きたいと思います.

TLS で HTTP/2 を使う場合, TLS 拡張の [ALPN](http://tools.ietf.org/html/rfc7301) で HTTP/2 をネゴシエートしなければなりません. Erlang の [ssl](http://erlang.org/doc/man/ssl.html) モジュールは ALPN をサポートしていません. [NPN](https://technotes.googlecode.com/git/nextprotoneg.html) はサポートしているので今回は NPN を使います. NPN を使うのは簡単で `ssl_options` に `{next_protocols_advertised,[<<"h2-14">>]}` を追加するだけです. NPN ではクライアントがプロトコルを選択するので実際にネゴシエートしたプロトコルを得るには `ssl:negotiated_next_protocol(Socket)` を使います.

サーバーの基本的なアーキテクチャは Buckets of Sockets の sockserv を踏襲しています. HTTP/2 では 1 接続上に複数のリクエスト (ストリーム) が多重化されています. HTTP/2 ではフレームという単位で接続上のデータを処理をしますが Erlang のすばらしいバイナリデータサポートによりパーサーは簡単です. リクエストを受け取ったらプロセスを作成して処理を任せます. それらプロセスからレスポンスデータが来たら, フレームにシリアライズしてクライアントへ送信します.

HTTP/2 のヘッダー圧縮 HPACK も実装しています. [huffmandata.erl](https://github.com/tatsuhiro-t/lucid/blob/master/src/huffmandata.erl) は巨大なファイルですが, ハフマン符号化のためのテーブルをパターンマッチングのために自動生成したものです. ハフマン符号化はビットレベルの操作なので C などではシフトなど面倒ですが, Erlang は強力な binary comprehension と bitstring のお陰でミスの少ないコードが書けます.

テスト用にこの HTTP/2 サーバーは https://nghttp2.org:3456 で動いています. Chrome M39 では spdy/4 を有効にしても `ERR_SPDY_INADEQUATE_TRANSPORT_SECURITY` というエラーでアクセスできません. これは Chrome が AEAD 暗号化スイートを要求するのに対し, Erlang の ssl モジュールがそれに非対応だからです (この制限は, HTTP/2 仕様からは取り除かれる可能性があります). Firefox も同様ですが, about:config で `network.http.spdy.enforce-tls-profile` を `false` にするとこの制限を外すことができてアクセス可能になります. nghttp2 に含まれる nghttp クライアントはチェックをしていないのでアクセス可能です.
featuresテストで画像にNo route matchesが出た場合


## 結論
自分の場合は、単純にcss内の背景画像の指定が間違っていた（image-url指定していなかった）

## エラー文

```
Failures:

  1) Titles display correct content pc display correct content
     Failure/Error: Unable to find matching line from backtrace
     ActionController::RoutingError:
       No route matches [GET] "/img/common/icn-favorite-star2.png"
```

## 取り敢えずtest.log

`assets` 指定されてない…ということは…？

```test.log
...
Started GET "/assets/common/gu/icon-gn-header.png" for 127.0.0.1 at 2014-11-29 20:58:48 +0900
Started GET "/img/common/icn-favorite-star2.png" for 127.0.0.1 at 2014-11-29 20:58:48 +0900
Started GET "/assets/recipe/article-social-logo.png" for 127.0.0.1 at 2014-11-29 20:58:48 +0900
...
```

案の定 `image-url` 漏れでした、、

```css
background: url(../img/common/icn-favorite-star2.png)  no-repeat -12px 0;
```